sonamu 0.9.2 → 0.9.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 (84) hide show
  1. package/dist/api/config.d.ts +1 -2
  2. package/dist/api/config.d.ts.map +1 -1
  3. package/dist/api/config.js +1 -1
  4. package/dist/api/sonamu.d.ts.map +1 -1
  5. package/dist/api/sonamu.js +10 -1
  6. package/dist/auth/audit-log/builders.d.ts +216 -0
  7. package/dist/auth/audit-log/builders.d.ts.map +1 -0
  8. package/dist/auth/audit-log/builders.js +307 -0
  9. package/dist/auth/audit-log/events.d.ts +143 -0
  10. package/dist/auth/audit-log/events.d.ts.map +1 -0
  11. package/dist/auth/audit-log/events.js +74 -0
  12. package/dist/auth/audit-log/plugin.d.ts +11 -0
  13. package/dist/auth/audit-log/plugin.d.ts.map +1 -0
  14. package/dist/auth/audit-log/plugin.js +427 -0
  15. package/dist/auth/audit-log-ingestor.d.ts +9 -0
  16. package/dist/auth/audit-log-ingestor.d.ts.map +1 -0
  17. package/dist/auth/audit-log-ingestor.js +194 -0
  18. package/dist/auth/index.d.ts +3 -0
  19. package/dist/auth/index.d.ts.map +1 -1
  20. package/dist/auth/index.js +4 -2
  21. package/dist/auth/plugins/entity-definitions/admin.d.ts +1 -1
  22. package/dist/auth/plugins/entity-definitions/admin.js +4 -4
  23. package/dist/auth/plugins/entity-definitions/audit-log.d.ts +12 -0
  24. package/dist/auth/plugins/entity-definitions/audit-log.d.ts.map +1 -0
  25. package/dist/auth/plugins/entity-definitions/audit-log.js +291 -0
  26. package/dist/auth/plugins/entity-definitions/index.d.ts +1 -0
  27. package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
  28. package/dist/auth/plugins/entity-definitions/index.js +5 -3
  29. package/dist/auth/plugins/entity-definitions/types.d.ts +1 -1
  30. package/dist/auth/plugins/entity-definitions/types.d.ts.map +1 -1
  31. package/dist/bin/fixture.d.ts.map +1 -1
  32. package/dist/bin/fixture.js +111 -1
  33. package/dist/database/_batch_update.d.ts +1 -1
  34. package/dist/database/_batch_update.js +2 -2
  35. package/dist/entity/entity-manager.d.ts.map +1 -1
  36. package/dist/entity/entity-manager.js +14 -4
  37. package/dist/index.js +4 -2
  38. package/dist/storage/buffered-file.d.ts +1 -1
  39. package/dist/storage/buffered-file.js +2 -2
  40. package/dist/syncer/syncer.d.ts.map +1 -1
  41. package/dist/syncer/syncer.js +2 -9
  42. package/dist/template/implementations/entry-server.template.js +3 -2
  43. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  44. package/dist/template/implementations/generated.template.js +2 -1
  45. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  46. package/dist/template/implementations/generated_sso.template.js +2 -1
  47. package/dist/template/implementations/queries.template.d.ts.map +1 -1
  48. package/dist/template/implementations/queries.template.js +3 -1
  49. package/dist/template/implementations/sd.template.js +3 -2
  50. package/dist/template/implementations/services.template.d.ts.map +1 -1
  51. package/dist/template/implementations/services.template.js +44 -7
  52. package/dist/template/zod-converter.d.ts.map +1 -1
  53. package/dist/template/zod-converter.js +2 -2
  54. package/dist/ui-web/assets/{index-CfgbCoOJ.js → index-C5KUjXm0.js} +48 -45
  55. package/dist/ui-web/index.html +1 -1
  56. package/dist/utils/fs-utils.d.ts.map +1 -1
  57. package/dist/utils/fs-utils.js +4 -4
  58. package/package.json +3 -3
  59. package/src/api/config.ts +1 -2
  60. package/src/api/sonamu.ts +14 -0
  61. package/src/auth/audit-log/builders.ts +791 -0
  62. package/src/auth/audit-log/events.ts +149 -0
  63. package/src/auth/audit-log/plugin.ts +913 -0
  64. package/src/auth/audit-log-ingestor.ts +233 -0
  65. package/src/auth/index.ts +3 -0
  66. package/src/auth/plugins/entity-definitions/admin.ts +3 -3
  67. package/src/auth/plugins/entity-definitions/audit-log.ts +171 -0
  68. package/src/auth/plugins/entity-definitions/index.ts +3 -0
  69. package/src/auth/plugins/entity-definitions/types.ts +2 -1
  70. package/src/bin/fixture.ts +143 -0
  71. package/src/database/_batch_update.ts +1 -1
  72. package/src/entity/entity-manager.ts +10 -3
  73. package/src/shared/app.shared.ts.txt +2 -3
  74. package/src/shared/web.shared.ts.txt +2 -2
  75. package/src/storage/buffered-file.ts +1 -1
  76. package/src/syncer/syncer.ts +1 -11
  77. package/src/template/implementations/entry-server.template.ts +1 -1
  78. package/src/template/implementations/generated.template.ts +1 -0
  79. package/src/template/implementations/generated_sso.template.ts +1 -0
  80. package/src/template/implementations/queries.template.ts +10 -1
  81. package/src/template/implementations/sd.template.ts +1 -1
  82. package/src/template/implementations/services.template.ts +62 -6
  83. package/src/template/zod-converter.ts +2 -1
  84. package/src/utils/fs-utils.ts +6 -4
@@ -17,7 +17,6 @@ import { createEntity, delEntity, init_entity_operations } from "./entity-operat
17
17
  import { init_module_loader, loadApis, loadModels, loadTypes, loadWorkflows } from "./module-loader.js";
18
18
  import { init_process_utils, runWithGracefulShutdown } from "../utils/process-utils.js";
19
19
  import { actionGenerateHttps, actionGenerateSchemas, actionGenerateServices, actionGenerateSsr, actionSyncConfig, actionSyncFilesToTargets, init_syncer_actions } from "./syncer-actions.js";
20
- import inflection from "inflection";
21
20
  import { group, unique } from "radashi";
22
21
  import assert from "assert";
23
22
  import { mkdir, readFile, writeFile } from "fs/promises";
@@ -289,17 +288,11 @@ var init_syncer = __esmMin((() => {
289
288
  await this.autoloadTypes();
290
289
  await this.autoloadApis();
291
290
  const params = mergedGroup.map((modelPath) => {
292
- if (modelPath.endsWith(".model.ts")) {
291
+ if (modelPath.endsWith(".model.ts") || modelPath.endsWith(".frame.ts")) {
293
292
  const entityId = EntityManager.getEntityIdFromPath(modelPath);
294
293
  assert(entityId);
295
294
  return { namesRecord: EntityManager.getNamesFromId(entityId) };
296
295
  }
297
- if (modelPath.endsWith(".frame.ts")) {
298
- const [, frameName] = modelPath.match(/.+\/(.+)\.frame\.ts$/) ?? [];
299
- assert(frameName);
300
- const frameId = inflection.camelize(frameName);
301
- return { namesRecord: EntityManager.getNamesFromId(frameId) };
302
- }
303
296
  throw new Error("not reachable");
304
297
  });
305
298
  await actionGenerateServices(params);
@@ -428,4 +421,4 @@ var init_syncer = __esmMin((() => {
428
421
  //#endregion
429
422
  init_syncer();
430
423
  export { Syncer, init_syncer };
431
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2VyLmpzIiwibmFtZXMiOlsiU3luY2VyQWN0aW9ucy5hY3Rpb25TeW5jQ29uZmlnIiwiU3luY2VyQWN0aW9ucy5hY3Rpb25HZW5lcmF0ZVNjaGVtYXMiLCJTeW5jZXJBY3Rpb25zLmFjdGlvblN5bmNGaWxlc1RvVGFyZ2V0cyIsInBhcmFtczoge1xuICAgICAgbmFtZXNSZWNvcmQ6IEVudGl0eU5hbWVzUmVjb3JkO1xuICAgIH1bXSIsIlN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVTZXJ2aWNlcyIsIlN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVIdHRwcyIsIlN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVTc3IiLCJrZXlzOiBUZW1wbGF0ZUtleVtdIiwicCIsInRhcmdldCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvc3luY2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgbWtkaXIsIHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IGhvdCB9IGZyb20gXCJAc29uYW11LWtpdC9obXItaG9va1wiO1xuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IG1pbmltYXRjaCB9IGZyb20gXCJtaW5pbWF0Y2hcIjtcbmltcG9ydCB7IGdyb3VwLCB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgdHlwZSB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyByZWdpc3RlcmVkQXBpcyB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgQWxyZWFkeVByb2Nlc3NlZEV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IE5haXRlIH0gZnJvbSBcIi4uL25haXRlL25haXRlXCI7XG5pbXBvcnQgeyB0eXBlIFdvcmtmbG93TWV0YWRhdGEgfSBmcm9tIFwiLi4vdGFza3MvZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1hbmFnZXIgfSBmcm9tIFwiLi4vdGVtcGxhdGUvdGVtcGxhdGUtbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBHZW5lcmF0ZU9wdGlvbnMsIHR5cGUgUGF0aEFuZENvZGUgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlS2V5IH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgbWFwQXN5bmMsIHJlZHVjZUFzeW5jIH0gZnJvbSBcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgeyBjZW50ZXJUZXh0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnNvbGUtdXRpbFwiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGNvcHlGaWxlV2l0aFJlcGxhY2VDb3JlVG9TaGFyZWQsIGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlsc1wiO1xuaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgcnVuV2l0aEdyYWNlZnVsU2h1dGRvd24gfSBmcm9tIFwiLi4vdXRpbHMvcHJvY2Vzcy11dGlsc1wiO1xuaW1wb3J0IHsgZmluZENoYW5nZWRGaWxlc1VzaW5nQ2hlY2tzdW1zLCByZW5ld0NoZWNrc3VtcyB9IGZyb20gXCIuL2NoZWNrc3VtXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVRlbXBsYXRlLCByZW5kZXJUZW1wbGF0ZSB9IGZyb20gXCIuL2NvZGUtZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBjcmVhdGVFbnRpdHksIGRlbEVudGl0eSB9IGZyb20gXCIuL2VudGl0eS1vcGVyYXRpb25zXCI7XG5pbXBvcnQgeyBjaGVja3N1bVBhdHRlcm5Hcm91cCwgZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXBJbkFic29sdXRlUGF0aCB9IGZyb20gXCIuL2ZpbGUtcGF0dGVybnNcIjtcbmltcG9ydCB7IHR5cGUgRmlsZVR5cGUgfSBmcm9tIFwiLi9maWxlLXBhdHRlcm5zXCI7XG5pbXBvcnQgeyBsb2FkQXBpcywgbG9hZE1vZGVscywgbG9hZFR5cGVzLCBsb2FkV29ya2Zsb3dzIH0gZnJvbSBcIi4vbW9kdWxlLWxvYWRlclwiO1xuaW1wb3J0IHsgdHlwZSBMb2FkZWRBcGlzLCB0eXBlIExvYWRlZE1vZGVscywgdHlwZSBMb2FkZWRUeXBlcyB9IGZyb20gXCIuL21vZHVsZS1sb2FkZXJcIjtcbmltcG9ydCAqIGFzIFN5bmNlckFjdGlvbnMgZnJvbSBcIi4vc3luY2VyLWFjdGlvbnNcIjtcblxudHlwZSBEaWZmR3JvdXBzID0ge1xuICBba2V5IGluIEZpbGVUeXBlXTogQWJzb2x1dGVQYXRoW107XG59O1xuXG5leHBvcnQgY2xhc3MgU3luY2VyIHtcbiAgYXBpczogTG9hZGVkQXBpcyA9IFtdO1xuICB0eXBlczogTG9hZGVkVHlwZXMgPSB7fTtcbiAgbW9kZWxzOiBMb2FkZWRNb2RlbHMgPSB7fTtcbiAgd29ya2Zsb3dzOiBNYXA8c3RyaW5nLCBXb3JrZmxvd01ldGFkYXRhW10+ID0gbmV3IE1hcCgpO1xuICBldmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICog7LK07YGs7ISs7J20IOuzgOqyveuQnCDrtoDrtoTsl5Ag64yA7ZW0IOyLse2BrOulvCDsp4Ttlontlanri4jri6QuXG4gICAqIHNvbmFtdS5zaGFyZWQudHPripQg7YyM7J287J20IOyXhuydhCDrlYzrp4wgMe2ajCDsg53shLHtlZjqs6AsIOydtO2bhOyXkOuKlCDrja7slrTsk7Dsp4Ag7JWK7Iq164uI64ukLlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcblxuICAgIC8vIHNvbmFtdS5zaGFyZWQudHPripQg7YyM7J287J20IOyXhuydhCDrlYzrp4wgMe2ajCDsg53shLHtlanri4jri6QuXG4gICAgYXdhaXQgdGhpcy5jb3B5U2hhcmVkVG9UYXJnZXRzKHRhcmdldHMpO1xuXG4gICAgLy8g6re4IOuLpOydjOu2gO2EsOuKlCDrs4Dqsr3rkJwg7YyM7J287J2EIOywvuyVhOyEnCDrj5nquLDtmZQg7J6R7JeF7J2EIOyLpO2Wie2VqeuLiOuLpC5cbiAgICBjb25zdCBjaGFuZ2VkRmlsZXMgPSBhd2FpdCBmaW5kQ2hhbmdlZEZpbGVzVXNpbmdDaGVja3N1bXMoKTtcbiAgICBpZiAoY2hhbmdlZEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuYmxhY2suYmdHcmVlbihjZW50ZXJUZXh0KFwiQWxsIGZpbGVzIGFyZSBzeW5jZWQhXCIpKSk7XG5cbiAgICAgIC8vIOuzgOqyveyCrO2VreydtCDsl4bslrTrj4QgU1NSIO2FnO2UjOumv+ydgCDsg53shLEgKOy0iOq4sCDshKTsoJUg7IucLCDsnbTrr7gg7KG07J6s7ZWY66m0IOyKpO2CtSlcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJxdWVyaWVzXCIsIHt9LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSk7XG4gICAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJlbnRyeV9zZXJ2ZXJcIiwge30sIHsgb3ZlcndyaXRlOiBmYWxzZSB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8g7YyM7J287J20IOydtOuvuCDsobTsnqztlZjrqbQg66y07IucXG4gICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBBbHJlYWR5UHJvY2Vzc2VkRXhjZXB0aW9uKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gZ2VuZXJhdGUgU1NSIHRlbXBsYXRlczpcIiwgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOunjOyVvSDsi7Htgawg7KSR7JeQIO2UhOuhnOyEuOyKpOqwgCDso73snLzrqbQg6rys7Jes67KE66as6riwIOuVjOusuOyXkCxcbiAgICAvLyDsi5zqt7jrhJDsl5Drj4Qg7J6g7IucIOuyhO2LuCDsiJgg7J6I64qUIO2ZmOqyvSDsho3sl5DshJwg7Iux7YGs66W8IOyLpO2Wie2VqeuLiOuLpC5cbiAgICBhd2FpdCBydW5XaXRoR3JhY2VmdWxTaHV0ZG93bihcbiAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8g7JaY6rCAIOyLse2BrCDsnpHsl4Ug7IiY7ZaJ7ZWY64qUIOuzuOyytOyeheuLiOuLpC5cbiAgICAgICAgYXdhaXQgdGhpcy5kb1N5bmNBY3Rpb25zKGNoYW5nZWRGaWxlcyk7XG5cbiAgICAgICAgLy8g7Iux7YGsIOyVoeyFmOydtCDrgZ3rgpjrqbQg7ZWt7IOBIOyytO2BrOyErOydhCDri6Tsi5wg6rCx7Iug7ZWp64uI64ukLlxuICAgICAgICBhd2FpdCByZW5ld0NoZWNrc3VtcygpO1xuICAgICAgfSxcbiAgICAgIHsgd2hlblRoaXNIYXBwZW5zOiBcIlNJR1VTUjJcIiwgd2FpdEZvclVwVG86IDIwMDAwIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYXRjaGVy6rCAIOqwkOyngO2VnCDtjIzsnbwg67OA6rK9IOyCrO2VreyXkCDrjIDtlbQg7Iux7YGs66W8IOynhO2Wie2VqeuLiOuLpC5cbiAgICog7KO87Ja07KeEIOuzgOqyvSDtjIzsnbzrk6Qg7KSRIOyytO2BrOyErCDqtIDrpqwg64yA7IOB7J24IOqyg+uTpOunjCDqsIDsoLjri6TqsIAg7Iux7YGs66W8IOynhO2Wie2VqeuLiOuLpC5cbiAgICog7LK07YGs7ISsIO2MjOydvCDsl4XrjbDsnbTtirjripQg7Jes6riw7JeQ7IScIO2VmOyngCDslYrsirXri4jri6QuIO2YuOy2nOyekOqwgCDtlanri4jri6QuXG4gICAqIEBwYXJhbSBkaWZmRmlsZVBhdGggLSDrs4Dqsr0g7YyM7J2865OkLiDtlITroZzsoJ3tirgg66Oo7Yq467aA7YSwIFwic3JjL1wiIOuYkOuKlCBcImRpc3QvXCLroZwg7Iuc7J6R7ZWY64qUIOyDgeuMgCDqsr3roZzsnoXri4jri6QuIOyYiOyLnDogXCJzcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzXCJcbiAgICovXG4gIGFzeW5jIHN5bmNGcm9tV2F0Y2hlcihldmVudDogc3RyaW5nLCBkaWZmRmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChldmVudCAhPT0gXCJjaGFuZ2VcIiAmJiBldmVudCAhPT0gXCJhZGRcIiAmJiBldmVudCAhPT0gXCJ1bmxpbmtcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNTUiDshKTsoJUg7YyM7J28IOuzgOqyvSDqsJDsp4BcbiAgICBpZiAoZGlmZkZpbGVQYXRoLmluY2x1ZGVzKFwiL3NyYy9zc3IvXCIpKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLnllbGxvdyhcIlNTUiBjb25maWcgY2hhbmdlZCAtIHJlbG9hZGluZy4uLlwiKSk7XG4gICAgICAvLyBTU1Ig7YyM7J2864+EIGludmFsaWRhdGUg7ZuEIHJlbG9hZFxuICAgICAgaWYgKCFpc1Rlc3QoKSkge1xuICAgICAgICBhd2FpdCBob3QuaW52YWxpZGF0ZUZpbGUoZGlmZkZpbGVQYXRoLCBldmVudCk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmF1dG9sb2FkU1NSUm91dGVzKCk7XG4gICAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KFwib25ITVJDb21wbGV0ZWRcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8g7J2864uoIOuzgOqyveuQnCDtjIzsnbzqs7wgZGVwZW5kZW50IO2MjOydvOuTpOydhCBpbnZhbGlkYXRlIO2VqeuLiOuLpC5cbiAgICAvLyDtlZwg67KIIOydtOyDgSBpbXBvcnTrkJwg7Lmc6rWs65Ok7JeQIOuMgO2VtOyEnOunjCDsi6TsoJwg7J6R7JeF7J20IOydvOyWtOuCqeuLiOuLpC5cbiAgICAvLyDqt7jrn6zri4gg7JWI7Ius7ZWY6rOgIGludmFsaWRhdGUg7ZW064+EIOuQqeuLiOuLpC5cbiAgICAvLyDthYzsiqTtirgg7ZmY6rK97JeQ7ISc64qUIGhvdC5pbnZhbGlkYXRlRmlsZeyLnCDstIjquLAg7JeQ65+s6rCAIOuwnOyDne2VmOq4sCDrlYzrrLjsl5AgaW52YWxpZGF0ZSDtlZjsp4Ag7JWK7Iq164uI64ukLlxuICAgIGlmICghaXNUZXN0KCkpIHtcbiAgICAgIGNvbnN0IGludmFsaWRhdGVkUGF0aHMgPSAoYXdhaXQgaG90LmludmFsaWRhdGVGaWxlKGRpZmZGaWxlUGF0aCwgZXZlbnQpKSBhcyBBYnNvbHV0ZVBhdGhbXTtcblxuICAgICAgaWYgKGludmFsaWRhdGVkUGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKGDwn5SEIEludmFsaWRhdGVkOmApKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGludmFsaWRhdGVkUGF0aCBvZiBpbnZhbGlkYXRlZFBhdGhzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIOunjOyVvSBtb2RlbC50cyDtjIzsnbzsnbQg67OA6rK9KGludmFsaWRhdGUp65CY7JeI64ukPyDqt7jrn6zrqbQgcmVnaXN0ZXJlZEFwaXMg7KSR7JeQ7IScIOydtCDrqqjrjbjsl5Ag7ZW064u57ZWY64qUIGFwaeuTpOydgCDsp4Dsm4zspJjsmpQuXG4gICAgICAgICAgICAvLyByZWdpc3RlcmVkQXBpc+uKlCDthrXsnLzroZwg64ukIOuCoOugpOuyhOumtCDsiJgg7JeG7Iq164uI64ukLiByZWdpc3RlcmVkQXBpc+yXkCDsmKzrnbzsmKTripQg7Lmc6rWs65Ok7J2AIOy0iOq4sCDroZzrk5zsi5wg65iQ64qUIEhNUuyLnOyXkOunjCDrk7HroZ3rkJjquLAg65WM66y47J6F64uI64ukLlxuICAgICAgICAgICAgLy8g65Sw65287IScIG1vZGVsLnRzIO2MjOydvOydmCDrs4Dqsr3snLzroZwg64uk7J2M67KIIOyDiOuhnOyatCBldmFs7J20IOyYiOyDgeuQmOuKlCDsnbQg7Iuc7KCQ7JeQ7ISc66eMLCDsnbQg66qo64247JeQ7IScIOuCmOyYqCByZWdpc3RlcmVkQXBpc+uTpOydhCDsp4Dsm4zspIQg7IiYIOyeiOyKteuLiOuLpC5cbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWRBcGlzID0gdGhpcy5yZW1vdmVJbnZhbGlkYXRlZFJlZ2lzdGVyZWRBcGlzKGludmFsaWRhdGVkUGF0aCk7XG4gICAgICAgICAgICBpZiAocmVtb3ZlZEFwaXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBjaGFsay5ibHVlKGAtICR7cGF0aC5yZWxhdGl2ZShTb25hbXUuYXBpUm9vdFBhdGgsIGludmFsaWRhdGVkUGF0aCl9YCksXG4gICAgICAgICAgICAgICAgY2hhbGsuZ3JheShgKHdpdGggJHtyZW1vdmVkQXBpcy5sZW5ndGh9IEFQSXMpYCksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ibHVlKGAtICR7cGF0aC5yZWxhdGl2ZShTb25hbXUuYXBpUm9vdFBhdGgsIGludmFsaWRhdGVkUGF0aCl9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBjaGFsay5yZWQoYEZhaWxlZCB0byByZW1vdmUgaW52YWxpZGF0ZWQgcmVnaXN0ZXJlZCBBUElzIGZvciAke2ludmFsaWRhdGVkUGF0aH1gKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGV2UnVubmVyIO2ZnOyEse2ZlCDsi5wsIOuzgOqyveuQnCDshozsiqQg7YyM7J287J2EIFZpdGVzdCDrqqjrk4gg6re4656Y7ZSE7JeQ7ISc64+EIOustO2aqO2ZlO2VqeuLiOuLpC5cbiAgICAvLyBWaXRl7J2YIG1vZHVsZUdyYXBoLmludmFsaWRhdGVNb2R1bGUoKeydtCBpbXBvcnRlciDrsKntlqXsnLzroZwg7J6s6reA7KCBIGNhc2NhZGXtlZjrr4DroZwsXG4gICAgLy8g7IaM7IqkIO2MjOydvCDtlZjrgpjrp4wg66y07Zqo7ZmU7ZWY66m0IOydtOulvCBpbXBvcnTtlZjripQg7YWM7Iqk7Yq4IO2MjOydvOuPhCDsnpDrj5nsnLzroZwg66y07Zqo7ZmU65Cp64uI64ukLlxuICAgIGlmICghaXNUZXN0KCkgJiYgU29uYW11LmNvbmZpZy50ZXN0Py5kZXZSdW5uZXI/LmVuYWJsZWQgJiYgU29uYW11LmRldlZpdGVzdE1hbmFnZXIpIHtcbiAgICAgIFNvbmFtdS5kZXZWaXRlc3RNYW5hZ2VyLmludmFsaWRhdGVGaWxlcyhbZGlmZkZpbGVQYXRoXSk7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY2hhbGsuZGltKGBUZXN0IGludmFsaWRhdGVkOiAke3BhdGgucmVsYXRpdmUoU29uYW11LmFwaVJvb3RQYXRoLCBkaWZmRmlsZVBhdGgpfWApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0luQ2hlY2tQYXR0ZXJuR3JvdXAgPSBPYmplY3QudmFsdWVzKGdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGgoKSkuc29tZShcbiAgICAgIChwYXR0ZXJuKSA9PiBtaW5pbWF0Y2goZGlmZkZpbGVQYXRoLCBwYXR0ZXJuKSxcbiAgICApO1xuXG4gICAgLy8g7ZWgIOydvChzeW5jKeydtCDsnojsnLzrqbQg7ZWp64uI64ukLlxuICAgIGlmIChpc0luQ2hlY2tQYXR0ZXJuR3JvdXApIHtcbiAgICAgIGF3YWl0IHRoaXMuZG9TeW5jQWN0aW9ucyhbZGlmZkZpbGVQYXRoXSk7XG4gICAgfVxuXG4gICAgLy8g7Iux7YGsIOyekeyXheydtCDrgZ3rgpjrqbQg66qo65OgIOuqqOuTiOydhCDroZzrk5ztlanri4jri6QuXG4gICAgLy8gaG1yLWhvb2vsl5Ag7J2Y7ZW0IGludmFsaWRhdGXrkJwg67aA67aE65Ok7J20IOyVhOuLiOudvOuptCDsupDsi5wg6re464yA66GcIOycoOyngO2VqeuLiOuLpC5cbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkVHlwZXMoKTtcbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkTW9kZWxzKCk7XG4gICAgYXdhaXQgdGhpcy5hdXRvbG9hZEFwaXMoKTtcbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkV29ya2Zsb3dzKCk7XG5cbiAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KFwib25ITVJDb21wbGV0ZWRcIik7XG4gIH1cblxuICByZW1vdmVJbnZhbGlkYXRlZFJlZ2lzdGVyZWRBcGlzKFxuICAgIGludmFsaWRhdGVkUGF0aDogQWJzb2x1dGVQYXRoLFxuICApOiAodHlwZW9mIHJlZ2lzdGVyZWRBcGlzKVtudW1iZXJdW10ge1xuICAgIGlmICghaW52YWxpZGF0ZWRQYXRoLmVuZHNXaXRoKFwiLm1vZGVsLnRzXCIgLyrshozsiqQg7L2U65Oc66W8IOuLpOujqOuKlCDsg4HtmansnbTri4ggLnRzIOqyveuhnOuhnCDrtIXri4jri6QuKi8pKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZW50aXR5SWQgPSBFbnRpdHlNYW5hZ2VyLmdldEVudGl0eUlkRnJvbVBhdGgoaW52YWxpZGF0ZWRQYXRoKTtcbiAgICBjb25zdCB0b1JlbW92ZSA9IHJlZ2lzdGVyZWRBcGlzLmZpbHRlcigoYXBpKSA9PiBhcGkubW9kZWxOYW1lID09PSBgJHtlbnRpdHlJZH1Nb2RlbGApO1xuICAgIGZvciAoY29uc3QgYXBpIG9mIHRvUmVtb3ZlKSB7XG4gICAgICBjb25zdCBpZHggPSByZWdpc3RlcmVkQXBpcy5pbmRleE9mKGFwaSk7XG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICByZWdpc3RlcmVkQXBpcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9SZW1vdmU7XG4gIH1cblxuICBhc3luYyBjb3B5U2hhcmVkVG9UYXJnZXRzKHRhcmdldHM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gcGx1cmFsLnRzIOuCtOyaqeydhCDsnb3slrTshJwgc2hhcmVkIO2MjOydvOyXkCDsgr3snoXtlanri4jri6QuXG4gICAgY29uc3QgZGljdFV0aWxzUGF0aCA9IHBhdGguam9pbihcbiAgICAgIGltcG9ydC5tZXRhLmRpcm5hbWUucmVwbGFjZShcIi9kaXN0L1wiLCBcIi9zcmMvXCIpLFxuICAgICAgXCIuLi9kaWN0L3V0aWxzLnRzXCIsXG4gICAgKTtcbiAgICBjb25zdCBkaWN0VXRpbHNDb2RlID0gKGF3YWl0IGV4aXN0cyhkaWN0VXRpbHNQYXRoKSlcbiAgICAgID8gYXdhaXQgcmVhZEZpbGUoZGljdFV0aWxzUGF0aCwgXCJ1dGYtOFwiKVxuICAgICAgOiBcIlwiO1xuXG4gICAgLy8g7Yq57KCVIOuzgOyImCDsuZjtmZjsnYQg7JyE7ZW07IScIOyCrOyaqe2VqeuLiOuLpC5cbiAgICBjb25zdCBjb252ZXJ0TWFwID0ge1xuICAgICAgYmFzZVVybDpcbiAgICAgICAgU29uYW11LmNvbmZpZy5zZXJ2ZXIuYmFzZVVybCA/P1xuICAgICAgICBgaHR0cDovLyR7U29uYW11LmNvbmZpZy5zZXJ2ZXIubGlzdGVuPy5ob3N0ID8/IFwibG9jYWxob3N0XCJ9OiR7U29uYW11LmNvbmZpZy5zZXJ2ZXIubGlzdGVuPy5wb3J0ID8/IDMwMDB9YCxcbiAgICAgIGRpY3RVdGlsczogZGljdFV0aWxzQ29kZSxcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgLy8g7KeA6riIIOqwgOyguOqwgOugpOuKlCDsnbQg7YyM7J287J2AIFNvbmFtdSDsvZTrk5zrsqDsnbTsiqTsnZgg7J2867aA7J6F64uI64ukLlxuICAgICAgLy8g6re465+w642wIGRpc3Qg7IaNIOu5jOuTnOuQnCDshozsiqQg7L2U65OcIO2MjOydvOydtCDtlYTsmpTtlZwg6rKD7J20IOyVhOuLiOqzoCwgc3Jj7JeQ66eMIOyeiOuKlCDthY3siqTtirgg7YyM7J287J20IO2VhOyalO2VqeuLiOuLpC5cbiAgICAgIC8vIOuUsOudvOyEnCAvc3JjL+yXkOyEnCDssL7sirXri4jri6QuXG4gICAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICBpbXBvcnQubWV0YS5kaXJuYW1lLnJlcGxhY2UoXCIvZGlzdC9cIiwgXCIvc3JjL1wiKSxcbiAgICAgICAgYC4uL3NoYXJlZC8ke3RhcmdldH0uc2hhcmVkLnRzLnR4dGAsXG4gICAgICApO1xuICAgICAgaWYgKCEoYXdhaXQgZXhpc3RzKHNyY1BhdGgpKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghKGF3YWl0IGV4aXN0cyhwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQpKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUcmllZCB0byBjb3B5IHNvbmFtdS5zaGFyZWQudHMgdG8gdGFyZ2V0ICcke3RhcmdldH0nIGJ1dCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gUGxlYXNlIGNoZWNrIHlvdXIgcHJvamVjdCBkaXJlY3Rvcnkgc3RydWN0dXJlLmAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGxUZXh0ID0gYXdhaXQgcmVhZEZpbGUoc3JjUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICAgIGNvbnN0IGNvbnZlcnRlZFRleHQgPSBPYmplY3QuZW50cmllcyhjb252ZXJ0TWFwKS5yZWR1Y2UoXG4gICAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4gYWNjLnJlcGxhY2UoYCRbWyR7a2V5fV1dYCwgdmFsdWUpLFxuICAgICAgICBmdWxsVGV4dCxcbiAgICAgICk7XG5cbiAgICAgIC8vIOydtOqxtCDtlITroZzsoJ3tirjsl5AgLnRzIOyGjOyKpCDsvZTrk5wg7YyM7J287J2EIOyDneyEse2VmOuKlCDqsoPsnbTrr4DroZwgc3Jj7J2YIC50cyDqsr3roZzroZwg6rCR64uI64ukLlxuICAgICAgY29uc3QgZGVzdFBhdGggPSBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQsIFwic3JjL3NlcnZpY2VzL3NvbmFtdS5zaGFyZWQudHNcIik7XG5cbiAgICAgIC8vIOygleunkCDtmLnsi5zrgpjsp4Drp4wgdGFyZ2V0IOuUlOugie2GoOumrOuKlCDsnojslrTrj4Qgc3JjL3NlcnZpY2VzIOuUlOugie2GoOumrOuKlCDsl4bsnYQg7IiYIOyeiOycvOuvgOuhnCDrr7jrpqwg7IOd7ISx7ZW07KSN64uI64ukLlxuICAgICAgaWYgKCEoYXdhaXQgZXhpc3RzKHBhdGguZGlybmFtZShkZXN0UGF0aCkpKSkge1xuICAgICAgICBhd2FpdCBta2RpcihwYXRoLmRpcm5hbWUoZGVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgY29uc29sZS53YXJuKGBDcmVhdGVkIGRpcmVjdG9yeSAnJHtwYXRoLmRpcm5hbWUoZGVzdFBhdGgpfScgYmVjYXVzZSBpdCBkaWQgbm90IGV4aXN0LmApO1xuICAgICAgfVxuXG4gICAgICAvLyDtjIzsnbzsnbQg7J2066+4IOyhtOyerO2VmOuptCDqsbTrhIjrnIHri4jri6QuXG4gICAgICAvLyBzb25hbXUuc2hhcmVkLnRz64qUIO2UhOuhnOygne2KuOyXkOyEnCDsnpDsnKDroa3qsowg7Luk7Iqk7YSw66eI7J207KeV7ZWgIOyImCDsnojslrTslbwg7ZWY66+A66GcLFxuICAgICAgLy8g7LWc7LSIIDHtmozrp4wg7IOd7ISx7ZWY6rOgIOydtO2bhOyXkOuKlCDrja7slrTsk7Dsp4Ag7JWK7Iq164uI64ukLlxuICAgICAgLy8g7YWc7ZSM66a/IOuCtOyaqSgkW1tkaWN0VXRpbHNdXSDrk7Ep7J20IOuzgOqyveuQmOyXiOydhCDrlYwg67CY7JiB7J20IO2VhOyalO2VmOuptCxcbiAgICAgIC8vIO2VtOuLuSDtjIzsnbzsnYQg7IKt7KCc7ZWcIOuSpCBgcG5wbSBzb25hbXUgc3luY2DroZwg7J6s7IOd7ISx7ZWY66m0IOuQqeuLiOuLpC5cbiAgICAgIGlmIChhd2FpdCBleGlzdHMoZGVzdFBhdGgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB3cml0ZUZpbGUoZGVzdFBhdGgsIGNvbnZlcnRlZFRleHQpO1xuICAgICAgIWlzVGVzdCgpICYmXG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGNoYWxrLmJvbGQoXCJDb3BpZWQ6IFwiKSArIGNoYWxrLmJsdWUocGF0aC5yZWxhdGl2ZShTb25hbXUuYXBwUm9vdFBhdGgsIGRlc3RQYXRoKSksXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYXV0b2xvYWRUeXBlcygpIHtcbiAgICB0aGlzLnR5cGVzID0gYXdhaXQgbG9hZFR5cGVzKCk7XG4gIH1cblxuICBhc3luYyBhdXRvbG9hZE1vZGVscygpIHtcbiAgICB0aGlzLm1vZGVscyA9IGF3YWl0IGxvYWRNb2RlbHMoKTtcbiAgfVxuXG4gIGFzeW5jIGF1dG9sb2FkQXBpcygpIHtcbiAgICB0aGlzLmFwaXMgPSBhd2FpdCBsb2FkQXBpcygpO1xuICB9XG5cbiAgYXN5bmMgYXV0b2xvYWRXb3JrZmxvd3MoKSB7XG4gICAgdGhpcy53b3JrZmxvd3MgPSBhd2FpdCBsb2FkV29ya2Zsb3dzKCk7XG4gICAgYXdhaXQgU29uYW11LndvcmtmbG93cy5zeW5jaHJvbml6ZSh0aGlzLndvcmtmbG93cyk7XG4gIH1cblxuICBhc3luYyBhdXRvbG9hZFNTUlJvdXRlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzc3JDb25maWdQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmMvc3NyXCIpO1xuXG4gICAgLy8g6riw7KG0IHJvdXRlcyDstIjquLDtmZRcbiAgICBjb25zdCB7IGNsZWFyU1NSUm91dGVzIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9zc3JcIik7XG4gICAgY2xlYXJTU1JSb3V0ZXMoKTtcblxuICAgIC8vIHNzciDtj7TrjZQg7JeG7Jy866m0IOyKpO2CtVxuICAgIGlmICghKGF3YWl0IGV4aXN0cyhzc3JDb25maWdQYXRoKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzc3Ig7Y+0642UIOyViOydmCDrqqjrk6AgLnRzIO2MjOydvCDroZzrk5xcbiAgICBjb25zdCB7IGdsb2JBc3luYyB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvYXN5bmMtdXRpbHNcIik7XG4gICAgY29uc3QgeyBpbXBvcnRNZW1iZXJzIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi91dGlscy9lc20tdXRpbHNcIik7XG4gICAgY29uc3QgeyBydW50aW1lUGF0aCB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiKTtcblxuICAgIC8vIHJ1bnRpbWVQYXRo66W8IOyCrOyaqe2VmOyXrCDqsJzrsJwv7ZSE66Gc642V7IWYIO2ZmOqyveyXkCDrp57ripQg7ZmV7J6l7J6QIOyymOumrFxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZ2xvYkFzeW5jKHBhdGguam9pbihzc3JDb25maWdQYXRoLCBydW50aW1lUGF0aChcIioqLyoudHNcIikpKTtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gaW1wb3J0TWVtYmVyc+ulvCDsgqzsmqntlZjrqbQg7YyM7J287J2YIHNpZGUgZWZmZWN0KHJlZ2lzdGVyU1NSIO2YuOy2nCnqsIAg7Iuk7ZaJ65CoXG4gICAgICAgIGF3YWl0IGltcG9ydE1lbWJlcnMoZmlsZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkIFNTUiByb3V0ZTogJHtmaWxlfWAsIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDsi6TsoJwg7Iux7YGs66W8IOyImO2Wie2VmOuKlCDrs7jssrTsnoXri4jri6QuXG4gICAqIOuzgOqyveuQnCDtjIzsnbzrk6TsnYQg7YOA7J6F67OE66GcIOu2hOulmO2VmOqzoCDqsIEg7YOA7J6F7JeQIOunnuuKlCDslaHshZjsnYQg7Iuk7ZaJ7ZWp64uI64ukLlxuICAgKiBAcGFyYW0gZGlmZkZpbGVQYXRocyAtIOuzgOqyveuQnCDtjIzsnbzrk6TsnZgg7KCI64yAIOqyveuhnCDrqqnroZ1cbiAgICogQHJldHVybnMgZGlmZlR5cGVzIC0g67OA6rK965CcIO2MjOydvOydmCDtg4DsnoUg66qp66GdIChlbnRpdHksIHR5cGVzLCBtb2RlbCDrk7EpXG4gICAqL1xuICBhc3luYyBkb1N5bmNBY3Rpb25zKGRpZmZGaWxlUGF0aHM6IEFic29sdXRlUGF0aFtdKTogUHJvbWlzZTx7IGRpZmZUeXBlczogc3RyaW5nW10gfT4ge1xuICAgIGNvbnN0IGRpZmZHcm91cHMgPSB0aGlzLmNhbGN1bGF0ZURpZmZHcm91cHMoZGlmZkZpbGVQYXRocyk7XG4gICAgY29uc3QgZGlmZlR5cGVzID0gT2JqZWN0LmtleXMoZGlmZkdyb3VwcykgYXMgRmlsZVR5cGVbXTtcblxuICAgIC8vIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGjqsIAg67OA6rK965CcIOqyveyasFxuICAgIGlmIChkaWZmVHlwZXMuaW5jbHVkZXMoXCJlbnRpdHlcIikgfHwgZGlmZlR5cGVzLmluY2x1ZGVzKFwidHlwZXNcIikpIHtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlVHJ1dGhTb3VyY2VDaGFuZ2VzKGRpZmZHcm91cHMsIGRpZmZUeXBlcyk7XG4gICAgfVxuXG4gICAgLy8g7YOA6rKf7Jy866GcIOuzteyCrOunjCDtlZjrqbQg65CY64qUIO2MjOydvOydtCDrs4Dqsr3rkJwg6rK97JqwXG4gICAgaWYgKFxuICAgICAgZGlmZlR5cGVzLmluY2x1ZGVzKFwidHlwZXNcIikgfHxcbiAgICAgIGRpZmZUeXBlcy5pbmNsdWRlcyhcImZ1bmN0aW9uc1wiKSB8fFxuICAgICAgZGlmZlR5cGVzLmluY2x1ZGVzKFwiZ2VuZXJhdGVkXCIpXG4gICAgKSB7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZVN5bmNhYmxlRmlsZUNoYW5nZXMoZGlmZkdyb3Vwcyk7XG4gICAgfVxuXG4gICAgLy8g66qo6424L+2UhOugiOyehCDqtaztmITssrTqsIAg67OA6rK965CcIOqyveyasFxuICAgIGlmIChkaWZmVHlwZXMuaW5jbHVkZXMoXCJtb2RlbFwiKSB8fCBkaWZmVHlwZXMuaW5jbHVkZXMoXCJmcmFtZVwiKSkge1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVJbXBsZW1lbnRhdGlvbkNoYW5nZXMoZGlmZkdyb3Vwcyk7XG4gICAgfVxuXG4gICAgLy8g7ISk7KCVIO2MjOydvOydtCDrs4Dqsr3rkJwg6rK97JqwXG4gICAgaWYgKGRpZmZUeXBlcy5pbmNsdWRlcyhcImNvbmZpZ1wiKSkge1xuICAgICAgYXdhaXQgU3luY2VyQWN0aW9ucy5hY3Rpb25TeW5jQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgLy8g7JuM7YGs7ZSM66Gc7JqwIO2MjOydvOydtCDrs4Dqsr3rkJwg6rK97JqwXG4gICAgaWYgKGRpZmZUeXBlcy5pbmNsdWRlcyhcIndvcmtmbG93XCIpKSB7XG4gICAgICBhd2FpdCB0aGlzLmF1dG9sb2FkV29ya2Zsb3dzKCk7XG4gICAgfVxuXG4gICAgLy8gaTE4biDqtIDroKgg7YyM7J287J20IOuzgOqyveuQnCDqsr3smrBcbiAgICAvLyAtIGkxOG4vKi50czogbG9jYWxlIOuyiOyXrSDtjIzsnbxcbiAgICAvLyAtIGVudGl0eS5qc29uOiBlbnRpdHkgbGFiZWxzXG4gICAgLy8gLSBzb25hbXUuY29uZmlnLnRzOiBpMThuIOyEpOyglSAoZGVmYXVsdExvY2FsZSwgc3VwcG9ydGVkTG9jYWxlcylcbiAgICBpZiAoXG4gICAgICBkaWZmVHlwZXMuaW5jbHVkZXMoXCJpMThuXCIpIHx8XG4gICAgICBkaWZmVHlwZXMuaW5jbHVkZXMoXCJlbnRpdHlcIikgfHxcbiAgICAgIGRpZmZUeXBlcy5pbmNsdWRlcyhcImNvbmZpZ1wiKVxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy5zeW5jU0QoKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlmZlR5cGVzLFxuICAgIH07XG4gIH1cblxuICBjYWxjdWxhdGVEaWZmR3JvdXBzKGRpZmZGaWxlczogQWJzb2x1dGVQYXRoW10pOiBEaWZmR3JvdXBzIHtcbiAgICBjb25zdCBmaWxlVHlwZXMgPSBPYmplY3Qua2V5cyhjaGVja3N1bVBhdHRlcm5Hcm91cCkgYXMgRmlsZVR5cGVbXTtcblxuICAgIHJldHVybiBncm91cChkaWZmRmlsZXMsIChmaWxlUGF0aCkgPT4ge1xuICAgICAgLy8g7KCI64yAIOqyveuhnOyXkOyEnCBzcmMv66GcIOyLnOyeke2VmOuKlCDsg4HrjIAg6rK966GcIOu2gOu2hOydhCDstpTstpztlanri4jri6QuXG4gICAgICBjb25zdCBzcmNJbmRleCA9IGZpbGVQYXRoLmluZGV4T2YoXCIvc3JjL1wiKTtcbiAgICAgIGlmIChzcmNJbmRleCA9PT0gLTEpIHJldHVybiBcInVua25vd25cIjtcbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IGZpbGVQYXRoLnNsaWNlKHNyY0luZGV4ICsgMSk7IC8vIFwic3JjLy4uLlwiIO2Yle2DnFxuXG4gICAgICBmb3IgKGNvbnN0IGZpbGVUeXBlIG9mIGZpbGVUeXBlcykge1xuICAgICAgICBpZiAobWluaW1hdGNoKHJlbGF0aXZlUGF0aCwgY2hlY2tzdW1QYXR0ZXJuR3JvdXBbZmlsZVR5cGVdKSkge1xuICAgICAgICAgIHJldHVybiBmaWxlVHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICAgIH0pIGFzIHVua25vd24gYXMgRGlmZkdyb3VwcztcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVRydXRoU291cmNlQ2hhbmdlcyhkaWZmR3JvdXBzOiBEaWZmR3JvdXBzLCBkaWZmVHlwZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgTmFpdGUudChcImhhbmRsZVRydXRoU291cmNlQ2hhbmdlc1wiLCB7IGRpZmZHcm91cHMsIGRpZmZUeXBlcyB9KTtcblxuICAgIGF3YWl0IEVudGl0eU1hbmFnZXIucmVsb2FkKCk7XG5cbiAgICAvLyB0eXBlcyDsg53shLEoZW50aXR5IOyDiOuhnCDstpTqsIDrkJwg6rK97JqwKVxuICAgIC8vIHBhcmVudElk6rCAIOyXhuqzoCwgdHlwZXPqsIAg7JeG64qUIOqyveyasOyXkOunjCDsg53shLFcbiAgICBjb25zdCBlbnRpdHlQYXRoID0gZGlmZkdyb3Vwcy5lbnRpdHk/LmF0KDApO1xuICAgIGlmIChlbnRpdHlQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGVudGl0eUlkID0gRW50aXR5TWFuYWdlci5nZXRFbnRpdHlJZEZyb21QYXRoKGVudGl0eVBhdGgpO1xuICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgLy8g7ZSE66Gc7KCd7Yq47JeQIOyDneyEseuQmOyWtOyVvCDtlZjripQgLnRzIO2MjOydvOydmCDqsr3roZzsnoXri4jri6QuXG4gICAgICBjb25zdCB0eXBlRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICAgICAgYHNyYy9hcHBsaWNhdGlvbi8ke2VudGl0eS5uYW1lcy5mc30vJHtlbnRpdHkubmFtZXMuZnN9LnR5cGVzLnRzYCxcbiAgICAgICk7XG4gICAgICBpZiAoZW50aXR5LnBhcmVudElkID09PSB1bmRlZmluZWQgJiYgIShhd2FpdCBleGlzdHModHlwZUZpbGVQYXRoKSkpIHtcbiAgICAgICAgYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcImluaXRfdHlwZXNcIiwgeyBlbnRpdHlJZCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlU2NoZW1hcygpO1xuXG4gICAgZGlmZkdyb3Vwcy5nZW5lcmF0ZWQgPSB1bmlxdWUoW1xuICAgICAgLi4uKGRpZmZHcm91cHMuZ2VuZXJhdGVkID8/IFtdKSxcbiAgICAgIHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwic3JjL2FwcGxpY2F0aW9uL3NvbmFtdS5nZW5lcmF0ZWQudHNcIikgYXMgQWJzb2x1dGVQYXRoLFxuICAgIF0pO1xuICAgIGRpZmZUeXBlcy5wdXNoKFwiZ2VuZXJhdGVkXCIpO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlU3luY2FibGVGaWxlQ2hhbmdlcyhkaWZmR3JvdXBzOiBEaWZmR3JvdXBzKTogUHJvbWlzZTxGaWxlVHlwZVtdPiB7XG4gICAgY29uc3QgdHNQYXRocyA9IHVuaXF1ZShbXG4gICAgICAuLi4oZGlmZkdyb3Vwcy50eXBlcyA/PyBbXSksXG4gICAgICAuLi4oZGlmZkdyb3Vwcy5mdW5jdGlvbnMgPz8gW10pLFxuICAgICAgLi4uKGRpZmZHcm91cHMuZ2VuZXJhdGVkID8/IFtdKSxcbiAgICBdKTtcbiAgICBOYWl0ZS50KFwiaGFuZGxlU3luY2FibGVGaWxlQ2hhbmdlc1wiLCB7IGRpZmZHcm91cHMgfSk7XG5cbiAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAvLyAgIGNoYWxrLmdyYXkoXG4gICAgLy8gICAgIGBbUHJvY2Vzc2luZ10gSGFuZGxpbmcgdHlwZXMvZnVuY3Rpb25zL2dlbmVyYXRlZCBjaGFuZ2VzOiAke3RzUGF0aHMubWFwKChwKSA9PiBwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcGlSb290UGF0aCwgcCkpLmpvaW4oXCIsIFwiKX1gXG4gICAgLy8gICApXG4gICAgLy8gKTtcblxuICAgIGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uU3luY0ZpbGVzVG9UYXJnZXRzKHRzUGF0aHMpO1xuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlSW1wbGVtZW50YXRpb25DaGFuZ2VzKGRpZmZHcm91cHM6IERpZmZHcm91cHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBOYWl0ZS50KFwiaGFuZGxlSW1wbGVtZW50YXRpb25DaGFuZ2VzXCIsIHsgZGlmZkdyb3VwcyB9KTtcbiAgICBjb25zdCBtZXJnZWRHcm91cCA9IFsuLi4oZGlmZkdyb3Vwcy5tb2RlbCA/PyBbXSksIC4uLihkaWZmR3JvdXBzLmZyYW1lID8/IFtdKV07XG5cbiAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAvLyAgIGNoYWxrLmdyYXkoXG4gICAgLy8gICAgIGBbUHJvY2Vzc2luZ10gSGFuZGxpbmcgbW9kZWwvZnJhbWUgY2hhbmdlczogJHttZXJnZWRHcm91cC5tYXAoKHApID0+IHBhdGgucmVsYXRpdmUoU29uYW11LmFwaVJvb3RQYXRoLCBwKSkuam9pbihcIiwgXCIpfWBcbiAgICAvLyAgIClcbiAgICAvLyApO1xuXG4gICAgLy8gZ2VuZXJhdGVkX2h0dHAudGVtcGxhdGUudHPsl5DshJwgc3luY2VyLnR5cGVz66W8IOyUgeuLiOuLpC5cbiAgICAvLyBzZXJ2aWNlLnRlbXBsYXRlLnRz7JeQ7IScIHN5bmNlci5hcGlz66W8IOyUgeuLiOuLpC5cbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkTW9kZWxzKCk7XG4gICAgYXdhaXQgdGhpcy5hdXRvbG9hZFR5cGVzKCk7XG4gICAgYXdhaXQgdGhpcy5hdXRvbG9hZEFwaXMoKTtcblxuICAgIGNvbnN0IHBhcmFtczoge1xuICAgICAgbmFtZXNSZWNvcmQ6IEVudGl0eU5hbWVzUmVjb3JkO1xuICAgIH1bXSA9IG1lcmdlZEdyb3VwLm1hcCgobW9kZWxQYXRoKSA9PiB7XG4gICAgICBpZiAobW9kZWxQYXRoLmVuZHNXaXRoKFwiLm1vZGVsLnRzXCIpKSB7XG4gICAgICAgIGNvbnN0IGVudGl0eUlkID0gRW50aXR5TWFuYWdlci5nZXRFbnRpdHlJZEZyb21QYXRoKG1vZGVsUGF0aCk7XG4gICAgICAgIGFzc2VydChlbnRpdHlJZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZXNSZWNvcmQ6IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKG1vZGVsUGF0aC5lbmRzV2l0aChcIi5mcmFtZS50c1wiKSkge1xuICAgICAgICBjb25zdCBbLCBmcmFtZU5hbWVdID0gbW9kZWxQYXRoLm1hdGNoKC8uK1xcLyguKylcXC5mcmFtZVxcLnRzJC8pID8/IFtdO1xuICAgICAgICBhc3NlcnQoZnJhbWVOYW1lKTtcbiAgICAgICAgLy8gZnJhbWVOYW1l7J2EIFBhc2NhbENhc2XroZwg67OA7ZmYIChkYXNoYm9hcmQgLT4gRGFzaGJvYXJkKVxuICAgICAgICBjb25zdCBmcmFtZUlkID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShmcmFtZU5hbWUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWVzUmVjb3JkOiBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGZyYW1lSWQpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IHJlYWNoYWJsZVwiKTtcbiAgICB9KTtcblxuICAgIGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVTZXJ2aWNlcyhwYXJhbXMpO1xuICAgIGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVIdHRwcygpO1xuICAgIGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVTc3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDso7zslrTsp4Qg7JeU7Yuw7Yuw7JmAIO2FnO2UjOumvyDtgqTsl5Ag64yA7ZW0LCDsg53shLHrkJwg7L2U65Oc6rCAIOyhtOyerO2VmOuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gICAqIEBwYXJhbSBlbnRpdHlJZCDsl5Tti7Dti7AgSURcbiAgICogQHBhcmFtIHRlbXBsYXRlS2V5IO2FnO2UjOumvyDtgqRcbiAgICogQHBhcmFtIGVudW1JZCDsl7TqsbDtmJUgSURcbiAgICogQHJldHVybnMg7IOd7ISx65CcIOy9lOuTnOqwgCDsobTsnqztlZjripTsp4Ag7Jes67aAXG4gICAqL1xuICBhc3luYyBjaGVja0V4aXN0c0dlbkNvZGUoXG4gICAgZW50aXR5SWQ6IHN0cmluZyxcbiAgICB0ZW1wbGF0ZUtleTogVGVtcGxhdGVLZXksXG4gICAgZW51bUlkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHsgc3ViUGF0aDogc3RyaW5nOyBmdWxsUGF0aDogc3RyaW5nOyBpc0V4aXN0czogYm9vbGVhbiB9PiB7XG4gICAgY29uc3QgeyB0YXJnZXQsIHBhdGg6IGdlblBhdGggfSA9IFRlbXBsYXRlTWFuYWdlci5nZXQodGVtcGxhdGVLZXkpLmdldFRhcmdldEFuZFBhdGgoXG4gICAgICBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKSxcbiAgICAgIGVudW1JZCxcbiAgICApO1xuXG4gICAgY29uc3Qgc3ViUGF0aCA9IHBhdGguam9pbih0YXJnZXQsIGdlblBhdGgpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgc3ViUGF0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1YlBhdGgsXG4gICAgICBmdWxsUGF0aCxcbiAgICAgIGlzRXhpc3RzOiBhd2FpdCBleGlzdHMoZnVsbFBhdGgpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog7KO87Ja07KeEIOyXlO2LsO2LsOyZgCDsl7TqsbDtmJXsl5Ag64yA7ZW0LCDsg53shLHrkJwg7L2U65Oc6rCAIOyhtOyerO2VmOuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gICAqIEBwYXJhbSBlbnRpdHlJZCDsl5Tti7Dti7AgSURcbiAgICogQHBhcmFtIGVudW1zIOyXtOqxsO2YlSDroIjsnbTruJRcbiAgICogQHJldHVybnMg7IOd7ISx65CcIOy9lOuTnOqwgCDsobTsnqztlZjripTsp4Ag7Jes67aAXG4gICAqL1xuICBhc3luYyBjaGVja0V4aXN0cyhcbiAgICBlbnRpdHlJZDogc3RyaW5nLFxuICAgIGVudW1zOiB7XG4gICAgICBbbmFtZTogc3RyaW5nXTogei5ab2RFbnVtO1xuICAgIH0sXG4gICk6IFByb21pc2U8UmVjb3JkPGAke1RlbXBsYXRlS2V5fSR7c3RyaW5nfWAsIGJvb2xlYW4+PiB7XG4gICAgY29uc3Qga2V5czogVGVtcGxhdGVLZXlbXSA9IFRlbXBsYXRlS2V5Lm9wdGlvbnM7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcbiAgICBjb25zdCBlbnVtc0tleXMgPSBPYmplY3Qua2V5cyhlbnVtcykuZmlsdGVyKChuYW1lKSA9PiBuYW1lICE9PSBuYW1lcy5jb25zdGFudCk7XG5cbiAgICByZXR1cm4gYXdhaXQgcmVkdWNlQXN5bmMoXG4gICAgICBrZXlzLFxuICAgICAgYXN5bmMgKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHRwbCA9IFRlbXBsYXRlTWFuYWdlci5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKFwidmlld19lbnVtc1wiKSkge1xuICAgICAgICAgIGF3YWl0IG1hcEFzeW5jKGVudW1zS2V5cywgYXN5bmMgKGNvbXBvbmVudElkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHRhcmdldCwgcGF0aDogcCB9ID0gdHBsLmdldFRhcmdldEFuZFBhdGgobmFtZXMsIGNvbXBvbmVudElkKTtcbiAgICAgICAgICAgIHJlc3VsdFtgJHtrZXl9X18ke2NvbXBvbmVudElkfWBdID0gYXdhaXQgZXhpc3RzKFxuICAgICAgICAgICAgICBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQsIHApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB0YXJnZXQsIHBhdGg6IHAgfSA9IHRwbC5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzKTtcbiAgICAgICAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gICAgICAgIGlmICh0YXJnZXQuaW5jbHVkZXMoXCI6dGFyZ2V0XCIpKSB7XG4gICAgICAgICAgYXdhaXQgbWFwQXN5bmModGFyZ2V0cywgYXN5bmMgKHQpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdFtgJHtrZXl9X18ke3R9YF0gPSBhd2FpdCBleGlzdHMoXG4gICAgICAgICAgICAgIHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldC5yZXBsYWNlKFwiOnRhcmdldFwiLCB0KSwgcCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gYXdhaXQgZXhpc3RzKHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldCwgcCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgICB7fSBhcyBSZWNvcmQ8YCR7VGVtcGxhdGVLZXl9JHtzdHJpbmd9YCwgYm9vbGVhbj4sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlZjsnITtmLjtmZjsmqkg7ZSE66Gd7IucIOuplOyGjOuTnOyeheuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZUVudGl0eShmb3JtOiBUZW1wbGF0ZU9wdGlvbnNbXCJlbnRpdHlcIl0pIHtcbiAgICByZXR1cm4gYXdhaXQgY3JlYXRlRW50aXR5KGZvcm0pO1xuICB9XG5cbiAgLyoqXG4gICAqIO2VmOychO2YuO2ZmOyaqSDtlITroZ3si5wg66mU7IaM65Oc7J6F64uI64ukLlxuICAgKi9cbiAgYXN5bmMgZGVsRW50aXR5KGVudGl0eUlkOiBzdHJpbmcpOiBQcm9taXNlPHsgZGVsUGF0aHM6IHN0cmluZ1tdIH0+IHtcbiAgICByZXR1cm4gYXdhaXQgZGVsRW50aXR5KGVudGl0eUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlZjsnITtmLjtmZjsmqkg7ZSE66Gd7IucIOuplOyGjOuTnOyeheuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlVGVtcGxhdGU8VCBleHRlbmRzIFRlbXBsYXRlS2V5PihcbiAgICBrZXk6IFQsXG4gICAgdGVtcGxhdGVPcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbVF0sXG4gICAgX2dlbmVyYXRlT3B0aW9ucz86IEdlbmVyYXRlT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICAgIHJldHVybiBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKGtleSwgdGVtcGxhdGVPcHRpb25zLCBfZ2VuZXJhdGVPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlZjsnITtmLjtmZjsmqkg7ZSE66Gd7IucIOuplOyGjOuTnOyeheuLiOuLpC5cbiAgICovXG4gIGFzeW5jIHJlbmRlclRlbXBsYXRlPFQgZXh0ZW5kcyBrZXlvZiBUZW1wbGF0ZU9wdGlvbnM+KFxuICAgIGtleTogVCxcbiAgICB0ZW1wbGF0ZU9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tUXSxcbiAgKTogUHJvbWlzZTxQYXRoQW5kQ29kZVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHJlbmRlclRlbXBsYXRlKGtleSwgdGVtcGxhdGVPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlZjsnITtmLjtmZjsmqkg7ZSE66Gd7IucIOuplOyGjOuTnOyeheuLiOuLpC5cbiAgICovXG4gIGFzeW5jIHJlbmV3Q2hlY2tzdW1zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCByZW5ld0NoZWNrc3VtcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNEKFNvbmFtdSBEaWN0aW9uYXJ5KSDthZztlIzrpr/snYQg7IOd7ISx7ZWp64uI64ukLlxuICAgKi9cbiAgYXN5bmMgc3luY1NEKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdGFyZ2V0cyB9ID0gU29uYW11LmNvbmZpZy5zeW5jO1xuICAgIGNvbnN0IGkxOG5Db25maWcgPSBTb25hbXUuY29uZmlnLmkxOG47XG5cbiAgICBjb25zdCB0YXJnZXRMaXN0ID0gW1wiYXBpXCIsIC4uLnRhcmdldHNdIGFzIChcImFwaVwiIHwgXCJ3ZWJcIiB8IFwiYXBwXCIpW107XG5cbiAgICBjb25zdCBhcGlJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgU29uYW11LmNvbmZpZy5hcGkuZGlyLCBcInNyYy9pMThuXCIpO1xuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0TGlzdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gd2ViL2FwcOydmCDqsr3smrAgbG9jYWxlIO2MjOydvOuTpOydhCBhcGnsl5DshJwg67O17IKsXG4gICAgICAgIGlmICh0YXJnZXQgIT09IFwiYXBpXCIpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnN5bmNMb2NhbGVGaWxlcyh0YXJnZXQsIGFwaUkxOG5EaXIsIGkxOG5Db25maWcuc3VwcG9ydGVkTG9jYWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFwic2RcIiwgeyB0YXJnZXQgfSwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBnZW5lcmF0ZSBTRCB0ZW1wbGF0ZSBmb3IgJHt0YXJnZXR9OmAsIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBhcGnsnZggbG9jYWxlIO2MjOydvOydhCB3ZWIvYXBw7Jy866GcIOuzteyCrO2VqeuLiOuLpC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc3luY0xvY2FsZUZpbGVzKFxuICAgIHRhcmdldDogc3RyaW5nLFxuICAgIGFwaUkxOG5EaXI6IHN0cmluZyxcbiAgICBsb2NhbGVzOiBzdHJpbmdbXSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGFyZ2V0STE4bkRpciA9IHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldCwgXCJzcmMvaTE4blwiKTtcblxuICAgIC8vIOuUlOugie2GoOumrOqwgCDsl4bsnLzrqbQg7IOd7ISxXG4gICAgYXdhaXQgbWtkaXIodGFyZ2V0STE4bkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBsb2NhbGVzKSB7XG4gICAgICBjb25zdCBzb3VyY2VGaWxlID0gcGF0aC5qb2luKGFwaUkxOG5EaXIsIGAke2xvY2FsZX0udHNgKTtcbiAgICAgIGNvbnN0IHRhcmdldEZpbGUgPSBwYXRoLmpvaW4odGFyZ2V0STE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuXG4gICAgICBjb25zdCBzeW5jSGVhZGVyID0gW1xuICAgICAgICBcIi8qKlwiLFxuICAgICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgICAgXCIgKiBBUEnsl5DshJwg64+Z6riw7ZmU65CcIO2MjOydvOyeheuLiOuLpC4g7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICAgIFwiICovXCIsXG4gICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgICBhd2FpdCBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkKHNvdXJjZUZpbGUsIHRhcmdldEZpbGUsIHN5bmNIZWFkZXIpO1xuICAgICAgIWlzVGVzdCgpICYmXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJDb3BpZWQ6IFwiKSArIGNoYWxrLmN5YW4oYCR7dGFyZ2V0fS9zcmMvaTE4bi8ke2xvY2FsZX0udHNgKSk7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tCQVltRDtjQUNaO3NCQUNrQjtxQkFFZTthQUNqQzt3QkFFd0I7YUFFbEI7bUJBRWdCO29CQUNWO2tCQUNOO2dCQUMrQjtxQkFFWDtnQkFDVztzQkFDUjt5QkFDTjtxQkFDZ0M7cUJBRWI7c0JBRS9CO0NBTXJDLFNBQWIsTUFBb0I7RUFDbEIsT0FBbUIsRUFBRTtFQUNyQixRQUFxQixFQUFFO0VBQ3ZCLFNBQXVCLEVBQUU7RUFDekIsWUFBNkMsSUFBSSxLQUFLO0VBQ3RELGVBQTZCLElBQUksY0FBYzs7Ozs7O0VBTy9DLE1BQU0sT0FBc0I7R0FDMUIsTUFBTSxFQUFFLFlBQVksT0FBTyxPQUFPO0FBR2xDLFNBQU0sS0FBSyxvQkFBb0IsUUFBUTtHQUd2QyxNQUFNLGVBQWUsTUFBTSxnQ0FBZ0M7QUFDM0QsT0FBSSxhQUFhLFdBQVcsR0FBRztBQUM3QixZQUFRLElBQUksTUFBTSxNQUFNLFFBQVEsV0FBVyx3QkFBd0IsQ0FBQyxDQUFDO0FBR3JFLFFBQUk7QUFDRixXQUFNLGlCQUFpQixXQUFXLEVBQUUsRUFBRSxFQUFFLFdBQVcsT0FBTyxDQUFDO0FBQzNELFdBQU0saUJBQWlCLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxXQUFXLE9BQU8sQ0FBQzthQUN6RCxHQUFHO0FBRVYsU0FBSSxFQUFFLGFBQWEsNEJBQTRCO0FBQzdDLGNBQVEsTUFBTSxxQ0FBcUMsRUFBRTs7O0FBSXpEOztBQUtGLFNBQU0sd0JBQ0osWUFBWTtBQUVWLFVBQU0sS0FBSyxjQUFjLGFBQWE7QUFHdEMsVUFBTSxnQkFBZ0I7TUFFeEI7SUFBRSxpQkFBaUI7SUFBVyxhQUFhO0lBQU8sQ0FDbkQ7Ozs7Ozs7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
424
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2VyLmpzIiwibmFtZXMiOlsiU3luY2VyQWN0aW9ucy5hY3Rpb25TeW5jQ29uZmlnIiwiU3luY2VyQWN0aW9ucy5hY3Rpb25HZW5lcmF0ZVNjaGVtYXMiLCJTeW5jZXJBY3Rpb25zLmFjdGlvblN5bmNGaWxlc1RvVGFyZ2V0cyIsInBhcmFtczoge1xuICAgICAgbmFtZXNSZWNvcmQ6IEVudGl0eU5hbWVzUmVjb3JkO1xuICAgIH1bXSIsIlN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVTZXJ2aWNlcyIsIlN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVIdHRwcyIsIlN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVTc3IiLCJrZXlzOiBUZW1wbGF0ZUtleVtdIiwicCIsInRhcmdldCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvc3luY2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgbWtkaXIsIHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IGhvdCB9IGZyb20gXCJAc29uYW11LWtpdC9obXItaG9va1wiO1xuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHsgbWluaW1hdGNoIH0gZnJvbSBcIm1pbmltYXRjaFwiO1xuaW1wb3J0IHsgZ3JvdXAsIHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyB0eXBlIHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IHJlZ2lzdGVyZWRBcGlzIH0gZnJvbSBcIi4uL2FwaS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBBbHJlYWR5UHJvY2Vzc2VkRXhjZXB0aW9uIH0gZnJvbSBcIi4uL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IHR5cGUgV29ya2Zsb3dNZXRhZGF0YSB9IGZyb20gXCIuLi90YXNrcy9kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFRlbXBsYXRlTWFuYWdlciB9IGZyb20gXCIuLi90ZW1wbGF0ZS90ZW1wbGF0ZS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEdlbmVyYXRlT3B0aW9ucywgdHlwZSBQYXRoQW5kQ29kZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVLZXkgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBtYXBBc3luYywgcmVkdWNlQXN5bmMgfSBmcm9tIFwiLi4vdXRpbHMvYXN5bmMtdXRpbHNcIjtcbmltcG9ydCB7IGNlbnRlclRleHQgfSBmcm9tIFwiLi4vdXRpbHMvY29uc29sZS11dGlsXCI7XG5pbXBvcnQgeyBpc1Rlc3QgfSBmcm9tIFwiLi4vdXRpbHMvY29udHJvbGxlclwiO1xuaW1wb3J0IHsgY29weUZpbGVXaXRoUmVwbGFjZUNvcmVUb1NoYXJlZCwgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxzL2ZzLXV0aWxzXCI7XG5pbXBvcnQgeyB0eXBlIEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyBydW5XaXRoR3JhY2VmdWxTaHV0ZG93biB9IGZyb20gXCIuLi91dGlscy9wcm9jZXNzLXV0aWxzXCI7XG5pbXBvcnQgeyBmaW5kQ2hhbmdlZEZpbGVzVXNpbmdDaGVja3N1bXMsIHJlbmV3Q2hlY2tzdW1zIH0gZnJvbSBcIi4vY2hlY2tzdW1cIjtcbmltcG9ydCB7IGdlbmVyYXRlVGVtcGxhdGUsIHJlbmRlclRlbXBsYXRlIH0gZnJvbSBcIi4vY29kZS1nZW5lcmF0b3JcIjtcbmltcG9ydCB7IGNyZWF0ZUVudGl0eSwgZGVsRW50aXR5IH0gZnJvbSBcIi4vZW50aXR5LW9wZXJhdGlvbnNcIjtcbmltcG9ydCB7IGNoZWNrc3VtUGF0dGVybkdyb3VwLCBnZXRDaGVja3N1bVBhdHRlcm5Hcm91cEluQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4vZmlsZS1wYXR0ZXJuc1wiO1xuaW1wb3J0IHsgdHlwZSBGaWxlVHlwZSB9IGZyb20gXCIuL2ZpbGUtcGF0dGVybnNcIjtcbmltcG9ydCB7IGxvYWRBcGlzLCBsb2FkTW9kZWxzLCBsb2FkVHlwZXMsIGxvYWRXb3JrZmxvd3MgfSBmcm9tIFwiLi9tb2R1bGUtbG9hZGVyXCI7XG5pbXBvcnQgeyB0eXBlIExvYWRlZEFwaXMsIHR5cGUgTG9hZGVkTW9kZWxzLCB0eXBlIExvYWRlZFR5cGVzIH0gZnJvbSBcIi4vbW9kdWxlLWxvYWRlclwiO1xuaW1wb3J0ICogYXMgU3luY2VyQWN0aW9ucyBmcm9tIFwiLi9zeW5jZXItYWN0aW9uc1wiO1xuXG50eXBlIERpZmZHcm91cHMgPSB7XG4gIFtrZXkgaW4gRmlsZVR5cGVdOiBBYnNvbHV0ZVBhdGhbXTtcbn07XG5cbmV4cG9ydCBjbGFzcyBTeW5jZXIge1xuICBhcGlzOiBMb2FkZWRBcGlzID0gW107XG4gIHR5cGVzOiBMb2FkZWRUeXBlcyA9IHt9O1xuICBtb2RlbHM6IExvYWRlZE1vZGVscyA9IHt9O1xuICB3b3JrZmxvd3M6IE1hcDxzdHJpbmcsIFdvcmtmbG93TWV0YWRhdGFbXT4gPSBuZXcgTWFwKCk7XG4gIGV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiDssrTtgazshKzsnbQg67OA6rK965CcIOu2gOu2hOyXkCDrjIDtlbQg7Iux7YGs66W8IOynhO2Wie2VqeuLiOuLpC5cbiAgICogc29uYW11LnNoYXJlZC50c+uKlCDtjIzsnbzsnbQg7JeG7J2EIOuVjOunjCAx7ZqMIOyDneyEse2VmOqzoCwg7J207ZuE7JeQ64qUIOuNruyWtOyTsOyngCDslYrsirXri4jri6QuXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhc3luYyBzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdGFyZ2V0cyB9ID0gU29uYW11LmNvbmZpZy5zeW5jO1xuXG4gICAgLy8gc29uYW11LnNoYXJlZC50c+uKlCDtjIzsnbzsnbQg7JeG7J2EIOuVjOunjCAx7ZqMIOyDneyEse2VqeuLiOuLpC5cbiAgICBhd2FpdCB0aGlzLmNvcHlTaGFyZWRUb1RhcmdldHModGFyZ2V0cyk7XG5cbiAgICAvLyDqt7gg64uk7J2M67aA7YSw64qUIOuzgOqyveuQnCDtjIzsnbzsnYQg7LC+7JWE7IScIOuPmeq4sO2ZlCDsnpHsl4XsnYQg7Iuk7ZaJ7ZWp64uI64ukLlxuICAgIGNvbnN0IGNoYW5nZWRGaWxlcyA9IGF3YWl0IGZpbmRDaGFuZ2VkRmlsZXNVc2luZ0NoZWNrc3VtcygpO1xuICAgIGlmIChjaGFuZ2VkRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ibGFjay5iZ0dyZWVuKGNlbnRlclRleHQoXCJBbGwgZmlsZXMgYXJlIHN5bmNlZCFcIikpKTtcblxuICAgICAgLy8g67OA6rK97IKs7ZWt7J20IOyXhuyWtOuPhCBTU1Ig7YWc7ZSM66a/7J2AIOyDneyEsSAo7LSI6riwIOyEpOyglSDsi5wsIOydtOuvuCDsobTsnqztlZjrqbQg7Iqk7YK1KVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcInF1ZXJpZXNcIiwge30sIHsgb3ZlcndyaXRlOiBmYWxzZSB9KTtcbiAgICAgICAgYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcImVudHJ5X3NlcnZlclwiLCB7fSwgeyBvdmVyd3JpdGU6IGZhbHNlIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyDtjIzsnbzsnbQg7J2066+4IOyhtOyerO2VmOuptCDrrLTsi5xcbiAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24pKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBnZW5lcmF0ZSBTU1IgdGVtcGxhdGVzOlwiLCBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8g66eM7JW9IOyLse2BrCDspJHsl5Ag7ZSE66Gc7IS47Iqk6rCAIOyjveycvOuptCDqvKzsl6zrsoTrpqzquLAg65WM66y47JeQLFxuICAgIC8vIOyLnOq3uOuEkOyXkOuPhCDsnqDsi5wg67KE7Yu4IOyImCDsnojripQg7ZmY6rK9IOyGjeyXkOyEnCDsi7Htgazrpbwg7Iuk7ZaJ7ZWp64uI64ukLlxuICAgIGF3YWl0IHJ1bldpdGhHcmFjZWZ1bFNodXRkb3duKFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyDslpjqsIAg7Iux7YGsIOyekeyXhSDsiJjtlontlZjripQg67O47LK07J6F64uI64ukLlxuICAgICAgICBhd2FpdCB0aGlzLmRvU3luY0FjdGlvbnMoY2hhbmdlZEZpbGVzKTtcblxuICAgICAgICAvLyDsi7Htgawg7JWh7IWY7J20IOuBneuCmOuptCDtla3sg4Eg7LK07YGs7ISs7J2EIOuLpOyLnCDqsLHsi6Dtlanri4jri6QuXG4gICAgICAgIGF3YWl0IHJlbmV3Q2hlY2tzdW1zKCk7XG4gICAgICB9LFxuICAgICAgeyB3aGVuVGhpc0hhcHBlbnM6IFwiU0lHVVNSMlwiLCB3YWl0Rm9yVXBUbzogMjAwMDAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhdGNoZXLqsIAg6rCQ7KeA7ZWcIO2MjOydvCDrs4Dqsr0g7IKs7ZWt7JeQIOuMgO2VtCDsi7Htgazrpbwg7KeE7ZaJ7ZWp64uI64ukLlxuICAgKiDso7zslrTsp4Qg67OA6rK9IO2MjOydvOuTpCDspJEg7LK07YGs7ISsIOq0gOumrCDrjIDsg4Hsnbgg6rKD65Ok66eMIOqwgOyguOuLpOqwgCDsi7Htgazrpbwg7KeE7ZaJ7ZWp64uI64ukLlxuICAgKiDssrTtgazshKwg7YyM7J28IOyXheuNsOydtO2KuOuKlCDsl6zquLDsl5DshJwg7ZWY7KeAIOyViuyKteuLiOuLpC4g7Zi47Lac7J6Q6rCAIO2VqeuLiOuLpC5cbiAgICogQHBhcmFtIGRpZmZGaWxlUGF0aCAtIOuzgOqyvSDtjIzsnbzrk6QuIO2UhOuhnOygne2KuCDro6jtirjrtoDthLAgXCJzcmMvXCIg65iQ64qUIFwiZGlzdC9cIuuhnCDsi5zsnpHtlZjripQg7IOB64yAIOqyveuhnOyeheuLiOuLpC4g7JiI7IucOiBcInNyYy9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwudHNcIlxuICAgKi9cbiAgYXN5bmMgc3luY0Zyb21XYXRjaGVyKGV2ZW50OiBzdHJpbmcsIGRpZmZGaWxlUGF0aDogQWJzb2x1dGVQYXRoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGV2ZW50ICE9PSBcImNoYW5nZVwiICYmIGV2ZW50ICE9PSBcImFkZFwiICYmIGV2ZW50ICE9PSBcInVubGlua1wiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU1NSIOyEpOyglSDtjIzsnbwg67OA6rK9IOqwkOyngFxuICAgIGlmIChkaWZmRmlsZVBhdGguaW5jbHVkZXMoXCIvc3JjL3Nzci9cIikpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQueWVsbG93KFwiU1NSIGNvbmZpZyBjaGFuZ2VkIC0gcmVsb2FkaW5nLi4uXCIpKTtcbiAgICAgIC8vIFNTUiDtjIzsnbzrj4QgaW52YWxpZGF0ZSDtm4QgcmVsb2FkXG4gICAgICBpZiAoIWlzVGVzdCgpKSB7XG4gICAgICAgIGF3YWl0IGhvdC5pbnZhbGlkYXRlRmlsZShkaWZmRmlsZVBhdGgsIGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYXV0b2xvYWRTU1JSb3V0ZXMoKTtcbiAgICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQoXCJvbkhNUkNvbXBsZXRlZFwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDsnbzri6gg67OA6rK965CcIO2MjOydvOqzvCBkZXBlbmRlbnQg7YyM7J2865Ok7J2EIGludmFsaWRhdGUg7ZWp64uI64ukLlxuICAgIC8vIO2VnCDrsogg7J207IOBIGltcG9ydOuQnCDsuZzqtazrk6Tsl5Ag64yA7ZW07ISc66eMIOyLpOygnCDsnpHsl4XsnbQg7J287Ja064Kp64uI64ukLlxuICAgIC8vIOq3uOufrOuLiCDslYjsi6ztlZjqs6AgaW52YWxpZGF0ZSDtlbTrj4Qg65Cp64uI64ukLlxuICAgIC8vIO2FjOyKpO2KuCDtmZjqsr3sl5DshJzripQgaG90LmludmFsaWRhdGVGaWxl7IucIOy0iOq4sCDsl5Drn6zqsIAg67Cc7IOd7ZWY6riwIOuVjOusuOyXkCBpbnZhbGlkYXRlIO2VmOyngCDslYrsirXri4jri6QuXG4gICAgaWYgKCFpc1Rlc3QoKSkge1xuICAgICAgY29uc3QgaW52YWxpZGF0ZWRQYXRocyA9IChhd2FpdCBob3QuaW52YWxpZGF0ZUZpbGUoZGlmZkZpbGVQYXRoLCBldmVudCkpIGFzIEFic29sdXRlUGF0aFtdO1xuXG4gICAgICBpZiAoaW52YWxpZGF0ZWRQYXRocy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoYPCflIQgSW52YWxpZGF0ZWQ6YCkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgaW52YWxpZGF0ZWRQYXRoIG9mIGludmFsaWRhdGVkUGF0aHMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8g66eM7JW9IG1vZGVsLnRzIO2MjOydvOydtCDrs4Dqsr0oaW52YWxpZGF0ZSnrkJjsl4jri6Q/IOq3uOufrOuptCByZWdpc3RlcmVkQXBpcyDspJHsl5DshJwg7J20IOuqqOuNuOyXkCDtlbTri7ntlZjripQgYXBp65Ok7J2AIOyngOybjOykmOyalC5cbiAgICAgICAgICAgIC8vIHJlZ2lzdGVyZWRBcGlz64qUIO2GteycvOuhnCDri6Qg64Kg66Ck67KE66a0IOyImCDsl4bsirXri4jri6QuIHJlZ2lzdGVyZWRBcGlz7JeQIOyYrOudvOyYpOuKlCDsuZzqtazrk6TsnYAg7LSI6riwIOuhnOuTnOyLnCDrmJDripQgSE1S7Iuc7JeQ66eMIOuTseuhneuQmOq4sCDrlYzrrLjsnoXri4jri6QuXG4gICAgICAgICAgICAvLyDrlLDrnbzshJwgbW9kZWwudHMg7YyM7J287J2YIOuzgOqyveycvOuhnCDri6TsnYzrsogg7IOI66Gc7Jq0IGV2YWzsnbQg7JiI7IOB65CY64qUIOydtCDsi5zsoJDsl5DshJzrp4wsIOydtCDrqqjrjbjsl5DshJwg64KY7JioIHJlZ2lzdGVyZWRBcGlz65Ok7J2EIOyngOybjOykhCDsiJgg7J6I7Iq164uI64ukLlxuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZEFwaXMgPSB0aGlzLnJlbW92ZUludmFsaWRhdGVkUmVnaXN0ZXJlZEFwaXMoaW52YWxpZGF0ZWRQYXRoKTtcbiAgICAgICAgICAgIGlmIChyZW1vdmVkQXBpcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIGNoYWxrLmJsdWUoYC0gJHtwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcGlSb290UGF0aCwgaW52YWxpZGF0ZWRQYXRoKX1gKSxcbiAgICAgICAgICAgICAgICBjaGFsay5ncmF5KGAod2l0aCAke3JlbW92ZWRBcGlzLmxlbmd0aH0gQVBJcylgKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJsdWUoYC0gJHtwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcGlSb290UGF0aCwgaW52YWxpZGF0ZWRQYXRoKX1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGNoYWxrLnJlZChgRmFpbGVkIHRvIHJlbW92ZSBpbnZhbGlkYXRlZCByZWdpc3RlcmVkIEFQSXMgZm9yICR7aW52YWxpZGF0ZWRQYXRofWApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkZXZSdW5uZXIg7Zmc7ISx7ZmUIOyLnCwg67OA6rK965CcIOyGjOyKpCDtjIzsnbzsnYQgVml0ZXN0IOuqqOuTiCDqt7jrnpjtlITsl5DshJzrj4Qg66y07Zqo7ZmU7ZWp64uI64ukLlxuICAgIC8vIFZpdGXsnZggbW9kdWxlR3JhcGguaW52YWxpZGF0ZU1vZHVsZSgp7J20IGltcG9ydGVyIOuwqe2WpeycvOuhnCDsnqzqt4DsoIEgY2FzY2FkZe2VmOuvgOuhnCxcbiAgICAvLyDshozsiqQg7YyM7J28IO2VmOuCmOunjCDrrLTtmqjtmZTtlZjrqbQg7J2066W8IGltcG9ydO2VmOuKlCDthYzsiqTtirgg7YyM7J2864+EIOyekOuPmeycvOuhnCDrrLTtmqjtmZTrkKnri4jri6QuXG4gICAgaWYgKCFpc1Rlc3QoKSAmJiBTb25hbXUuY29uZmlnLnRlc3Q/LmRldlJ1bm5lcj8uZW5hYmxlZCAmJiBTb25hbXUuZGV2Vml0ZXN0TWFuYWdlcikge1xuICAgICAgU29uYW11LmRldlZpdGVzdE1hbmFnZXIuaW52YWxpZGF0ZUZpbGVzKFtkaWZmRmlsZVBhdGhdKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjaGFsay5kaW0oYFRlc3QgaW52YWxpZGF0ZWQ6ICR7cGF0aC5yZWxhdGl2ZShTb25hbXUuYXBpUm9vdFBhdGgsIGRpZmZGaWxlUGF0aCl9YCksXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGlzSW5DaGVja1BhdHRlcm5Hcm91cCA9IE9iamVjdC52YWx1ZXMoZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXBJbkFic29sdXRlUGF0aCgpKS5zb21lKFxuICAgICAgKHBhdHRlcm4pID0+IG1pbmltYXRjaChkaWZmRmlsZVBhdGgsIHBhdHRlcm4pLFxuICAgICk7XG5cbiAgICAvLyDtlaAg7J28KHN5bmMp7J20IOyeiOycvOuptCDtlanri4jri6QuXG4gICAgaWYgKGlzSW5DaGVja1BhdHRlcm5Hcm91cCkge1xuICAgICAgYXdhaXQgdGhpcy5kb1N5bmNBY3Rpb25zKFtkaWZmRmlsZVBhdGhdKTtcbiAgICB9XG5cbiAgICAvLyDsi7Htgawg7J6R7JeF7J20IOuBneuCmOuptCDrqqjrk6Ag66qo65OI7J2EIOuhnOuTnO2VqeuLiOuLpC5cbiAgICAvLyBobXItaG9va+yXkCDsnZjtlbQgaW52YWxpZGF0ZeuQnCDrtoDrtoTrk6TsnbQg7JWE64uI652866m0IOy6kOyLnCDqt7jrjIDroZwg7Jyg7KeA7ZWp64uI64ukLlxuICAgIGF3YWl0IHRoaXMuYXV0b2xvYWRUeXBlcygpO1xuICAgIGF3YWl0IHRoaXMuYXV0b2xvYWRNb2RlbHMoKTtcbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkQXBpcygpO1xuICAgIGF3YWl0IHRoaXMuYXV0b2xvYWRXb3JrZmxvd3MoKTtcblxuICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQoXCJvbkhNUkNvbXBsZXRlZFwiKTtcbiAgfVxuXG4gIHJlbW92ZUludmFsaWRhdGVkUmVnaXN0ZXJlZEFwaXMoXG4gICAgaW52YWxpZGF0ZWRQYXRoOiBBYnNvbHV0ZVBhdGgsXG4gICk6ICh0eXBlb2YgcmVnaXN0ZXJlZEFwaXMpW251bWJlcl1bXSB7XG4gICAgaWYgKCFpbnZhbGlkYXRlZFBhdGguZW5kc1dpdGgoXCIubW9kZWwudHNcIiAvKuyGjOyKpCDsvZTrk5zrpbwg64uk66Oo64qUIOyDge2ZqeydtOuLiCAudHMg6rK966Gc66GcIOu0heuLiOuLpC4qLykpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRpdHlJZCA9IEVudGl0eU1hbmFnZXIuZ2V0RW50aXR5SWRGcm9tUGF0aChpbnZhbGlkYXRlZFBhdGgpO1xuICAgIGNvbnN0IHRvUmVtb3ZlID0gcmVnaXN0ZXJlZEFwaXMuZmlsdGVyKChhcGkpID0+IGFwaS5tb2RlbE5hbWUgPT09IGAke2VudGl0eUlkfU1vZGVsYCk7XG4gICAgZm9yIChjb25zdCBhcGkgb2YgdG9SZW1vdmUpIHtcbiAgICAgIGNvbnN0IGlkeCA9IHJlZ2lzdGVyZWRBcGlzLmluZGV4T2YoYXBpKTtcbiAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgIHJlZ2lzdGVyZWRBcGlzLnNwbGljZShpZHgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1JlbW92ZTtcbiAgfVxuXG4gIGFzeW5jIGNvcHlTaGFyZWRUb1RhcmdldHModGFyZ2V0czogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBwbHVyYWwudHMg64K07Jqp7J2EIOydveyWtOyEnCBzaGFyZWQg7YyM7J287JeQIOyCveyehe2VqeuLiOuLpC5cbiAgICBjb25zdCBkaWN0VXRpbHNQYXRoID0gcGF0aC5qb2luKFxuICAgICAgaW1wb3J0Lm1ldGEuZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIiksXG4gICAgICBcIi4uL2RpY3QvdXRpbHMudHNcIixcbiAgICApO1xuICAgIGNvbnN0IGRpY3RVdGlsc0NvZGUgPSAoYXdhaXQgZXhpc3RzKGRpY3RVdGlsc1BhdGgpKVxuICAgICAgPyBhd2FpdCByZWFkRmlsZShkaWN0VXRpbHNQYXRoLCBcInV0Zi04XCIpXG4gICAgICA6IFwiXCI7XG5cbiAgICAvLyDtirnsoJUg67OA7IiYIOy5mO2ZmOydhCDsnITtlbTshJwg7IKs7Jqp7ZWp64uI64ukLlxuICAgIGNvbnN0IGNvbnZlcnRNYXAgPSB7XG4gICAgICBiYXNlVXJsOlxuICAgICAgICBTb25hbXUuY29uZmlnLnNlcnZlci5iYXNlVXJsID8/XG4gICAgICAgIGBodHRwOi8vJHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIn06JHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/LnBvcnQgPz8gMzAwMH1gLFxuICAgICAgZGljdFV0aWxzOiBkaWN0VXRpbHNDb2RlLFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAvLyDsp4DquIgg6rCA7KC46rCA66Ck64qUIOydtCDtjIzsnbzsnYAgU29uYW11IOy9lOuTnOuyoOydtOyKpOydmCDsnbzrtoDsnoXri4jri6QuXG4gICAgICAvLyDqt7jrn7DrjbAgZGlzdCDsho0g67mM65Oc65CcIOyGjOyKpCDsvZTrk5wg7YyM7J287J20IO2VhOyalO2VnCDqsoPsnbQg7JWE64uI6rOgLCBzcmPsl5Drp4wg7J6I64qUIO2FjeyKpO2KuCDtjIzsnbzsnbQg7ZWE7JqU7ZWp64uI64ukLlxuICAgICAgLy8g65Sw65287IScIC9zcmMv7JeQ7IScIOywvuyKteuLiOuLpC5cbiAgICAgIGNvbnN0IHNyY1BhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgIGltcG9ydC5tZXRhLmRpcm5hbWUucmVwbGFjZShcIi9kaXN0L1wiLCBcIi9zcmMvXCIpLFxuICAgICAgICBgLi4vc2hhcmVkLyR7dGFyZ2V0fS5zaGFyZWQudHMudHh0YCxcbiAgICAgICk7XG4gICAgICBpZiAoIShhd2FpdCBleGlzdHMoc3JjUGF0aCkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCEoYXdhaXQgZXhpc3RzKHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldCkpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRyaWVkIHRvIGNvcHkgc29uYW11LnNoYXJlZC50cyB0byB0YXJnZXQgJyR7dGFyZ2V0fScgYnV0IHRoZSB0YXJnZXQgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBQbGVhc2UgY2hlY2sgeW91ciBwcm9qZWN0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZnVsbFRleHQgPSBhd2FpdCByZWFkRmlsZShzcmNQYXRoLCBcInV0Zi04XCIpO1xuICAgICAgY29uc3QgY29udmVydGVkVGV4dCA9IE9iamVjdC5lbnRyaWVzKGNvbnZlcnRNYXApLnJlZHVjZShcbiAgICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiBhY2MucmVwbGFjZShgJFtbJHtrZXl9XV1gLCB2YWx1ZSksXG4gICAgICAgIGZ1bGxUZXh0LFxuICAgICAgKTtcblxuICAgICAgLy8g7J206rG0IO2UhOuhnOygne2KuOyXkCAudHMg7IaM7IqkIOy9lOuTnCDtjIzsnbzsnYQg7IOd7ISx7ZWY64qUIOqyg+ydtOuvgOuhnCBzcmPsnZggLnRzIOqyveuhnOuhnCDqsJHri4jri6QuXG4gICAgICBjb25zdCBkZXN0UGF0aCA9IHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldCwgXCJzcmMvc2VydmljZXMvc29uYW11LnNoYXJlZC50c1wiKTtcblxuICAgICAgLy8g7KCV66eQIO2YueyLnOuCmOyngOunjCB0YXJnZXQg65SU66CJ7Yag66as64qUIOyeiOyWtOuPhCBzcmMvc2VydmljZXMg65SU66CJ7Yag66as64qUIOyXhuydhCDsiJgg7J6I7Jy866+A66GcIOuvuOumrCDsg53shLHtlbTspI3ri4jri6QuXG4gICAgICBpZiAoIShhd2FpdCBleGlzdHMocGF0aC5kaXJuYW1lKGRlc3RQYXRoKSkpKSB7XG4gICAgICAgIGF3YWl0IG1rZGlyKHBhdGguZGlybmFtZShkZXN0UGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBjb25zb2xlLndhcm4oYENyZWF0ZWQgZGlyZWN0b3J5ICcke3BhdGguZGlybmFtZShkZXN0UGF0aCl9JyBiZWNhdXNlIGl0IGRpZCBub3QgZXhpc3QuYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIO2MjOydvOydtCDsnbTrr7gg7KG07J6s7ZWY66m0IOqxtOuEiOucgeuLiOuLpC5cbiAgICAgIC8vIHNvbmFtdS5zaGFyZWQudHPripQg7ZSE66Gc7KCd7Yq47JeQ7IScIOyekOycoOuhreqyjCDsu6TsiqTthLDrp4jsnbTsp5XtlaAg7IiYIOyeiOyWtOyVvCDtlZjrr4DroZwsXG4gICAgICAvLyDstZzstIggMe2ajOunjCDsg53shLHtlZjqs6Ag7J207ZuE7JeQ64qUIOuNruyWtOyTsOyngCDslYrsirXri4jri6QuXG4gICAgICAvLyDthZztlIzrpr8g64K07JqpKCRbW2RpY3RVdGlsc11dIOuTsSnsnbQg67OA6rK965CY7JeI7J2EIOuVjCDrsJjsmIHsnbQg7ZWE7JqU7ZWY66m0LFxuICAgICAgLy8g7ZW064u5IO2MjOydvOydhCDsgq3soJztlZwg65KkIGBwbnBtIHNvbmFtdSBzeW5jYOuhnCDsnqzsg53shLHtlZjrqbQg65Cp64uI64ukLlxuICAgICAgaWYgKGF3YWl0IGV4aXN0cyhkZXN0UGF0aCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHdyaXRlRmlsZShkZXN0UGF0aCwgY29udmVydGVkVGV4dCk7XG4gICAgICAhaXNUZXN0KCkgJiZcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY2hhbGsuYm9sZChcIkNvcGllZDogXCIpICsgY2hhbGsuYmx1ZShwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcHBSb290UGF0aCwgZGVzdFBhdGgpKSxcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhdXRvbG9hZFR5cGVzKCkge1xuICAgIHRoaXMudHlwZXMgPSBhd2FpdCBsb2FkVHlwZXMoKTtcbiAgfVxuXG4gIGFzeW5jIGF1dG9sb2FkTW9kZWxzKCkge1xuICAgIHRoaXMubW9kZWxzID0gYXdhaXQgbG9hZE1vZGVscygpO1xuICB9XG5cbiAgYXN5bmMgYXV0b2xvYWRBcGlzKCkge1xuICAgIHRoaXMuYXBpcyA9IGF3YWl0IGxvYWRBcGlzKCk7XG4gIH1cblxuICBhc3luYyBhdXRvbG9hZFdvcmtmbG93cygpIHtcbiAgICB0aGlzLndvcmtmbG93cyA9IGF3YWl0IGxvYWRXb3JrZmxvd3MoKTtcbiAgICBhd2FpdCBTb25hbXUud29ya2Zsb3dzLnN5bmNocm9uaXplKHRoaXMud29ya2Zsb3dzKTtcbiAgfVxuXG4gIGFzeW5jIGF1dG9sb2FkU1NSUm91dGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNzckNvbmZpZ1BhdGggPSBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBcInNyYy9zc3JcIik7XG5cbiAgICAvLyDquLDsobQgcm91dGVzIOy0iOq4sO2ZlFxuICAgIGNvbnN0IHsgY2xlYXJTU1JSb3V0ZXMgfSA9IGF3YWl0IGltcG9ydChcIi4uL3NzclwiKTtcbiAgICBjbGVhclNTUlJvdXRlcygpO1xuXG4gICAgLy8gc3NyIO2PtOuNlCDsl4bsnLzrqbQg7Iqk7YK1XG4gICAgaWYgKCEoYXdhaXQgZXhpc3RzKHNzckNvbmZpZ1BhdGgpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHNzciDtj7TrjZQg7JWI7J2YIOuqqOuToCAudHMg7YyM7J28IOuhnOuTnFxuICAgIGNvbnN0IHsgZ2xvYkFzeW5jIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi91dGlscy9hc3luYy11dGlsc1wiKTtcbiAgICBjb25zdCB7IGltcG9ydE1lbWJlcnMgfSA9IGF3YWl0IGltcG9ydChcIi4uL3V0aWxzL2VzbS11dGlsc1wiKTtcbiAgICBjb25zdCB7IHJ1bnRpbWVQYXRoIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi91dGlscy9wYXRoLXV0aWxzXCIpO1xuXG4gICAgLy8gcnVudGltZVBhdGjrpbwg7IKs7Jqp7ZWY7JesIOqwnOuwnC/tlITroZzrjZXshZgg7ZmY6rK97JeQIOunnuuKlCDtmZXsnqXsnpAg7LKY66asXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCBnbG9iQXN5bmMocGF0aC5qb2luKHNzckNvbmZpZ1BhdGgsIHJ1bnRpbWVQYXRoKFwiKiovKi50c1wiKSkpO1xuXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBpbXBvcnRNZW1iZXJz66W8IOyCrOyaqe2VmOuptCDtjIzsnbzsnZggc2lkZSBlZmZlY3QocmVnaXN0ZXJTU1Ig7Zi47LacKeqwgCDsi6TtlonrkKhcbiAgICAgICAgYXdhaXQgaW1wb3J0TWVtYmVycyhmaWxlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgU1NSIHJvdXRlOiAke2ZpbGV9YCwgZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOyLpOygnCDsi7Htgazrpbwg7IiY7ZaJ7ZWY64qUIOuzuOyytOyeheuLiOuLpC5cbiAgICog67OA6rK965CcIO2MjOydvOuTpOydhCDtg4DsnoXrs4TroZwg67aE66WY7ZWY6rOgIOqwgSDtg4DsnoXsl5Ag66ee64qUIOyVoeyFmOydhCDsi6Ttlontlanri4jri6QuXG4gICAqIEBwYXJhbSBkaWZmRmlsZVBhdGhzIC0g67OA6rK965CcIO2MjOydvOuTpOydmCDsoIjrjIAg6rK966GcIOuqqeuhnVxuICAgKiBAcmV0dXJucyBkaWZmVHlwZXMgLSDrs4Dqsr3rkJwg7YyM7J287J2YIO2DgOyehSDrqqnroZ0gKGVudGl0eSwgdHlwZXMsIG1vZGVsIOuTsSlcbiAgICovXG4gIGFzeW5jIGRvU3luY0FjdGlvbnMoZGlmZkZpbGVQYXRoczogQWJzb2x1dGVQYXRoW10pOiBQcm9taXNlPHsgZGlmZlR5cGVzOiBzdHJpbmdbXSB9PiB7XG4gICAgY29uc3QgZGlmZkdyb3VwcyA9IHRoaXMuY2FsY3VsYXRlRGlmZkdyb3VwcyhkaWZmRmlsZVBhdGhzKTtcbiAgICBjb25zdCBkaWZmVHlwZXMgPSBPYmplY3Qua2V5cyhkaWZmR3JvdXBzKSBhcyBGaWxlVHlwZVtdO1xuXG4gICAgLy8gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aOqwgCDrs4Dqsr3rkJwg6rK97JqwXG4gICAgaWYgKGRpZmZUeXBlcy5pbmNsdWRlcyhcImVudGl0eVwiKSB8fCBkaWZmVHlwZXMuaW5jbHVkZXMoXCJ0eXBlc1wiKSkge1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVUcnV0aFNvdXJjZUNoYW5nZXMoZGlmZkdyb3VwcywgZGlmZlR5cGVzKTtcbiAgICB9XG5cbiAgICAvLyDtg4Dqsp/snLzroZwg67O17IKs66eMIO2VmOuptCDrkJjripQg7YyM7J287J20IOuzgOqyveuQnCDqsr3smrBcbiAgICBpZiAoXG4gICAgICBkaWZmVHlwZXMuaW5jbHVkZXMoXCJ0eXBlc1wiKSB8fFxuICAgICAgZGlmZlR5cGVzLmluY2x1ZGVzKFwiZnVuY3Rpb25zXCIpIHx8XG4gICAgICBkaWZmVHlwZXMuaW5jbHVkZXMoXCJnZW5lcmF0ZWRcIilcbiAgICApIHtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlU3luY2FibGVGaWxlQ2hhbmdlcyhkaWZmR3JvdXBzKTtcbiAgICB9XG5cbiAgICAvLyDrqqjrjbgv7ZSE66CI7J6EIOq1rO2YhOyytOqwgCDrs4Dqsr3rkJwg6rK97JqwXG4gICAgaWYgKGRpZmZUeXBlcy5pbmNsdWRlcyhcIm1vZGVsXCIpIHx8IGRpZmZUeXBlcy5pbmNsdWRlcyhcImZyYW1lXCIpKSB7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZUltcGxlbWVudGF0aW9uQ2hhbmdlcyhkaWZmR3JvdXBzKTtcbiAgICB9XG5cbiAgICAvLyDshKTsoJUg7YyM7J287J20IOuzgOqyveuQnCDqsr3smrBcbiAgICBpZiAoZGlmZlR5cGVzLmluY2x1ZGVzKFwiY29uZmlnXCIpKSB7XG4gICAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvblN5bmNDb25maWcoKTtcbiAgICB9XG5cbiAgICAvLyDsm4ztgaztlIzroZzsmrAg7YyM7J287J20IOuzgOqyveuQnCDqsr3smrBcbiAgICBpZiAoZGlmZlR5cGVzLmluY2x1ZGVzKFwid29ya2Zsb3dcIikpIHtcbiAgICAgIGF3YWl0IHRoaXMuYXV0b2xvYWRXb3JrZmxvd3MoKTtcbiAgICB9XG5cbiAgICAvLyBpMThuIOq0gOugqCDtjIzsnbzsnbQg67OA6rK965CcIOqyveyasFxuICAgIC8vIC0gaTE4bi8qLnRzOiBsb2NhbGUg67KI7JetIO2MjOydvFxuICAgIC8vIC0gZW50aXR5Lmpzb246IGVudGl0eSBsYWJlbHNcbiAgICAvLyAtIHNvbmFtdS5jb25maWcudHM6IGkxOG4g7ISk7KCVIChkZWZhdWx0TG9jYWxlLCBzdXBwb3J0ZWRMb2NhbGVzKVxuICAgIGlmIChcbiAgICAgIGRpZmZUeXBlcy5pbmNsdWRlcyhcImkxOG5cIikgfHxcbiAgICAgIGRpZmZUeXBlcy5pbmNsdWRlcyhcImVudGl0eVwiKSB8fFxuICAgICAgZGlmZlR5cGVzLmluY2x1ZGVzKFwiY29uZmlnXCIpXG4gICAgKSB7XG4gICAgICBhd2FpdCB0aGlzLnN5bmNTRCgpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkaWZmVHlwZXMsXG4gICAgfTtcbiAgfVxuXG4gIGNhbGN1bGF0ZURpZmZHcm91cHMoZGlmZkZpbGVzOiBBYnNvbHV0ZVBhdGhbXSk6IERpZmZHcm91cHMge1xuICAgIGNvbnN0IGZpbGVUeXBlcyA9IE9iamVjdC5rZXlzKGNoZWNrc3VtUGF0dGVybkdyb3VwKSBhcyBGaWxlVHlwZVtdO1xuXG4gICAgcmV0dXJuIGdyb3VwKGRpZmZGaWxlcywgKGZpbGVQYXRoKSA9PiB7XG4gICAgICAvLyDsoIjrjIAg6rK966Gc7JeQ7IScIHNyYy/roZwg7Iuc7J6R7ZWY64qUIOyDgeuMgCDqsr3roZwg67aA67aE7J2EIOy2lOy2nO2VqeuLiOuLpC5cbiAgICAgIGNvbnN0IHNyY0luZGV4ID0gZmlsZVBhdGguaW5kZXhPZihcIi9zcmMvXCIpO1xuICAgICAgaWYgKHNyY0luZGV4ID09PSAtMSkgcmV0dXJuIFwidW5rbm93blwiO1xuICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gZmlsZVBhdGguc2xpY2Uoc3JjSW5kZXggKyAxKTsgLy8gXCJzcmMvLi4uXCIg7ZiV7YOcXG5cbiAgICAgIGZvciAoY29uc3QgZmlsZVR5cGUgb2YgZmlsZVR5cGVzKSB7XG4gICAgICAgIGlmIChtaW5pbWF0Y2gocmVsYXRpdmVQYXRoLCBjaGVja3N1bVBhdHRlcm5Hcm91cFtmaWxlVHlwZV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZpbGVUeXBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gICAgfSkgYXMgdW5rbm93biBhcyBEaWZmR3JvdXBzO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlVHJ1dGhTb3VyY2VDaGFuZ2VzKGRpZmZHcm91cHM6IERpZmZHcm91cHMsIGRpZmZUeXBlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBOYWl0ZS50KFwiaGFuZGxlVHJ1dGhTb3VyY2VDaGFuZ2VzXCIsIHsgZGlmZkdyb3VwcywgZGlmZlR5cGVzIH0pO1xuXG4gICAgYXdhaXQgRW50aXR5TWFuYWdlci5yZWxvYWQoKTtcblxuICAgIC8vIHR5cGVzIOyDneyEsShlbnRpdHkg7IOI66GcIOy2lOqwgOuQnCDqsr3smrApXG4gICAgLy8gcGFyZW50SWTqsIAg7JeG6rOgLCB0eXBlc+qwgCDsl4bripQg6rK97Jqw7JeQ66eMIOyDneyEsVxuICAgIGNvbnN0IGVudGl0eVBhdGggPSBkaWZmR3JvdXBzLmVudGl0eT8uYXQoMCk7XG4gICAgaWYgKGVudGl0eVBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZW50aXR5SWQgPSBFbnRpdHlNYW5hZ2VyLmdldEVudGl0eUlkRnJvbVBhdGgoZW50aXR5UGF0aCk7XG4gICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAvLyDtlITroZzsoJ3tirjsl5Ag7IOd7ISx65CY7Ja07JW8IO2VmOuKlCAudHMg7YyM7J287J2YIOqyveuhnOyeheuLiOuLpC5cbiAgICAgIGNvbnN0IHR5cGVGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgICAgICBgc3JjL2FwcGxpY2F0aW9uLyR7ZW50aXR5Lm5hbWVzLmZzfS8ke2VudGl0eS5uYW1lcy5mc30udHlwZXMudHNgLFxuICAgICAgKTtcbiAgICAgIGlmIChlbnRpdHkucGFyZW50SWQgPT09IHVuZGVmaW5lZCAmJiAhKGF3YWl0IGV4aXN0cyh0eXBlRmlsZVBhdGgpKSkge1xuICAgICAgICBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFwiaW5pdF90eXBlc1wiLCB7IGVudGl0eUlkIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVTY2hlbWFzKCk7XG5cbiAgICBkaWZmR3JvdXBzLmdlbmVyYXRlZCA9IHVuaXF1ZShbXG4gICAgICAuLi4oZGlmZkdyb3Vwcy5nZW5lcmF0ZWQgPz8gW10pLFxuICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmMvYXBwbGljYXRpb24vc29uYW11LmdlbmVyYXRlZC50c1wiKSBhcyBBYnNvbHV0ZVBhdGgsXG4gICAgXSk7XG4gICAgZGlmZlR5cGVzLnB1c2goXCJnZW5lcmF0ZWRcIik7XG4gIH1cblxuICBhc3luYyBoYW5kbGVTeW5jYWJsZUZpbGVDaGFuZ2VzKGRpZmZHcm91cHM6IERpZmZHcm91cHMpOiBQcm9taXNlPEZpbGVUeXBlW10+IHtcbiAgICBjb25zdCB0c1BhdGhzID0gdW5pcXVlKFtcbiAgICAgIC4uLihkaWZmR3JvdXBzLnR5cGVzID8/IFtdKSxcbiAgICAgIC4uLihkaWZmR3JvdXBzLmZ1bmN0aW9ucyA/PyBbXSksXG4gICAgICAuLi4oZGlmZkdyb3Vwcy5nZW5lcmF0ZWQgPz8gW10pLFxuICAgIF0pO1xuICAgIE5haXRlLnQoXCJoYW5kbGVTeW5jYWJsZUZpbGVDaGFuZ2VzXCIsIHsgZGlmZkdyb3VwcyB9KTtcblxuICAgIC8vIGNvbnNvbGUubG9nKFxuICAgIC8vICAgY2hhbGsuZ3JheShcbiAgICAvLyAgICAgYFtQcm9jZXNzaW5nXSBIYW5kbGluZyB0eXBlcy9mdW5jdGlvbnMvZ2VuZXJhdGVkIGNoYW5nZXM6ICR7dHNQYXRocy5tYXAoKHApID0+IHBhdGgucmVsYXRpdmUoU29uYW11LmFwaVJvb3RQYXRoLCBwKSkuam9pbihcIiwgXCIpfWBcbiAgICAvLyAgIClcbiAgICAvLyApO1xuXG4gICAgYXdhaXQgU3luY2VyQWN0aW9ucy5hY3Rpb25TeW5jRmlsZXNUb1RhcmdldHModHNQYXRocyk7XG5cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBhc3luYyBoYW5kbGVJbXBsZW1lbnRhdGlvbkNoYW5nZXMoZGlmZkdyb3VwczogRGlmZkdyb3Vwcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIE5haXRlLnQoXCJoYW5kbGVJbXBsZW1lbnRhdGlvbkNoYW5nZXNcIiwgeyBkaWZmR3JvdXBzIH0pO1xuICAgIGNvbnN0IG1lcmdlZEdyb3VwID0gWy4uLihkaWZmR3JvdXBzLm1vZGVsID8/IFtdKSwgLi4uKGRpZmZHcm91cHMuZnJhbWUgPz8gW10pXTtcblxuICAgIC8vIGNvbnNvbGUubG9nKFxuICAgIC8vICAgY2hhbGsuZ3JheShcbiAgICAvLyAgICAgYFtQcm9jZXNzaW5nXSBIYW5kbGluZyBtb2RlbC9mcmFtZSBjaGFuZ2VzOiAke21lcmdlZEdyb3VwLm1hcCgocCkgPT4gcGF0aC5yZWxhdGl2ZShTb25hbXUuYXBpUm9vdFBhdGgsIHApKS5qb2luKFwiLCBcIil9YFxuICAgIC8vICAgKVxuICAgIC8vICk7XG5cbiAgICAvLyBnZW5lcmF0ZWRfaHR0cC50ZW1wbGF0ZS50c+yXkOyEnCBzeW5jZXIudHlwZXPrpbwg7JSB64uI64ukLlxuICAgIC8vIHNlcnZpY2UudGVtcGxhdGUudHPsl5DshJwgc3luY2VyLmFwaXPrpbwg7JSB64uI64ukLlxuICAgIGF3YWl0IHRoaXMuYXV0b2xvYWRNb2RlbHMoKTtcbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkVHlwZXMoKTtcbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkQXBpcygpO1xuXG4gICAgY29uc3QgcGFyYW1zOiB7XG4gICAgICBuYW1lc1JlY29yZDogRW50aXR5TmFtZXNSZWNvcmQ7XG4gICAgfVtdID0gbWVyZ2VkR3JvdXAubWFwKChtb2RlbFBhdGgpID0+IHtcbiAgICAgIGlmIChtb2RlbFBhdGguZW5kc1dpdGgoXCIubW9kZWwudHNcIikgfHwgbW9kZWxQYXRoLmVuZHNXaXRoKFwiLmZyYW1lLnRzXCIpKSB7XG4gICAgICAgIGNvbnN0IGVudGl0eUlkID0gRW50aXR5TWFuYWdlci5nZXRFbnRpdHlJZEZyb21QYXRoKG1vZGVsUGF0aCk7XG4gICAgICAgIGFzc2VydChlbnRpdHlJZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZXNSZWNvcmQ6IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IHJlYWNoYWJsZVwiKTtcbiAgICB9KTtcblxuICAgIGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVTZXJ2aWNlcyhwYXJhbXMpO1xuICAgIGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVIdHRwcygpO1xuICAgIGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVTc3IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDso7zslrTsp4Qg7JeU7Yuw7Yuw7JmAIO2FnO2UjOumvyDtgqTsl5Ag64yA7ZW0LCDsg53shLHrkJwg7L2U65Oc6rCAIOyhtOyerO2VmOuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gICAqIEBwYXJhbSBlbnRpdHlJZCDsl5Tti7Dti7AgSURcbiAgICogQHBhcmFtIHRlbXBsYXRlS2V5IO2FnO2UjOumvyDtgqRcbiAgICogQHBhcmFtIGVudW1JZCDsl7TqsbDtmJUgSURcbiAgICogQHJldHVybnMg7IOd7ISx65CcIOy9lOuTnOqwgCDsobTsnqztlZjripTsp4Ag7Jes67aAXG4gICAqL1xuICBhc3luYyBjaGVja0V4aXN0c0dlbkNvZGUoXG4gICAgZW50aXR5SWQ6IHN0cmluZyxcbiAgICB0ZW1wbGF0ZUtleTogVGVtcGxhdGVLZXksXG4gICAgZW51bUlkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHsgc3ViUGF0aDogc3RyaW5nOyBmdWxsUGF0aDogc3RyaW5nOyBpc0V4aXN0czogYm9vbGVhbiB9PiB7XG4gICAgY29uc3QgeyB0YXJnZXQsIHBhdGg6IGdlblBhdGggfSA9IFRlbXBsYXRlTWFuYWdlci5nZXQodGVtcGxhdGVLZXkpLmdldFRhcmdldEFuZFBhdGgoXG4gICAgICBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKSxcbiAgICAgIGVudW1JZCxcbiAgICApO1xuXG4gICAgY29uc3Qgc3ViUGF0aCA9IHBhdGguam9pbih0YXJnZXQsIGdlblBhdGgpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgc3ViUGF0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1YlBhdGgsXG4gICAgICBmdWxsUGF0aCxcbiAgICAgIGlzRXhpc3RzOiBhd2FpdCBleGlzdHMoZnVsbFBhdGgpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog7KO87Ja07KeEIOyXlO2LsO2LsOyZgCDsl7TqsbDtmJXsl5Ag64yA7ZW0LCDsg53shLHrkJwg7L2U65Oc6rCAIOyhtOyerO2VmOuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gICAqIEBwYXJhbSBlbnRpdHlJZCDsl5Tti7Dti7AgSURcbiAgICogQHBhcmFtIGVudW1zIOyXtOqxsO2YlSDroIjsnbTruJRcbiAgICogQHJldHVybnMg7IOd7ISx65CcIOy9lOuTnOqwgCDsobTsnqztlZjripTsp4Ag7Jes67aAXG4gICAqL1xuICBhc3luYyBjaGVja0V4aXN0cyhcbiAgICBlbnRpdHlJZDogc3RyaW5nLFxuICAgIGVudW1zOiB7XG4gICAgICBbbmFtZTogc3RyaW5nXTogei5ab2RFbnVtO1xuICAgIH0sXG4gICk6IFByb21pc2U8UmVjb3JkPGAke1RlbXBsYXRlS2V5fSR7c3RyaW5nfWAsIGJvb2xlYW4+PiB7XG4gICAgY29uc3Qga2V5czogVGVtcGxhdGVLZXlbXSA9IFRlbXBsYXRlS2V5Lm9wdGlvbnM7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcbiAgICBjb25zdCBlbnVtc0tleXMgPSBPYmplY3Qua2V5cyhlbnVtcykuZmlsdGVyKChuYW1lKSA9PiBuYW1lICE9PSBuYW1lcy5jb25zdGFudCk7XG5cbiAgICByZXR1cm4gYXdhaXQgcmVkdWNlQXN5bmMoXG4gICAgICBrZXlzLFxuICAgICAgYXN5bmMgKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHRwbCA9IFRlbXBsYXRlTWFuYWdlci5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKFwidmlld19lbnVtc1wiKSkge1xuICAgICAgICAgIGF3YWl0IG1hcEFzeW5jKGVudW1zS2V5cywgYXN5bmMgKGNvbXBvbmVudElkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHRhcmdldCwgcGF0aDogcCB9ID0gdHBsLmdldFRhcmdldEFuZFBhdGgobmFtZXMsIGNvbXBvbmVudElkKTtcbiAgICAgICAgICAgIHJlc3VsdFtgJHtrZXl9X18ke2NvbXBvbmVudElkfWBdID0gYXdhaXQgZXhpc3RzKFxuICAgICAgICAgICAgICBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQsIHApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB0YXJnZXQsIHBhdGg6IHAgfSA9IHRwbC5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzKTtcbiAgICAgICAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gICAgICAgIGlmICh0YXJnZXQuaW5jbHVkZXMoXCI6dGFyZ2V0XCIpKSB7XG4gICAgICAgICAgYXdhaXQgbWFwQXN5bmModGFyZ2V0cywgYXN5bmMgKHQpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdFtgJHtrZXl9X18ke3R9YF0gPSBhd2FpdCBleGlzdHMoXG4gICAgICAgICAgICAgIHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldC5yZXBsYWNlKFwiOnRhcmdldFwiLCB0KSwgcCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gYXdhaXQgZXhpc3RzKHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldCwgcCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgICB7fSBhcyBSZWNvcmQ8YCR7VGVtcGxhdGVLZXl9JHtzdHJpbmd9YCwgYm9vbGVhbj4sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlZjsnITtmLjtmZjsmqkg7ZSE66Gd7IucIOuplOyGjOuTnOyeheuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZUVudGl0eShmb3JtOiBUZW1wbGF0ZU9wdGlvbnNbXCJlbnRpdHlcIl0pIHtcbiAgICByZXR1cm4gYXdhaXQgY3JlYXRlRW50aXR5KGZvcm0pO1xuICB9XG5cbiAgLyoqXG4gICAqIO2VmOychO2YuO2ZmOyaqSDtlITroZ3si5wg66mU7IaM65Oc7J6F64uI64ukLlxuICAgKi9cbiAgYXN5bmMgZGVsRW50aXR5KGVudGl0eUlkOiBzdHJpbmcpOiBQcm9taXNlPHsgZGVsUGF0aHM6IHN0cmluZ1tdIH0+IHtcbiAgICByZXR1cm4gYXdhaXQgZGVsRW50aXR5KGVudGl0eUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlZjsnITtmLjtmZjsmqkg7ZSE66Gd7IucIOuplOyGjOuTnOyeheuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlVGVtcGxhdGU8VCBleHRlbmRzIFRlbXBsYXRlS2V5PihcbiAgICBrZXk6IFQsXG4gICAgdGVtcGxhdGVPcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbVF0sXG4gICAgX2dlbmVyYXRlT3B0aW9ucz86IEdlbmVyYXRlT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICAgIHJldHVybiBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKGtleSwgdGVtcGxhdGVPcHRpb25zLCBfZ2VuZXJhdGVPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlZjsnITtmLjtmZjsmqkg7ZSE66Gd7IucIOuplOyGjOuTnOyeheuLiOuLpC5cbiAgICovXG4gIGFzeW5jIHJlbmRlclRlbXBsYXRlPFQgZXh0ZW5kcyBrZXlvZiBUZW1wbGF0ZU9wdGlvbnM+KFxuICAgIGtleTogVCxcbiAgICB0ZW1wbGF0ZU9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tUXSxcbiAgKTogUHJvbWlzZTxQYXRoQW5kQ29kZVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHJlbmRlclRlbXBsYXRlKGtleSwgdGVtcGxhdGVPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlZjsnITtmLjtmZjsmqkg7ZSE66Gd7IucIOuplOyGjOuTnOyeheuLiOuLpC5cbiAgICovXG4gIGFzeW5jIHJlbmV3Q2hlY2tzdW1zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCByZW5ld0NoZWNrc3VtcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNEKFNvbmFtdSBEaWN0aW9uYXJ5KSDthZztlIzrpr/snYQg7IOd7ISx7ZWp64uI64ukLlxuICAgKi9cbiAgYXN5bmMgc3luY1NEKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdGFyZ2V0cyB9ID0gU29uYW11LmNvbmZpZy5zeW5jO1xuICAgIGNvbnN0IGkxOG5Db25maWcgPSBTb25hbXUuY29uZmlnLmkxOG47XG5cbiAgICBjb25zdCB0YXJnZXRMaXN0ID0gW1wiYXBpXCIsIC4uLnRhcmdldHNdIGFzIChcImFwaVwiIHwgXCJ3ZWJcIiB8IFwiYXBwXCIpW107XG5cbiAgICBjb25zdCBhcGlJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgU29uYW11LmNvbmZpZy5hcGkuZGlyLCBcInNyYy9pMThuXCIpO1xuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0TGlzdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gd2ViL2FwcOydmCDqsr3smrAgbG9jYWxlIO2MjOydvOuTpOydhCBhcGnsl5DshJwg67O17IKsXG4gICAgICAgIGlmICh0YXJnZXQgIT09IFwiYXBpXCIpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnN5bmNMb2NhbGVGaWxlcyh0YXJnZXQsIGFwaUkxOG5EaXIsIGkxOG5Db25maWcuc3VwcG9ydGVkTG9jYWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFwic2RcIiwgeyB0YXJnZXQgfSwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBnZW5lcmF0ZSBTRCB0ZW1wbGF0ZSBmb3IgJHt0YXJnZXR9OmAsIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBhcGnsnZggbG9jYWxlIO2MjOydvOydhCB3ZWIvYXBw7Jy866GcIOuzteyCrO2VqeuLiOuLpC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc3luY0xvY2FsZUZpbGVzKFxuICAgIHRhcmdldDogc3RyaW5nLFxuICAgIGFwaUkxOG5EaXI6IHN0cmluZyxcbiAgICBsb2NhbGVzOiBzdHJpbmdbXSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGFyZ2V0STE4bkRpciA9IHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldCwgXCJzcmMvaTE4blwiKTtcblxuICAgIC8vIOuUlOugie2GoOumrOqwgCDsl4bsnLzrqbQg7IOd7ISxXG4gICAgYXdhaXQgbWtkaXIodGFyZ2V0STE4bkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBsb2NhbGVzKSB7XG4gICAgICBjb25zdCBzb3VyY2VGaWxlID0gcGF0aC5qb2luKGFwaUkxOG5EaXIsIGAke2xvY2FsZX0udHNgKTtcbiAgICAgIGNvbnN0IHRhcmdldEZpbGUgPSBwYXRoLmpvaW4odGFyZ2V0STE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuXG4gICAgICBjb25zdCBzeW5jSGVhZGVyID0gW1xuICAgICAgICBcIi8qKlwiLFxuICAgICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgICAgXCIgKiBBUEnsl5DshJwg64+Z6riw7ZmU65CcIO2MjOydvOyeheuLiOuLpC4g7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICAgIFwiICovXCIsXG4gICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgICBhd2FpdCBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkKHNvdXJjZUZpbGUsIHRhcmdldEZpbGUsIHN5bmNIZWFkZXIpO1xuICAgICAgIWlzVGVzdCgpICYmXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJDb3BpZWQ6IFwiKSArIGNoYWxrLmN5YW4oYCR7dGFyZ2V0fS9zcmMvaTE4bi8ke2xvY2FsZX0udHNgKSk7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0JBV21EO2NBQ1o7c0JBQ2tCO3FCQUVlO2FBQ2pDO3dCQUV3QjthQUVsQjttQkFFZ0I7b0JBQ1Y7a0JBQ047Z0JBQytCO3FCQUVYO2dCQUNXO3NCQUNSO3lCQUNOO3FCQUNnQztxQkFFYjtzQkFFL0I7Q0FNckMsU0FBYixNQUFvQjtFQUNsQixPQUFtQixFQUFFO0VBQ3JCLFFBQXFCLEVBQUU7RUFDdkIsU0FBdUIsRUFBRTtFQUN6QixZQUE2QyxJQUFJLEtBQUs7RUFD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
@@ -77,7 +77,8 @@ export async function render(url: string, preloadedData: PreloadedData[] = []) {
77
77
  "/**",
78
78
  " * @generated",
79
79
  " * 직접 수정하지 마세요.",
80
- " */"
80
+ " */",
81
+ ""
81
82
  ]
82
83
  };
83
84
  }
@@ -85,4 +86,4 @@ export async function render(url: string, preloadedData: PreloadedData[] = []) {
85
86
 
86
87
  //#endregion
87
88
  export { Template__entry_server };
88
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnktc2VydmVyLnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZW50cnktc2VydmVyLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2VudHJ5X3NlcnZlciBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJlbnRyeV9zZXJ2ZXJcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyY1wiLFxuICAgICAgcGF0aDogYGVudHJ5LXNlcnZlci5nZW5lcmF0ZWQudHN4YCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHt9OiBUZW1wbGF0ZU9wdGlvbnNbXCJlbnRyeV9zZXJ2ZXJcIl0pIHtcbiAgICBjb25zdCBib2R5ID0gYFxuaW1wb3J0IHsgUXVlcnlDbGllbnQsIGRlaHlkcmF0ZSB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBjcmVhdGVNZW1vcnlIaXN0b3J5LCBjcmVhdGVSb3V0ZXIsIFJvdXRlclByb3ZpZGVyIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgeyByZW5kZXJUb1N0cmluZyB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuaW1wb3J0IHsgcm91dGVUcmVlIH0gZnJvbSAnLi9yb3V0ZVRyZWUuZ2VuJztcbmltcG9ydCB7IFN1c3BlbnNlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCB0eXBlIFByZWxvYWRlZERhdGEgPSB7XG4gIHF1ZXJ5S2V5OiBhbnlbXTtcbiAgZGF0YTogYW55O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcih1cmw6IHN0cmluZywgcHJlbG9hZGVkRGF0YTogUHJlbG9hZGVkRGF0YVtdID0gW10pIHtcbiAgLy8gUXVlcnlDbGllbnQg7IOd7ISxXG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KHtcbiAgICBkZWZhdWx0T3B0aW9uczoge1xuICAgICAgcXVlcmllczoge1xuICAgICAgICBzdGFsZVRpbWU6IDUwMDAsXG4gICAgICAgIHJldHJ5OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gUHJlbG9hZGVkIOuNsOydtO2EsOulvCBxdWVyeUNsaWVudOyXkCDsp4HsoJEg7KO87J6FXG4gIGZvciAoY29uc3QgeyBxdWVyeUtleSwgZGF0YSB9IG9mIHByZWxvYWRlZERhdGEpIHtcbiAgICBxdWVyeUNsaWVudC5zZXRRdWVyeURhdGEocXVlcnlLZXksIGRhdGEpO1xuICB9XG5cbiAgLy8gRGVoeWRyYXRlXG4gIGNvbnN0IGRlaHlkcmF0ZWRTdGF0ZSA9IGRlaHlkcmF0ZShxdWVyeUNsaWVudCk7XG5cbiAgLy8gU1NS7JqpIOuplOuqqOumrCDtnojsiqTthqDrpqwg7IOd7ISxXG4gIGNvbnN0IG1lbW9yeUhpc3RvcnkgPSBjcmVhdGVNZW1vcnlIaXN0b3J5KHtcbiAgICBpbml0aWFsRW50cmllczogW3VybF0sXG4gIH0pO1xuXG4gIC8vIFJvdXRlciDsg53shLEgKFNTUiDrqqjrk5wpXG4gIGNvbnN0IHJvdXRlciA9IGNyZWF0ZVJvdXRlcih7XG4gICAgcm91dGVUcmVlLFxuICAgIGNvbnRleHQ6IHsgcXVlcnlDbGllbnQgfSxcbiAgICBoaXN0b3J5OiBtZW1vcnlIaXN0b3J5LFxuICAgIGRlZmF1bHRQcmVsb2FkOiAnaW50ZW50JyxcbiAgfSk7XG5cbiAgLy8g65287Jqw7YSwIOy0iOq4sO2ZlDogU1NS7JeQ7IScIOuwmOuTnOyLnCBhd2FpdCByb3V0ZXIubG9hZCgpIO2YuOy2nCDtlYTsmpRcbiAgYXdhaXQgcm91dGVyLmxvYWQoKTtcblxuICAvLyBSb3V0ZXJQcm92aWRlcuunjCDroIzrjZTrp4EgKFN1c3BlbnNl66GcIOuemO2VkSAtIGh5ZHJhdGlvbiBtaXNtYXRjaCDrsKnsp4ApXG4gIGNvbnN0IGFwcEh0bWwgPSByZW5kZXJUb1N0cmluZyg8U3VzcGVuc2UgZmFsbGJhY2s9e251bGx9PjxSb3V0ZXJQcm92aWRlciByb3V0ZXI9e3JvdXRlcn0gLz48L1N1c3BlbnNlPik7XG5cbiAgcmV0dXJuIHtcbiAgICBodG1sOiBhcHBIdG1sLFxuICAgIGRlaHlkcmF0ZWRTdGF0ZSxcbiAgfTtcbn1cbiAgICBgLnRyaW0oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcIi8qKlwiLCBcIiAqIEBnZW5lcmF0ZWRcIiwgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIiwgXCIgKi9cIl0sXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7ZUFDdUM7QUFFdkMsSUFBYSx5QkFBYixjQUE0QyxTQUFTO0NBQ25ELGNBQWM7QUFDWixRQUFNLGVBQWU7O0NBR3ZCLG1CQUFtQjtBQUNqQixTQUFPO0dBQ0wsUUFBUTtHQUNSLE1BQU07R0FDUDs7Q0FHSCxPQUFPLElBQXFDO0VBQzFDLE1BQU0sT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXVEWCxNQUFNO0FBRVIsU0FBTztHQUNMLEdBQUcsS0FBSyxrQkFBa0I7R0FDMUI7R0FDQSxZQUFZLEVBQUU7R0FDZCxlQUFlO0lBQUM7SUFBTztJQUFpQjtJQUFtQjtJQUFNO0dBQ2xFIn0=
89
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnktc2VydmVyLnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZW50cnktc2VydmVyLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2VudHJ5X3NlcnZlciBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJlbnRyeV9zZXJ2ZXJcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyY1wiLFxuICAgICAgcGF0aDogYGVudHJ5LXNlcnZlci5nZW5lcmF0ZWQudHN4YCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHt9OiBUZW1wbGF0ZU9wdGlvbnNbXCJlbnRyeV9zZXJ2ZXJcIl0pIHtcbiAgICBjb25zdCBib2R5ID0gYFxuaW1wb3J0IHsgUXVlcnlDbGllbnQsIGRlaHlkcmF0ZSB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBjcmVhdGVNZW1vcnlIaXN0b3J5LCBjcmVhdGVSb3V0ZXIsIFJvdXRlclByb3ZpZGVyIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgeyByZW5kZXJUb1N0cmluZyB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuaW1wb3J0IHsgcm91dGVUcmVlIH0gZnJvbSAnLi9yb3V0ZVRyZWUuZ2VuJztcbmltcG9ydCB7IFN1c3BlbnNlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCB0eXBlIFByZWxvYWRlZERhdGEgPSB7XG4gIHF1ZXJ5S2V5OiBhbnlbXTtcbiAgZGF0YTogYW55O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcih1cmw6IHN0cmluZywgcHJlbG9hZGVkRGF0YTogUHJlbG9hZGVkRGF0YVtdID0gW10pIHtcbiAgLy8gUXVlcnlDbGllbnQg7IOd7ISxXG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KHtcbiAgICBkZWZhdWx0T3B0aW9uczoge1xuICAgICAgcXVlcmllczoge1xuICAgICAgICBzdGFsZVRpbWU6IDUwMDAsXG4gICAgICAgIHJldHJ5OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gUHJlbG9hZGVkIOuNsOydtO2EsOulvCBxdWVyeUNsaWVudOyXkCDsp4HsoJEg7KO87J6FXG4gIGZvciAoY29uc3QgeyBxdWVyeUtleSwgZGF0YSB9IG9mIHByZWxvYWRlZERhdGEpIHtcbiAgICBxdWVyeUNsaWVudC5zZXRRdWVyeURhdGEocXVlcnlLZXksIGRhdGEpO1xuICB9XG5cbiAgLy8gRGVoeWRyYXRlXG4gIGNvbnN0IGRlaHlkcmF0ZWRTdGF0ZSA9IGRlaHlkcmF0ZShxdWVyeUNsaWVudCk7XG5cbiAgLy8gU1NS7JqpIOuplOuqqOumrCDtnojsiqTthqDrpqwg7IOd7ISxXG4gIGNvbnN0IG1lbW9yeUhpc3RvcnkgPSBjcmVhdGVNZW1vcnlIaXN0b3J5KHtcbiAgICBpbml0aWFsRW50cmllczogW3VybF0sXG4gIH0pO1xuXG4gIC8vIFJvdXRlciDsg53shLEgKFNTUiDrqqjrk5wpXG4gIGNvbnN0IHJvdXRlciA9IGNyZWF0ZVJvdXRlcih7XG4gICAgcm91dGVUcmVlLFxuICAgIGNvbnRleHQ6IHsgcXVlcnlDbGllbnQgfSxcbiAgICBoaXN0b3J5OiBtZW1vcnlIaXN0b3J5LFxuICAgIGRlZmF1bHRQcmVsb2FkOiAnaW50ZW50JyxcbiAgfSk7XG5cbiAgLy8g65287Jqw7YSwIOy0iOq4sO2ZlDogU1NS7JeQ7IScIOuwmOuTnOyLnCBhd2FpdCByb3V0ZXIubG9hZCgpIO2YuOy2nCDtlYTsmpRcbiAgYXdhaXQgcm91dGVyLmxvYWQoKTtcblxuICAvLyBSb3V0ZXJQcm92aWRlcuunjCDroIzrjZTrp4EgKFN1c3BlbnNl66GcIOuemO2VkSAtIGh5ZHJhdGlvbiBtaXNtYXRjaCDrsKnsp4ApXG4gIGNvbnN0IGFwcEh0bWwgPSByZW5kZXJUb1N0cmluZyg8U3VzcGVuc2UgZmFsbGJhY2s9e251bGx9PjxSb3V0ZXJQcm92aWRlciByb3V0ZXI9e3JvdXRlcn0gLz48L1N1c3BlbnNlPik7XG5cbiAgcmV0dXJuIHtcbiAgICBodG1sOiBhcHBIdG1sLFxuICAgIGRlaHlkcmF0ZWRTdGF0ZSxcbiAgfTtcbn1cbiAgICBgLnRyaW0oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcIi8qKlwiLCBcIiAqIEBnZW5lcmF0ZWRcIiwgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIiwgXCIgKi9cIiwgXCJcIl0sXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7ZUFDdUM7QUFFdkMsSUFBYSx5QkFBYixjQUE0QyxTQUFTO0NBQ25ELGNBQWM7QUFDWixRQUFNLGVBQWU7O0NBR3ZCLG1CQUFtQjtBQUNqQixTQUFPO0dBQ0wsUUFBUTtHQUNSLE1BQU07R0FDUDs7Q0FHSCxPQUFPLElBQXFDO0VBQzFDLE1BQU0sT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXVEWCxNQUFNO0FBRVIsU0FBTztHQUNMLEdBQUcsS0FBSyxrQkFBa0I7R0FDMUI7R0FDQSxZQUFZLEVBQUU7R0FDZCxlQUFlO0lBQUM7SUFBTztJQUFpQjtJQUFtQjtJQUFPO0lBQUc7R0FDdEUifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"generated.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/generated.template.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAMlD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AACF,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB;;;;IAOhB,MAAM;;;;;;;IA6GN,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAmBrD,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,EAAO,GAAG,UAAU;IAuH9E,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAsE9D,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;CA8CvD"}
1
+ {"version":3,"file":"generated.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/generated.template.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAMlD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AACF,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB;;;;IAOhB,MAAM;;;;;;;IA8GN,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAmBrD,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,EAAO,GAAG,UAAU;IAuH9E,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAsE9D,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;CA8CvD"}
@@ -118,6 +118,7 @@ var Template__generated = class extends Template {
118
118
  " * @generated",
119
119
  " * 직접 수정하지 마세요.",
120
120
  " */",
121
+ "",
121
122
  "/* oxlint-disable */",
122
123
  "",
123
124
  `import { z } from 'zod';`,
@@ -264,4 +265,4 @@ z.object({
264
265
 
265
266
  //#endregion
266
267
  export { Template__generated };
267
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLnRlbXBsYXRlLmpzIiwibmFtZXMiOlsiZW50aXR5IiwicHJvcE5vZGU6IEVudGl0eVByb3BOb2RlIiwiZnVsbHRleHRDb2x1bW5zOiBFbnRpdHlJbmRleFtcImNvbHVtbnNcIl1bXSIsInByb3BOb2RlczogRW50aXR5UHJvcE5vZGVbXSIsImltcG9ydEtleXM6IHN0cmluZ1tdIiwibGluZXM6IHN0cmluZ1tdIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9nZW5lcmF0ZWQudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5cbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5IH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi8uLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgaXNWaXJ0dWFsQ29kZVByb3AsIGlzVmlydHVhbFF1ZXJ5UHJvcCB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlJbmRleCwgdHlwZSBFbnRpdHlQcm9wTm9kZSB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBCVUlMVF9JTl9UWVBFUywgcHJvcE5vZGVUb1pvZFR5cGVEZWYsIHpvZFR5cGVUb1pvZENvZGUgfSBmcm9tIFwiLi4vem9kLWNvbnZlcnRlclwiO1xuXG5leHBvcnQgdHlwZSBTb3VyY2VDb2RlID0ge1xuICBsYWJlbDogc3RyaW5nO1xuICBsaW5lczogc3RyaW5nW107XG4gIGltcG9ydEtleXM6IHN0cmluZ1tdO1xufTtcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fZ2VuZXJhdGVkIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcImdlbmVyYXRlZFwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgoKSB7XG4gICAgY29uc3QgeyBkaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IGAke2Rpcn0vc3JjL2FwcGxpY2F0aW9uYCxcbiAgICAgIHBhdGg6IGBzb25hbXUuZ2VuZXJhdGVkLnRzYCxcbiAgICB9O1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgIGNvbnN0IGVudGl0aWVzID0gZW50aXR5SWRzLm1hcCgoaWQpID0+IEVudGl0eU1hbmFnZXIuZ2V0KGlkKSk7XG5cbiAgICAvLyDsoITssrQgU291cmNlQ29kZSDsg53shLFcbiAgICBjb25zdCBzb3VyY2VDb2RlcyA9IGVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5nZXRFbnVtc1NvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRCYXNlU2NoZW1hU291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICB0aGlzLmdldEJhc2VMaXN0UGFyYW1zU291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICB0aGlzLmdldFN1YnNldFNvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgIF0uZmlsdGVyKG5vbk51bGxhYmxlKTtcbiAgICB9KTtcbiAgICBOYWl0ZS50KFwiVGVtcGxhdGVfX2dlbmVyYXRlZDpzb3VyY2VDb2Rlc1wiLCBzb3VyY2VDb2Rlcyk7XG5cbiAgICAvLyBTb3J0XG4gICAgY29uc3QgTEFCRUxfS0VZX09SREVSID0gW1wiRW51bXNcIiwgXCJCYXNlU2NoZW1hXCIsIFwiQmFzZUxpc3RQYXJhbXNcIiwgXCJTdWJzZXRzXCIsIFwiU3Vic2V0UXVlcmllc1wiXTtcbiAgICBzb3VyY2VDb2Rlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBbYUtleV0gPSBhLmxhYmVsLnNwbGl0KFwiOlwiKTtcbiAgICAgIGNvbnN0IFtiS2V5XSA9IGIubGFiZWwuc3BsaXQoXCI6XCIpO1xuICAgICAgY29uc3QgYUluZGV4ID0gTEFCRUxfS0VZX09SREVSLmluZGV4T2YoYUtleSk7XG4gICAgICBjb25zdCBiSW5kZXggPSBMQUJFTF9LRVlfT1JERVIuaW5kZXhPZihiS2V5KTtcbiAgICAgIGlmIChhSW5kZXggPiBiSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2UgaWYgKGFJbmRleCA8IGJJbmRleCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBzb3VyY2VDb2Rlcy5yZWR1Y2UoXG4gICAgICAocmVzdWx0LCB0cykgPT4ge1xuICAgICAgICBpZiAodHMgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZXM6IFsuLi5yZXN1bHQubGluZXMsIGAvLyAke3RzLmxhYmVsfWAsIC4uLnRzLmxpbmVzLCBcIlwiXSxcbiAgICAgICAgICBpbXBvcnRLZXlzOiB1bmlxdWUoWy4uLnJlc3VsdC5pbXBvcnRLZXlzLCAuLi50cy5pbXBvcnRLZXlzXS50b1NvcnRlZCgpKSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxpbmVzOiBbXSxcbiAgICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICB9IGFzIE9taXQ8U291cmNlQ29kZSwgXCJsYWJlbFwiPixcbiAgICApO1xuXG4gICAgLy8gLnR5cGVzLnRz7J2YIO2DgOyeheydhCDssLjsobDtlZjripQg6rK97JqwIOyInO2ZmOywuOyhsCjsg4HtmLjssLjsobAp6rCAIOuwnOyDne2VmOuvgOuhnCDtg4DsnoXsnYQg6rCA7KC47JmAIOyduOudvOyduCDsspjrpqxcbiAgICBjb25zdCBhbGxUeXBlS2V5cyA9IGVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT4gT2JqZWN0LmtleXMoZW50aXR5LnR5cGVzKSk7XG4gICAgY29uc3QgY2RJbXBvcnRLZXlzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoaW1wb3J0S2V5KSA9PlxuICAgICAgYWxsVHlwZUtleXMuaW5jbHVkZXMoaW1wb3J0S2V5KSxcbiAgICApO1xuICAgIGlmIChjZEltcG9ydEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VzdG9tU2NhbGFyTGluZXMgPSBjZEltcG9ydEtleXMuZmxhdE1hcCgoaW1wb3J0S2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IGVudGl0aWVzLmZpbmQoKGVudGl0eSkgPT4gZW50aXR5LnR5cGVzW2ltcG9ydEtleV0pO1xuICAgICAgICBpZiAoIWVudGl0eSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWm9kVHlwZSBub3QgZm91bmQgJHtpbXBvcnRLZXl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgem9kVHlwZSA9IGVudGl0eS50eXBlc1tpbXBvcnRLZXldO1xuICAgICAgICBhc3NlcnQoem9kVHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgLy8gQ3VzdG9tU2NhbGFyOiAke2ltcG9ydEtleX1gLFxuICAgICAgICAgIGBjb25zdCAke2ltcG9ydEtleX0gPSAke3pvZFR5cGVUb1pvZENvZGUoem9kVHlwZSl9O2AsXG4gICAgICAgICAgYHR5cGUgJHtpbXBvcnRLZXl9ID0gei5pbmZlcjx0eXBlb2YgJHtpbXBvcnRLZXl9PmAsXG4gICAgICAgICAgXCJcIixcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICAgICAgc291cmNlQ29kZS5saW5lcyA9IFsuLi5jdXN0b21TY2FsYXJMaW5lcywgLi4uc291cmNlQ29kZS5saW5lc107XG4gICAgICBzb3VyY2VDb2RlLmltcG9ydEtleXMgPSBzb3VyY2VDb2RlLmltcG9ydEtleXMuZmlsdGVyKFxuICAgICAgICAoaW1wb3J0S2V5KSA9PiAhY2RJbXBvcnRLZXlzLmluY2x1ZGVzKGltcG9ydEtleSksXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSBzb3VyY2VDb2RlLmxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgTmFpdGUudChcIlRlbXBsYXRlX19nZW5lcmF0ZWQ6Ym9keVwiLCBib2R5KTtcblxuICAgIC8vIGltcG9ydFxuICAgIC8vIHNvdXJjZUNvZGUuaW1wb3J0S2V5c+yXkCDrgrTsnqUg7YOA7J6F7J2YIOyKpO2CpOuniOqwgCDsnojsnLzrqbQgc29uYW11IGltcG9ydOyXkCDstpTqsIBcbiAgICBjb25zdCBidWlsdEluU2NoZW1hTmFtZXMgPSBPYmplY3QudmFsdWVzKEJVSUxUX0lOX1RZUEVTKS5tYXAoXG4gICAgICAoaW5mbykgPT4gaW5mby5zY2hlbWFOYW1lIGFzIHN0cmluZyxcbiAgICApO1xuICAgIGNvbnN0IGJ1aWx0SW5TY2hlbWFzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoa2V5KSA9PiBidWlsdEluU2NoZW1hTmFtZXMuaW5jbHVkZXMoa2V5KSk7XG4gICAgY29uc3Qgc29uYW11SW1wb3J0cyA9IFtcbiAgICAgIFwiekFycmF5YWJsZVwiLFxuICAgICAgXCJTUUxEYXRlVGltZVN0cmluZ1wiLFxuICAgICAgXCJTdWJzZXRRdWVyeVwiLFxuICAgICAgXCJTb25hbXVRdWVyeU1vZGVcIixcbiAgICAgIFwiQXBwbHlTb25hbXVGaWx0ZXJcIixcbiAgICAgIC4uLmJ1aWx0SW5TY2hlbWFzLFxuICAgIF0uZmlsdGVyKChtb2QpID0+IGJvZHkuaW5jbHVkZXMobW9kKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKCksXG4gICAgICBib2R5LFxuICAgICAgaW1wb3J0S2V5czogc291cmNlQ29kZS5pbXBvcnRLZXlzLFxuICAgICAgY3VzdG9tSGVhZGVyczogW1xuICAgICAgICBcIi8qKlwiLFxuICAgICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgICAgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgXCIgKi9cIixcbiAgICAgICAgXCIvKiBveGxpbnQtZGlzYWJsZSAqL1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICBgaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7YCxcbiAgICAgICAgYGltcG9ydCB7ICR7c29uYW11SW1wb3J0cy5qb2luKFwiLFwiKX0gfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGdldEVudW1zU291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LmVudW1MYWJlbHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEVudW1zOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXM6IE9iamVjdC5lbnRyaWVzKGVudGl0eS5lbnVtTGFiZWxzKVxuICAgICAgICAuZmlsdGVyKChbXywgZW51bUxhYmVsXSkgPT4gT2JqZWN0LmtleXMoZW51bUxhYmVsKS5sZW5ndGggPiAwKVxuICAgICAgICAuZmxhdE1hcCgoW2VudW1JZCwgZW51bUxhYmVsXSkgPT4gW1xuICAgICAgICAgIGBleHBvcnQgY29uc3QgJHtlbnVtSWR9ID0gei5lbnVtKFske09iamVjdC5rZXlzKGVudW1MYWJlbCkubWFwKFxuICAgICAgICAgICAgKGVsKSA9PiBgXCIke2VsfVwiYCxcbiAgICAgICAgICApfV0pLmRlc2NyaWJlKFwiJHtlbnVtSWR9XCIpO2AsXG4gICAgICAgICAgYGV4cG9ydCB0eXBlICR7ZW51bUlkfSA9IHouaW5mZXI8dHlwZW9mICR7ZW51bUlkfT47YCxcbiAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7ZW51bUlkfUxhYmVsID0gJHtKU09OLnN0cmluZ2lmeShlbnVtTGFiZWwpfTtgLFxuICAgICAgICBdKSxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgIH07XG4gIH1cblxuICBnZXRCYXNlU2NoZW1hU291cmNlQ29kZShlbnRpdHk6IEVudGl0eSwgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXSk6IFNvdXJjZUNvZGUge1xuICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfUJhc2VTY2hlbWFgO1xuICAgIGNvbnN0IHByb3BOb2RlOiBFbnRpdHlQcm9wTm9kZSA9IHtcbiAgICAgIG5vZGVUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgY2hpbGRyZW46IGVudGl0eS5wcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBub2RlVHlwZTogXCJwbGFpblwiLFxuICAgICAgICAgIHByb3AsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2NoZW1hQm9keSA9ICgoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cyk7XG4gICAgICBpZiAocmVzdWx0LmVuZHNXaXRoKFwiLFwiKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0LnNsaWNlKDAsIC0xKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KSgpO1xuXG4gICAgLy8gZnVsbHRleHQgaW5kZXjsl5Ag7Y+s7ZWo65CcIOy7rOufvOuTpCDstpTstpxcbiAgICAvLyBUT0RPOiBHSU4vR2lTVCDsnbjrjbHsiqQg7IOd7ISx65CcIOy7rOufvCDstpTstpxcbiAgICBjb25zdCBmdWxsdGV4dENvbHVtbnM6IEVudGl0eUluZGV4W1wiY29sdW1uc1wiXVtdID0gW107XG5cbiAgICAvLyB2aXJ0dWFsIHByb3BzICh2aXJ0dWFsVHlwZTogXCJjb2RlXCIg65iQ64qUIHVuZGVmaW5lZOyduCDqsoPrp4wg7Y+s7ZWoKVxuICAgIGNvbnN0IHZpcnR1YWxQcm9wcyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcigocHJvcCkgPT4gaXNWaXJ0dWFsQ29kZVByb3AocHJvcCkpXG4gICAgICAubWFwKChwcm9wKSA9PiBwcm9wLm5hbWUpO1xuXG4gICAgLy8gcXVlcnkgdmlydHVhbCBwcm9wcyAodmlydHVhbFR5cGU6IFwicXVlcnlcIuyduCDqsoPrp4wg7Y+s7ZWoKVxuICAgIGNvbnN0IHZpcnR1YWxRdWVyeVByb3BzID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBpc1ZpcnR1YWxRdWVyeVByb3AocHJvcCkpXG4gICAgICAubWFwKChwcm9wKSA9PiBwcm9wLm5hbWUpO1xuXG4gICAgLyoqXG4gICAgICogaGFzRGVmYXVsdCBwcm9wc1xuICAgICAqIC0gbnVsbGFibGUg65iQ64qUIGRiRGVmYXVsdOqwgCDsnojripQg7Lus65+8IChpZCDtj6ztlagpXG4gICAgICogLSByZWxhdGlvbuydtCDslYTri4jqsbDrgpgsIHJlbGF0aW9u7J207Ja064+EIG51bGxhYmxl7J2066m0IO2PrO2VqFxuICAgICAqL1xuICAgIGNvbnN0IGhhc0RlZmF1bHRDb2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAocHJvcCkgPT5cbiAgICAgICAgICAocHJvcC50eXBlICE9PSBcInJlbGF0aW9uXCIgfHwgcHJvcC5udWxsYWJsZSA9PT0gdHJ1ZSkgJiZcbiAgICAgICAgICAocHJvcC5udWxsYWJsZSA9PT0gdHJ1ZSB8fCAocHJvcC50eXBlICE9PSBcInJlbGF0aW9uXCIgJiYgcHJvcC5kYkRlZmF1bHQgIT09IHVuZGVmaW5lZCkpLFxuICAgICAgKVxuICAgICAgLm1hcCgocHJvcCkgPT4gKHByb3AudHlwZSA9PT0gXCJyZWxhdGlvblwiID8gYCR7cHJvcC5uYW1lfV9pZGAgOiBwcm9wLm5hbWUpKVxuICAgICAgLmNvbmNhdChcImlkXCIpO1xuXG4gICAgLyoqXG4gICAgICogaGFzVmVjdG9yIHByb3BzXG4gICAgICogLSB2ZWN0b3Ig7YOA7J6F7J24IOy7rOufvFxuICAgICAqL1xuICAgIGNvbnN0IGhhc1ZlY3RvckNvbHVtbnMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IHByb3AudHlwZSA9PT0gXCJ2ZWN0b3JcIiB8fCBwcm9wLnR5cGUgPT09IFwidmVjdG9yW11cIilcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICAvKipcbiAgICAgKiBnZW5lcmF0ZWQgcHJvcHNcbiAgICAgKiAtIGdlbmVyYXRlZCDsho3shLHsnbQg7J6I64qUIOy7rOufvCAoSU5TRVJUL1VQREFURSDsi5wg6rCSIOygnOqztSDrtojqsIApXG4gICAgICovXG4gICAgY29uc3QgZ2VuZXJhdGVkQ29sdW1ucyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHByb3ApID0+XG4gICAgICAgICAgcHJvcC50eXBlICE9PSBcInJlbGF0aW9uXCIgJiYgKHByb3AuZ2VuZXJhdGVkICE9PSB1bmRlZmluZWQgfHwgcHJvcC50eXBlID09PSBcInNlYXJjaFRleHRcIiksXG4gICAgICApXG4gICAgICAubWFwKChwcm9wKSA9PiBwcm9wLm5hbWUpO1xuXG4gICAgY29uc3QgaGFzTWV0YWRhdGEgPVxuICAgICAgZnVsbHRleHRDb2x1bW5zLmxlbmd0aCA+IDAgfHxcbiAgICAgIHZpcnR1YWxQcm9wcy5sZW5ndGggPiAwIHx8XG4gICAgICB2aXJ0dWFsUXVlcnlQcm9wcy5sZW5ndGggPiAwIHx8XG4gICAgICBoYXNEZWZhdWx0Q29sdW1ucy5sZW5ndGggPiAwIHx8XG4gICAgICBnZW5lcmF0ZWRDb2x1bW5zLmxlbmd0aCA+IDAgfHxcbiAgICAgIGhhc1ZlY3RvckNvbHVtbnMubGVuZ3RoID4gMDtcblxuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgYGV4cG9ydCBjb25zdCAke3NjaGVtYU5hbWV9ID0gJHtzY2hlbWFCb2R5fTtgLFxuICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PmAgK1xuICAgICAgICAoaGFzTWV0YWRhdGFcbiAgICAgICAgICA/IGAgJiB7JHtcbiAgICAgICAgICAgICAgKGZ1bGx0ZXh0Q29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19mdWxsdGV4dF9fOiByZWFkb25seSBbJHtmdWxsdGV4dENvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgICh2aXJ0dWFsUHJvcHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fdmlydHVhbF9fOiByZWFkb25seSBbJHt2aXJ0dWFsUHJvcHMubWFwKChwcm9wKSA9PiBgXCIke3Byb3B9XCJgKS5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgICh2aXJ0dWFsUXVlcnlQcm9wcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX192aXJ0dWFsX3F1ZXJ5X186IHJlYWRvbmx5IFske3ZpcnR1YWxRdWVyeVByb3BzLm1hcCgocHJvcCkgPT4gYFwiJHtwcm9wfVwiYCkuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAoaGFzRGVmYXVsdENvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9faGFzRGVmYXVsdF9fOiByZWFkb25seSBbJHtoYXNEZWZhdWx0Q29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKGdlbmVyYXRlZENvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fZ2VuZXJhdGVkX186IHJlYWRvbmx5IFske2dlbmVyYXRlZENvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgIChoYXNWZWN0b3JDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX3ZlY3Rvcl9fOiByZWFkb25seSBbJHtoYXNWZWN0b3JDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIilcbiAgICAgICAgICAgIH19YFxuICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICBcIjtcIixcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgQmFzZVNjaGVtYTogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZUxpc3RQYXJhbXNTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIC8vIFByb3Ag7JeG64qUIE1E7J24IOqyveyasCDsg53shLEg7KCc7Jm4XG4gICAgaWYgKGVudGl0eS5wcm9wcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfUJhc2VMaXN0UGFyYW1zYDtcblxuICAgIGNvbnN0IGZpbHRlclByb3BzID0gZW50aXR5LnByb3BzLmZpbHRlcigocHJvcCkgPT4gcHJvcC50b0ZpbHRlciA9PT0gdHJ1ZSk7XG5cbiAgICBjb25zdCBwcm9wTm9kZXM6IEVudGl0eVByb3BOb2RlW10gPSBmaWx0ZXJQcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIgYXMgY29uc3QsXG4gICAgICAgIHByb3AsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGZpbHRlckJvZHkgPSBwcm9wTm9kZXNcbiAgICAgIC5tYXAoKHByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cykpXG4gICAgICAuam9pbihcIlxcblwiKTtcblxuICAgIC8vIEZpbHRlclF1ZXJ5IO2DgOyeheydhCDsnITtlZwg7KCc7Jm47ZWgIHByb3BzIOy2lOy2nCAodmlydHVhbOunjCDsoJzsmbgpXG4gICAgY29uc3QgZXhjbHVkZWRQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHApID0+IHAudHlwZSA9PT0gXCJ2aXJ0dWFsXCIpLm1hcCgocCkgPT4gcC5uYW1lKTtcblxuICAgIC8vIG51bWVyaWMg7YOA7J6F7J24IHByb3BzIOy2lOy2nFxuICAgIGNvbnN0IG51bWVyaWNQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHApID0+IHAudHlwZSA9PT0gXCJudW1lcmljXCIpO1xuXG4gICAgLy8gQXBwbHlTb25hbXVGaWx0ZXIg7YOA7J6FIOyduOyekCDsg53shLFcbiAgICBjb25zdCBlbnRpdHlUeXBlID0gYCR7ZW50aXR5LmlkfUJhc2VTY2hlbWFgO1xuICAgIGNvbnN0IG51bWVyaWNLZXlzVW5pb24gPVxuICAgICAgbnVtZXJpY1Byb3BzLmxlbmd0aCA+IDAgPyBudW1lcmljUHJvcHMubWFwKChwcm9wKSA9PiBgXCIke3Byb3AubmFtZX1cImApLmpvaW4oXCIgfCBcIikgOiBcIm5ldmVyXCI7XG4gICAgY29uc3Qgb21pdEtleXNVbmlvbiA9XG4gICAgICBleGNsdWRlZFByb3BzLmxlbmd0aCA+IDAgPyBleGNsdWRlZFByb3BzLm1hcCgobikgPT4gYFwiJHtufVwiYCkuam9pbihcIiB8IFwiKSA6IFwibmV2ZXJcIjtcblxuICAgIC8vIFBLIO2DgOyeheyXkCDrlLDrpbggaWQgWm9kIO2DgOyehSDqsrDsoJVcbiAgICBjb25zdCBwa1R5cGUgPSBlbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgY29uc3QgaWRab2RUeXBlID1cbiAgICAgIHBrVHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBwa1R5cGUgPT09IFwidXVpZFwiXG4gICAgICAgID8gXCJ6QXJyYXlhYmxlKHouc3RyaW5nKCkpXCJcbiAgICAgICAgOiBcInpBcnJheWFibGUoei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpKVwiO1xuXG4gICAgY29uc3Qgc2NoZW1hQm9keSA9IGBcbnoub2JqZWN0KHtcbiAgbnVtOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIHBhZ2U6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLFxuICBzZWFyY2g6ICR7ZW50aXR5LmlkfVNlYXJjaEZpZWxkLFxuICBrZXl3b3JkOiB6LnN0cmluZygpLFxuICBvcmRlckJ5OiAke2VudGl0eS5pZH1PcmRlckJ5LFxuICBxdWVyeU1vZGU6IFNvbmFtdVF1ZXJ5TW9kZSxcbiAgaWQ6ICR7aWRab2RUeXBlfSxcbiAgc29uYW11RmlsdGVyOiB6LmN1c3RvbTxBcHBseVNvbmFtdUZpbHRlcjwke2VudGl0eVR5cGV9LCAke29taXRLZXlzVW5pb259LCAke251bWVyaWNLZXlzVW5pb259Pj4oKSwke2ZpbHRlckJvZHl9XG59KS5wYXJ0aWFsKCk7XG5gLnRyaW0oKTtcblxuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgYGV4cG9ydCBjb25zdCAke3NjaGVtYU5hbWV9ID0gJHtzY2hlbWFCb2R5fTtgLFxuICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PjtgLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBCYXNlTGlzdFBhcmFtczogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0U3Vic2V0U291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LnN1YnNldHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChlbnRpdHkucGFyZW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc3Vic2V0S2V5cyA9IE9iamVjdC5rZXlzKGVudGl0eS5zdWJzZXRzKTtcbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAgIC4uLnN1YnNldEtleXMuZmxhdE1hcCgoc3Vic2V0S2V5KSA9PiB7XG4gICAgICAgIC8vIOyEnOu4jOyFi+yXkOyEnCBGaWVsZEV4cHJbXSDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgZmllbGRFeHBycyA9IGVudGl0eS5zdWJzZXRzW3N1YnNldEtleV07XG5cbiAgICAgICAgLy8gRmllbGRFeHByW13roZwgRW50aXR5UHJvcE5vZGVbXSDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgcHJvcE5vZGVzID0gZW50aXR5LmZpZWxkRXhwcnNUb1Byb3BOb2RlcyhmaWVsZEV4cHJzKTtcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0JHtzdWJzZXRLZXl9YDtcbiAgICAgICAgY29uc3QgcHJvcE5vZGU6IEVudGl0eVByb3BOb2RlID0ge1xuICAgICAgICAgIG5vZGVUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIGNoaWxkcmVuOiBwcm9wTm9kZXMsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRW50aXR5UHJvcE5vZGVbXeuhnCBab2RUeXBlRGVmKHN0cmluZynsnYQg6rCA7KC47Ji0XG4gICAgICAgIGNvbnN0IGJvZHkgPSBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cyk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke2JvZHkucmVwbGFjZSgvLCQvLCBcIlwiKX07YCxcbiAgICAgICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+O2AsXG4gICAgICAgIF07XG4gICAgICB9KSxcbiAgICAgIGBleHBvcnQgdHlwZSAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0TWFwcGluZyA9IHtgLFxuICAgICAgLi4uc3Vic2V0S2V5cy5tYXAoKHN1YnNldEtleSkgPT4gYCAgJHtzdWJzZXRLZXl9OiAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0JHtzdWJzZXRLZXl9O2ApLFxuICAgICAgXCJ9O1wiLFxuICAgICAgYGV4cG9ydCBjb25zdCAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5ID0gei5lbnVtKFske3N1YnNldEtleXNcbiAgICAgICAgLm1hcCgoaykgPT4gYFwiJHtrfVwiYClcbiAgICAgICAgLmpvaW4oXCIsXCIpfV0pO2AsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleSA9IHouaW5mZXI8dHlwZW9mICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXk+O2AsXG4gICAgICBcIlwiLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBTdWJzZXRzOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXMsXG4gICAgICBpbXBvcnRLZXlzOiB1bmlxdWUoaW1wb3J0S2V5cyksXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7VUFJbUM7cUJBRXlCO1lBQ2xCO1lBQ2dDO1lBRTFCO2VBQ1Q7b0JBQ21EO0FBTzFGLElBQWEsc0JBQWIsY0FBeUMsU0FBUztDQUNoRCxjQUFjO0FBQ1osUUFBTSxZQUFZOztDQUdwQixtQkFBbUI7RUFDakIsTUFBTSxFQUFFLFFBQVEsT0FBTyxPQUFPO0FBQzlCLFNBQU87R0FDTCxRQUFRLEdBQUcsSUFBSTtHQUNmLE1BQU07R0FDUDs7Q0FFSCxTQUFTO0VBQ1AsTUFBTSxZQUFZLGNBQWMsV0FBVztFQUMzQyxNQUFNLFdBQVcsVUFBVSxLQUFLLE9BQU8sY0FBYyxJQUFJLEdBQUcsQ0FBQztFQUc3RCxNQUFNLGNBQWMsU0FBUyxTQUFTLFdBQVc7QUFDL0MsVUFBTztJQUNMLEtBQUssbUJBQW1CLE9BQU87SUFDL0IsS0FBSyx3QkFBd0IsT0FBTztJQUNwQyxLQUFLLDRCQUE0QixPQUFPO0lBQ3hDLEtBQUssb0JBQW9CLE9BQU87SUFDakMsQ0FBQyxPQUFPLFlBQVk7SUFDckI7QUFDRixRQUFNLEVBQUUsbUNBQW1DLFlBQVk7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
268
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLnRlbXBsYXRlLmpzIiwibmFtZXMiOlsiZW50aXR5IiwicHJvcE5vZGU6IEVudGl0eVByb3BOb2RlIiwiZnVsbHRleHRDb2x1bW5zOiBFbnRpdHlJbmRleFtcImNvbHVtbnNcIl1bXSIsInByb3BOb2RlczogRW50aXR5UHJvcE5vZGVbXSIsImltcG9ydEtleXM6IHN0cmluZ1tdIiwibGluZXM6IHN0cmluZ1tdIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9nZW5lcmF0ZWQudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5cbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5IH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi8uLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgaXNWaXJ0dWFsQ29kZVByb3AsIGlzVmlydHVhbFF1ZXJ5UHJvcCB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlJbmRleCwgdHlwZSBFbnRpdHlQcm9wTm9kZSB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBCVUlMVF9JTl9UWVBFUywgcHJvcE5vZGVUb1pvZFR5cGVEZWYsIHpvZFR5cGVUb1pvZENvZGUgfSBmcm9tIFwiLi4vem9kLWNvbnZlcnRlclwiO1xuXG5leHBvcnQgdHlwZSBTb3VyY2VDb2RlID0ge1xuICBsYWJlbDogc3RyaW5nO1xuICBsaW5lczogc3RyaW5nW107XG4gIGltcG9ydEtleXM6IHN0cmluZ1tdO1xufTtcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fZ2VuZXJhdGVkIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcImdlbmVyYXRlZFwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgoKSB7XG4gICAgY29uc3QgeyBkaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IGAke2Rpcn0vc3JjL2FwcGxpY2F0aW9uYCxcbiAgICAgIHBhdGg6IGBzb25hbXUuZ2VuZXJhdGVkLnRzYCxcbiAgICB9O1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgIGNvbnN0IGVudGl0aWVzID0gZW50aXR5SWRzLm1hcCgoaWQpID0+IEVudGl0eU1hbmFnZXIuZ2V0KGlkKSk7XG5cbiAgICAvLyDsoITssrQgU291cmNlQ29kZSDsg53shLFcbiAgICBjb25zdCBzb3VyY2VDb2RlcyA9IGVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5nZXRFbnVtc1NvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRCYXNlU2NoZW1hU291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICB0aGlzLmdldEJhc2VMaXN0UGFyYW1zU291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICB0aGlzLmdldFN1YnNldFNvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgIF0uZmlsdGVyKG5vbk51bGxhYmxlKTtcbiAgICB9KTtcbiAgICBOYWl0ZS50KFwiVGVtcGxhdGVfX2dlbmVyYXRlZDpzb3VyY2VDb2Rlc1wiLCBzb3VyY2VDb2Rlcyk7XG5cbiAgICAvLyBTb3J0XG4gICAgY29uc3QgTEFCRUxfS0VZX09SREVSID0gW1wiRW51bXNcIiwgXCJCYXNlU2NoZW1hXCIsIFwiQmFzZUxpc3RQYXJhbXNcIiwgXCJTdWJzZXRzXCIsIFwiU3Vic2V0UXVlcmllc1wiXTtcbiAgICBzb3VyY2VDb2Rlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBbYUtleV0gPSBhLmxhYmVsLnNwbGl0KFwiOlwiKTtcbiAgICAgIGNvbnN0IFtiS2V5XSA9IGIubGFiZWwuc3BsaXQoXCI6XCIpO1xuICAgICAgY29uc3QgYUluZGV4ID0gTEFCRUxfS0VZX09SREVSLmluZGV4T2YoYUtleSk7XG4gICAgICBjb25zdCBiSW5kZXggPSBMQUJFTF9LRVlfT1JERVIuaW5kZXhPZihiS2V5KTtcbiAgICAgIGlmIChhSW5kZXggPiBiSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2UgaWYgKGFJbmRleCA8IGJJbmRleCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBzb3VyY2VDb2Rlcy5yZWR1Y2UoXG4gICAgICAocmVzdWx0LCB0cykgPT4ge1xuICAgICAgICBpZiAodHMgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZXM6IFsuLi5yZXN1bHQubGluZXMsIGAvLyAke3RzLmxhYmVsfWAsIC4uLnRzLmxpbmVzLCBcIlwiXSxcbiAgICAgICAgICBpbXBvcnRLZXlzOiB1bmlxdWUoWy4uLnJlc3VsdC5pbXBvcnRLZXlzLCAuLi50cy5pbXBvcnRLZXlzXS50b1NvcnRlZCgpKSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxpbmVzOiBbXSxcbiAgICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICB9IGFzIE9taXQ8U291cmNlQ29kZSwgXCJsYWJlbFwiPixcbiAgICApO1xuXG4gICAgLy8gLnR5cGVzLnRz7J2YIO2DgOyeheydhCDssLjsobDtlZjripQg6rK97JqwIOyInO2ZmOywuOyhsCjsg4HtmLjssLjsobAp6rCAIOuwnOyDne2VmOuvgOuhnCDtg4DsnoXsnYQg6rCA7KC47JmAIOyduOudvOyduCDsspjrpqxcbiAgICBjb25zdCBhbGxUeXBlS2V5cyA9IGVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT4gT2JqZWN0LmtleXMoZW50aXR5LnR5cGVzKSk7XG4gICAgY29uc3QgY2RJbXBvcnRLZXlzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoaW1wb3J0S2V5KSA9PlxuICAgICAgYWxsVHlwZUtleXMuaW5jbHVkZXMoaW1wb3J0S2V5KSxcbiAgICApO1xuICAgIGlmIChjZEltcG9ydEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VzdG9tU2NhbGFyTGluZXMgPSBjZEltcG9ydEtleXMuZmxhdE1hcCgoaW1wb3J0S2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IGVudGl0aWVzLmZpbmQoKGVudGl0eSkgPT4gZW50aXR5LnR5cGVzW2ltcG9ydEtleV0pO1xuICAgICAgICBpZiAoIWVudGl0eSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWm9kVHlwZSBub3QgZm91bmQgJHtpbXBvcnRLZXl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgem9kVHlwZSA9IGVudGl0eS50eXBlc1tpbXBvcnRLZXldO1xuICAgICAgICBhc3NlcnQoem9kVHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgLy8gQ3VzdG9tU2NhbGFyOiAke2ltcG9ydEtleX1gLFxuICAgICAgICAgIGBjb25zdCAke2ltcG9ydEtleX0gPSAke3pvZFR5cGVUb1pvZENvZGUoem9kVHlwZSl9O2AsXG4gICAgICAgICAgYHR5cGUgJHtpbXBvcnRLZXl9ID0gei5pbmZlcjx0eXBlb2YgJHtpbXBvcnRLZXl9PmAsXG4gICAgICAgICAgXCJcIixcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICAgICAgc291cmNlQ29kZS5saW5lcyA9IFsuLi5jdXN0b21TY2FsYXJMaW5lcywgLi4uc291cmNlQ29kZS5saW5lc107XG4gICAgICBzb3VyY2VDb2RlLmltcG9ydEtleXMgPSBzb3VyY2VDb2RlLmltcG9ydEtleXMuZmlsdGVyKFxuICAgICAgICAoaW1wb3J0S2V5KSA9PiAhY2RJbXBvcnRLZXlzLmluY2x1ZGVzKGltcG9ydEtleSksXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSBzb3VyY2VDb2RlLmxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgTmFpdGUudChcIlRlbXBsYXRlX19nZW5lcmF0ZWQ6Ym9keVwiLCBib2R5KTtcblxuICAgIC8vIGltcG9ydFxuICAgIC8vIHNvdXJjZUNvZGUuaW1wb3J0S2V5c+yXkCDrgrTsnqUg7YOA7J6F7J2YIOyKpO2CpOuniOqwgCDsnojsnLzrqbQgc29uYW11IGltcG9ydOyXkCDstpTqsIBcbiAgICBjb25zdCBidWlsdEluU2NoZW1hTmFtZXMgPSBPYmplY3QudmFsdWVzKEJVSUxUX0lOX1RZUEVTKS5tYXAoXG4gICAgICAoaW5mbykgPT4gaW5mby5zY2hlbWFOYW1lIGFzIHN0cmluZyxcbiAgICApO1xuICAgIGNvbnN0IGJ1aWx0SW5TY2hlbWFzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoa2V5KSA9PiBidWlsdEluU2NoZW1hTmFtZXMuaW5jbHVkZXMoa2V5KSk7XG4gICAgY29uc3Qgc29uYW11SW1wb3J0cyA9IFtcbiAgICAgIFwiekFycmF5YWJsZVwiLFxuICAgICAgXCJTUUxEYXRlVGltZVN0cmluZ1wiLFxuICAgICAgXCJTdWJzZXRRdWVyeVwiLFxuICAgICAgXCJTb25hbXVRdWVyeU1vZGVcIixcbiAgICAgIFwiQXBwbHlTb25hbXVGaWx0ZXJcIixcbiAgICAgIC4uLmJ1aWx0SW5TY2hlbWFzLFxuICAgIF0uZmlsdGVyKChtb2QpID0+IGJvZHkuaW5jbHVkZXMobW9kKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKCksXG4gICAgICBib2R5LFxuICAgICAgaW1wb3J0S2V5czogc291cmNlQ29kZS5pbXBvcnRLZXlzLFxuICAgICAgY3VzdG9tSGVhZGVyczogW1xuICAgICAgICBcIi8qKlwiLFxuICAgICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgICAgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgXCIgKi9cIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgXCIvKiBveGxpbnQtZGlzYWJsZSAqL1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICBgaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7YCxcbiAgICAgICAgYGltcG9ydCB7ICR7c29uYW11SW1wb3J0cy5qb2luKFwiLFwiKX0gfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGdldEVudW1zU291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LmVudW1MYWJlbHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEVudW1zOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXM6IE9iamVjdC5lbnRyaWVzKGVudGl0eS5lbnVtTGFiZWxzKVxuICAgICAgICAuZmlsdGVyKChbXywgZW51bUxhYmVsXSkgPT4gT2JqZWN0LmtleXMoZW51bUxhYmVsKS5sZW5ndGggPiAwKVxuICAgICAgICAuZmxhdE1hcCgoW2VudW1JZCwgZW51bUxhYmVsXSkgPT4gW1xuICAgICAgICAgIGBleHBvcnQgY29uc3QgJHtlbnVtSWR9ID0gei5lbnVtKFske09iamVjdC5rZXlzKGVudW1MYWJlbCkubWFwKFxuICAgICAgICAgICAgKGVsKSA9PiBgXCIke2VsfVwiYCxcbiAgICAgICAgICApfV0pLmRlc2NyaWJlKFwiJHtlbnVtSWR9XCIpO2AsXG4gICAgICAgICAgYGV4cG9ydCB0eXBlICR7ZW51bUlkfSA9IHouaW5mZXI8dHlwZW9mICR7ZW51bUlkfT47YCxcbiAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7ZW51bUlkfUxhYmVsID0gJHtKU09OLnN0cmluZ2lmeShlbnVtTGFiZWwpfTtgLFxuICAgICAgICBdKSxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgIH07XG4gIH1cblxuICBnZXRCYXNlU2NoZW1hU291cmNlQ29kZShlbnRpdHk6IEVudGl0eSwgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXSk6IFNvdXJjZUNvZGUge1xuICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfUJhc2VTY2hlbWFgO1xuICAgIGNvbnN0IHByb3BOb2RlOiBFbnRpdHlQcm9wTm9kZSA9IHtcbiAgICAgIG5vZGVUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgY2hpbGRyZW46IGVudGl0eS5wcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBub2RlVHlwZTogXCJwbGFpblwiLFxuICAgICAgICAgIHByb3AsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2NoZW1hQm9keSA9ICgoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cyk7XG4gICAgICBpZiAocmVzdWx0LmVuZHNXaXRoKFwiLFwiKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0LnNsaWNlKDAsIC0xKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KSgpO1xuXG4gICAgLy8gZnVsbHRleHQgaW5kZXjsl5Ag7Y+s7ZWo65CcIOy7rOufvOuTpCDstpTstpxcbiAgICAvLyBUT0RPOiBHSU4vR2lTVCDsnbjrjbHsiqQg7IOd7ISx65CcIOy7rOufvCDstpTstpxcbiAgICBjb25zdCBmdWxsdGV4dENvbHVtbnM6IEVudGl0eUluZGV4W1wiY29sdW1uc1wiXVtdID0gW107XG5cbiAgICAvLyB2aXJ0dWFsIHByb3BzICh2aXJ0dWFsVHlwZTogXCJjb2RlXCIg65iQ64qUIHVuZGVmaW5lZOyduCDqsoPrp4wg7Y+s7ZWoKVxuICAgIGNvbnN0IHZpcnR1YWxQcm9wcyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcigocHJvcCkgPT4gaXNWaXJ0dWFsQ29kZVByb3AocHJvcCkpXG4gICAgICAubWFwKChwcm9wKSA9PiBwcm9wLm5hbWUpO1xuXG4gICAgLy8gcXVlcnkgdmlydHVhbCBwcm9wcyAodmlydHVhbFR5cGU6IFwicXVlcnlcIuyduCDqsoPrp4wg7Y+s7ZWoKVxuICAgIGNvbnN0IHZpcnR1YWxRdWVyeVByb3BzID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBpc1ZpcnR1YWxRdWVyeVByb3AocHJvcCkpXG4gICAgICAubWFwKChwcm9wKSA9PiBwcm9wLm5hbWUpO1xuXG4gICAgLyoqXG4gICAgICogaGFzRGVmYXVsdCBwcm9wc1xuICAgICAqIC0gbnVsbGFibGUg65iQ64qUIGRiRGVmYXVsdOqwgCDsnojripQg7Lus65+8IChpZCDtj6ztlagpXG4gICAgICogLSByZWxhdGlvbuydtCDslYTri4jqsbDrgpgsIHJlbGF0aW9u7J207Ja064+EIG51bGxhYmxl7J2066m0IO2PrO2VqFxuICAgICAqL1xuICAgIGNvbnN0IGhhc0RlZmF1bHRDb2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAocHJvcCkgPT5cbiAgICAgICAgICAocHJvcC50eXBlICE9PSBcInJlbGF0aW9uXCIgfHwgcHJvcC5udWxsYWJsZSA9PT0gdHJ1ZSkgJiZcbiAgICAgICAgICAocHJvcC5udWxsYWJsZSA9PT0gdHJ1ZSB8fCAocHJvcC50eXBlICE9PSBcInJlbGF0aW9uXCIgJiYgcHJvcC5kYkRlZmF1bHQgIT09IHVuZGVmaW5lZCkpLFxuICAgICAgKVxuICAgICAgLm1hcCgocHJvcCkgPT4gKHByb3AudHlwZSA9PT0gXCJyZWxhdGlvblwiID8gYCR7cHJvcC5uYW1lfV9pZGAgOiBwcm9wLm5hbWUpKVxuICAgICAgLmNvbmNhdChcImlkXCIpO1xuXG4gICAgLyoqXG4gICAgICogaGFzVmVjdG9yIHByb3BzXG4gICAgICogLSB2ZWN0b3Ig7YOA7J6F7J24IOy7rOufvFxuICAgICAqL1xuICAgIGNvbnN0IGhhc1ZlY3RvckNvbHVtbnMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IHByb3AudHlwZSA9PT0gXCJ2ZWN0b3JcIiB8fCBwcm9wLnR5cGUgPT09IFwidmVjdG9yW11cIilcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICAvKipcbiAgICAgKiBnZW5lcmF0ZWQgcHJvcHNcbiAgICAgKiAtIGdlbmVyYXRlZCDsho3shLHsnbQg7J6I64qUIOy7rOufvCAoSU5TRVJUL1VQREFURSDsi5wg6rCSIOygnOqztSDrtojqsIApXG4gICAgICovXG4gICAgY29uc3QgZ2VuZXJhdGVkQ29sdW1ucyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHByb3ApID0+XG4gICAgICAgICAgcHJvcC50eXBlICE9PSBcInJlbGF0aW9uXCIgJiYgKHByb3AuZ2VuZXJhdGVkICE9PSB1bmRlZmluZWQgfHwgcHJvcC50eXBlID09PSBcInNlYXJjaFRleHRcIiksXG4gICAgICApXG4gICAgICAubWFwKChwcm9wKSA9PiBwcm9wLm5hbWUpO1xuXG4gICAgY29uc3QgaGFzTWV0YWRhdGEgPVxuICAgICAgZnVsbHRleHRDb2x1bW5zLmxlbmd0aCA+IDAgfHxcbiAgICAgIHZpcnR1YWxQcm9wcy5sZW5ndGggPiAwIHx8XG4gICAgICB2aXJ0dWFsUXVlcnlQcm9wcy5sZW5ndGggPiAwIHx8XG4gICAgICBoYXNEZWZhdWx0Q29sdW1ucy5sZW5ndGggPiAwIHx8XG4gICAgICBnZW5lcmF0ZWRDb2x1bW5zLmxlbmd0aCA+IDAgfHxcbiAgICAgIGhhc1ZlY3RvckNvbHVtbnMubGVuZ3RoID4gMDtcblxuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgYGV4cG9ydCBjb25zdCAke3NjaGVtYU5hbWV9ID0gJHtzY2hlbWFCb2R5fTtgLFxuICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PmAgK1xuICAgICAgICAoaGFzTWV0YWRhdGFcbiAgICAgICAgICA/IGAgJiB7JHtcbiAgICAgICAgICAgICAgKGZ1bGx0ZXh0Q29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19mdWxsdGV4dF9fOiByZWFkb25seSBbJHtmdWxsdGV4dENvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgICh2aXJ0dWFsUHJvcHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fdmlydHVhbF9fOiByZWFkb25seSBbJHt2aXJ0dWFsUHJvcHMubWFwKChwcm9wKSA9PiBgXCIke3Byb3B9XCJgKS5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgICh2aXJ0dWFsUXVlcnlQcm9wcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX192aXJ0dWFsX3F1ZXJ5X186IHJlYWRvbmx5IFske3ZpcnR1YWxRdWVyeVByb3BzLm1hcCgocHJvcCkgPT4gYFwiJHtwcm9wfVwiYCkuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAoaGFzRGVmYXVsdENvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9faGFzRGVmYXVsdF9fOiByZWFkb25seSBbJHtoYXNEZWZhdWx0Q29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKGdlbmVyYXRlZENvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fZ2VuZXJhdGVkX186IHJlYWRvbmx5IFske2dlbmVyYXRlZENvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgIChoYXNWZWN0b3JDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX3ZlY3Rvcl9fOiByZWFkb25seSBbJHtoYXNWZWN0b3JDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIilcbiAgICAgICAgICAgIH19YFxuICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICBcIjtcIixcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgQmFzZVNjaGVtYTogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZUxpc3RQYXJhbXNTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIC8vIFByb3Ag7JeG64qUIE1E7J24IOqyveyasCDsg53shLEg7KCc7Jm4XG4gICAgaWYgKGVudGl0eS5wcm9wcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfUJhc2VMaXN0UGFyYW1zYDtcblxuICAgIGNvbnN0IGZpbHRlclByb3BzID0gZW50aXR5LnByb3BzLmZpbHRlcigocHJvcCkgPT4gcHJvcC50b0ZpbHRlciA9PT0gdHJ1ZSk7XG5cbiAgICBjb25zdCBwcm9wTm9kZXM6IEVudGl0eVByb3BOb2RlW10gPSBmaWx0ZXJQcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIgYXMgY29uc3QsXG4gICAgICAgIHByb3AsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGZpbHRlckJvZHkgPSBwcm9wTm9kZXNcbiAgICAgIC5tYXAoKHByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cykpXG4gICAgICAuam9pbihcIlxcblwiKTtcblxuICAgIC8vIEZpbHRlclF1ZXJ5IO2DgOyeheydhCDsnITtlZwg7KCc7Jm47ZWgIHByb3BzIOy2lOy2nCAodmlydHVhbOunjCDsoJzsmbgpXG4gICAgY29uc3QgZXhjbHVkZWRQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHApID0+IHAudHlwZSA9PT0gXCJ2aXJ0dWFsXCIpLm1hcCgocCkgPT4gcC5uYW1lKTtcblxuICAgIC8vIG51bWVyaWMg7YOA7J6F7J24IHByb3BzIOy2lOy2nFxuICAgIGNvbnN0IG51bWVyaWNQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHApID0+IHAudHlwZSA9PT0gXCJudW1lcmljXCIpO1xuXG4gICAgLy8gQXBwbHlTb25hbXVGaWx0ZXIg7YOA7J6FIOyduOyekCDsg53shLFcbiAgICBjb25zdCBlbnRpdHlUeXBlID0gYCR7ZW50aXR5LmlkfUJhc2VTY2hlbWFgO1xuICAgIGNvbnN0IG51bWVyaWNLZXlzVW5pb24gPVxuICAgICAgbnVtZXJpY1Byb3BzLmxlbmd0aCA+IDAgPyBudW1lcmljUHJvcHMubWFwKChwcm9wKSA9PiBgXCIke3Byb3AubmFtZX1cImApLmpvaW4oXCIgfCBcIikgOiBcIm5ldmVyXCI7XG4gICAgY29uc3Qgb21pdEtleXNVbmlvbiA9XG4gICAgICBleGNsdWRlZFByb3BzLmxlbmd0aCA+IDAgPyBleGNsdWRlZFByb3BzLm1hcCgobikgPT4gYFwiJHtufVwiYCkuam9pbihcIiB8IFwiKSA6IFwibmV2ZXJcIjtcblxuICAgIC8vIFBLIO2DgOyeheyXkCDrlLDrpbggaWQgWm9kIO2DgOyehSDqsrDsoJVcbiAgICBjb25zdCBwa1R5cGUgPSBlbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgY29uc3QgaWRab2RUeXBlID1cbiAgICAgIHBrVHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBwa1R5cGUgPT09IFwidXVpZFwiXG4gICAgICAgID8gXCJ6QXJyYXlhYmxlKHouc3RyaW5nKCkpXCJcbiAgICAgICAgOiBcInpBcnJheWFibGUoei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpKVwiO1xuXG4gICAgY29uc3Qgc2NoZW1hQm9keSA9IGBcbnoub2JqZWN0KHtcbiAgbnVtOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIHBhZ2U6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLFxuICBzZWFyY2g6ICR7ZW50aXR5LmlkfVNlYXJjaEZpZWxkLFxuICBrZXl3b3JkOiB6LnN0cmluZygpLFxuICBvcmRlckJ5OiAke2VudGl0eS5pZH1PcmRlckJ5LFxuICBxdWVyeU1vZGU6IFNvbmFtdVF1ZXJ5TW9kZSxcbiAgaWQ6ICR7aWRab2RUeXBlfSxcbiAgc29uYW11RmlsdGVyOiB6LmN1c3RvbTxBcHBseVNvbmFtdUZpbHRlcjwke2VudGl0eVR5cGV9LCAke29taXRLZXlzVW5pb259LCAke251bWVyaWNLZXlzVW5pb259Pj4oKSwke2ZpbHRlckJvZHl9XG59KS5wYXJ0aWFsKCk7XG5gLnRyaW0oKTtcblxuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgYGV4cG9ydCBjb25zdCAke3NjaGVtYU5hbWV9ID0gJHtzY2hlbWFCb2R5fTtgLFxuICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PjtgLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBCYXNlTGlzdFBhcmFtczogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0U3Vic2V0U291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LnN1YnNldHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChlbnRpdHkucGFyZW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc3Vic2V0S2V5cyA9IE9iamVjdC5rZXlzKGVudGl0eS5zdWJzZXRzKTtcbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAgIC4uLnN1YnNldEtleXMuZmxhdE1hcCgoc3Vic2V0S2V5KSA9PiB7XG4gICAgICAgIC8vIOyEnOu4jOyFi+yXkOyEnCBGaWVsZEV4cHJbXSDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgZmllbGRFeHBycyA9IGVudGl0eS5zdWJzZXRzW3N1YnNldEtleV07XG5cbiAgICAgICAgLy8gRmllbGRFeHByW13roZwgRW50aXR5UHJvcE5vZGVbXSDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgcHJvcE5vZGVzID0gZW50aXR5LmZpZWxkRXhwcnNUb1Byb3BOb2RlcyhmaWVsZEV4cHJzKTtcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0JHtzdWJzZXRLZXl9YDtcbiAgICAgICAgY29uc3QgcHJvcE5vZGU6IEVudGl0eVByb3BOb2RlID0ge1xuICAgICAgICAgIG5vZGVUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIGNoaWxkcmVuOiBwcm9wTm9kZXMsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRW50aXR5UHJvcE5vZGVbXeuhnCBab2RUeXBlRGVmKHN0cmluZynsnYQg6rCA7KC47Ji0XG4gICAgICAgIGNvbnN0IGJvZHkgPSBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cyk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke2JvZHkucmVwbGFjZSgvLCQvLCBcIlwiKX07YCxcbiAgICAgICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+O2AsXG4gICAgICAgIF07XG4gICAgICB9KSxcbiAgICAgIGBleHBvcnQgdHlwZSAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0TWFwcGluZyA9IHtgLFxuICAgICAgLi4uc3Vic2V0S2V5cy5tYXAoKHN1YnNldEtleSkgPT4gYCAgJHtzdWJzZXRLZXl9OiAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0JHtzdWJzZXRLZXl9O2ApLFxuICAgICAgXCJ9O1wiLFxuICAgICAgYGV4cG9ydCBjb25zdCAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5ID0gei5lbnVtKFske3N1YnNldEtleXNcbiAgICAgICAgLm1hcCgoaykgPT4gYFwiJHtrfVwiYClcbiAgICAgICAgLmpvaW4oXCIsXCIpfV0pO2AsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleSA9IHouaW5mZXI8dHlwZW9mICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXk+O2AsXG4gICAgICBcIlwiLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBTdWJzZXRzOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXMsXG4gICAgICBpbXBvcnRLZXlzOiB1bmlxdWUoaW1wb3J0S2V5cyksXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7VUFJbUM7cUJBRXlCO1lBQ2xCO1lBQ2dDO1lBRTFCO2VBQ1Q7b0JBQ21EO0FBTzFGLElBQWEsc0JBQWIsY0FBeUMsU0FBUztDQUNoRCxjQUFjO0FBQ1osUUFBTSxZQUFZOztDQUdwQixtQkFBbUI7RUFDakIsTUFBTSxFQUFFLFFBQVEsT0FBTyxPQUFPO0FBQzlCLFNBQU87R0FDTCxRQUFRLEdBQUcsSUFBSTtHQUNmLE1BQU07R0FDUDs7Q0FFSCxTQUFTO0VBQ1AsTUFBTSxZQUFZLGNBQWMsV0FBVztFQUMzQyxNQUFNLFdBQVcsVUFBVSxLQUFLLE9BQU8sY0FBYyxJQUFJLEdBQUcsQ0FBQztFQUc3RCxNQUFNLGNBQWMsU0FBUyxTQUFTLFdBQVc7QUFDL0MsVUFBTztJQUNMLEtBQUssbUJBQW1CLE9BQU87SUFDL0IsS0FBSyx3QkFBd0IsT0FBTztJQUNwQyxLQUFLLDRCQUE0QixPQUFPO0lBQ3hDLEtBQUssb0JBQW9CLE9BQU87SUFDakMsQ0FBQyxPQUFPLFlBQVk7SUFDckI7QUFDRixRQUFNLEVB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
@@ -1 +1 @@
1
- {"version":3,"file":"generated_sso.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/generated_sso.template.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAyBvC,qBAAa,uBAAwB,SAAQ,QAAQ;;IAKnD,gBAAgB;;;;IAShB,MAAM;;;;;;;IAuHN,OAAO,CAAC,2BAA2B;IAwEnC,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,2BAA2B;IA4BnC;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IA6CjC;;OAEG;IACH,OAAO,CAAC,aAAa;CAGtB"}
1
+ {"version":3,"file":"generated_sso.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/generated_sso.template.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAyBvC,qBAAa,uBAAwB,SAAQ,QAAQ;;IAKnD,gBAAgB;;;;IAShB,MAAM;;;;;;;IAwHN,OAAO,CAAC,2BAA2B;IAwEnC,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,2BAA2B;IA4BnC;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IA6CjC;;OAEG;IACH,OAAO,CAAC,aAAa;CAGtB"}
@@ -114,6 +114,7 @@ var Template__generated_sso = class extends Template {
114
114
  " * @generated",
115
115
  " * 직접 수정하지 마세요.",
116
116
  " */",
117
+ "",
117
118
  `import { ${sonamuImports} } from "sonamu";`
118
119
  ];
119
120
  if (this.hasAuthConfig()) {
@@ -253,4 +254,4 @@ var Template__generated_sso = class extends Template {
253
254
 
254
255
  //#endregion
255
256
  export { Template__generated_sso };
256
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkX3Nzby50ZW1wbGF0ZS5qcyIsIm5hbWVzIjpbInNvdXJjZUNvZGVzOiBTb3VyY2VDb2RlW10iLCJwdXJpU3Vic2V0UXVlcnk6IFNvdXJjZUNvZGUiLCJwdXJpTG9hZGVyUXVlcnk6IFNvdXJjZUNvZGUiLCJjb250ZXh0RXh0ZW5kTGluZXM6IHN0cmluZ1tdIiwiaW1wb3J0S2V5czogc3RyaW5nW10iLCJmaWVsZFR5cGU6IHN0cmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkX3Nzby50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcblxuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5IH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wLFxuICBpc09uZVRvT25lUmVsYXRpb25Qcm9wLFxufSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyB0eXBlIFNvdXJjZUNvZGUgfSBmcm9tIFwiLi9nZW5lcmF0ZWQudGVtcGxhdGVcIjtcblxuLyoqXG4gKiBiZXR0ZXItYXV0aCBhZGRpdGlvbmFsRmllbGRz7J2YIHR5cGUg6rCS7J2EIFR5cGVTY3JpcHQg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIG1hcEJldHRlckF1dGhGaWVsZFR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgcmV0dXJuIFwiRGF0ZVwiO1xuICAgIGNhc2UgXCJzdHJpbmdbXVwiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nW11cIjtcbiAgICBjYXNlIFwibnVtYmVyW11cIjpcbiAgICAgIHJldHVybiBcIm51bWJlcltdXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2dlbmVyYXRlZF9zc28gZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiZ2VuZXJhdGVkX3Nzb1wiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgoKSB7XG4gICAgY29uc3QgeyBkaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogYCR7ZGlyfS9zcmMvYXBwbGljYXRpb25gLFxuICAgICAgcGF0aDogYHNvbmFtdS5nZW5lcmF0ZWQuc3NvLnRzYCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG4gICAgY29uc3QgZW50aXRpZXMgPSBlbnRpdHlJZHMubWFwKChpZCkgPT4gRW50aXR5TWFuYWdlci5nZXQoaWQpKTtcblxuICAgIC8vIFN1YnNldFF1ZXJpZXMg7IOd7ISxIOuMgOyDgTog67aA66qoIOyXlO2LsO2LsOqwgCDsl4bqs6Ag7ISc67iM7IWL7J20IOyhtOyerFxuICAgIGNvbnN0IHRhcmdldEVudGl0aWVzID0gZW50aXRpZXMuZmlsdGVyKFxuICAgICAgKGVudGl0eSkgPT4gZW50aXR5LnBhcmVudElkID09PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXMoZW50aXR5LnN1YnNldHMpLmxlbmd0aCA+IDAsXG4gICAgKTtcblxuICAgIC8vIFN1YnNldFF1ZXJpZXMg7IOd7ISxXG4gICAgY29uc3Qgc291cmNlQ29kZXM6IFNvdXJjZUNvZGVbXSA9IHRhcmdldEVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT4ge1xuICAgICAgY29uc3Qgc3Vic2V0S2V5cyA9IE9iamVjdC5rZXlzKGVudGl0eS5zdWJzZXRzKTtcblxuICAgICAgY29uc3Qgc3Vic2V0S2V5VHlwZU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleWA7XG4gICAgICBjb25zdCBlbnRpdHlDYW1lbE5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGVudGl0eS5pZCwgdHJ1ZSk7XG5cbiAgICAgIC8vIFB1cmkg6riw67CYIFN1YnNldFF1ZXJ5XG4gICAgICBjb25zdCBwdXJpU3Vic2V0UXVlcnk6IFNvdXJjZUNvZGUgPSB7XG4gICAgICAgIGxhYmVsOiBgU3Vic2V0UXVlcnk6ICR7ZW50aXR5LmlkfWAsXG4gICAgICAgIGxpbmVzOiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudGl0eUNhbWVsTmFtZX1TdWJzZXRRdWVyaWVzID0ge2AsXG4gICAgICAgICAgLi4uc3Vic2V0S2V5cy5tYXAoXG4gICAgICAgICAgICAoc3Vic2V0S2V5KSA9PiBgJHtzdWJzZXRLZXl9OiAocWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4pID0+IHtcbiAgICAgICAgICAgICR7ZW50aXR5LmdldFB1cmlTdWJzZXRRdWVyeShzdWJzZXRLZXkpfTtcbiAgICAgICAgICB9LGAsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBgfTtgLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgIF0sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfTtcblxuICAgICAgLy8gUHVyaSDquLDrsJggU3Vic2V0TG9hZGVyc1F1ZXJ5XG4gICAgICBjb25zdCBwdXJpTG9hZGVyUXVlcnk6IFNvdXJjZUNvZGUgPSB7XG4gICAgICAgIGxhYmVsOiBgTG9hZGVyUXVlcnk6ICR7ZW50aXR5LmlkfWAsXG4gICAgICAgIGxpbmVzOiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudGl0eUNhbWVsTmFtZX1Mb2FkZXJRdWVyaWVzID0ge2AsXG4gICAgICAgICAgLi4uc3Vic2V0S2V5cy5tYXAoKHN1YnNldEtleSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAke3N1YnNldEtleX06ICR7ZW50aXR5LmdldFB1cmlMb2FkZXJRdWVyeShzdWJzZXRLZXkpfSxgO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGB9IGFzIGNvbnN0IHNhdGlzZmllcyBQdXJpTG9hZGVyUXVlcmllczwke3N1YnNldEtleVR5cGVOYW1lfT47YCxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICBdLFxuICAgICAgICBpbXBvcnRLZXlzOiBbc3Vic2V0S2V5VHlwZU5hbWVdLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFtwdXJpU3Vic2V0UXVlcnksIHB1cmlMb2FkZXJRdWVyeV07XG4gICAgfSk7XG5cbiAgICAvLyBGb3JlaWduS2V5IO2DgOyehSDsg53shLFcbiAgICBjb25zdCBma1R5cGVTb3VyY2VDb2RlID0gdGhpcy5nZXRGb3JlaWduS2V5VHlwZVNvdXJjZUNvZGUoZW50aXRpZXMpO1xuICAgIGlmIChma1R5cGVTb3VyY2VDb2RlKSB7XG4gICAgICBzb3VyY2VDb2Rlcy5wdXNoKGZrVHlwZVNvdXJjZUNvZGUpO1xuICAgIH1cblxuICAgIC8vIERhdGFiYXNlU2NoZW1hIOyDneyEsVxuICAgIGNvbnN0IGRiU2NoZW1hU291cmNlQ29kZSA9IHRoaXMuZ2V0RGF0YWJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0aWVzKTtcbiAgICBpZiAoZGJTY2hlbWFTb3VyY2VDb2RlKSB7XG4gICAgICBzb3VyY2VDb2Rlcy5wdXNoKGRiU2NoZW1hU291cmNlQ29kZSk7XG4gICAgfVxuXG4gICAgLy8gQXV0aCBVc2VyIO2DgOyehSDsg53shLFcbiAgICBjb25zdCBhdXRoVXNlclR5cGVTb3VyY2VDb2RlID0gdGhpcy5nZXRBdXRoVXNlclR5cGVTb3VyY2VDb2RlKCk7XG4gICAgaWYgKGF1dGhVc2VyVHlwZVNvdXJjZUNvZGUpIHtcbiAgICAgIHNvdXJjZUNvZGVzLnB1c2goYXV0aFVzZXJUeXBlU291cmNlQ29kZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlQ29kZSA9IHNvdXJjZUNvZGVzLnJlZHVjZShcbiAgICAgIChyZXN1bHQsIHRzKSA9PiB7XG4gICAgICAgIGlmICh0cyA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0KHJlc3VsdCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZXM6IFsuLi5yZXN1bHQubGluZXMsIGAvLyAke3RzLmxhYmVsfWAsIC4uLnRzLmxpbmVzLCBcIlwiXSxcbiAgICAgICAgICBpbXBvcnRLZXlzOiB1bmlxdWUoWy4uLnJlc3VsdC5pbXBvcnRLZXlzLCAuLi50cy5pbXBvcnRLZXlzXSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsaW5lczogW10sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfSBhcyBPbWl0PFNvdXJjZUNvZGUsIFwibGFiZWxcIj4sXG4gICAgKTtcblxuICAgIGNvbnN0IGJvZHkgPSBzb3VyY2VDb2RlLmxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgY29uc3QgaXNVc2luZ01hbnlUb01hbnlCYXNlU2NoZW1hID0gYm9keS5pbmNsdWRlcyhcIk1hbnlUb01hbnlCYXNlU2NoZW1hXCIpO1xuXG4gICAgY29uc3Qgc29uYW11SW1wb3J0cyA9IFtcbiAgICAgIFwiUHVyaVdyYXBwZXJcIixcbiAgICAgIFwiRGF0YWJhc2VTY2hlbWFFeHRlbmRcIixcbiAgICAgIFwiUHVyaUxvYWRlclF1ZXJpZXNcIixcbiAgICAgIGlzVXNpbmdNYW55VG9NYW55QmFzZVNjaGVtYSA/IFwiTWFueVRvTWFueUJhc2VTY2hlbWFcIiA6IFwiXCIsXG4gICAgXVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmpvaW4oXCIsIFwiKTtcblxuICAgIC8vIGN1c3RvbUhlYWRlcnMg6rWs7ISxXG4gICAgY29uc3QgY3VzdG9tSGVhZGVycyA9IFtcbiAgICAgIFwiLyoqXCIsXG4gICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICBcIiAqL1wiLFxuICAgICAgYGltcG9ydCB7ICR7c29uYW11SW1wb3J0c30gfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICBdO1xuICAgIGlmICh0aGlzLmhhc0F1dGhDb25maWcoKSkge1xuICAgICAgY3VzdG9tSGVhZGVycy5wdXNoKGBpbXBvcnQgdHlwZSB7IFVzZXIgfSBmcm9tIFwiYmV0dGVyLWF1dGhcIjtgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKCksXG4gICAgICBib2R5OiBzb3VyY2VDb2RlLmxpbmVzLmpvaW4oXCJcXG5cIiksXG4gICAgICBpbXBvcnRLZXlzOiBzb3VyY2VDb2RlLmltcG9ydEtleXMsXG4gICAgICBjdXN0b21IZWFkZXJzLFxuICAgIH07XG4gIH1cblxuICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIHByaXZhdGUgSGVscGVyIE1ldGhvZHNcbiAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIGdldERhdGFiYXNlU2NoZW1hU291cmNlQ29kZShlbnRpdGllczogRW50aXR5W10pOiBTb3VyY2VDb2RlIHwgbnVsbCB7XG4gICAgaWYgKGVudGl0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gRGF0YWJhc2VTY2hlbWFFeHRlbmQgLSDthYzsnbTruJQg7Iqk7YKk66eIIO2DgOyehSDsoJXsnZhcbiAgICBjb25zdCBlbnRpdHlTY2hlbWFMaW5lcyA9IGVudGl0aWVzLm1hcCgoZW50aXR5KSA9PiBgJHtlbnRpdHkudGFibGV9OiAke2VudGl0eS5pZH1CYXNlU2NoZW1hO2ApO1xuXG4gICAgY29uc3Qgam9pblRhYmxlcyA9IHVuaXF1ZShcbiAgICAgIGVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT5cbiAgICAgICAgZW50aXR5LnByb3BzLmZpbHRlcihpc01hbnlUb01hbnlSZWxhdGlvblByb3ApLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZyb21UYWJsZUtleSA9IGluZmxlY3Rpb24uc2luZ3VsYXJpemUoZW50aXR5LnRhYmxlKTtcbiAgICAgICAgICBjb25zdCB0b0VudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHByb3Aud2l0aCk7XG4gICAgICAgICAgY29uc3QgdG9UYWJsZUtleSA9IGluZmxlY3Rpb24uc2luZ3VsYXJpemUodG9FbnRpdHkudGFibGUpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0YWJsZTogcHJvcC5qb2luVGFibGUsXG4gICAgICAgICAgICBmcm9tVGFibGVLZXksXG4gICAgICAgICAgICB0b1RhYmxlS2V5LFxuICAgICAgICAgICAgZnJvbUVudGl0eUlkOiBlbnRpdHkuaWQsXG4gICAgICAgICAgICB0b0VudGl0eUlkOiB0b0VudGl0eS5pZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICAoam9pblRhYmxlKSA9PiBqb2luVGFibGUudGFibGUsXG4gICAgKTtcblxuICAgIC8vIERhdGFiYXNlRm9yZWlnbktleXMgLSBGSyDsu6zrn7zsnYQg6rCA7KeEIO2FjOydtOu4lOunjCDsoJXsnZhcbiAgICBjb25zdCBlbnRpdGllc1dpdGhGayA9IGVudGl0aWVzLmZpbHRlcihcbiAgICAgIChlbnRpdHkpID0+IHRoaXMuZ2V0Rm9yZWlnbktleUNvbHVtbnMoZW50aXR5KS5sZW5ndGggPiAwLFxuICAgICk7XG4gICAgY29uc3QgZmtNZXRhZGF0YUxpbmVzID0gZW50aXRpZXNXaXRoRmsubWFwKFxuICAgICAgKGVudGl0eSkgPT4gYCR7ZW50aXR5LnRhYmxlfTogJHtlbnRpdHkuaWR9Rm9yZWlnbktleXM7YCxcbiAgICApO1xuXG4gICAgLy8gQ29udGV4dEV4dGVuZCAtIGF1dGgg7ISk7KCV7J20IOyeiOydhCDrlYzrp4wgdXNlciDtg4DsnoUg7LaU6rCAXG4gICAgY29uc3QgY29udGV4dEV4dGVuZExpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICh0aGlzLmhhc0F1dGhDb25maWcoKSkge1xuICAgICAgY29udGV4dEV4dGVuZExpbmVzLnB1c2goXG4gICAgICAgIGBgLFxuICAgICAgICBgICBleHBvcnQgaW50ZXJmYWNlIENvbnRleHRFeHRlbmQge2AsXG4gICAgICAgIGAgICAgdXNlcjogU29uYW11VXNlciB8IG51bGw7YCxcbiAgICAgICAgYCAgfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYERhdGFiYXNlU2NoZW1hYCxcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgIGBkZWNsYXJlIG1vZHVsZSBcInNvbmFtdVwiIHtgLFxuICAgICAgICBgICBleHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlU2NoZW1hRXh0ZW5kIHtgLFxuICAgICAgICAuLi5lbnRpdHlTY2hlbWFMaW5lcyxcbiAgICAgICAgLi4uam9pblRhYmxlcy5tYXAoKGpvaW5UYWJsZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZyb21FbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChqb2luVGFibGUuZnJvbUVudGl0eUlkKTtcbiAgICAgICAgICBjb25zdCB0b0VudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGpvaW5UYWJsZS50b0VudGl0eUlkKTtcbiAgICAgICAgICBjb25zdCBmcm9tUGtUeXBlID0gZnJvbUVudGl0eS5nZXRQa1R5cGUoKSA9PT0gXCJpbnRlZ2VyXCIgPyBcIm51bWJlclwiIDogXCJzdHJpbmdcIjtcbiAgICAgICAgICBjb25zdCB0b1BrVHlwZSA9IHRvRW50aXR5LmdldFBrVHlwZSgpID09PSBcImludGVnZXJcIiA/IFwibnVtYmVyXCIgOiBcInN0cmluZ1wiO1xuXG4gICAgICAgICAgcmV0dXJuIGAke2pvaW5UYWJsZS50YWJsZX06IE1hbnlUb01hbnlCYXNlU2NoZW1hPFwiJHtqb2luVGFibGUuZnJvbVRhYmxlS2V5fVwiLCBcIiR7am9pblRhYmxlLnRvVGFibGVLZXl9XCIsICR7ZnJvbVBrVHlwZX0sICR7dG9Qa1R5cGV9PjtgO1xuICAgICAgICB9KSxcbiAgICAgICAgYCAgfWAsXG4gICAgICAgIGBgLFxuICAgICAgICBgICBleHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlRm9yZWlnbktleXMge2AsXG4gICAgICAgIC4uLmZrTWV0YWRhdGFMaW5lcyxcbiAgICAgICAgYCAgfWAsXG4gICAgICAgIC4uLmNvbnRleHRFeHRlbmRMaW5lcyxcbiAgICAgICAgYH1gLFxuICAgICAgXSxcbiAgICAgIGltcG9ydEtleXM6IGVudGl0aWVzLm1hcCgoZW50aXR5KSA9PiBgJHtlbnRpdHkuaWR9QmFzZVNjaGVtYWApLFxuICAgIH07XG4gIH1cblxuICAvLyBGSyDqtIDqs4Trpbwg7Lus65+866qF7Jy866GcIOuzgO2ZmCAo7JiIOiBjb21wYW55IOKGkiBjb21wYW55X2lkKVxuICBwcml2YXRlIGdldEZvcmVpZ25LZXlDb2x1bW5zKGVudGl0eTogRW50aXR5KTogc3RyaW5nW10ge1xuICAgIHJldHVybiBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IHtcbiAgICAgICAgaWYgKGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKHByb3ApKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkgJiYgcHJvcC5oYXNKb2luQ29sdW1uKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5tYXAoKHByb3ApID0+IGAke3Byb3AubmFtZX1faWRgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rm9yZWlnbktleVR5cGVTb3VyY2VDb2RlKGVudGl0aWVzOiBFbnRpdHlbXSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoZW50aXRpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBGS+qwgCDsnojripQg7JeU7Yuw7Yuw66eMIO2DgOyehSDsg53shLFcbiAgICBjb25zdCBlbnRpdGllc1dpdGhGayA9IGVudGl0aWVzLmZpbHRlcihcbiAgICAgIChlbnRpdHkpID0+IHRoaXMuZ2V0Rm9yZWlnbktleUNvbHVtbnMoZW50aXR5KS5sZW5ndGggPiAwLFxuICAgICk7XG5cbiAgICBpZiAoZW50aXRpZXNXaXRoRmsubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBma1R5cGVMaW5lcyA9IGVudGl0aWVzV2l0aEZrLm1hcCgoZW50aXR5KSA9PiB7XG4gICAgICBjb25zdCBma0NvbHVtbnMgPSB0aGlzLmdldEZvcmVpZ25LZXlDb2x1bW5zKGVudGl0eSk7XG4gICAgICBjb25zdCBma1R5cGVWYWx1ZSA9IGZrQ29sdW1ucy5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKS5qb2luKFwiIHwgXCIpO1xuXG4gICAgICByZXR1cm4gYGV4cG9ydCB0eXBlICR7ZW50aXR5LmlkfUZvcmVpZ25LZXlzID0gJHtma1R5cGVWYWx1ZX07YDtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEZvcmVpZ25LZXkgVHlwZXNgLFxuICAgICAgbGluZXM6IGZrVHlwZUxpbmVzLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzb25hbXUuY29uZmlnLnRz7J2YIGF1dGgudXNlci5hZGRpdGlvbmFsRmllbGRz7JeQ7IScIFNvbmFtdVVzZXIg7YOA7J6F7J2EIOyDneyEse2VqeuLiOuLpC5cbiAgICogQHJldHVybnMgU291cmNlQ29kZSB8IG51bGwgLSBhdXRoIOyEpOygleydtCDsl4bsnLzrqbQgbnVsbCDrsJjtmZhcbiAgICovXG4gIHByaXZhdGUgZ2V0QXV0aFVzZXJUeXBlU291cmNlQ29kZSgpOiBTb3VyY2VDb2RlIHwgbnVsbCB7XG4gICAgY29uc3QgYXV0aENvbmZpZyA9IFNvbmFtdS5jb25maWcuc2VydmVyPy5hdXRoO1xuICAgIGlmICghYXV0aENvbmZpZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gYWRkaXRpb25hbEZpZWxkcyDtg4DsnoXsnbQg64+Z7KCB7J6EXG4gICAgY29uc3QgYWRkaXRpb25hbEZpZWxkcyA9IChhdXRoQ29uZmlnIGFzIGFueSk/LnVzZXI/LmFkZGl0aW9uYWxGaWVsZHM7XG4gICAgaWYgKCFhZGRpdGlvbmFsRmllbGRzIHx8IE9iamVjdC5rZXlzKGFkZGl0aW9uYWxGaWVsZHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gYWRkaXRpb25hbEZpZWxkc+qwgCDsl4bsnLzrqbQg6riw67O4IFVzZXIg7YOA7J6F66eMIOyCrOyaqVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IFwiQXV0aCBVc2VyIFR5cGVcIixcbiAgICAgICAgbGluZXM6IFtcImV4cG9ydCB0eXBlIFNvbmFtdVVzZXIgPSBVc2VyO1wiXSxcbiAgICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGltcG9ydEtleXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBhZGRpdGlvbmFsRmllbGRz66W8IFR5cGVTY3JpcHQg7YOA7J6F7Jy866GcIOuzgO2ZmFxuICAgIGNvbnN0IGZpZWxkTGluZXMgPSBPYmplY3QuZW50cmllcyhhZGRpdGlvbmFsRmllbGRzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gYmV0dGVyLWF1dGggYWRkaXRpb25hbEZpZWxkcyDqtazsobBcbiAgICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdmFsdWUgYXMgYW55O1xuICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IGZpZWxkQ29uZmlnLnJlcXVpcmVkICE9PSBmYWxzZTtcblxuICAgICAgbGV0IGZpZWxkVHlwZTogc3RyaW5nO1xuXG4gICAgICAvLyBzb25hbXVUeXBl7J20IOyeiOycvOuptCBkZXNjcmlwdGlvbuydhCDtg4DsnoXrqoXsnLzroZwg7IKs7JqpXG4gICAgICBpZiAoZmllbGRDb25maWcuc29uYW11VHlwZSkge1xuICAgICAgICBmaWVsZFR5cGUgPSBmaWVsZENvbmZpZy5zb25hbXVUeXBlO1xuICAgICAgICBpbXBvcnRLZXlzLnB1c2goZmllbGRUeXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpZWxkVHlwZSA9IG1hcEJldHRlckF1dGhGaWVsZFR5cGUoZmllbGRDb25maWcudHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgICAke2tleX0ke2lzUmVxdWlyZWQgPyBcIlwiIDogXCI/XCJ9OiAke2ZpZWxkVHlwZX07YDtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogXCJBdXRoIFVzZXIgVHlwZVwiLFxuICAgICAgbGluZXM6IFtcImV4cG9ydCB0eXBlIFNvbmFtdVVzZXIgPSBVc2VyICYge1wiLCAuLi5maWVsZExpbmVzLCBcIn07XCJdLFxuICAgICAgaW1wb3J0S2V5cyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIGF1dGgg7ISk7KCV7J20IOyeiOuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGhhc0F1dGhDb25maWcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhU29uYW11LmNvbmZpZy5zZXJ2ZXI/LmF1dGg7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztVQUttQztxQkFFeUI7WUFLakM7ZUFDWTs7OztBQU12QyxTQUFTLHVCQUF1QixNQUFzQjtBQUNwRCxTQUFRLE1BQVI7RUFDRSxLQUFLLFNBQ0gsUUFBTztFQUNULEtBQUssU0FDSCxRQUFPO0VBQ1QsS0FBSyxVQUNILFFBQU87RUFDVCxLQUFLLE9BQ0gsUUFBTztFQUNULEtBQUssV0FDSCxRQUFPO0VBQ1QsS0FBSyxXQUNILFFBQU87RUFDVCxRQUNFLFFBQU87OztBQUliLElBQWEsMEJBQWIsY0FBNkMsU0FBUztDQUNwRCxjQUFjO0FBQ1osUUFBTSxnQkFBZ0I7O0NBR3hCLG1CQUFtQjtFQUNqQixNQUFNLEVBQUUsUUFBUSxPQUFPLE9BQU87QUFFOUIsU0FBTztHQUNMLFFBQVEsR0FBRyxJQUFJO0dBQ2YsTUFBTTtHQUNQOztDQUdILFNBQVM7RUFDUCxNQUFNLFlBQVksY0FBYyxXQUFXO0VBQzNDLE1BQU0sV0FBVyxVQUFVLEtBQUssT0FBTyxjQUFjLElBQUksR0FBRyxDQUFDO0VBRzdELE1BQU0saUJBQWlCLFNBQVMsUUFDN0IsV0FBVyxPQUFPLGFBQWEsYUFBYSxPQUFPLEtBQUssT0FBTyxRQUFRLENBQUMsU0FBUyxFQUNuRjtFQUdELE1BQU1BLGNBQTRCLGVBQWUsU0FBUyxXQUFXO0dBQ25FLE1BQU0sYUFB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
257
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkX3Nzby50ZW1wbGF0ZS5qcyIsIm5hbWVzIjpbInNvdXJjZUNvZGVzOiBTb3VyY2VDb2RlW10iLCJwdXJpU3Vic2V0UXVlcnk6IFNvdXJjZUNvZGUiLCJwdXJpTG9hZGVyUXVlcnk6IFNvdXJjZUNvZGUiLCJjb250ZXh0RXh0ZW5kTGluZXM6IHN0cmluZ1tdIiwiaW1wb3J0S2V5czogc3RyaW5nW10iLCJmaWVsZFR5cGU6IHN0cmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkX3Nzby50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcblxuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5IH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wLFxuICBpc09uZVRvT25lUmVsYXRpb25Qcm9wLFxufSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyB0eXBlIFNvdXJjZUNvZGUgfSBmcm9tIFwiLi9nZW5lcmF0ZWQudGVtcGxhdGVcIjtcblxuLyoqXG4gKiBiZXR0ZXItYXV0aCBhZGRpdGlvbmFsRmllbGRz7J2YIHR5cGUg6rCS7J2EIFR5cGVTY3JpcHQg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIG1hcEJldHRlckF1dGhGaWVsZFR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgcmV0dXJuIFwiRGF0ZVwiO1xuICAgIGNhc2UgXCJzdHJpbmdbXVwiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nW11cIjtcbiAgICBjYXNlIFwibnVtYmVyW11cIjpcbiAgICAgIHJldHVybiBcIm51bWJlcltdXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2dlbmVyYXRlZF9zc28gZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiZ2VuZXJhdGVkX3Nzb1wiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgoKSB7XG4gICAgY29uc3QgeyBkaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogYCR7ZGlyfS9zcmMvYXBwbGljYXRpb25gLFxuICAgICAgcGF0aDogYHNvbmFtdS5nZW5lcmF0ZWQuc3NvLnRzYCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG4gICAgY29uc3QgZW50aXRpZXMgPSBlbnRpdHlJZHMubWFwKChpZCkgPT4gRW50aXR5TWFuYWdlci5nZXQoaWQpKTtcblxuICAgIC8vIFN1YnNldFF1ZXJpZXMg7IOd7ISxIOuMgOyDgTog67aA66qoIOyXlO2LsO2LsOqwgCDsl4bqs6Ag7ISc67iM7IWL7J20IOyhtOyerFxuICAgIGNvbnN0IHRhcmdldEVudGl0aWVzID0gZW50aXRpZXMuZmlsdGVyKFxuICAgICAgKGVudGl0eSkgPT4gZW50aXR5LnBhcmVudElkID09PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXMoZW50aXR5LnN1YnNldHMpLmxlbmd0aCA+IDAsXG4gICAgKTtcblxuICAgIC8vIFN1YnNldFF1ZXJpZXMg7IOd7ISxXG4gICAgY29uc3Qgc291cmNlQ29kZXM6IFNvdXJjZUNvZGVbXSA9IHRhcmdldEVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT4ge1xuICAgICAgY29uc3Qgc3Vic2V0S2V5cyA9IE9iamVjdC5rZXlzKGVudGl0eS5zdWJzZXRzKTtcblxuICAgICAgY29uc3Qgc3Vic2V0S2V5VHlwZU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleWA7XG4gICAgICBjb25zdCBlbnRpdHlDYW1lbE5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGVudGl0eS5pZCwgdHJ1ZSk7XG5cbiAgICAgIC8vIFB1cmkg6riw67CYIFN1YnNldFF1ZXJ5XG4gICAgICBjb25zdCBwdXJpU3Vic2V0UXVlcnk6IFNvdXJjZUNvZGUgPSB7XG4gICAgICAgIGxhYmVsOiBgU3Vic2V0UXVlcnk6ICR7ZW50aXR5LmlkfWAsXG4gICAgICAgIGxpbmVzOiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudGl0eUNhbWVsTmFtZX1TdWJzZXRRdWVyaWVzID0ge2AsXG4gICAgICAgICAgLi4uc3Vic2V0S2V5cy5tYXAoXG4gICAgICAgICAgICAoc3Vic2V0S2V5KSA9PiBgJHtzdWJzZXRLZXl9OiAocWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4pID0+IHtcbiAgICAgICAgICAgICR7ZW50aXR5LmdldFB1cmlTdWJzZXRRdWVyeShzdWJzZXRLZXkpfTtcbiAgICAgICAgICB9LGAsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBgfTtgLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgIF0sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfTtcblxuICAgICAgLy8gUHVyaSDquLDrsJggU3Vic2V0TG9hZGVyc1F1ZXJ5XG4gICAgICBjb25zdCBwdXJpTG9hZGVyUXVlcnk6IFNvdXJjZUNvZGUgPSB7XG4gICAgICAgIGxhYmVsOiBgTG9hZGVyUXVlcnk6ICR7ZW50aXR5LmlkfWAsXG4gICAgICAgIGxpbmVzOiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudGl0eUNhbWVsTmFtZX1Mb2FkZXJRdWVyaWVzID0ge2AsXG4gICAgICAgICAgLi4uc3Vic2V0S2V5cy5tYXAoKHN1YnNldEtleSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAke3N1YnNldEtleX06ICR7ZW50aXR5LmdldFB1cmlMb2FkZXJRdWVyeShzdWJzZXRLZXkpfSxgO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGB9IGFzIGNvbnN0IHNhdGlzZmllcyBQdXJpTG9hZGVyUXVlcmllczwke3N1YnNldEtleVR5cGVOYW1lfT47YCxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICBdLFxuICAgICAgICBpbXBvcnRLZXlzOiBbc3Vic2V0S2V5VHlwZU5hbWVdLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFtwdXJpU3Vic2V0UXVlcnksIHB1cmlMb2FkZXJRdWVyeV07XG4gICAgfSk7XG5cbiAgICAvLyBGb3JlaWduS2V5IO2DgOyehSDsg53shLFcbiAgICBjb25zdCBma1R5cGVTb3VyY2VDb2RlID0gdGhpcy5nZXRGb3JlaWduS2V5VHlwZVNvdXJjZUNvZGUoZW50aXRpZXMpO1xuICAgIGlmIChma1R5cGVTb3VyY2VDb2RlKSB7XG4gICAgICBzb3VyY2VDb2Rlcy5wdXNoKGZrVHlwZVNvdXJjZUNvZGUpO1xuICAgIH1cblxuICAgIC8vIERhdGFiYXNlU2NoZW1hIOyDneyEsVxuICAgIGNvbnN0IGRiU2NoZW1hU291cmNlQ29kZSA9IHRoaXMuZ2V0RGF0YWJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0aWVzKTtcbiAgICBpZiAoZGJTY2hlbWFTb3VyY2VDb2RlKSB7XG4gICAgICBzb3VyY2VDb2Rlcy5wdXNoKGRiU2NoZW1hU291cmNlQ29kZSk7XG4gICAgfVxuXG4gICAgLy8gQXV0aCBVc2VyIO2DgOyehSDsg53shLFcbiAgICBjb25zdCBhdXRoVXNlclR5cGVTb3VyY2VDb2RlID0gdGhpcy5nZXRBdXRoVXNlclR5cGVTb3VyY2VDb2RlKCk7XG4gICAgaWYgKGF1dGhVc2VyVHlwZVNvdXJjZUNvZGUpIHtcbiAgICAgIHNvdXJjZUNvZGVzLnB1c2goYXV0aFVzZXJUeXBlU291cmNlQ29kZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlQ29kZSA9IHNvdXJjZUNvZGVzLnJlZHVjZShcbiAgICAgIChyZXN1bHQsIHRzKSA9PiB7XG4gICAgICAgIGlmICh0cyA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0KHJlc3VsdCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZXM6IFsuLi5yZXN1bHQubGluZXMsIGAvLyAke3RzLmxhYmVsfWAsIC4uLnRzLmxpbmVzLCBcIlwiXSxcbiAgICAgICAgICBpbXBvcnRLZXlzOiB1bmlxdWUoWy4uLnJlc3VsdC5pbXBvcnRLZXlzLCAuLi50cy5pbXBvcnRLZXlzXSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsaW5lczogW10sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfSBhcyBPbWl0PFNvdXJjZUNvZGUsIFwibGFiZWxcIj4sXG4gICAgKTtcblxuICAgIGNvbnN0IGJvZHkgPSBzb3VyY2VDb2RlLmxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgY29uc3QgaXNVc2luZ01hbnlUb01hbnlCYXNlU2NoZW1hID0gYm9keS5pbmNsdWRlcyhcIk1hbnlUb01hbnlCYXNlU2NoZW1hXCIpO1xuXG4gICAgY29uc3Qgc29uYW11SW1wb3J0cyA9IFtcbiAgICAgIFwiUHVyaVdyYXBwZXJcIixcbiAgICAgIFwiRGF0YWJhc2VTY2hlbWFFeHRlbmRcIixcbiAgICAgIFwiUHVyaUxvYWRlclF1ZXJpZXNcIixcbiAgICAgIGlzVXNpbmdNYW55VG9NYW55QmFzZVNjaGVtYSA/IFwiTWFueVRvTWFueUJhc2VTY2hlbWFcIiA6IFwiXCIsXG4gICAgXVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmpvaW4oXCIsIFwiKTtcblxuICAgIC8vIGN1c3RvbUhlYWRlcnMg6rWs7ISxXG4gICAgY29uc3QgY3VzdG9tSGVhZGVycyA9IFtcbiAgICAgIFwiLyoqXCIsXG4gICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICBcIiAqL1wiLFxuICAgICAgXCJcIixcbiAgICAgIGBpbXBvcnQgeyAke3NvbmFtdUltcG9ydHN9IH0gZnJvbSBcInNvbmFtdVwiO2AsXG4gICAgXTtcbiAgICBpZiAodGhpcy5oYXNBdXRoQ29uZmlnKCkpIHtcbiAgICAgIGN1c3RvbUhlYWRlcnMucHVzaChgaW1wb3J0IHR5cGUgeyBVc2VyIH0gZnJvbSBcImJldHRlci1hdXRoXCI7YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aCgpLFxuICAgICAgYm9keTogc291cmNlQ29kZS5saW5lcy5qb2luKFwiXFxuXCIpLFxuICAgICAgaW1wb3J0S2V5czogc291cmNlQ29kZS5pbXBvcnRLZXlzLFxuICAgICAgY3VzdG9tSGVhZGVycyxcbiAgICB9O1xuICB9XG5cbiAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBwcml2YXRlIEhlbHBlciBNZXRob2RzXG4gIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSBnZXREYXRhYmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXRpZXM6IEVudGl0eVtdKTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIGlmIChlbnRpdGllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIERhdGFiYXNlU2NoZW1hRXh0ZW5kIC0g7YWM7J2067iUIOyKpO2CpOuniCDtg4DsnoUg7KCV7J2YXG4gICAgY29uc3QgZW50aXR5U2NoZW1hTGluZXMgPSBlbnRpdGllcy5tYXAoKGVudGl0eSkgPT4gYCR7ZW50aXR5LnRhYmxlfTogJHtlbnRpdHkuaWR9QmFzZVNjaGVtYTtgKTtcblxuICAgIGNvbnN0IGpvaW5UYWJsZXMgPSB1bmlxdWUoXG4gICAgICBlbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+XG4gICAgICAgIGVudGl0eS5wcm9wcy5maWx0ZXIoaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wKS5tYXAoKHByb3ApID0+IHtcbiAgICAgICAgICBjb25zdCBmcm9tVGFibGVLZXkgPSBpbmZsZWN0aW9uLnNpbmd1bGFyaXplKGVudGl0eS50YWJsZSk7XG4gICAgICAgICAgY29uc3QgdG9FbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChwcm9wLndpdGgpO1xuICAgICAgICAgIGNvbnN0IHRvVGFibGVLZXkgPSBpbmZsZWN0aW9uLnNpbmd1bGFyaXplKHRvRW50aXR5LnRhYmxlKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGFibGU6IHByb3Auam9pblRhYmxlLFxuICAgICAgICAgICAgZnJvbVRhYmxlS2V5LFxuICAgICAgICAgICAgdG9UYWJsZUtleSxcbiAgICAgICAgICAgIGZyb21FbnRpdHlJZDogZW50aXR5LmlkLFxuICAgICAgICAgICAgdG9FbnRpdHlJZDogdG9FbnRpdHkuaWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICAgKGpvaW5UYWJsZSkgPT4gam9pblRhYmxlLnRhYmxlLFxuICAgICk7XG5cbiAgICAvLyBEYXRhYmFzZUZvcmVpZ25LZXlzIC0gRksg7Lus65+87J2EIOqwgOynhCDthYzsnbTruJTrp4wg7KCV7J2YXG4gICAgY29uc3QgZW50aXRpZXNXaXRoRmsgPSBlbnRpdGllcy5maWx0ZXIoXG4gICAgICAoZW50aXR5KSA9PiB0aGlzLmdldEZvcmVpZ25LZXlDb2x1bW5zKGVudGl0eSkubGVuZ3RoID4gMCxcbiAgICApO1xuICAgIGNvbnN0IGZrTWV0YWRhdGFMaW5lcyA9IGVudGl0aWVzV2l0aEZrLm1hcChcbiAgICAgIChlbnRpdHkpID0+IGAke2VudGl0eS50YWJsZX06ICR7ZW50aXR5LmlkfUZvcmVpZ25LZXlzO2AsXG4gICAgKTtcblxuICAgIC8vIENvbnRleHRFeHRlbmQgLSBhdXRoIOyEpOygleydtCDsnojsnYQg65WM66eMIHVzZXIg7YOA7J6FIOy2lOqwgFxuICAgIGNvbnN0IGNvbnRleHRFeHRlbmRMaW5lczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAodGhpcy5oYXNBdXRoQ29uZmlnKCkpIHtcbiAgICAgIGNvbnRleHRFeHRlbmRMaW5lcy5wdXNoKFxuICAgICAgICBgYCxcbiAgICAgICAgYCAgZXhwb3J0IGludGVyZmFjZSBDb250ZXh0RXh0ZW5kIHtgLFxuICAgICAgICBgICAgIHVzZXI6IFNvbmFtdVVzZXIgfCBudWxsO2AsXG4gICAgICAgIGAgIH1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBEYXRhYmFzZVNjaGVtYWAsXG4gICAgICBsaW5lczogW1xuICAgICAgICBgZGVjbGFyZSBtb2R1bGUgXCJzb25hbXVcIiB7YCxcbiAgICAgICAgYCAgZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZVNjaGVtYUV4dGVuZCB7YCxcbiAgICAgICAgLi4uZW50aXR5U2NoZW1hTGluZXMsXG4gICAgICAgIC4uLmpvaW5UYWJsZXMubWFwKChqb2luVGFibGUpID0+IHtcbiAgICAgICAgICBjb25zdCBmcm9tRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoam9pblRhYmxlLmZyb21FbnRpdHlJZCk7XG4gICAgICAgICAgY29uc3QgdG9FbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChqb2luVGFibGUudG9FbnRpdHlJZCk7XG4gICAgICAgICAgY29uc3QgZnJvbVBrVHlwZSA9IGZyb21FbnRpdHkuZ2V0UGtUeXBlKCkgPT09IFwiaW50ZWdlclwiID8gXCJudW1iZXJcIiA6IFwic3RyaW5nXCI7XG4gICAgICAgICAgY29uc3QgdG9Qa1R5cGUgPSB0b0VudGl0eS5nZXRQa1R5cGUoKSA9PT0gXCJpbnRlZ2VyXCIgPyBcIm51bWJlclwiIDogXCJzdHJpbmdcIjtcblxuICAgICAgICAgIHJldHVybiBgJHtqb2luVGFibGUudGFibGV9OiBNYW55VG9NYW55QmFzZVNjaGVtYTxcIiR7am9pblRhYmxlLmZyb21UYWJsZUtleX1cIiwgXCIke2pvaW5UYWJsZS50b1RhYmxlS2V5fVwiLCAke2Zyb21Qa1R5cGV9LCAke3RvUGtUeXBlfT47YDtcbiAgICAgICAgfSksXG4gICAgICAgIGAgIH1gLFxuICAgICAgICBgYCxcbiAgICAgICAgYCAgZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZUZvcmVpZ25LZXlzIHtgLFxuICAgICAgICAuLi5ma01ldGFkYXRhTGluZXMsXG4gICAgICAgIGAgIH1gLFxuICAgICAgICAuLi5jb250ZXh0RXh0ZW5kTGluZXMsXG4gICAgICAgIGB9YCxcbiAgICAgIF0sXG4gICAgICBpbXBvcnRLZXlzOiBlbnRpdGllcy5tYXAoKGVudGl0eSkgPT4gYCR7ZW50aXR5LmlkfUJhc2VTY2hlbWFgKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gRksg6rSA6rOE66W8IOy7rOufvOuqheycvOuhnCDrs4DtmZggKOyYiDogY29tcGFueSDihpIgY29tcGFueV9pZClcbiAgcHJpdmF0ZSBnZXRGb3JlaWduS2V5Q29sdW1ucyhlbnRpdHk6IEVudGl0eSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiB7XG4gICAgICAgIGlmIChpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc09uZVRvT25lUmVsYXRpb25Qcm9wKHByb3ApICYmIHByb3AuaGFzSm9pbkNvbHVtbikge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAubWFwKChwcm9wKSA9PiBgJHtwcm9wLm5hbWV9X2lkYCk7XG4gIH1cblxuICBwcml2YXRlIGdldEZvcmVpZ25LZXlUeXBlU291cmNlQ29kZShlbnRpdGllczogRW50aXR5W10pOiBTb3VyY2VDb2RlIHwgbnVsbCB7XG4gICAgaWYgKGVudGl0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gRkvqsIAg7J6I64qUIOyXlO2LsO2LsOunjCDtg4DsnoUg7IOd7ISxXG4gICAgY29uc3QgZW50aXRpZXNXaXRoRmsgPSBlbnRpdGllcy5maWx0ZXIoXG4gICAgICAoZW50aXR5KSA9PiB0aGlzLmdldEZvcmVpZ25LZXlDb2x1bW5zKGVudGl0eSkubGVuZ3RoID4gMCxcbiAgICApO1xuXG4gICAgaWYgKGVudGl0aWVzV2l0aEZrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZmtUeXBlTGluZXMgPSBlbnRpdGllc1dpdGhGay5tYXAoKGVudGl0eSkgPT4ge1xuICAgICAgY29uc3QgZmtDb2x1bW5zID0gdGhpcy5nZXRGb3JlaWduS2V5Q29sdW1ucyhlbnRpdHkpO1xuICAgICAgY29uc3QgZmtUeXBlVmFsdWUgPSBma0NvbHVtbnMubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYCkuam9pbihcIiB8IFwiKTtcblxuICAgICAgcmV0dXJuIGBleHBvcnQgdHlwZSAke2VudGl0eS5pZH1Gb3JlaWduS2V5cyA9ICR7ZmtUeXBlVmFsdWV9O2A7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBGb3JlaWduS2V5IFR5cGVzYCxcbiAgICAgIGxpbmVzOiBma1R5cGVMaW5lcyxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogc29uYW11LmNvbmZpZy50c+ydmCBhdXRoLnVzZXIuYWRkaXRpb25hbEZpZWxkc+yXkOyEnCBTb25hbXVVc2VyIO2DgOyeheydhCDsg53shLHtlanri4jri6QuXG4gICAqIEByZXR1cm5zIFNvdXJjZUNvZGUgfCBudWxsIC0gYXV0aCDshKTsoJXsnbQg7JeG7Jy866m0IG51bGwg67CY7ZmYXG4gICAqL1xuICBwcml2YXRlIGdldEF1dGhVc2VyVHlwZVNvdXJjZUNvZGUoKTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIGNvbnN0IGF1dGhDb25maWcgPSBTb25hbXUuY29uZmlnLnNlcnZlcj8uYXV0aDtcbiAgICBpZiAoIWF1dGhDb25maWcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIGFkZGl0aW9uYWxGaWVsZHMg7YOA7J6F7J20IOuPmeyggeyehFxuICAgIGNvbnN0IGFkZGl0aW9uYWxGaWVsZHMgPSAoYXV0aENvbmZpZyBhcyBhbnkpPy51c2VyPy5hZGRpdGlvbmFsRmllbGRzO1xuICAgIGlmICghYWRkaXRpb25hbEZpZWxkcyB8fCBPYmplY3Qua2V5cyhhZGRpdGlvbmFsRmllbGRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIGFkZGl0aW9uYWxGaWVsZHPqsIAg7JeG7Jy866m0IOq4sOuzuCBVc2VyIO2DgOyeheunjCDsgqzsmqlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiBcIkF1dGggVXNlciBUeXBlXCIsXG4gICAgICAgIGxpbmVzOiBbXCJleHBvcnQgdHlwZSBTb25hbXVVc2VyID0gVXNlcjtcIl0sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gYWRkaXRpb25hbEZpZWxkc+ulvCBUeXBlU2NyaXB0IO2DgOyeheycvOuhnCDrs4DtmZhcbiAgICBjb25zdCBmaWVsZExpbmVzID0gT2JqZWN0LmVudHJpZXMoYWRkaXRpb25hbEZpZWxkcykubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIGJldHRlci1hdXRoIGFkZGl0aW9uYWxGaWVsZHMg6rWs7KGwXG4gICAgICBjb25zdCBmaWVsZENvbmZpZyA9IHZhbHVlIGFzIGFueTtcbiAgICAgIGNvbnN0IGlzUmVxdWlyZWQgPSBmaWVsZENvbmZpZy5yZXF1aXJlZCAhPT0gZmFsc2U7XG5cbiAgICAgIGxldCBmaWVsZFR5cGU6IHN0cmluZztcblxuICAgICAgLy8gc29uYW11VHlwZeydtCDsnojsnLzrqbQgZGVzY3JpcHRpb27snYQg7YOA7J6F66qF7Jy866GcIOyCrOyaqVxuICAgICAgaWYgKGZpZWxkQ29uZmlnLnNvbmFtdVR5cGUpIHtcbiAgICAgICAgZmllbGRUeXBlID0gZmllbGRDb25maWcuc29uYW11VHlwZTtcbiAgICAgICAgaW1wb3J0S2V5cy5wdXNoKGZpZWxkVHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWVsZFR5cGUgPSBtYXBCZXR0ZXJBdXRoRmllbGRUeXBlKGZpZWxkQ29uZmlnLnR5cGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCAgJHtrZXl9JHtpc1JlcXVpcmVkID8gXCJcIiA6IFwiP1wifTogJHtmaWVsZFR5cGV9O2A7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IFwiQXV0aCBVc2VyIFR5cGVcIixcbiAgICAgIGxpbmVzOiBbXCJleHBvcnQgdHlwZSBTb25hbXVVc2VyID0gVXNlciAmIHtcIiwgLi4uZmllbGRMaW5lcywgXCJ9O1wiXSxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhdXRoIOyEpOygleydtCDsnojripTsp4Ag7ZmV7J247ZWp64uI64ukLlxuICAgKi9cbiAgcHJpdmF0ZSBoYXNBdXRoQ29uZmlnKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIVNvbmFtdS5jb25maWcuc2VydmVyPy5hdXRoO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7VUFLbUM7cUJBRXlCO1lBS2pDO2VBQ1k7Ozs7QUFNdkMsU0FBUyx1QkFBdUIsTUFBc0I7QUFDcEQsU0FBUSxNQUFSO0VBQ0UsS0FBSyxTQUNILFFBQU87RUFDVCxLQUFLLFNBQ0gsUUFBTztFQUNULEtBQUssVUFDSCxRQUFPO0VBQ1QsS0FBSyxPQUNILFFBQU87RUFDVCxLQUFLLFdBQ0gsUUFBTztFQUNULEtBQUssV0FDSCxRQUFPO0VBQ1QsUUFDRSxRQUFPOzs7QUFJYixJQUFhLDBCQUFiLGNBQTZDLFNBQVM7Q0FDcEQsY0FBYztBQUNaLFFBQU0sZ0JBQWdCOztDQUd4QixtQkFBbUI7RUFDakIsTUFBTSxFQUFFLFFBQVEsT0FBTyxPQUFPO0FBRTlCLFNBQU87R0FDTCxRQUFRLEdBQUcsSUFBSTtHQUNmLE1BQU07R0FDUDs7Q0FHSCxTQUFTO0VBQ1AsTUFBTSxZQUFZLGNBQWMsV0FBVztFQUMzQyxNQUFNLFdBQVcsVUFBVSxLQUFLLE9BQU8sY0FBYyxJQUFJLEdBQUcsQ0FBQztFQUc3RCxNQUFNLGlCQUFpQixTQUFTLFFBQzdCLFdBQVcsT0FBTyxhQUFhLGFBQWEsT0FBTyxLQUFLLE9BQU8sUUFBUSxDQUFDLFNBQVMsRUFDbkY7RUFHRCxNQUFNQSxjQUE0QixlQUFlLFNBQVMsV0FBVztH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
@@ -1 +1 @@
1
- {"version":3,"file":"queries.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/queries.template.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,iBAAkB,SAAQ,QAAQ;;IAK7C,gBAAgB;;;;IAQhB,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,SAAS,CAAC;;;;;;;CAkGtC"}
1
+ {"version":3,"file":"queries.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/queries.template.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,iBAAkB,SAAQ,QAAQ;;IAK7C,gBAAgB;;;;IAQhB,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,SAAS,CAAC;;;;;;;CA2GtC"}
@@ -68,6 +68,7 @@ ${functions.join("\n\n")}
68
68
  " * @generated",
69
69
  " * 직접 수정하지 마세요.",
70
70
  " */",
71
+ "",
71
72
  "/* oxlint-disable */",
72
73
  "",
73
74
  `import type { SSRQuery } from 'sonamu/ssr';`,
@@ -82,6 +83,7 @@ ${functions.join("\n\n")}
82
83
  " * @generated",
83
84
  " * 직접 수정하지 마세요.",
84
85
  " */",
86
+ "",
85
87
  "/* oxlint-disable */",
86
88
  ""
87
89
  ]
@@ -91,4 +93,4 @@ ${functions.join("\n\n")}
91
93
 
92
94
  //#endregion
93
95
  export { Template__queries };
94
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllcy50ZW1wbGF0ZS5qcyIsIm5hbWVzIjpbIm5hbWVzcGFjZXM6IHN0cmluZ1tdIiwiaW1wb3J0S2V5czogc3RyaW5nW10iLCJ0eXBlUGFyYW1OYW1lczogc3RyaW5nW10iLCJmdW5jdGlvbnM6IHN0cmluZ1tdIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9xdWVyaWVzLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyBkaWZmLCB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBhcGlQYXJhbVRvVHNDb2RlLCBhcGlQYXJhbVR5cGVUb1RzVHlwZSB9IGZyb20gXCIuLi8uLi9hcGkvY29kZS1jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyB0eXBlIEV4dGVuZGVkQXBpIH0gZnJvbSBcIi4uLy4uL2FwaS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX19xdWVyaWVzIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInF1ZXJpZXNcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgcXVlcmllcy5nZW5lcmF0ZWQudHNgLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoe306IFRlbXBsYXRlT3B0aW9uc1tcInF1ZXJpZXNcIl0pIHtcbiAgICBjb25zdCB7IGFwaXMgfSA9IFNvbmFtdS5zeW5jZXI7XG5cbiAgICAvLyB0YW5zdGFjay1xdWVyeeulvCDtj6ztlajtlZwgQVBJ66eMIO2VhO2EsOungVxuICAgIGNvbnN0IHF1ZXJ5QXBpcyA9IGFwaXMuZmlsdGVyKChhcGkpID0+IGFwaS5vcHRpb25zLmNsaWVudHM/LmluY2x1ZGVzKFwidGFuc3RhY2stcXVlcnlcIikpO1xuXG4gICAgLy8g66qo642467OE66GcIOq3uOujue2ZlFxuICAgIGNvbnN0IGFwaXNCeU1vZGVsID0gbmV3IE1hcDxzdHJpbmcsIEV4dGVuZGVkQXBpW10+KCk7XG4gICAgZm9yIChjb25zdCBhcGkgb2YgcXVlcnlBcGlzKSB7XG4gICAgICBjb25zdCBtb2RlbE5hbWUgPSBhcGkubW9kZWxOYW1lLnJlcGxhY2UoL01vZGVsJC8sIFwiXCIpLnJlcGxhY2UoL0ZyYW1lJC8sIFwiXCIpO1xuICAgICAgaWYgKCFhcGlzQnlNb2RlbC5oYXMobW9kZWxOYW1lKSkge1xuICAgICAgICBhcGlzQnlNb2RlbC5zZXQobW9kZWxOYW1lLCBbXSk7XG4gICAgICB9XG4gICAgICBhcGlzQnlNb2RlbC5nZXQobW9kZWxOYW1lKT8ucHVzaChhcGkpO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWVzcGFjZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgdHlwZVBhcmFtTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFttb2RlbE5hbWUsIG1vZGVsQXBpc10gb2YgYXBpc0J5TW9kZWwpIHtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhcGkgb2YgbW9kZWxBcGlzKSB7XG4gICAgICAgIC8vIENvbnRleHQg7KCc7Jm47ZWcIO2MjOudvOuvuO2EsFxuICAgICAgICBjb25zdCBwYXJhbXNXaXRob3V0Q29udGV4dCA9IGFwaS5wYXJhbWV0ZXJzLmZpbHRlcihcbiAgICAgICAgICAocGFyYW0pID0+XG4gICAgICAgICAgICAhQXBpUGFyYW1UeXBlLmlzQ29udGV4dChwYXJhbS50eXBlKSAmJlxuICAgICAgICAgICAgIUFwaVBhcmFtVHlwZS5pc1JlZktuZXgocGFyYW0udHlwZSkgJiZcbiAgICAgICAgICAgICEocGFyYW0ub3B0aW9uYWwgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8g7YOA7J6FIO2MjOudvOuvuO2EsCDsnbTrpoQg7IiY7KeRXG4gICAgICAgIHR5cGVQYXJhbU5hbWVzID0gdHlwZVBhcmFtTmFtZXMuY29uY2F0KGFwaS50eXBlUGFyYW1ldGVycy5tYXAoKHRwKSA9PiB0cC5pZCkpO1xuXG4gICAgICAgIC8vIO2DgOyehSDtjIzrnbzrr7jthLAg7KCV7J2YXG4gICAgICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzQXNUc1R5cGUgPSBhcGkudHlwZVBhcmFtZXRlcnNcbiAgICAgICAgICAubWFwKCh0eXBlUGFyYW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlUGFyYW0sIGltcG9ydEtleXMpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgY29uc3QgdHlwZVBhcmFtc0RlZiA9IHR5cGVQYXJhbWV0ZXJzQXNUc1R5cGUgPyBgPCR7dHlwZVBhcmFtZXRlcnNBc1RzVHlwZX0+YCA6IFwiXCI7XG5cbiAgICAgICAgLy8g7YyM652866+47YSwIOygleydmFxuICAgICAgICBjb25zdCBwYXJhbXNEZWYgPSBhcGlQYXJhbVRvVHNDb2RlKHBhcmFtc1dpdGhvdXRDb250ZXh0LCBpbXBvcnRLZXlzKTtcbiAgICAgICAgY29uc3QgcGFyYW1OYW1lcyA9IHBhcmFtc1dpdGhvdXRDb250ZXh0Lm1hcCgocCkgPT4gcC5uYW1lKS5qb2luKFwiLCBcIik7XG5cbiAgICAgICAgLy8gc2VydmljZU1ldGhvZE5hbWUg6rOE7IKwIChzZXJ2aWNlcy50ZW1wbGF0ZS50c+yZgCDrj5nsnbztlZwg66Gc7KeBKVxuICAgICAgICBjb25zdCBzZXJ2aWNlTWV0aG9kTmFtZSA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZVxuICAgICAgICAgID8gYGdldCR7aW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWUpfWBcbiAgICAgICAgICA6IGFwaS5tZXRob2ROYW1lO1xuXG4gICAgICAgIC8vIFNTUlF1ZXJ5IO2VqOyImCDsg53shLEgKO2VqOyImOuqheuPhCBzZXJ2aWNlTWV0aG9kTmFtZSDsgqzsmqkpXG4gICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgIGBcbiAgZXhwb3J0IGNvbnN0ICR7c2VydmljZU1ldGhvZE5hbWV9ID0gJHt0eXBlUGFyYW1zRGVmfSgke3BhcmFtc0RlZn0pOiBTU1JRdWVyeSA9PlxuICAgIGNyZWF0ZVNTUlF1ZXJ5KCcke2FwaS5tb2RlbE5hbWV9JywgJyR7YXBpLm1ldGhvZE5hbWV9JywgWyR7cGFyYW1OYW1lc31dLCBbJyR7bW9kZWxOYW1lfScsICcke3NlcnZpY2VNZXRob2ROYW1lfSddKTtcbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbmFtZXNwYWNlcy5wdXNoKFxuICAgICAgICBgXG5leHBvcnQgbmFtZXNwYWNlICR7bW9kZWxOYW1lfVNlcnZpY2Uge1xuJHtmdW5jdGlvbnMuam9pbihcIlxcblxcblwiKX1cbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyB0YW5zdGFjay1xdWVyeSBBUEnqsIAg7JeG7Jy866m0IO2XrO2NvCDtlajsiJjsmYAgaW1wb3J066W8IO2PrO2VqO2VmOyngCDslYrsirXri4jri6QuXG4gICAgLy8g7IOIIO2UhOuhnOygne2KuOyXkOyEnCDssqsg67mM65OcIOyLnCBzeW5j6rCAIOyVhOyngSDslYgg65CY7Ja0IG5hbWVzcGFjZeqwgCDruYTslrTsnojsnYQg7IiYIOyeiOqzoCxcbiAgICAvLyDsnbTrlYwgY3JlYXRlU1NSUXVlcnnqsIAgdW51c2Vk66GcIOu5jOuTnCDsl5Drn6zqsIAg67Cc7IOd7ZWY64qUIOqyg+ydhCDrsKnsp4Dtlanri4jri6QuXG4gICAgY29uc3QgaGFzUXVlcmllcyA9IG5hbWVzcGFjZXMubGVuZ3RoID4gMDtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHk6IG5hbWVzcGFjZXMuam9pbihcIlxcblxcblwiKSxcbiAgICAgIGltcG9ydEtleXM6IGRpZmYodW5pcXVlKGltcG9ydEtleXMpLCB0eXBlUGFyYW1OYW1lcyksXG4gICAgICBjdXN0b21IZWFkZXJzOiBoYXNRdWVyaWVzXG4gICAgICAgID8gW1xuICAgICAgICAgICAgXCIvKipcIixcbiAgICAgICAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgICAgICAgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgICAgIFwiICovXCIsXG4gICAgICAgICAgICBcIi8qIG94bGludC1kaXNhYmxlICovXCIsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgYGltcG9ydCB0eXBlIHsgU1NSUXVlcnkgfSBmcm9tICdzb25hbXUvc3NyJztgLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIGAvLyBTU1JRdWVyeSDtl6ztjbwg7ZWo7IiYYCxcbiAgICAgICAgICAgIGBmdW5jdGlvbiBjcmVhdGVTU1JRdWVyeShtb2RlbE5hbWU6IHN0cmluZywgbWV0aG9kTmFtZTogc3RyaW5nLCBwYXJhbXM6IGFueVtdLCBzZXJ2aWNlS2V5OiBbc3RyaW5nLCBzdHJpbmddKTogU1NSUXVlcnkge2AsXG4gICAgICAgICAgICBgICByZXR1cm4geyBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIHBhcmFtcywgc2VydmljZUtleSwgX19icmFuZDogJ1NTUlF1ZXJ5JyB9IGFzIFNTUlF1ZXJ5O2AsXG4gICAgICAgICAgICBgfWAsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXCIvKipcIiwgXCIgKiBAZ2VuZXJhdGVkXCIsIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsIFwiICovXCIsIFwiLyogb3hsaW50LWRpc2FibGUgKi9cIiwgXCJcIl0sXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztzQkFHbUY7YUFFekM7WUFFTztlQUNWO0FBRXZDLElBQWEsb0JBQWIsY0FBdUMsU0FBUztDQUM5QyxjQUFjO0FBQ1osUUFBTSxVQUFVOztDQUdsQixtQkFBbUI7RUFDakIsTUFBTSxFQUFFLFFBQVEsT0FBTyxPQUFPO0FBQzlCLFNBQU87R0FDTCxRQUFRLEdBQUcsSUFBSTtHQUNmLE1BQU07R0FDUDs7Q0FHSCxPQUFPLElBQWdDO0VBQ3JDLE1BQU0sRUFBRSxTQUFTLE9BQU87RUFHeEIsTUFBTSxZQUFZLEtBQUssUUFBUSxRQUFRLElBQUksUUFBUSxTQUFTLFNBQVMsaUJBQWlCLENBQUM7RUFHdkYsTUFBTSxjQUFjLElBQUksS0FBNEI7QUFDcEQsT0FBSyxNQUFNLE9BQU8sV0FBVztHQUMzQixNQUFNLFlBQVksSUFBSSxVQUFVLFFBQVEsVUFBVSxHQUFHLENBQUMsUUFBUSxVQUFVLEdBQUc7QUFDM0UsT0FBSSxDQUFDLFlBQVksSUFBSSxVQUFVLEVBQUU7QUFDL0IsZ0JBQVksSUFBSSxXQUFXLEVBQUUsQ0FBQzs7QUFFaEMsZUFBWSxJQUFJLFVBQVUsRUFBRSxLQUFLLElBQUk7O0VBR3ZDLE1BQU1BLGFBQXVCLEVBQUU7RUFDL0IsTUFBTUMsYUFBdUIsRUFBRTtFQUMvQixJQUFJQyxpQkFBMkIsRUFBRTtBQUVqQyxPQUFLLE1BQU0sQ0FBQyxXQUFXLGNBQWMsYUFBYTtHQUNoRCxNQUFNQyxZQUFzQixFQUFFO0FBRTlCLFFBQUssTUFBTSxPQUFPLFdBQVc7SUFFM0IsTUFBTSx1QkFBdUIsSUFBSSxXQUFXLFFBQ3pDLFVBQ0MsQ0FBQyxhQUFhLFVBQVUsTUFBTSxLQUFLLElBQ25DLENBQUMsYUFBYSxVQUFVLE1BQU0sS0FBSyxJQUNuQyxFQUFFLE1BQU0sWUFBWSxNQUFNLEtBQUssV0FBVyxJQUFJLEVBQ2pEO0FBR0QscUJBQWlCLGVBQWUsT0FBTyxJQUFJLGVBQWUsS0FBSyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBRzdFLE1BQU0seUJBQXlCLElBQUksZUFDaEMsS0FBSyxjQUFjO0FBQ2xCLFlBQU8scUJBQXFCLFdBQVcsV0FBVztNQUNsRCxDQUNELEtBQUssS0FBSztJQUNiLE1BQU0sZ0JBQWdCLHlCQUF5QixJQUFJLHVCQUF1QixLQUFLO0lBRy9FLE1BQU0sWUFBWSxpQkFBaUIsc0JBQXNCLFdBQVc7SUFDcEUsTUFBTSxhQUFhLHFCQUFxQixLQUFLLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxLQUFLO0lBR3JFLE1BQU0sb0JBQW9CLElBQUksUUFBUSxlQUNsQyxNQUFNLFdBQVcsU0FBUyxJQUFJLFFBQVEsYUFBYSxLQUNuRCxJQUFJO0FBR1IsY0FBVSxLQUNSO2lCQUNPLGtCQUFrQixLQUFLLGNBQWMsR0FBRyxVQUFVO3NCQUM3QyxJQUFJLFVBQVUsTUFBTSxJQUFJLFdBQVcsTUFBTSxXQUFXLE9BQU8sVUFBVSxNQUFNLGtCQUFrQjtZQUN2RyxNQUFNLENBQ1Q7O0FBR0gsY0FBVyxLQUNUO21CQUNXLFVBQVU7RUFDM0IsVUFBVSxLQUFLLE9BQU8sQ0FBQzs7UUFFakIsTUFBTSxDQUNQOztFQU1ILE1BQU0sYUFBYSxXQUFXLFNBQVM7QUFFdkMsU0FBTztHQUNMLEdBQUcsS0FBSyxrQkFBa0I7R0FDMUIsTUFBTSxXQUFXLEtBQUssT0FBTztHQUM3QixZQUFZLEtBQUssT0FBTyxXQUFXLEVBQUUsZUFBZTtHQUNwRCxlQUFlLGFBQ1g7SUFDRTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNELEdBQ0Q7SUFBQztJQUFPO0lBQWlCO0lBQW1CO0lBQU87SUFBd0I7SUFBRztHQUNuRiJ9
96
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllcy50ZW1wbGF0ZS5qcyIsIm5hbWVzIjpbIm5hbWVzcGFjZXM6IHN0cmluZ1tdIiwiaW1wb3J0S2V5czogc3RyaW5nW10iLCJ0eXBlUGFyYW1OYW1lczogc3RyaW5nW10iLCJmdW5jdGlvbnM6IHN0cmluZ1tdIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9xdWVyaWVzLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyBkaWZmLCB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBhcGlQYXJhbVRvVHNDb2RlLCBhcGlQYXJhbVR5cGVUb1RzVHlwZSB9IGZyb20gXCIuLi8uLi9hcGkvY29kZS1jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyB0eXBlIEV4dGVuZGVkQXBpIH0gZnJvbSBcIi4uLy4uL2FwaS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX19xdWVyaWVzIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInF1ZXJpZXNcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgcXVlcmllcy5nZW5lcmF0ZWQudHNgLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoe306IFRlbXBsYXRlT3B0aW9uc1tcInF1ZXJpZXNcIl0pIHtcbiAgICBjb25zdCB7IGFwaXMgfSA9IFNvbmFtdS5zeW5jZXI7XG5cbiAgICAvLyB0YW5zdGFjay1xdWVyeeulvCDtj6ztlajtlZwgQVBJ66eMIO2VhO2EsOungVxuICAgIGNvbnN0IHF1ZXJ5QXBpcyA9IGFwaXMuZmlsdGVyKChhcGkpID0+IGFwaS5vcHRpb25zLmNsaWVudHM/LmluY2x1ZGVzKFwidGFuc3RhY2stcXVlcnlcIikpO1xuXG4gICAgLy8g66qo642467OE66GcIOq3uOujue2ZlFxuICAgIGNvbnN0IGFwaXNCeU1vZGVsID0gbmV3IE1hcDxzdHJpbmcsIEV4dGVuZGVkQXBpW10+KCk7XG4gICAgZm9yIChjb25zdCBhcGkgb2YgcXVlcnlBcGlzKSB7XG4gICAgICBjb25zdCBtb2RlbE5hbWUgPSBhcGkubW9kZWxOYW1lLnJlcGxhY2UoL01vZGVsJC8sIFwiXCIpLnJlcGxhY2UoL0ZyYW1lJC8sIFwiXCIpO1xuICAgICAgaWYgKCFhcGlzQnlNb2RlbC5oYXMobW9kZWxOYW1lKSkge1xuICAgICAgICBhcGlzQnlNb2RlbC5zZXQobW9kZWxOYW1lLCBbXSk7XG4gICAgICB9XG4gICAgICBhcGlzQnlNb2RlbC5nZXQobW9kZWxOYW1lKT8ucHVzaChhcGkpO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWVzcGFjZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgdHlwZVBhcmFtTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFttb2RlbE5hbWUsIG1vZGVsQXBpc10gb2YgYXBpc0J5TW9kZWwpIHtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhcGkgb2YgbW9kZWxBcGlzKSB7XG4gICAgICAgIC8vIENvbnRleHQg7KCc7Jm47ZWcIO2MjOudvOuvuO2EsFxuICAgICAgICBjb25zdCBwYXJhbXNXaXRob3V0Q29udGV4dCA9IGFwaS5wYXJhbWV0ZXJzLmZpbHRlcihcbiAgICAgICAgICAocGFyYW0pID0+XG4gICAgICAgICAgICAhQXBpUGFyYW1UeXBlLmlzQ29udGV4dChwYXJhbS50eXBlKSAmJlxuICAgICAgICAgICAgIUFwaVBhcmFtVHlwZS5pc1JlZktuZXgocGFyYW0udHlwZSkgJiZcbiAgICAgICAgICAgICEocGFyYW0ub3B0aW9uYWwgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8g7YOA7J6FIO2MjOudvOuvuO2EsCDsnbTrpoQg7IiY7KeRXG4gICAgICAgIHR5cGVQYXJhbU5hbWVzID0gdHlwZVBhcmFtTmFtZXMuY29uY2F0KGFwaS50eXBlUGFyYW1ldGVycy5tYXAoKHRwKSA9PiB0cC5pZCkpO1xuXG4gICAgICAgIC8vIO2DgOyehSDtjIzrnbzrr7jthLAg7KCV7J2YXG4gICAgICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzQXNUc1R5cGUgPSBhcGkudHlwZVBhcmFtZXRlcnNcbiAgICAgICAgICAubWFwKCh0eXBlUGFyYW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlUGFyYW0sIGltcG9ydEtleXMpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgY29uc3QgdHlwZVBhcmFtc0RlZiA9IHR5cGVQYXJhbWV0ZXJzQXNUc1R5cGUgPyBgPCR7dHlwZVBhcmFtZXRlcnNBc1RzVHlwZX0+YCA6IFwiXCI7XG5cbiAgICAgICAgLy8g7YyM652866+47YSwIOygleydmFxuICAgICAgICBjb25zdCBwYXJhbXNEZWYgPSBhcGlQYXJhbVRvVHNDb2RlKHBhcmFtc1dpdGhvdXRDb250ZXh0LCBpbXBvcnRLZXlzKTtcbiAgICAgICAgY29uc3QgcGFyYW1OYW1lcyA9IHBhcmFtc1dpdGhvdXRDb250ZXh0Lm1hcCgocCkgPT4gcC5uYW1lKS5qb2luKFwiLCBcIik7XG5cbiAgICAgICAgLy8gc2VydmljZU1ldGhvZE5hbWUg6rOE7IKwIChzZXJ2aWNlcy50ZW1wbGF0ZS50c+yZgCDrj5nsnbztlZwg66Gc7KeBKVxuICAgICAgICBjb25zdCBzZXJ2aWNlTWV0aG9kTmFtZSA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZVxuICAgICAgICAgID8gYGdldCR7aW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWUpfWBcbiAgICAgICAgICA6IGFwaS5tZXRob2ROYW1lO1xuXG4gICAgICAgIC8vIFNTUlF1ZXJ5IO2VqOyImCDsg53shLEgKO2VqOyImOuqheuPhCBzZXJ2aWNlTWV0aG9kTmFtZSDsgqzsmqkpXG4gICAgICAgIGZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICAgIGBcbiAgZXhwb3J0IGNvbnN0ICR7c2VydmljZU1ldGhvZE5hbWV9ID0gJHt0eXBlUGFyYW1zRGVmfSgke3BhcmFtc0RlZn0pOiBTU1JRdWVyeSA9PlxuICAgIGNyZWF0ZVNTUlF1ZXJ5KCcke2FwaS5tb2RlbE5hbWV9JywgJyR7YXBpLm1ldGhvZE5hbWV9JywgWyR7cGFyYW1OYW1lc31dLCBbJyR7bW9kZWxOYW1lfScsICcke3NlcnZpY2VNZXRob2ROYW1lfSddKTtcbiAgICAgICAgICBgLnRyaW0oKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbmFtZXNwYWNlcy5wdXNoKFxuICAgICAgICBgXG5leHBvcnQgbmFtZXNwYWNlICR7bW9kZWxOYW1lfVNlcnZpY2Uge1xuJHtmdW5jdGlvbnMuam9pbihcIlxcblxcblwiKX1cbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyB0YW5zdGFjay1xdWVyeSBBUEnqsIAg7JeG7Jy866m0IO2XrO2NvCDtlajsiJjsmYAgaW1wb3J066W8IO2PrO2VqO2VmOyngCDslYrsirXri4jri6QuXG4gICAgLy8g7IOIIO2UhOuhnOygne2KuOyXkOyEnCDssqsg67mM65OcIOyLnCBzeW5j6rCAIOyVhOyngSDslYgg65CY7Ja0IG5hbWVzcGFjZeqwgCDruYTslrTsnojsnYQg7IiYIOyeiOqzoCxcbiAgICAvLyDsnbTrlYwgY3JlYXRlU1NSUXVlcnnqsIAgdW51c2Vk66GcIOu5jOuTnCDsl5Drn6zqsIAg67Cc7IOd7ZWY64qUIOqyg+ydhCDrsKnsp4Dtlanri4jri6QuXG4gICAgY29uc3QgaGFzUXVlcmllcyA9IG5hbWVzcGFjZXMubGVuZ3RoID4gMDtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHk6IG5hbWVzcGFjZXMuam9pbihcIlxcblxcblwiKSxcbiAgICAgIGltcG9ydEtleXM6IGRpZmYodW5pcXVlKGltcG9ydEtleXMpLCB0eXBlUGFyYW1OYW1lcyksXG4gICAgICBjdXN0b21IZWFkZXJzOiBoYXNRdWVyaWVzXG4gICAgICAgID8gW1xuICAgICAgICAgICAgXCIvKipcIixcbiAgICAgICAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgICAgICAgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgICAgIFwiICovXCIsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgXCIvKiBveGxpbnQtZGlzYWJsZSAqL1wiLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIGBpbXBvcnQgdHlwZSB7IFNTUlF1ZXJ5IH0gZnJvbSAnc29uYW11L3Nzcic7YCxcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICBgLy8gU1NSUXVlcnkg7Zes7Y28IO2VqOyImGAsXG4gICAgICAgICAgICBgZnVuY3Rpb24gY3JlYXRlU1NSUXVlcnkobW9kZWxOYW1lOiBzdHJpbmcsIG1ldGhvZE5hbWU6IHN0cmluZywgcGFyYW1zOiBhbnlbXSwgc2VydmljZUtleTogW3N0cmluZywgc3RyaW5nXSk6IFNTUlF1ZXJ5IHtgLFxuICAgICAgICAgICAgYCAgcmV0dXJuIHsgbW9kZWxOYW1lLCBtZXRob2ROYW1lLCBwYXJhbXMsIHNlcnZpY2VLZXksIF9fYnJhbmQ6ICdTU1JRdWVyeScgfSBhcyBTU1JRdWVyeTtgLFxuICAgICAgICAgICAgYH1gLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICBdXG4gICAgICAgIDogW1xuICAgICAgICAgICAgXCIvKipcIixcbiAgICAgICAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgICAgICAgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgICAgIFwiICovXCIsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgXCIvKiBveGxpbnQtZGlzYWJsZSAqL1wiLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICBdLFxuICAgIH07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7c0JBR21GO2FBRXpDO1lBRU87ZUFDVjtBQUV2QyxJQUFhLG9CQUFiLGNBQXVDLFNBQVM7Q0FDOUMsY0FBYztBQUNaLFFBQU0sVUFBVTs7Q0FHbEIsbUJBQW1CO0VBQ2pCLE1BQU0sRUFBRSxRQUFRLE9BQU8sT0FBTztBQUM5QixTQUFPO0dBQ0wsUUFBUSxHQUFHLElBQUk7R0FDZixNQUFNO0dBQ1A7O0NBR0gsT0FBTyxJQUFnQztFQUNyQyxNQUFNLEVBQUUsU0FBUyxPQUFPO0VBR3hCLE1BQU0sWUFBWSxLQUFLLFFBQVEsUUFBUSxJQUFJLFFBQVEsU0FBUyxTQUFTLGlCQUFpQixDQUFDO0VBR3ZGLE1BQU0sY0FBYyxJQUFJLEtBQTRCO0FBQ3BELE9BQUssTUFBTSxPQUFPLFdBQVc7R0FDM0IsTUFBTSxZQUFZLElBQUksVUFBVSxRQUFRLFVBQVUsR0FBRyxDQUFDLFFBQVEsVUFBVSxHQUFHO0FBQzNFLE9BQUksQ0FBQyxZQUFZLElBQUksVUFBVSxFQUFFO0FBQy9CLGdCQUFZLElBQUksV0FBVyxFQUFFLENBQUM7O0FBRWhDLGVBQVksSUFBSSxVQUFVLEVBQUUsS0FBSyxJQUFJOztFQUd2QyxNQUFNQSxhQUF1QixFQUFFO0VBQy9CLE1BQU1DLGFBQXVCLEVBQUU7RUFDL0IsSUFBSUMsaUJBQTJCLEVBQUU7QUFFakMsT0FBSyxNQUFNLENBQUMsV0FBVyxjQUFjLGFBQWE7R0FDaEQsTUFBTUMsWUFBc0IsRUFBRTtBQUU5QixRQUFLLE1BQU0sT0FBTyxXQUFXO0lBRTNCLE1BQU0sdUJBQXVCLElBQUksV0FBVyxRQUN6QyxVQUNDLENBQUMsYUFBYSxVQUFVLE1BQU0sS0FBSyxJQUNuQyxDQUFDLGFBQWEsVUFBVSxNQUFNLEtBQUssSUFDbkMsRUFBRSxNQUFNLFlBQVksTUFBTSxLQUFLLFdBQVcsSUFBSSxFQUNqRDtBQUdELHFCQUFpQixlQUFlLE9BQU8sSUFBSSxlQUFlLEtBQUssT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUc3RSxNQUFNLHlCQUF5QixJQUFJLGVBQ2hDLEtBQUssY0FBYztBQUNsQixZQUFPLHFCQUFxQixXQUFXLFdBQVc7TUFDbEQsQ0FDRCxLQUFLLEtBQUs7SUFDYixNQUFNLGdCQUFnQix5QkFBeUIsSUFBSSx1QkFBdUIsS0FBSztJQUcvRSxNQUFNLFlBQVksaUJBQWlCLHNCQUFzQixXQUFXO0lBQ3BFLE1BQU0sYUFBYSxxQkFBcUIsS0FBSyxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssS0FBSztJQUdyRSxNQUFNLG9CQUFvQixJQUFJLFFBQVEsZUFDbEMsTUFBTSxXQUFXLFNBQVMsSUFBSSxRQUFRLGFBQWEsS0FDbkQsSUFBSTtBQUdSLGNBQVUsS0FDUjtpQkFDTyxrQkFBa0IsS0FBSyxjQUFjLEdBQUcsVUFBVTtzQkFDN0MsSUFBSSxVQUFVLE1BQU0sSUFBSSxXQUFXLE1BQU0sV0FBVyxPQUFPLFVBQVUsTUFBTSxrQkFBa0I7WUFDdkcsTUFBTSxDQUNUOztBQUdILGNBQVcsS0FDVDttQkFDVyxVQUFVO0VBQzNCLFVBQVUsS0FBSyxPQUFPLENBQUM7O1FBRWpCLE1BQU0sQ0FDUDs7RUFNSCxNQUFNLGFBQWEsV0FBVyxTQUFTO0FBRXZDLFNBQU87R0FDTCxHQUFHLEtBQUssa0JBQWtCO0dBQzFCLE1BQU0sV0FBVyxLQUFLLE9BQU87R0FDN0IsWUFBWSxLQUFLLE9BQU8sV0FBVyxFQUFFLGVBQWU7R0FDcEQsZUFBZSxhQUNYO0lBQ0U7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNELEdBQ0Q7SUFDRTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0dBQ04ifQ==