@cartanova/qgrid-cli 2.7.2 → 2.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/bundle/dist/application/queries.generated.js +2 -1
  2. package/bundle/dist/application/request-log/json-schema-type-text.js +58 -2
  3. package/bundle/dist/application/request-log/request-log.model.js +44 -3
  4. package/bundle/dist/application/request-log/request-log.types.js +10 -4
  5. package/bundle/dist/node_modules/.pnpm/{vite@8.0.3_@emnapi_core@1.11.2_@emnapi_runtime@1.11.2_@types_node@25.0.7_esbuild@0.27.4_2519c2e8d8013fcbc7b443879bc9da6d → vite@8.0.3_@emnapi_core@1.11.2_@emnapi_runtime@1.11.2_@types_node@25.0.7_esbuild@0.27.4_5b35fc1fb85d2af4d105e0d74f940f50}/node_modules/vite/dist/node/module-runner.js +2 -2
  6. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +2 -2
  7. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +2 -2
  8. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +3 -3
  9. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +2 -2
  10. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/chunks/index.DdgEv5B1.js +2 -2
  11. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +2 -2
  12. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/chunks/test.DNmyFkvJ.js +2 -2
  13. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +2 -2
  14. package/bundle/dist/node_modules/.pnpm/{vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618}/node_modules/vitest/dist/index.js +2 -2
  15. package/bundle/dist/testing/setup-mocks.js +2 -2
  16. package/bundle/src/application/queries.generated.ts +3 -0
  17. package/bundle/src/application/request-log/json-schema-type-text.test.ts +115 -1
  18. package/bundle/src/application/request-log/json-schema-type-text.ts +91 -0
  19. package/bundle/src/application/request-log/request-log.model.test.ts +166 -0
  20. package/bundle/src/application/request-log/request-log.model.ts +52 -6
  21. package/bundle/src/application/request-log/request-log.types.ts +11 -2
  22. package/bundle/src/application/sonamu.generated.http +6 -2
  23. package/bundle/web-dist/client/assets/index-CPYQIUqO.js +106 -0
  24. package/bundle/web-dist/client/assets/index-D9xE_tO7.css +1 -0
  25. package/bundle/web-dist/client/assets/logs-UlTjUAUB.js +1 -0
  26. package/bundle/web-dist/client/assets/{monit-qap66dhi.js → monit-CVNZnd8j.js} +1 -1
  27. package/bundle/web-dist/client/assets/{routes-CV07Pzde.js → routes-CF7Jlmfi.js} +1 -1
  28. package/bundle/web-dist/client/assets/{services.generated-CSW8bhCP.js → services.generated-CA7oRRYY.js} +4 -4
  29. package/bundle/web-dist/client/assets/settings-N-8sXHl6.js +1 -0
  30. package/bundle/web-dist/client/assets/show-CGhg0fbn.js +2 -0
  31. package/bundle/web-dist/client/assets/{tokens-Dt3gfkwP.js → tokens-DaEtcsoL.js} +1 -1
  32. package/bundle/web-dist/client/assets/{use-oauth-login-flow-Cwi0HtJY.js → use-oauth-login-flow-Eovfx07A.js} +1 -1
  33. package/bundle/web-dist/client/index.html +3 -3
  34. package/bundle/web-dist/server/assets/{lazyRouteComponent-0y-znAfz.js → lazyRouteComponent-tS-rTksX.js} +2 -2
  35. package/bundle/web-dist/server/assets/{logs-CJBbHM3_.js → logs-ttf79emP.js} +3 -14
  36. package/bundle/web-dist/server/assets/{monit-8WAsPETB.js → monit-CJBUH0l6.js} +2 -2
  37. package/bundle/web-dist/server/assets/{plus-9das21ju.js → plus-BuSuoeon.js} +1 -1
  38. package/bundle/web-dist/server/assets/{react-dom-zmEq8BVp.js → react-dom-7_SqhNWR.js} +1 -1
  39. package/bundle/web-dist/server/assets/{routes-B6bX3o41.js → routes-z79f1sOM.js} +3 -3
  40. package/bundle/web-dist/server/assets/{services.generated-DyPeBI00.js → services.generated-B5UkNmgc.js} +20 -38
  41. package/bundle/web-dist/server/assets/{settings-D1u5WdpP.js → settings-nCv71sax.js} +2 -2
  42. package/bundle/web-dist/server/assets/{show-Cr7vwR0l.js → show-CLrA4ZQ-.js} +158 -37
  43. package/bundle/web-dist/server/assets/{tokens-BumM0gnH.js → tokens-BwlkZELV.js} +3 -3
  44. package/bundle/web-dist/server/assets/{use-oauth-login-flow-DmsHGOlx.js → use-oauth-login-flow-B2QllVMi.js} +1 -1
  45. package/bundle/web-dist/server/entry-server.generated.js +10 -11
  46. package/package.json +9 -4
  47. package/skills/qgrid/references/request-log-run-lifecycle.md +9 -1
  48. package/skills/qgrid/references/sonamu-api-web-flow.md +3 -1
  49. package/bundle/web-dist/client/assets/index-BldeEvAK.css +0 -1
  50. package/bundle/web-dist/client/assets/index-DkAXPF9q.js +0 -106
  51. package/bundle/web-dist/client/assets/logs-DlI6OojL.js +0 -1
  52. package/bundle/web-dist/client/assets/settings-CdYub4yo.js +0 -1
  53. package/bundle/web-dist/client/assets/show-DA1L8DVD.js +0 -2
@@ -1,4 +1,4 @@
1
- //#region ../../node_modules/.pnpm/vite@8.0.3_@emnapi+core@1.11.2_@emnapi+runtime@1.11.2_@types+node@25.0.7_esbuild@0.27.4_2519c2e8d8013fcbc7b443879bc9da6d/node_modules/vite/dist/node/module-runner.js
1
+ //#region ../../node_modules/.pnpm/vite@8.0.3_@emnapi+core@1.11.2_@emnapi+runtime@1.11.2_@types+node@25.0.7_esbuild@0.27.4_5b35fc1fb85d2af4d105e0d74f940f50/node_modules/vite/dist/node/module-runner.js
2
2
  let SOURCEMAPPING_URL = "sourceMa";
3
3
  SOURCEMAPPING_URL += "ppingURL";
4
4
  const isWindows = typeof process < "u" && process.platform === "win32";
@@ -1262,4 +1262,4 @@ function exportAll(exports, sourceModule) {
1262
1262
  //#endregion
1263
1263
  export { ESModulesEvaluator, EvaluatedModules, ModuleRunner, createDefaultImportMeta, createNodeImportMeta, createWebSocketModuleRunnerTransport, normalizeModuleId, ssrDynamicImportKey, ssrExportAllKey, ssrExportNameKey, ssrImportKey, ssrImportMetaKey, ssrModuleExportsKey };
1264
1264
 
1265
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLXJ1bm5lci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vdml0ZUA4LjAuM19AZW1uYXBpK2NvcmVAMS4xMS4yX0BlbW5hcGkrcnVudGltZUAxLjExLjJfQHR5cGVzK25vZGVAMjUuMC43X2VzYnVpbGRAMC4yNy40XzI1MTljMmU4ZDgwMTNmY2JjN2I0NDM4NzliYzlkYTZkL25vZGVfbW9kdWxlcy92aXRlL2Rpc3Qvbm9kZS9tb2R1bGUtcnVubmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBTT1VSQ0VNQVBQSU5HX1VSTCA9IFwic291cmNlTWFcIjtcblNPVVJDRU1BUFBJTkdfVVJMICs9IFwicHBpbmdVUkxcIjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9zaGFyZWQvdXRpbHMudHNcbmNvbnN0IGlzV2luZG93cyA9IHR5cGVvZiBwcm9jZXNzIDwgXCJ1XCIgJiYgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiO1xuLyoqXG4qIFVuZG8ge0BsaW5rIHdyYXBJZH0ncyBgL0BpZC9gIGFuZCBudWxsIGJ5dGUgcmVwbGFjZW1lbnRzLlxuKi9cbmZ1bmN0aW9uIHVud3JhcElkKGlkKSB7XG5cdHJldHVybiBpZC5zdGFydHNXaXRoKFwiL0BpZC9cIikgPyBpZC5zbGljZSg1KS5yZXBsYWNlKFwiX194MDBfX1wiLCBcIlxcMFwiKSA6IGlkO1xufVxuY29uc3Qgd2luZG93c1NsYXNoUkUgPSAvXFxcXC9nO1xuZnVuY3Rpb24gc2xhc2gocCkge1xuXHRyZXR1cm4gcC5yZXBsYWNlKHdpbmRvd3NTbGFzaFJFLCBcIi9cIik7XG59XG5jb25zdCBwb3N0Zml4UkUgPSAvWz8jXS4qJC87XG5mdW5jdGlvbiBjbGVhblVybCh1cmwpIHtcblx0cmV0dXJuIHVybC5yZXBsYWNlKHBvc3RmaXhSRSwgXCJcIik7XG59XG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuXHRyZXR1cm4gIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPSBcImZ1bmN0aW9uXCI7XG59XG5jb25zdCBBc3luY0Z1bmN0aW9uID0gYXN5bmMgZnVuY3Rpb24oKSB7fS5jb25zdHJ1Y3RvcjtcbmxldCBhc3luY0Z1bmN0aW9uRGVjbGFyYXRpb25QYWRkaW5nTGluZUNvdW50O1xuZnVuY3Rpb24gZ2V0QXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uUGFkZGluZ0xpbmVDb3VudCgpIHtcblx0aWYgKGFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvblBhZGRpbmdMaW5lQ291bnQgPT09IHZvaWQgMCkge1xuXHRcdGxldCBib2R5ID0gXCIvKmNvZGUqL1wiLCBzb3VyY2UgPSBuZXcgQXN5bmNGdW5jdGlvbihcImFcIiwgXCJiXCIsIGJvZHkpLnRvU3RyaW5nKCk7XG5cdFx0YXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uUGFkZGluZ0xpbmVDb3VudCA9IHNvdXJjZS5zbGljZSgwLCBzb3VyY2UuaW5kZXhPZihib2R5KSkuc3BsaXQoXCJcXG5cIikubGVuZ3RoIC0gMTtcblx0fVxuXHRyZXR1cm4gYXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uUGFkZGluZ0xpbmVDb3VudDtcbn1cbmZ1bmN0aW9uIHByb21pc2VXaXRoUmVzb2x2ZXJzKCkge1xuXHRsZXQgcmVzb2x2ZSwgcmVqZWN0O1xuXHRyZXR1cm4ge1xuXHRcdHByb21pc2U6IG5ldyBQcm9taXNlKChfcmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuXHRcdFx0cmVzb2x2ZSA9IF9yZXNvbHZlLCByZWplY3QgPSBfcmVqZWN0O1xuXHRcdH0pLFxuXHRcdHJlc29sdmUsXG5cdFx0cmVqZWN0XG5cdH07XG59XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcGF0aGVAMi4wLjMvbm9kZV9tb2R1bGVzL3BhdGhlL2Rpc3Qvc2hhcmVkL3BhdGhlLk0tZVRodE5aLm1qc1xuY29uc3QgX0RSSVZFX0xFVFRFUl9TVEFSVF9SRSA9IC9eW0EtWmEtel06XFwvLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZVdpbmRvd3NQYXRoKGlucHV0ID0gXCJcIikge1xuXHRyZXR1cm4gaW5wdXQgJiYgaW5wdXQucmVwbGFjZSgvXFxcXC9nLCBcIi9cIikucmVwbGFjZShfRFJJVkVfTEVUVEVSX1NUQVJUX1JFLCAocikgPT4gci50b1VwcGVyQ2FzZSgpKTtcbn1cbmNvbnN0IF9JU19BQlNPTFVURV9SRSA9IC9eWy9cXFxcXSg/IVsvXFxcXF0pfF5bL1xcXFxdezJ9KD8hXFwuKXxeW0EtWmEtel06Wy9cXFxcXS8sIF9EUklWRV9MRVRURVJfUkUgPSAvXltBLVphLXpdOiQvO1xuZnVuY3Rpb24gY3dkKCkge1xuXHRyZXR1cm4gdHlwZW9mIHByb2Nlc3MgPCBcInVcIiAmJiB0eXBlb2YgcHJvY2Vzcy5jd2QgPT0gXCJmdW5jdGlvblwiID8gcHJvY2Vzcy5jd2QoKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKSA6IFwiL1wiO1xufVxuY29uc3QgcmVzb2x2ZSA9IGZ1bmN0aW9uKC4uLmFyZ3VtZW50c18pIHtcblx0YXJndW1lbnRzXyA9IGFyZ3VtZW50c18ubWFwKChhcmd1bWVudCkgPT4gbm9ybWFsaXplV2luZG93c1BhdGgoYXJndW1lbnQpKTtcblx0bGV0IHJlc29sdmVkUGF0aCA9IFwiXCIsIHJlc29sdmVkQWJzb2x1dGUgPSAhMTtcblx0Zm9yIChsZXQgaW5kZXggPSBhcmd1bWVudHNfLmxlbmd0aCAtIDE7IGluZGV4ID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpbmRleC0tKSB7XG5cdFx0bGV0IHBhdGggPSBpbmRleCA+PSAwID8gYXJndW1lbnRzX1tpbmRleF0gOiBjd2QoKTtcblx0XHQhcGF0aCB8fCBwYXRoLmxlbmd0aCA9PT0gMCB8fCAocmVzb2x2ZWRQYXRoID0gYCR7cGF0aH0vJHtyZXNvbHZlZFBhdGh9YCwgcmVzb2x2ZWRBYnNvbHV0ZSA9IGlzQWJzb2x1dGUocGF0aCkpO1xuXHR9XG5cdHJldHVybiByZXNvbHZlZFBhdGggPSBub3JtYWxpemVTdHJpbmcocmVzb2x2ZWRQYXRoLCAhcmVzb2x2ZWRBYnNvbHV0ZSksIHJlc29sdmVkQWJzb2x1dGUgJiYgIWlzQWJzb2x1dGUocmVzb2x2ZWRQYXRoKSA/IGAvJHtyZXNvbHZlZFBhdGh9YCA6IHJlc29sdmVkUGF0aC5sZW5ndGggPiAwID8gcmVzb2x2ZWRQYXRoIDogXCIuXCI7XG59O1xuZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nKHBhdGgsIGFsbG93QWJvdmVSb290KSB7XG5cdGxldCByZXMgPSBcIlwiLCBsYXN0U2VnbWVudExlbmd0aCA9IDAsIGxhc3RTbGFzaCA9IC0xLCBkb3RzID0gMCwgY2hhciA9IG51bGw7XG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPD0gcGF0aC5sZW5ndGg7ICsraW5kZXgpIHtcblx0XHRpZiAoaW5kZXggPCBwYXRoLmxlbmd0aCkgY2hhciA9IHBhdGhbaW5kZXhdO1xuXHRcdGVsc2UgaWYgKGNoYXIgPT09IFwiL1wiKSBicmVhaztcblx0XHRlbHNlIGNoYXIgPSBcIi9cIjtcblx0XHRpZiAoY2hhciA9PT0gXCIvXCIpIHtcblx0XHRcdGlmICghKGxhc3RTbGFzaCA9PT0gaW5kZXggLSAxIHx8IGRvdHMgPT09IDEpKSBpZiAoZG90cyA9PT0gMikge1xuXHRcdFx0XHRpZiAocmVzLmxlbmd0aCA8IDIgfHwgbGFzdFNlZ21lbnRMZW5ndGggIT09IDIgfHwgcmVzW3Jlcy5sZW5ndGggLSAxXSAhPT0gXCIuXCIgfHwgcmVzW3Jlcy5sZW5ndGggLSAyXSAhPT0gXCIuXCIpIHtcblx0XHRcdFx0XHRpZiAocmVzLmxlbmd0aCA+IDIpIHtcblx0XHRcdFx0XHRcdGxldCBsYXN0U2xhc2hJbmRleCA9IHJlcy5sYXN0SW5kZXhPZihcIi9cIik7XG5cdFx0XHRcdFx0XHRsYXN0U2xhc2hJbmRleCA9PT0gLTEgPyAocmVzID0gXCJcIiwgbGFzdFNlZ21lbnRMZW5ndGggPSAwKSA6IChyZXMgPSByZXMuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpLCBsYXN0U2VnbWVudExlbmd0aCA9IHJlcy5sZW5ndGggLSAxIC0gcmVzLmxhc3RJbmRleE9mKFwiL1wiKSksIGxhc3RTbGFzaCA9IGluZGV4LCBkb3RzID0gMDtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAocmVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdHJlcyA9IFwiXCIsIGxhc3RTZWdtZW50TGVuZ3RoID0gMCwgbGFzdFNsYXNoID0gaW5kZXgsIGRvdHMgPSAwO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGFsbG93QWJvdmVSb290ICYmIChyZXMgKz0gcmVzLmxlbmd0aCA+IDAgPyBcIi8uLlwiIDogXCIuLlwiLCBsYXN0U2VnbWVudExlbmd0aCA9IDIpO1xuXHRcdFx0fSBlbHNlIHJlcy5sZW5ndGggPiAwID8gcmVzICs9IGAvJHtwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGluZGV4KX1gIDogcmVzID0gcGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpbmRleCksIGxhc3RTZWdtZW50TGVuZ3RoID0gaW5kZXggLSBsYXN0U2xhc2ggLSAxO1xuXHRcdFx0bGFzdFNsYXNoID0gaW5kZXgsIGRvdHMgPSAwO1xuXHRcdH0gZWxzZSBjaGFyID09PSBcIi5cIiAmJiBkb3RzICE9PSAtMSA/ICsrZG90cyA6IGRvdHMgPSAtMTtcblx0fVxuXHRyZXR1cm4gcmVzO1xufVxuY29uc3QgaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHApIHtcblx0cmV0dXJuIF9JU19BQlNPTFVURV9SRS50ZXN0KHApO1xufSwgZGlybmFtZSA9IGZ1bmN0aW9uKHApIHtcblx0bGV0IHNlZ21lbnRzID0gbm9ybWFsaXplV2luZG93c1BhdGgocCkucmVwbGFjZSgvXFwvJC8sIFwiXCIpLnNwbGl0KFwiL1wiKS5zbGljZSgwLCAtMSk7XG5cdHJldHVybiBzZWdtZW50cy5sZW5ndGggPT09IDEgJiYgX0RSSVZFX0xFVFRFUl9SRS50ZXN0KHNlZ21lbnRzWzBdKSAmJiAoc2VnbWVudHNbMF0gKz0gXCIvXCIpLCBzZWdtZW50cy5qb2luKFwiL1wiKSB8fCAoaXNBYnNvbHV0ZShwKSA/IFwiL1wiIDogXCIuXCIpO1xufSwgdGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKSwgZGVjb2RlQmFzZTY0ID0gdHlwZW9mIEJ1ZmZlciA9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIEJ1ZmZlci5mcm9tID09IFwiZnVuY3Rpb25cIiA/IChiYXNlNjQpID0+IEJ1ZmZlci5mcm9tKGJhc2U2NCwgXCJiYXNlNjRcIikudG9TdHJpbmcoXCJ1dGYtOFwiKSA6IChiYXNlNjQpID0+IHRleHREZWNvZGVyLmRlY29kZShVaW50OEFycmF5LmZyb20oYXRvYihiYXNlNjQpLCAoYykgPT4gYy5jaGFyQ29kZUF0KDApKSksIHBlcmNlbnRSZWdFeCA9IC8lL2csIGJhY2tzbGFzaFJlZ0V4ID0gL1xcXFwvZywgbmV3bGluZVJlZ0V4ID0gL1xcbi9nLCBjYXJyaWFnZVJldHVyblJlZ0V4ID0gL1xcci9nLCB0YWJSZWdFeCA9IC9cXHQvZywgcXVlc3Rpb25SZWdleCA9IC9cXD8vZywgaGFzaFJlZ2V4ID0gLyMvZztcbmZ1bmN0aW9uIGVuY29kZVBhdGhDaGFycyhmaWxlcGF0aCkge1xuXHRyZXR1cm4gZmlsZXBhdGguaW5kZXhPZihcIiVcIikgIT09IC0xICYmIChmaWxlcGF0aCA9IGZpbGVwYXRoLnJlcGxhY2UocGVyY2VudFJlZ0V4LCBcIiUyNVwiKSksICFpc1dpbmRvd3MgJiYgZmlsZXBhdGguaW5kZXhPZihcIlxcXFxcIikgIT09IC0xICYmIChmaWxlcGF0aCA9IGZpbGVwYXRoLnJlcGxhY2UoYmFja3NsYXNoUmVnRXgsIFwiJTVDXCIpKSwgZmlsZXBhdGguaW5kZXhPZihcIlxcblwiKSAhPT0gLTEgJiYgKGZpbGVwYXRoID0gZmlsZXBhdGgucmVwbGFjZShuZXdsaW5lUmVnRXgsIFwiJTBBXCIpKSwgZmlsZXBhdGguaW5kZXhPZihcIlxcclwiKSAhPT0gLTEgJiYgKGZpbGVwYXRoID0gZmlsZXBhdGgucmVwbGFjZShjYXJyaWFnZVJldHVyblJlZ0V4LCBcIiUwRFwiKSksIGZpbGVwYXRoLmluZGV4T2YoXCJcdFwiKSAhPT0gLTEgJiYgKGZpbGVwYXRoID0gZmlsZXBhdGgucmVwbGFjZSh0YWJSZWdFeCwgXCIlMDlcIikpLCBmaWxlcGF0aDtcbn1cbmNvbnN0IHBvc2l4RGlybmFtZSA9IGRpcm5hbWUsIHBvc2l4UmVzb2x2ZSA9IHJlc29sdmU7XG5mdW5jdGlvbiBwb3NpeFBhdGhUb0ZpbGVIcmVmKHBvc2l4UGF0aCkge1xuXHRsZXQgcmVzb2x2ZWQgPSBwb3NpeFJlc29sdmUocG9zaXhQYXRoKSwgZmlsZVBhdGhMYXN0ID0gcG9zaXhQYXRoLmNoYXJDb2RlQXQocG9zaXhQYXRoLmxlbmd0aCAtIDEpO1xuXHRyZXR1cm4gKGZpbGVQYXRoTGFzdCA9PT0gNDcgfHwgaXNXaW5kb3dzICYmIGZpbGVQYXRoTGFzdCA9PT0gOTIpICYmIHJlc29sdmVkW3Jlc29sdmVkLmxlbmd0aCAtIDFdICE9PSBcIi9cIiAmJiAocmVzb2x2ZWQgKz0gXCIvXCIpLCByZXNvbHZlZCA9IGVuY29kZVBhdGhDaGFycyhyZXNvbHZlZCksIHJlc29sdmVkLmluZGV4T2YoXCI/XCIpICE9PSAtMSAmJiAocmVzb2x2ZWQgPSByZXNvbHZlZC5yZXBsYWNlKHF1ZXN0aW9uUmVnZXgsIFwiJTNGXCIpKSwgcmVzb2x2ZWQuaW5kZXhPZihcIiNcIikgIT09IC0xICYmIChyZXNvbHZlZCA9IHJlc29sdmVkLnJlcGxhY2UoaGFzaFJlZ2V4LCBcIiUyM1wiKSksIG5ldyBVUkwoYGZpbGU6Ly8ke3Jlc29sdmVkfWApLmhyZWY7XG59XG5mdW5jdGlvbiB0b1dpbmRvd3NQYXRoKHBhdGgpIHtcblx0cmV0dXJuIHBhdGgucmVwbGFjZSgvXFwvL2csIFwiXFxcXFwiKTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AanJpZGdld2VsbCtzb3VyY2VtYXAtY29kZWNAMS41LjUvbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYy9kaXN0L3NvdXJjZW1hcC1jb2RlYy5tanNcbnZhciBjb21tYSA9IDQ0LCBjaGFycyA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLCBpbnRUb0NoYXIgPSBuZXcgVWludDhBcnJheSg2NCksIGNoYXJUb0ludCA9IG5ldyBVaW50OEFycmF5KDEyOCk7XG5mb3IgKGxldCBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7XG5cdGxldCBjID0gY2hhcnMuY2hhckNvZGVBdChpKTtcblx0aW50VG9DaGFyW2ldID0gYywgY2hhclRvSW50W2NdID0gaTtcbn1cbmZ1bmN0aW9uIGRlY29kZUludGVnZXIocmVhZGVyLCByZWxhdGl2ZSkge1xuXHRsZXQgdmFsdWUgPSAwLCBzaGlmdCA9IDAsIGludGVnZXIgPSAwO1xuXHRkb1xuXHRcdGludGVnZXIgPSBjaGFyVG9JbnRbcmVhZGVyLm5leHQoKV0sIHZhbHVlIHw9IChpbnRlZ2VyICYgMzEpIDw8IHNoaWZ0LCBzaGlmdCArPSA1O1xuXHR3aGlsZSAoaW50ZWdlciAmIDMyKTtcblx0bGV0IHNob3VsZE5lZ2F0ZSA9IHZhbHVlICYgMTtcblx0cmV0dXJuIHZhbHVlID4+Pj0gMSwgc2hvdWxkTmVnYXRlICYmICh2YWx1ZSA9IC0yMTQ3NDgzNjQ4IHwgLXZhbHVlKSwgcmVsYXRpdmUgKyB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGhhc01vcmVWbHEocmVhZGVyLCBtYXgpIHtcblx0cmV0dXJuIHJlYWRlci5wb3MgPj0gbWF4ID8gITEgOiByZWFkZXIucGVlaygpICE9PSBjb21tYTtcbn1cbnZhciBTdHJpbmdSZWFkZXIgPSBjbGFzcyB7XG5cdGNvbnN0cnVjdG9yKGJ1ZmZlcikge1xuXHRcdHRoaXMucG9zID0gMCwgdGhpcy5idWZmZXIgPSBidWZmZXI7XG5cdH1cblx0bmV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5idWZmZXIuY2hhckNvZGVBdCh0aGlzLnBvcysrKTtcblx0fVxuXHRwZWVrKCkge1xuXHRcdHJldHVybiB0aGlzLmJ1ZmZlci5jaGFyQ29kZUF0KHRoaXMucG9zKTtcblx0fVxuXHRpbmRleE9mKGNoYXIpIHtcblx0XHRsZXQgeyBidWZmZXIsIHBvcyB9ID0gdGhpcywgaWR4ID0gYnVmZmVyLmluZGV4T2YoY2hhciwgcG9zKTtcblx0XHRyZXR1cm4gaWR4ID09PSAtMSA/IGJ1ZmZlci5sZW5ndGggOiBpZHg7XG5cdH1cbn07XG5mdW5jdGlvbiBkZWNvZGUobWFwcGluZ3MpIHtcblx0bGV0IHsgbGVuZ3RoIH0gPSBtYXBwaW5ncywgcmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihtYXBwaW5ncyksIGRlY29kZWQgPSBbXSwgZ2VuQ29sdW1uID0gMCwgc291cmNlc0luZGV4ID0gMCwgc291cmNlTGluZSA9IDAsIHNvdXJjZUNvbHVtbiA9IDAsIG5hbWVzSW5kZXggPSAwO1xuXHRkbyB7XG5cdFx0bGV0IHNlbWkgPSByZWFkZXIuaW5kZXhPZihcIjtcIiksIGxpbmUgPSBbXSwgc29ydGVkID0gITAsIGxhc3RDb2wgPSAwO1xuXHRcdGZvciAoZ2VuQ29sdW1uID0gMDsgcmVhZGVyLnBvcyA8IHNlbWk7KSB7XG5cdFx0XHRsZXQgc2VnO1xuXHRcdFx0Z2VuQ29sdW1uID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIGdlbkNvbHVtbiksIGdlbkNvbHVtbiA8IGxhc3RDb2wgJiYgKHNvcnRlZCA9ICExKSwgbGFzdENvbCA9IGdlbkNvbHVtbiwgaGFzTW9yZVZscShyZWFkZXIsIHNlbWkpID8gKHNvdXJjZXNJbmRleCA9IGRlY29kZUludGVnZXIocmVhZGVyLCBzb3VyY2VzSW5kZXgpLCBzb3VyY2VMaW5lID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIHNvdXJjZUxpbmUpLCBzb3VyY2VDb2x1bW4gPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgc291cmNlQ29sdW1uKSwgaGFzTW9yZVZscShyZWFkZXIsIHNlbWkpID8gKG5hbWVzSW5kZXggPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgbmFtZXNJbmRleCksIHNlZyA9IFtcblx0XHRcdFx0Z2VuQ29sdW1uLFxuXHRcdFx0XHRzb3VyY2VzSW5kZXgsXG5cdFx0XHRcdHNvdXJjZUxpbmUsXG5cdFx0XHRcdHNvdXJjZUNvbHVtbixcblx0XHRcdFx0bmFtZXNJbmRleFxuXHRcdFx0XSkgOiBzZWcgPSBbXG5cdFx0XHRcdGdlbkNvbHVtbixcblx0XHRcdFx0c291cmNlc0luZGV4LFxuXHRcdFx0XHRzb3VyY2VMaW5lLFxuXHRcdFx0XHRzb3VyY2VDb2x1bW5cblx0XHRcdF0pIDogc2VnID0gW2dlbkNvbHVtbl0sIGxpbmUucHVzaChzZWcpLCByZWFkZXIucG9zKys7XG5cdFx0fVxuXHRcdHNvcnRlZCB8fCBzb3J0KGxpbmUpLCBkZWNvZGVkLnB1c2gobGluZSksIHJlYWRlci5wb3MgPSBzZW1pICsgMTtcblx0fSB3aGlsZSAocmVhZGVyLnBvcyA8PSBsZW5ndGgpO1xuXHRyZXR1cm4gZGVjb2RlZDtcbn1cbmZ1bmN0aW9uIHNvcnQobGluZSkge1xuXHRsaW5lLnNvcnQoc29ydENvbXBhcmF0b3IpO1xufVxuZnVuY3Rpb24gc29ydENvbXBhcmF0b3IoYSwgYikge1xuXHRyZXR1cm4gYVswXSAtIGJbMF07XG59XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGpyaWRnZXdlbGwrdHJhY2UtbWFwcGluZ0AwLjMuMzEvbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcvZGlzdC90cmFjZS1tYXBwaW5nLm1qc1xudmFyIENPTFVNTiA9IDAsIFNPVVJDRVNfSU5ERVggPSAxLCBTT1VSQ0VfTElORSA9IDIsIFNPVVJDRV9DT0xVTU4gPSAzLCBOQU1FU19JTkRFWCA9IDQsIGZvdW5kID0gITE7XG5mdW5jdGlvbiBiaW5hcnlTZWFyY2goaGF5c3RhY2ssIG5lZWRsZSwgbG93LCBoaWdoKSB7XG5cdGZvciAoOyBsb3cgPD0gaGlnaDspIHtcblx0XHRsZXQgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cgPj4gMSksIGNtcCA9IGhheXN0YWNrW21pZF1bQ09MVU1OXSAtIG5lZWRsZTtcblx0XHRpZiAoY21wID09PSAwKSByZXR1cm4gZm91bmQgPSAhMCwgbWlkO1xuXHRcdGNtcCA8IDAgPyBsb3cgPSBtaWQgKyAxIDogaGlnaCA9IG1pZCAtIDE7XG5cdH1cblx0cmV0dXJuIGZvdW5kID0gITEsIGxvdyAtIDE7XG59XG5mdW5jdGlvbiB1cHBlckJvdW5kKGhheXN0YWNrLCBuZWVkbGUsIGluZGV4KSB7XG5cdGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCBoYXlzdGFjay5sZW5ndGggJiYgaGF5c3RhY2tbaV1bQ09MVU1OXSA9PT0gbmVlZGxlOyBpbmRleCA9IGkrKyk7XG5cdHJldHVybiBpbmRleDtcbn1cbmZ1bmN0aW9uIGxvd2VyQm91bmQoaGF5c3RhY2ssIG5lZWRsZSwgaW5kZXgpIHtcblx0Zm9yIChsZXQgaSA9IGluZGV4IC0gMTsgaSA+PSAwICYmIGhheXN0YWNrW2ldW0NPTFVNTl0gPT09IG5lZWRsZTsgaW5kZXggPSBpLS0pO1xuXHRyZXR1cm4gaW5kZXg7XG59XG5mdW5jdGlvbiBtZW1vaXplZEJpbmFyeVNlYXJjaChoYXlzdGFjaywgbmVlZGxlLCBzdGF0ZSwga2V5KSB7XG5cdGxldCB7IGxhc3RLZXksIGxhc3ROZWVkbGUsIGxhc3RJbmRleCB9ID0gc3RhdGUsIGxvdyA9IDAsIGhpZ2ggPSBoYXlzdGFjay5sZW5ndGggLSAxO1xuXHRpZiAoa2V5ID09PSBsYXN0S2V5KSB7XG5cdFx0aWYgKG5lZWRsZSA9PT0gbGFzdE5lZWRsZSkgcmV0dXJuIGZvdW5kID0gbGFzdEluZGV4ICE9PSAtMSAmJiBoYXlzdGFja1tsYXN0SW5kZXhdW0NPTFVNTl0gPT09IG5lZWRsZSwgbGFzdEluZGV4O1xuXHRcdG5lZWRsZSA+PSBsYXN0TmVlZGxlID8gbG93ID0gbGFzdEluZGV4ID09PSAtMSA/IDAgOiBsYXN0SW5kZXggOiBoaWdoID0gbGFzdEluZGV4O1xuXHR9XG5cdHJldHVybiBzdGF0ZS5sYXN0S2V5ID0ga2V5LCBzdGF0ZS5sYXN0TmVlZGxlID0gbmVlZGxlLCBzdGF0ZS5sYXN0SW5kZXggPSBiaW5hcnlTZWFyY2goaGF5c3RhY2ssIG5lZWRsZSwgbG93LCBoaWdoKTtcbn1cbnZhciBMSU5FX0dUUl9aRVJPID0gXCJgbGluZWAgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCAobGluZXMgc3RhcnQgYXQgbGluZSAxKVwiLCBDT0xfR1RSX0VRX1pFUk8gPSBcImBjb2x1bW5gIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAgKGNvbHVtbnMgc3RhcnQgYXQgY29sdW1uIDApXCI7XG5mdW5jdGlvbiBjYXN0KG1hcCkge1xuXHRyZXR1cm4gbWFwO1xufVxuZnVuY3Rpb24gZGVjb2RlZE1hcHBpbmdzKG1hcCkge1xuXHR2YXIgX2E7XG5cdHJldHVybiAoX2EgPSBjYXN0KG1hcCkpLl9kZWNvZGVkIHx8IChfYS5fZGVjb2RlZCA9IGRlY29kZShjYXN0KG1hcCkuX2VuY29kZWQpKTtcbn1cbmZ1bmN0aW9uIG9yaWdpbmFsUG9zaXRpb25Gb3IobWFwLCBuZWVkbGUpIHtcblx0bGV0IHsgbGluZSwgY29sdW1uLCBiaWFzIH0gPSBuZWVkbGU7XG5cdGlmIChsaW5lLS0sIGxpbmUgPCAwKSB0aHJvdyBFcnJvcihMSU5FX0dUUl9aRVJPKTtcblx0aWYgKGNvbHVtbiA8IDApIHRocm93IEVycm9yKENPTF9HVFJfRVFfWkVSTyk7XG5cdGxldCBkZWNvZGVkID0gZGVjb2RlZE1hcHBpbmdzKG1hcCk7XG5cdGlmIChsaW5lID49IGRlY29kZWQubGVuZ3RoKSByZXR1cm4gT01hcHBpbmcobnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7XG5cdGxldCBzZWdtZW50cyA9IGRlY29kZWRbbGluZV0sIGluZGV4ID0gdHJhY2VTZWdtZW50SW50ZXJuYWwoc2VnbWVudHMsIGNhc3QobWFwKS5fZGVjb2RlZE1lbW8sIGxpbmUsIGNvbHVtbiwgYmlhcyB8fCAxKTtcblx0aWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIE9NYXBwaW5nKG51bGwsIG51bGwsIG51bGwsIG51bGwpO1xuXHRsZXQgc2VnbWVudCA9IHNlZ21lbnRzW2luZGV4XTtcblx0aWYgKHNlZ21lbnQubGVuZ3RoID09PSAxKSByZXR1cm4gT01hcHBpbmcobnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7XG5cdGxldCB7IG5hbWVzLCByZXNvbHZlZFNvdXJjZXMgfSA9IG1hcDtcblx0cmV0dXJuIE9NYXBwaW5nKHJlc29sdmVkU291cmNlc1tzZWdtZW50W1NPVVJDRVNfSU5ERVhdXSwgc2VnbWVudFtTT1VSQ0VfTElORV0gKyAxLCBzZWdtZW50W1NPVVJDRV9DT0xVTU5dLCBzZWdtZW50Lmxlbmd0aCA9PT0gNSA/IG5hbWVzW3NlZ21lbnRbTkFNRVNfSU5ERVhdXSA6IG51bGwpO1xufVxuZnVuY3Rpb24gT01hcHBpbmcoc291cmNlLCBsaW5lLCBjb2x1bW4sIG5hbWUpIHtcblx0cmV0dXJuIHtcblx0XHRzb3VyY2UsXG5cdFx0bGluZSxcblx0XHRjb2x1bW4sXG5cdFx0bmFtZVxuXHR9O1xufVxuZnVuY3Rpb24gdHJhY2VTZWdtZW50SW50ZXJuYWwoc2VnbWVudHMsIG1lbW8sIGxpbmUsIGNvbHVtbiwgYmlhcykge1xuXHRsZXQgaW5kZXggPSBtZW1vaXplZEJpbmFyeVNlYXJjaChzZWdtZW50cywgY29sdW1uLCBtZW1vLCBsaW5lKTtcblx0cmV0dXJuIGZvdW5kID8gaW5kZXggPSAoYmlhcyA9PT0gLTEgPyB1cHBlckJvdW5kIDogbG93ZXJCb3VuZCkoc2VnbWVudHMsIGNvbHVtbiwgaW5kZXgpIDogYmlhcyA9PT0gLTEgJiYgaW5kZXgrKywgaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSBzZWdtZW50cy5sZW5ndGggPyAtMSA6IGluZGV4O1xufVxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL21vZHVsZS1ydW5uZXIvc291cmNlbWFwL2RlY29kZXIudHNcbnZhciBEZWNvZGVkTWFwID0gY2xhc3Mge1xuXHRfZW5jb2RlZDtcblx0X2RlY29kZWQ7XG5cdF9kZWNvZGVkTWVtbztcblx0dXJsO1xuXHRmaWxlO1xuXHR2ZXJzaW9uO1xuXHRuYW1lcyA9IFtdO1xuXHRyZXNvbHZlZFNvdXJjZXM7XG5cdGNvbnN0cnVjdG9yKG1hcCwgZnJvbSkge1xuXHRcdHRoaXMubWFwID0gbWFwO1xuXHRcdGxldCB7IG1hcHBpbmdzLCBuYW1lcywgc291cmNlcyB9ID0gbWFwO1xuXHRcdHRoaXMudmVyc2lvbiA9IG1hcC52ZXJzaW9uLCB0aGlzLm5hbWVzID0gbmFtZXMgfHwgW10sIHRoaXMuX2VuY29kZWQgPSBtYXBwaW5ncyB8fCBcIlwiLCB0aGlzLl9kZWNvZGVkTWVtbyA9IG1lbW9pemVkU3RhdGUoKSwgdGhpcy51cmwgPSBmcm9tLCB0aGlzLmZpbGUgPSBmcm9tO1xuXHRcdGxldCBvcmlnaW5EaXIgPSBwb3NpeERpcm5hbWUoZnJvbSk7XG5cdFx0dGhpcy5yZXNvbHZlZFNvdXJjZXMgPSAoc291cmNlcyB8fCBbXSkubWFwKChzKSA9PiBwb3NpeFJlc29sdmUob3JpZ2luRGlyLCBzIHx8IFwiXCIpKTtcblx0fVxufTtcbmZ1bmN0aW9uIG1lbW9pemVkU3RhdGUoKSB7XG5cdHJldHVybiB7XG5cdFx0bGFzdEtleTogLTEsXG5cdFx0bGFzdE5lZWRsZTogLTEsXG5cdFx0bGFzdEluZGV4OiAtMVxuXHR9O1xufVxuZnVuY3Rpb24gZ2V0T3JpZ2luYWxQb3NpdGlvbihtYXAsIG5lZWRsZSkge1xuXHRsZXQgcmVzdWx0ID0gb3JpZ2luYWxQb3NpdGlvbkZvcihtYXAsIG5lZWRsZSk7XG5cdHJldHVybiByZXN1bHQuY29sdW1uID09IG51bGwgPyBudWxsIDogcmVzdWx0O1xufVxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL21vZHVsZS1ydW5uZXIvZXZhbHVhdGVkTW9kdWxlcy50c1xuY29uc3QgTU9EVUxFX1JVTk5FUl9TT1VSQ0VNQVBQSU5HX1JFR0VYUCA9IFJlZ0V4cChgLy8jICR7U09VUkNFTUFQUElOR19VUkx9PWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsKC4rKWApO1xudmFyIEV2YWx1YXRlZE1vZHVsZU5vZGUgPSBjbGFzcyB7XG5cdGltcG9ydGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGltcG9ydHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRldmFsdWF0ZWQgPSAhMTtcblx0bWV0YTtcblx0cHJvbWlzZTtcblx0ZXhwb3J0cztcblx0ZmlsZTtcblx0bWFwO1xuXHRjb25zdHJ1Y3RvcihpZCwgdXJsKSB7XG5cdFx0dGhpcy5pZCA9IGlkLCB0aGlzLnVybCA9IHVybCwgdGhpcy5maWxlID0gY2xlYW5VcmwoaWQpO1xuXHR9XG59LCBFdmFsdWF0ZWRNb2R1bGVzID0gY2xhc3Mge1xuXHRpZFRvTW9kdWxlTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0ZmlsZVRvTW9kdWxlc01hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHVybFRvSWRNb2R1bGVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHQvKipcblx0KiBSZXR1cm5zIHRoZSBtb2R1bGUgbm9kZSBieSB0aGUgcmVzb2x2ZWQgbW9kdWxlIElELiBVc3VhbGx5LCBtb2R1bGUgSUQgaXNcblx0KiB0aGUgZmlsZSBzeXN0ZW0gcGF0aCB3aXRoIHF1ZXJ5IGFuZC9vciBoYXNoLiBJdCBjYW4gYWxzbyBiZSBhIHZpcnR1YWwgbW9kdWxlLlxuXHQqXG5cdCogTW9kdWxlIHJ1bm5lciBncmFwaCB3aWxsIGhhdmUgMSB0byAxIG1hcHBpbmcgd2l0aCB0aGUgc2VydmVyIG1vZHVsZSBncmFwaC5cblx0KiBAcGFyYW0gaWQgUmVzb2x2ZWQgbW9kdWxlIElEXG5cdCovXG5cdGdldE1vZHVsZUJ5SWQoaWQpIHtcblx0XHRyZXR1cm4gdGhpcy5pZFRvTW9kdWxlTWFwLmdldChpZCk7XG5cdH1cblx0LyoqXG5cdCogUmV0dXJucyBhbGwgbW9kdWxlcyByZWxhdGVkIHRvIHRoZSBmaWxlIHN5c3RlbSBwYXRoLiBEaWZmZXJlbnQgbW9kdWxlc1xuXHQqIG1pZ2h0IGhhdmUgZGlmZmVyZW50IHF1ZXJ5IHBhcmFtZXRlcnMgb3IgaGFzaCwgc28gaXQncyBwb3NzaWJsZSB0byBoYXZlXG5cdCogbXVsdGlwbGUgbW9kdWxlcyBmb3IgdGhlIHNhbWUgZmlsZS5cblx0KiBAcGFyYW0gZmlsZSBUaGUgZmlsZSBzeXN0ZW0gcGF0aCBvZiB0aGUgbW9kdWxlXG5cdCovXG5cdGdldE1vZHVsZXNCeUZpbGUoZmlsZSkge1xuXHRcdHJldHVybiB0aGlzLmZpbGVUb01vZHVsZXNNYXAuZ2V0KGZpbGUpO1xuXHR9XG5cdC8qKlxuXHQqIFJldHVybnMgdGhlIG1vZHVsZSBub2RlIGJ5IHRoZSBVUkwgdGhhdCB3YXMgdXNlZCBpbiB0aGUgaW1wb3J0IHN0YXRlbWVudC5cblx0KiBVbmxpa2UgbW9kdWxlIGdyYXBoIG9uIHRoZSBzZXJ2ZXIsIHRoZSBVUkwgaXMgbm90IHJlc29sdmVkIGFuZCBpcyB1c2VkIGFzIGlzLlxuXHQqIEBwYXJhbSB1cmwgU2VydmVyIFVSTCB0aGF0IHdhcyB1c2VkIGluIHRoZSBpbXBvcnQgc3RhdGVtZW50XG5cdCovXG5cdGdldE1vZHVsZUJ5VXJsKHVybCkge1xuXHRcdHJldHVybiB0aGlzLnVybFRvSWRNb2R1bGVNYXAuZ2V0KHVud3JhcElkKHVybCkpO1xuXHR9XG5cdC8qKlxuXHQqIEVuc3VyZSB0aGF0IG1vZHVsZSBpcyBpbiB0aGUgZ3JhcGguIElmIHRoZSBtb2R1bGUgaXMgYWxyZWFkeSBpbiB0aGUgZ3JhcGgsXG5cdCogaXQgd2lsbCByZXR1cm4gdGhlIGV4aXN0aW5nIG1vZHVsZSBub2RlLiBPdGhlcndpc2UsIGl0IHdpbGwgY3JlYXRlIGEgbmV3XG5cdCogbW9kdWxlIG5vZGUgYW5kIGFkZCBpdCB0byB0aGUgZ3JhcGguXG5cdCogQHBhcmFtIGlkIFJlc29sdmVkIG1vZHVsZSBJRFxuXHQqIEBwYXJhbSB1cmwgVVJMIHRoYXQgd2FzIHVzZWQgaW4gdGhlIGltcG9ydCBzdGF0ZW1lbnRcblx0Ki9cblx0ZW5zdXJlTW9kdWxlKGlkLCB1cmwpIHtcblx0XHRpZiAoaWQgPSBub3JtYWxpemVNb2R1bGVJZChpZCksIHRoaXMuaWRUb01vZHVsZU1hcC5oYXMoaWQpKSB7XG5cdFx0XHRsZXQgbW9kdWxlTm9kZSA9IHRoaXMuaWRUb01vZHVsZU1hcC5nZXQoaWQpO1xuXHRcdFx0cmV0dXJuIHRoaXMudXJsVG9JZE1vZHVsZU1hcC5zZXQodXJsLCBtb2R1bGVOb2RlKSwgbW9kdWxlTm9kZTtcblx0XHR9XG5cdFx0bGV0IG1vZHVsZU5vZGUgPSBuZXcgRXZhbHVhdGVkTW9kdWxlTm9kZShpZCwgdXJsKTtcblx0XHR0aGlzLmlkVG9Nb2R1bGVNYXAuc2V0KGlkLCBtb2R1bGVOb2RlKSwgdGhpcy51cmxUb0lkTW9kdWxlTWFwLnNldCh1cmwsIG1vZHVsZU5vZGUpO1xuXHRcdGxldCBmaWxlTW9kdWxlcyA9IHRoaXMuZmlsZVRvTW9kdWxlc01hcC5nZXQobW9kdWxlTm9kZS5maWxlKSB8fCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRcdHJldHVybiBmaWxlTW9kdWxlcy5hZGQobW9kdWxlTm9kZSksIHRoaXMuZmlsZVRvTW9kdWxlc01hcC5zZXQobW9kdWxlTm9kZS5maWxlLCBmaWxlTW9kdWxlcyksIG1vZHVsZU5vZGU7XG5cdH1cblx0aW52YWxpZGF0ZU1vZHVsZShub2RlKSB7XG5cdFx0bm9kZS5ldmFsdWF0ZWQgPSAhMSwgbm9kZS5tZXRhID0gdm9pZCAwLCBub2RlLm1hcCA9IHZvaWQgMCwgbm9kZS5wcm9taXNlID0gdm9pZCAwLCBub2RlLmV4cG9ydHMgPSB2b2lkIDAsIG5vZGUuaW1wb3J0cy5jbGVhcigpO1xuXHR9XG5cdC8qKlxuXHQqIEV4dHJhY3RzIHRoZSBpbmxpbmVkIHNvdXJjZSBtYXAgZnJvbSB0aGUgbW9kdWxlIGNvZGUgYW5kIHJldHVybnMgdGhlIGRlY29kZWRcblx0KiBzb3VyY2UgbWFwLiBJZiB0aGUgc291cmNlIG1hcCBpcyBub3QgaW5saW5lZCwgaXQgd2lsbCByZXR1cm4gbnVsbC5cblx0KiBAcGFyYW0gaWQgUmVzb2x2ZWQgbW9kdWxlIElEXG5cdCovXG5cdGdldE1vZHVsZVNvdXJjZU1hcEJ5SWQoaWQpIHtcblx0XHRsZXQgbW9kID0gdGhpcy5nZXRNb2R1bGVCeUlkKGlkKTtcblx0XHRpZiAoIW1vZCkgcmV0dXJuIG51bGw7XG5cdFx0aWYgKG1vZC5tYXApIHJldHVybiBtb2QubWFwO1xuXHRcdGlmICghbW9kLm1ldGEgfHwgIShcImNvZGVcIiBpbiBtb2QubWV0YSkpIHJldHVybiBudWxsO1xuXHRcdGxldCBwYXR0ZXJuID0gYC8vIyAke1NPVVJDRU1BUFBJTkdfVVJMfT1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGAsIGxhc3RJbmRleCA9IG1vZC5tZXRhLmNvZGUubGFzdEluZGV4T2YocGF0dGVybik7XG5cdFx0aWYgKGxhc3RJbmRleCA9PT0gLTEpIHJldHVybiBudWxsO1xuXHRcdGxldCBtYXBTdHJpbmcgPSBNT0RVTEVfUlVOTkVSX1NPVVJDRU1BUFBJTkdfUkVHRVhQLmV4ZWMobW9kLm1ldGEuY29kZS5zbGljZShsYXN0SW5kZXgpKT8uWzFdO1xuXHRcdHJldHVybiBtYXBTdHJpbmcgPyAobW9kLm1hcCA9IG5ldyBEZWNvZGVkTWFwKEpTT04ucGFyc2UoZGVjb2RlQmFzZTY0KG1hcFN0cmluZykpLCBtb2QuZmlsZSksIG1vZC5tYXApIDogbnVsbDtcblx0fVxuXHRjbGVhcigpIHtcblx0XHR0aGlzLmlkVG9Nb2R1bGVNYXAuY2xlYXIoKSwgdGhpcy5maWxlVG9Nb2R1bGVzTWFwLmNsZWFyKCksIHRoaXMudXJsVG9JZE1vZHVsZU1hcC5jbGVhcigpO1xuXHR9XG59O1xuY29uc3QgcHJlZml4ZWRCdWlsdGlucyA9IG5ldyBTZXQoW1xuXHRcIm5vZGU6c2VhXCIsXG5cdFwibm9kZTpzcWxpdGVcIixcblx0XCJub2RlOnRlc3RcIixcblx0XCJub2RlOnRlc3QvcmVwb3J0ZXJzXCJcbl0pO1xuZnVuY3Rpb24gbm9ybWFsaXplTW9kdWxlSWQoZmlsZSkge1xuXHRyZXR1cm4gcHJlZml4ZWRCdWlsdGlucy5oYXMoZmlsZSkgPyBmaWxlIDogc2xhc2goZmlsZSkucmVwbGFjZSgvXlxcL0Bmc1xcLy8sIGlzV2luZG93cyA/IFwiXCIgOiBcIi9cIikucmVwbGFjZSgvXm5vZGU6LywgXCJcIikucmVwbGFjZSgvXlxcLysvLCBcIi9cIikucmVwbGFjZSgvXmZpbGU6XFwvKy8sIGlzV2luZG93cyA/IFwiXCIgOiBcIi9cIik7XG59XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvc2hhcmVkL2htci50c1xudmFyIEhNUkNvbnRleHQgPSBjbGFzcyB7XG5cdG5ld0xpc3RlbmVycztcblx0Y29uc3RydWN0b3IoaG1yQ2xpZW50LCBvd25lclBhdGgpIHtcblx0XHR0aGlzLmhtckNsaWVudCA9IGhtckNsaWVudCwgdGhpcy5vd25lclBhdGggPSBvd25lclBhdGgsIGhtckNsaWVudC5kYXRhTWFwLmhhcyhvd25lclBhdGgpIHx8IGhtckNsaWVudC5kYXRhTWFwLnNldChvd25lclBhdGgsIHt9KTtcblx0XHRsZXQgbW9kID0gaG1yQ2xpZW50LmhvdE1vZHVsZXNNYXAuZ2V0KG93bmVyUGF0aCk7XG5cdFx0bW9kICYmIChtb2QuY2FsbGJhY2tzID0gW10pO1xuXHRcdGxldCBzdGFsZUxpc3RlbmVycyA9IGhtckNsaWVudC5jdHhUb0xpc3RlbmVyc01hcC5nZXQob3duZXJQYXRoKTtcblx0XHRpZiAoc3RhbGVMaXN0ZW5lcnMpIGZvciAobGV0IFtldmVudCwgc3RhbGVGbnNdIG9mIHN0YWxlTGlzdGVuZXJzKSB7XG5cdFx0XHRsZXQgbGlzdGVuZXJzID0gaG1yQ2xpZW50LmN1c3RvbUxpc3RlbmVyc01hcC5nZXQoZXZlbnQpO1xuXHRcdFx0bGlzdGVuZXJzICYmIGhtckNsaWVudC5jdXN0b21MaXN0ZW5lcnNNYXAuc2V0KGV2ZW50LCBsaXN0ZW5lcnMuZmlsdGVyKChsKSA9PiAhc3RhbGVGbnMuaW5jbHVkZXMobCkpKTtcblx0XHR9XG5cdFx0dGhpcy5uZXdMaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBobXJDbGllbnQuY3R4VG9MaXN0ZW5lcnNNYXAuc2V0KG93bmVyUGF0aCwgdGhpcy5uZXdMaXN0ZW5lcnMpO1xuXHR9XG5cdGdldCBkYXRhKCkge1xuXHRcdHJldHVybiB0aGlzLmhtckNsaWVudC5kYXRhTWFwLmdldCh0aGlzLm93bmVyUGF0aCk7XG5cdH1cblx0YWNjZXB0KGRlcHMsIGNhbGxiYWNrKSB7XG5cdFx0aWYgKHR5cGVvZiBkZXBzID09IFwiZnVuY3Rpb25cIiB8fCAhZGVwcykgdGhpcy5hY2NlcHREZXBzKFt0aGlzLm93bmVyUGF0aF0sIChbbW9kXSkgPT4gZGVwcz8uKG1vZCkpO1xuXHRcdGVsc2UgaWYgKHR5cGVvZiBkZXBzID09IFwic3RyaW5nXCIpIHRoaXMuYWNjZXB0RGVwcyhbZGVwc10sIChbbW9kXSkgPT4gY2FsbGJhY2s/Lihtb2QpKTtcblx0XHRlbHNlIGlmIChBcnJheS5pc0FycmF5KGRlcHMpKSB0aGlzLmFjY2VwdERlcHMoZGVwcywgY2FsbGJhY2spO1xuXHRcdGVsc2UgdGhyb3cgRXJyb3IoXCJpbnZhbGlkIGhvdC5hY2NlcHQoKSB1c2FnZS5cIik7XG5cdH1cblx0YWNjZXB0RXhwb3J0cyhfLCBjYWxsYmFjaykge1xuXHRcdHRoaXMuYWNjZXB0RGVwcyhbdGhpcy5vd25lclBhdGhdLCAoW21vZF0pID0+IGNhbGxiYWNrPy4obW9kKSk7XG5cdH1cblx0ZGlzcG9zZShjYikge1xuXHRcdHRoaXMuaG1yQ2xpZW50LmRpc3Bvc2VNYXAuc2V0KHRoaXMub3duZXJQYXRoLCBjYik7XG5cdH1cblx0cHJ1bmUoY2IpIHtcblx0XHR0aGlzLmhtckNsaWVudC5wcnVuZU1hcC5zZXQodGhpcy5vd25lclBhdGgsIGNiKTtcblx0fVxuXHRkZWNsaW5lKCkge31cblx0aW52YWxpZGF0ZShtZXNzYWdlKSB7XG5cdFx0bGV0IGZpcnN0SW52YWxpZGF0ZWRCeSA9IHRoaXMuaG1yQ2xpZW50LmN1cnJlbnRGaXJzdEludmFsaWRhdGVkQnkgPz8gdGhpcy5vd25lclBhdGg7XG5cdFx0dGhpcy5obXJDbGllbnQubm90aWZ5TGlzdGVuZXJzKFwidml0ZTppbnZhbGlkYXRlXCIsIHtcblx0XHRcdHBhdGg6IHRoaXMub3duZXJQYXRoLFxuXHRcdFx0bWVzc2FnZSxcblx0XHRcdGZpcnN0SW52YWxpZGF0ZWRCeVxuXHRcdH0pLCB0aGlzLnNlbmQoXCJ2aXRlOmludmFsaWRhdGVcIiwge1xuXHRcdFx0cGF0aDogdGhpcy5vd25lclBhdGgsXG5cdFx0XHRtZXNzYWdlLFxuXHRcdFx0Zmlyc3RJbnZhbGlkYXRlZEJ5XG5cdFx0fSksIHRoaXMuaG1yQ2xpZW50LmxvZ2dlci5kZWJ1ZyhgaW52YWxpZGF0ZSAke3RoaXMub3duZXJQYXRofSR7bWVzc2FnZSA/IGA6ICR7bWVzc2FnZX1gIDogXCJcIn1gKTtcblx0fVxuXHRvbihldmVudCwgY2IpIHtcblx0XHRsZXQgYWRkVG9NYXAgPSAobWFwKSA9PiB7XG5cdFx0XHRsZXQgZXhpc3RpbmcgPSBtYXAuZ2V0KGV2ZW50KSB8fCBbXTtcblx0XHRcdGV4aXN0aW5nLnB1c2goY2IpLCBtYXAuc2V0KGV2ZW50LCBleGlzdGluZyk7XG5cdFx0fTtcblx0XHRhZGRUb01hcCh0aGlzLmhtckNsaWVudC5jdXN0b21MaXN0ZW5lcnNNYXApLCBhZGRUb01hcCh0aGlzLm5ld0xpc3RlbmVycyk7XG5cdH1cblx0b2ZmKGV2ZW50LCBjYikge1xuXHRcdGxldCByZW1vdmVGcm9tTWFwID0gKG1hcCkgPT4ge1xuXHRcdFx0bGV0IGV4aXN0aW5nID0gbWFwLmdldChldmVudCk7XG5cdFx0XHRpZiAoZXhpc3RpbmcgPT09IHZvaWQgMCkgcmV0dXJuO1xuXHRcdFx0bGV0IHBydW5lZCA9IGV4aXN0aW5nLmZpbHRlcigobCkgPT4gbCAhPT0gY2IpO1xuXHRcdFx0aWYgKHBydW5lZC5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0bWFwLmRlbGV0ZShldmVudCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdG1hcC5zZXQoZXZlbnQsIHBydW5lZCk7XG5cdFx0fTtcblx0XHRyZW1vdmVGcm9tTWFwKHRoaXMuaG1yQ2xpZW50LmN1c3RvbUxpc3RlbmVyc01hcCksIHJlbW92ZUZyb21NYXAodGhpcy5uZXdMaXN0ZW5lcnMpO1xuXHR9XG5cdHNlbmQoZXZlbnQsIGRhdGEpIHtcblx0XHR0aGlzLmhtckNsaWVudC5zZW5kKHtcblx0XHRcdHR5cGU6IFwiY3VzdG9tXCIsXG5cdFx0XHRldmVudCxcblx0XHRcdGRhdGFcblx0XHR9KTtcblx0fVxuXHRhY2NlcHREZXBzKGRlcHMsIGNhbGxiYWNrID0gKCkgPT4ge30pIHtcblx0XHRsZXQgbW9kID0gdGhpcy5obXJDbGllbnQuaG90TW9kdWxlc01hcC5nZXQodGhpcy5vd25lclBhdGgpIHx8IHtcblx0XHRcdGlkOiB0aGlzLm93bmVyUGF0aCxcblx0XHRcdGNhbGxiYWNrczogW11cblx0XHR9O1xuXHRcdG1vZC5jYWxsYmFja3MucHVzaCh7XG5cdFx0XHRkZXBzLFxuXHRcdFx0Zm46IGNhbGxiYWNrXG5cdFx0fSksIHRoaXMuaG1yQ2xpZW50LmhvdE1vZHVsZXNNYXAuc2V0KHRoaXMub3duZXJQYXRoLCBtb2QpO1xuXHR9XG59LCBITVJDbGllbnQgPSBjbGFzcyB7XG5cdGhvdE1vZHVsZXNNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRkaXNwb3NlTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0cHJ1bmVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRkYXRhTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y3VzdG9tTGlzdGVuZXJzTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y3R4VG9MaXN0ZW5lcnNNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjdXJyZW50Rmlyc3RJbnZhbGlkYXRlZEJ5O1xuXHRjb25zdHJ1Y3Rvcihsb2dnZXIsIHRyYW5zcG9ydCwgaW1wb3J0VXBkYXRlZE1vZHVsZSkge1xuXHRcdHRoaXMubG9nZ2VyID0gbG9nZ2VyLCB0aGlzLnRyYW5zcG9ydCA9IHRyYW5zcG9ydCwgdGhpcy5pbXBvcnRVcGRhdGVkTW9kdWxlID0gaW1wb3J0VXBkYXRlZE1vZHVsZTtcblx0fVxuXHRhc3luYyBub3RpZnlMaXN0ZW5lcnMoZXZlbnQsIGRhdGEpIHtcblx0XHRsZXQgY2JzID0gdGhpcy5jdXN0b21MaXN0ZW5lcnNNYXAuZ2V0KGV2ZW50KTtcblx0XHRjYnMgJiYgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGNicy5tYXAoKGNiKSA9PiBjYihkYXRhKSkpO1xuXHR9XG5cdHNlbmQocGF5bG9hZCkge1xuXHRcdHRoaXMudHJhbnNwb3J0LnNlbmQocGF5bG9hZCkuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoZXJyKTtcblx0XHR9KTtcblx0fVxuXHRjbGVhcigpIHtcblx0XHR0aGlzLmhvdE1vZHVsZXNNYXAuY2xlYXIoKSwgdGhpcy5kaXNwb3NlTWFwLmNsZWFyKCksIHRoaXMucHJ1bmVNYXAuY2xlYXIoKSwgdGhpcy5kYXRhTWFwLmNsZWFyKCksIHRoaXMuY3VzdG9tTGlzdGVuZXJzTWFwLmNsZWFyKCksIHRoaXMuY3R4VG9MaXN0ZW5lcnNNYXAuY2xlYXIoKTtcblx0fVxuXHRhc3luYyBwcnVuZVBhdGhzKHBhdGhzKSB7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwocGF0aHMubWFwKChwYXRoKSA9PiB7XG5cdFx0XHRsZXQgZGlzcG9zZXIgPSB0aGlzLmRpc3Bvc2VNYXAuZ2V0KHBhdGgpO1xuXHRcdFx0aWYgKGRpc3Bvc2VyKSByZXR1cm4gZGlzcG9zZXIodGhpcy5kYXRhTWFwLmdldChwYXRoKSk7XG5cdFx0fSkpLCBhd2FpdCBQcm9taXNlLmFsbChwYXRocy5tYXAoKHBhdGgpID0+IHtcblx0XHRcdGxldCBmbiA9IHRoaXMucHJ1bmVNYXAuZ2V0KHBhdGgpO1xuXHRcdFx0aWYgKGZuKSByZXR1cm4gZm4odGhpcy5kYXRhTWFwLmdldChwYXRoKSk7XG5cdFx0fSkpO1xuXHR9XG5cdHdhcm5GYWlsZWRVcGRhdGUoZXJyLCBwYXRoKSB7XG5cdFx0KCEoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHx8ICFlcnIubWVzc2FnZS5pbmNsdWRlcyhcImZldGNoXCIpKSAmJiB0aGlzLmxvZ2dlci5lcnJvcihlcnIpLCB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHJlbG9hZCAke3BhdGh9LiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBzeW50YXggZXJyb3JzIG9yIGltcG9ydGluZyBub24tZXhpc3RlbnQgbW9kdWxlcy4gKHNlZSBlcnJvcnMgYWJvdmUpYCk7XG5cdH1cblx0dXBkYXRlUXVldWUgPSBbXTtcblx0cGVuZGluZ1VwZGF0ZVF1ZXVlID0gITE7XG5cdC8qKlxuXHQqIGJ1ZmZlciBtdWx0aXBsZSBob3QgdXBkYXRlcyB0cmlnZ2VyZWQgYnkgdGhlIHNhbWUgc3JjIGNoYW5nZVxuXHQqIHNvIHRoYXQgdGhleSBhcmUgaW52b2tlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IHdlcmUgc2VudC5cblx0KiAob3RoZXJ3aXNlIHRoZSBvcmRlciBtYXkgYmUgaW5jb25zaXN0ZW50IGJlY2F1c2Ugb2YgdGhlIGh0dHAgcmVxdWVzdCByb3VuZCB0cmlwKVxuXHQqL1xuXHRhc3luYyBxdWV1ZVVwZGF0ZShwYXlsb2FkKSB7XG5cdFx0aWYgKHRoaXMudXBkYXRlUXVldWUucHVzaCh0aGlzLmZldGNoVXBkYXRlKHBheWxvYWQpKSwgIXRoaXMucGVuZGluZ1VwZGF0ZVF1ZXVlKSB7XG5cdFx0XHR0aGlzLnBlbmRpbmdVcGRhdGVRdWV1ZSA9ICEwLCBhd2FpdCBQcm9taXNlLnJlc29sdmUoKSwgdGhpcy5wZW5kaW5nVXBkYXRlUXVldWUgPSAhMTtcblx0XHRcdGxldCBsb2FkaW5nID0gWy4uLnRoaXMudXBkYXRlUXVldWVdO1xuXHRcdFx0dGhpcy51cGRhdGVRdWV1ZSA9IFtdLCAoYXdhaXQgUHJvbWlzZS5hbGwobG9hZGluZykpLmZvckVhY2goKGZuKSA9PiBmbiAmJiBmbigpKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgZmV0Y2hVcGRhdGUodXBkYXRlKSB7XG5cdFx0bGV0IHsgcGF0aCwgYWNjZXB0ZWRQYXRoLCBmaXJzdEludmFsaWRhdGVkQnkgfSA9IHVwZGF0ZSwgbW9kID0gdGhpcy5ob3RNb2R1bGVzTWFwLmdldChwYXRoKTtcblx0XHRpZiAoIW1vZCkgcmV0dXJuO1xuXHRcdGxldCBmZXRjaGVkTW9kdWxlLCBpc1NlbGZVcGRhdGUgPSBwYXRoID09PSBhY2NlcHRlZFBhdGgsIHF1YWxpZmllZENhbGxiYWNrcyA9IG1vZC5jYWxsYmFja3MuZmlsdGVyKCh7IGRlcHMgfSkgPT4gZGVwcy5pbmNsdWRlcyhhY2NlcHRlZFBhdGgpKTtcblx0XHRpZiAoaXNTZWxmVXBkYXRlIHx8IHF1YWxpZmllZENhbGxiYWNrcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRsZXQgZGlzcG9zZXIgPSB0aGlzLmRpc3Bvc2VNYXAuZ2V0KGFjY2VwdGVkUGF0aCk7XG5cdFx0XHRkaXNwb3NlciAmJiBhd2FpdCBkaXNwb3Nlcih0aGlzLmRhdGFNYXAuZ2V0KGFjY2VwdGVkUGF0aCkpO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZmV0Y2hlZE1vZHVsZSA9IGF3YWl0IHRoaXMuaW1wb3J0VXBkYXRlZE1vZHVsZSh1cGRhdGUpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aGlzLndhcm5GYWlsZWRVcGRhdGUoZSwgYWNjZXB0ZWRQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMuY3VycmVudEZpcnN0SW52YWxpZGF0ZWRCeSA9IGZpcnN0SW52YWxpZGF0ZWRCeTtcblx0XHRcdFx0Zm9yIChsZXQgeyBkZXBzLCBmbiB9IG9mIHF1YWxpZmllZENhbGxiYWNrcykgZm4oZGVwcy5tYXAoKGRlcCkgPT4gZGVwID09PSBhY2NlcHRlZFBhdGggPyBmZXRjaGVkTW9kdWxlIDogdm9pZCAwKSk7XG5cdFx0XHRcdGxldCBsb2dnZWRQYXRoID0gaXNTZWxmVXBkYXRlID8gcGF0aCA6IGAke2FjY2VwdGVkUGF0aH0gdmlhICR7cGF0aH1gO1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5kZWJ1ZyhgaG90IHVwZGF0ZWQ6ICR7bG9nZ2VkUGF0aH1gKTtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdHRoaXMuY3VycmVudEZpcnN0SW52YWxpZGF0ZWRCeSA9IHZvaWQgMDtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3NoYXJlZC9zc3JUcmFuc2Zvcm0udHNcbi8qKlxuKiBWaXRlIGNvbnZlcnRzIGBpbXBvcnQgeyB9IGZyb20gJ2ZvbydgIHRvIGBjb25zdCBfID0gX192aXRlX3Nzcl9pbXBvcnRfXygnZm9vJylgLlxuKiBUb3AtbGV2ZWwgaW1wb3J0cyBhbmQgZHluYW1pYyBpbXBvcnRzIHdvcmsgc2xpZ2h0bHkgZGlmZmVyZW50bHkgaW4gTm9kZS5qcy5cbiogVGhpcyBmdW5jdGlvbiBub3JtYWxpemVzIHRoZSBkaWZmZXJlbmNlcyBzbyBpdCBtYXRjaGVzIHByb2QgYmVoYXZpb3VyLlxuKi9cbmZ1bmN0aW9uIGFuYWx5emVJbXBvcnRlZE1vZERpZmZlcmVuY2UobW9kLCByYXdJZCwgbW9kdWxlVHlwZSwgbWV0YWRhdGEpIHtcblx0aWYgKCFtZXRhZGF0YT8uaXNEeW5hbWljSW1wb3J0ICYmIG1ldGFkYXRhPy5pbXBvcnRlZE5hbWVzPy5sZW5ndGgpIHtcblx0XHRsZXQgbWlzc2luZ0JpbmRpbmdzID0gbWV0YWRhdGEuaW1wb3J0ZWROYW1lcy5maWx0ZXIoKHMpID0+ICEocyBpbiBtb2QpKTtcblx0XHRpZiAobWlzc2luZ0JpbmRpbmdzLmxlbmd0aCkge1xuXHRcdFx0bGV0IGxhc3RCaW5kaW5nID0gbWlzc2luZ0JpbmRpbmdzW21pc3NpbmdCaW5kaW5ncy5sZW5ndGggLSAxXTtcblx0XHRcdHRocm93IFN5bnRheEVycm9yKG1vZHVsZVR5cGUgPT09IFwibW9kdWxlXCIgPyBgW3ZpdGVdIFRoZSByZXF1ZXN0ZWQgbW9kdWxlICcke3Jhd0lkfScgZG9lcyBub3QgcHJvdmlkZSBhbiBleHBvcnQgbmFtZWQgJyR7bGFzdEJpbmRpbmd9J2AgOiBgXFxcblt2aXRlXSBOYW1lZCBleHBvcnQgJyR7bGFzdEJpbmRpbmd9JyBub3QgZm91bmQuIFRoZSByZXF1ZXN0ZWQgbW9kdWxlICcke3Jhd0lkfScgaXMgYSBDb21tb25KUyBtb2R1bGUsIHdoaWNoIG1heSBub3Qgc3VwcG9ydCBhbGwgbW9kdWxlLmV4cG9ydHMgYXMgbmFtZWQgZXhwb3J0cy5cbkNvbW1vbkpTIG1vZHVsZXMgY2FuIGFsd2F5cyBiZSBpbXBvcnRlZCB2aWEgdGhlIGRlZmF1bHQgZXhwb3J0LCBmb3IgZXhhbXBsZSB1c2luZzpcblxuaW1wb3J0IHBrZyBmcm9tICcke3Jhd0lkfSc7XG5jb25zdCB7JHttaXNzaW5nQmluZGluZ3Muam9pbihcIiwgXCIpfX0gPSBwa2c7XG5gKTtcblx0XHR9XG5cdH1cbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9uYW5vaWRANS4xLjcvbm9kZV9tb2R1bGVzL25hbm9pZC9ub24tc2VjdXJlL2luZGV4LmpzXG5sZXQgbmFub2lkID0gKHNpemUgPSAyMSkgPT4ge1xuXHRsZXQgaWQgPSBcIlwiLCBpID0gc2l6ZSB8IDA7XG5cdGZvciAoOyBpLS07KSBpZCArPSBcInVzZWFuZG9tLTI2VDE5ODM0MFBYNzVweEpBQ0tWRVJZTUlOREJVU0hXT0xGX0dRWmJmZ2hqa2xxdnd5enJpY3RcIltNYXRoLnJhbmRvbSgpICogNjQgfCAwXTtcblx0cmV0dXJuIGlkO1xufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9zaGFyZWQvbW9kdWxlUnVubmVyVHJhbnNwb3J0LnRzXG5mdW5jdGlvbiByZXZpdmVJbnZva2VFcnJvcihlKSB7XG5cdGxldCBlcnJvciA9IEVycm9yKGUubWVzc2FnZSB8fCBcIlVua25vd24gaW52b2tlIGVycm9yXCIpO1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihlcnJvciwgZSwgeyBydW5uZXJFcnJvcjogLyogQF9fUFVSRV9fICovIEVycm9yKFwiUnVubmVyRXJyb3JcIikgfSksIGVycm9yO1xufVxuY29uc3QgY3JlYXRlSW52b2tlYWJsZVRyYW5zcG9ydCA9ICh0cmFuc3BvcnQpID0+IHtcblx0aWYgKHRyYW5zcG9ydC5pbnZva2UpIHJldHVybiB7XG5cdFx0Li4udHJhbnNwb3J0LFxuXHRcdGFzeW5jIGludm9rZShuYW1lLCBkYXRhKSB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gYXdhaXQgdHJhbnNwb3J0Lmludm9rZSh7XG5cdFx0XHRcdHR5cGU6IFwiY3VzdG9tXCIsXG5cdFx0XHRcdGV2ZW50OiBcInZpdGU6aW52b2tlXCIsXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRpZDogXCJzZW5kXCIsXG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRkYXRhXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0aWYgKFwiZXJyb3JcIiBpbiByZXN1bHQpIHRocm93IHJldml2ZUludm9rZUVycm9yKHJlc3VsdC5lcnJvcik7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJlc3VsdDtcblx0XHR9XG5cdH07XG5cdGlmICghdHJhbnNwb3J0LnNlbmQgfHwgIXRyYW5zcG9ydC5jb25uZWN0KSB0aHJvdyBFcnJvcihcInRyYW5zcG9ydCBtdXN0IGltcGxlbWVudCBzZW5kIGFuZCBjb25uZWN0IHdoZW4gaW52b2tlIGlzIG5vdCBpbXBsZW1lbnRlZFwiKTtcblx0bGV0IHJwY1Byb21pc2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0cmV0dXJuIHtcblx0XHQuLi50cmFuc3BvcnQsXG5cdFx0Y29ubmVjdCh7IG9uTWVzc2FnZSwgb25EaXNjb25uZWN0aW9uIH0pIHtcblx0XHRcdHJldHVybiB0cmFuc3BvcnQuY29ubmVjdCh7XG5cdFx0XHRcdG9uTWVzc2FnZShwYXlsb2FkKSB7XG5cdFx0XHRcdFx0aWYgKHBheWxvYWQudHlwZSA9PT0gXCJjdXN0b21cIiAmJiBwYXlsb2FkLmV2ZW50ID09PSBcInZpdGU6aW52b2tlXCIpIHtcblx0XHRcdFx0XHRcdGxldCBkYXRhID0gcGF5bG9hZC5kYXRhO1xuXHRcdFx0XHRcdFx0aWYgKGRhdGEuaWQuc3RhcnRzV2l0aChcInJlc3BvbnNlOlwiKSkge1xuXHRcdFx0XHRcdFx0XHRsZXQgaW52b2tlSWQgPSBkYXRhLmlkLnNsaWNlKDkpLCBwcm9taXNlID0gcnBjUHJvbWlzZXMuZ2V0KGludm9rZUlkKTtcblx0XHRcdFx0XHRcdFx0aWYgKCFwcm9taXNlKSByZXR1cm47XG5cdFx0XHRcdFx0XHRcdHByb21pc2UudGltZW91dElkICYmIGNsZWFyVGltZW91dChwcm9taXNlLnRpbWVvdXRJZCksIHJwY1Byb21pc2VzLmRlbGV0ZShpbnZva2VJZCk7XG5cdFx0XHRcdFx0XHRcdGxldCB7IGVycm9yLCByZXN1bHQgfSA9IGRhdGEuZGF0YTtcblx0XHRcdFx0XHRcdFx0ZXJyb3IgPyBwcm9taXNlLnJlamVjdChlcnJvcikgOiBwcm9taXNlLnJlc29sdmUocmVzdWx0KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvbk1lc3NhZ2UocGF5bG9hZCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uRGlzY29ubmVjdGlvblxuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRkaXNjb25uZWN0KCkge1xuXHRcdFx0cmV0dXJuIHJwY1Byb21pc2VzLmZvckVhY2goKHByb21pc2UpID0+IHtcblx0XHRcdFx0cHJvbWlzZS5yZWplY3QoLyogQF9fUFVSRV9fICovIEVycm9yKGB0cmFuc3BvcnQgd2FzIGRpc2Nvbm5lY3RlZCwgY2Fubm90IGNhbGwgJHtKU09OLnN0cmluZ2lmeShwcm9taXNlLm5hbWUpfWApKTtcblx0XHRcdH0pLCBycGNQcm9taXNlcy5jbGVhcigpLCB0cmFuc3BvcnQuZGlzY29ubmVjdD8uKCk7XG5cdFx0fSxcblx0XHRzZW5kKGRhdGEpIHtcblx0XHRcdHJldHVybiB0cmFuc3BvcnQuc2VuZChkYXRhKTtcblx0XHR9LFxuXHRcdGFzeW5jIGludm9rZShuYW1lLCBkYXRhKSB7XG5cdFx0XHRsZXQgcHJvbWlzZUlkID0gbmFub2lkKCksIHdyYXBwZWREYXRhID0ge1xuXHRcdFx0XHR0eXBlOiBcImN1c3RvbVwiLFxuXHRcdFx0XHRldmVudDogXCJ2aXRlOmludm9rZVwiLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRpZDogYHNlbmQ6JHtwcm9taXNlSWR9YCxcblx0XHRcdFx0XHRkYXRhXG5cdFx0XHRcdH1cblx0XHRcdH0sIHNlbmRQcm9taXNlID0gdHJhbnNwb3J0LnNlbmQod3JhcHBlZERhdGEpLCB7IHByb21pc2UsIHJlc29sdmUsIHJlamVjdCB9ID0gcHJvbWlzZVdpdGhSZXNvbHZlcnMoKSwgdGltZW91dCA9IHRyYW5zcG9ydC50aW1lb3V0ID8/IDZlNCwgdGltZW91dElkO1xuXHRcdFx0dGltZW91dCA+IDAgJiYgKHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRycGNQcm9taXNlcy5kZWxldGUocHJvbWlzZUlkKSwgcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBFcnJvcihgdHJhbnNwb3J0IGludm9rZSB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0fW1zIChkYXRhOiAke0pTT04uc3RyaW5naWZ5KHdyYXBwZWREYXRhKX0pYCkpO1xuXHRcdFx0fSwgdGltZW91dCksIHRpbWVvdXRJZD8udW5yZWY/LigpKSwgcnBjUHJvbWlzZXMuc2V0KHByb21pc2VJZCwge1xuXHRcdFx0XHRyZXNvbHZlLFxuXHRcdFx0XHRyZWplY3QsXG5cdFx0XHRcdG5hbWUsXG5cdFx0XHRcdHRpbWVvdXRJZFxuXHRcdFx0fSksIHNlbmRQcm9taXNlICYmIHNlbmRQcm9taXNlLmNhdGNoKChlcnIpID0+IHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXRJZCksIHJwY1Byb21pc2VzLmRlbGV0ZShwcm9taXNlSWQpLCByZWplY3QoZXJyKTtcblx0XHRcdH0pO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIGF3YWl0IHByb21pc2U7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0dGhyb3cgcmV2aXZlSW52b2tlRXJyb3IoZXJyKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59LCBub3JtYWxpemVNb2R1bGVSdW5uZXJUcmFuc3BvcnQgPSAodHJhbnNwb3J0KSA9PiB7XG5cdGxldCBpbnZva2VhYmxlVHJhbnNwb3J0ID0gY3JlYXRlSW52b2tlYWJsZVRyYW5zcG9ydCh0cmFuc3BvcnQpLCBpc0Nvbm5lY3RlZCA9ICFpbnZva2VhYmxlVHJhbnNwb3J0LmNvbm5lY3QsIGNvbm5lY3RpbmdQcm9taXNlO1xuXHRyZXR1cm4ge1xuXHRcdC4uLnRyYW5zcG9ydCxcblx0XHQuLi5pbnZva2VhYmxlVHJhbnNwb3J0LmNvbm5lY3QgPyB7IGFzeW5jIGNvbm5lY3Qob25NZXNzYWdlKSB7XG5cdFx0XHRpZiAoaXNDb25uZWN0ZWQpIHJldHVybjtcblx0XHRcdGlmIChjb25uZWN0aW5nUHJvbWlzZSkge1xuXHRcdFx0XHRhd2FpdCBjb25uZWN0aW5nUHJvbWlzZTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0bGV0IG1heWJlUHJvbWlzZSA9IGludm9rZWFibGVUcmFuc3BvcnQuY29ubmVjdCh7XG5cdFx0XHRcdG9uTWVzc2FnZTogb25NZXNzYWdlID8/ICgoKSA9PiB7fSksXG5cdFx0XHRcdG9uRGlzY29ubmVjdGlvbigpIHtcblx0XHRcdFx0XHRpc0Nvbm5lY3RlZCA9ICExO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG1heWJlUHJvbWlzZSAmJiAoY29ubmVjdGluZ1Byb21pc2UgPSBtYXliZVByb21pc2UsIGF3YWl0IGNvbm5lY3RpbmdQcm9taXNlLCBjb25uZWN0aW5nUHJvbWlzZSA9IHZvaWQgMCksIGlzQ29ubmVjdGVkID0gITA7XG5cdFx0fSB9IDoge30sXG5cdFx0Li4uaW52b2tlYWJsZVRyYW5zcG9ydC5kaXNjb25uZWN0ID8geyBhc3luYyBkaXNjb25uZWN0KCkge1xuXHRcdFx0aXNDb25uZWN0ZWQgJiYgKGNvbm5lY3RpbmdQcm9taXNlICYmIGF3YWl0IGNvbm5lY3RpbmdQcm9taXNlLCBpc0Nvbm5lY3RlZCA9ICExLCBhd2FpdCBpbnZva2VhYmxlVHJhbnNwb3J0LmRpc2Nvbm5lY3QoKSk7XG5cdFx0fSB9IDoge30sXG5cdFx0YXN5bmMgc2VuZChkYXRhKSB7XG5cdFx0XHRpZiAoaW52b2tlYWJsZVRyYW5zcG9ydC5zZW5kKSB7XG5cdFx0XHRcdGlmICghaXNDb25uZWN0ZWQpIGlmIChjb25uZWN0aW5nUHJvbWlzZSkgYXdhaXQgY29ubmVjdGluZ1Byb21pc2U7XG5cdFx0XHRcdGVsc2UgdGhyb3cgRXJyb3IoXCJzZW5kIHdhcyBjYWxsZWQgYmVmb3JlIGNvbm5lY3RcIik7XG5cdFx0XHRcdGF3YWl0IGludm9rZWFibGVUcmFuc3BvcnQuc2VuZChkYXRhKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGFzeW5jIGludm9rZShuYW1lLCBkYXRhKSB7XG5cdFx0XHRpZiAoIWlzQ29ubmVjdGVkKSBpZiAoY29ubmVjdGluZ1Byb21pc2UpIGF3YWl0IGNvbm5lY3RpbmdQcm9taXNlO1xuXHRcdFx0ZWxzZSB0aHJvdyBFcnJvcihcImludm9rZSB3YXMgY2FsbGVkIGJlZm9yZSBjb25uZWN0XCIpO1xuXHRcdFx0cmV0dXJuIGludm9rZWFibGVUcmFuc3BvcnQuaW52b2tlKG5hbWUsIGRhdGEpO1xuXHRcdH1cblx0fTtcbn0sIGNyZWF0ZVdlYlNvY2tldE1vZHVsZVJ1bm5lclRyYW5zcG9ydCA9IChvcHRpb25zKSA9PiB7XG5cdGxldCBwaW5nSW50ZXJ2YWwgPSBvcHRpb25zLnBpbmdJbnRlcnZhbCA/PyAzZTQsIHdzLCBwaW5nSW50ZXJ2YWxJZDtcblx0cmV0dXJuIHtcblx0XHRhc3luYyBjb25uZWN0KHsgb25NZXNzYWdlLCBvbkRpc2Nvbm5lY3Rpb24gfSkge1xuXHRcdFx0bGV0IHNvY2tldCA9IG9wdGlvbnMuY3JlYXRlQ29ubmVjdGlvbigpO1xuXHRcdFx0c29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGFzeW5jICh7IGRhdGEgfSkgPT4ge1xuXHRcdFx0XHRvbk1lc3NhZ2UoSlNPTi5wYXJzZShkYXRhKSk7XG5cdFx0XHR9KTtcblx0XHRcdGxldCBpc09wZW5lZCA9IHNvY2tldC5yZWFkeVN0YXRlID09PSBzb2NrZXQuT1BFTjtcblx0XHRcdGlzT3BlbmVkIHx8IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0c29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJvcGVuXCIsICgpID0+IHtcblx0XHRcdFx0XHRpc09wZW5lZCA9ICEwLCByZXNvbHZlKCk7XG5cdFx0XHRcdH0sIHsgb25jZTogITAgfSksIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKFwiY2xvc2VcIiwgYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdGlmICghaXNPcGVuZWQpIHtcblx0XHRcdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gRXJyb3IoXCJXZWJTb2NrZXQgY2xvc2VkIHdpdGhvdXQgb3BlbmVkLlwiKSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9uTWVzc2FnZSh7XG5cdFx0XHRcdFx0XHR0eXBlOiBcImN1c3RvbVwiLFxuXHRcdFx0XHRcdFx0ZXZlbnQ6IFwidml0ZTp3czpkaXNjb25uZWN0XCIsXG5cdFx0XHRcdFx0XHRkYXRhOiB7IHdlYlNvY2tldDogc29ja2V0IH1cblx0XHRcdFx0XHR9KSwgb25EaXNjb25uZWN0aW9uKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSksIG9uTWVzc2FnZSh7XG5cdFx0XHRcdHR5cGU6IFwiY3VzdG9tXCIsXG5cdFx0XHRcdGV2ZW50OiBcInZpdGU6d3M6Y29ubmVjdFwiLFxuXHRcdFx0XHRkYXRhOiB7IHdlYlNvY2tldDogc29ja2V0IH1cblx0XHRcdH0pLCB3cyA9IHNvY2tldCwgcGluZ0ludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdFx0XHRcdHNvY2tldC5yZWFkeVN0YXRlID09PSBzb2NrZXQuT1BFTiAmJiBzb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7IHR5cGU6IFwicGluZ1wiIH0pKTtcblx0XHRcdH0sIHBpbmdJbnRlcnZhbCk7XG5cdFx0fSxcblx0XHRkaXNjb25uZWN0KCkge1xuXHRcdFx0Y2xlYXJJbnRlcnZhbChwaW5nSW50ZXJ2YWxJZCksIHdzPy5jbG9zZSgpO1xuXHRcdH0sXG5cdFx0c2VuZChkYXRhKSB7XG5cdFx0XHR3cy5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcblx0XHR9XG5cdH07XG59O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3NoYXJlZC9idWlsdGluLnRzXG5mdW5jdGlvbiBjcmVhdGVJc0J1aWx0aW4oYnVpbHRpbnMpIHtcblx0bGV0IHBsYWluQnVpbHRpbnNTZXQgPSBuZXcgU2V0KGJ1aWx0aW5zLmZpbHRlcigoYnVpbHRpbikgPT4gdHlwZW9mIGJ1aWx0aW4gPT0gXCJzdHJpbmdcIikpLCByZWdleEJ1aWx0aW5zID0gYnVpbHRpbnMuZmlsdGVyKChidWlsdGluKSA9PiB0eXBlb2YgYnVpbHRpbiAhPSBcInN0cmluZ1wiKTtcblx0cmV0dXJuIChpZCkgPT4gcGxhaW5CdWlsdGluc1NldC5oYXMoaWQpIHx8IHJlZ2V4QnVpbHRpbnMuc29tZSgocmVnZXhwKSA9PiByZWdleHAudGVzdChpZCkpO1xufVxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL21vZHVsZS1ydW5uZXIvY29uc3RhbnRzLnRzXG5jb25zdCBzc3JNb2R1bGVFeHBvcnRzS2V5ID0gXCJfX3ZpdGVfc3NyX2V4cG9ydHNfX1wiLCBzc3JJbXBvcnRLZXkgPSBcIl9fdml0ZV9zc3JfaW1wb3J0X19cIiwgc3NyRHluYW1pY0ltcG9ydEtleSA9IFwiX192aXRlX3Nzcl9keW5hbWljX2ltcG9ydF9fXCIsIHNzckV4cG9ydEFsbEtleSA9IFwiX192aXRlX3Nzcl9leHBvcnRBbGxfX1wiLCBzc3JFeHBvcnROYW1lS2V5ID0gXCJfX3ZpdGVfc3NyX2V4cG9ydE5hbWVfX1wiLCBzc3JJbXBvcnRNZXRhS2V5ID0gXCJfX3ZpdGVfc3NyX2ltcG9ydF9tZXRhX19cIiwgbm9vcCA9ICgpID0+IHt9LCBzaWxlbnRDb25zb2xlID0ge1xuXHRkZWJ1Zzogbm9vcCxcblx0ZXJyb3I6IG5vb3Bcbn0sIGhtckxvZ2dlciA9IHtcblx0ZGVidWc6ICguLi5tc2cpID0+IGNvbnNvbGUubG9nKFwiW3ZpdGVdXCIsIC4uLm1zZyksXG5cdGVycm9yOiAoZXJyb3IpID0+IGNvbnNvbGUubG9nKFwiW3ZpdGVdXCIsIGVycm9yKVxufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9zaGFyZWQvaG1ySGFuZGxlci50c1xuZnVuY3Rpb24gY3JlYXRlSE1SSGFuZGxlcihoYW5kbGVyKSB7XG5cdGxldCBxdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuXHRyZXR1cm4gKHBheWxvYWQpID0+IHF1ZXVlLmVucXVldWUoKCkgPT4gaGFuZGxlcihwYXlsb2FkKSk7XG59XG52YXIgUXVldWUgPSBjbGFzcyB7XG5cdHF1ZXVlID0gW107XG5cdHBlbmRpbmcgPSAhMTtcblx0ZW5xdWV1ZShwcm9taXNlKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucXVldWUucHVzaCh7XG5cdFx0XHRcdHByb21pc2UsXG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdFxuXHRcdFx0fSksIHRoaXMuZGVxdWV1ZSgpO1xuXHRcdH0pO1xuXHR9XG5cdGRlcXVldWUoKSB7XG5cdFx0aWYgKHRoaXMucGVuZGluZykgcmV0dXJuICExO1xuXHRcdGxldCBpdGVtID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuXHRcdHJldHVybiBpdGVtID8gKHRoaXMucGVuZGluZyA9ICEwLCBpdGVtLnByb21pc2UoKS50aGVuKGl0ZW0ucmVzb2x2ZSkuY2F0Y2goaXRlbS5yZWplY3QpLmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0dGhpcy5wZW5kaW5nID0gITEsIHRoaXMuZGVxdWV1ZSgpO1xuXHRcdH0pLCAhMCkgOiAhMTtcblx0fVxufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL2htckhhbmRsZXIudHNcbmZ1bmN0aW9uIGNyZWF0ZUhNUkhhbmRsZXJGb3JSdW5uZXIocnVubmVyKSB7XG5cdHJldHVybiBjcmVhdGVITVJIYW5kbGVyKGFzeW5jIChwYXlsb2FkKSA9PiB7XG5cdFx0bGV0IGhtckNsaWVudCA9IHJ1bm5lci5obXJDbGllbnQ7XG5cdFx0aWYgKCEoIWhtckNsaWVudCB8fCBydW5uZXIuaXNDbG9zZWQoKSkpIHN3aXRjaCAocGF5bG9hZC50eXBlKSB7XG5cdFx0XHRjYXNlIFwiY29ubmVjdGVkXCI6XG5cdFx0XHRcdGhtckNsaWVudC5sb2dnZXIuZGVidWcoXCJjb25uZWN0ZWQuXCIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ1cGRhdGVcIjpcblx0XHRcdFx0YXdhaXQgaG1yQ2xpZW50Lm5vdGlmeUxpc3RlbmVycyhcInZpdGU6YmVmb3JlVXBkYXRlXCIsIHBheWxvYWQpLCBhd2FpdCBQcm9taXNlLmFsbChwYXlsb2FkLnVwZGF0ZXMubWFwKGFzeW5jICh1cGRhdGUpID0+IHtcblx0XHRcdFx0XHRpZiAodXBkYXRlLnR5cGUgPT09IFwianMtdXBkYXRlXCIpIHJldHVybiB1cGRhdGUuYWNjZXB0ZWRQYXRoID0gdW53cmFwSWQodXBkYXRlLmFjY2VwdGVkUGF0aCksIHVwZGF0ZS5wYXRoID0gdW53cmFwSWQodXBkYXRlLnBhdGgpLCBobXJDbGllbnQucXVldWVVcGRhdGUodXBkYXRlKTtcblx0XHRcdFx0XHRobXJDbGllbnQubG9nZ2VyLmVycm9yKFwiY3NzIGhtciBpcyBub3Qgc3VwcG9ydGVkIGluIHJ1bm5lciBtb2RlLlwiKTtcblx0XHRcdFx0fSkpLCBhd2FpdCBobXJDbGllbnQubm90aWZ5TGlzdGVuZXJzKFwidml0ZTphZnRlclVwZGF0ZVwiLCBwYXlsb2FkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY3VzdG9tXCI6XG5cdFx0XHRcdGF3YWl0IGhtckNsaWVudC5ub3RpZnlMaXN0ZW5lcnMocGF5bG9hZC5ldmVudCwgcGF5bG9hZC5kYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiZnVsbC1yZWxvYWRcIjoge1xuXHRcdFx0XHRsZXQgeyB0cmlnZ2VyZWRCeSB9ID0gcGF5bG9hZCwgY2xlYXJFbnRyeXBvaW50VXJscyA9IHRyaWdnZXJlZEJ5ID8gZ2V0TW9kdWxlc0VudHJ5cG9pbnRzKHJ1bm5lciwgZ2V0TW9kdWxlc0J5RmlsZShydW5uZXIsIHNsYXNoKHRyaWdnZXJlZEJ5KSkpIDogZmluZEFsbEVudHJ5cG9pbnRzKHJ1bm5lcik7XG5cdFx0XHRcdGlmICghY2xlYXJFbnRyeXBvaW50VXJscy5zaXplKSBicmVhaztcblx0XHRcdFx0aG1yQ2xpZW50LmxvZ2dlci5kZWJ1ZyhcInByb2dyYW0gcmVsb2FkXCIpLCBhd2FpdCBobXJDbGllbnQubm90aWZ5TGlzdGVuZXJzKFwidml0ZTpiZWZvcmVGdWxsUmVsb2FkXCIsIHBheWxvYWQpLCBydW5uZXIuZXZhbHVhdGVkTW9kdWxlcy5jbGVhcigpO1xuXHRcdFx0XHRmb3IgKGxldCB1cmwgb2YgY2xlYXJFbnRyeXBvaW50VXJscykge1xuXHRcdFx0XHRcdGlmIChydW5uZXIuaXNDbG9zZWQoKSkgYnJlYWs7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGF3YWl0IHJ1bm5lci5pbXBvcnQodXJsKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRcdGlmIChydW5uZXIuaXNDbG9zZWQoKSkgYnJlYWs7XG5cdFx0XHRcdFx0XHRlcnIuY29kZSAhPT0gXCJFUlJfT1VUREFURURfT1BUSU1JWkVEX0RFUFwiICYmIGhtckNsaWVudC5sb2dnZXIuZXJyb3IoYEFuIGVycm9yIGhhcHBlbmVkIGR1cmluZyBmdWxsIHJlbG9hZFxcbiR7ZXJyLm1lc3NhZ2V9XFxuJHtlcnIuc3RhY2t9YCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcInBydW5lXCI6XG5cdFx0XHRcdGF3YWl0IGhtckNsaWVudC5ub3RpZnlMaXN0ZW5lcnMoXCJ2aXRlOmJlZm9yZVBydW5lXCIsIHBheWxvYWQpLCBhd2FpdCBobXJDbGllbnQucHJ1bmVQYXRocyhwYXlsb2FkLnBhdGhzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiZXJyb3JcIjoge1xuXHRcdFx0XHRhd2FpdCBobXJDbGllbnQubm90aWZ5TGlzdGVuZXJzKFwidml0ZTplcnJvclwiLCBwYXlsb2FkKTtcblx0XHRcdFx0bGV0IGVyciA9IHBheWxvYWQuZXJyO1xuXHRcdFx0XHRobXJDbGllbnQubG9nZ2VyLmVycm9yKGBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcXG4ke2Vyci5tZXNzYWdlfVxcbiR7ZXJyLnN0YWNrfWApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJwaW5nXCI6IGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogcmV0dXJuIHBheWxvYWQ7XG5cdFx0fVxuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldE1vZHVsZXNCeUZpbGUocnVubmVyLCBmaWxlKSB7XG5cdGxldCBub2RlcyA9IHJ1bm5lci5ldmFsdWF0ZWRNb2R1bGVzLmdldE1vZHVsZXNCeUZpbGUoZmlsZSk7XG5cdHJldHVybiBub2RlcyA/IFsuLi5ub2Rlc10ubWFwKChub2RlKSA9PiBub2RlLmlkKSA6IFtdO1xufVxuZnVuY3Rpb24gZ2V0TW9kdWxlc0VudHJ5cG9pbnRzKHJ1bm5lciwgbW9kdWxlcywgdmlzaXRlZCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIGVudHJ5cG9pbnRzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkge1xuXHRmb3IgKGxldCBtb2R1bGVJZCBvZiBtb2R1bGVzKSB7XG5cdFx0aWYgKHZpc2l0ZWQuaGFzKG1vZHVsZUlkKSkgY29udGludWU7XG5cdFx0dmlzaXRlZC5hZGQobW9kdWxlSWQpO1xuXHRcdGxldCBtb2R1bGUgPSBydW5uZXIuZXZhbHVhdGVkTW9kdWxlcy5nZXRNb2R1bGVCeUlkKG1vZHVsZUlkKTtcblx0XHRpZiAobW9kdWxlKSB7XG5cdFx0XHRpZiAoIW1vZHVsZS5pbXBvcnRlcnMuc2l6ZSkge1xuXHRcdFx0XHRlbnRyeXBvaW50cy5hZGQobW9kdWxlLnVybCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChsZXQgaW1wb3J0ZXIgb2YgbW9kdWxlLmltcG9ydGVycykgZ2V0TW9kdWxlc0VudHJ5cG9pbnRzKHJ1bm5lciwgW2ltcG9ydGVyXSwgdmlzaXRlZCwgZW50cnlwb2ludHMpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZW50cnlwb2ludHM7XG59XG5mdW5jdGlvbiBmaW5kQWxsRW50cnlwb2ludHMocnVubmVyLCBlbnRyeXBvaW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpIHtcblx0Zm9yIChsZXQgbW9kIG9mIHJ1bm5lci5ldmFsdWF0ZWRNb2R1bGVzLmlkVG9Nb2R1bGVNYXAudmFsdWVzKCkpIG1vZC5pbXBvcnRlcnMuc2l6ZSB8fCBlbnRyeXBvaW50cy5hZGQobW9kLnVybCk7XG5cdHJldHVybiBlbnRyeXBvaW50cztcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL3NvdXJjZW1hcC9pbnRlcmNlcHRvci50c1xuY29uc3Qgc291cmNlTWFwQ2FjaGUgPSB7fSwgZmlsZUNvbnRlbnRzQ2FjaGUgPSB7fSwgZXZhbHVhdGVkTW9kdWxlc0NhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgcmV0cmlldmVGaWxlSGFuZGxlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCByZXRyaWV2ZVNvdXJjZU1hcEhhbmRsZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgY3JlYXRlRXhlY0hhbmRsZXJzID0gKGhhbmRsZXJzKSA9PiAoKC4uLmFyZ3MpID0+IHtcblx0Zm9yIChsZXQgaGFuZGxlciBvZiBoYW5kbGVycykge1xuXHRcdGxldCByZXN1bHQgPSBoYW5kbGVyKC4uLmFyZ3MpO1xuXHRcdGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQ7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59KSwgcmV0cmlldmVGaWxlRnJvbUhhbmRsZXJzID0gY3JlYXRlRXhlY0hhbmRsZXJzKHJldHJpZXZlRmlsZUhhbmRsZXJzKSwgcmV0cmlldmVTb3VyY2VNYXBGcm9tSGFuZGxlcnMgPSBjcmVhdGVFeGVjSGFuZGxlcnMocmV0cmlldmVTb3VyY2VNYXBIYW5kbGVycyk7XG5sZXQgb3ZlcnJpZGRlbiA9ICExO1xuY29uc3Qgb3JpZ2luYWxQcmVwYXJlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7XG5mdW5jdGlvbiByZXNldEludGVyY2VwdG9yKHJ1bm5lciwgb3B0aW9ucykge1xuXHRldmFsdWF0ZWRNb2R1bGVzQ2FjaGUuZGVsZXRlKHJ1bm5lci5ldmFsdWF0ZWRNb2R1bGVzKSwgb3B0aW9ucy5yZXRyaWV2ZUZpbGUgJiYgcmV0cmlldmVGaWxlSGFuZGxlcnMuZGVsZXRlKG9wdGlvbnMucmV0cmlldmVGaWxlKSwgb3B0aW9ucy5yZXRyaWV2ZVNvdXJjZU1hcCAmJiByZXRyaWV2ZVNvdXJjZU1hcEhhbmRsZXJzLmRlbGV0ZShvcHRpb25zLnJldHJpZXZlU291cmNlTWFwKSwgZXZhbHVhdGVkTW9kdWxlc0NhY2hlLnNpemUgPT09IDAgJiYgKEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gb3JpZ2luYWxQcmVwYXJlLCBvdmVycmlkZGVuID0gITEpO1xufVxuZnVuY3Rpb24gaW50ZXJjZXB0U3RhY2tUcmFjZShydW5uZXIsIG9wdGlvbnMgPSB7fSkge1xuXHRyZXR1cm4gb3ZlcnJpZGRlbiB8fD0gKEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJlcGFyZVN0YWNrVHJhY2UsICEwKSwgZXZhbHVhdGVkTW9kdWxlc0NhY2hlLmFkZChydW5uZXIuZXZhbHVhdGVkTW9kdWxlcyksIG9wdGlvbnMucmV0cmlldmVGaWxlICYmIHJldHJpZXZlRmlsZUhhbmRsZXJzLmFkZChvcHRpb25zLnJldHJpZXZlRmlsZSksIG9wdGlvbnMucmV0cmlldmVTb3VyY2VNYXAgJiYgcmV0cmlldmVTb3VyY2VNYXBIYW5kbGVycy5hZGQob3B0aW9ucy5yZXRyaWV2ZVNvdXJjZU1hcCksICgpID0+IHJlc2V0SW50ZXJjZXB0b3IocnVubmVyLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHN1cHBvcnRSZWxhdGl2ZVVSTChmaWxlLCB1cmwpIHtcblx0aWYgKCFmaWxlKSByZXR1cm4gdXJsO1xuXHRsZXQgZGlyID0gcG9zaXhEaXJuYW1lKHNsYXNoKGZpbGUpKSwgbWF0Y2ggPSAvXlxcdys6XFwvXFwvW14vXSovLmV4ZWMoZGlyKSwgcHJvdG9jb2wgPSBtYXRjaCA/IG1hdGNoWzBdIDogXCJcIiwgc3RhcnRQYXRoID0gZGlyLnNsaWNlKHByb3RvY29sLmxlbmd0aCk7XG5cdHJldHVybiBwcm90b2NvbCAmJiAvXlxcL1xcdzovLnRlc3Qoc3RhcnRQYXRoKSA/IChwcm90b2NvbCArPSBcIi9cIiwgcHJvdG9jb2wgKyBzbGFzaChwb3NpeFJlc29sdmUoc3RhcnRQYXRoLCB1cmwpKSkgOiBwcm90b2NvbCArIHBvc2l4UmVzb2x2ZShzdGFydFBhdGgsIHVybCk7XG59XG5mdW5jdGlvbiBnZXRSdW5uZXJTb3VyY2VNYXAocG9zaXRpb24pIHtcblx0Zm9yIChsZXQgbW9kdWxlR3JhcGggb2YgZXZhbHVhdGVkTW9kdWxlc0NhY2hlKSB7XG5cdFx0bGV0IHNvdXJjZU1hcCA9IG1vZHVsZUdyYXBoLmdldE1vZHVsZVNvdXJjZU1hcEJ5SWQocG9zaXRpb24uc291cmNlKTtcblx0XHRpZiAoc291cmNlTWFwKSByZXR1cm4ge1xuXHRcdFx0dXJsOiBwb3NpdGlvbi5zb3VyY2UsXG5cdFx0XHRtYXA6IHNvdXJjZU1hcCxcblx0XHRcdHZpdGU6ICEwXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIHJldHJpZXZlRmlsZShwYXRoKSB7XG5cdGlmIChwYXRoIGluIGZpbGVDb250ZW50c0NhY2hlKSByZXR1cm4gZmlsZUNvbnRlbnRzQ2FjaGVbcGF0aF07XG5cdGxldCBjb250ZW50ID0gcmV0cmlldmVGaWxlRnJvbUhhbmRsZXJzKHBhdGgpO1xuXHRyZXR1cm4gdHlwZW9mIGNvbnRlbnQgPT0gXCJzdHJpbmdcIiA/IChmaWxlQ29udGVudHNDYWNoZVtwYXRoXSA9IGNvbnRlbnQsIGNvbnRlbnQpIDogbnVsbDtcbn1cbmZ1bmN0aW9uIHJldHJpZXZlU291cmNlTWFwVVJMKHNvdXJjZSkge1xuXHRsZXQgZmlsZURhdGEgPSByZXRyaWV2ZUZpbGUoc291cmNlKTtcblx0aWYgKCFmaWxlRGF0YSkgcmV0dXJuIG51bGw7XG5cdGxldCByZSA9IC9cXC9cXC9bQCNdXFxzKnNvdXJjZU1hcHBpbmdVUkw9KFteXFxzJ1wiXSspXFxzKiR8XFwvXFwqW0AjXVxccypzb3VyY2VNYXBwaW5nVVJMPVteXFxzKidcIl0rXFxzKlxcKlxcL1xccyokL2dtLCBsYXN0TWF0Y2gsIG1hdGNoO1xuXHRmb3IgKDsgbWF0Y2ggPSByZS5leGVjKGZpbGVEYXRhKTspIGxhc3RNYXRjaCA9IG1hdGNoO1xuXHRyZXR1cm4gbGFzdE1hdGNoID8gbGFzdE1hdGNoWzFdIDogbnVsbDtcbn1cbmNvbnN0IHJlU291cmNlTWFwID0gL15kYXRhOmFwcGxpY2F0aW9uXFwvanNvblteLF0rYmFzZTY0LC87XG5mdW5jdGlvbiByZXRyaWV2ZVNvdXJjZU1hcChzb3VyY2UpIHtcblx0bGV0IHVybEFuZE1hcCA9IHJldHJpZXZlU291cmNlTWFwRnJvbUhhbmRsZXJzKHNvdXJjZSk7XG5cdGlmICh1cmxBbmRNYXApIHJldHVybiB1cmxBbmRNYXA7XG5cdGxldCBzb3VyY2VNYXBwaW5nVVJMID0gcmV0cmlldmVTb3VyY2VNYXBVUkwoc291cmNlKTtcblx0aWYgKCFzb3VyY2VNYXBwaW5nVVJMKSByZXR1cm4gbnVsbDtcblx0bGV0IHNvdXJjZU1hcERhdGE7XG5cdGlmIChyZVNvdXJjZU1hcC50ZXN0KHNvdXJjZU1hcHBpbmdVUkwpKSB7XG5cdFx0bGV0IHJhd0RhdGEgPSBzb3VyY2VNYXBwaW5nVVJMLnNsaWNlKHNvdXJjZU1hcHBpbmdVUkwuaW5kZXhPZihcIixcIikgKyAxKTtcblx0XHRzb3VyY2VNYXBEYXRhID0gQnVmZmVyLmZyb20ocmF3RGF0YSwgXCJiYXNlNjRcIikudG9TdHJpbmcoKSwgc291cmNlTWFwcGluZ1VSTCA9IHNvdXJjZTtcblx0fSBlbHNlIHNvdXJjZU1hcHBpbmdVUkwgPSBzdXBwb3J0UmVsYXRpdmVVUkwoc291cmNlLCBzb3VyY2VNYXBwaW5nVVJMKSwgc291cmNlTWFwRGF0YSA9IHJldHJpZXZlRmlsZShzb3VyY2VNYXBwaW5nVVJMKTtcblx0cmV0dXJuIHNvdXJjZU1hcERhdGEgPyB7XG5cdFx0dXJsOiBzb3VyY2VNYXBwaW5nVVJMLFxuXHRcdG1hcDogc291cmNlTWFwRGF0YVxuXHR9IDogbnVsbDtcbn1cbmZ1bmN0aW9uIG1hcFNvdXJjZVBvc2l0aW9uKHBvc2l0aW9uKSB7XG5cdGlmICghcG9zaXRpb24uc291cmNlKSByZXR1cm4gcG9zaXRpb247XG5cdGxldCBzb3VyY2VNYXAgPSBnZXRSdW5uZXJTb3VyY2VNYXAocG9zaXRpb24pO1xuXHRpZiAoc291cmNlTWFwIHx8PSBzb3VyY2VNYXBDYWNoZVtwb3NpdGlvbi5zb3VyY2VdLCAhc291cmNlTWFwKSB7XG5cdFx0bGV0IHVybEFuZE1hcCA9IHJldHJpZXZlU291cmNlTWFwKHBvc2l0aW9uLnNvdXJjZSk7XG5cdFx0aWYgKHVybEFuZE1hcCAmJiB1cmxBbmRNYXAubWFwKSB7XG5cdFx0XHRsZXQgdXJsID0gdXJsQW5kTWFwLnVybDtcblx0XHRcdHNvdXJjZU1hcCA9IHNvdXJjZU1hcENhY2hlW3Bvc2l0aW9uLnNvdXJjZV0gPSB7XG5cdFx0XHRcdHVybCxcblx0XHRcdFx0bWFwOiBuZXcgRGVjb2RlZE1hcCh0eXBlb2YgdXJsQW5kTWFwLm1hcCA9PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh1cmxBbmRNYXAubWFwKSA6IHVybEFuZE1hcC5tYXAsIHVybClcblx0XHRcdH07XG5cdFx0XHRsZXQgY29udGVudHMgPSBzb3VyY2VNYXAubWFwPy5tYXAuc291cmNlc0NvbnRlbnQ7XG5cdFx0XHRzb3VyY2VNYXAubWFwICYmIGNvbnRlbnRzICYmIHNvdXJjZU1hcC5tYXAucmVzb2x2ZWRTb3VyY2VzLmZvckVhY2goKHNvdXJjZSwgaSkgPT4ge1xuXHRcdFx0XHRsZXQgY29udGVudCA9IGNvbnRlbnRzW2ldO1xuXHRcdFx0XHRpZiAoY29udGVudCAmJiBzb3VyY2UgJiYgdXJsKSB7XG5cdFx0XHRcdFx0bGV0IGNvbnRlbnRVcmwgPSBzdXBwb3J0UmVsYXRpdmVVUkwodXJsLCBzb3VyY2UpO1xuXHRcdFx0XHRcdGZpbGVDb250ZW50c0NhY2hlW2NvbnRlbnRVcmxdID0gY29udGVudDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHNvdXJjZU1hcCA9IHNvdXJjZU1hcENhY2hlW3Bvc2l0aW9uLnNvdXJjZV0gPSB7XG5cdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRtYXA6IG51bGxcblx0XHR9O1xuXHR9XG5cdGlmIChzb3VyY2VNYXAubWFwICYmIHNvdXJjZU1hcC51cmwpIHtcblx0XHRsZXQgb3JpZ2luYWxQb3NpdGlvbiA9IGdldE9yaWdpbmFsUG9zaXRpb24oc291cmNlTWFwLm1hcCwgcG9zaXRpb24pO1xuXHRcdGlmIChvcmlnaW5hbFBvc2l0aW9uICYmIG9yaWdpbmFsUG9zaXRpb24uc291cmNlICE9IG51bGwpIHJldHVybiBvcmlnaW5hbFBvc2l0aW9uLnNvdXJjZSA9IHN1cHBvcnRSZWxhdGl2ZVVSTChzb3VyY2VNYXAudXJsLCBvcmlnaW5hbFBvc2l0aW9uLnNvdXJjZSksIHNvdXJjZU1hcC52aXRlICYmIChvcmlnaW5hbFBvc2l0aW9uLl92aXRlID0gITApLCBvcmlnaW5hbFBvc2l0aW9uO1xuXHR9XG5cdHJldHVybiBwb3NpdGlvbjtcbn1cbmZ1bmN0aW9uIG1hcEV2YWxPcmlnaW4ob3JpZ2luKSB7XG5cdGxldCBtYXRjaCA9IC9eZXZhbCBhdCAoW14oXSspIFxcKCguKyk6KFxcZCspOihcXGQrKVxcKSQvLmV4ZWMob3JpZ2luKTtcblx0aWYgKG1hdGNoKSB7XG5cdFx0bGV0IHBvc2l0aW9uID0gbWFwU291cmNlUG9zaXRpb24oe1xuXHRcdFx0bmFtZTogbnVsbCxcblx0XHRcdHNvdXJjZTogbWF0Y2hbMl0sXG5cdFx0XHRsaW5lOiArbWF0Y2hbM10sXG5cdFx0XHRjb2x1bW46IG1hdGNoWzRdIC0gMVxuXHRcdH0pO1xuXHRcdHJldHVybiBgZXZhbCBhdCAke21hdGNoWzFdfSAoJHtwb3NpdGlvbi5zb3VyY2V9OiR7cG9zaXRpb24ubGluZX06JHtwb3NpdGlvbi5jb2x1bW4gKyAxfSlgO1xuXHR9XG5cdHJldHVybiBtYXRjaCA9IC9eZXZhbCBhdCAoW14oXSspIFxcKCguKylcXCkkLy5leGVjKG9yaWdpbiksIG1hdGNoID8gYGV2YWwgYXQgJHttYXRjaFsxXX0gKCR7bWFwRXZhbE9yaWdpbihtYXRjaFsyXSl9KWAgOiBvcmlnaW47XG59XG5mdW5jdGlvbiBDYWxsU2l0ZVRvU3RyaW5nKCkge1xuXHRsZXQgZmlsZU5hbWUsIGZpbGVMb2NhdGlvbiA9IFwiXCI7XG5cdGlmICh0aGlzLmlzTmF0aXZlKCkpIGZpbGVMb2NhdGlvbiA9IFwibmF0aXZlXCI7XG5cdGVsc2Uge1xuXHRcdGZpbGVOYW1lID0gdGhpcy5nZXRTY3JpcHROYW1lT3JTb3VyY2VVUkwoKSwgIWZpbGVOYW1lICYmIHRoaXMuaXNFdmFsKCkgJiYgKGZpbGVMb2NhdGlvbiA9IHRoaXMuZ2V0RXZhbE9yaWdpbigpLCBmaWxlTG9jYXRpb24gKz0gXCIsIFwiKSwgZmlsZU5hbWUgPyBmaWxlTG9jYXRpb24gKz0gZmlsZU5hbWUgOiBmaWxlTG9jYXRpb24gKz0gXCI8YW5vbnltb3VzPlwiO1xuXHRcdGxldCBsaW5lTnVtYmVyID0gdGhpcy5nZXRMaW5lTnVtYmVyKCk7XG5cdFx0aWYgKGxpbmVOdW1iZXIgIT0gbnVsbCkge1xuXHRcdFx0ZmlsZUxvY2F0aW9uICs9IGA6JHtsaW5lTnVtYmVyfWA7XG5cdFx0XHRsZXQgY29sdW1uTnVtYmVyID0gdGhpcy5nZXRDb2x1bW5OdW1iZXIoKTtcblx0XHRcdGNvbHVtbk51bWJlciAmJiAoZmlsZUxvY2F0aW9uICs9IGA6JHtjb2x1bW5OdW1iZXJ9YCk7XG5cdFx0fVxuXHR9XG5cdGxldCBsaW5lID0gXCJcIiwgZnVuY3Rpb25OYW1lID0gdGhpcy5nZXRGdW5jdGlvbk5hbWUoKSwgYWRkU3VmZml4ID0gITAsIGlzQ29uc3RydWN0b3IgPSB0aGlzLmlzQ29uc3RydWN0b3IoKTtcblx0aWYgKHRoaXMuaXNUb3BsZXZlbCgpIHx8IGlzQ29uc3RydWN0b3IpIGlzQ29uc3RydWN0b3IgPyBsaW5lICs9IGBuZXcgJHtmdW5jdGlvbk5hbWUgfHwgXCI8YW5vbnltb3VzPlwifWAgOiBmdW5jdGlvbk5hbWUgPyBsaW5lICs9IGZ1bmN0aW9uTmFtZSA6IChsaW5lICs9IGZpbGVMb2NhdGlvbiwgYWRkU3VmZml4ID0gITEpO1xuXHRlbHNlIHtcblx0XHRsZXQgdHlwZU5hbWUgPSB0aGlzLmdldFR5cGVOYW1lKCk7XG5cdFx0dHlwZU5hbWUgPT09IFwiW29iamVjdCBPYmplY3RdXCIgJiYgKHR5cGVOYW1lID0gXCJudWxsXCIpO1xuXHRcdGxldCBtZXRob2ROYW1lID0gdGhpcy5nZXRNZXRob2ROYW1lKCk7XG5cdFx0ZnVuY3Rpb25OYW1lID8gKHR5cGVOYW1lICYmIGZ1bmN0aW9uTmFtZS5pbmRleE9mKHR5cGVOYW1lKSAhPT0gMCAmJiAobGluZSArPSBgJHt0eXBlTmFtZX0uYCksIGxpbmUgKz0gZnVuY3Rpb25OYW1lLCBtZXRob2ROYW1lICYmIGZ1bmN0aW9uTmFtZS5pbmRleE9mKGAuJHttZXRob2ROYW1lfWApICE9PSBmdW5jdGlvbk5hbWUubGVuZ3RoIC0gbWV0aG9kTmFtZS5sZW5ndGggLSAxICYmIChsaW5lICs9IGAgW2FzICR7bWV0aG9kTmFtZX1dYCkpIDogbGluZSArPSBgJHt0eXBlTmFtZX0uJHttZXRob2ROYW1lIHx8IFwiPGFub255bW91cz5cIn1gO1xuXHR9XG5cdHJldHVybiBhZGRTdWZmaXggJiYgKGxpbmUgKz0gYCAoJHtmaWxlTG9jYXRpb259KWApLCBsaW5lO1xufVxuZnVuY3Rpb24gY2xvbmVDYWxsU2l0ZShmcmFtZSkge1xuXHRsZXQgb2JqZWN0ID0ge307XG5cdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QuZ2V0UHJvdG90eXBlT2YoZnJhbWUpKS5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0bGV0IGtleSA9IG5hbWU7XG5cdFx0b2JqZWN0W2tleV0gPSAvXig/OmlzfGdldCkvLnRlc3QobmFtZSkgPyBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBmcmFtZVtrZXldLmNhbGwoZnJhbWUpO1xuXHRcdH0gOiBmcmFtZVtrZXldO1xuXHR9KSwgb2JqZWN0LnRvU3RyaW5nID0gQ2FsbFNpdGVUb1N0cmluZywgb2JqZWN0O1xufVxuZnVuY3Rpb24gd3JhcENhbGxTaXRlKGZyYW1lLCBzdGF0ZSkge1xuXHRpZiAoc3RhdGUgPT09IHZvaWQgMCAmJiAoc3RhdGUgPSB7XG5cdFx0bmV4dFBvc2l0aW9uOiBudWxsLFxuXHRcdGN1clBvc2l0aW9uOiBudWxsXG5cdH0pLCBmcmFtZS5pc05hdGl2ZSgpKSByZXR1cm4gc3RhdGUuY3VyUG9zaXRpb24gPSBudWxsLCBmcmFtZTtcblx0bGV0IHNvdXJjZSA9IGZyYW1lLmdldEZpbGVOYW1lKCkgfHwgZnJhbWUuZ2V0U2NyaXB0TmFtZU9yU291cmNlVVJMKCk7XG5cdGlmIChzb3VyY2UpIHtcblx0XHRsZXQgcG9zaXRpb24gPSBtYXBTb3VyY2VQb3NpdGlvbih7XG5cdFx0XHRuYW1lOiBudWxsLFxuXHRcdFx0c291cmNlLFxuXHRcdFx0bGluZTogZnJhbWUuZ2V0TGluZU51bWJlcigpID8/IDAsXG5cdFx0XHRjb2x1bW46IChmcmFtZS5nZXRDb2x1bW5OdW1iZXIoKSA/PyAxKSAtIDFcblx0XHR9KTtcblx0XHRzdGF0ZS5jdXJQb3NpdGlvbiA9IHBvc2l0aW9uLCBmcmFtZSA9IGNsb25lQ2FsbFNpdGUoZnJhbWUpO1xuXHRcdGxldCBvcmlnaW5hbEZ1bmN0aW9uTmFtZSA9IGZyYW1lLmdldEZ1bmN0aW9uTmFtZTtcblx0XHRyZXR1cm4gZnJhbWUuZ2V0RnVuY3Rpb25OYW1lID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRsZXQgbmFtZSA9IHN0YXRlLm5leHRQb3NpdGlvbiA9PSBudWxsID8gb3JpZ2luYWxGdW5jdGlvbk5hbWUoKSA6IHN0YXRlLm5leHRQb3NpdGlvbi5uYW1lIHx8IG9yaWdpbmFsRnVuY3Rpb25OYW1lKCk7XG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJldmFsXCIgJiYgXCJfdml0ZVwiIGluIHBvc2l0aW9uID8gbnVsbCA6IG5hbWU7XG5cdFx0fSwgZnJhbWUuZ2V0RmlsZU5hbWUgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBwb3NpdGlvbi5zb3VyY2UgPz8gbnVsbDtcblx0XHR9LCBmcmFtZS5nZXRMaW5lTnVtYmVyID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcG9zaXRpb24ubGluZTtcblx0XHR9LCBmcmFtZS5nZXRDb2x1bW5OdW1iZXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBwb3NpdGlvbi5jb2x1bW4gKyAxO1xuXHRcdH0sIGZyYW1lLmdldFNjcmlwdE5hbWVPclNvdXJjZVVSTCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHBvc2l0aW9uLnNvdXJjZTtcblx0XHR9LCBmcmFtZTtcblx0fVxuXHRsZXQgb3JpZ2luID0gZnJhbWUuaXNFdmFsKCkgJiYgZnJhbWUuZ2V0RXZhbE9yaWdpbigpO1xuXHRyZXR1cm4gb3JpZ2luID8gKG9yaWdpbiA9IG1hcEV2YWxPcmlnaW4ob3JpZ2luKSwgZnJhbWUgPSBjbG9uZUNhbGxTaXRlKGZyYW1lKSwgZnJhbWUuZ2V0RXZhbE9yaWdpbiA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBvcmlnaW4gfHwgdm9pZCAwO1xuXHR9LCBmcmFtZSkgOiBmcmFtZTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVTdGFja1RyYWNlKGVycm9yLCBzdGFjaykge1xuXHRsZXQgZXJyb3JTdHJpbmcgPSBgJHtlcnJvci5uYW1lIHx8IFwiRXJyb3JcIn06ICR7ZXJyb3IubWVzc2FnZSB8fCBcIlwifWAsIHN0YXRlID0ge1xuXHRcdG5leHRQb3NpdGlvbjogbnVsbCxcblx0XHRjdXJQb3NpdGlvbjogbnVsbFxuXHR9LCBwcm9jZXNzZWRTdGFjayA9IFtdO1xuXHRmb3IgKGxldCBpID0gc3RhY2subGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHByb2Nlc3NlZFN0YWNrLnB1c2goYFxcbiAgICBhdCAke3dyYXBDYWxsU2l0ZShzdGFja1tpXSwgc3RhdGUpfWApLCBzdGF0ZS5uZXh0UG9zaXRpb24gPSBzdGF0ZS5jdXJQb3NpdGlvbjtcblx0cmV0dXJuIHN0YXRlLmN1clBvc2l0aW9uID0gc3RhdGUubmV4dFBvc2l0aW9uID0gbnVsbCwgZXJyb3JTdHJpbmcgKyBwcm9jZXNzZWRTdGFjay5yZXZlcnNlKCkuam9pbihcIlwiKTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL3NvdXJjZW1hcC9pbmRleC50c1xuZnVuY3Rpb24gZW5hYmxlU291cmNlTWFwU3VwcG9ydChydW5uZXIpIHtcblx0aWYgKHJ1bm5lci5vcHRpb25zLnNvdXJjZW1hcEludGVyY2VwdG9yID09PSBcIm5vZGVcIikge1xuXHRcdGlmICh0eXBlb2YgcHJvY2VzcyA+IFwidVwiKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlIFxcXCJzb3VyY2VtYXBJbnRlcmNlcHRvcjogJ25vZGUnXFxcIiBiZWNhdXNlIGdsb2JhbCBcXFwicHJvY2Vzc1xcXCIgdmFyaWFibGUgaXMgbm90IGF2YWlsYWJsZS5cIik7XG5cdFx0aWYgKHR5cGVvZiBwcm9jZXNzLnNldFNvdXJjZU1hcHNFbmFibGVkICE9IFwiZnVuY3Rpb25cIikgdGhyb3cgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSBcXFwic291cmNlbWFwSW50ZXJjZXB0b3I6ICdub2RlJ1xcXCIgYmVjYXVzZSBcXFwicHJvY2Vzcy5zZXRTb3VyY2VNYXBzRW5hYmxlZFxcXCIgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIHVzZSBOb2RlID49IDE2LjYuMC5cIik7XG5cdFx0bGV0IGlzRW5hYmxlZEFscmVhZHkgPSBwcm9jZXNzLnNvdXJjZU1hcHNFbmFibGVkID8/ICExO1xuXHRcdHJldHVybiBwcm9jZXNzLnNldFNvdXJjZU1hcHNFbmFibGVkKCEwKSwgKCkgPT4gIWlzRW5hYmxlZEFscmVhZHkgJiYgcHJvY2Vzcy5zZXRTb3VyY2VNYXBzRW5hYmxlZCghMSk7XG5cdH1cblx0cmV0dXJuIGludGVyY2VwdFN0YWNrVHJhY2UocnVubmVyLCB0eXBlb2YgcnVubmVyLm9wdGlvbnMuc291cmNlbWFwSW50ZXJjZXB0b3IgPT0gXCJvYmplY3RcIiA/IHJ1bm5lci5vcHRpb25zLnNvdXJjZW1hcEludGVyY2VwdG9yIDogdm9pZCAwKTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL2VzbUV2YWx1YXRvci50c1xudmFyIEVTTW9kdWxlc0V2YWx1YXRvciA9IGNsYXNzIHtcblx0c3RhcnRPZmZzZXQgPSBnZXRBc3luY0Z1bmN0aW9uRGVjbGFyYXRpb25QYWRkaW5nTGluZUNvdW50KCk7XG5cdGFzeW5jIHJ1bklubGluZWRNb2R1bGUoY29udGV4dCwgY29kZSkge1xuXHRcdGF3YWl0IG5ldyBBc3luY0Z1bmN0aW9uKHNzck1vZHVsZUV4cG9ydHNLZXksIHNzckltcG9ydE1ldGFLZXksIHNzckltcG9ydEtleSwgc3NyRHluYW1pY0ltcG9ydEtleSwgc3NyRXhwb3J0QWxsS2V5LCBzc3JFeHBvcnROYW1lS2V5LCBcIlxcXCJ1c2Ugc3RyaWN0XFxcIjtcIiArIGNvZGUpKGNvbnRleHRbc3NyTW9kdWxlRXhwb3J0c0tleV0sIGNvbnRleHRbc3NySW1wb3J0TWV0YUtleV0sIGNvbnRleHRbc3NySW1wb3J0S2V5XSwgY29udGV4dFtzc3JEeW5hbWljSW1wb3J0S2V5XSwgY29udGV4dFtzc3JFeHBvcnRBbGxLZXldLCBjb250ZXh0W3NzckV4cG9ydE5hbWVLZXldKSwgT2JqZWN0LnNlYWwoY29udGV4dFtzc3JNb2R1bGVFeHBvcnRzS2V5XSk7XG5cdH1cblx0cnVuRXh0ZXJuYWxNb2R1bGUoZmlsZXBhdGgpIHtcblx0XHRyZXR1cm4gaW1wb3J0KGZpbGVwYXRoKTtcblx0fVxufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL2ltcG9ydE1ldGFSZXNvbHZlci50c1xuY29uc3QgY3VzdG9taXphdGlvbkhvb2tOYW1lc3BhY2UgPSBcInZpdGUtbW9kdWxlLXJ1bm5lcjppbXBvcnQtbWV0YS1yZXNvbHZlL3YxL1wiLCBjdXN0b21pemF0aW9uSG9va3NNb2R1bGUgPSBgXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlKHNwZWNpZmllciwgY29udGV4dCwgbmV4dFJlc29sdmUpIHtcbiAgaWYgKHNwZWNpZmllci5zdGFydHNXaXRoKCR7SlNPTi5zdHJpbmdpZnkoY3VzdG9taXphdGlvbkhvb2tOYW1lc3BhY2UpfSkpIHtcbiAgICBjb25zdCBkYXRhID0gc3BlY2lmaWVyLnNsaWNlKCR7SlNPTi5zdHJpbmdpZnkoY3VzdG9taXphdGlvbkhvb2tOYW1lc3BhY2UpfS5sZW5ndGgpXG4gICAgY29uc3QgW3BhcnNlZFNwZWNpZmllciwgcGFyc2VkSW1wb3J0ZXJdID0gSlNPTi5wYXJzZShkYXRhKVxuICAgIHNwZWNpZmllciA9IHBhcnNlZFNwZWNpZmllclxuICAgIGNvbnRleHQucGFyZW50VVJMID0gcGFyc2VkSW1wb3J0ZXJcbiAgfVxuICByZXR1cm4gbmV4dFJlc29sdmUoc3BlY2lmaWVyLCBjb250ZXh0KVxufVxuXG5gO1xuZnVuY3Rpb24gY3VzdG9taXphdGlvbkhvb2tSZXNvbHZlKHNwZWNpZmllciwgY29udGV4dCwgbmV4dFJlc29sdmUpIHtcblx0aWYgKHNwZWNpZmllci5zdGFydHNXaXRoKGN1c3RvbWl6YXRpb25Ib29rTmFtZXNwYWNlKSkge1xuXHRcdGxldCBkYXRhID0gc3BlY2lmaWVyLnNsaWNlKDQyKSwgW3BhcnNlZFNwZWNpZmllciwgcGFyc2VkSW1wb3J0ZXJdID0gSlNPTi5wYXJzZShkYXRhKTtcblx0XHRzcGVjaWZpZXIgPSBwYXJzZWRTcGVjaWZpZXIsIGNvbnRleHQucGFyZW50VVJMID0gcGFyc2VkSW1wb3J0ZXI7XG5cdH1cblx0cmV0dXJuIG5leHRSZXNvbHZlKHNwZWNpZmllciwgY29udGV4dCk7XG59XG5sZXQgaXNIb29rUmVnaXN0ZXJlZCA9ICExO1xuZnVuY3Rpb24gY3JlYXRlSW1wb3J0TWV0YVJlc29sdmVyKCkge1xuXHRpZiAoaXNIb29rUmVnaXN0ZXJlZCkgcmV0dXJuIGltcG9ydE1ldGFSZXNvbHZlV2l0aEN1c3RvbUhvb2s7XG5cdGxldCBtb2R1bGU7XG5cdHRyeSB7XG5cdFx0bW9kdWxlID0gdHlwZW9mIHByb2Nlc3MgPCBcInVcIiA/IHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZShcIm5vZGU6bW9kdWxlXCIpLk1vZHVsZSA6IHZvaWQgMDtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChtb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLnJlZ2lzdGVySG9va3MpIHJldHVybiBtb2R1bGUucmVnaXN0ZXJIb29rcyh7IHJlc29sdmU6IGN1c3RvbWl6YXRpb25Ib29rUmVzb2x2ZSB9KSwgaXNIb29rUmVnaXN0ZXJlZCA9ICEwLCBpbXBvcnRNZXRhUmVzb2x2ZVdpdGhDdXN0b21Ib29rO1xuXHRcdGlmIChtb2R1bGUucmVnaXN0ZXIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxldCBob29rTW9kdWxlQ29udGVudCA9IGBkYXRhOnRleHQvamF2YXNjcmlwdCwke2VuY29kZVVSSShjdXN0b21pemF0aW9uSG9va3NNb2R1bGUpfWA7XG5cdFx0XHRcdG1vZHVsZS5yZWdpc3Rlcihob29rTW9kdWxlQ29udGVudCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGlmIChcImNvZGVcIiBpbiBlICYmIGUuY29kZSA9PT0gXCJFUlJfTkVUV09SS19JTVBPUlRfRElTQUxMT1dFRFwiKSByZXR1cm47XG5cdFx0XHRcdHRocm93IGU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaXNIb29rUmVnaXN0ZXJlZCA9ICEwLCBpbXBvcnRNZXRhUmVzb2x2ZVdpdGhDdXN0b21Ib29rO1xuXHRcdH1cblx0fVxufVxuZnVuY3Rpb24gaW1wb3J0TWV0YVJlc29sdmVXaXRoQ3VzdG9tSG9vayhzcGVjaWZpZXIsIGltcG9ydGVyKSB7XG5cdHJldHVybiBpbXBvcnQubWV0YS5yZXNvbHZlKGAke2N1c3RvbWl6YXRpb25Ib29rTmFtZXNwYWNlfSR7SlNPTi5zdHJpbmdpZnkoW3NwZWNpZmllciwgaW1wb3J0ZXJdKX1gKTtcbn1cbmAke2N1c3RvbWl6YXRpb25Ib29rTmFtZXNwYWNlfWA7XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbW9kdWxlLXJ1bm5lci9jcmVhdGVJbXBvcnRNZXRhLnRzXG5jb25zdCBlbnZQcm94eSA9IG5ldyBQcm94eSh7fSwgeyBnZXQoXywgcCkge1xuXHR0aHJvdyBFcnJvcihgW21vZHVsZSBydW5uZXJdIER5bmFtaWMgYWNjZXNzIG9mIFwiaW1wb3J0Lm1ldGEuZW52XCIgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlLCB1c2UgXCJpbXBvcnQubWV0YS5lbnYuJHtTdHJpbmcocCl9XCIgaW5zdGVhZC5gKTtcbn0gfSk7XG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0SW1wb3J0TWV0YShtb2R1bGVQYXRoKSB7XG5cdGxldCBocmVmID0gcG9zaXhQYXRoVG9GaWxlSHJlZihtb2R1bGVQYXRoKSwgZmlsZW5hbWUgPSBtb2R1bGVQYXRoLCBkaXJuYW1lID0gcG9zaXhEaXJuYW1lKG1vZHVsZVBhdGgpO1xuXHRyZXR1cm4ge1xuXHRcdGZpbGVuYW1lOiBpc1dpbmRvd3MgPyB0b1dpbmRvd3NQYXRoKGZpbGVuYW1lKSA6IGZpbGVuYW1lLFxuXHRcdGRpcm5hbWU6IGlzV2luZG93cyA/IHRvV2luZG93c1BhdGgoZGlybmFtZSkgOiBkaXJuYW1lLFxuXHRcdHVybDogaHJlZixcblx0XHRlbnY6IGVudlByb3h5LFxuXHRcdHJlc29sdmUoX2lkLCBfcGFyZW50KSB7XG5cdFx0XHR0aHJvdyBFcnJvcihcIlttb2R1bGUgcnVubmVyXSBcXFwiaW1wb3J0Lm1ldGEucmVzb2x2ZVxcXCIgaXMgbm90IHN1cHBvcnRlZC5cIik7XG5cdFx0fSxcblx0XHRnbG9iKCkge1xuXHRcdFx0dGhyb3cgRXJyb3IoXCJbbW9kdWxlIHJ1bm5lcl0gXFxcImltcG9ydC5tZXRhLmdsb2JcXFwiIGlzIHN0YXRpY2FsbHkgcmVwbGFjZWQgZHVyaW5nIGZpbGUgdHJhbnNmb3JtYXRpb24uIE1ha2Ugc3VyZSB0byByZWZlcmVuY2UgaXQgYnkgdGhlIGZ1bGwgbmFtZS5cIik7XG5cdFx0fVxuXHR9O1xufVxuLyoqXG4qIENyZWF0ZSBpbXBvcnQubWV0YSBvYmplY3QgZm9yIE5vZGUuanMuXG4qL1xuZnVuY3Rpb24gY3JlYXRlTm9kZUltcG9ydE1ldGEobW9kdWxlUGF0aCkge1xuXHRsZXQgZGVmYXVsdE1ldGEgPSBjcmVhdGVEZWZhdWx0SW1wb3J0TWV0YShtb2R1bGVQYXRoKSwgaHJlZiA9IGRlZmF1bHRNZXRhLnVybCwgaW1wb3J0TWV0YVJlc29sdmVyID0gY3JlYXRlSW1wb3J0TWV0YVJlc29sdmVyKCk7XG5cdHJldHVybiB7XG5cdFx0Li4uZGVmYXVsdE1ldGEsXG5cdFx0bWFpbjogITEsXG5cdFx0cmVzb2x2ZShpZCwgcGFyZW50KSB7XG5cdFx0XHRyZXR1cm4gKGltcG9ydE1ldGFSZXNvbHZlciA/PyBkZWZhdWx0TWV0YS5yZXNvbHZlKShpZCwgcGFyZW50ID8/IGhyZWYpO1xuXHRcdH1cblx0fTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL3J1bm5lci50c1xudmFyIE1vZHVsZVJ1bm5lciA9IGNsYXNzIHtcblx0ZXZhbHVhdGVkTW9kdWxlcztcblx0aG1yQ2xpZW50O1xuXHR0cmFuc3BvcnQ7XG5cdHJlc2V0U291cmNlTWFwU3VwcG9ydDtcblx0Y29uY3VycmVudE1vZHVsZU5vZGVQcm9taXNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGlzQnVpbHRpbjtcblx0YnVpbHRpbnNQcm9taXNlO1xuXHRjbG9zZWQgPSAhMTtcblx0Y29uc3RydWN0b3Iob3B0aW9ucywgZXZhbHVhdG9yID0gbmV3IEVTTW9kdWxlc0V2YWx1YXRvcigpLCBkZWJ1Zykge1xuXHRcdGlmICh0aGlzLm9wdGlvbnMgPSBvcHRpb25zLCB0aGlzLmV2YWx1YXRvciA9IGV2YWx1YXRvciwgdGhpcy5kZWJ1ZyA9IGRlYnVnLCB0aGlzLmV2YWx1YXRlZE1vZHVsZXMgPSBvcHRpb25zLmV2YWx1YXRlZE1vZHVsZXMgPz8gbmV3IEV2YWx1YXRlZE1vZHVsZXMoKSwgdGhpcy50cmFuc3BvcnQgPSBub3JtYWxpemVNb2R1bGVSdW5uZXJUcmFuc3BvcnQob3B0aW9ucy50cmFuc3BvcnQpLCBvcHRpb25zLmhtciAhPT0gITEpIHtcblx0XHRcdGxldCBvcHRpb25zSG1yID0gb3B0aW9ucy5obXIgPz8gITA7XG5cdFx0XHRpZiAodGhpcy5obXJDbGllbnQgPSBuZXcgSE1SQ2xpZW50KG9wdGlvbnNIbXIgPT09ICEwIHx8IG9wdGlvbnNIbXIubG9nZ2VyID09PSB2b2lkIDAgPyBobXJMb2dnZXIgOiBvcHRpb25zSG1yLmxvZ2dlciA9PT0gITEgPyBzaWxlbnRDb25zb2xlIDogb3B0aW9uc0htci5sb2dnZXIsIHRoaXMudHJhbnNwb3J0LCAoeyBhY2NlcHRlZFBhdGggfSkgPT4gdGhpcy5pbXBvcnQoYWNjZXB0ZWRQYXRoKSksICF0aGlzLnRyYW5zcG9ydC5jb25uZWN0KSB0aHJvdyBFcnJvcihcIkhNUiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcnVubmVyIHRyYW5zcG9ydCwgYnV0IGBobXJgIG9wdGlvbiB3YXMgc2V0IHRvIHRydWVcIik7XG5cdFx0XHR0aGlzLnRyYW5zcG9ydC5jb25uZWN0KGNyZWF0ZUhNUkhhbmRsZXJGb3JSdW5uZXIodGhpcykpO1xuXHRcdH0gZWxzZSB0aGlzLnRyYW5zcG9ydC5jb25uZWN0Py4oKTtcblx0XHRvcHRpb25zLnNvdXJjZW1hcEludGVyY2VwdG9yICE9PSAhMSAmJiAodGhpcy5yZXNldFNvdXJjZU1hcFN1cHBvcnQgPSBlbmFibGVTb3VyY2VNYXBTdXBwb3J0KHRoaXMpKTtcblx0fVxuXHQvKipcblx0KiBVUkwgdG8gZXhlY3V0ZS4gQWNjZXB0cyBmaWxlIHBhdGgsIHNlcnZlciBwYXRoIG9yIGlkIHJlbGF0aXZlIHRvIHRoZSByb290LlxuXHQqL1xuXHRhc3luYyBpbXBvcnQodXJsKSB7XG5cdFx0bGV0IGZldGNoZWRNb2R1bGUgPSBhd2FpdCB0aGlzLmNhY2hlZE1vZHVsZSh1cmwpO1xuXHRcdHJldHVybiBhd2FpdCB0aGlzLmNhY2hlZFJlcXVlc3QodXJsLCBmZXRjaGVkTW9kdWxlKTtcblx0fVxuXHQvKipcblx0KiBDbGVhciBhbGwgY2FjaGVzIGluY2x1ZGluZyBITVIgbGlzdGVuZXJzLlxuXHQqL1xuXHRjbGVhckNhY2hlKCkge1xuXHRcdHRoaXMuZXZhbHVhdGVkTW9kdWxlcy5jbGVhcigpLCB0aGlzLmhtckNsaWVudD8uY2xlYXIoKTtcblx0fVxuXHQvKipcblx0KiBDbGVhcnMgYWxsIGNhY2hlcywgcmVtb3ZlcyBhbGwgSE1SIGxpc3RlbmVycywgYW5kIHJlc2V0cyBzb3VyY2UgbWFwIHN1cHBvcnQuXG5cdCogVGhpcyBtZXRob2QgZG9lc24ndCBzdG9wIHRoZSBITVIgY29ubmVjdGlvbi5cblx0Ki9cblx0YXN5bmMgY2xvc2UoKSB7XG5cdFx0dGhpcy5yZXNldFNvdXJjZU1hcFN1cHBvcnQ/LigpLCB0aGlzLmNsZWFyQ2FjaGUoKSwgdGhpcy5obXJDbGllbnQgPSB2b2lkIDAsIHRoaXMuY2xvc2VkID0gITAsIGF3YWl0IHRoaXMudHJhbnNwb3J0LmRpc2Nvbm5lY3Q/LigpO1xuXHR9XG5cdC8qKlxuXHQqIFJldHVybnMgYHRydWVgIGlmIHRoZSBydW50aW1lIGhhcyBiZWVuIGNsb3NlZCBieSBjYWxsaW5nIGBjbG9zZSgpYCBtZXRob2QuXG5cdCovXG5cdGlzQ2xvc2VkKCkge1xuXHRcdHJldHVybiB0aGlzLmNsb3NlZDtcblx0fVxuXHRwcm9jZXNzSW1wb3J0KGV4cG9ydHMsIGZldGNoUmVzdWx0LCBtZXRhZGF0YSkge1xuXHRcdGlmICghKFwiZXh0ZXJuYWxpemVcIiBpbiBmZXRjaFJlc3VsdCkpIHJldHVybiBleHBvcnRzO1xuXHRcdGxldCB7IHVybCwgdHlwZSB9ID0gZmV0Y2hSZXN1bHQ7XG5cdFx0cmV0dXJuIHR5cGUgIT09IFwibW9kdWxlXCIgJiYgdHlwZSAhPT0gXCJjb21tb25qc1wiIHx8IGFuYWx5emVJbXBvcnRlZE1vZERpZmZlcmVuY2UoZXhwb3J0cywgdXJsLCB0eXBlLCBtZXRhZGF0YSksIGV4cG9ydHM7XG5cdH1cblx0aXNDaXJjdWxhck1vZHVsZShtb2QpIHtcblx0XHRmb3IgKGxldCBpbXBvcnRlZEZpbGUgb2YgbW9kLmltcG9ydHMpIGlmIChtb2QuaW1wb3J0ZXJzLmhhcyhpbXBvcnRlZEZpbGUpKSByZXR1cm4gITA7XG5cdFx0cmV0dXJuICExO1xuXHR9XG5cdGlzQ2lyY3VsYXJJbXBvcnQoaW1wb3J0ZXJzLCBtb2R1bGVVcmwsIHZpc2l0ZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSB7XG5cdFx0Zm9yIChsZXQgaW1wb3J0ZXIgb2YgaW1wb3J0ZXJzKSB7XG5cdFx0XHRpZiAodmlzaXRlZC5oYXMoaW1wb3J0ZXIpKSBjb250aW51ZTtcblx0XHRcdGlmICh2aXNpdGVkLmFkZChpbXBvcnRlciksIGltcG9ydGVyID09PSBtb2R1bGVVcmwpIHJldHVybiAhMDtcblx0XHRcdGxldCBtb2QgPSB0aGlzLmV2YWx1YXRlZE1vZHVsZXMuZ2V0TW9kdWxlQnlJZChpbXBvcnRlcik7XG5cdFx0XHRpZiAobW9kICYmIG1vZC5pbXBvcnRlcnMuc2l6ZSAmJiB0aGlzLmlzQ2lyY3VsYXJJbXBvcnQobW9kLmltcG9ydGVycywgbW9kdWxlVXJsLCB2aXNpdGVkKSkgcmV0dXJuICEwO1xuXHRcdH1cblx0XHRyZXR1cm4gITE7XG5cdH1cblx0YXN5bmMgY2FjaGVkUmVxdWVzdCh1cmwsIG1vZCwgY2FsbHN0YWNrID0gW10sIG1ldGFkYXRhKSB7XG5cdFx0bGV0IG1ldGEgPSBtb2QubWV0YSwgbW9kdWxlSWQgPSBtZXRhLmlkLCB7IGltcG9ydGVycyB9ID0gbW9kLCBpbXBvcnRlZSA9IGNhbGxzdGFja1tjYWxsc3RhY2subGVuZ3RoIC0gMV07XG5cdFx0aWYgKGltcG9ydGVlICYmIGltcG9ydGVycy5hZGQoaW1wb3J0ZWUpLCBtb2QuZXZhbHVhdGVkICYmIG1vZC5wcm9taXNlKSByZXR1cm4gdGhpcy5wcm9jZXNzSW1wb3J0KGF3YWl0IG1vZC5wcm9taXNlLCBtZXRhLCBtZXRhZGF0YSk7XG5cdFx0aWYgKChjYWxsc3RhY2suaW5jbHVkZXMobW9kdWxlSWQpIHx8IHRoaXMuaXNDaXJjdWxhck1vZHVsZShtb2QpIHx8IHRoaXMuaXNDaXJjdWxhckltcG9ydChpbXBvcnRlcnMsIG1vZHVsZUlkKSkgJiYgbW9kLmV4cG9ydHMpIHJldHVybiB0aGlzLnByb2Nlc3NJbXBvcnQobW9kLmV4cG9ydHMsIG1ldGEsIG1ldGFkYXRhKTtcblx0XHRsZXQgZGVidWdUaW1lcjtcblx0XHR0aGlzLmRlYnVnICYmIChkZWJ1Z1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmRlYnVnKGBbbW9kdWxlIHJ1bm5lcl0gbW9kdWxlICR7bW9kdWxlSWR9IHRha2VzIG92ZXIgMnMgdG8gbG9hZC5cXG4ke2BzdGFjazpcXG4ke1suLi5jYWxsc3RhY2ssIG1vZHVsZUlkXS5yZXZlcnNlKCkubWFwKChwKSA9PiBgICAtICR7cH1gKS5qb2luKFwiXFxuXCIpfWB9YCk7XG5cdFx0fSwgMmUzKSk7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChtb2QucHJvbWlzZSkgcmV0dXJuIHRoaXMucHJvY2Vzc0ltcG9ydChhd2FpdCBtb2QucHJvbWlzZSwgbWV0YSwgbWV0YWRhdGEpO1xuXHRcdFx0bGV0IHByb21pc2UgPSB0aGlzLmRpcmVjdFJlcXVlc3QodXJsLCBtb2QsIGNhbGxzdGFjayk7XG5cdFx0XHRyZXR1cm4gbW9kLnByb21pc2UgPSBwcm9taXNlLCBtb2QuZXZhbHVhdGVkID0gITEsIHRoaXMucHJvY2Vzc0ltcG9ydChhd2FpdCBwcm9taXNlLCBtZXRhLCBtZXRhZGF0YSk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdG1vZC5ldmFsdWF0ZWQgPSAhMCwgZGVidWdUaW1lciAmJiBjbGVhclRpbWVvdXQoZGVidWdUaW1lcik7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIGNhY2hlZE1vZHVsZSh1cmwsIGltcG9ydGVyKSB7XG5cdFx0bGV0IGNhY2hlZCA9IHRoaXMuY29uY3VycmVudE1vZHVsZU5vZGVQcm9taXNlcy5nZXQodXJsKTtcblx0XHRpZiAoY2FjaGVkKSB0aGlzLmRlYnVnPy4oXCJbbW9kdWxlIHJ1bm5lcl0gdXNpbmcgY2FjaGVkIG1vZHVsZSBpbmZvIGZvclwiLCB1cmwpO1xuXHRcdGVsc2Uge1xuXHRcdFx0bGV0IGNhY2hlZE1vZHVsZSA9IHRoaXMuZXZhbHVhdGVkTW9kdWxlcy5nZXRNb2R1bGVCeVVybCh1cmwpO1xuXHRcdFx0Y2FjaGVkID0gdGhpcy5nZXRNb2R1bGVJbmZvcm1hdGlvbih1cmwsIGltcG9ydGVyLCBjYWNoZWRNb2R1bGUpLmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmNvbmN1cnJlbnRNb2R1bGVOb2RlUHJvbWlzZXMuZGVsZXRlKHVybCk7XG5cdFx0XHR9KSwgdGhpcy5jb25jdXJyZW50TW9kdWxlTm9kZVByb21pc2VzLnNldCh1cmwsIGNhY2hlZCk7XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZWQ7XG5cdH1cblx0ZW5zdXJlQnVpbHRpbnMoKSB7XG5cdFx0aWYgKCF0aGlzLmlzQnVpbHRpbikgcmV0dXJuIHRoaXMuYnVpbHRpbnNQcm9taXNlID8/PSAoYXN5bmMgKCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGZldGNoaW5nIGJ1aWx0aW5zIGZyb20gc2VydmVyXCIpO1xuXHRcdFx0XHRsZXQgYnVpbHRpbnMgPSAoYXdhaXQgdGhpcy50cmFuc3BvcnQuaW52b2tlKFwiZ2V0QnVpbHRpbnNcIiwgW10pKS5tYXAoKGJ1aWx0aW4pID0+IHR5cGVvZiBidWlsdGluID09IFwib2JqZWN0XCIgJiYgYnVpbHRpbiAmJiBcInR5cGVcIiBpbiBidWlsdGluID8gYnVpbHRpbi50eXBlID09PSBcInN0cmluZ1wiID8gYnVpbHRpbi52YWx1ZSA6IG5ldyBSZWdFeHAoYnVpbHRpbi5zb3VyY2UsIGJ1aWx0aW4uZmxhZ3MpIDogYnVpbHRpbik7XG5cdFx0XHRcdHRoaXMuaXNCdWlsdGluID0gY3JlYXRlSXNCdWlsdGluKGJ1aWx0aW5zKSwgdGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGJ1aWx0aW5zIGxvYWRlZDpcIiwgYnVpbHRpbnMpO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0dGhpcy5idWlsdGluc1Byb21pc2UgPSB2b2lkIDA7XG5cdFx0XHR9XG5cdFx0fSkoKSwgdGhpcy5idWlsdGluc1Byb21pc2U7XG5cdH1cblx0YXN5bmMgZ2V0TW9kdWxlSW5mb3JtYXRpb24odXJsLCBpbXBvcnRlciwgY2FjaGVkTW9kdWxlKSB7XG5cdFx0aWYgKHRoaXMuY2xvc2VkKSB0aHJvdyBFcnJvcihcIlZpdGUgbW9kdWxlIHJ1bm5lciBoYXMgYmVlbiBjbG9zZWQuXCIpO1xuXHRcdGF3YWl0IHRoaXMuZW5zdXJlQnVpbHRpbnMoKSwgdGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGZldGNoaW5nXCIsIHVybCk7XG5cdFx0bGV0IGlzQ2FjaGVkID0gISEodHlwZW9mIGNhY2hlZE1vZHVsZSA9PSBcIm9iamVjdFwiICYmIGNhY2hlZE1vZHVsZS5tZXRhKSwgZmV0Y2hlZE1vZHVsZSA9IHVybC5zdGFydHNXaXRoKFwiZGF0YTpcIikgfHwgdGhpcy5pc0J1aWx0aW4/Lih1cmwpID8ge1xuXHRcdFx0ZXh0ZXJuYWxpemU6IHVybCxcblx0XHRcdHR5cGU6IFwiYnVpbHRpblwiXG5cdFx0fSA6IGF3YWl0IHRoaXMudHJhbnNwb3J0Lmludm9rZShcImZldGNoTW9kdWxlXCIsIFtcblx0XHRcdHVybCxcblx0XHRcdGltcG9ydGVyLFxuXHRcdFx0e1xuXHRcdFx0XHRjYWNoZWQ6IGlzQ2FjaGVkLFxuXHRcdFx0XHRzdGFydE9mZnNldDogdGhpcy5ldmFsdWF0b3Iuc3RhcnRPZmZzZXRcblx0XHRcdH1cblx0XHRdKTtcblx0XHRpZiAoXCJjYWNoZVwiIGluIGZldGNoZWRNb2R1bGUpIHtcblx0XHRcdGlmICghY2FjaGVkTW9kdWxlIHx8ICFjYWNoZWRNb2R1bGUubWV0YSkgdGhyb3cgRXJyb3IoYE1vZHVsZSBcIiR7dXJsfVwiIHdhcyBtaXN0YWtlbmx5IGludmFsaWRhdGVkIGR1cmluZyBmZXRjaCBwaGFzZS5gKTtcblx0XHRcdHJldHVybiBjYWNoZWRNb2R1bGU7XG5cdFx0fVxuXHRcdGxldCBtb2R1bGVJZCA9IFwiZXh0ZXJuYWxpemVcIiBpbiBmZXRjaGVkTW9kdWxlID8gZmV0Y2hlZE1vZHVsZS5leHRlcm5hbGl6ZSA6IGZldGNoZWRNb2R1bGUuaWQsIG1vZHVsZVVybCA9IFwidXJsXCIgaW4gZmV0Y2hlZE1vZHVsZSA/IGZldGNoZWRNb2R1bGUudXJsIDogdXJsLCBtb2R1bGUgPSB0aGlzLmV2YWx1YXRlZE1vZHVsZXMuZW5zdXJlTW9kdWxlKG1vZHVsZUlkLCBtb2R1bGVVcmwpO1xuXHRcdHJldHVybiBcImludmFsaWRhdGVcIiBpbiBmZXRjaGVkTW9kdWxlICYmIGZldGNoZWRNb2R1bGUuaW52YWxpZGF0ZSAmJiB0aGlzLmV2YWx1YXRlZE1vZHVsZXMuaW52YWxpZGF0ZU1vZHVsZShtb2R1bGUpLCBmZXRjaGVkTW9kdWxlLnVybCA9IG1vZHVsZVVybCwgZmV0Y2hlZE1vZHVsZS5pZCA9IG1vZHVsZUlkLCBtb2R1bGUubWV0YSA9IGZldGNoZWRNb2R1bGUsIG1vZHVsZTtcblx0fVxuXHRhc3luYyBkaXJlY3RSZXF1ZXN0KHVybCwgbW9kLCBfY2FsbHN0YWNrKSB7XG5cdFx0bGV0IGZldGNoUmVzdWx0ID0gbW9kLm1ldGEsIG1vZHVsZUlkID0gZmV0Y2hSZXN1bHQuaWQsIGNhbGxzdGFjayA9IFsuLi5fY2FsbHN0YWNrLCBtb2R1bGVJZF0sIHJlcXVlc3QgPSBhc3luYyAoZGVwLCBtZXRhZGF0YSkgPT4ge1xuXHRcdFx0bGV0IGltcG9ydGVyID0gXCJmaWxlXCIgaW4gZmV0Y2hSZXN1bHQgJiYgZmV0Y2hSZXN1bHQuZmlsZSB8fCBtb2R1bGVJZCwgZGVwTW9kID0gYXdhaXQgdGhpcy5jYWNoZWRNb2R1bGUoZGVwLCBpbXBvcnRlcik7XG5cdFx0XHRyZXR1cm4gZGVwTW9kLmltcG9ydGVycy5hZGQobW9kdWxlSWQpLCBtb2QuaW1wb3J0cy5hZGQoZGVwTW9kLmlkKSwgdGhpcy5jYWNoZWRSZXF1ZXN0KGRlcCwgZGVwTW9kLCBjYWxsc3RhY2ssIG1ldGFkYXRhKTtcblx0XHR9LCBkeW5hbWljUmVxdWVzdCA9IGFzeW5jIChkZXApID0+IChkZXAgPSBTdHJpbmcoZGVwKSwgZGVwWzBdID09PSBcIi5cIiAmJiAoZGVwID0gcG9zaXhSZXNvbHZlKHBvc2l4RGlybmFtZSh1cmwpLCBkZXApKSwgcmVxdWVzdChkZXAsIHsgaXNEeW5hbWljSW1wb3J0OiAhMCB9KSk7XG5cdFx0aWYgKFwiZXh0ZXJuYWxpemVcIiBpbiBmZXRjaFJlc3VsdCkge1xuXHRcdFx0bGV0IHsgZXh0ZXJuYWxpemUgfSA9IGZldGNoUmVzdWx0O1xuXHRcdFx0dGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGV4dGVybmFsaXppbmdcIiwgZXh0ZXJuYWxpemUpO1xuXHRcdFx0bGV0IGV4cG9ydHMgPSBhd2FpdCB0aGlzLmV2YWx1YXRvci5ydW5FeHRlcm5hbE1vZHVsZShleHRlcm5hbGl6ZSk7XG5cdFx0XHRyZXR1cm4gbW9kLmV4cG9ydHMgPSBleHBvcnRzLCBleHBvcnRzO1xuXHRcdH1cblx0XHRsZXQgeyBjb2RlLCBmaWxlIH0gPSBmZXRjaFJlc3VsdDtcblx0XHRpZiAoY29kZSA9PSBudWxsKSB7XG5cdFx0XHRsZXQgaW1wb3J0ZXIgPSBjYWxsc3RhY2tbY2FsbHN0YWNrLmxlbmd0aCAtIDJdO1xuXHRcdFx0dGhyb3cgRXJyb3IoYFttb2R1bGUgcnVubmVyXSBGYWlsZWQgdG8gbG9hZCBcIiR7dXJsfVwiJHtpbXBvcnRlciA/IGAgaW1wb3J0ZWQgZnJvbSAke2ltcG9ydGVyfWAgOiBcIlwifWApO1xuXHRcdH1cblx0XHRsZXQgY3JlYXRlSW1wb3J0TWV0YSA9IHRoaXMub3B0aW9ucy5jcmVhdGVJbXBvcnRNZXRhID8/IGNyZWF0ZURlZmF1bHRJbXBvcnRNZXRhLCBtb2R1bGVQYXRoID0gY2xlYW5VcmwoZmlsZSB8fCBtb2R1bGVJZCksIGhyZWYgPSBwb3NpeFBhdGhUb0ZpbGVIcmVmKG1vZHVsZVBhdGgpLCBtZXRhID0gYXdhaXQgY3JlYXRlSW1wb3J0TWV0YShtb2R1bGVQYXRoKSwgZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHRcdFx0dmFsdWU6IFwiTW9kdWxlXCIsXG5cdFx0XHRlbnVtZXJhYmxlOiAhMSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogITFcblx0XHR9KSwgbW9kLmV4cG9ydHMgPSBleHBvcnRzO1xuXHRcdGxldCBob3RDb250ZXh0O1xuXHRcdHRoaXMuaG1yQ2xpZW50ICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXRhLCBcImhvdFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiAhMCxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuaG1yQ2xpZW50KSB0aHJvdyBFcnJvcihcIlttb2R1bGUgcnVubmVyXSBITVIgY2xpZW50IHdhcyBjbG9zZWQuXCIpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGNyZWF0aW5nIGhtciBjb250ZXh0IGZvclwiLCBtb2QudXJsKSwgaG90Q29udGV4dCB8fD0gbmV3IEhNUkNvbnRleHQodGhpcy5obXJDbGllbnQsIG1vZC51cmwpLCBob3RDb250ZXh0O1xuXHRcdFx0fSxcblx0XHRcdHNldDogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGhvdENvbnRleHQgPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRsZXQgY29udGV4dCA9IHtcblx0XHRcdFtzc3JJbXBvcnRLZXldOiByZXF1ZXN0LFxuXHRcdFx0W3NzckR5bmFtaWNJbXBvcnRLZXldOiBkeW5hbWljUmVxdWVzdCxcblx0XHRcdFtzc3JNb2R1bGVFeHBvcnRzS2V5XTogZXhwb3J0cyxcblx0XHRcdFtzc3JFeHBvcnRBbGxLZXldOiAob2JqKSA9PiBleHBvcnRBbGwoZXhwb3J0cywgb2JqKSxcblx0XHRcdFtzc3JFeHBvcnROYW1lS2V5XTogKG5hbWUsIGdldHRlcikgPT4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcblx0XHRcdFx0ZW51bWVyYWJsZTogITAsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogITAsXG5cdFx0XHRcdGdldDogZ2V0dGVyXG5cdFx0XHR9KSxcblx0XHRcdFtzc3JJbXBvcnRNZXRhS2V5XTogbWV0YVxuXHRcdH07XG5cdFx0cmV0dXJuIHRoaXMuZGVidWc/LihcIlttb2R1bGUgcnVubmVyXSBleGVjdXRpbmdcIiwgaHJlZiksIGF3YWl0IHRoaXMuZXZhbHVhdG9yLnJ1bklubGluZWRNb2R1bGUoY29udGV4dCwgY29kZSwgbW9kKSwgZXhwb3J0cztcblx0fVxufTtcbmZ1bmN0aW9uIGV4cG9ydEFsbChleHBvcnRzLCBzb3VyY2VNb2R1bGUpIHtcblx0aWYgKGV4cG9ydHMgIT09IHNvdXJjZU1vZHVsZSAmJiAhKGlzUHJpbWl0aXZlKHNvdXJjZU1vZHVsZSkgfHwgQXJyYXkuaXNBcnJheShzb3VyY2VNb2R1bGUpIHx8IHNvdXJjZU1vZHVsZSBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG5cdFx0Zm9yIChsZXQga2V5IGluIHNvdXJjZU1vZHVsZSkgaWYgKGtleSAhPT0gXCJkZWZhdWx0XCIgJiYga2V5ICE9PSBcIl9fZXNNb2R1bGVcIiAmJiAhKGtleSBpbiBleHBvcnRzKSkgdHJ5IHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcblx0XHRcdFx0ZW51bWVyYWJsZTogITAsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogITAsXG5cdFx0XHRcdGdldDogKCkgPT4gc291cmNlTW9kdWxlW2tleV1cblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2gge31cblx0fVxufVxuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBFU01vZHVsZXNFdmFsdWF0b3IsIEV2YWx1YXRlZE1vZHVsZXMsIE1vZHVsZVJ1bm5lciwgY3JlYXRlRGVmYXVsdEltcG9ydE1ldGEsIGNyZWF0ZU5vZGVJbXBvcnRNZXRhLCBjcmVhdGVXZWJTb2NrZXRNb2R1bGVSdW5uZXJUcmFuc3BvcnQsIG5vcm1hbGl6ZU1vZHVsZUlkLCBzc3JEeW5hbWljSW1wb3J0S2V5LCBzc3JFeHBvcnRBbGxLZXksIHNzckV4cG9ydE5hbWVLZXksIHNzckltcG9ydEtleSwgc3NySW1wb3J0TWV0YUtleSwgc3NyTW9kdWxlRXhwb3J0c0tleSB9O1xuIl0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswXSwibWFwcGluZ3MiOiI7QUFBQSxJQUFJLG9CQUFvQjtBQUN4QixxQkFBcUI7QUFHckIsTUFBTSxZQUFZLE9BQU8sVUFBVSxPQUFPLFFBQVEsYUFB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
1265
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLXJ1bm5lci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vdml0ZUA4LjAuM19AZW1uYXBpK2NvcmVAMS4xMS4yX0BlbW5hcGkrcnVudGltZUAxLjExLjJfQHR5cGVzK25vZGVAMjUuMC43X2VzYnVpbGRAMC4yNy40XzViMzVmYzFmYjg1ZDJhZjRkMTA1ZTBkNzRmOTQwZjUwL25vZGVfbW9kdWxlcy92aXRlL2Rpc3Qvbm9kZS9tb2R1bGUtcnVubmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBTT1VSQ0VNQVBQSU5HX1VSTCA9IFwic291cmNlTWFcIjtcblNPVVJDRU1BUFBJTkdfVVJMICs9IFwicHBpbmdVUkxcIjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9zaGFyZWQvdXRpbHMudHNcbmNvbnN0IGlzV2luZG93cyA9IHR5cGVvZiBwcm9jZXNzIDwgXCJ1XCIgJiYgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiO1xuLyoqXG4qIFVuZG8ge0BsaW5rIHdyYXBJZH0ncyBgL0BpZC9gIGFuZCBudWxsIGJ5dGUgcmVwbGFjZW1lbnRzLlxuKi9cbmZ1bmN0aW9uIHVud3JhcElkKGlkKSB7XG5cdHJldHVybiBpZC5zdGFydHNXaXRoKFwiL0BpZC9cIikgPyBpZC5zbGljZSg1KS5yZXBsYWNlKFwiX194MDBfX1wiLCBcIlxcMFwiKSA6IGlkO1xufVxuY29uc3Qgd2luZG93c1NsYXNoUkUgPSAvXFxcXC9nO1xuZnVuY3Rpb24gc2xhc2gocCkge1xuXHRyZXR1cm4gcC5yZXBsYWNlKHdpbmRvd3NTbGFzaFJFLCBcIi9cIik7XG59XG5jb25zdCBwb3N0Zml4UkUgPSAvWz8jXS4qJC87XG5mdW5jdGlvbiBjbGVhblVybCh1cmwpIHtcblx0cmV0dXJuIHVybC5yZXBsYWNlKHBvc3RmaXhSRSwgXCJcIik7XG59XG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuXHRyZXR1cm4gIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPSBcImZ1bmN0aW9uXCI7XG59XG5jb25zdCBBc3luY0Z1bmN0aW9uID0gYXN5bmMgZnVuY3Rpb24oKSB7fS5jb25zdHJ1Y3RvcjtcbmxldCBhc3luY0Z1bmN0aW9uRGVjbGFyYXRpb25QYWRkaW5nTGluZUNvdW50O1xuZnVuY3Rpb24gZ2V0QXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uUGFkZGluZ0xpbmVDb3VudCgpIHtcblx0aWYgKGFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvblBhZGRpbmdMaW5lQ291bnQgPT09IHZvaWQgMCkge1xuXHRcdGxldCBib2R5ID0gXCIvKmNvZGUqL1wiLCBzb3VyY2UgPSBuZXcgQXN5bmNGdW5jdGlvbihcImFcIiwgXCJiXCIsIGJvZHkpLnRvU3RyaW5nKCk7XG5cdFx0YXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uUGFkZGluZ0xpbmVDb3VudCA9IHNvdXJjZS5zbGljZSgwLCBzb3VyY2UuaW5kZXhPZihib2R5KSkuc3BsaXQoXCJcXG5cIikubGVuZ3RoIC0gMTtcblx0fVxuXHRyZXR1cm4gYXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uUGFkZGluZ0xpbmVDb3VudDtcbn1cbmZ1bmN0aW9uIHByb21pc2VXaXRoUmVzb2x2ZXJzKCkge1xuXHRsZXQgcmVzb2x2ZSwgcmVqZWN0O1xuXHRyZXR1cm4ge1xuXHRcdHByb21pc2U6IG5ldyBQcm9taXNlKChfcmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuXHRcdFx0cmVzb2x2ZSA9IF9yZXNvbHZlLCByZWplY3QgPSBfcmVqZWN0O1xuXHRcdH0pLFxuXHRcdHJlc29sdmUsXG5cdFx0cmVqZWN0XG5cdH07XG59XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcGF0aGVAMi4wLjMvbm9kZV9tb2R1bGVzL3BhdGhlL2Rpc3Qvc2hhcmVkL3BhdGhlLk0tZVRodE5aLm1qc1xuY29uc3QgX0RSSVZFX0xFVFRFUl9TVEFSVF9SRSA9IC9eW0EtWmEtel06XFwvLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZVdpbmRvd3NQYXRoKGlucHV0ID0gXCJcIikge1xuXHRyZXR1cm4gaW5wdXQgJiYgaW5wdXQucmVwbGFjZSgvXFxcXC9nLCBcIi9cIikucmVwbGFjZShfRFJJVkVfTEVUVEVSX1NUQVJUX1JFLCAocikgPT4gci50b1VwcGVyQ2FzZSgpKTtcbn1cbmNvbnN0IF9JU19BQlNPTFVURV9SRSA9IC9eWy9cXFxcXSg/IVsvXFxcXF0pfF5bL1xcXFxdezJ9KD8hXFwuKXxeW0EtWmEtel06Wy9cXFxcXS8sIF9EUklWRV9MRVRURVJfUkUgPSAvXltBLVphLXpdOiQvO1xuZnVuY3Rpb24gY3dkKCkge1xuXHRyZXR1cm4gdHlwZW9mIHByb2Nlc3MgPCBcInVcIiAmJiB0eXBlb2YgcHJvY2Vzcy5jd2QgPT0gXCJmdW5jdGlvblwiID8gcHJvY2Vzcy5jd2QoKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKSA6IFwiL1wiO1xufVxuY29uc3QgcmVzb2x2ZSA9IGZ1bmN0aW9uKC4uLmFyZ3VtZW50c18pIHtcblx0YXJndW1lbnRzXyA9IGFyZ3VtZW50c18ubWFwKChhcmd1bWVudCkgPT4gbm9ybWFsaXplV2luZG93c1BhdGgoYXJndW1lbnQpKTtcblx0bGV0IHJlc29sdmVkUGF0aCA9IFwiXCIsIHJlc29sdmVkQWJzb2x1dGUgPSAhMTtcblx0Zm9yIChsZXQgaW5kZXggPSBhcmd1bWVudHNfLmxlbmd0aCAtIDE7IGluZGV4ID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpbmRleC0tKSB7XG5cdFx0bGV0IHBhdGggPSBpbmRleCA+PSAwID8gYXJndW1lbnRzX1tpbmRleF0gOiBjd2QoKTtcblx0XHQhcGF0aCB8fCBwYXRoLmxlbmd0aCA9PT0gMCB8fCAocmVzb2x2ZWRQYXRoID0gYCR7cGF0aH0vJHtyZXNvbHZlZFBhdGh9YCwgcmVzb2x2ZWRBYnNvbHV0ZSA9IGlzQWJzb2x1dGUocGF0aCkpO1xuXHR9XG5cdHJldHVybiByZXNvbHZlZFBhdGggPSBub3JtYWxpemVTdHJpbmcocmVzb2x2ZWRQYXRoLCAhcmVzb2x2ZWRBYnNvbHV0ZSksIHJlc29sdmVkQWJzb2x1dGUgJiYgIWlzQWJzb2x1dGUocmVzb2x2ZWRQYXRoKSA/IGAvJHtyZXNvbHZlZFBhdGh9YCA6IHJlc29sdmVkUGF0aC5sZW5ndGggPiAwID8gcmVzb2x2ZWRQYXRoIDogXCIuXCI7XG59O1xuZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nKHBhdGgsIGFsbG93QWJvdmVSb290KSB7XG5cdGxldCByZXMgPSBcIlwiLCBsYXN0U2VnbWVudExlbmd0aCA9IDAsIGxhc3RTbGFzaCA9IC0xLCBkb3RzID0gMCwgY2hhciA9IG51bGw7XG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPD0gcGF0aC5sZW5ndGg7ICsraW5kZXgpIHtcblx0XHRpZiAoaW5kZXggPCBwYXRoLmxlbmd0aCkgY2hhciA9IHBhdGhbaW5kZXhdO1xuXHRcdGVsc2UgaWYgKGNoYXIgPT09IFwiL1wiKSBicmVhaztcblx0XHRlbHNlIGNoYXIgPSBcIi9cIjtcblx0XHRpZiAoY2hhciA9PT0gXCIvXCIpIHtcblx0XHRcdGlmICghKGxhc3RTbGFzaCA9PT0gaW5kZXggLSAxIHx8IGRvdHMgPT09IDEpKSBpZiAoZG90cyA9PT0gMikge1xuXHRcdFx0XHRpZiAocmVzLmxlbmd0aCA8IDIgfHwgbGFzdFNlZ21lbnRMZW5ndGggIT09IDIgfHwgcmVzW3Jlcy5sZW5ndGggLSAxXSAhPT0gXCIuXCIgfHwgcmVzW3Jlcy5sZW5ndGggLSAyXSAhPT0gXCIuXCIpIHtcblx0XHRcdFx0XHRpZiAocmVzLmxlbmd0aCA+IDIpIHtcblx0XHRcdFx0XHRcdGxldCBsYXN0U2xhc2hJbmRleCA9IHJlcy5sYXN0SW5kZXhPZihcIi9cIik7XG5cdFx0XHRcdFx0XHRsYXN0U2xhc2hJbmRleCA9PT0gLTEgPyAocmVzID0gXCJcIiwgbGFzdFNlZ21lbnRMZW5ndGggPSAwKSA6IChyZXMgPSByZXMuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpLCBsYXN0U2VnbWVudExlbmd0aCA9IHJlcy5sZW5ndGggLSAxIC0gcmVzLmxhc3RJbmRleE9mKFwiL1wiKSksIGxhc3RTbGFzaCA9IGluZGV4LCBkb3RzID0gMDtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAocmVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdHJlcyA9IFwiXCIsIGxhc3RTZWdtZW50TGVuZ3RoID0gMCwgbGFzdFNsYXNoID0gaW5kZXgsIGRvdHMgPSAwO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGFsbG93QWJvdmVSb290ICYmIChyZXMgKz0gcmVzLmxlbmd0aCA+IDAgPyBcIi8uLlwiIDogXCIuLlwiLCBsYXN0U2VnbWVudExlbmd0aCA9IDIpO1xuXHRcdFx0fSBlbHNlIHJlcy5sZW5ndGggPiAwID8gcmVzICs9IGAvJHtwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGluZGV4KX1gIDogcmVzID0gcGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpbmRleCksIGxhc3RTZWdtZW50TGVuZ3RoID0gaW5kZXggLSBsYXN0U2xhc2ggLSAxO1xuXHRcdFx0bGFzdFNsYXNoID0gaW5kZXgsIGRvdHMgPSAwO1xuXHRcdH0gZWxzZSBjaGFyID09PSBcIi5cIiAmJiBkb3RzICE9PSAtMSA/ICsrZG90cyA6IGRvdHMgPSAtMTtcblx0fVxuXHRyZXR1cm4gcmVzO1xufVxuY29uc3QgaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHApIHtcblx0cmV0dXJuIF9JU19BQlNPTFVURV9SRS50ZXN0KHApO1xufSwgZGlybmFtZSA9IGZ1bmN0aW9uKHApIHtcblx0bGV0IHNlZ21lbnRzID0gbm9ybWFsaXplV2luZG93c1BhdGgocCkucmVwbGFjZSgvXFwvJC8sIFwiXCIpLnNwbGl0KFwiL1wiKS5zbGljZSgwLCAtMSk7XG5cdHJldHVybiBzZWdtZW50cy5sZW5ndGggPT09IDEgJiYgX0RSSVZFX0xFVFRFUl9SRS50ZXN0KHNlZ21lbnRzWzBdKSAmJiAoc2VnbWVudHNbMF0gKz0gXCIvXCIpLCBzZWdtZW50cy5qb2luKFwiL1wiKSB8fCAoaXNBYnNvbHV0ZShwKSA/IFwiL1wiIDogXCIuXCIpO1xufSwgdGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKSwgZGVjb2RlQmFzZTY0ID0gdHlwZW9mIEJ1ZmZlciA9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIEJ1ZmZlci5mcm9tID09IFwiZnVuY3Rpb25cIiA/IChiYXNlNjQpID0+IEJ1ZmZlci5mcm9tKGJhc2U2NCwgXCJiYXNlNjRcIikudG9TdHJpbmcoXCJ1dGYtOFwiKSA6IChiYXNlNjQpID0+IHRleHREZWNvZGVyLmRlY29kZShVaW50OEFycmF5LmZyb20oYXRvYihiYXNlNjQpLCAoYykgPT4gYy5jaGFyQ29kZUF0KDApKSksIHBlcmNlbnRSZWdFeCA9IC8lL2csIGJhY2tzbGFzaFJlZ0V4ID0gL1xcXFwvZywgbmV3bGluZVJlZ0V4ID0gL1xcbi9nLCBjYXJyaWFnZVJldHVyblJlZ0V4ID0gL1xcci9nLCB0YWJSZWdFeCA9IC9cXHQvZywgcXVlc3Rpb25SZWdleCA9IC9cXD8vZywgaGFzaFJlZ2V4ID0gLyMvZztcbmZ1bmN0aW9uIGVuY29kZVBhdGhDaGFycyhmaWxlcGF0aCkge1xuXHRyZXR1cm4gZmlsZXBhdGguaW5kZXhPZihcIiVcIikgIT09IC0xICYmIChmaWxlcGF0aCA9IGZpbGVwYXRoLnJlcGxhY2UocGVyY2VudFJlZ0V4LCBcIiUyNVwiKSksICFpc1dpbmRvd3MgJiYgZmlsZXBhdGguaW5kZXhPZihcIlxcXFxcIikgIT09IC0xICYmIChmaWxlcGF0aCA9IGZpbGVwYXRoLnJlcGxhY2UoYmFja3NsYXNoUmVnRXgsIFwiJTVDXCIpKSwgZmlsZXBhdGguaW5kZXhPZihcIlxcblwiKSAhPT0gLTEgJiYgKGZpbGVwYXRoID0gZmlsZXBhdGgucmVwbGFjZShuZXdsaW5lUmVnRXgsIFwiJTBBXCIpKSwgZmlsZXBhdGguaW5kZXhPZihcIlxcclwiKSAhPT0gLTEgJiYgKGZpbGVwYXRoID0gZmlsZXBhdGgucmVwbGFjZShjYXJyaWFnZVJldHVyblJlZ0V4LCBcIiUwRFwiKSksIGZpbGVwYXRoLmluZGV4T2YoXCJcdFwiKSAhPT0gLTEgJiYgKGZpbGVwYXRoID0gZmlsZXBhdGgucmVwbGFjZSh0YWJSZWdFeCwgXCIlMDlcIikpLCBmaWxlcGF0aDtcbn1cbmNvbnN0IHBvc2l4RGlybmFtZSA9IGRpcm5hbWUsIHBvc2l4UmVzb2x2ZSA9IHJlc29sdmU7XG5mdW5jdGlvbiBwb3NpeFBhdGhUb0ZpbGVIcmVmKHBvc2l4UGF0aCkge1xuXHRsZXQgcmVzb2x2ZWQgPSBwb3NpeFJlc29sdmUocG9zaXhQYXRoKSwgZmlsZVBhdGhMYXN0ID0gcG9zaXhQYXRoLmNoYXJDb2RlQXQocG9zaXhQYXRoLmxlbmd0aCAtIDEpO1xuXHRyZXR1cm4gKGZpbGVQYXRoTGFzdCA9PT0gNDcgfHwgaXNXaW5kb3dzICYmIGZpbGVQYXRoTGFzdCA9PT0gOTIpICYmIHJlc29sdmVkW3Jlc29sdmVkLmxlbmd0aCAtIDFdICE9PSBcIi9cIiAmJiAocmVzb2x2ZWQgKz0gXCIvXCIpLCByZXNvbHZlZCA9IGVuY29kZVBhdGhDaGFycyhyZXNvbHZlZCksIHJlc29sdmVkLmluZGV4T2YoXCI/XCIpICE9PSAtMSAmJiAocmVzb2x2ZWQgPSByZXNvbHZlZC5yZXBsYWNlKHF1ZXN0aW9uUmVnZXgsIFwiJTNGXCIpKSwgcmVzb2x2ZWQuaW5kZXhPZihcIiNcIikgIT09IC0xICYmIChyZXNvbHZlZCA9IHJlc29sdmVkLnJlcGxhY2UoaGFzaFJlZ2V4LCBcIiUyM1wiKSksIG5ldyBVUkwoYGZpbGU6Ly8ke3Jlc29sdmVkfWApLmhyZWY7XG59XG5mdW5jdGlvbiB0b1dpbmRvd3NQYXRoKHBhdGgpIHtcblx0cmV0dXJuIHBhdGgucmVwbGFjZSgvXFwvL2csIFwiXFxcXFwiKTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AanJpZGdld2VsbCtzb3VyY2VtYXAtY29kZWNAMS41LjUvbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYy9kaXN0L3NvdXJjZW1hcC1jb2RlYy5tanNcbnZhciBjb21tYSA9IDQ0LCBjaGFycyA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLCBpbnRUb0NoYXIgPSBuZXcgVWludDhBcnJheSg2NCksIGNoYXJUb0ludCA9IG5ldyBVaW50OEFycmF5KDEyOCk7XG5mb3IgKGxldCBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7XG5cdGxldCBjID0gY2hhcnMuY2hhckNvZGVBdChpKTtcblx0aW50VG9DaGFyW2ldID0gYywgY2hhclRvSW50W2NdID0gaTtcbn1cbmZ1bmN0aW9uIGRlY29kZUludGVnZXIocmVhZGVyLCByZWxhdGl2ZSkge1xuXHRsZXQgdmFsdWUgPSAwLCBzaGlmdCA9IDAsIGludGVnZXIgPSAwO1xuXHRkb1xuXHRcdGludGVnZXIgPSBjaGFyVG9JbnRbcmVhZGVyLm5leHQoKV0sIHZhbHVlIHw9IChpbnRlZ2VyICYgMzEpIDw8IHNoaWZ0LCBzaGlmdCArPSA1O1xuXHR3aGlsZSAoaW50ZWdlciAmIDMyKTtcblx0bGV0IHNob3VsZE5lZ2F0ZSA9IHZhbHVlICYgMTtcblx0cmV0dXJuIHZhbHVlID4+Pj0gMSwgc2hvdWxkTmVnYXRlICYmICh2YWx1ZSA9IC0yMTQ3NDgzNjQ4IHwgLXZhbHVlKSwgcmVsYXRpdmUgKyB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGhhc01vcmVWbHEocmVhZGVyLCBtYXgpIHtcblx0cmV0dXJuIHJlYWRlci5wb3MgPj0gbWF4ID8gITEgOiByZWFkZXIucGVlaygpICE9PSBjb21tYTtcbn1cbnZhciBTdHJpbmdSZWFkZXIgPSBjbGFzcyB7XG5cdGNvbnN0cnVjdG9yKGJ1ZmZlcikge1xuXHRcdHRoaXMucG9zID0gMCwgdGhpcy5idWZmZXIgPSBidWZmZXI7XG5cdH1cblx0bmV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5idWZmZXIuY2hhckNvZGVBdCh0aGlzLnBvcysrKTtcblx0fVxuXHRwZWVrKCkge1xuXHRcdHJldHVybiB0aGlzLmJ1ZmZlci5jaGFyQ29kZUF0KHRoaXMucG9zKTtcblx0fVxuXHRpbmRleE9mKGNoYXIpIHtcblx0XHRsZXQgeyBidWZmZXIsIHBvcyB9ID0gdGhpcywgaWR4ID0gYnVmZmVyLmluZGV4T2YoY2hhciwgcG9zKTtcblx0XHRyZXR1cm4gaWR4ID09PSAtMSA/IGJ1ZmZlci5sZW5ndGggOiBpZHg7XG5cdH1cbn07XG5mdW5jdGlvbiBkZWNvZGUobWFwcGluZ3MpIHtcblx0bGV0IHsgbGVuZ3RoIH0gPSBtYXBwaW5ncywgcmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihtYXBwaW5ncyksIGRlY29kZWQgPSBbXSwgZ2VuQ29sdW1uID0gMCwgc291cmNlc0luZGV4ID0gMCwgc291cmNlTGluZSA9IDAsIHNvdXJjZUNvbHVtbiA9IDAsIG5hbWVzSW5kZXggPSAwO1xuXHRkbyB7XG5cdFx0bGV0IHNlbWkgPSByZWFkZXIuaW5kZXhPZihcIjtcIiksIGxpbmUgPSBbXSwgc29ydGVkID0gITAsIGxhc3RDb2wgPSAwO1xuXHRcdGZvciAoZ2VuQ29sdW1uID0gMDsgcmVhZGVyLnBvcyA8IHNlbWk7KSB7XG5cdFx0XHRsZXQgc2VnO1xuXHRcdFx0Z2VuQ29sdW1uID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIGdlbkNvbHVtbiksIGdlbkNvbHVtbiA8IGxhc3RDb2wgJiYgKHNvcnRlZCA9ICExKSwgbGFzdENvbCA9IGdlbkNvbHVtbiwgaGFzTW9yZVZscShyZWFkZXIsIHNlbWkpID8gKHNvdXJjZXNJbmRleCA9IGRlY29kZUludGVnZXIocmVhZGVyLCBzb3VyY2VzSW5kZXgpLCBzb3VyY2VMaW5lID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIHNvdXJjZUxpbmUpLCBzb3VyY2VDb2x1bW4gPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgc291cmNlQ29sdW1uKSwgaGFzTW9yZVZscShyZWFkZXIsIHNlbWkpID8gKG5hbWVzSW5kZXggPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgbmFtZXNJbmRleCksIHNlZyA9IFtcblx0XHRcdFx0Z2VuQ29sdW1uLFxuXHRcdFx0XHRzb3VyY2VzSW5kZXgsXG5cdFx0XHRcdHNvdXJjZUxpbmUsXG5cdFx0XHRcdHNvdXJjZUNvbHVtbixcblx0XHRcdFx0bmFtZXNJbmRleFxuXHRcdFx0XSkgOiBzZWcgPSBbXG5cdFx0XHRcdGdlbkNvbHVtbixcblx0XHRcdFx0c291cmNlc0luZGV4LFxuXHRcdFx0XHRzb3VyY2VMaW5lLFxuXHRcdFx0XHRzb3VyY2VDb2x1bW5cblx0XHRcdF0pIDogc2VnID0gW2dlbkNvbHVtbl0sIGxpbmUucHVzaChzZWcpLCByZWFkZXIucG9zKys7XG5cdFx0fVxuXHRcdHNvcnRlZCB8fCBzb3J0KGxpbmUpLCBkZWNvZGVkLnB1c2gobGluZSksIHJlYWRlci5wb3MgPSBzZW1pICsgMTtcblx0fSB3aGlsZSAocmVhZGVyLnBvcyA8PSBsZW5ndGgpO1xuXHRyZXR1cm4gZGVjb2RlZDtcbn1cbmZ1bmN0aW9uIHNvcnQobGluZSkge1xuXHRsaW5lLnNvcnQoc29ydENvbXBhcmF0b3IpO1xufVxuZnVuY3Rpb24gc29ydENvbXBhcmF0b3IoYSwgYikge1xuXHRyZXR1cm4gYVswXSAtIGJbMF07XG59XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGpyaWRnZXdlbGwrdHJhY2UtbWFwcGluZ0AwLjMuMzEvbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcvZGlzdC90cmFjZS1tYXBwaW5nLm1qc1xudmFyIENPTFVNTiA9IDAsIFNPVVJDRVNfSU5ERVggPSAxLCBTT1VSQ0VfTElORSA9IDIsIFNPVVJDRV9DT0xVTU4gPSAzLCBOQU1FU19JTkRFWCA9IDQsIGZvdW5kID0gITE7XG5mdW5jdGlvbiBiaW5hcnlTZWFyY2goaGF5c3RhY2ssIG5lZWRsZSwgbG93LCBoaWdoKSB7XG5cdGZvciAoOyBsb3cgPD0gaGlnaDspIHtcblx0XHRsZXQgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cgPj4gMSksIGNtcCA9IGhheXN0YWNrW21pZF1bQ09MVU1OXSAtIG5lZWRsZTtcblx0XHRpZiAoY21wID09PSAwKSByZXR1cm4gZm91bmQgPSAhMCwgbWlkO1xuXHRcdGNtcCA8IDAgPyBsb3cgPSBtaWQgKyAxIDogaGlnaCA9IG1pZCAtIDE7XG5cdH1cblx0cmV0dXJuIGZvdW5kID0gITEsIGxvdyAtIDE7XG59XG5mdW5jdGlvbiB1cHBlckJvdW5kKGhheXN0YWNrLCBuZWVkbGUsIGluZGV4KSB7XG5cdGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCBoYXlzdGFjay5sZW5ndGggJiYgaGF5c3RhY2tbaV1bQ09MVU1OXSA9PT0gbmVlZGxlOyBpbmRleCA9IGkrKyk7XG5cdHJldHVybiBpbmRleDtcbn1cbmZ1bmN0aW9uIGxvd2VyQm91bmQoaGF5c3RhY2ssIG5lZWRsZSwgaW5kZXgpIHtcblx0Zm9yIChsZXQgaSA9IGluZGV4IC0gMTsgaSA+PSAwICYmIGhheXN0YWNrW2ldW0NPTFVNTl0gPT09IG5lZWRsZTsgaW5kZXggPSBpLS0pO1xuXHRyZXR1cm4gaW5kZXg7XG59XG5mdW5jdGlvbiBtZW1vaXplZEJpbmFyeVNlYXJjaChoYXlzdGFjaywgbmVlZGxlLCBzdGF0ZSwga2V5KSB7XG5cdGxldCB7IGxhc3RLZXksIGxhc3ROZWVkbGUsIGxhc3RJbmRleCB9ID0gc3RhdGUsIGxvdyA9IDAsIGhpZ2ggPSBoYXlzdGFjay5sZW5ndGggLSAxO1xuXHRpZiAoa2V5ID09PSBsYXN0S2V5KSB7XG5cdFx0aWYgKG5lZWRsZSA9PT0gbGFzdE5lZWRsZSkgcmV0dXJuIGZvdW5kID0gbGFzdEluZGV4ICE9PSAtMSAmJiBoYXlzdGFja1tsYXN0SW5kZXhdW0NPTFVNTl0gPT09IG5lZWRsZSwgbGFzdEluZGV4O1xuXHRcdG5lZWRsZSA+PSBsYXN0TmVlZGxlID8gbG93ID0gbGFzdEluZGV4ID09PSAtMSA/IDAgOiBsYXN0SW5kZXggOiBoaWdoID0gbGFzdEluZGV4O1xuXHR9XG5cdHJldHVybiBzdGF0ZS5sYXN0S2V5ID0ga2V5LCBzdGF0ZS5sYXN0TmVlZGxlID0gbmVlZGxlLCBzdGF0ZS5sYXN0SW5kZXggPSBiaW5hcnlTZWFyY2goaGF5c3RhY2ssIG5lZWRsZSwgbG93LCBoaWdoKTtcbn1cbnZhciBMSU5FX0dUUl9aRVJPID0gXCJgbGluZWAgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCAobGluZXMgc3RhcnQgYXQgbGluZSAxKVwiLCBDT0xfR1RSX0VRX1pFUk8gPSBcImBjb2x1bW5gIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAgKGNvbHVtbnMgc3RhcnQgYXQgY29sdW1uIDApXCI7XG5mdW5jdGlvbiBjYXN0KG1hcCkge1xuXHRyZXR1cm4gbWFwO1xufVxuZnVuY3Rpb24gZGVjb2RlZE1hcHBpbmdzKG1hcCkge1xuXHR2YXIgX2E7XG5cdHJldHVybiAoX2EgPSBjYXN0KG1hcCkpLl9kZWNvZGVkIHx8IChfYS5fZGVjb2RlZCA9IGRlY29kZShjYXN0KG1hcCkuX2VuY29kZWQpKTtcbn1cbmZ1bmN0aW9uIG9yaWdpbmFsUG9zaXRpb25Gb3IobWFwLCBuZWVkbGUpIHtcblx0bGV0IHsgbGluZSwgY29sdW1uLCBiaWFzIH0gPSBuZWVkbGU7XG5cdGlmIChsaW5lLS0sIGxpbmUgPCAwKSB0aHJvdyBFcnJvcihMSU5FX0dUUl9aRVJPKTtcblx0aWYgKGNvbHVtbiA8IDApIHRocm93IEVycm9yKENPTF9HVFJfRVFfWkVSTyk7XG5cdGxldCBkZWNvZGVkID0gZGVjb2RlZE1hcHBpbmdzKG1hcCk7XG5cdGlmIChsaW5lID49IGRlY29kZWQubGVuZ3RoKSByZXR1cm4gT01hcHBpbmcobnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7XG5cdGxldCBzZWdtZW50cyA9IGRlY29kZWRbbGluZV0sIGluZGV4ID0gdHJhY2VTZWdtZW50SW50ZXJuYWwoc2VnbWVudHMsIGNhc3QobWFwKS5fZGVjb2RlZE1lbW8sIGxpbmUsIGNvbHVtbiwgYmlhcyB8fCAxKTtcblx0aWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIE9NYXBwaW5nKG51bGwsIG51bGwsIG51bGwsIG51bGwpO1xuXHRsZXQgc2VnbWVudCA9IHNlZ21lbnRzW2luZGV4XTtcblx0aWYgKHNlZ21lbnQubGVuZ3RoID09PSAxKSByZXR1cm4gT01hcHBpbmcobnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7XG5cdGxldCB7IG5hbWVzLCByZXNvbHZlZFNvdXJjZXMgfSA9IG1hcDtcblx0cmV0dXJuIE9NYXBwaW5nKHJlc29sdmVkU291cmNlc1tzZWdtZW50W1NPVVJDRVNfSU5ERVhdXSwgc2VnbWVudFtTT1VSQ0VfTElORV0gKyAxLCBzZWdtZW50W1NPVVJDRV9DT0xVTU5dLCBzZWdtZW50Lmxlbmd0aCA9PT0gNSA/IG5hbWVzW3NlZ21lbnRbTkFNRVNfSU5ERVhdXSA6IG51bGwpO1xufVxuZnVuY3Rpb24gT01hcHBpbmcoc291cmNlLCBsaW5lLCBjb2x1bW4sIG5hbWUpIHtcblx0cmV0dXJuIHtcblx0XHRzb3VyY2UsXG5cdFx0bGluZSxcblx0XHRjb2x1bW4sXG5cdFx0bmFtZVxuXHR9O1xufVxuZnVuY3Rpb24gdHJhY2VTZWdtZW50SW50ZXJuYWwoc2VnbWVudHMsIG1lbW8sIGxpbmUsIGNvbHVtbiwgYmlhcykge1xuXHRsZXQgaW5kZXggPSBtZW1vaXplZEJpbmFyeVNlYXJjaChzZWdtZW50cywgY29sdW1uLCBtZW1vLCBsaW5lKTtcblx0cmV0dXJuIGZvdW5kID8gaW5kZXggPSAoYmlhcyA9PT0gLTEgPyB1cHBlckJvdW5kIDogbG93ZXJCb3VuZCkoc2VnbWVudHMsIGNvbHVtbiwgaW5kZXgpIDogYmlhcyA9PT0gLTEgJiYgaW5kZXgrKywgaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSBzZWdtZW50cy5sZW5ndGggPyAtMSA6IGluZGV4O1xufVxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL21vZHVsZS1ydW5uZXIvc291cmNlbWFwL2RlY29kZXIudHNcbnZhciBEZWNvZGVkTWFwID0gY2xhc3Mge1xuXHRfZW5jb2RlZDtcblx0X2RlY29kZWQ7XG5cdF9kZWNvZGVkTWVtbztcblx0dXJsO1xuXHRmaWxlO1xuXHR2ZXJzaW9uO1xuXHRuYW1lcyA9IFtdO1xuXHRyZXNvbHZlZFNvdXJjZXM7XG5cdGNvbnN0cnVjdG9yKG1hcCwgZnJvbSkge1xuXHRcdHRoaXMubWFwID0gbWFwO1xuXHRcdGxldCB7IG1hcHBpbmdzLCBuYW1lcywgc291cmNlcyB9ID0gbWFwO1xuXHRcdHRoaXMudmVyc2lvbiA9IG1hcC52ZXJzaW9uLCB0aGlzLm5hbWVzID0gbmFtZXMgfHwgW10sIHRoaXMuX2VuY29kZWQgPSBtYXBwaW5ncyB8fCBcIlwiLCB0aGlzLl9kZWNvZGVkTWVtbyA9IG1lbW9pemVkU3RhdGUoKSwgdGhpcy51cmwgPSBmcm9tLCB0aGlzLmZpbGUgPSBmcm9tO1xuXHRcdGxldCBvcmlnaW5EaXIgPSBwb3NpeERpcm5hbWUoZnJvbSk7XG5cdFx0dGhpcy5yZXNvbHZlZFNvdXJjZXMgPSAoc291cmNlcyB8fCBbXSkubWFwKChzKSA9PiBwb3NpeFJlc29sdmUob3JpZ2luRGlyLCBzIHx8IFwiXCIpKTtcblx0fVxufTtcbmZ1bmN0aW9uIG1lbW9pemVkU3RhdGUoKSB7XG5cdHJldHVybiB7XG5cdFx0bGFzdEtleTogLTEsXG5cdFx0bGFzdE5lZWRsZTogLTEsXG5cdFx0bGFzdEluZGV4OiAtMVxuXHR9O1xufVxuZnVuY3Rpb24gZ2V0T3JpZ2luYWxQb3NpdGlvbihtYXAsIG5lZWRsZSkge1xuXHRsZXQgcmVzdWx0ID0gb3JpZ2luYWxQb3NpdGlvbkZvcihtYXAsIG5lZWRsZSk7XG5cdHJldHVybiByZXN1bHQuY29sdW1uID09IG51bGwgPyBudWxsIDogcmVzdWx0O1xufVxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL21vZHVsZS1ydW5uZXIvZXZhbHVhdGVkTW9kdWxlcy50c1xuY29uc3QgTU9EVUxFX1JVTk5FUl9TT1VSQ0VNQVBQSU5HX1JFR0VYUCA9IFJlZ0V4cChgLy8jICR7U09VUkNFTUFQUElOR19VUkx9PWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsKC4rKWApO1xudmFyIEV2YWx1YXRlZE1vZHVsZU5vZGUgPSBjbGFzcyB7XG5cdGltcG9ydGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGltcG9ydHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRldmFsdWF0ZWQgPSAhMTtcblx0bWV0YTtcblx0cHJvbWlzZTtcblx0ZXhwb3J0cztcblx0ZmlsZTtcblx0bWFwO1xuXHRjb25zdHJ1Y3RvcihpZCwgdXJsKSB7XG5cdFx0dGhpcy5pZCA9IGlkLCB0aGlzLnVybCA9IHVybCwgdGhpcy5maWxlID0gY2xlYW5VcmwoaWQpO1xuXHR9XG59LCBFdmFsdWF0ZWRNb2R1bGVzID0gY2xhc3Mge1xuXHRpZFRvTW9kdWxlTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0ZmlsZVRvTW9kdWxlc01hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdHVybFRvSWRNb2R1bGVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHQvKipcblx0KiBSZXR1cm5zIHRoZSBtb2R1bGUgbm9kZSBieSB0aGUgcmVzb2x2ZWQgbW9kdWxlIElELiBVc3VhbGx5LCBtb2R1bGUgSUQgaXNcblx0KiB0aGUgZmlsZSBzeXN0ZW0gcGF0aCB3aXRoIHF1ZXJ5IGFuZC9vciBoYXNoLiBJdCBjYW4gYWxzbyBiZSBhIHZpcnR1YWwgbW9kdWxlLlxuXHQqXG5cdCogTW9kdWxlIHJ1bm5lciBncmFwaCB3aWxsIGhhdmUgMSB0byAxIG1hcHBpbmcgd2l0aCB0aGUgc2VydmVyIG1vZHVsZSBncmFwaC5cblx0KiBAcGFyYW0gaWQgUmVzb2x2ZWQgbW9kdWxlIElEXG5cdCovXG5cdGdldE1vZHVsZUJ5SWQoaWQpIHtcblx0XHRyZXR1cm4gdGhpcy5pZFRvTW9kdWxlTWFwLmdldChpZCk7XG5cdH1cblx0LyoqXG5cdCogUmV0dXJucyBhbGwgbW9kdWxlcyByZWxhdGVkIHRvIHRoZSBmaWxlIHN5c3RlbSBwYXRoLiBEaWZmZXJlbnQgbW9kdWxlc1xuXHQqIG1pZ2h0IGhhdmUgZGlmZmVyZW50IHF1ZXJ5IHBhcmFtZXRlcnMgb3IgaGFzaCwgc28gaXQncyBwb3NzaWJsZSB0byBoYXZlXG5cdCogbXVsdGlwbGUgbW9kdWxlcyBmb3IgdGhlIHNhbWUgZmlsZS5cblx0KiBAcGFyYW0gZmlsZSBUaGUgZmlsZSBzeXN0ZW0gcGF0aCBvZiB0aGUgbW9kdWxlXG5cdCovXG5cdGdldE1vZHVsZXNCeUZpbGUoZmlsZSkge1xuXHRcdHJldHVybiB0aGlzLmZpbGVUb01vZHVsZXNNYXAuZ2V0KGZpbGUpO1xuXHR9XG5cdC8qKlxuXHQqIFJldHVybnMgdGhlIG1vZHVsZSBub2RlIGJ5IHRoZSBVUkwgdGhhdCB3YXMgdXNlZCBpbiB0aGUgaW1wb3J0IHN0YXRlbWVudC5cblx0KiBVbmxpa2UgbW9kdWxlIGdyYXBoIG9uIHRoZSBzZXJ2ZXIsIHRoZSBVUkwgaXMgbm90IHJlc29sdmVkIGFuZCBpcyB1c2VkIGFzIGlzLlxuXHQqIEBwYXJhbSB1cmwgU2VydmVyIFVSTCB0aGF0IHdhcyB1c2VkIGluIHRoZSBpbXBvcnQgc3RhdGVtZW50XG5cdCovXG5cdGdldE1vZHVsZUJ5VXJsKHVybCkge1xuXHRcdHJldHVybiB0aGlzLnVybFRvSWRNb2R1bGVNYXAuZ2V0KHVud3JhcElkKHVybCkpO1xuXHR9XG5cdC8qKlxuXHQqIEVuc3VyZSB0aGF0IG1vZHVsZSBpcyBpbiB0aGUgZ3JhcGguIElmIHRoZSBtb2R1bGUgaXMgYWxyZWFkeSBpbiB0aGUgZ3JhcGgsXG5cdCogaXQgd2lsbCByZXR1cm4gdGhlIGV4aXN0aW5nIG1vZHVsZSBub2RlLiBPdGhlcndpc2UsIGl0IHdpbGwgY3JlYXRlIGEgbmV3XG5cdCogbW9kdWxlIG5vZGUgYW5kIGFkZCBpdCB0byB0aGUgZ3JhcGguXG5cdCogQHBhcmFtIGlkIFJlc29sdmVkIG1vZHVsZSBJRFxuXHQqIEBwYXJhbSB1cmwgVVJMIHRoYXQgd2FzIHVzZWQgaW4gdGhlIGltcG9ydCBzdGF0ZW1lbnRcblx0Ki9cblx0ZW5zdXJlTW9kdWxlKGlkLCB1cmwpIHtcblx0XHRpZiAoaWQgPSBub3JtYWxpemVNb2R1bGVJZChpZCksIHRoaXMuaWRUb01vZHVsZU1hcC5oYXMoaWQpKSB7XG5cdFx0XHRsZXQgbW9kdWxlTm9kZSA9IHRoaXMuaWRUb01vZHVsZU1hcC5nZXQoaWQpO1xuXHRcdFx0cmV0dXJuIHRoaXMudXJsVG9JZE1vZHVsZU1hcC5zZXQodXJsLCBtb2R1bGVOb2RlKSwgbW9kdWxlTm9kZTtcblx0XHR9XG5cdFx0bGV0IG1vZHVsZU5vZGUgPSBuZXcgRXZhbHVhdGVkTW9kdWxlTm9kZShpZCwgdXJsKTtcblx0XHR0aGlzLmlkVG9Nb2R1bGVNYXAuc2V0KGlkLCBtb2R1bGVOb2RlKSwgdGhpcy51cmxUb0lkTW9kdWxlTWFwLnNldCh1cmwsIG1vZHVsZU5vZGUpO1xuXHRcdGxldCBmaWxlTW9kdWxlcyA9IHRoaXMuZmlsZVRvTW9kdWxlc01hcC5nZXQobW9kdWxlTm9kZS5maWxlKSB8fCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRcdHJldHVybiBmaWxlTW9kdWxlcy5hZGQobW9kdWxlTm9kZSksIHRoaXMuZmlsZVRvTW9kdWxlc01hcC5zZXQobW9kdWxlTm9kZS5maWxlLCBmaWxlTW9kdWxlcyksIG1vZHVsZU5vZGU7XG5cdH1cblx0aW52YWxpZGF0ZU1vZHVsZShub2RlKSB7XG5cdFx0bm9kZS5ldmFsdWF0ZWQgPSAhMSwgbm9kZS5tZXRhID0gdm9pZCAwLCBub2RlLm1hcCA9IHZvaWQgMCwgbm9kZS5wcm9taXNlID0gdm9pZCAwLCBub2RlLmV4cG9ydHMgPSB2b2lkIDAsIG5vZGUuaW1wb3J0cy5jbGVhcigpO1xuXHR9XG5cdC8qKlxuXHQqIEV4dHJhY3RzIHRoZSBpbmxpbmVkIHNvdXJjZSBtYXAgZnJvbSB0aGUgbW9kdWxlIGNvZGUgYW5kIHJldHVybnMgdGhlIGRlY29kZWRcblx0KiBzb3VyY2UgbWFwLiBJZiB0aGUgc291cmNlIG1hcCBpcyBub3QgaW5saW5lZCwgaXQgd2lsbCByZXR1cm4gbnVsbC5cblx0KiBAcGFyYW0gaWQgUmVzb2x2ZWQgbW9kdWxlIElEXG5cdCovXG5cdGdldE1vZHVsZVNvdXJjZU1hcEJ5SWQoaWQpIHtcblx0XHRsZXQgbW9kID0gdGhpcy5nZXRNb2R1bGVCeUlkKGlkKTtcblx0XHRpZiAoIW1vZCkgcmV0dXJuIG51bGw7XG5cdFx0aWYgKG1vZC5tYXApIHJldHVybiBtb2QubWFwO1xuXHRcdGlmICghbW9kLm1ldGEgfHwgIShcImNvZGVcIiBpbiBtb2QubWV0YSkpIHJldHVybiBudWxsO1xuXHRcdGxldCBwYXR0ZXJuID0gYC8vIyAke1NPVVJDRU1BUFBJTkdfVVJMfT1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGAsIGxhc3RJbmRleCA9IG1vZC5tZXRhLmNvZGUubGFzdEluZGV4T2YocGF0dGVybik7XG5cdFx0aWYgKGxhc3RJbmRleCA9PT0gLTEpIHJldHVybiBudWxsO1xuXHRcdGxldCBtYXBTdHJpbmcgPSBNT0RVTEVfUlVOTkVSX1NPVVJDRU1BUFBJTkdfUkVHRVhQLmV4ZWMobW9kLm1ldGEuY29kZS5zbGljZShsYXN0SW5kZXgpKT8uWzFdO1xuXHRcdHJldHVybiBtYXBTdHJpbmcgPyAobW9kLm1hcCA9IG5ldyBEZWNvZGVkTWFwKEpTT04ucGFyc2UoZGVjb2RlQmFzZTY0KG1hcFN0cmluZykpLCBtb2QuZmlsZSksIG1vZC5tYXApIDogbnVsbDtcblx0fVxuXHRjbGVhcigpIHtcblx0XHR0aGlzLmlkVG9Nb2R1bGVNYXAuY2xlYXIoKSwgdGhpcy5maWxlVG9Nb2R1bGVzTWFwLmNsZWFyKCksIHRoaXMudXJsVG9JZE1vZHVsZU1hcC5jbGVhcigpO1xuXHR9XG59O1xuY29uc3QgcHJlZml4ZWRCdWlsdGlucyA9IG5ldyBTZXQoW1xuXHRcIm5vZGU6c2VhXCIsXG5cdFwibm9kZTpzcWxpdGVcIixcblx0XCJub2RlOnRlc3RcIixcblx0XCJub2RlOnRlc3QvcmVwb3J0ZXJzXCJcbl0pO1xuZnVuY3Rpb24gbm9ybWFsaXplTW9kdWxlSWQoZmlsZSkge1xuXHRyZXR1cm4gcHJlZml4ZWRCdWlsdGlucy5oYXMoZmlsZSkgPyBmaWxlIDogc2xhc2goZmlsZSkucmVwbGFjZSgvXlxcL0Bmc1xcLy8sIGlzV2luZG93cyA/IFwiXCIgOiBcIi9cIikucmVwbGFjZSgvXm5vZGU6LywgXCJcIikucmVwbGFjZSgvXlxcLysvLCBcIi9cIikucmVwbGFjZSgvXmZpbGU6XFwvKy8sIGlzV2luZG93cyA/IFwiXCIgOiBcIi9cIik7XG59XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvc2hhcmVkL2htci50c1xudmFyIEhNUkNvbnRleHQgPSBjbGFzcyB7XG5cdG5ld0xpc3RlbmVycztcblx0Y29uc3RydWN0b3IoaG1yQ2xpZW50LCBvd25lclBhdGgpIHtcblx0XHR0aGlzLmhtckNsaWVudCA9IGhtckNsaWVudCwgdGhpcy5vd25lclBhdGggPSBvd25lclBhdGgsIGhtckNsaWVudC5kYXRhTWFwLmhhcyhvd25lclBhdGgpIHx8IGhtckNsaWVudC5kYXRhTWFwLnNldChvd25lclBhdGgsIHt9KTtcblx0XHRsZXQgbW9kID0gaG1yQ2xpZW50LmhvdE1vZHVsZXNNYXAuZ2V0KG93bmVyUGF0aCk7XG5cdFx0bW9kICYmIChtb2QuY2FsbGJhY2tzID0gW10pO1xuXHRcdGxldCBzdGFsZUxpc3RlbmVycyA9IGhtckNsaWVudC5jdHhUb0xpc3RlbmVyc01hcC5nZXQob3duZXJQYXRoKTtcblx0XHRpZiAoc3RhbGVMaXN0ZW5lcnMpIGZvciAobGV0IFtldmVudCwgc3RhbGVGbnNdIG9mIHN0YWxlTGlzdGVuZXJzKSB7XG5cdFx0XHRsZXQgbGlzdGVuZXJzID0gaG1yQ2xpZW50LmN1c3RvbUxpc3RlbmVyc01hcC5nZXQoZXZlbnQpO1xuXHRcdFx0bGlzdGVuZXJzICYmIGhtckNsaWVudC5jdXN0b21MaXN0ZW5lcnNNYXAuc2V0KGV2ZW50LCBsaXN0ZW5lcnMuZmlsdGVyKChsKSA9PiAhc3RhbGVGbnMuaW5jbHVkZXMobCkpKTtcblx0XHR9XG5cdFx0dGhpcy5uZXdMaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBobXJDbGllbnQuY3R4VG9MaXN0ZW5lcnNNYXAuc2V0KG93bmVyUGF0aCwgdGhpcy5uZXdMaXN0ZW5lcnMpO1xuXHR9XG5cdGdldCBkYXRhKCkge1xuXHRcdHJldHVybiB0aGlzLmhtckNsaWVudC5kYXRhTWFwLmdldCh0aGlzLm93bmVyUGF0aCk7XG5cdH1cblx0YWNjZXB0KGRlcHMsIGNhbGxiYWNrKSB7XG5cdFx0aWYgKHR5cGVvZiBkZXBzID09IFwiZnVuY3Rpb25cIiB8fCAhZGVwcykgdGhpcy5hY2NlcHREZXBzKFt0aGlzLm93bmVyUGF0aF0sIChbbW9kXSkgPT4gZGVwcz8uKG1vZCkpO1xuXHRcdGVsc2UgaWYgKHR5cGVvZiBkZXBzID09IFwic3RyaW5nXCIpIHRoaXMuYWNjZXB0RGVwcyhbZGVwc10sIChbbW9kXSkgPT4gY2FsbGJhY2s/Lihtb2QpKTtcblx0XHRlbHNlIGlmIChBcnJheS5pc0FycmF5KGRlcHMpKSB0aGlzLmFjY2VwdERlcHMoZGVwcywgY2FsbGJhY2spO1xuXHRcdGVsc2UgdGhyb3cgRXJyb3IoXCJpbnZhbGlkIGhvdC5hY2NlcHQoKSB1c2FnZS5cIik7XG5cdH1cblx0YWNjZXB0RXhwb3J0cyhfLCBjYWxsYmFjaykge1xuXHRcdHRoaXMuYWNjZXB0RGVwcyhbdGhpcy5vd25lclBhdGhdLCAoW21vZF0pID0+IGNhbGxiYWNrPy4obW9kKSk7XG5cdH1cblx0ZGlzcG9zZShjYikge1xuXHRcdHRoaXMuaG1yQ2xpZW50LmRpc3Bvc2VNYXAuc2V0KHRoaXMub3duZXJQYXRoLCBjYik7XG5cdH1cblx0cHJ1bmUoY2IpIHtcblx0XHR0aGlzLmhtckNsaWVudC5wcnVuZU1hcC5zZXQodGhpcy5vd25lclBhdGgsIGNiKTtcblx0fVxuXHRkZWNsaW5lKCkge31cblx0aW52YWxpZGF0ZShtZXNzYWdlKSB7XG5cdFx0bGV0IGZpcnN0SW52YWxpZGF0ZWRCeSA9IHRoaXMuaG1yQ2xpZW50LmN1cnJlbnRGaXJzdEludmFsaWRhdGVkQnkgPz8gdGhpcy5vd25lclBhdGg7XG5cdFx0dGhpcy5obXJDbGllbnQubm90aWZ5TGlzdGVuZXJzKFwidml0ZTppbnZhbGlkYXRlXCIsIHtcblx0XHRcdHBhdGg6IHRoaXMub3duZXJQYXRoLFxuXHRcdFx0bWVzc2FnZSxcblx0XHRcdGZpcnN0SW52YWxpZGF0ZWRCeVxuXHRcdH0pLCB0aGlzLnNlbmQoXCJ2aXRlOmludmFsaWRhdGVcIiwge1xuXHRcdFx0cGF0aDogdGhpcy5vd25lclBhdGgsXG5cdFx0XHRtZXNzYWdlLFxuXHRcdFx0Zmlyc3RJbnZhbGlkYXRlZEJ5XG5cdFx0fSksIHRoaXMuaG1yQ2xpZW50LmxvZ2dlci5kZWJ1ZyhgaW52YWxpZGF0ZSAke3RoaXMub3duZXJQYXRofSR7bWVzc2FnZSA/IGA6ICR7bWVzc2FnZX1gIDogXCJcIn1gKTtcblx0fVxuXHRvbihldmVudCwgY2IpIHtcblx0XHRsZXQgYWRkVG9NYXAgPSAobWFwKSA9PiB7XG5cdFx0XHRsZXQgZXhpc3RpbmcgPSBtYXAuZ2V0KGV2ZW50KSB8fCBbXTtcblx0XHRcdGV4aXN0aW5nLnB1c2goY2IpLCBtYXAuc2V0KGV2ZW50LCBleGlzdGluZyk7XG5cdFx0fTtcblx0XHRhZGRUb01hcCh0aGlzLmhtckNsaWVudC5jdXN0b21MaXN0ZW5lcnNNYXApLCBhZGRUb01hcCh0aGlzLm5ld0xpc3RlbmVycyk7XG5cdH1cblx0b2ZmKGV2ZW50LCBjYikge1xuXHRcdGxldCByZW1vdmVGcm9tTWFwID0gKG1hcCkgPT4ge1xuXHRcdFx0bGV0IGV4aXN0aW5nID0gbWFwLmdldChldmVudCk7XG5cdFx0XHRpZiAoZXhpc3RpbmcgPT09IHZvaWQgMCkgcmV0dXJuO1xuXHRcdFx0bGV0IHBydW5lZCA9IGV4aXN0aW5nLmZpbHRlcigobCkgPT4gbCAhPT0gY2IpO1xuXHRcdFx0aWYgKHBydW5lZC5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0bWFwLmRlbGV0ZShldmVudCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdG1hcC5zZXQoZXZlbnQsIHBydW5lZCk7XG5cdFx0fTtcblx0XHRyZW1vdmVGcm9tTWFwKHRoaXMuaG1yQ2xpZW50LmN1c3RvbUxpc3RlbmVyc01hcCksIHJlbW92ZUZyb21NYXAodGhpcy5uZXdMaXN0ZW5lcnMpO1xuXHR9XG5cdHNlbmQoZXZlbnQsIGRhdGEpIHtcblx0XHR0aGlzLmhtckNsaWVudC5zZW5kKHtcblx0XHRcdHR5cGU6IFwiY3VzdG9tXCIsXG5cdFx0XHRldmVudCxcblx0XHRcdGRhdGFcblx0XHR9KTtcblx0fVxuXHRhY2NlcHREZXBzKGRlcHMsIGNhbGxiYWNrID0gKCkgPT4ge30pIHtcblx0XHRsZXQgbW9kID0gdGhpcy5obXJDbGllbnQuaG90TW9kdWxlc01hcC5nZXQodGhpcy5vd25lclBhdGgpIHx8IHtcblx0XHRcdGlkOiB0aGlzLm93bmVyUGF0aCxcblx0XHRcdGNhbGxiYWNrczogW11cblx0XHR9O1xuXHRcdG1vZC5jYWxsYmFja3MucHVzaCh7XG5cdFx0XHRkZXBzLFxuXHRcdFx0Zm46IGNhbGxiYWNrXG5cdFx0fSksIHRoaXMuaG1yQ2xpZW50LmhvdE1vZHVsZXNNYXAuc2V0KHRoaXMub3duZXJQYXRoLCBtb2QpO1xuXHR9XG59LCBITVJDbGllbnQgPSBjbGFzcyB7XG5cdGhvdE1vZHVsZXNNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRkaXNwb3NlTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0cHJ1bmVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRkYXRhTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y3VzdG9tTGlzdGVuZXJzTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y3R4VG9MaXN0ZW5lcnNNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjdXJyZW50Rmlyc3RJbnZhbGlkYXRlZEJ5O1xuXHRjb25zdHJ1Y3Rvcihsb2dnZXIsIHRyYW5zcG9ydCwgaW1wb3J0VXBkYXRlZE1vZHVsZSkge1xuXHRcdHRoaXMubG9nZ2VyID0gbG9nZ2VyLCB0aGlzLnRyYW5zcG9ydCA9IHRyYW5zcG9ydCwgdGhpcy5pbXBvcnRVcGRhdGVkTW9kdWxlID0gaW1wb3J0VXBkYXRlZE1vZHVsZTtcblx0fVxuXHRhc3luYyBub3RpZnlMaXN0ZW5lcnMoZXZlbnQsIGRhdGEpIHtcblx0XHRsZXQgY2JzID0gdGhpcy5jdXN0b21MaXN0ZW5lcnNNYXAuZ2V0KGV2ZW50KTtcblx0XHRjYnMgJiYgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGNicy5tYXAoKGNiKSA9PiBjYihkYXRhKSkpO1xuXHR9XG5cdHNlbmQocGF5bG9hZCkge1xuXHRcdHRoaXMudHJhbnNwb3J0LnNlbmQocGF5bG9hZCkuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoZXJyKTtcblx0XHR9KTtcblx0fVxuXHRjbGVhcigpIHtcblx0XHR0aGlzLmhvdE1vZHVsZXNNYXAuY2xlYXIoKSwgdGhpcy5kaXNwb3NlTWFwLmNsZWFyKCksIHRoaXMucHJ1bmVNYXAuY2xlYXIoKSwgdGhpcy5kYXRhTWFwLmNsZWFyKCksIHRoaXMuY3VzdG9tTGlzdGVuZXJzTWFwLmNsZWFyKCksIHRoaXMuY3R4VG9MaXN0ZW5lcnNNYXAuY2xlYXIoKTtcblx0fVxuXHRhc3luYyBwcnVuZVBhdGhzKHBhdGhzKSB7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwocGF0aHMubWFwKChwYXRoKSA9PiB7XG5cdFx0XHRsZXQgZGlzcG9zZXIgPSB0aGlzLmRpc3Bvc2VNYXAuZ2V0KHBhdGgpO1xuXHRcdFx0aWYgKGRpc3Bvc2VyKSByZXR1cm4gZGlzcG9zZXIodGhpcy5kYXRhTWFwLmdldChwYXRoKSk7XG5cdFx0fSkpLCBhd2FpdCBQcm9taXNlLmFsbChwYXRocy5tYXAoKHBhdGgpID0+IHtcblx0XHRcdGxldCBmbiA9IHRoaXMucHJ1bmVNYXAuZ2V0KHBhdGgpO1xuXHRcdFx0aWYgKGZuKSByZXR1cm4gZm4odGhpcy5kYXRhTWFwLmdldChwYXRoKSk7XG5cdFx0fSkpO1xuXHR9XG5cdHdhcm5GYWlsZWRVcGRhdGUoZXJyLCBwYXRoKSB7XG5cdFx0KCEoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHx8ICFlcnIubWVzc2FnZS5pbmNsdWRlcyhcImZldGNoXCIpKSAmJiB0aGlzLmxvZ2dlci5lcnJvcihlcnIpLCB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHJlbG9hZCAke3BhdGh9LiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBzeW50YXggZXJyb3JzIG9yIGltcG9ydGluZyBub24tZXhpc3RlbnQgbW9kdWxlcy4gKHNlZSBlcnJvcnMgYWJvdmUpYCk7XG5cdH1cblx0dXBkYXRlUXVldWUgPSBbXTtcblx0cGVuZGluZ1VwZGF0ZVF1ZXVlID0gITE7XG5cdC8qKlxuXHQqIGJ1ZmZlciBtdWx0aXBsZSBob3QgdXBkYXRlcyB0cmlnZ2VyZWQgYnkgdGhlIHNhbWUgc3JjIGNoYW5nZVxuXHQqIHNvIHRoYXQgdGhleSBhcmUgaW52b2tlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IHdlcmUgc2VudC5cblx0KiAob3RoZXJ3aXNlIHRoZSBvcmRlciBtYXkgYmUgaW5jb25zaXN0ZW50IGJlY2F1c2Ugb2YgdGhlIGh0dHAgcmVxdWVzdCByb3VuZCB0cmlwKVxuXHQqL1xuXHRhc3luYyBxdWV1ZVVwZGF0ZShwYXlsb2FkKSB7XG5cdFx0aWYgKHRoaXMudXBkYXRlUXVldWUucHVzaCh0aGlzLmZldGNoVXBkYXRlKHBheWxvYWQpKSwgIXRoaXMucGVuZGluZ1VwZGF0ZVF1ZXVlKSB7XG5cdFx0XHR0aGlzLnBlbmRpbmdVcGRhdGVRdWV1ZSA9ICEwLCBhd2FpdCBQcm9taXNlLnJlc29sdmUoKSwgdGhpcy5wZW5kaW5nVXBkYXRlUXVldWUgPSAhMTtcblx0XHRcdGxldCBsb2FkaW5nID0gWy4uLnRoaXMudXBkYXRlUXVldWVdO1xuXHRcdFx0dGhpcy51cGRhdGVRdWV1ZSA9IFtdLCAoYXdhaXQgUHJvbWlzZS5hbGwobG9hZGluZykpLmZvckVhY2goKGZuKSA9PiBmbiAmJiBmbigpKTtcblx0XHR9XG5cdH1cblx0YXN5bmMgZmV0Y2hVcGRhdGUodXBkYXRlKSB7XG5cdFx0bGV0IHsgcGF0aCwgYWNjZXB0ZWRQYXRoLCBmaXJzdEludmFsaWRhdGVkQnkgfSA9IHVwZGF0ZSwgbW9kID0gdGhpcy5ob3RNb2R1bGVzTWFwLmdldChwYXRoKTtcblx0XHRpZiAoIW1vZCkgcmV0dXJuO1xuXHRcdGxldCBmZXRjaGVkTW9kdWxlLCBpc1NlbGZVcGRhdGUgPSBwYXRoID09PSBhY2NlcHRlZFBhdGgsIHF1YWxpZmllZENhbGxiYWNrcyA9IG1vZC5jYWxsYmFja3MuZmlsdGVyKCh7IGRlcHMgfSkgPT4gZGVwcy5pbmNsdWRlcyhhY2NlcHRlZFBhdGgpKTtcblx0XHRpZiAoaXNTZWxmVXBkYXRlIHx8IHF1YWxpZmllZENhbGxiYWNrcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRsZXQgZGlzcG9zZXIgPSB0aGlzLmRpc3Bvc2VNYXAuZ2V0KGFjY2VwdGVkUGF0aCk7XG5cdFx0XHRkaXNwb3NlciAmJiBhd2FpdCBkaXNwb3Nlcih0aGlzLmRhdGFNYXAuZ2V0KGFjY2VwdGVkUGF0aCkpO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZmV0Y2hlZE1vZHVsZSA9IGF3YWl0IHRoaXMuaW1wb3J0VXBkYXRlZE1vZHVsZSh1cGRhdGUpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aGlzLndhcm5GYWlsZWRVcGRhdGUoZSwgYWNjZXB0ZWRQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMuY3VycmVudEZpcnN0SW52YWxpZGF0ZWRCeSA9IGZpcnN0SW52YWxpZGF0ZWRCeTtcblx0XHRcdFx0Zm9yIChsZXQgeyBkZXBzLCBmbiB9IG9mIHF1YWxpZmllZENhbGxiYWNrcykgZm4oZGVwcy5tYXAoKGRlcCkgPT4gZGVwID09PSBhY2NlcHRlZFBhdGggPyBmZXRjaGVkTW9kdWxlIDogdm9pZCAwKSk7XG5cdFx0XHRcdGxldCBsb2dnZWRQYXRoID0gaXNTZWxmVXBkYXRlID8gcGF0aCA6IGAke2FjY2VwdGVkUGF0aH0gdmlhICR7cGF0aH1gO1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5kZWJ1ZyhgaG90IHVwZGF0ZWQ6ICR7bG9nZ2VkUGF0aH1gKTtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdHRoaXMuY3VycmVudEZpcnN0SW52YWxpZGF0ZWRCeSA9IHZvaWQgMDtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3NoYXJlZC9zc3JUcmFuc2Zvcm0udHNcbi8qKlxuKiBWaXRlIGNvbnZlcnRzIGBpbXBvcnQgeyB9IGZyb20gJ2ZvbydgIHRvIGBjb25zdCBfID0gX192aXRlX3Nzcl9pbXBvcnRfXygnZm9vJylgLlxuKiBUb3AtbGV2ZWwgaW1wb3J0cyBhbmQgZHluYW1pYyBpbXBvcnRzIHdvcmsgc2xpZ2h0bHkgZGlmZmVyZW50bHkgaW4gTm9kZS5qcy5cbiogVGhpcyBmdW5jdGlvbiBub3JtYWxpemVzIHRoZSBkaWZmZXJlbmNlcyBzbyBpdCBtYXRjaGVzIHByb2QgYmVoYXZpb3VyLlxuKi9cbmZ1bmN0aW9uIGFuYWx5emVJbXBvcnRlZE1vZERpZmZlcmVuY2UobW9kLCByYXdJZCwgbW9kdWxlVHlwZSwgbWV0YWRhdGEpIHtcblx0aWYgKCFtZXRhZGF0YT8uaXNEeW5hbWljSW1wb3J0ICYmIG1ldGFkYXRhPy5pbXBvcnRlZE5hbWVzPy5sZW5ndGgpIHtcblx0XHRsZXQgbWlzc2luZ0JpbmRpbmdzID0gbWV0YWRhdGEuaW1wb3J0ZWROYW1lcy5maWx0ZXIoKHMpID0+ICEocyBpbiBtb2QpKTtcblx0XHRpZiAobWlzc2luZ0JpbmRpbmdzLmxlbmd0aCkge1xuXHRcdFx0bGV0IGxhc3RCaW5kaW5nID0gbWlzc2luZ0JpbmRpbmdzW21pc3NpbmdCaW5kaW5ncy5sZW5ndGggLSAxXTtcblx0XHRcdHRocm93IFN5bnRheEVycm9yKG1vZHVsZVR5cGUgPT09IFwibW9kdWxlXCIgPyBgW3ZpdGVdIFRoZSByZXF1ZXN0ZWQgbW9kdWxlICcke3Jhd0lkfScgZG9lcyBub3QgcHJvdmlkZSBhbiBleHBvcnQgbmFtZWQgJyR7bGFzdEJpbmRpbmd9J2AgOiBgXFxcblt2aXRlXSBOYW1lZCBleHBvcnQgJyR7bGFzdEJpbmRpbmd9JyBub3QgZm91bmQuIFRoZSByZXF1ZXN0ZWQgbW9kdWxlICcke3Jhd0lkfScgaXMgYSBDb21tb25KUyBtb2R1bGUsIHdoaWNoIG1heSBub3Qgc3VwcG9ydCBhbGwgbW9kdWxlLmV4cG9ydHMgYXMgbmFtZWQgZXhwb3J0cy5cbkNvbW1vbkpTIG1vZHVsZXMgY2FuIGFsd2F5cyBiZSBpbXBvcnRlZCB2aWEgdGhlIGRlZmF1bHQgZXhwb3J0LCBmb3IgZXhhbXBsZSB1c2luZzpcblxuaW1wb3J0IHBrZyBmcm9tICcke3Jhd0lkfSc7XG5jb25zdCB7JHttaXNzaW5nQmluZGluZ3Muam9pbihcIiwgXCIpfX0gPSBwa2c7XG5gKTtcblx0XHR9XG5cdH1cbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9uYW5vaWRANS4xLjcvbm9kZV9tb2R1bGVzL25hbm9pZC9ub24tc2VjdXJlL2luZGV4LmpzXG5sZXQgbmFub2lkID0gKHNpemUgPSAyMSkgPT4ge1xuXHRsZXQgaWQgPSBcIlwiLCBpID0gc2l6ZSB8IDA7XG5cdGZvciAoOyBpLS07KSBpZCArPSBcInVzZWFuZG9tLTI2VDE5ODM0MFBYNzVweEpBQ0tWRVJZTUlOREJVU0hXT0xGX0dRWmJmZ2hqa2xxdnd5enJpY3RcIltNYXRoLnJhbmRvbSgpICogNjQgfCAwXTtcblx0cmV0dXJuIGlkO1xufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9zaGFyZWQvbW9kdWxlUnVubmVyVHJhbnNwb3J0LnRzXG5mdW5jdGlvbiByZXZpdmVJbnZva2VFcnJvcihlKSB7XG5cdGxldCBlcnJvciA9IEVycm9yKGUubWVzc2FnZSB8fCBcIlVua25vd24gaW52b2tlIGVycm9yXCIpO1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihlcnJvciwgZSwgeyBydW5uZXJFcnJvcjogLyogQF9fUFVSRV9fICovIEVycm9yKFwiUnVubmVyRXJyb3JcIikgfSksIGVycm9yO1xufVxuY29uc3QgY3JlYXRlSW52b2tlYWJsZVRyYW5zcG9ydCA9ICh0cmFuc3BvcnQpID0+IHtcblx0aWYgKHRyYW5zcG9ydC5pbnZva2UpIHJldHVybiB7XG5cdFx0Li4udHJhbnNwb3J0LFxuXHRcdGFzeW5jIGludm9rZShuYW1lLCBkYXRhKSB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gYXdhaXQgdHJhbnNwb3J0Lmludm9rZSh7XG5cdFx0XHRcdHR5cGU6IFwiY3VzdG9tXCIsXG5cdFx0XHRcdGV2ZW50OiBcInZpdGU6aW52b2tlXCIsXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRpZDogXCJzZW5kXCIsXG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRkYXRhXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0aWYgKFwiZXJyb3JcIiBpbiByZXN1bHQpIHRocm93IHJldml2ZUludm9rZUVycm9yKHJlc3VsdC5lcnJvcik7XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnJlc3VsdDtcblx0XHR9XG5cdH07XG5cdGlmICghdHJhbnNwb3J0LnNlbmQgfHwgIXRyYW5zcG9ydC5jb25uZWN0KSB0aHJvdyBFcnJvcihcInRyYW5zcG9ydCBtdXN0IGltcGxlbWVudCBzZW5kIGFuZCBjb25uZWN0IHdoZW4gaW52b2tlIGlzIG5vdCBpbXBsZW1lbnRlZFwiKTtcblx0bGV0IHJwY1Byb21pc2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0cmV0dXJuIHtcblx0XHQuLi50cmFuc3BvcnQsXG5cdFx0Y29ubmVjdCh7IG9uTWVzc2FnZSwgb25EaXNjb25uZWN0aW9uIH0pIHtcblx0XHRcdHJldHVybiB0cmFuc3BvcnQuY29ubmVjdCh7XG5cdFx0XHRcdG9uTWVzc2FnZShwYXlsb2FkKSB7XG5cdFx0XHRcdFx0aWYgKHBheWxvYWQudHlwZSA9PT0gXCJjdXN0b21cIiAmJiBwYXlsb2FkLmV2ZW50ID09PSBcInZpdGU6aW52b2tlXCIpIHtcblx0XHRcdFx0XHRcdGxldCBkYXRhID0gcGF5bG9hZC5kYXRhO1xuXHRcdFx0XHRcdFx0aWYgKGRhdGEuaWQuc3RhcnRzV2l0aChcInJlc3BvbnNlOlwiKSkge1xuXHRcdFx0XHRcdFx0XHRsZXQgaW52b2tlSWQgPSBkYXRhLmlkLnNsaWNlKDkpLCBwcm9taXNlID0gcnBjUHJvbWlzZXMuZ2V0KGludm9rZUlkKTtcblx0XHRcdFx0XHRcdFx0aWYgKCFwcm9taXNlKSByZXR1cm47XG5cdFx0XHRcdFx0XHRcdHByb21pc2UudGltZW91dElkICYmIGNsZWFyVGltZW91dChwcm9taXNlLnRpbWVvdXRJZCksIHJwY1Byb21pc2VzLmRlbGV0ZShpbnZva2VJZCk7XG5cdFx0XHRcdFx0XHRcdGxldCB7IGVycm9yLCByZXN1bHQgfSA9IGRhdGEuZGF0YTtcblx0XHRcdFx0XHRcdFx0ZXJyb3IgPyBwcm9taXNlLnJlamVjdChlcnJvcikgOiBwcm9taXNlLnJlc29sdmUocmVzdWx0KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvbk1lc3NhZ2UocGF5bG9hZCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uRGlzY29ubmVjdGlvblxuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRkaXNjb25uZWN0KCkge1xuXHRcdFx0cmV0dXJuIHJwY1Byb21pc2VzLmZvckVhY2goKHByb21pc2UpID0+IHtcblx0XHRcdFx0cHJvbWlzZS5yZWplY3QoLyogQF9fUFVSRV9fICovIEVycm9yKGB0cmFuc3BvcnQgd2FzIGRpc2Nvbm5lY3RlZCwgY2Fubm90IGNhbGwgJHtKU09OLnN0cmluZ2lmeShwcm9taXNlLm5hbWUpfWApKTtcblx0XHRcdH0pLCBycGNQcm9taXNlcy5jbGVhcigpLCB0cmFuc3BvcnQuZGlzY29ubmVjdD8uKCk7XG5cdFx0fSxcblx0XHRzZW5kKGRhdGEpIHtcblx0XHRcdHJldHVybiB0cmFuc3BvcnQuc2VuZChkYXRhKTtcblx0XHR9LFxuXHRcdGFzeW5jIGludm9rZShuYW1lLCBkYXRhKSB7XG5cdFx0XHRsZXQgcHJvbWlzZUlkID0gbmFub2lkKCksIHdyYXBwZWREYXRhID0ge1xuXHRcdFx0XHR0eXBlOiBcImN1c3RvbVwiLFxuXHRcdFx0XHRldmVudDogXCJ2aXRlOmludm9rZVwiLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRpZDogYHNlbmQ6JHtwcm9taXNlSWR9YCxcblx0XHRcdFx0XHRkYXRhXG5cdFx0XHRcdH1cblx0XHRcdH0sIHNlbmRQcm9taXNlID0gdHJhbnNwb3J0LnNlbmQod3JhcHBlZERhdGEpLCB7IHByb21pc2UsIHJlc29sdmUsIHJlamVjdCB9ID0gcHJvbWlzZVdpdGhSZXNvbHZlcnMoKSwgdGltZW91dCA9IHRyYW5zcG9ydC50aW1lb3V0ID8/IDZlNCwgdGltZW91dElkO1xuXHRcdFx0dGltZW91dCA+IDAgJiYgKHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRycGNQcm9taXNlcy5kZWxldGUocHJvbWlzZUlkKSwgcmVqZWN0KC8qIEBfX1BVUkVfXyAqLyBFcnJvcihgdHJhbnNwb3J0IGludm9rZSB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0fW1zIChkYXRhOiAke0pTT04uc3RyaW5naWZ5KHdyYXBwZWREYXRhKX0pYCkpO1xuXHRcdFx0fSwgdGltZW91dCksIHRpbWVvdXRJZD8udW5yZWY/LigpKSwgcnBjUHJvbWlzZXMuc2V0KHByb21pc2VJZCwge1xuXHRcdFx0XHRyZXNvbHZlLFxuXHRcdFx0XHRyZWplY3QsXG5cdFx0XHRcdG5hbWUsXG5cdFx0XHRcdHRpbWVvdXRJZFxuXHRcdFx0fSksIHNlbmRQcm9taXNlICYmIHNlbmRQcm9taXNlLmNhdGNoKChlcnIpID0+IHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXRJZCksIHJwY1Byb21pc2VzLmRlbGV0ZShwcm9taXNlSWQpLCByZWplY3QoZXJyKTtcblx0XHRcdH0pO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmV0dXJuIGF3YWl0IHByb21pc2U7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0dGhyb3cgcmV2aXZlSW52b2tlRXJyb3IoZXJyKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59LCBub3JtYWxpemVNb2R1bGVSdW5uZXJUcmFuc3BvcnQgPSAodHJhbnNwb3J0KSA9PiB7XG5cdGxldCBpbnZva2VhYmxlVHJhbnNwb3J0ID0gY3JlYXRlSW52b2tlYWJsZVRyYW5zcG9ydCh0cmFuc3BvcnQpLCBpc0Nvbm5lY3RlZCA9ICFpbnZva2VhYmxlVHJhbnNwb3J0LmNvbm5lY3QsIGNvbm5lY3RpbmdQcm9taXNlO1xuXHRyZXR1cm4ge1xuXHRcdC4uLnRyYW5zcG9ydCxcblx0XHQuLi5pbnZva2VhYmxlVHJhbnNwb3J0LmNvbm5lY3QgPyB7IGFzeW5jIGNvbm5lY3Qob25NZXNzYWdlKSB7XG5cdFx0XHRpZiAoaXNDb25uZWN0ZWQpIHJldHVybjtcblx0XHRcdGlmIChjb25uZWN0aW5nUHJvbWlzZSkge1xuXHRcdFx0XHRhd2FpdCBjb25uZWN0aW5nUHJvbWlzZTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0bGV0IG1heWJlUHJvbWlzZSA9IGludm9rZWFibGVUcmFuc3BvcnQuY29ubmVjdCh7XG5cdFx0XHRcdG9uTWVzc2FnZTogb25NZXNzYWdlID8/ICgoKSA9PiB7fSksXG5cdFx0XHRcdG9uRGlzY29ubmVjdGlvbigpIHtcblx0XHRcdFx0XHRpc0Nvbm5lY3RlZCA9ICExO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdG1heWJlUHJvbWlzZSAmJiAoY29ubmVjdGluZ1Byb21pc2UgPSBtYXliZVByb21pc2UsIGF3YWl0IGNvbm5lY3RpbmdQcm9taXNlLCBjb25uZWN0aW5nUHJvbWlzZSA9IHZvaWQgMCksIGlzQ29ubmVjdGVkID0gITA7XG5cdFx0fSB9IDoge30sXG5cdFx0Li4uaW52b2tlYWJsZVRyYW5zcG9ydC5kaXNjb25uZWN0ID8geyBhc3luYyBkaXNjb25uZWN0KCkge1xuXHRcdFx0aXNDb25uZWN0ZWQgJiYgKGNvbm5lY3RpbmdQcm9taXNlICYmIGF3YWl0IGNvbm5lY3RpbmdQcm9taXNlLCBpc0Nvbm5lY3RlZCA9ICExLCBhd2FpdCBpbnZva2VhYmxlVHJhbnNwb3J0LmRpc2Nvbm5lY3QoKSk7XG5cdFx0fSB9IDoge30sXG5cdFx0YXN5bmMgc2VuZChkYXRhKSB7XG5cdFx0XHRpZiAoaW52b2tlYWJsZVRyYW5zcG9ydC5zZW5kKSB7XG5cdFx0XHRcdGlmICghaXNDb25uZWN0ZWQpIGlmIChjb25uZWN0aW5nUHJvbWlzZSkgYXdhaXQgY29ubmVjdGluZ1Byb21pc2U7XG5cdFx0XHRcdGVsc2UgdGhyb3cgRXJyb3IoXCJzZW5kIHdhcyBjYWxsZWQgYmVmb3JlIGNvbm5lY3RcIik7XG5cdFx0XHRcdGF3YWl0IGludm9rZWFibGVUcmFuc3BvcnQuc2VuZChkYXRhKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGFzeW5jIGludm9rZShuYW1lLCBkYXRhKSB7XG5cdFx0XHRpZiAoIWlzQ29ubmVjdGVkKSBpZiAoY29ubmVjdGluZ1Byb21pc2UpIGF3YWl0IGNvbm5lY3RpbmdQcm9taXNlO1xuXHRcdFx0ZWxzZSB0aHJvdyBFcnJvcihcImludm9rZSB3YXMgY2FsbGVkIGJlZm9yZSBjb25uZWN0XCIpO1xuXHRcdFx0cmV0dXJuIGludm9rZWFibGVUcmFuc3BvcnQuaW52b2tlKG5hbWUsIGRhdGEpO1xuXHRcdH1cblx0fTtcbn0sIGNyZWF0ZVdlYlNvY2tldE1vZHVsZVJ1bm5lclRyYW5zcG9ydCA9IChvcHRpb25zKSA9PiB7XG5cdGxldCBwaW5nSW50ZXJ2YWwgPSBvcHRpb25zLnBpbmdJbnRlcnZhbCA/PyAzZTQsIHdzLCBwaW5nSW50ZXJ2YWxJZDtcblx0cmV0dXJuIHtcblx0XHRhc3luYyBjb25uZWN0KHsgb25NZXNzYWdlLCBvbkRpc2Nvbm5lY3Rpb24gfSkge1xuXHRcdFx0bGV0IHNvY2tldCA9IG9wdGlvbnMuY3JlYXRlQ29ubmVjdGlvbigpO1xuXHRcdFx0c29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGFzeW5jICh7IGRhdGEgfSkgPT4ge1xuXHRcdFx0XHRvbk1lc3NhZ2UoSlNPTi5wYXJzZShkYXRhKSk7XG5cdFx0XHR9KTtcblx0XHRcdGxldCBpc09wZW5lZCA9IHNvY2tldC5yZWFkeVN0YXRlID09PSBzb2NrZXQuT1BFTjtcblx0XHRcdGlzT3BlbmVkIHx8IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0c29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJvcGVuXCIsICgpID0+IHtcblx0XHRcdFx0XHRpc09wZW5lZCA9ICEwLCByZXNvbHZlKCk7XG5cdFx0XHRcdH0sIHsgb25jZTogITAgfSksIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKFwiY2xvc2VcIiwgYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdGlmICghaXNPcGVuZWQpIHtcblx0XHRcdFx0XHRcdHJlamVjdCgvKiBAX19QVVJFX18gKi8gRXJyb3IoXCJXZWJTb2NrZXQgY2xvc2VkIHdpdGhvdXQgb3BlbmVkLlwiKSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9uTWVzc2FnZSh7XG5cdFx0XHRcdFx0XHR0eXBlOiBcImN1c3RvbVwiLFxuXHRcdFx0XHRcdFx0ZXZlbnQ6IFwidml0ZTp3czpkaXNjb25uZWN0XCIsXG5cdFx0XHRcdFx0XHRkYXRhOiB7IHdlYlNvY2tldDogc29ja2V0IH1cblx0XHRcdFx0XHR9KSwgb25EaXNjb25uZWN0aW9uKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSksIG9uTWVzc2FnZSh7XG5cdFx0XHRcdHR5cGU6IFwiY3VzdG9tXCIsXG5cdFx0XHRcdGV2ZW50OiBcInZpdGU6d3M6Y29ubmVjdFwiLFxuXHRcdFx0XHRkYXRhOiB7IHdlYlNvY2tldDogc29ja2V0IH1cblx0XHRcdH0pLCB3cyA9IHNvY2tldCwgcGluZ0ludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdFx0XHRcdHNvY2tldC5yZWFkeVN0YXRlID09PSBzb2NrZXQuT1BFTiAmJiBzb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7IHR5cGU6IFwicGluZ1wiIH0pKTtcblx0XHRcdH0sIHBpbmdJbnRlcnZhbCk7XG5cdFx0fSxcblx0XHRkaXNjb25uZWN0KCkge1xuXHRcdFx0Y2xlYXJJbnRlcnZhbChwaW5nSW50ZXJ2YWxJZCksIHdzPy5jbG9zZSgpO1xuXHRcdH0sXG5cdFx0c2VuZChkYXRhKSB7XG5cdFx0XHR3cy5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcblx0XHR9XG5cdH07XG59O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3NoYXJlZC9idWlsdGluLnRzXG5mdW5jdGlvbiBjcmVhdGVJc0J1aWx0aW4oYnVpbHRpbnMpIHtcblx0bGV0IHBsYWluQnVpbHRpbnNTZXQgPSBuZXcgU2V0KGJ1aWx0aW5zLmZpbHRlcigoYnVpbHRpbikgPT4gdHlwZW9mIGJ1aWx0aW4gPT0gXCJzdHJpbmdcIikpLCByZWdleEJ1aWx0aW5zID0gYnVpbHRpbnMuZmlsdGVyKChidWlsdGluKSA9PiB0eXBlb2YgYnVpbHRpbiAhPSBcInN0cmluZ1wiKTtcblx0cmV0dXJuIChpZCkgPT4gcGxhaW5CdWlsdGluc1NldC5oYXMoaWQpIHx8IHJlZ2V4QnVpbHRpbnMuc29tZSgocmVnZXhwKSA9PiByZWdleHAudGVzdChpZCkpO1xufVxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL21vZHVsZS1ydW5uZXIvY29uc3RhbnRzLnRzXG5jb25zdCBzc3JNb2R1bGVFeHBvcnRzS2V5ID0gXCJfX3ZpdGVfc3NyX2V4cG9ydHNfX1wiLCBzc3JJbXBvcnRLZXkgPSBcIl9fdml0ZV9zc3JfaW1wb3J0X19cIiwgc3NyRHluYW1pY0ltcG9ydEtleSA9IFwiX192aXRlX3Nzcl9keW5hbWljX2ltcG9ydF9fXCIsIHNzckV4cG9ydEFsbEtleSA9IFwiX192aXRlX3Nzcl9leHBvcnRBbGxfX1wiLCBzc3JFeHBvcnROYW1lS2V5ID0gXCJfX3ZpdGVfc3NyX2V4cG9ydE5hbWVfX1wiLCBzc3JJbXBvcnRNZXRhS2V5ID0gXCJfX3ZpdGVfc3NyX2ltcG9ydF9tZXRhX19cIiwgbm9vcCA9ICgpID0+IHt9LCBzaWxlbnRDb25zb2xlID0ge1xuXHRkZWJ1Zzogbm9vcCxcblx0ZXJyb3I6IG5vb3Bcbn0sIGhtckxvZ2dlciA9IHtcblx0ZGVidWc6ICguLi5tc2cpID0+IGNvbnNvbGUubG9nKFwiW3ZpdGVdXCIsIC4uLm1zZyksXG5cdGVycm9yOiAoZXJyb3IpID0+IGNvbnNvbGUubG9nKFwiW3ZpdGVdXCIsIGVycm9yKVxufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9zaGFyZWQvaG1ySGFuZGxlci50c1xuZnVuY3Rpb24gY3JlYXRlSE1SSGFuZGxlcihoYW5kbGVyKSB7XG5cdGxldCBxdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuXHRyZXR1cm4gKHBheWxvYWQpID0+IHF1ZXVlLmVucXVldWUoKCkgPT4gaGFuZGxlcihwYXlsb2FkKSk7XG59XG52YXIgUXVldWUgPSBjbGFzcyB7XG5cdHF1ZXVlID0gW107XG5cdHBlbmRpbmcgPSAhMTtcblx0ZW5xdWV1ZShwcm9taXNlKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucXVldWUucHVzaCh7XG5cdFx0XHRcdHByb21pc2UsXG5cdFx0XHRcdHJlc29sdmUsXG5cdFx0XHRcdHJlamVjdFxuXHRcdFx0fSksIHRoaXMuZGVxdWV1ZSgpO1xuXHRcdH0pO1xuXHR9XG5cdGRlcXVldWUoKSB7XG5cdFx0aWYgKHRoaXMucGVuZGluZykgcmV0dXJuICExO1xuXHRcdGxldCBpdGVtID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuXHRcdHJldHVybiBpdGVtID8gKHRoaXMucGVuZGluZyA9ICEwLCBpdGVtLnByb21pc2UoKS50aGVuKGl0ZW0ucmVzb2x2ZSkuY2F0Y2goaXRlbS5yZWplY3QpLmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0dGhpcy5wZW5kaW5nID0gITEsIHRoaXMuZGVxdWV1ZSgpO1xuXHRcdH0pLCAhMCkgOiAhMTtcblx0fVxufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL2htckhhbmRsZXIudHNcbmZ1bmN0aW9uIGNyZWF0ZUhNUkhhbmRsZXJGb3JSdW5uZXIocnVubmVyKSB7XG5cdHJldHVybiBjcmVhdGVITVJIYW5kbGVyKGFzeW5jIChwYXlsb2FkKSA9PiB7XG5cdFx0bGV0IGhtckNsaWVudCA9IHJ1bm5lci5obXJDbGllbnQ7XG5cdFx0aWYgKCEoIWhtckNsaWVudCB8fCBydW5uZXIuaXNDbG9zZWQoKSkpIHN3aXRjaCAocGF5bG9hZC50eXBlKSB7XG5cdFx0XHRjYXNlIFwiY29ubmVjdGVkXCI6XG5cdFx0XHRcdGhtckNsaWVudC5sb2dnZXIuZGVidWcoXCJjb25uZWN0ZWQuXCIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ1cGRhdGVcIjpcblx0XHRcdFx0YXdhaXQgaG1yQ2xpZW50Lm5vdGlmeUxpc3RlbmVycyhcInZpdGU6YmVmb3JlVXBkYXRlXCIsIHBheWxvYWQpLCBhd2FpdCBQcm9taXNlLmFsbChwYXlsb2FkLnVwZGF0ZXMubWFwKGFzeW5jICh1cGRhdGUpID0+IHtcblx0XHRcdFx0XHRpZiAodXBkYXRlLnR5cGUgPT09IFwianMtdXBkYXRlXCIpIHJldHVybiB1cGRhdGUuYWNjZXB0ZWRQYXRoID0gdW53cmFwSWQodXBkYXRlLmFjY2VwdGVkUGF0aCksIHVwZGF0ZS5wYXRoID0gdW53cmFwSWQodXBkYXRlLnBhdGgpLCBobXJDbGllbnQucXVldWVVcGRhdGUodXBkYXRlKTtcblx0XHRcdFx0XHRobXJDbGllbnQubG9nZ2VyLmVycm9yKFwiY3NzIGhtciBpcyBub3Qgc3VwcG9ydGVkIGluIHJ1bm5lciBtb2RlLlwiKTtcblx0XHRcdFx0fSkpLCBhd2FpdCBobXJDbGllbnQubm90aWZ5TGlzdGVuZXJzKFwidml0ZTphZnRlclVwZGF0ZVwiLCBwYXlsb2FkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY3VzdG9tXCI6XG5cdFx0XHRcdGF3YWl0IGhtckNsaWVudC5ub3RpZnlMaXN0ZW5lcnMocGF5bG9hZC5ldmVudCwgcGF5bG9hZC5kYXRhKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiZnVsbC1yZWxvYWRcIjoge1xuXHRcdFx0XHRsZXQgeyB0cmlnZ2VyZWRCeSB9ID0gcGF5bG9hZCwgY2xlYXJFbnRyeXBvaW50VXJscyA9IHRyaWdnZXJlZEJ5ID8gZ2V0TW9kdWxlc0VudHJ5cG9pbnRzKHJ1bm5lciwgZ2V0TW9kdWxlc0J5RmlsZShydW5uZXIsIHNsYXNoKHRyaWdnZXJlZEJ5KSkpIDogZmluZEFsbEVudHJ5cG9pbnRzKHJ1bm5lcik7XG5cdFx0XHRcdGlmICghY2xlYXJFbnRyeXBvaW50VXJscy5zaXplKSBicmVhaztcblx0XHRcdFx0aG1yQ2xpZW50LmxvZ2dlci5kZWJ1ZyhcInByb2dyYW0gcmVsb2FkXCIpLCBhd2FpdCBobXJDbGllbnQubm90aWZ5TGlzdGVuZXJzKFwidml0ZTpiZWZvcmVGdWxsUmVsb2FkXCIsIHBheWxvYWQpLCBydW5uZXIuZXZhbHVhdGVkTW9kdWxlcy5jbGVhcigpO1xuXHRcdFx0XHRmb3IgKGxldCB1cmwgb2YgY2xlYXJFbnRyeXBvaW50VXJscykge1xuXHRcdFx0XHRcdGlmIChydW5uZXIuaXNDbG9zZWQoKSkgYnJlYWs7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGF3YWl0IHJ1bm5lci5pbXBvcnQodXJsKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRcdGlmIChydW5uZXIuaXNDbG9zZWQoKSkgYnJlYWs7XG5cdFx0XHRcdFx0XHRlcnIuY29kZSAhPT0gXCJFUlJfT1VUREFURURfT1BUSU1JWkVEX0RFUFwiICYmIGhtckNsaWVudC5sb2dnZXIuZXJyb3IoYEFuIGVycm9yIGhhcHBlbmVkIGR1cmluZyBmdWxsIHJlbG9hZFxcbiR7ZXJyLm1lc3NhZ2V9XFxuJHtlcnIuc3RhY2t9YCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcInBydW5lXCI6XG5cdFx0XHRcdGF3YWl0IGhtckNsaWVudC5ub3RpZnlMaXN0ZW5lcnMoXCJ2aXRlOmJlZm9yZVBydW5lXCIsIHBheWxvYWQpLCBhd2FpdCBobXJDbGllbnQucHJ1bmVQYXRocyhwYXlsb2FkLnBhdGhzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiZXJyb3JcIjoge1xuXHRcdFx0XHRhd2FpdCBobXJDbGllbnQubm90aWZ5TGlzdGVuZXJzKFwidml0ZTplcnJvclwiLCBwYXlsb2FkKTtcblx0XHRcdFx0bGV0IGVyciA9IHBheWxvYWQuZXJyO1xuXHRcdFx0XHRobXJDbGllbnQubG9nZ2VyLmVycm9yKGBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcXG4ke2Vyci5tZXNzYWdlfVxcbiR7ZXJyLnN0YWNrfWApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJwaW5nXCI6IGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogcmV0dXJuIHBheWxvYWQ7XG5cdFx0fVxuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldE1vZHVsZXNCeUZpbGUocnVubmVyLCBmaWxlKSB7XG5cdGxldCBub2RlcyA9IHJ1bm5lci5ldmFsdWF0ZWRNb2R1bGVzLmdldE1vZHVsZXNCeUZpbGUoZmlsZSk7XG5cdHJldHVybiBub2RlcyA/IFsuLi5ub2Rlc10ubWFwKChub2RlKSA9PiBub2RlLmlkKSA6IFtdO1xufVxuZnVuY3Rpb24gZ2V0TW9kdWxlc0VudHJ5cG9pbnRzKHJ1bm5lciwgbW9kdWxlcywgdmlzaXRlZCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIGVudHJ5cG9pbnRzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkge1xuXHRmb3IgKGxldCBtb2R1bGVJZCBvZiBtb2R1bGVzKSB7XG5cdFx0aWYgKHZpc2l0ZWQuaGFzKG1vZHVsZUlkKSkgY29udGludWU7XG5cdFx0dmlzaXRlZC5hZGQobW9kdWxlSWQpO1xuXHRcdGxldCBtb2R1bGUgPSBydW5uZXIuZXZhbHVhdGVkTW9kdWxlcy5nZXRNb2R1bGVCeUlkKG1vZHVsZUlkKTtcblx0XHRpZiAobW9kdWxlKSB7XG5cdFx0XHRpZiAoIW1vZHVsZS5pbXBvcnRlcnMuc2l6ZSkge1xuXHRcdFx0XHRlbnRyeXBvaW50cy5hZGQobW9kdWxlLnVybCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChsZXQgaW1wb3J0ZXIgb2YgbW9kdWxlLmltcG9ydGVycykgZ2V0TW9kdWxlc0VudHJ5cG9pbnRzKHJ1bm5lciwgW2ltcG9ydGVyXSwgdmlzaXRlZCwgZW50cnlwb2ludHMpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZW50cnlwb2ludHM7XG59XG5mdW5jdGlvbiBmaW5kQWxsRW50cnlwb2ludHMocnVubmVyLCBlbnRyeXBvaW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpIHtcblx0Zm9yIChsZXQgbW9kIG9mIHJ1bm5lci5ldmFsdWF0ZWRNb2R1bGVzLmlkVG9Nb2R1bGVNYXAudmFsdWVzKCkpIG1vZC5pbXBvcnRlcnMuc2l6ZSB8fCBlbnRyeXBvaW50cy5hZGQobW9kLnVybCk7XG5cdHJldHVybiBlbnRyeXBvaW50cztcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL3NvdXJjZW1hcC9pbnRlcmNlcHRvci50c1xuY29uc3Qgc291cmNlTWFwQ2FjaGUgPSB7fSwgZmlsZUNvbnRlbnRzQ2FjaGUgPSB7fSwgZXZhbHVhdGVkTW9kdWxlc0NhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgcmV0cmlldmVGaWxlSGFuZGxlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCByZXRyaWV2ZVNvdXJjZU1hcEhhbmRsZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgY3JlYXRlRXhlY0hhbmRsZXJzID0gKGhhbmRsZXJzKSA9PiAoKC4uLmFyZ3MpID0+IHtcblx0Zm9yIChsZXQgaGFuZGxlciBvZiBoYW5kbGVycykge1xuXHRcdGxldCByZXN1bHQgPSBoYW5kbGVyKC4uLmFyZ3MpO1xuXHRcdGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQ7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59KSwgcmV0cmlldmVGaWxlRnJvbUhhbmRsZXJzID0gY3JlYXRlRXhlY0hhbmRsZXJzKHJldHJpZXZlRmlsZUhhbmRsZXJzKSwgcmV0cmlldmVTb3VyY2VNYXBGcm9tSGFuZGxlcnMgPSBjcmVhdGVFeGVjSGFuZGxlcnMocmV0cmlldmVTb3VyY2VNYXBIYW5kbGVycyk7XG5sZXQgb3ZlcnJpZGRlbiA9ICExO1xuY29uc3Qgb3JpZ2luYWxQcmVwYXJlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7XG5mdW5jdGlvbiByZXNldEludGVyY2VwdG9yKHJ1bm5lciwgb3B0aW9ucykge1xuXHRldmFsdWF0ZWRNb2R1bGVzQ2FjaGUuZGVsZXRlKHJ1bm5lci5ldmFsdWF0ZWRNb2R1bGVzKSwgb3B0aW9ucy5yZXRyaWV2ZUZpbGUgJiYgcmV0cmlldmVGaWxlSGFuZGxlcnMuZGVsZXRlKG9wdGlvbnMucmV0cmlldmVGaWxlKSwgb3B0aW9ucy5yZXRyaWV2ZVNvdXJjZU1hcCAmJiByZXRyaWV2ZVNvdXJjZU1hcEhhbmRsZXJzLmRlbGV0ZShvcHRpb25zLnJldHJpZXZlU291cmNlTWFwKSwgZXZhbHVhdGVkTW9kdWxlc0NhY2hlLnNpemUgPT09IDAgJiYgKEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gb3JpZ2luYWxQcmVwYXJlLCBvdmVycmlkZGVuID0gITEpO1xufVxuZnVuY3Rpb24gaW50ZXJjZXB0U3RhY2tUcmFjZShydW5uZXIsIG9wdGlvbnMgPSB7fSkge1xuXHRyZXR1cm4gb3ZlcnJpZGRlbiB8fD0gKEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJlcGFyZVN0YWNrVHJhY2UsICEwKSwgZXZhbHVhdGVkTW9kdWxlc0NhY2hlLmFkZChydW5uZXIuZXZhbHVhdGVkTW9kdWxlcyksIG9wdGlvbnMucmV0cmlldmVGaWxlICYmIHJldHJpZXZlRmlsZUhhbmRsZXJzLmFkZChvcHRpb25zLnJldHJpZXZlRmlsZSksIG9wdGlvbnMucmV0cmlldmVTb3VyY2VNYXAgJiYgcmV0cmlldmVTb3VyY2VNYXBIYW5kbGVycy5hZGQob3B0aW9ucy5yZXRyaWV2ZVNvdXJjZU1hcCksICgpID0+IHJlc2V0SW50ZXJjZXB0b3IocnVubmVyLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHN1cHBvcnRSZWxhdGl2ZVVSTChmaWxlLCB1cmwpIHtcblx0aWYgKCFmaWxlKSByZXR1cm4gdXJsO1xuXHRsZXQgZGlyID0gcG9zaXhEaXJuYW1lKHNsYXNoKGZpbGUpKSwgbWF0Y2ggPSAvXlxcdys6XFwvXFwvW14vXSovLmV4ZWMoZGlyKSwgcHJvdG9jb2wgPSBtYXRjaCA/IG1hdGNoWzBdIDogXCJcIiwgc3RhcnRQYXRoID0gZGlyLnNsaWNlKHByb3RvY29sLmxlbmd0aCk7XG5cdHJldHVybiBwcm90b2NvbCAmJiAvXlxcL1xcdzovLnRlc3Qoc3RhcnRQYXRoKSA/IChwcm90b2NvbCArPSBcIi9cIiwgcHJvdG9jb2wgKyBzbGFzaChwb3NpeFJlc29sdmUoc3RhcnRQYXRoLCB1cmwpKSkgOiBwcm90b2NvbCArIHBvc2l4UmVzb2x2ZShzdGFydFBhdGgsIHVybCk7XG59XG5mdW5jdGlvbiBnZXRSdW5uZXJTb3VyY2VNYXAocG9zaXRpb24pIHtcblx0Zm9yIChsZXQgbW9kdWxlR3JhcGggb2YgZXZhbHVhdGVkTW9kdWxlc0NhY2hlKSB7XG5cdFx0bGV0IHNvdXJjZU1hcCA9IG1vZHVsZUdyYXBoLmdldE1vZHVsZVNvdXJjZU1hcEJ5SWQocG9zaXRpb24uc291cmNlKTtcblx0XHRpZiAoc291cmNlTWFwKSByZXR1cm4ge1xuXHRcdFx0dXJsOiBwb3NpdGlvbi5zb3VyY2UsXG5cdFx0XHRtYXA6IHNvdXJjZU1hcCxcblx0XHRcdHZpdGU6ICEwXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIHJldHJpZXZlRmlsZShwYXRoKSB7XG5cdGlmIChwYXRoIGluIGZpbGVDb250ZW50c0NhY2hlKSByZXR1cm4gZmlsZUNvbnRlbnRzQ2FjaGVbcGF0aF07XG5cdGxldCBjb250ZW50ID0gcmV0cmlldmVGaWxlRnJvbUhhbmRsZXJzKHBhdGgpO1xuXHRyZXR1cm4gdHlwZW9mIGNvbnRlbnQgPT0gXCJzdHJpbmdcIiA/IChmaWxlQ29udGVudHNDYWNoZVtwYXRoXSA9IGNvbnRlbnQsIGNvbnRlbnQpIDogbnVsbDtcbn1cbmZ1bmN0aW9uIHJldHJpZXZlU291cmNlTWFwVVJMKHNvdXJjZSkge1xuXHRsZXQgZmlsZURhdGEgPSByZXRyaWV2ZUZpbGUoc291cmNlKTtcblx0aWYgKCFmaWxlRGF0YSkgcmV0dXJuIG51bGw7XG5cdGxldCByZSA9IC9cXC9cXC9bQCNdXFxzKnNvdXJjZU1hcHBpbmdVUkw9KFteXFxzJ1wiXSspXFxzKiR8XFwvXFwqW0AjXVxccypzb3VyY2VNYXBwaW5nVVJMPVteXFxzKidcIl0rXFxzKlxcKlxcL1xccyokL2dtLCBsYXN0TWF0Y2gsIG1hdGNoO1xuXHRmb3IgKDsgbWF0Y2ggPSByZS5leGVjKGZpbGVEYXRhKTspIGxhc3RNYXRjaCA9IG1hdGNoO1xuXHRyZXR1cm4gbGFzdE1hdGNoID8gbGFzdE1hdGNoWzFdIDogbnVsbDtcbn1cbmNvbnN0IHJlU291cmNlTWFwID0gL15kYXRhOmFwcGxpY2F0aW9uXFwvanNvblteLF0rYmFzZTY0LC87XG5mdW5jdGlvbiByZXRyaWV2ZVNvdXJjZU1hcChzb3VyY2UpIHtcblx0bGV0IHVybEFuZE1hcCA9IHJldHJpZXZlU291cmNlTWFwRnJvbUhhbmRsZXJzKHNvdXJjZSk7XG5cdGlmICh1cmxBbmRNYXApIHJldHVybiB1cmxBbmRNYXA7XG5cdGxldCBzb3VyY2VNYXBwaW5nVVJMID0gcmV0cmlldmVTb3VyY2VNYXBVUkwoc291cmNlKTtcblx0aWYgKCFzb3VyY2VNYXBwaW5nVVJMKSByZXR1cm4gbnVsbDtcblx0bGV0IHNvdXJjZU1hcERhdGE7XG5cdGlmIChyZVNvdXJjZU1hcC50ZXN0KHNvdXJjZU1hcHBpbmdVUkwpKSB7XG5cdFx0bGV0IHJhd0RhdGEgPSBzb3VyY2VNYXBwaW5nVVJMLnNsaWNlKHNvdXJjZU1hcHBpbmdVUkwuaW5kZXhPZihcIixcIikgKyAxKTtcblx0XHRzb3VyY2VNYXBEYXRhID0gQnVmZmVyLmZyb20ocmF3RGF0YSwgXCJiYXNlNjRcIikudG9TdHJpbmcoKSwgc291cmNlTWFwcGluZ1VSTCA9IHNvdXJjZTtcblx0fSBlbHNlIHNvdXJjZU1hcHBpbmdVUkwgPSBzdXBwb3J0UmVsYXRpdmVVUkwoc291cmNlLCBzb3VyY2VNYXBwaW5nVVJMKSwgc291cmNlTWFwRGF0YSA9IHJldHJpZXZlRmlsZShzb3VyY2VNYXBwaW5nVVJMKTtcblx0cmV0dXJuIHNvdXJjZU1hcERhdGEgPyB7XG5cdFx0dXJsOiBzb3VyY2VNYXBwaW5nVVJMLFxuXHRcdG1hcDogc291cmNlTWFwRGF0YVxuXHR9IDogbnVsbDtcbn1cbmZ1bmN0aW9uIG1hcFNvdXJjZVBvc2l0aW9uKHBvc2l0aW9uKSB7XG5cdGlmICghcG9zaXRpb24uc291cmNlKSByZXR1cm4gcG9zaXRpb247XG5cdGxldCBzb3VyY2VNYXAgPSBnZXRSdW5uZXJTb3VyY2VNYXAocG9zaXRpb24pO1xuXHRpZiAoc291cmNlTWFwIHx8PSBzb3VyY2VNYXBDYWNoZVtwb3NpdGlvbi5zb3VyY2VdLCAhc291cmNlTWFwKSB7XG5cdFx0bGV0IHVybEFuZE1hcCA9IHJldHJpZXZlU291cmNlTWFwKHBvc2l0aW9uLnNvdXJjZSk7XG5cdFx0aWYgKHVybEFuZE1hcCAmJiB1cmxBbmRNYXAubWFwKSB7XG5cdFx0XHRsZXQgdXJsID0gdXJsQW5kTWFwLnVybDtcblx0XHRcdHNvdXJjZU1hcCA9IHNvdXJjZU1hcENhY2hlW3Bvc2l0aW9uLnNvdXJjZV0gPSB7XG5cdFx0XHRcdHVybCxcblx0XHRcdFx0bWFwOiBuZXcgRGVjb2RlZE1hcCh0eXBlb2YgdXJsQW5kTWFwLm1hcCA9PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh1cmxBbmRNYXAubWFwKSA6IHVybEFuZE1hcC5tYXAsIHVybClcblx0XHRcdH07XG5cdFx0XHRsZXQgY29udGVudHMgPSBzb3VyY2VNYXAubWFwPy5tYXAuc291cmNlc0NvbnRlbnQ7XG5cdFx0XHRzb3VyY2VNYXAubWFwICYmIGNvbnRlbnRzICYmIHNvdXJjZU1hcC5tYXAucmVzb2x2ZWRTb3VyY2VzLmZvckVhY2goKHNvdXJjZSwgaSkgPT4ge1xuXHRcdFx0XHRsZXQgY29udGVudCA9IGNvbnRlbnRzW2ldO1xuXHRcdFx0XHRpZiAoY29udGVudCAmJiBzb3VyY2UgJiYgdXJsKSB7XG5cdFx0XHRcdFx0bGV0IGNvbnRlbnRVcmwgPSBzdXBwb3J0UmVsYXRpdmVVUkwodXJsLCBzb3VyY2UpO1xuXHRcdFx0XHRcdGZpbGVDb250ZW50c0NhY2hlW2NvbnRlbnRVcmxdID0gY29udGVudDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHNvdXJjZU1hcCA9IHNvdXJjZU1hcENhY2hlW3Bvc2l0aW9uLnNvdXJjZV0gPSB7XG5cdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRtYXA6IG51bGxcblx0XHR9O1xuXHR9XG5cdGlmIChzb3VyY2VNYXAubWFwICYmIHNvdXJjZU1hcC51cmwpIHtcblx0XHRsZXQgb3JpZ2luYWxQb3NpdGlvbiA9IGdldE9yaWdpbmFsUG9zaXRpb24oc291cmNlTWFwLm1hcCwgcG9zaXRpb24pO1xuXHRcdGlmIChvcmlnaW5hbFBvc2l0aW9uICYmIG9yaWdpbmFsUG9zaXRpb24uc291cmNlICE9IG51bGwpIHJldHVybiBvcmlnaW5hbFBvc2l0aW9uLnNvdXJjZSA9IHN1cHBvcnRSZWxhdGl2ZVVSTChzb3VyY2VNYXAudXJsLCBvcmlnaW5hbFBvc2l0aW9uLnNvdXJjZSksIHNvdXJjZU1hcC52aXRlICYmIChvcmlnaW5hbFBvc2l0aW9uLl92aXRlID0gITApLCBvcmlnaW5hbFBvc2l0aW9uO1xuXHR9XG5cdHJldHVybiBwb3NpdGlvbjtcbn1cbmZ1bmN0aW9uIG1hcEV2YWxPcmlnaW4ob3JpZ2luKSB7XG5cdGxldCBtYXRjaCA9IC9eZXZhbCBhdCAoW14oXSspIFxcKCguKyk6KFxcZCspOihcXGQrKVxcKSQvLmV4ZWMob3JpZ2luKTtcblx0aWYgKG1hdGNoKSB7XG5cdFx0bGV0IHBvc2l0aW9uID0gbWFwU291cmNlUG9zaXRpb24oe1xuXHRcdFx0bmFtZTogbnVsbCxcblx0XHRcdHNvdXJjZTogbWF0Y2hbMl0sXG5cdFx0XHRsaW5lOiArbWF0Y2hbM10sXG5cdFx0XHRjb2x1bW46IG1hdGNoWzRdIC0gMVxuXHRcdH0pO1xuXHRcdHJldHVybiBgZXZhbCBhdCAke21hdGNoWzFdfSAoJHtwb3NpdGlvbi5zb3VyY2V9OiR7cG9zaXRpb24ubGluZX06JHtwb3NpdGlvbi5jb2x1bW4gKyAxfSlgO1xuXHR9XG5cdHJldHVybiBtYXRjaCA9IC9eZXZhbCBhdCAoW14oXSspIFxcKCguKylcXCkkLy5leGVjKG9yaWdpbiksIG1hdGNoID8gYGV2YWwgYXQgJHttYXRjaFsxXX0gKCR7bWFwRXZhbE9yaWdpbihtYXRjaFsyXSl9KWAgOiBvcmlnaW47XG59XG5mdW5jdGlvbiBDYWxsU2l0ZVRvU3RyaW5nKCkge1xuXHRsZXQgZmlsZU5hbWUsIGZpbGVMb2NhdGlvbiA9IFwiXCI7XG5cdGlmICh0aGlzLmlzTmF0aXZlKCkpIGZpbGVMb2NhdGlvbiA9IFwibmF0aXZlXCI7XG5cdGVsc2Uge1xuXHRcdGZpbGVOYW1lID0gdGhpcy5nZXRTY3JpcHROYW1lT3JTb3VyY2VVUkwoKSwgIWZpbGVOYW1lICYmIHRoaXMuaXNFdmFsKCkgJiYgKGZpbGVMb2NhdGlvbiA9IHRoaXMuZ2V0RXZhbE9yaWdpbigpLCBmaWxlTG9jYXRpb24gKz0gXCIsIFwiKSwgZmlsZU5hbWUgPyBmaWxlTG9jYXRpb24gKz0gZmlsZU5hbWUgOiBmaWxlTG9jYXRpb24gKz0gXCI8YW5vbnltb3VzPlwiO1xuXHRcdGxldCBsaW5lTnVtYmVyID0gdGhpcy5nZXRMaW5lTnVtYmVyKCk7XG5cdFx0aWYgKGxpbmVOdW1iZXIgIT0gbnVsbCkge1xuXHRcdFx0ZmlsZUxvY2F0aW9uICs9IGA6JHtsaW5lTnVtYmVyfWA7XG5cdFx0XHRsZXQgY29sdW1uTnVtYmVyID0gdGhpcy5nZXRDb2x1bW5OdW1iZXIoKTtcblx0XHRcdGNvbHVtbk51bWJlciAmJiAoZmlsZUxvY2F0aW9uICs9IGA6JHtjb2x1bW5OdW1iZXJ9YCk7XG5cdFx0fVxuXHR9XG5cdGxldCBsaW5lID0gXCJcIiwgZnVuY3Rpb25OYW1lID0gdGhpcy5nZXRGdW5jdGlvbk5hbWUoKSwgYWRkU3VmZml4ID0gITAsIGlzQ29uc3RydWN0b3IgPSB0aGlzLmlzQ29uc3RydWN0b3IoKTtcblx0aWYgKHRoaXMuaXNUb3BsZXZlbCgpIHx8IGlzQ29uc3RydWN0b3IpIGlzQ29uc3RydWN0b3IgPyBsaW5lICs9IGBuZXcgJHtmdW5jdGlvbk5hbWUgfHwgXCI8YW5vbnltb3VzPlwifWAgOiBmdW5jdGlvbk5hbWUgPyBsaW5lICs9IGZ1bmN0aW9uTmFtZSA6IChsaW5lICs9IGZpbGVMb2NhdGlvbiwgYWRkU3VmZml4ID0gITEpO1xuXHRlbHNlIHtcblx0XHRsZXQgdHlwZU5hbWUgPSB0aGlzLmdldFR5cGVOYW1lKCk7XG5cdFx0dHlwZU5hbWUgPT09IFwiW29iamVjdCBPYmplY3RdXCIgJiYgKHR5cGVOYW1lID0gXCJudWxsXCIpO1xuXHRcdGxldCBtZXRob2ROYW1lID0gdGhpcy5nZXRNZXRob2ROYW1lKCk7XG5cdFx0ZnVuY3Rpb25OYW1lID8gKHR5cGVOYW1lICYmIGZ1bmN0aW9uTmFtZS5pbmRleE9mKHR5cGVOYW1lKSAhPT0gMCAmJiAobGluZSArPSBgJHt0eXBlTmFtZX0uYCksIGxpbmUgKz0gZnVuY3Rpb25OYW1lLCBtZXRob2ROYW1lICYmIGZ1bmN0aW9uTmFtZS5pbmRleE9mKGAuJHttZXRob2ROYW1lfWApICE9PSBmdW5jdGlvbk5hbWUubGVuZ3RoIC0gbWV0aG9kTmFtZS5sZW5ndGggLSAxICYmIChsaW5lICs9IGAgW2FzICR7bWV0aG9kTmFtZX1dYCkpIDogbGluZSArPSBgJHt0eXBlTmFtZX0uJHttZXRob2ROYW1lIHx8IFwiPGFub255bW91cz5cIn1gO1xuXHR9XG5cdHJldHVybiBhZGRTdWZmaXggJiYgKGxpbmUgKz0gYCAoJHtmaWxlTG9jYXRpb259KWApLCBsaW5lO1xufVxuZnVuY3Rpb24gY2xvbmVDYWxsU2l0ZShmcmFtZSkge1xuXHRsZXQgb2JqZWN0ID0ge307XG5cdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QuZ2V0UHJvdG90eXBlT2YoZnJhbWUpKS5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0bGV0IGtleSA9IG5hbWU7XG5cdFx0b2JqZWN0W2tleV0gPSAvXig/OmlzfGdldCkvLnRlc3QobmFtZSkgPyBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBmcmFtZVtrZXldLmNhbGwoZnJhbWUpO1xuXHRcdH0gOiBmcmFtZVtrZXldO1xuXHR9KSwgb2JqZWN0LnRvU3RyaW5nID0gQ2FsbFNpdGVUb1N0cmluZywgb2JqZWN0O1xufVxuZnVuY3Rpb24gd3JhcENhbGxTaXRlKGZyYW1lLCBzdGF0ZSkge1xuXHRpZiAoc3RhdGUgPT09IHZvaWQgMCAmJiAoc3RhdGUgPSB7XG5cdFx0bmV4dFBvc2l0aW9uOiBudWxsLFxuXHRcdGN1clBvc2l0aW9uOiBudWxsXG5cdH0pLCBmcmFtZS5pc05hdGl2ZSgpKSByZXR1cm4gc3RhdGUuY3VyUG9zaXRpb24gPSBudWxsLCBmcmFtZTtcblx0bGV0IHNvdXJjZSA9IGZyYW1lLmdldEZpbGVOYW1lKCkgfHwgZnJhbWUuZ2V0U2NyaXB0TmFtZU9yU291cmNlVVJMKCk7XG5cdGlmIChzb3VyY2UpIHtcblx0XHRsZXQgcG9zaXRpb24gPSBtYXBTb3VyY2VQb3NpdGlvbih7XG5cdFx0XHRuYW1lOiBudWxsLFxuXHRcdFx0c291cmNlLFxuXHRcdFx0bGluZTogZnJhbWUuZ2V0TGluZU51bWJlcigpID8/IDAsXG5cdFx0XHRjb2x1bW46IChmcmFtZS5nZXRDb2x1bW5OdW1iZXIoKSA/PyAxKSAtIDFcblx0XHR9KTtcblx0XHRzdGF0ZS5jdXJQb3NpdGlvbiA9IHBvc2l0aW9uLCBmcmFtZSA9IGNsb25lQ2FsbFNpdGUoZnJhbWUpO1xuXHRcdGxldCBvcmlnaW5hbEZ1bmN0aW9uTmFtZSA9IGZyYW1lLmdldEZ1bmN0aW9uTmFtZTtcblx0XHRyZXR1cm4gZnJhbWUuZ2V0RnVuY3Rpb25OYW1lID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRsZXQgbmFtZSA9IHN0YXRlLm5leHRQb3NpdGlvbiA9PSBudWxsID8gb3JpZ2luYWxGdW5jdGlvbk5hbWUoKSA6IHN0YXRlLm5leHRQb3NpdGlvbi5uYW1lIHx8IG9yaWdpbmFsRnVuY3Rpb25OYW1lKCk7XG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJldmFsXCIgJiYgXCJfdml0ZVwiIGluIHBvc2l0aW9uID8gbnVsbCA6IG5hbWU7XG5cdFx0fSwgZnJhbWUuZ2V0RmlsZU5hbWUgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBwb3NpdGlvbi5zb3VyY2UgPz8gbnVsbDtcblx0XHR9LCBmcmFtZS5nZXRMaW5lTnVtYmVyID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcG9zaXRpb24ubGluZTtcblx0XHR9LCBmcmFtZS5nZXRDb2x1bW5OdW1iZXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBwb3NpdGlvbi5jb2x1bW4gKyAxO1xuXHRcdH0sIGZyYW1lLmdldFNjcmlwdE5hbWVPclNvdXJjZVVSTCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHBvc2l0aW9uLnNvdXJjZTtcblx0XHR9LCBmcmFtZTtcblx0fVxuXHRsZXQgb3JpZ2luID0gZnJhbWUuaXNFdmFsKCkgJiYgZnJhbWUuZ2V0RXZhbE9yaWdpbigpO1xuXHRyZXR1cm4gb3JpZ2luID8gKG9yaWdpbiA9IG1hcEV2YWxPcmlnaW4ob3JpZ2luKSwgZnJhbWUgPSBjbG9uZUNhbGxTaXRlKGZyYW1lKSwgZnJhbWUuZ2V0RXZhbE9yaWdpbiA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBvcmlnaW4gfHwgdm9pZCAwO1xuXHR9LCBmcmFtZSkgOiBmcmFtZTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVTdGFja1RyYWNlKGVycm9yLCBzdGFjaykge1xuXHRsZXQgZXJyb3JTdHJpbmcgPSBgJHtlcnJvci5uYW1lIHx8IFwiRXJyb3JcIn06ICR7ZXJyb3IubWVzc2FnZSB8fCBcIlwifWAsIHN0YXRlID0ge1xuXHRcdG5leHRQb3NpdGlvbjogbnVsbCxcblx0XHRjdXJQb3NpdGlvbjogbnVsbFxuXHR9LCBwcm9jZXNzZWRTdGFjayA9IFtdO1xuXHRmb3IgKGxldCBpID0gc3RhY2subGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHByb2Nlc3NlZFN0YWNrLnB1c2goYFxcbiAgICBhdCAke3dyYXBDYWxsU2l0ZShzdGFja1tpXSwgc3RhdGUpfWApLCBzdGF0ZS5uZXh0UG9zaXRpb24gPSBzdGF0ZS5jdXJQb3NpdGlvbjtcblx0cmV0dXJuIHN0YXRlLmN1clBvc2l0aW9uID0gc3RhdGUubmV4dFBvc2l0aW9uID0gbnVsbCwgZXJyb3JTdHJpbmcgKyBwcm9jZXNzZWRTdGFjay5yZXZlcnNlKCkuam9pbihcIlwiKTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL3NvdXJjZW1hcC9pbmRleC50c1xuZnVuY3Rpb24gZW5hYmxlU291cmNlTWFwU3VwcG9ydChydW5uZXIpIHtcblx0aWYgKHJ1bm5lci5vcHRpb25zLnNvdXJjZW1hcEludGVyY2VwdG9yID09PSBcIm5vZGVcIikge1xuXHRcdGlmICh0eXBlb2YgcHJvY2VzcyA+IFwidVwiKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlIFxcXCJzb3VyY2VtYXBJbnRlcmNlcHRvcjogJ25vZGUnXFxcIiBiZWNhdXNlIGdsb2JhbCBcXFwicHJvY2Vzc1xcXCIgdmFyaWFibGUgaXMgbm90IGF2YWlsYWJsZS5cIik7XG5cdFx0aWYgKHR5cGVvZiBwcm9jZXNzLnNldFNvdXJjZU1hcHNFbmFibGVkICE9IFwiZnVuY3Rpb25cIikgdGhyb3cgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSBcXFwic291cmNlbWFwSW50ZXJjZXB0b3I6ICdub2RlJ1xcXCIgYmVjYXVzZSBcXFwicHJvY2Vzcy5zZXRTb3VyY2VNYXBzRW5hYmxlZFxcXCIgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIHVzZSBOb2RlID49IDE2LjYuMC5cIik7XG5cdFx0bGV0IGlzRW5hYmxlZEFscmVhZHkgPSBwcm9jZXNzLnNvdXJjZU1hcHNFbmFibGVkID8/ICExO1xuXHRcdHJldHVybiBwcm9jZXNzLnNldFNvdXJjZU1hcHNFbmFibGVkKCEwKSwgKCkgPT4gIWlzRW5hYmxlZEFscmVhZHkgJiYgcHJvY2Vzcy5zZXRTb3VyY2VNYXBzRW5hYmxlZCghMSk7XG5cdH1cblx0cmV0dXJuIGludGVyY2VwdFN0YWNrVHJhY2UocnVubmVyLCB0eXBlb2YgcnVubmVyLm9wdGlvbnMuc291cmNlbWFwSW50ZXJjZXB0b3IgPT0gXCJvYmplY3RcIiA/IHJ1bm5lci5vcHRpb25zLnNvdXJjZW1hcEludGVyY2VwdG9yIDogdm9pZCAwKTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL2VzbUV2YWx1YXRvci50c1xudmFyIEVTTW9kdWxlc0V2YWx1YXRvciA9IGNsYXNzIHtcblx0c3RhcnRPZmZzZXQgPSBnZXRBc3luY0Z1bmN0aW9uRGVjbGFyYXRpb25QYWRkaW5nTGluZUNvdW50KCk7XG5cdGFzeW5jIHJ1bklubGluZWRNb2R1bGUoY29udGV4dCwgY29kZSkge1xuXHRcdGF3YWl0IG5ldyBBc3luY0Z1bmN0aW9uKHNzck1vZHVsZUV4cG9ydHNLZXksIHNzckltcG9ydE1ldGFLZXksIHNzckltcG9ydEtleSwgc3NyRHluYW1pY0ltcG9ydEtleSwgc3NyRXhwb3J0QWxsS2V5LCBzc3JFeHBvcnROYW1lS2V5LCBcIlxcXCJ1c2Ugc3RyaWN0XFxcIjtcIiArIGNvZGUpKGNvbnRleHRbc3NyTW9kdWxlRXhwb3J0c0tleV0sIGNvbnRleHRbc3NySW1wb3J0TWV0YUtleV0sIGNvbnRleHRbc3NySW1wb3J0S2V5XSwgY29udGV4dFtzc3JEeW5hbWljSW1wb3J0S2V5XSwgY29udGV4dFtzc3JFeHBvcnRBbGxLZXldLCBjb250ZXh0W3NzckV4cG9ydE5hbWVLZXldKSwgT2JqZWN0LnNlYWwoY29udGV4dFtzc3JNb2R1bGVFeHBvcnRzS2V5XSk7XG5cdH1cblx0cnVuRXh0ZXJuYWxNb2R1bGUoZmlsZXBhdGgpIHtcblx0XHRyZXR1cm4gaW1wb3J0KGZpbGVwYXRoKTtcblx0fVxufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL2ltcG9ydE1ldGFSZXNvbHZlci50c1xuY29uc3QgY3VzdG9taXphdGlvbkhvb2tOYW1lc3BhY2UgPSBcInZpdGUtbW9kdWxlLXJ1bm5lcjppbXBvcnQtbWV0YS1yZXNvbHZlL3YxL1wiLCBjdXN0b21pemF0aW9uSG9va3NNb2R1bGUgPSBgXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlKHNwZWNpZmllciwgY29udGV4dCwgbmV4dFJlc29sdmUpIHtcbiAgaWYgKHNwZWNpZmllci5zdGFydHNXaXRoKCR7SlNPTi5zdHJpbmdpZnkoY3VzdG9taXphdGlvbkhvb2tOYW1lc3BhY2UpfSkpIHtcbiAgICBjb25zdCBkYXRhID0gc3BlY2lmaWVyLnNsaWNlKCR7SlNPTi5zdHJpbmdpZnkoY3VzdG9taXphdGlvbkhvb2tOYW1lc3BhY2UpfS5sZW5ndGgpXG4gICAgY29uc3QgW3BhcnNlZFNwZWNpZmllciwgcGFyc2VkSW1wb3J0ZXJdID0gSlNPTi5wYXJzZShkYXRhKVxuICAgIHNwZWNpZmllciA9IHBhcnNlZFNwZWNpZmllclxuICAgIGNvbnRleHQucGFyZW50VVJMID0gcGFyc2VkSW1wb3J0ZXJcbiAgfVxuICByZXR1cm4gbmV4dFJlc29sdmUoc3BlY2lmaWVyLCBjb250ZXh0KVxufVxuXG5gO1xuZnVuY3Rpb24gY3VzdG9taXphdGlvbkhvb2tSZXNvbHZlKHNwZWNpZmllciwgY29udGV4dCwgbmV4dFJlc29sdmUpIHtcblx0aWYgKHNwZWNpZmllci5zdGFydHNXaXRoKGN1c3RvbWl6YXRpb25Ib29rTmFtZXNwYWNlKSkge1xuXHRcdGxldCBkYXRhID0gc3BlY2lmaWVyLnNsaWNlKDQyKSwgW3BhcnNlZFNwZWNpZmllciwgcGFyc2VkSW1wb3J0ZXJdID0gSlNPTi5wYXJzZShkYXRhKTtcblx0XHRzcGVjaWZpZXIgPSBwYXJzZWRTcGVjaWZpZXIsIGNvbnRleHQucGFyZW50VVJMID0gcGFyc2VkSW1wb3J0ZXI7XG5cdH1cblx0cmV0dXJuIG5leHRSZXNvbHZlKHNwZWNpZmllciwgY29udGV4dCk7XG59XG5sZXQgaXNIb29rUmVnaXN0ZXJlZCA9ICExO1xuZnVuY3Rpb24gY3JlYXRlSW1wb3J0TWV0YVJlc29sdmVyKCkge1xuXHRpZiAoaXNIb29rUmVnaXN0ZXJlZCkgcmV0dXJuIGltcG9ydE1ldGFSZXNvbHZlV2l0aEN1c3RvbUhvb2s7XG5cdGxldCBtb2R1bGU7XG5cdHRyeSB7XG5cdFx0bW9kdWxlID0gdHlwZW9mIHByb2Nlc3MgPCBcInVcIiA/IHByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZShcIm5vZGU6bW9kdWxlXCIpLk1vZHVsZSA6IHZvaWQgMDtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChtb2R1bGUpIHtcblx0XHRpZiAobW9kdWxlLnJlZ2lzdGVySG9va3MpIHJldHVybiBtb2R1bGUucmVnaXN0ZXJIb29rcyh7IHJlc29sdmU6IGN1c3RvbWl6YXRpb25Ib29rUmVzb2x2ZSB9KSwgaXNIb29rUmVnaXN0ZXJlZCA9ICEwLCBpbXBvcnRNZXRhUmVzb2x2ZVdpdGhDdXN0b21Ib29rO1xuXHRcdGlmIChtb2R1bGUucmVnaXN0ZXIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxldCBob29rTW9kdWxlQ29udGVudCA9IGBkYXRhOnRleHQvamF2YXNjcmlwdCwke2VuY29kZVVSSShjdXN0b21pemF0aW9uSG9va3NNb2R1bGUpfWA7XG5cdFx0XHRcdG1vZHVsZS5yZWdpc3Rlcihob29rTW9kdWxlQ29udGVudCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGlmIChcImNvZGVcIiBpbiBlICYmIGUuY29kZSA9PT0gXCJFUlJfTkVUV09SS19JTVBPUlRfRElTQUxMT1dFRFwiKSByZXR1cm47XG5cdFx0XHRcdHRocm93IGU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaXNIb29rUmVnaXN0ZXJlZCA9ICEwLCBpbXBvcnRNZXRhUmVzb2x2ZVdpdGhDdXN0b21Ib29rO1xuXHRcdH1cblx0fVxufVxuZnVuY3Rpb24gaW1wb3J0TWV0YVJlc29sdmVXaXRoQ3VzdG9tSG9vayhzcGVjaWZpZXIsIGltcG9ydGVyKSB7XG5cdHJldHVybiBpbXBvcnQubWV0YS5yZXNvbHZlKGAke2N1c3RvbWl6YXRpb25Ib29rTmFtZXNwYWNlfSR7SlNPTi5zdHJpbmdpZnkoW3NwZWNpZmllciwgaW1wb3J0ZXJdKX1gKTtcbn1cbmAke2N1c3RvbWl6YXRpb25Ib29rTmFtZXNwYWNlfWA7XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbW9kdWxlLXJ1bm5lci9jcmVhdGVJbXBvcnRNZXRhLnRzXG5jb25zdCBlbnZQcm94eSA9IG5ldyBQcm94eSh7fSwgeyBnZXQoXywgcCkge1xuXHR0aHJvdyBFcnJvcihgW21vZHVsZSBydW5uZXJdIER5bmFtaWMgYWNjZXNzIG9mIFwiaW1wb3J0Lm1ldGEuZW52XCIgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlLCB1c2UgXCJpbXBvcnQubWV0YS5lbnYuJHtTdHJpbmcocCl9XCIgaW5zdGVhZC5gKTtcbn0gfSk7XG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0SW1wb3J0TWV0YShtb2R1bGVQYXRoKSB7XG5cdGxldCBocmVmID0gcG9zaXhQYXRoVG9GaWxlSHJlZihtb2R1bGVQYXRoKSwgZmlsZW5hbWUgPSBtb2R1bGVQYXRoLCBkaXJuYW1lID0gcG9zaXhEaXJuYW1lKG1vZHVsZVBhdGgpO1xuXHRyZXR1cm4ge1xuXHRcdGZpbGVuYW1lOiBpc1dpbmRvd3MgPyB0b1dpbmRvd3NQYXRoKGZpbGVuYW1lKSA6IGZpbGVuYW1lLFxuXHRcdGRpcm5hbWU6IGlzV2luZG93cyA/IHRvV2luZG93c1BhdGgoZGlybmFtZSkgOiBkaXJuYW1lLFxuXHRcdHVybDogaHJlZixcblx0XHRlbnY6IGVudlByb3h5LFxuXHRcdHJlc29sdmUoX2lkLCBfcGFyZW50KSB7XG5cdFx0XHR0aHJvdyBFcnJvcihcIlttb2R1bGUgcnVubmVyXSBcXFwiaW1wb3J0Lm1ldGEucmVzb2x2ZVxcXCIgaXMgbm90IHN1cHBvcnRlZC5cIik7XG5cdFx0fSxcblx0XHRnbG9iKCkge1xuXHRcdFx0dGhyb3cgRXJyb3IoXCJbbW9kdWxlIHJ1bm5lcl0gXFxcImltcG9ydC5tZXRhLmdsb2JcXFwiIGlzIHN0YXRpY2FsbHkgcmVwbGFjZWQgZHVyaW5nIGZpbGUgdHJhbnNmb3JtYXRpb24uIE1ha2Ugc3VyZSB0byByZWZlcmVuY2UgaXQgYnkgdGhlIGZ1bGwgbmFtZS5cIik7XG5cdFx0fVxuXHR9O1xufVxuLyoqXG4qIENyZWF0ZSBpbXBvcnQubWV0YSBvYmplY3QgZm9yIE5vZGUuanMuXG4qL1xuZnVuY3Rpb24gY3JlYXRlTm9kZUltcG9ydE1ldGEobW9kdWxlUGF0aCkge1xuXHRsZXQgZGVmYXVsdE1ldGEgPSBjcmVhdGVEZWZhdWx0SW1wb3J0TWV0YShtb2R1bGVQYXRoKSwgaHJlZiA9IGRlZmF1bHRNZXRhLnVybCwgaW1wb3J0TWV0YVJlc29sdmVyID0gY3JlYXRlSW1wb3J0TWV0YVJlc29sdmVyKCk7XG5cdHJldHVybiB7XG5cdFx0Li4uZGVmYXVsdE1ldGEsXG5cdFx0bWFpbjogITEsXG5cdFx0cmVzb2x2ZShpZCwgcGFyZW50KSB7XG5cdFx0XHRyZXR1cm4gKGltcG9ydE1ldGFSZXNvbHZlciA/PyBkZWZhdWx0TWV0YS5yZXNvbHZlKShpZCwgcGFyZW50ID8/IGhyZWYpO1xuXHRcdH1cblx0fTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9tb2R1bGUtcnVubmVyL3J1bm5lci50c1xudmFyIE1vZHVsZVJ1bm5lciA9IGNsYXNzIHtcblx0ZXZhbHVhdGVkTW9kdWxlcztcblx0aG1yQ2xpZW50O1xuXHR0cmFuc3BvcnQ7XG5cdHJlc2V0U291cmNlTWFwU3VwcG9ydDtcblx0Y29uY3VycmVudE1vZHVsZU5vZGVQcm9taXNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGlzQnVpbHRpbjtcblx0YnVpbHRpbnNQcm9taXNlO1xuXHRjbG9zZWQgPSAhMTtcblx0Y29uc3RydWN0b3Iob3B0aW9ucywgZXZhbHVhdG9yID0gbmV3IEVTTW9kdWxlc0V2YWx1YXRvcigpLCBkZWJ1Zykge1xuXHRcdGlmICh0aGlzLm9wdGlvbnMgPSBvcHRpb25zLCB0aGlzLmV2YWx1YXRvciA9IGV2YWx1YXRvciwgdGhpcy5kZWJ1ZyA9IGRlYnVnLCB0aGlzLmV2YWx1YXRlZE1vZHVsZXMgPSBvcHRpb25zLmV2YWx1YXRlZE1vZHVsZXMgPz8gbmV3IEV2YWx1YXRlZE1vZHVsZXMoKSwgdGhpcy50cmFuc3BvcnQgPSBub3JtYWxpemVNb2R1bGVSdW5uZXJUcmFuc3BvcnQob3B0aW9ucy50cmFuc3BvcnQpLCBvcHRpb25zLmhtciAhPT0gITEpIHtcblx0XHRcdGxldCBvcHRpb25zSG1yID0gb3B0aW9ucy5obXIgPz8gITA7XG5cdFx0XHRpZiAodGhpcy5obXJDbGllbnQgPSBuZXcgSE1SQ2xpZW50KG9wdGlvbnNIbXIgPT09ICEwIHx8IG9wdGlvbnNIbXIubG9nZ2VyID09PSB2b2lkIDAgPyBobXJMb2dnZXIgOiBvcHRpb25zSG1yLmxvZ2dlciA9PT0gITEgPyBzaWxlbnRDb25zb2xlIDogb3B0aW9uc0htci5sb2dnZXIsIHRoaXMudHJhbnNwb3J0LCAoeyBhY2NlcHRlZFBhdGggfSkgPT4gdGhpcy5pbXBvcnQoYWNjZXB0ZWRQYXRoKSksICF0aGlzLnRyYW5zcG9ydC5jb25uZWN0KSB0aHJvdyBFcnJvcihcIkhNUiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcnVubmVyIHRyYW5zcG9ydCwgYnV0IGBobXJgIG9wdGlvbiB3YXMgc2V0IHRvIHRydWVcIik7XG5cdFx0XHR0aGlzLnRyYW5zcG9ydC5jb25uZWN0KGNyZWF0ZUhNUkhhbmRsZXJGb3JSdW5uZXIodGhpcykpO1xuXHRcdH0gZWxzZSB0aGlzLnRyYW5zcG9ydC5jb25uZWN0Py4oKTtcblx0XHRvcHRpb25zLnNvdXJjZW1hcEludGVyY2VwdG9yICE9PSAhMSAmJiAodGhpcy5yZXNldFNvdXJjZU1hcFN1cHBvcnQgPSBlbmFibGVTb3VyY2VNYXBTdXBwb3J0KHRoaXMpKTtcblx0fVxuXHQvKipcblx0KiBVUkwgdG8gZXhlY3V0ZS4gQWNjZXB0cyBmaWxlIHBhdGgsIHNlcnZlciBwYXRoIG9yIGlkIHJlbGF0aXZlIHRvIHRoZSByb290LlxuXHQqL1xuXHRhc3luYyBpbXBvcnQodXJsKSB7XG5cdFx0bGV0IGZldGNoZWRNb2R1bGUgPSBhd2FpdCB0aGlzLmNhY2hlZE1vZHVsZSh1cmwpO1xuXHRcdHJldHVybiBhd2FpdCB0aGlzLmNhY2hlZFJlcXVlc3QodXJsLCBmZXRjaGVkTW9kdWxlKTtcblx0fVxuXHQvKipcblx0KiBDbGVhciBhbGwgY2FjaGVzIGluY2x1ZGluZyBITVIgbGlzdGVuZXJzLlxuXHQqL1xuXHRjbGVhckNhY2hlKCkge1xuXHRcdHRoaXMuZXZhbHVhdGVkTW9kdWxlcy5jbGVhcigpLCB0aGlzLmhtckNsaWVudD8uY2xlYXIoKTtcblx0fVxuXHQvKipcblx0KiBDbGVhcnMgYWxsIGNhY2hlcywgcmVtb3ZlcyBhbGwgSE1SIGxpc3RlbmVycywgYW5kIHJlc2V0cyBzb3VyY2UgbWFwIHN1cHBvcnQuXG5cdCogVGhpcyBtZXRob2QgZG9lc24ndCBzdG9wIHRoZSBITVIgY29ubmVjdGlvbi5cblx0Ki9cblx0YXN5bmMgY2xvc2UoKSB7XG5cdFx0dGhpcy5yZXNldFNvdXJjZU1hcFN1cHBvcnQ/LigpLCB0aGlzLmNsZWFyQ2FjaGUoKSwgdGhpcy5obXJDbGllbnQgPSB2b2lkIDAsIHRoaXMuY2xvc2VkID0gITAsIGF3YWl0IHRoaXMudHJhbnNwb3J0LmRpc2Nvbm5lY3Q/LigpO1xuXHR9XG5cdC8qKlxuXHQqIFJldHVybnMgYHRydWVgIGlmIHRoZSBydW50aW1lIGhhcyBiZWVuIGNsb3NlZCBieSBjYWxsaW5nIGBjbG9zZSgpYCBtZXRob2QuXG5cdCovXG5cdGlzQ2xvc2VkKCkge1xuXHRcdHJldHVybiB0aGlzLmNsb3NlZDtcblx0fVxuXHRwcm9jZXNzSW1wb3J0KGV4cG9ydHMsIGZldGNoUmVzdWx0LCBtZXRhZGF0YSkge1xuXHRcdGlmICghKFwiZXh0ZXJuYWxpemVcIiBpbiBmZXRjaFJlc3VsdCkpIHJldHVybiBleHBvcnRzO1xuXHRcdGxldCB7IHVybCwgdHlwZSB9ID0gZmV0Y2hSZXN1bHQ7XG5cdFx0cmV0dXJuIHR5cGUgIT09IFwibW9kdWxlXCIgJiYgdHlwZSAhPT0gXCJjb21tb25qc1wiIHx8IGFuYWx5emVJbXBvcnRlZE1vZERpZmZlcmVuY2UoZXhwb3J0cywgdXJsLCB0eXBlLCBtZXRhZGF0YSksIGV4cG9ydHM7XG5cdH1cblx0aXNDaXJjdWxhck1vZHVsZShtb2QpIHtcblx0XHRmb3IgKGxldCBpbXBvcnRlZEZpbGUgb2YgbW9kLmltcG9ydHMpIGlmIChtb2QuaW1wb3J0ZXJzLmhhcyhpbXBvcnRlZEZpbGUpKSByZXR1cm4gITA7XG5cdFx0cmV0dXJuICExO1xuXHR9XG5cdGlzQ2lyY3VsYXJJbXBvcnQoaW1wb3J0ZXJzLCBtb2R1bGVVcmwsIHZpc2l0ZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSB7XG5cdFx0Zm9yIChsZXQgaW1wb3J0ZXIgb2YgaW1wb3J0ZXJzKSB7XG5cdFx0XHRpZiAodmlzaXRlZC5oYXMoaW1wb3J0ZXIpKSBjb250aW51ZTtcblx0XHRcdGlmICh2aXNpdGVkLmFkZChpbXBvcnRlciksIGltcG9ydGVyID09PSBtb2R1bGVVcmwpIHJldHVybiAhMDtcblx0XHRcdGxldCBtb2QgPSB0aGlzLmV2YWx1YXRlZE1vZHVsZXMuZ2V0TW9kdWxlQnlJZChpbXBvcnRlcik7XG5cdFx0XHRpZiAobW9kICYmIG1vZC5pbXBvcnRlcnMuc2l6ZSAmJiB0aGlzLmlzQ2lyY3VsYXJJbXBvcnQobW9kLmltcG9ydGVycywgbW9kdWxlVXJsLCB2aXNpdGVkKSkgcmV0dXJuICEwO1xuXHRcdH1cblx0XHRyZXR1cm4gITE7XG5cdH1cblx0YXN5bmMgY2FjaGVkUmVxdWVzdCh1cmwsIG1vZCwgY2FsbHN0YWNrID0gW10sIG1ldGFkYXRhKSB7XG5cdFx0bGV0IG1ldGEgPSBtb2QubWV0YSwgbW9kdWxlSWQgPSBtZXRhLmlkLCB7IGltcG9ydGVycyB9ID0gbW9kLCBpbXBvcnRlZSA9IGNhbGxzdGFja1tjYWxsc3RhY2subGVuZ3RoIC0gMV07XG5cdFx0aWYgKGltcG9ydGVlICYmIGltcG9ydGVycy5hZGQoaW1wb3J0ZWUpLCBtb2QuZXZhbHVhdGVkICYmIG1vZC5wcm9taXNlKSByZXR1cm4gdGhpcy5wcm9jZXNzSW1wb3J0KGF3YWl0IG1vZC5wcm9taXNlLCBtZXRhLCBtZXRhZGF0YSk7XG5cdFx0aWYgKChjYWxsc3RhY2suaW5jbHVkZXMobW9kdWxlSWQpIHx8IHRoaXMuaXNDaXJjdWxhck1vZHVsZShtb2QpIHx8IHRoaXMuaXNDaXJjdWxhckltcG9ydChpbXBvcnRlcnMsIG1vZHVsZUlkKSkgJiYgbW9kLmV4cG9ydHMpIHJldHVybiB0aGlzLnByb2Nlc3NJbXBvcnQobW9kLmV4cG9ydHMsIG1ldGEsIG1ldGFkYXRhKTtcblx0XHRsZXQgZGVidWdUaW1lcjtcblx0XHR0aGlzLmRlYnVnICYmIChkZWJ1Z1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmRlYnVnKGBbbW9kdWxlIHJ1bm5lcl0gbW9kdWxlICR7bW9kdWxlSWR9IHRha2VzIG92ZXIgMnMgdG8gbG9hZC5cXG4ke2BzdGFjazpcXG4ke1suLi5jYWxsc3RhY2ssIG1vZHVsZUlkXS5yZXZlcnNlKCkubWFwKChwKSA9PiBgICAtICR7cH1gKS5qb2luKFwiXFxuXCIpfWB9YCk7XG5cdFx0fSwgMmUzKSk7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChtb2QucHJvbWlzZSkgcmV0dXJuIHRoaXMucHJvY2Vzc0ltcG9ydChhd2FpdCBtb2QucHJvbWlzZSwgbWV0YSwgbWV0YWRhdGEpO1xuXHRcdFx0bGV0IHByb21pc2UgPSB0aGlzLmRpcmVjdFJlcXVlc3QodXJsLCBtb2QsIGNhbGxzdGFjayk7XG5cdFx0XHRyZXR1cm4gbW9kLnByb21pc2UgPSBwcm9taXNlLCBtb2QuZXZhbHVhdGVkID0gITEsIHRoaXMucHJvY2Vzc0ltcG9ydChhd2FpdCBwcm9taXNlLCBtZXRhLCBtZXRhZGF0YSk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdG1vZC5ldmFsdWF0ZWQgPSAhMCwgZGVidWdUaW1lciAmJiBjbGVhclRpbWVvdXQoZGVidWdUaW1lcik7XG5cdFx0fVxuXHR9XG5cdGFzeW5jIGNhY2hlZE1vZHVsZSh1cmwsIGltcG9ydGVyKSB7XG5cdFx0bGV0IGNhY2hlZCA9IHRoaXMuY29uY3VycmVudE1vZHVsZU5vZGVQcm9taXNlcy5nZXQodXJsKTtcblx0XHRpZiAoY2FjaGVkKSB0aGlzLmRlYnVnPy4oXCJbbW9kdWxlIHJ1bm5lcl0gdXNpbmcgY2FjaGVkIG1vZHVsZSBpbmZvIGZvclwiLCB1cmwpO1xuXHRcdGVsc2Uge1xuXHRcdFx0bGV0IGNhY2hlZE1vZHVsZSA9IHRoaXMuZXZhbHVhdGVkTW9kdWxlcy5nZXRNb2R1bGVCeVVybCh1cmwpO1xuXHRcdFx0Y2FjaGVkID0gdGhpcy5nZXRNb2R1bGVJbmZvcm1hdGlvbih1cmwsIGltcG9ydGVyLCBjYWNoZWRNb2R1bGUpLmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmNvbmN1cnJlbnRNb2R1bGVOb2RlUHJvbWlzZXMuZGVsZXRlKHVybCk7XG5cdFx0XHR9KSwgdGhpcy5jb25jdXJyZW50TW9kdWxlTm9kZVByb21pc2VzLnNldCh1cmwsIGNhY2hlZCk7XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZWQ7XG5cdH1cblx0ZW5zdXJlQnVpbHRpbnMoKSB7XG5cdFx0aWYgKCF0aGlzLmlzQnVpbHRpbikgcmV0dXJuIHRoaXMuYnVpbHRpbnNQcm9taXNlID8/PSAoYXN5bmMgKCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGZldGNoaW5nIGJ1aWx0aW5zIGZyb20gc2VydmVyXCIpO1xuXHRcdFx0XHRsZXQgYnVpbHRpbnMgPSAoYXdhaXQgdGhpcy50cmFuc3BvcnQuaW52b2tlKFwiZ2V0QnVpbHRpbnNcIiwgW10pKS5tYXAoKGJ1aWx0aW4pID0+IHR5cGVvZiBidWlsdGluID09IFwib2JqZWN0XCIgJiYgYnVpbHRpbiAmJiBcInR5cGVcIiBpbiBidWlsdGluID8gYnVpbHRpbi50eXBlID09PSBcInN0cmluZ1wiID8gYnVpbHRpbi52YWx1ZSA6IG5ldyBSZWdFeHAoYnVpbHRpbi5zb3VyY2UsIGJ1aWx0aW4uZmxhZ3MpIDogYnVpbHRpbik7XG5cdFx0XHRcdHRoaXMuaXNCdWlsdGluID0gY3JlYXRlSXNCdWlsdGluKGJ1aWx0aW5zKSwgdGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGJ1aWx0aW5zIGxvYWRlZDpcIiwgYnVpbHRpbnMpO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0dGhpcy5idWlsdGluc1Byb21pc2UgPSB2b2lkIDA7XG5cdFx0XHR9XG5cdFx0fSkoKSwgdGhpcy5idWlsdGluc1Byb21pc2U7XG5cdH1cblx0YXN5bmMgZ2V0TW9kdWxlSW5mb3JtYXRpb24odXJsLCBpbXBvcnRlciwgY2FjaGVkTW9kdWxlKSB7XG5cdFx0aWYgKHRoaXMuY2xvc2VkKSB0aHJvdyBFcnJvcihcIlZpdGUgbW9kdWxlIHJ1bm5lciBoYXMgYmVlbiBjbG9zZWQuXCIpO1xuXHRcdGF3YWl0IHRoaXMuZW5zdXJlQnVpbHRpbnMoKSwgdGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGZldGNoaW5nXCIsIHVybCk7XG5cdFx0bGV0IGlzQ2FjaGVkID0gISEodHlwZW9mIGNhY2hlZE1vZHVsZSA9PSBcIm9iamVjdFwiICYmIGNhY2hlZE1vZHVsZS5tZXRhKSwgZmV0Y2hlZE1vZHVsZSA9IHVybC5zdGFydHNXaXRoKFwiZGF0YTpcIikgfHwgdGhpcy5pc0J1aWx0aW4/Lih1cmwpID8ge1xuXHRcdFx0ZXh0ZXJuYWxpemU6IHVybCxcblx0XHRcdHR5cGU6IFwiYnVpbHRpblwiXG5cdFx0fSA6IGF3YWl0IHRoaXMudHJhbnNwb3J0Lmludm9rZShcImZldGNoTW9kdWxlXCIsIFtcblx0XHRcdHVybCxcblx0XHRcdGltcG9ydGVyLFxuXHRcdFx0e1xuXHRcdFx0XHRjYWNoZWQ6IGlzQ2FjaGVkLFxuXHRcdFx0XHRzdGFydE9mZnNldDogdGhpcy5ldmFsdWF0b3Iuc3RhcnRPZmZzZXRcblx0XHRcdH1cblx0XHRdKTtcblx0XHRpZiAoXCJjYWNoZVwiIGluIGZldGNoZWRNb2R1bGUpIHtcblx0XHRcdGlmICghY2FjaGVkTW9kdWxlIHx8ICFjYWNoZWRNb2R1bGUubWV0YSkgdGhyb3cgRXJyb3IoYE1vZHVsZSBcIiR7dXJsfVwiIHdhcyBtaXN0YWtlbmx5IGludmFsaWRhdGVkIGR1cmluZyBmZXRjaCBwaGFzZS5gKTtcblx0XHRcdHJldHVybiBjYWNoZWRNb2R1bGU7XG5cdFx0fVxuXHRcdGxldCBtb2R1bGVJZCA9IFwiZXh0ZXJuYWxpemVcIiBpbiBmZXRjaGVkTW9kdWxlID8gZmV0Y2hlZE1vZHVsZS5leHRlcm5hbGl6ZSA6IGZldGNoZWRNb2R1bGUuaWQsIG1vZHVsZVVybCA9IFwidXJsXCIgaW4gZmV0Y2hlZE1vZHVsZSA/IGZldGNoZWRNb2R1bGUudXJsIDogdXJsLCBtb2R1bGUgPSB0aGlzLmV2YWx1YXRlZE1vZHVsZXMuZW5zdXJlTW9kdWxlKG1vZHVsZUlkLCBtb2R1bGVVcmwpO1xuXHRcdHJldHVybiBcImludmFsaWRhdGVcIiBpbiBmZXRjaGVkTW9kdWxlICYmIGZldGNoZWRNb2R1bGUuaW52YWxpZGF0ZSAmJiB0aGlzLmV2YWx1YXRlZE1vZHVsZXMuaW52YWxpZGF0ZU1vZHVsZShtb2R1bGUpLCBmZXRjaGVkTW9kdWxlLnVybCA9IG1vZHVsZVVybCwgZmV0Y2hlZE1vZHVsZS5pZCA9IG1vZHVsZUlkLCBtb2R1bGUubWV0YSA9IGZldGNoZWRNb2R1bGUsIG1vZHVsZTtcblx0fVxuXHRhc3luYyBkaXJlY3RSZXF1ZXN0KHVybCwgbW9kLCBfY2FsbHN0YWNrKSB7XG5cdFx0bGV0IGZldGNoUmVzdWx0ID0gbW9kLm1ldGEsIG1vZHVsZUlkID0gZmV0Y2hSZXN1bHQuaWQsIGNhbGxzdGFjayA9IFsuLi5fY2FsbHN0YWNrLCBtb2R1bGVJZF0sIHJlcXVlc3QgPSBhc3luYyAoZGVwLCBtZXRhZGF0YSkgPT4ge1xuXHRcdFx0bGV0IGltcG9ydGVyID0gXCJmaWxlXCIgaW4gZmV0Y2hSZXN1bHQgJiYgZmV0Y2hSZXN1bHQuZmlsZSB8fCBtb2R1bGVJZCwgZGVwTW9kID0gYXdhaXQgdGhpcy5jYWNoZWRNb2R1bGUoZGVwLCBpbXBvcnRlcik7XG5cdFx0XHRyZXR1cm4gZGVwTW9kLmltcG9ydGVycy5hZGQobW9kdWxlSWQpLCBtb2QuaW1wb3J0cy5hZGQoZGVwTW9kLmlkKSwgdGhpcy5jYWNoZWRSZXF1ZXN0KGRlcCwgZGVwTW9kLCBjYWxsc3RhY2ssIG1ldGFkYXRhKTtcblx0XHR9LCBkeW5hbWljUmVxdWVzdCA9IGFzeW5jIChkZXApID0+IChkZXAgPSBTdHJpbmcoZGVwKSwgZGVwWzBdID09PSBcIi5cIiAmJiAoZGVwID0gcG9zaXhSZXNvbHZlKHBvc2l4RGlybmFtZSh1cmwpLCBkZXApKSwgcmVxdWVzdChkZXAsIHsgaXNEeW5hbWljSW1wb3J0OiAhMCB9KSk7XG5cdFx0aWYgKFwiZXh0ZXJuYWxpemVcIiBpbiBmZXRjaFJlc3VsdCkge1xuXHRcdFx0bGV0IHsgZXh0ZXJuYWxpemUgfSA9IGZldGNoUmVzdWx0O1xuXHRcdFx0dGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGV4dGVybmFsaXppbmdcIiwgZXh0ZXJuYWxpemUpO1xuXHRcdFx0bGV0IGV4cG9ydHMgPSBhd2FpdCB0aGlzLmV2YWx1YXRvci5ydW5FeHRlcm5hbE1vZHVsZShleHRlcm5hbGl6ZSk7XG5cdFx0XHRyZXR1cm4gbW9kLmV4cG9ydHMgPSBleHBvcnRzLCBleHBvcnRzO1xuXHRcdH1cblx0XHRsZXQgeyBjb2RlLCBmaWxlIH0gPSBmZXRjaFJlc3VsdDtcblx0XHRpZiAoY29kZSA9PSBudWxsKSB7XG5cdFx0XHRsZXQgaW1wb3J0ZXIgPSBjYWxsc3RhY2tbY2FsbHN0YWNrLmxlbmd0aCAtIDJdO1xuXHRcdFx0dGhyb3cgRXJyb3IoYFttb2R1bGUgcnVubmVyXSBGYWlsZWQgdG8gbG9hZCBcIiR7dXJsfVwiJHtpbXBvcnRlciA/IGAgaW1wb3J0ZWQgZnJvbSAke2ltcG9ydGVyfWAgOiBcIlwifWApO1xuXHRcdH1cblx0XHRsZXQgY3JlYXRlSW1wb3J0TWV0YSA9IHRoaXMub3B0aW9ucy5jcmVhdGVJbXBvcnRNZXRhID8/IGNyZWF0ZURlZmF1bHRJbXBvcnRNZXRhLCBtb2R1bGVQYXRoID0gY2xlYW5VcmwoZmlsZSB8fCBtb2R1bGVJZCksIGhyZWYgPSBwb3NpeFBhdGhUb0ZpbGVIcmVmKG1vZHVsZVBhdGgpLCBtZXRhID0gYXdhaXQgY3JlYXRlSW1wb3J0TWV0YShtb2R1bGVQYXRoKSwgZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHRcdFx0dmFsdWU6IFwiTW9kdWxlXCIsXG5cdFx0XHRlbnVtZXJhYmxlOiAhMSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogITFcblx0XHR9KSwgbW9kLmV4cG9ydHMgPSBleHBvcnRzO1xuXHRcdGxldCBob3RDb250ZXh0O1xuXHRcdHRoaXMuaG1yQ2xpZW50ICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZXRhLCBcImhvdFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiAhMCxcblx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuaG1yQ2xpZW50KSB0aHJvdyBFcnJvcihcIlttb2R1bGUgcnVubmVyXSBITVIgY2xpZW50IHdhcyBjbG9zZWQuXCIpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5kZWJ1Zz8uKFwiW21vZHVsZSBydW5uZXJdIGNyZWF0aW5nIGhtciBjb250ZXh0IGZvclwiLCBtb2QudXJsKSwgaG90Q29udGV4dCB8fD0gbmV3IEhNUkNvbnRleHQodGhpcy5obXJDbGllbnQsIG1vZC51cmwpLCBob3RDb250ZXh0O1xuXHRcdFx0fSxcblx0XHRcdHNldDogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGhvdENvbnRleHQgPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRsZXQgY29udGV4dCA9IHtcblx0XHRcdFtzc3JJbXBvcnRLZXldOiByZXF1ZXN0LFxuXHRcdFx0W3NzckR5bmFtaWNJbXBvcnRLZXldOiBkeW5hbWljUmVxdWVzdCxcblx0XHRcdFtzc3JNb2R1bGVFeHBvcnRzS2V5XTogZXhwb3J0cyxcblx0XHRcdFtzc3JFeHBvcnRBbGxLZXldOiAob2JqKSA9PiBleHBvcnRBbGwoZXhwb3J0cywgb2JqKSxcblx0XHRcdFtzc3JFeHBvcnROYW1lS2V5XTogKG5hbWUsIGdldHRlcikgPT4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcblx0XHRcdFx0ZW51bWVyYWJsZTogITAsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogITAsXG5cdFx0XHRcdGdldDogZ2V0dGVyXG5cdFx0XHR9KSxcblx0XHRcdFtzc3JJbXBvcnRNZXRhS2V5XTogbWV0YVxuXHRcdH07XG5cdFx0cmV0dXJuIHRoaXMuZGVidWc/LihcIlttb2R1bGUgcnVubmVyXSBleGVjdXRpbmdcIiwgaHJlZiksIGF3YWl0IHRoaXMuZXZhbHVhdG9yLnJ1bklubGluZWRNb2R1bGUoY29udGV4dCwgY29kZSwgbW9kKSwgZXhwb3J0cztcblx0fVxufTtcbmZ1bmN0aW9uIGV4cG9ydEFsbChleHBvcnRzLCBzb3VyY2VNb2R1bGUpIHtcblx0aWYgKGV4cG9ydHMgIT09IHNvdXJjZU1vZHVsZSAmJiAhKGlzUHJpbWl0aXZlKHNvdXJjZU1vZHVsZSkgfHwgQXJyYXkuaXNBcnJheShzb3VyY2VNb2R1bGUpIHx8IHNvdXJjZU1vZHVsZSBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG5cdFx0Zm9yIChsZXQga2V5IGluIHNvdXJjZU1vZHVsZSkgaWYgKGtleSAhPT0gXCJkZWZhdWx0XCIgJiYga2V5ICE9PSBcIl9fZXNNb2R1bGVcIiAmJiAhKGtleSBpbiBleHBvcnRzKSkgdHJ5IHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcblx0XHRcdFx0ZW51bWVyYWJsZTogITAsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogITAsXG5cdFx0XHRcdGdldDogKCkgPT4gc291cmNlTW9kdWxlW2tleV1cblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2gge31cblx0fVxufVxuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBFU01vZHVsZXNFdmFsdWF0b3IsIEV2YWx1YXRlZE1vZHVsZXMsIE1vZHVsZVJ1bm5lciwgY3JlYXRlRGVmYXVsdEltcG9ydE1ldGEsIGNyZWF0ZU5vZGVJbXBvcnRNZXRhLCBjcmVhdGVXZWJTb2NrZXRNb2R1bGVSdW5uZXJUcmFuc3BvcnQsIG5vcm1hbGl6ZU1vZHVsZUlkLCBzc3JEeW5hbWljSW1wb3J0S2V5LCBzc3JFeHBvcnRBbGxLZXksIHNzckV4cG9ydE5hbWVLZXksIHNzckltcG9ydEtleSwgc3NySW1wb3J0TWV0YUtleSwgc3NyTW9kdWxlRXhwb3J0c0tleSB9O1xuIl0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswXSwibWFwcGluZ3MiOiI7QUFBQSxJQUFJLG9CQUFvQjtBQUN4QixxQkFBcUI7QUFHckIsTUFBTSxZQUFZLE9BQU8sVUFBVSxPQUFPLFFBQVEsYUFB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
@@ -1,4 +1,4 @@
1
- //#region ../../node_modules/.pnpm/vitest@4.1.10_@opentelemetry+api@1.9.0_@types+node@25.0.7_@vitest+coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js
1
+ //#region ../../node_modules/.pnpm/vitest@4.1.10_@opentelemetry+api@1.9.0_@types+node@25.0.7_@vitest+coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js
2
2
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
3
3
  function getDefaultExportFromCjs(x) {
4
4
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
@@ -6,4 +6,4 @@ function getDefaultExportFromCjs(x) {
6
6
  //#endregion
7
7
  export { commonjsGlobal as c, getDefaultExportFromCjs as g };
8
8
 
9
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2NvbW1vbmpzSGVscGVycy5EMjZ0eTNFdy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vdml0ZXN0QDQuMS4xMF9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHR5cGVzK25vZGVAMjUuMC43X0B2aXRlc3QrY292ZXJhZ2UtdjhANC4xLjEwX3ZpXzM4OTJiNDMzOGRmNjk0Zjc5ZjdkMzg0ZmFkMjNkOTMwL25vZGVfbW9kdWxlcy92aXRlc3QvZGlzdC9jaHVua3MvX2NvbW1vbmpzSGVscGVycy5EMjZ0eTNFdy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29tbW9uanNHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHt9O1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMoeCkge1xuXHRyZXR1cm4geCAmJiB4Ll9fZXNNb2R1bGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsIFwiZGVmYXVsdFwiKSA/IHhbXCJkZWZhdWx0XCJdIDogeDtcbn1cblxuZXhwb3J0IHsgY29tbW9uanNHbG9iYWwgYXMgYywgZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMgYXMgZyB9O1xuIl0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswXSwibWFwcGluZ3MiOiI7QUFBQSxJQUFJLGlCQUFpQixPQUFPLGVBQWUsY0FBYyxhQUFhLE9BQU8sV0FBVyxjQUFjLFNBQVMsT0FBTyxXQUFXLGNBQWMsU0FBUyxPQUFPLFNBQVMsY0FBYyxPQUFPLENBQUM7QUFDOUwsU0FBUyx3QkFBd0IsR0FBRztDQUNuQyxPQUFPLEtBQUssRUFBRSxjQUFjLE9BQU8sVUFBVSxlQUFlLEtBQUssR0FBRyxTQUFTLElBQUksRUFBRSxhQUFhO0FBQ2pHIn0=
9
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2NvbW1vbmpzSGVscGVycy5EMjZ0eTNFdy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vdml0ZXN0QDQuMS4xMF9Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHR5cGVzK25vZGVAMjUuMC43X0B2aXRlc3QrY292ZXJhZ2UtdjhANC4xLjEwX3ZpX2ExOTc3YjkzYWY3YmI2OTMwOGJjYjFkYmFiMzliNjE4L25vZGVfbW9kdWxlcy92aXRlc3QvZGlzdC9jaHVua3MvX2NvbW1vbmpzSGVscGVycy5EMjZ0eTNFdy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29tbW9uanNHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHt9O1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMoeCkge1xuXHRyZXR1cm4geCAmJiB4Ll9fZXNNb2R1bGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsIFwiZGVmYXVsdFwiKSA/IHhbXCJkZWZhdWx0XCJdIDogeDtcbn1cblxuZXhwb3J0IHsgY29tbW9uanNHbG9iYWwgYXMgYywgZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMgYXMgZyB9O1xuIl0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswXSwibWFwcGluZ3MiOiI7QUFBQSxJQUFJLGlCQUFpQixPQUFPLGVBQWUsY0FBYyxhQUFhLE9BQU8sV0FBVyxjQUFjLFNBQVMsT0FBTyxXQUFXLGNBQWMsU0FBUyxPQUFPLFNBQVMsY0FBYyxPQUFPLENBQUM7QUFDOUwsU0FBUyx3QkFBd0IsR0FBRztDQUNuQyxPQUFPLEtBQUssRUFBRSxjQUFjLE9BQU8sVUFBVSxlQUFlLEtBQUssR0FBRyxTQUFTLElBQUksRUFBRSxhQUFhO0FBQ2pHIn0=