sonamu 0.7.21 → 0.7.23

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 (200) hide show
  1. package/dist/ai/agents/agent.d.ts +6 -1
  2. package/dist/ai/agents/agent.d.ts.map +1 -1
  3. package/dist/ai/agents/agent.js +20 -5
  4. package/dist/api/base-frame.d.ts +4 -0
  5. package/dist/api/base-frame.d.ts.map +1 -1
  6. package/dist/api/base-frame.js +9 -1
  7. package/dist/api/caster.d.ts.map +1 -1
  8. package/dist/api/caster.js +2 -2
  9. package/dist/api/config.d.ts +35 -3
  10. package/dist/api/config.d.ts.map +1 -1
  11. package/dist/api/config.js +1 -1
  12. package/dist/api/decorators.d.ts +4 -4
  13. package/dist/api/decorators.d.ts.map +1 -1
  14. package/dist/api/decorators.js +80 -18
  15. package/dist/api/index.d.ts +1 -0
  16. package/dist/api/index.d.ts.map +1 -1
  17. package/dist/api/index.js +2 -1
  18. package/dist/api/secret.d.ts +7 -0
  19. package/dist/api/secret.d.ts.map +1 -0
  20. package/dist/api/secret.js +17 -0
  21. package/dist/api/sonamu.d.ts +17 -8
  22. package/dist/api/sonamu.d.ts.map +1 -1
  23. package/dist/api/sonamu.js +265 -47
  24. package/dist/cache/cache-manager.d.ts +11 -0
  25. package/dist/cache/cache-manager.d.ts.map +1 -0
  26. package/dist/cache/cache-manager.js +22 -0
  27. package/dist/cache/decorator.d.ts +31 -0
  28. package/dist/cache/decorator.d.ts.map +1 -0
  29. package/dist/cache/decorator.js +86 -0
  30. package/dist/cache/drivers.d.ts +33 -0
  31. package/dist/cache/drivers.d.ts.map +1 -0
  32. package/dist/cache/drivers.js +36 -0
  33. package/dist/cache/index.d.ts +4 -0
  34. package/dist/cache/index.d.ts.map +1 -0
  35. package/dist/cache/index.js +8 -0
  36. package/dist/cache/types.d.ts +28 -0
  37. package/dist/cache/types.d.ts.map +1 -0
  38. package/dist/cache/types.js +6 -0
  39. package/dist/database/base-model.d.ts +4 -2
  40. package/dist/database/base-model.d.ts.map +1 -1
  41. package/dist/database/base-model.js +9 -4
  42. package/dist/database/code-generator.d.ts +3 -1
  43. package/dist/database/code-generator.d.ts.map +1 -1
  44. package/dist/database/code-generator.js +3 -2
  45. package/dist/database/db.d.ts +1 -1
  46. package/dist/database/db.d.ts.map +1 -1
  47. package/dist/database/db.js +5 -5
  48. package/dist/database/knex.d.ts +3 -0
  49. package/dist/database/knex.d.ts.map +1 -0
  50. package/dist/database/knex.js +29 -0
  51. package/dist/database/puri.types.d.ts.map +1 -1
  52. package/dist/database/puri.types.js +1 -1
  53. package/dist/database/upsert-builder.d.ts.map +1 -1
  54. package/dist/database/upsert-builder.js +49 -5
  55. package/dist/index.d.ts +4 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +4 -1
  58. package/dist/logger/category.d.ts +4 -0
  59. package/dist/logger/category.d.ts.map +1 -0
  60. package/dist/logger/category.js +34 -0
  61. package/dist/logger/configure.d.ts +9 -0
  62. package/dist/logger/configure.d.ts.map +1 -0
  63. package/dist/logger/configure.js +115 -0
  64. package/dist/migration/code-generation.d.ts +5 -1
  65. package/dist/migration/code-generation.d.ts.map +1 -1
  66. package/dist/migration/code-generation.js +13 -7
  67. package/dist/migration/migrator.d.ts +1 -1
  68. package/dist/migration/migrator.d.ts.map +1 -1
  69. package/dist/migration/migrator.js +7 -7
  70. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  71. package/dist/migration/postgresql-schema-reader.js +5 -3
  72. package/dist/naite/naite.d.ts +0 -4
  73. package/dist/naite/naite.d.ts.map +1 -1
  74. package/dist/naite/naite.js +11 -19
  75. package/dist/ssr/index.d.ts +4 -0
  76. package/dist/ssr/index.d.ts.map +1 -0
  77. package/dist/ssr/index.js +4 -0
  78. package/dist/ssr/registry.d.ts +10 -0
  79. package/dist/ssr/registry.d.ts.map +1 -0
  80. package/dist/ssr/registry.js +43 -0
  81. package/dist/ssr/renderer.d.ts +6 -0
  82. package/dist/ssr/renderer.d.ts.map +1 -0
  83. package/dist/ssr/renderer.js +70 -0
  84. package/dist/ssr/types.d.ts +19 -0
  85. package/dist/ssr/types.d.ts.map +1 -0
  86. package/dist/ssr/types.js +4 -0
  87. package/dist/syncer/syncer.d.ts +1 -0
  88. package/dist/syncer/syncer.d.ts.map +1 -1
  89. package/dist/syncer/syncer.js +58 -1
  90. package/dist/tasks/decorator.d.ts +1 -0
  91. package/dist/tasks/decorator.d.ts.map +1 -1
  92. package/dist/tasks/decorator.js +9 -7
  93. package/dist/tasks/step-wrapper.d.ts +5 -0
  94. package/dist/tasks/step-wrapper.d.ts.map +1 -1
  95. package/dist/tasks/step-wrapper.js +11 -6
  96. package/dist/tasks/workflow-manager.d.ts +2 -0
  97. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  98. package/dist/tasks/workflow-manager.js +5 -2
  99. package/dist/template/implementations/entry-server.template.d.ts +17 -0
  100. package/dist/template/implementations/entry-server.template.d.ts.map +1 -0
  101. package/dist/template/implementations/entry-server.template.js +78 -0
  102. package/dist/template/implementations/model.template.d.ts.map +1 -1
  103. package/dist/template/implementations/model.template.js +5 -3
  104. package/dist/template/implementations/queries.template.d.ts +17 -0
  105. package/dist/template/implementations/queries.template.d.ts.map +1 -0
  106. package/dist/template/implementations/queries.template.js +83 -0
  107. package/dist/template/implementations/view_enums_select.template.d.ts.map +1 -1
  108. package/dist/template/implementations/view_enums_select.template.js +34 -20
  109. package/dist/template/implementations/view_form.template.d.ts +2 -1
  110. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  111. package/dist/template/implementations/view_form.template.js +301 -129
  112. package/dist/template/implementations/view_id_async_select.template.d.ts.map +1 -1
  113. package/dist/template/implementations/view_id_async_select.template.js +136 -57
  114. package/dist/template/implementations/view_list.template.d.ts +2 -0
  115. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  116. package/dist/template/implementations/view_list.template.js +392 -227
  117. package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
  118. package/dist/template/implementations/view_search_input.template.js +46 -30
  119. package/dist/template/zod-converter.d.ts.map +1 -1
  120. package/dist/template/zod-converter.js +2 -2
  121. package/dist/testing/bootstrap.d.ts +28 -0
  122. package/dist/testing/bootstrap.d.ts.map +1 -0
  123. package/dist/testing/bootstrap.js +120 -0
  124. package/dist/testing/fixture-loader.d.ts +21 -0
  125. package/dist/testing/fixture-loader.d.ts.map +1 -0
  126. package/dist/testing/fixture-loader.js +28 -0
  127. package/dist/testing/fixture-manager.d.ts +1 -1
  128. package/dist/testing/fixture-manager.d.ts.map +1 -1
  129. package/dist/testing/fixture-manager.js +7 -7
  130. package/dist/testing/index.d.ts +4 -0
  131. package/dist/testing/index.d.ts.map +1 -0
  132. package/dist/testing/index.js +5 -0
  133. package/dist/testing/naite-vitest-reporter.d.ts +12 -0
  134. package/dist/testing/naite-vitest-reporter.d.ts.map +1 -0
  135. package/dist/testing/naite-vitest-reporter.js +17 -0
  136. package/dist/types/types.d.ts +5 -6
  137. package/dist/types/types.d.ts.map +1 -1
  138. package/dist/types/types.js +7 -8
  139. package/dist/ui/ai-client.d.ts +3 -1
  140. package/dist/ui/ai-client.d.ts.map +1 -1
  141. package/dist/ui/ai-client.js +27 -8
  142. package/dist/ui-web/assets/index-CTYv3qL6.js +92 -0
  143. package/dist/ui-web/index.html +1 -1
  144. package/package.json +43 -20
  145. package/src/ai/agents/agent.ts +38 -19
  146. package/src/api/base-frame.ts +8 -0
  147. package/src/api/caster.ts +6 -1
  148. package/src/api/config.ts +38 -4
  149. package/src/api/decorators.ts +106 -20
  150. package/src/api/index.ts +1 -0
  151. package/src/api/secret.ts +23 -0
  152. package/src/api/sonamu.ts +334 -61
  153. package/src/cache/cache-manager.ts +23 -0
  154. package/src/cache/decorator.ts +116 -0
  155. package/src/cache/drivers.ts +42 -0
  156. package/src/cache/index.ts +16 -0
  157. package/src/cache/types.ts +32 -0
  158. package/src/database/base-model.ts +7 -3
  159. package/src/database/code-generator.ts +3 -1
  160. package/src/database/db.ts +5 -5
  161. package/src/database/knex.ts +34 -0
  162. package/src/database/puri.types.ts +2 -3
  163. package/src/database/upsert-builder.ts +58 -4
  164. package/src/index.ts +4 -0
  165. package/src/logger/category.ts +42 -0
  166. package/src/logger/configure.ts +132 -0
  167. package/src/migration/code-generation.ts +19 -6
  168. package/src/migration/migrator.ts +7 -6
  169. package/src/migration/postgresql-schema-reader.ts +7 -2
  170. package/src/naite/naite.ts +10 -18
  171. package/src/shared/web.shared.ts.txt +1 -1
  172. package/src/ssr/index.ts +13 -0
  173. package/src/ssr/registry.ts +52 -0
  174. package/src/ssr/renderer.ts +105 -0
  175. package/src/ssr/types.ts +20 -0
  176. package/src/syncer/syncer.ts +59 -0
  177. package/src/tasks/decorator.ts +20 -4
  178. package/src/tasks/step-wrapper.ts +14 -5
  179. package/src/tasks/workflow-manager.ts +9 -1
  180. package/src/template/implementations/entry-server.template.ts +81 -0
  181. package/src/template/implementations/model.template.ts +4 -2
  182. package/src/template/implementations/queries.template.ts +111 -0
  183. package/src/template/implementations/view_enums_select.template.ts +33 -19
  184. package/src/template/implementations/view_form.template.ts +324 -145
  185. package/src/template/implementations/view_id_async_select.template.ts +145 -56
  186. package/src/template/implementations/view_list.template.ts +446 -236
  187. package/src/template/implementations/view_search_input.template.ts +45 -29
  188. package/src/template/zod-converter.ts +4 -1
  189. package/src/testing/bootstrap.ts +176 -0
  190. package/src/testing/fixture-loader.ts +28 -0
  191. package/src/testing/fixture-manager.ts +7 -6
  192. package/src/testing/index.ts +3 -0
  193. package/src/testing/naite-vitest-reporter.ts +18 -0
  194. package/src/types/types.ts +4 -5
  195. package/src/ui/ai-client.ts +82 -50
  196. package/dist/template/implementations/view_enums_dropdown.template.d.ts +0 -17
  197. package/dist/template/implementations/view_enums_dropdown.template.d.ts.map +0 -1
  198. package/dist/template/implementations/view_enums_dropdown.template.js +0 -50
  199. package/dist/ui-web/assets/index-B87IyofX.js +0 -92
  200. package/src/template/implementations/view_enums_dropdown.template.ts +0 -53
@@ -1,11 +1,11 @@
1
1
  import assert from "assert";
2
2
  import chalk from "chalk";
3
3
  import { mkdir, readdir, unlink, writeFile } from "node:fs/promises";
4
- import knex from "knex";
5
4
  import path from "path";
6
5
  import { group, sum, unique } from "radashi";
7
6
  import { Sonamu } from "../api/index.js";
8
7
  import { DB } from "../database/db.js";
8
+ import { createKnexInstance } from "../database/knex.js";
9
9
  import { EntityManager } from "../entity/entity-manager.js";
10
10
  import { ServiceUnavailableException } from "../exceptions/so-exceptions.js";
11
11
  import { Naite } from "../naite/naite.js";
@@ -44,7 +44,7 @@ export class Migrator {
44
44
  let migrationStatusError;
45
45
  const statuses = await Promise.all(connKeys.map(async (connKey)=>{
46
46
  const knexOptions = Sonamu.dbConfig[connKey];
47
- const tConn = knex(knexOptions);
47
+ const tConn = createKnexInstance(knexOptions);
48
48
  const status = await (async ()=>{
49
49
  try {
50
50
  return await tConn.migrate.status();
@@ -90,7 +90,7 @@ export class Migrator {
90
90
  console.warn(chalk.yellow(`While trying to prepare migration codes, we found that there is no database to compare migrations. We need at least one database where every migration is applied(status === 0). You might want to apply your existing migrations to one of the databases.`));
91
91
  return [];
92
92
  }
93
- const compareDBconn = knex(Sonamu.dbConfig[status0conn.connKey]);
93
+ const compareDBconn = createKnexInstance(Sonamu.dbConfig[status0conn.connKey]);
94
94
  const genCodes = await this.compareMigrations(compareDBconn);
95
95
  await compareDBconn.destroy();
96
96
  return genCodes;
@@ -123,7 +123,7 @@ export class Migrator {
123
123
  // get connections
124
124
  const conns = await Promise.all(configs.map(async (config)=>({
125
125
  connKey: config.connKey,
126
- knex: knex(config.options)
126
+ knex: createKnexInstance(config.options)
127
127
  })));
128
128
  // action
129
129
  const result = await (async ()=>{
@@ -285,7 +285,7 @@ export class Migrator {
285
285
  await DB.destroy();
286
286
  }
287
287
  // 기존 Shadow DB 삭제 후 Shadow DB 생성
288
- const tdb = knex(Sonamu.dbConfig.test);
288
+ const tdb = createKnexInstance(Sonamu.dbConfig.test);
289
289
  !isTest() && console.log(chalk.magenta(`${shadowDatabase} 삭제`));
290
290
  await tdb.raw(`DROP DATABASE IF EXISTS ${shadowDatabase}`);
291
291
  await tdb.raw(`
@@ -296,7 +296,7 @@ export class Migrator {
296
296
  `);
297
297
  await tdb.raw(`CREATE DATABASE ${shadowDatabase} TEMPLATE ${tdbConn.database}`);
298
298
  // Shadow DB에 연결
299
- const sdb = knex({
299
+ const sdb = createKnexInstance({
300
300
  ...Sonamu.dbConfig.test,
301
301
  connection: {
302
302
  ...tdbConn,
@@ -333,4 +333,4 @@ export class Migrator {
333
333
  }
334
334
  }
335
335
 
336
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vbWlncmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyBta2RpciwgcmVhZGRpciwgdW5saW5rLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBrbmV4LCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgZ3JvdXAsIHN1bSwgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB7IERCLCB0eXBlIFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uIH0gZnJvbSBcIi4uL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB0eXBlIHsgR2VuTWlncmF0aW9uQ29kZSwgTWlncmF0aW9uU2V0IH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBpc1Rlc3QgfSBmcm9tIFwiLi4vdXRpbHMvY29udHJvbGxlclwiO1xuaW1wb3J0IHsgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxzL2ZzLXV0aWxzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUFsdGVyQ29kZSwgZ2VuZXJhdGVDcmVhdGVDb2RlIH0gZnJvbSBcIi4vY29kZS1nZW5lcmF0aW9uXCI7XG5pbXBvcnQgeyBnZXRNaWdyYXRpb25TZXRGcm9tRW50aXR5IH0gZnJvbSBcIi4vbWlncmF0aW9uLXNldFwiO1xuaW1wb3J0IHsgUG9zdGdyZVNRTFNjaGVtYVJlYWRlciB9IGZyb20gXCIuL3Bvc3RncmVzcWwtc2NoZW1hLXJlYWRlclwiO1xuaW1wb3J0IHR5cGUgeyBDb25uU3RyaW5nLCBNaWdyYXRpb25Db2RlLCBNaWdyYXRpb25TdGF0dXMgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5leHBvcnQgdHlwZSBNaWdyYXRpb25SZXN1bHQgPSB7XG4gIGNvbm5LZXk6IHN0cmluZztcbiAgYmF0Y2hObzogbnVtYmVyO1xuICBhcHBsaWVkOiBzdHJpbmdbXTtcbn1bXTtcblxuZXhwb3J0IGNsYXNzIE1pZ3JhdG9yIHtcbiAgcHJpdmF0ZSBhc3luYyBnZXRNaWdyYXRpb25Db2RlcygpOiBQcm9taXNlPE1pZ3JhdGlvbkNvZGVbXT4ge1xuICAgIGNvbnN0IHNyY01pZ3JhdGlvbnNEaXIgPSBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBcInNyY1wiLCBcIm1pZ3JhdGlvbnNcIik7IC8vIOydtOqxtCDtmZjqsr3sl5Ag6rSA6rOE7JeG7J20IO2VreyDgSBzcmPsl5DshJwg7LC+7JWE7JW8IO2VtOyalC5cblxuICAgIGlmICghKGF3YWl0IGV4aXN0cyhzcmNNaWdyYXRpb25zRGlyKSkpIHtcbiAgICAgIGF3YWl0IG1rZGlyKHNyY01pZ3JhdGlvbnNEaXIsIHtcbiAgICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgY29kZXMgPSAoYXdhaXQgcmVhZGRpcihzcmNNaWdyYXRpb25zRGlyKSlcbiAgICAgIC5maWx0ZXIoKGYpID0+IGYuZW5kc1dpdGgoXCIudHNcIikpXG4gICAgICAubWFwKChmKSA9PiAoe1xuICAgICAgICBuYW1lOiBmLnJlcGxhY2UoXCIudHNcIiwgXCJcIiksXG4gICAgICAgIHBhdGg6IHBhdGguam9pbihzcmNNaWdyYXRpb25zRGlyLCBmKSxcbiAgICAgIH0pKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IChhLm5hbWUgPCBiLm5hbWUgPyAxIDogLTEpKTsgLy8g7J2066aEIOuCtOumvOywqOyInCDsoJXroKwo7LWc7Iug7IicKVxuXG4gICAgTmFpdGUudChcIm1pZ3JhdG9yOmdldE1pZ3JhdGlvbkNvZGVzOnJlc3VsdHNcIiwgY29kZXMpO1xuICAgIHJldHVybiBjb2RlcztcbiAgfVxuXG4gIC8qKlxuICAgKiDtg4Dqsp/rs4Qg66eI7J206re466CI7J207IWYIOyDge2DnOyZgCDsvZTrk5wg7IOd7ISxL+ykgOu5hCDsg4Htg5zrpbwg6rWs7ZW07Ji164uI64ukLlxuICAgKiDsi6TsoJzroZwgRELsl5Ag7KCR6re864+EIO2VmOqzoCDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcIO2MjOydvOuPhCDtmZXsnbjtlZjqs6AsXG4gICAqIO2VhOyalO2VmOuLpOuptCDsoIHsmqntlaAg7IiYIOyeiOuKlCDsvZTrk5zrpbwg7IOd7ISx6rmM7KeAIO2VtOyYteuLiOuLpC5cbiAgICpcbiAgICogQ0xJ7JmAIFNvbmFtdSBVSeyXkOyEnCDsgqzsmqnrkKnri4jri6QuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhc3luYyBnZXRTdGF0dXMoKTogUHJvbWlzZTxNaWdyYXRpb25TdGF0dXM+IHtcbiAgICBjb25zdCBjb2RlcyA9IGF3YWl0IHRoaXMuZ2V0TWlncmF0aW9uQ29kZXMoKTtcbiAgICBOYWl0ZS50KFwibWlncmF0b3I6Z2V0U3RhdHVzOmNvZGVzXCIsIGNvZGVzKTtcblxuICAgIGNvbnN0IGNvbm5LZXlzID0gT2JqZWN0LmtleXMoU29uYW11LmRiQ29uZmlnKS5maWx0ZXIoXG4gICAgICAoa2V5KSA9PiBrZXkuZW5kc1dpdGgoXCJfc2xhdmVcIikgPT09IGZhbHNlLFxuICAgICkgYXMgKGtleW9mIHR5cGVvZiBTb25hbXUuZGJDb25maWcpW107XG5cbiAgICBsZXQgbWlncmF0aW9uU3RhdHVzRXJyb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHN0YXR1c2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBjb25uS2V5cy5tYXAoYXN5bmMgKGNvbm5LZXkpID0+IHtcbiAgICAgICAgY29uc3Qga25leE9wdGlvbnMgPSBTb25hbXUuZGJDb25maWdbY29ubktleV07XG4gICAgICAgIGNvbnN0IHRDb25uID0ga25leChrbmV4T3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRDb25uLm1pZ3JhdGUuc3RhdHVzKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgIGNoYWxrLnllbGxvdyhcbiAgICAgICAgICAgICAgICBgJHtjb25uS2V5feydmCDrp4jsnbTqt7jroIjsnbTshZgg7IOB7YOc66W8IOqwgOyguOyYpOuKlCDrjbDsl5Ag7Iuk7Yyo7ZWY7JiA7Iq164uI64ukLiDrjbDsnbTthLDrsqDsnbTsiqTqsIAg7Jis67CU66W06rKMIOq1rOyEseuQmOyngCDslYrsnYAg6rKDIOqwmeyKteuLiOuLpC4g7ZmV7J247ZWY7Iuc6rOgIOuLpOyLnCDsi5zrj4TtlbTso7zshLjsmpQuXFxu7Iuc64+E7ZWcIOyXsOqysCDshKTsoJU6XFxuJHtKU09OLnN0cmluZ2lmeShrbmV4T3B0aW9ucy5jb25uZWN0aW9uLCBudWxsLCAyKX1cXG7rsJzsg53tlZwg7JeQ65+sOlxcbiR7ZXJyfVxcbmAsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWlncmF0aW9uU3RhdHVzRXJyb3IgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgICAgICByZXR1cm4gXCJlcnJvclwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICAgICAgY29uc3QgcGVuZGluZzogc3RyaW5nW10gPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBbLCBmZExpc3RdID0gYXdhaXQgdENvbm4ubWlncmF0ZS5saXN0KCk7XG4gICAgICAgICAgICByZXR1cm4gZmRMaXN0Lm1hcCgoZmQ6IHsgZmlsZTogc3RyaW5nIH0pID0+IGZkLmZpbGUucmVwbGFjZShcIi50c1wiLCBcIlwiKSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBtaWdyYXRpb25TdGF0dXNFcnJvciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRDb25uLm1pZ3JhdGUuY3VycmVudFZlcnNpb24oKTtcbiAgICAgICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAgICAgICBtaWdyYXRpb25TdGF0dXNFcnJvciA9IF9lcnIgaW5zdGFuY2VvZiBFcnJvciA/IF9lcnIubWVzc2FnZSA6IFN0cmluZyhfZXJyKTtcbiAgICAgICAgICAgIHJldHVybiBcImVycm9yXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgICAgICBOYWl0ZS50KFwibWlncmF0b3I6Z2V0U3RhdHVzOnN0YXR1c1wiLCBzdGF0dXMpO1xuXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBrbmV4T3B0aW9ucy5jb25uZWN0aW9uIGFzIEtuZXguUGdDb25uZWN0aW9uQ29uZmlnO1xuXG4gICAgICAgIGF3YWl0IHRDb25uLmRlc3Ryb3koKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IGNvbm5LZXkucmVwbGFjZShcIl9tYXN0ZXJcIiwgXCJcIiksXG4gICAgICAgICAgY29ubktleSxcbiAgICAgICAgICBjb25uU3RyaW5nOiBgcGc6Ly8ke2Nvbm5lY3Rpb24udXNlciA/PyBcIlwifUAke2Nvbm5lY3Rpb24uaG9zdH06JHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb24ucG9ydFxuICAgICAgICAgIH0vJHtjb25uZWN0aW9uLmRhdGFiYXNlfWAgYXMgQ29ublN0cmluZyxcbiAgICAgICAgICBjdXJyZW50VmVyc2lvbixcbiAgICAgICAgICBzdGF0dXM6IHN0YXR1cyBhcyBudW1iZXIgfCBcImVycm9yXCIsXG4gICAgICAgICAgcGVuZGluZyxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBOYWl0ZS50KFwibWlncmF0b3I6Z2V0U3RhdHVzOmNvbm5zXCIsIHN0YXR1c2VzKTtcblxuICAgIGNvbnN0IHByZXBhcmVkQ29kZXM6IEdlbk1pZ3JhdGlvbkNvZGVbXSA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzdGF0dXMwY29ubiA9IHN0YXR1c2VzLmZpbmQoKHN0YXR1cykgPT4gc3RhdHVzLnN0YXR1cyA9PT0gMCk7XG4gICAgICBpZiAoc3RhdHVzMGNvbm4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICAgICAgYFdoaWxlIHRyeWluZyB0byBwcmVwYXJlIG1pZ3JhdGlvbiBjb2Rlcywgd2UgZm91bmQgdGhhdCB0aGVyZSBpcyBubyBkYXRhYmFzZSB0byBjb21wYXJlIG1pZ3JhdGlvbnMuIFdlIG5lZWQgYXQgbGVhc3Qgb25lIGRhdGFiYXNlIHdoZXJlIGV2ZXJ5IG1pZ3JhdGlvbiBpcyBhcHBsaWVkKHN0YXR1cyA9PT0gMCkuIFlvdSBtaWdodCB3YW50IHRvIGFwcGx5IHlvdXIgZXhpc3RpbmcgbWlncmF0aW9ucyB0byBvbmUgb2YgdGhlIGRhdGFiYXNlcy5gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tcGFyZURCY29ubiA9IGtuZXgoU29uYW11LmRiQ29uZmlnW3N0YXR1czBjb25uLmNvbm5LZXldKTtcbiAgICAgIGNvbnN0IGdlbkNvZGVzID0gYXdhaXQgdGhpcy5jb21wYXJlTWlncmF0aW9ucyhjb21wYXJlREJjb25uKTtcblxuICAgICAgYXdhaXQgY29tcGFyZURCY29ubi5kZXN0cm95KCk7XG5cbiAgICAgIHJldHVybiBnZW5Db2RlcztcbiAgICB9KSgpO1xuXG4gICAgTmFpdGUudChcIm1pZ3JhdG9yOmdldFN0YXR1czpwcmVwYXJlZENvZGVzXCIsIHByZXBhcmVkQ29kZXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbm5zOiBzdGF0dXNlcyxcbiAgICAgIGNvZGVzLFxuICAgICAgcHJlcGFyZWRDb2RlcyxcbiAgICAgIGVycm9yOiBtaWdyYXRpb25TdGF0dXNFcnJvcixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIOuniOydtOq3uOugiOydtOyFmOydhCDsoIHsmqntlZjqsbDrgpgg66Gk67Cx7ZWp64uI64ukLlxuICAgKiBTb25hbXUgVUnsl5DshJwg66eI7J206re466CI7J207IWYIOyekeyXheydhCDsiJjtlontlaAg65WMIOyCrOyaqeuQqeuLiOuLpC5cbiAgICpcbiAgICogQ0xJ7JmAIFNvbmFtdSBVSeyXkOyEnCDsgqzsmqnrkKnri4jri6QuXG4gICAqXG4gICAqIEBwYXJhbSBhY3Rpb24g7J6R7JeFIOycoO2YlSAoYXBwbHkvcm9sbGJhY2spXG4gICAqIEBwYXJhbSB0YXJnZXRzIOyekeyXhSDrjIDsg4EgREIg7ISk7KCVIO2CpCAoa2V5b2YgU29uYW11REJDb25maWcpXG4gICAqIEByZXR1cm5zIOyekeyXhSDqsrDqs7xcbiAgICovXG4gIGFzeW5jIHJ1bkFjdGlvbihcbiAgICBhY3Rpb246IFwiYXBwbHlcIiB8IFwicm9sbGJhY2tcIixcbiAgICB0YXJnZXRzOiAoa2V5b2YgU29uYW11REJDb25maWcpW10sXG4gICk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0PiB7XG4gICAgTmFpdGUudChcIm1pZ3JhdG9yOnJ1bkFjdGlvbjphY3Rpb25cIiwgYWN0aW9uKTtcbiAgICBOYWl0ZS50KFwibWlncmF0b3I6cnVuQWN0aW9uOnRhcmdldHNcIiwgdGFyZ2V0cyk7XG5cbiAgICAvLyBnZXQgdW5pcSBrbmV4IGNvbmZpZ3NcbiAgICBjb25zdCBjb25maWdzID0gdW5pcXVlKFxuICAgICAgdGFyZ2V0c1xuICAgICAgICAubWFwKCh0YXJnZXQpID0+ICh7XG4gICAgICAgICAgY29ubktleTogdGFyZ2V0LFxuICAgICAgICAgIG9wdGlvbnM6IFNvbmFtdS5kYkNvbmZpZ1t0YXJnZXQgYXMga2V5b2YgdHlwZW9mIFNvbmFtdS5kYkNvbmZpZ10sXG4gICAgICAgIH0pKVxuICAgICAgICAuZmlsdGVyKChjKSA9PiBjLm9wdGlvbnMgIT09IHVuZGVmaW5lZCksXG4gICAgICAoeyBvcHRpb25zIH0pID0+XG4gICAgICAgIGAkeyhvcHRpb25zLmNvbm5lY3Rpb24gYXMgS25leC5QZ0Nvbm5lY3Rpb25Db25maWcpLmhvc3R9OiR7XG4gICAgICAgICAgKG9wdGlvbnMuY29ubmVjdGlvbiBhcyBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZykucG9ydCA/PyA1NDMyXG4gICAgICAgIH0vJHsob3B0aW9ucy5jb25uZWN0aW9uIGFzIEtuZXguUGdDb25uZWN0aW9uQ29uZmlnKS5kYXRhYmFzZX1gLFxuICAgICk7XG5cbiAgICAvLyBnZXQgY29ubmVjdGlvbnNcbiAgICBjb25zdCBjb25ucyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgY29uZmlncy5tYXAoYXN5bmMgKGNvbmZpZykgPT4gKHtcbiAgICAgICAgY29ubktleTogY29uZmlnLmNvbm5LZXksXG4gICAgICAgIGtuZXg6IGtuZXgoY29uZmlnLm9wdGlvbnMpLFxuICAgICAgfSkpLFxuICAgICk7XG5cbiAgICAvLyBhY3Rpb25cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgY2FzZSBcImFwcGx5XCI6XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgY29ubnMubWFwKGFzeW5jICh7IGNvbm5LZXksIGtuZXggfSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBbYmF0Y2hObywgYXBwbGllZF0gPSBhd2FpdCBrbmV4Lm1pZ3JhdGUubGF0ZXN0KCk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29ubktleSxcbiAgICAgICAgICAgICAgICBiYXRjaE5vLFxuICAgICAgICAgICAgICAgIGFwcGxpZWQsIC8vIOydtOuyiCBsYXRlc3Qg7Zi47Lac66GcIOyduO2VtCBcInVwXCLsnbQg7KCB7Jqp65CcIOuniOydtOq3uOugiOydtOyFmCDsnbTrpoQoZS5nLiBcIjIwMjUxMTI0MjMzNTU3X2NyZWF0ZV9fY29tcGFuaWVzLnRzXCIp65Ok7J2YIOuwsOyXtOyeheuLiOuLpC4g7LC46rOgOiBodHRwczovL2dpdGh1Yi5jb20va25leC9rbmV4L2Jsb2IvMDFiMTc3YzQ4NWQ2OTZmMWI3Mjg1OGRlZTcyOGJhMTQzYzRmYWQ3Ni9saWIvbWlncmF0aW9ucy9taWdyYXRlL01pZ3JhdG9yLmpzI0w1NjBcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJyb2xsYmFja1wiOlxuICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIGNvbm5zLm1hcChhc3luYyAoeyBjb25uS2V5LCBrbmV4IH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgW2JhdGNoTm8sIGFwcGxpZWRdID0gYXdhaXQga25leC5taWdyYXRlLnJvbGxiYWNrKCk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29ubktleSxcbiAgICAgICAgICAgICAgICBiYXRjaE5vLFxuICAgICAgICAgICAgICAgIGFwcGxpZWQsIC8vIOydtOuyiCByb2xsYmFjayDtmLjstpzroZwg7J247ZW0IFwiZG93blwi7J20IOyggeyaqeuQnCg966Gk67Cx65CcKSDrp4jsnbTqt7jroIjsnbTshZgg7J2066aEKGUuZy4gXCIyMDI1MTEyNDIzMzU1N19jcmVhdGVfX2NvbXBhbmllcy50c1wiKeuTpOydmCDrsLDsl7TsnoXri4jri6QuIOywuOqzoDogaHR0cHM6Ly9naXRodWIuY29tL2tuZXgva25leC9ibG9iLzAxYjE3N2M0ODVkNjk2ZjFiNzI4NThkZWU3MjhiYTE0M2M0ZmFkNzYvbGliL21pZ3JhdGlvbnMvbWlncmF0ZS9NaWdyYXRvci5qcyNMNjExXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICAvLyBkZXN0cm95XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBjb25ucy5tYXAoKHsga25leCB9KSA9PiB7XG4gICAgICAgIHJldHVybiBrbmV4LmRlc3Ryb3koKTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBOYWl0ZS50KFwibWlncmF0b3I6cnVuQWN0aW9uOnJlc3VsdFwiLCByZXN1bHQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiDsgq3soJwg6rCA64ql7ZWcIOuniOydtOq3uOugiOydtOyFmCDsvZTrk5wg7YyM7J287J2EIOqygOymne2VqeuLiOuLpC5cbiAgICpcbiAgICogQHBhcmFtIGNvbm5zIOuniOydtOq3uOugiOydtOyFmCDsg4Htg5wg67Cw7Je0XG4gICAqIEBwYXJhbSBjb2RlTmFtZXMg7IKt7KCc7ZWgIOuniOydtOq3uOugiOydtOyFmCDsvZTrk5wg7YyM7J28IOydtOumhCDrsLDsl7RcbiAgICogQHJldHVybnMg7IKt7KCcIOqwgOuKpSDsl6zrtoAg67CPIOyggeyaqeuQnCDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcIO2MjOydvCDsnbTrpoRcbiAgICovXG4gIHZhbGlkYXRlRGVsZXRhYmxlKGNvbm5zOiBNaWdyYXRpb25TdGF0dXNbXCJjb25uc1wiXSwgY29kZU5hbWVzOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IGFwcGxpZWRDb2RlcyA9IGNvZGVOYW1lcy5maWx0ZXIoKGNvZGVOYW1lKSA9PlxuICAgICAgY29ubnMuc29tZSgoY29ubikgPT4gY29ubi5wZW5kaW5nLmluY2x1ZGVzKGNvZGVOYW1lKSA9PT0gZmFsc2UpLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2FuRGVsZXRlOiBhcHBsaWVkQ29kZXMubGVuZ3RoID09PSAwLFxuICAgICAgYXBwbGllZENvZGVzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog66eI7J206re466CI7J207IWYIOy9lOuTnCDtjIzsnbzsnYQg7IKt7KCc7ZWp64uI64ukLlxuICAgKlxuICAgKiBTb25hbXUgVUnsl5DshJwg7IKs7Jqp65Cp64uI64ukLlxuICAgKlxuICAgKiBAcGFyYW0gY29kZU5hbWVzIOyCreygnO2VoCDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcIO2MjOydvCDsnbTrpoQg67Cw7Je0XG4gICAqIEByZXR1cm5zIOyCreygnOuQnCDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcIO2MjOydvCDqsJzsiJhcbiAgICovXG4gIGFzeW5jIGRlbENvZGVzKGNvZGVOYW1lczogc3RyaW5nW10pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHsgY29ubnMgfSA9IGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgY29uc3QgeyBjYW5EZWxldGUsIGFwcGxpZWRDb2RlcyB9ID0gdGhpcy52YWxpZGF0ZURlbGV0YWJsZShjb25ucywgY29kZU5hbWVzKTtcbiAgICBpZiAoIWNhbkRlbGV0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgWW91IGNhbm5vdCBkZWxldGUgYSBtaWdyYXRpb24gZmlsZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGFwcGxpZWQuIEFwcGxpZWQgY29kZXM6ICR7YXBwbGllZENvZGVzLmpvaW4oXCIsIFwiKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VtKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIGNvZGVOYW1lcy5tYXAoYXN5bmMgKGNvZGVOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBgJHtTb25hbXUuYXBpUm9vdFBhdGh9L3NyYy9taWdyYXRpb25zLyR7Y29kZU5hbWV9LnRzYDtcbiAgICAgICAgICBpZiAoYXdhaXQgZXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgICAgICAgYXdhaXQgdW5saW5rKGZpbGVQYXRoKTtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdlbkRhdGVUYWcoaW5kZXg6IG51bWJlciwgYmFzZURhdGU6IERhdGUgPSBuZXcgRGF0ZSgpKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoYmFzZURhdGUuZ2V0VGltZSgpICsgaW5kZXggKiAxMDAwKTtcbiAgICBjb25zdCBwYWQgPSAobnVtOiBudW1iZXIsIHNpemU6IG51bWJlciA9IDIpID0+IG51bS50b1N0cmluZygpLnBhZFN0YXJ0KHNpemUsIFwiMFwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkgK1xuICAgICAgcGFkKGRhdGUuZ2V0TW9udGgoKSArIDEpICtcbiAgICAgIHBhZChkYXRlLmdldERhdGUoKSkgK1xuICAgICAgcGFkKGRhdGUuZ2V0SG91cnMoKSkgK1xuICAgICAgcGFkKGRhdGUuZ2V0TWludXRlcygpKSArXG4gICAgICBwYWQoZGF0ZS5nZXRTZWNvbmRzKCkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcIO2MjOydvOydhCDsg53shLHtlanri4jri6QuXG4gICAqXG4gICAqIFNvbmFtdSBVSeyXkOyEnCDsgqzsmqnrkKnri4jri6QuXG4gICAqXG4gICAqIEByZXR1cm5zIOyDneyEseuQnCDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcIO2MjOydvCDqsJzsiJhcbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlUHJlcGFyZWRDb2RlcygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHsgcHJlcGFyZWRDb2RlcyB9ID0gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICBOYWl0ZS50KFwibWlncmF0b3I6Z2VuZXJhdGVQcmVwYXJlZENvZGVzOnByZXBhcmVkQ29kZXNcIiwgcHJlcGFyZWRDb2Rlcyk7XG4gICAgaWYgKHByZXBhcmVkQ29kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihcIlxcbu2YhOyerCDrqqjrkZAg7Iux7YGs65CcIOyDge2DnOyeheuLiOuLpC5cIikpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLy8g7Iuk7KCcIOy9lOuTnCDsg53shLFcbiAgICBjb25zdCBtaWdyYXRpb25zRGlyID0gYCR7U29uYW11LmFwaVJvb3RQYXRofS9zcmMvbWlncmF0aW9uc2A7XG5cbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgcGNvZGVdIG9mIHByZXBhcmVkQ29kZXMuZW50cmllcygpKSB7XG4gICAgICBpZiAocGNvZGUuZm9ybWF0dGVkKSB7XG4gICAgICAgIGNvbnN0IGRhdGVUYWcgPSB0aGlzLmdlbkRhdGVUYWcoaW5kZXgpO1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGAke21pZ3JhdGlvbnNEaXJ9LyR7ZGF0ZVRhZ31fJHtwY29kZS50aXRsZX0udHNgO1xuICAgICAgICBhd2FpdCB3cml0ZUZpbGUoZmlsZVBhdGgsIHBjb2RlLmZvcm1hdHRlZCk7XG4gICAgICAgICFpc1Rlc3QoKSAmJiBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgTUlHUlRBSU9OIENSRUFURUQgJHtmaWxlUGF0aH1gKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZXBhcmVkQ29kZXMubGVuZ3RoO1xuICB9XG5cbiAgYXN5bmMgY29tcGFyZU1pZ3JhdGlvbnMoY29tcGFyZURCOiBLbmV4KTogUHJvbWlzZTxHZW5NaWdyYXRpb25Db2RlW10+IHtcbiAgICAvLyBFbnRpdHkg7Iic7ZqM7ZWY7JesIOyLse2BrFxuICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG5cbiAgICAvLyDsobDsnbjthYzsnbTruJQg7Y+s7ZWo7ZWY7JesIEVudGl0eeyXkOyEnCBNaWdyYXRpb25TZXQg7LaU7LacXG4gICAgY29uc3QgZW50aXR5U2V0c1dpdGhKb2luVGFibGUgPSBlbnRpdHlJZHNcbiAgICAgIC5maWx0ZXIoKGVudGl0eUlkKSA9PiBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCkucHJvcHMubGVuZ3RoID4gMClcbiAgICAgIC5tYXAoKGVudGl0eUlkKSA9PiBnZXRNaWdyYXRpb25TZXRGcm9tRW50aXR5KEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKSkpO1xuXG4gICAgLy8g7KGw7J247YWM7J2067iU66eMIOy2lOy2nFxuICAgIGNvbnN0IGpvaW5UYWJsZXNXaXRoRHVwID0gZW50aXR5U2V0c1dpdGhKb2luVGFibGUuZmxhdE1hcCgoZW50aXR5U2V0KSA9PiBlbnRpdHlTZXQuam9pblRhYmxlcyk7XG4gICAgLy8g7KSR67O1IOygnOqxsCAo7KSR67O17J24IOqyveyasCBpbmRleGVz66W8IOuzke2VqSlcbiAgICBjb25zdCBqb2luVGFibGVzID0gT2JqZWN0LnZhbHVlcyhncm91cChqb2luVGFibGVzV2l0aER1cCwgKGp0KSA9PiBqdC50YWJsZSkpLm1hcCgodGFibGVzKSA9PiB7XG4gICAgICBhc3NlcnQodGFibGVzICE9PSB1bmRlZmluZWQsIFwidGFibGVzIGlzIHVuZGVmaW5lZFwiKTtcbiAgICAgIGlmICh0YWJsZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB0YWJsZXNbMF07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50YWJsZXNbMF0sXG4gICAgICAgIGluZGV4ZXM6IHVuaXF1ZShcbiAgICAgICAgICB0YWJsZXMuZmxhdE1hcCgodCkgPT4gdC5pbmRleGVzKSxcbiAgICAgICAgICAoaW5kZXgpID0+IFtpbmRleC50eXBlLCAuLi5pbmRleC5jb2x1bW5zXS5qb2luKFwiLVwiKSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyDsobDsnbjthYzsnbTruJQg7Y+s7ZWo7ZWY7JesIE1pZ3JhdGlvblNldCDrsLDsl7RcbiAgICBjb25zdCBlbnRpdHlTZXRzOiBNaWdyYXRpb25TZXRbXSA9IFsuLi5lbnRpdHlTZXRzV2l0aEpvaW5UYWJsZSwgLi4uam9pblRhYmxlc107XG5cbiAgICBjb25zdCBjb2RlczogR2VuTWlncmF0aW9uQ29kZVtdID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIGVudGl0eVNldHMubWFwKGFzeW5jIChlbnRpdHlTZXQpID0+IHtcbiAgICAgICAgICBjb25zdCBkYlNldCA9IGF3YWl0IFBvc3RncmVTUUxTY2hlbWFSZWFkZXIuZ2V0TWlncmF0aW9uU2V0RnJvbURCKFxuICAgICAgICAgICAgY29tcGFyZURCLFxuICAgICAgICAgICAgZW50aXR5U2V0LnRhYmxlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgTmFpdGUudChgbWlncmF0b3I6Y29tcGFyZU1pZ3JhdGlvbnM6ZW50aXR5U2V0OiR7ZW50aXR5U2V0LnRhYmxlfWAsIGVudGl0eVNldCk7XG4gICAgICAgICAgTmFpdGUudChgbWlncmF0b3I6Y29tcGFyZU1pZ3JhdGlvbnM6ZGJTZXQ6JHtlbnRpdHlTZXQudGFibGV9YCwgZGJTZXQpO1xuXG4gICAgICAgICAgaWYgKGRiU2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyDquLDsobQg7YWM7J2067iUIOyXhuydjCwg7IOI66GcIO2FjOydtOu4lCDsg53shLFcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBnZW5lcmF0ZUNyZWF0ZUNvZGUoZW50aXR5U2V0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g6riw7KG0IO2FjOydtOu4lCDsobTsnqztlZjripQg7LyA7J207IqkXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZ2VuZXJhdGVBbHRlckNvZGUoZW50aXR5U2V0LCBkYlNldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICApLmZsYXQoKTtcblxuICAgIC8vIG5vcm1hbCDtg4DsnoXsnbQg7JWe7Jy866GcLCBmb3JlaWdu7J20IOuSpOuhnFxuICAgIGNvZGVzLnNvcnQoKGNvZGVBLCBjb2RlQikgPT4ge1xuICAgICAgaWYgKGNvZGVBLnR5cGUgPT09IFwiZm9yZWlnblwiICYmIGNvZGVCLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2UgaWYgKGNvZGVBLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgY29kZUIudHlwZSA9PT0gXCJmb3JlaWduXCIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29kZXM7XG4gIH1cblxuICAvKipcbiAgICogU2hhZG93IERCIO2FjOyKpO2KuOulvCDsp4Ttlontlanri4jri6QuXG4gICAqXG4gICAqIFNvbmFtdSBVSeyXkOyEnCDsgqzsmqnrkKnri4jri6QuXG4gICAqXG4gICAqIEByZXR1cm5zIFNoYWRvdyBEQiDthYzsiqTtirgg6rKw6rO8XG4gICAqL1xuICBhc3luYyBydW5TaGFkb3dUZXN0KCk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0PiB7XG4gICAgY29uc3QgdGRiQ29ubiA9IFNvbmFtdS5kYkNvbmZpZy50ZXN0LmNvbm5lY3Rpb24gYXMgS25leC5QZ0Nvbm5lY3Rpb25Db25maWc7XG4gICAgY29uc3Qgc2hhZG93RGF0YWJhc2UgPSBgJHt0ZGJDb25uLmRhdGFiYXNlfV9fbWlncmF0aW9uX3NoYWRvd2A7XG5cbiAgICAvLyDthYzsiqTtirgg7IOB7Zmp7JeQ7ISc64qUIO2KuOuenOyereyFmOydhCDstIjquLDtmZTtlZjqs6AsIOyDiCDrjbDsnbTthLDrsqDsnbTsiqQg7Luk64Sl7IWY7J2EIOqwgOyguOyZgOyVvCDtlahcbiAgICBpZiAoaXNUZXN0KCkpIHtcbiAgICAgIGF3YWl0IERCLmNsZWFyVGVzdFRyYW5zYWN0aW9uKCk7XG4gICAgICBhd2FpdCBEQi5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8g6riw7KG0IFNoYWRvdyBEQiDsgq3soJwg7ZuEIFNoYWRvdyBEQiDsg53shLFcbiAgICBjb25zdCB0ZGIgPSBrbmV4KFNvbmFtdS5kYkNvbmZpZy50ZXN0KTtcbiAgICAhaXNUZXN0KCkgJiYgY29uc29sZS5sb2coY2hhbGsubWFnZW50YShgJHtzaGFkb3dEYXRhYmFzZX0g7IKt7KCcYCkpO1xuICAgIGF3YWl0IHRkYi5yYXcoYERST1AgREFUQUJBU0UgSUYgRVhJU1RTICR7c2hhZG93RGF0YWJhc2V9YCk7XG4gICAgYXdhaXQgdGRiLnJhdyhgXG4gICAgICBTRUxFQ1QgcGdfdGVybWluYXRlX2JhY2tlbmQocGdfc3RhdF9hY3Rpdml0eS5waWQpXG4gICAgICBGUk9NIHBnX3N0YXRfYWN0aXZpdHlcbiAgICAgIFdIRVJFIGRhdG5hbWUgPSAnJHt0ZGJDb25uLmRhdGFiYXNlfSdcbiAgICAgICAgQU5EIHBpZCA8PiBwZ19iYWNrZW5kX3BpZCgpO1xuICAgIGApO1xuICAgIGF3YWl0IHRkYi5yYXcoYENSRUFURSBEQVRBQkFTRSAke3NoYWRvd0RhdGFiYXNlfSBURU1QTEFURSAke3RkYkNvbm4uZGF0YWJhc2V9YCk7XG5cbiAgICAvLyBTaGFkb3cgRELsl5Ag7Jew6rKwXG4gICAgY29uc3Qgc2RiID0ga25leCh7XG4gICAgICAuLi5Tb25hbXUuZGJDb25maWcudGVzdCxcbiAgICAgIGNvbm5lY3Rpb246IHtcbiAgICAgICAgLi4udGRiQ29ubixcbiAgICAgICAgZGF0YWJhc2U6IHNoYWRvd0RhdGFiYXNlLFxuICAgICAgICBwYXNzd29yZDogdGRiQ29ubi5wYXNzd29yZCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBzaGFkb3cgREIg7YWM7Iqk7Yq4IOynhO2WiVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBbYmF0Y2hObywgYXBwbGllZF0gPSBhd2FpdCBzZGIubWlncmF0ZS5sYXRlc3QoKTtcbiAgICAgICFpc1Rlc3QoKSAmJlxuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihcIlNoYWRvdyBEQiDthYzsiqTtirjsl5Ag7ISx6rO17ZaI7Iq164uI64ukIVwiKSwge1xuICAgICAgICAgIGJhdGNoTm8sXG4gICAgICAgICAgYXBwbGllZCxcbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb25uS2V5OiBcInNoYWRvd1wiLFxuICAgICAgICAgIGJhdGNoTm8sXG4gICAgICAgICAgYXBwbGllZCxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIHRocm93IG5ldyBTZXJ2aWNlVW5hdmFpbGFibGVFeGNlcHRpb24oXCJTaGFkb3cgREIg7YWM7Iqk7Yq4IOynhO2WiSDspJEg7JeQ65+sXCIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBTaGFkb3cgREIg7Jew6rKwIOyiheujjFxuICAgICAgYXdhaXQgc2RiLmRlc3Ryb3koKTtcblxuICAgICAgLy8gU2hhZG93IERCIOyCreygnFxuICAgICAgIWlzVGVzdCgpICYmIGNvbnNvbGUubG9nKGNoYWxrLm1hZ2VudGEoYCR7c2hhZG93RGF0YWJhc2V9IOyCreygnGApKTtcbiAgICAgIGF3YWl0IHRkYi5yYXcoYERST1AgREFUQUJBU0UgSUYgRVhJU1RTICR7c2hhZG93RGF0YWJhc2V9YCk7XG5cbiAgICAgIC8vIFRlc3QgREIg7Jew6rKwIOyiheujjFxuICAgICAgYXdhaXQgdGRiLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJhc3NlcnQiLCJjaGFsayIsIm1rZGlyIiwicmVhZGRpciIsInVubGluayIsIndyaXRlRmlsZSIsImtuZXgiLCJwYXRoIiwiZ3JvdXAiLCJzdW0iLCJ1bmlxdWUiLCJTb25hbXUiLCJEQiIsIkVudGl0eU1hbmFnZXIiLCJTZXJ2aWNlVW5hdmFpbGFibGVFeGNlcHRpb24iLCJOYWl0ZSIsImlzVGVzdCIsImV4aXN0cyIsImdlbmVyYXRlQWx0ZXJDb2RlIiwiZ2VuZXJhdGVDcmVhdGVDb2RlIiwiZ2V0TWlncmF0aW9uU2V0RnJvbUVudGl0eSIsIlBvc3RncmVTUUxTY2hlbWFSZWFkZXIiLCJNaWdyYXRvciIsImdldE1pZ3JhdGlvbkNvZGVzIiwic3JjTWlncmF0aW9uc0RpciIsImpvaW4iLCJhcGlSb290UGF0aCIsInJlY3Vyc2l2ZSIsImNvZGVzIiwiZmlsdGVyIiwiZiIsImVuZHNXaXRoIiwibWFwIiwibmFtZSIsInJlcGxhY2UiLCJzb3J0IiwiYSIsImIiLCJ0IiwiZ2V0U3RhdHVzIiwiY29ubktleXMiLCJPYmplY3QiLCJrZXlzIiwiZGJDb25maWciLCJrZXkiLCJtaWdyYXRpb25TdGF0dXNFcnJvciIsInN0YXR1c2VzIiwiUHJvbWlzZSIsImFsbCIsImNvbm5LZXkiLCJrbmV4T3B0aW9ucyIsInRDb25uIiwic3RhdHVzIiwibWlncmF0ZSIsImVyciIsImNvbnNvbGUiLCJ3YXJuIiwieWVsbG93IiwiSlNPTiIsInN0cmluZ2lmeSIsImNvbm5lY3Rpb24iLCJFcnJvciIsIm1lc3NhZ2UiLCJTdHJpbmciLCJwZW5kaW5nIiwiZmRMaXN0IiwibGlzdCIsImZkIiwiZmlsZSIsImN1cnJlbnRWZXJzaW9uIiwiX2VyciIsImRlc3Ryb3kiLCJjb25uU3RyaW5nIiwidXNlciIsImhvc3QiLCJwb3J0IiwiZGF0YWJhc2UiLCJwcmVwYXJlZENvZGVzIiwic3RhdHVzMGNvbm4iLCJmaW5kIiwidW5kZWZpbmVkIiwiY29tcGFyZURCY29ubiIsImdlbkNvZGVzIiwiY29tcGFyZU1pZ3JhdGlvbnMiLCJjb25ucyIsImVycm9yIiwicnVuQWN0aW9uIiwiYWN0aW9uIiwidGFyZ2V0cyIsImNvbmZpZ3MiLCJ0YXJnZXQiLCJvcHRpb25zIiwiYyIsImNvbmZpZyIsInJlc3VsdCIsImJhdGNoTm8iLCJhcHBsaWVkIiwibGF0ZXN0Iiwicm9sbGJhY2siLCJ2YWxpZGF0ZURlbGV0YWJsZSIsImNvZGVOYW1lcyIsImFwcGxpZWRDb2RlcyIsImNvZGVOYW1lIiwic29tZSIsImNvbm4iLCJpbmNsdWRlcyIsImNhbkRlbGV0ZSIsImxlbmd0aCIsImRlbENvZGVzIiwiZmlsZVBhdGgiLCJnZW5EYXRlVGFnIiwiaW5kZXgiLCJiYXNlRGF0ZSIsIkRhdGUiLCJkYXRlIiwiZ2V0VGltZSIsInBhZCIsIm51bSIsInNpemUiLCJ0b1N0cmluZyIsInBhZFN0YXJ0IiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2VuZXJhdGVQcmVwYXJlZENvZGVzIiwibG9nIiwiZ3JlZW4iLCJtaWdyYXRpb25zRGlyIiwicGNvZGUiLCJlbnRyaWVzIiwiZm9ybWF0dGVkIiwiZGF0ZVRhZyIsInRpdGxlIiwiY29tcGFyZURCIiwiZW50aXR5SWRzIiwiZ2V0QWxsSWRzIiwiZW50aXR5U2V0c1dpdGhKb2luVGFibGUiLCJlbnRpdHlJZCIsImdldCIsInByb3BzIiwiam9pblRhYmxlc1dpdGhEdXAiLCJmbGF0TWFwIiwiZW50aXR5U2V0Iiwiam9pblRhYmxlcyIsInZhbHVlcyIsImp0IiwidGFibGUiLCJ0YWJsZXMiLCJpbmRleGVzIiwidHlwZSIsImNvbHVtbnMiLCJlbnRpdHlTZXRzIiwiZGJTZXQiLCJnZXRNaWdyYXRpb25TZXRGcm9tREIiLCJmbGF0IiwiY29kZUEiLCJjb2RlQiIsInJ1blNoYWRvd1Rlc3QiLCJ0ZGJDb25uIiwidGVzdCIsInNoYWRvd0RhdGFiYXNlIiwiY2xlYXJUZXN0VHJhbnNhY3Rpb24iLCJ0ZGIiLCJtYWdlbnRhIiwicmF3Iiwic2RiIiwicGFzc3dvcmQiLCJlIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxZQUFZLFNBQVM7QUFDNUIsT0FBT0MsV0FBVyxRQUFRO0FBQzFCLFNBQVNDLEtBQUssRUFBRUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLFNBQVMsUUFBUSxtQkFBYztBQUNoRSxPQUFPQyxVQUF5QixPQUFPO0FBQ3ZDLE9BQU9DLFVBQVUsT0FBTztBQUN4QixTQUFTQyxLQUFLLEVBQUVDLEdBQUcsRUFBRUMsTUFBTSxRQUFRLFVBQVU7QUFDN0MsU0FBU0MsTUFBTSxRQUFRLGtCQUFTO0FBQ2hDLFNBQVNDLEVBQUUsUUFBNkIsb0JBQWlCO0FBQ3pELFNBQVNDLGFBQWEsUUFBUSw4QkFBMkI7QUFDekQsU0FBU0MsMkJBQTJCLFFBQVEsaUNBQThCO0FBQzFFLFNBQVNDLEtBQUssUUFBUSxvQkFBaUI7QUFFdkMsU0FBU0MsTUFBTSxRQUFRLHlCQUFzQjtBQUM3QyxTQUFTQyxNQUFNLFFBQVEsdUJBQW9CO0FBQzNDLFNBQVNDLGlCQUFpQixFQUFFQyxrQkFBa0IsUUFBUSx1QkFBb0I7QUFDMUUsU0FBU0MseUJBQXlCLFFBQVEscUJBQWtCO0FBQzVELFNBQVNDLHNCQUFzQixRQUFRLGdDQUE2QjtBQVNwRSxPQUFPLE1BQU1DO0lBQ1gsTUFBY0Msb0JBQThDO1FBQzFELE1BQU1DLG1CQUFtQmpCLEtBQUtrQixJQUFJLENBQUNkLE9BQU9lLFdBQVcsRUFBRSxPQUFPLGVBQWUsK0JBQStCO1FBRTVHLElBQUksQ0FBRSxNQUFNVCxPQUFPTyxtQkFBb0I7WUFDckMsTUFBTXRCLE1BQU1zQixrQkFBa0I7Z0JBQzVCRyxXQUFXO1lBQ2I7UUFDRjtRQUVBLE1BQU1DLFFBQVEsQUFBQyxDQUFBLE1BQU16QixRQUFRcUIsaUJBQWdCLEVBQzFDSyxNQUFNLENB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
336
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vbWlncmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyBta2RpciwgcmVhZGRpciwgdW5saW5rLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB0eXBlIHsgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgZ3JvdXAsIHN1bSwgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB7IERCLCB0eXBlIFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi4vZGF0YWJhc2Uva25leFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IE5haXRlIH0gZnJvbSBcIi4uL25haXRlL25haXRlXCI7XG5pbXBvcnQgdHlwZSB7IEdlbk1pZ3JhdGlvbkNvZGUsIE1pZ3JhdGlvblNldCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlsc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVBbHRlckNvZGUsIGdlbmVyYXRlQ3JlYXRlQ29kZSB9IGZyb20gXCIuL2NvZGUtZ2VuZXJhdGlvblwiO1xuaW1wb3J0IHsgZ2V0TWlncmF0aW9uU2V0RnJvbUVudGl0eSB9IGZyb20gXCIuL21pZ3JhdGlvbi1zZXRcIjtcbmltcG9ydCB7IFBvc3RncmVTUUxTY2hlbWFSZWFkZXIgfSBmcm9tIFwiLi9wb3N0Z3Jlc3FsLXNjaGVtYS1yZWFkZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29ublN0cmluZywgTWlncmF0aW9uQ29kZSwgTWlncmF0aW9uU3RhdHVzIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgTWlncmF0aW9uUmVzdWx0ID0ge1xuICBjb25uS2V5OiBzdHJpbmc7XG4gIGJhdGNoTm86IG51bWJlcjtcbiAgYXBwbGllZDogc3RyaW5nW107XG59W107XG5cbmV4cG9ydCBjbGFzcyBNaWdyYXRvciB7XG4gIHByaXZhdGUgYXN5bmMgZ2V0TWlncmF0aW9uQ29kZXMoKTogUHJvbWlzZTxNaWdyYXRpb25Db2RlW10+IHtcbiAgICBjb25zdCBzcmNNaWdyYXRpb25zRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJtaWdyYXRpb25zXCIpOyAvLyDsnbTqsbQg7ZmY6rK97JeQIOq0gOqzhOyXhuydtCDtla3sg4Egc3Jj7JeQ7IScIOywvuyVhOyVvCDtlbTsmpQuXG5cbiAgICBpZiAoIShhd2FpdCBleGlzdHMoc3JjTWlncmF0aW9uc0RpcikpKSB7XG4gICAgICBhd2FpdCBta2RpcihzcmNNaWdyYXRpb25zRGlyLCB7XG4gICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGNvZGVzID0gKGF3YWl0IHJlYWRkaXIoc3JjTWlncmF0aW9uc0RpcikpXG4gICAgICAuZmlsdGVyKChmKSA9PiBmLmVuZHNXaXRoKFwiLnRzXCIpKVxuICAgICAgLm1hcCgoZikgPT4gKHtcbiAgICAgICAgbmFtZTogZi5yZXBsYWNlKFwiLnRzXCIsIFwiXCIpLFxuICAgICAgICBwYXRoOiBwYXRoLmpvaW4oc3JjTWlncmF0aW9uc0RpciwgZiksXG4gICAgICB9KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYS5uYW1lIDwgYi5uYW1lID8gMSA6IC0xKSk7IC8vIOydtOumhCDrgrTrprzssKjsiJwg7KCV66CsKOy1nOyLoOyInClcblxuICAgIE5haXRlLnQoXCJtaWdyYXRvcjpnZXRNaWdyYXRpb25Db2RlczpyZXN1bHRzXCIsIGNvZGVzKTtcbiAgICByZXR1cm4gY29kZXM7XG4gIH1cblxuICAvKipcbiAgICog7YOA6rKf67OEIOuniOydtOq3uOugiOydtOyFmCDsg4Htg5zsmYAg7L2U65OcIOyDneyEsS/spIDruYQg7IOB7YOc66W8IOq1rO2VtOyYteuLiOuLpC5cbiAgICog7Iuk7KCc66GcIERC7JeQIOygkeq3vOuPhCDtlZjqs6Ag66eI7J206re466CI7J207IWYIOy9lOuTnCDtjIzsnbzrj4Qg7ZmV7J247ZWY6rOgLFxuICAgKiDtlYTsmpTtlZjri6TrqbQg7KCB7Jqp7ZWgIOyImCDsnojripQg7L2U65Oc66W8IOyDneyEseq5jOyngCDtlbTsmLXri4jri6QuXG4gICAqXG4gICAqIENMSeyZgCBTb25hbXUgVUnsl5DshJwg7IKs7Jqp65Cp64uI64ukLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdHVzKCk6IFByb21pc2U8TWlncmF0aW9uU3RhdHVzPiB7XG4gICAgY29uc3QgY29kZXMgPSBhd2FpdCB0aGlzLmdldE1pZ3JhdGlvbkNvZGVzKCk7XG4gICAgTmFpdGUudChcIm1pZ3JhdG9yOmdldFN0YXR1czpjb2Rlc1wiLCBjb2Rlcyk7XG5cbiAgICBjb25zdCBjb25uS2V5cyA9IE9iamVjdC5rZXlzKFNvbmFtdS5kYkNvbmZpZykuZmlsdGVyKFxuICAgICAgKGtleSkgPT4ga2V5LmVuZHNXaXRoKFwiX3NsYXZlXCIpID09PSBmYWxzZSxcbiAgICApIGFzIChrZXlvZiB0eXBlb2YgU29uYW11LmRiQ29uZmlnKVtdO1xuXG4gICAgbGV0IG1pZ3JhdGlvblN0YXR1c0Vycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBzdGF0dXNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgY29ubktleXMubWFwKGFzeW5jIChjb25uS2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGtuZXhPcHRpb25zID0gU29uYW11LmRiQ29uZmlnW2Nvbm5LZXldO1xuICAgICAgICBjb25zdCB0Q29ubiA9IGNyZWF0ZUtuZXhJbnN0YW5jZShrbmV4T3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRDb25uLm1pZ3JhdGUuc3RhdHVzKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgIGNoYWxrLnllbGxvdyhcbiAgICAgICAgICAgICAgICBgJHtjb25uS2V5feydmCDrp4jsnbTqt7jroIjsnbTshZgg7IOB7YOc66W8IOqwgOyguOyYpOuKlCDrjbDsl5Ag7Iuk7Yyo7ZWY7JiA7Iq164uI64ukLiDrjbDsnbTthLDrsqDsnbTsiqTqsIAg7Jis67CU66W06rKMIOq1rOyEseuQmOyngCDslYrsnYAg6rKDIOqwmeyKteuLiOuLpC4g7ZmV7J247ZWY7Iuc6rOgIOuLpOyLnCDsi5zrj4TtlbTso7zshLjsmpQuXFxu7Iuc64+E7ZWcIOyXsOqysCDshKTsoJU6XFxuJHtKU09OLnN0cmluZ2lmeShrbmV4T3B0aW9ucy5jb25uZWN0aW9uLCBudWxsLCAyKX1cXG7rsJzsg53tlZwg7JeQ65+sOlxcbiR7ZXJyfVxcbmAsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWlncmF0aW9uU3RhdHVzRXJyb3IgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgICAgICByZXR1cm4gXCJlcnJvclwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICAgICAgY29uc3QgcGVuZGluZzogc3RyaW5nW10gPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBbLCBmZExpc3RdID0gYXdhaXQgdENvbm4ubWlncmF0ZS5saXN0KCk7XG4gICAgICAgICAgICByZXR1cm4gZmRMaXN0Lm1hcCgoZmQ6IHsgZmlsZTogc3RyaW5nIH0pID0+IGZkLmZpbGUucmVwbGFjZShcIi50c1wiLCBcIlwiKSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBtaWdyYXRpb25TdGF0dXNFcnJvciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRDb25uLm1pZ3JhdGUuY3VycmVudFZlcnNpb24oKTtcbiAgICAgICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAgICAgICBtaWdyYXRpb25TdGF0dXNFcnJvciA9IF9lcnIgaW5zdGFuY2VvZiBFcnJvciA/IF9lcnIubWVzc2FnZSA6IFN0cmluZyhfZXJyKTtcbiAgICAgICAgICAgIHJldHVybiBcImVycm9yXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgICAgICBOYWl0ZS50KFwibWlncmF0b3I6Z2V0U3RhdHVzOnN0YXR1c1wiLCBzdGF0dXMpO1xuXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBrbmV4T3B0aW9ucy5jb25uZWN0aW9uIGFzIEtuZXguUGdDb25uZWN0aW9uQ29uZmlnO1xuXG4gICAgICAgIGF3YWl0IHRDb25uLmRlc3Ryb3koKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IGNvbm5LZXkucmVwbGFjZShcIl9tYXN0ZXJcIiwgXCJcIiksXG4gICAgICAgICAgY29ubktleSxcbiAgICAgICAgICBjb25uU3RyaW5nOiBgcGc6Ly8ke2Nvbm5lY3Rpb24udXNlciA/PyBcIlwifUAke2Nvbm5lY3Rpb24uaG9zdH06JHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb24ucG9ydFxuICAgICAgICAgIH0vJHtjb25uZWN0aW9uLmRhdGFiYXNlfWAgYXMgQ29ublN0cmluZyxcbiAgICAgICAgICBjdXJyZW50VmVyc2lvbixcbiAgICAgICAgICBzdGF0dXM6IHN0YXR1cyBhcyBudW1iZXIgfCBcImVycm9yXCIsXG4gICAgICAgICAgcGVuZGluZyxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBOYWl0ZS50KFwibWlncmF0b3I6Z2V0U3RhdHVzOmNvbm5zXCIsIHN0YXR1c2VzKTtcblxuICAgIGNvbnN0IHByZXBhcmVkQ29kZXM6IEdlbk1pZ3JhdGlvbkNvZGVbXSA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzdGF0dXMwY29ubiA9IHN0YXR1c2VzLmZpbmQoKHN0YXR1cykgPT4gc3RhdHVzLnN0YXR1cyA9PT0gMCk7XG4gICAgICBpZiAoc3RhdHVzMGNvbm4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICAgICAgYFdoaWxlIHRyeWluZyB0byBwcmVwYXJlIG1pZ3JhdGlvbiBjb2Rlcywgd2UgZm91bmQgdGhhdCB0aGVyZSBpcyBubyBkYXRhYmFzZSB0byBjb21wYXJlIG1pZ3JhdGlvbnMuIFdlIG5lZWQgYXQgbGVhc3Qgb25lIGRhdGFiYXNlIHdoZXJlIGV2ZXJ5IG1pZ3JhdGlvbiBpcyBhcHBsaWVkKHN0YXR1cyA9PT0gMCkuIFlvdSBtaWdodCB3YW50IHRvIGFwcGx5IHlvdXIgZXhpc3RpbmcgbWlncmF0aW9ucyB0byBvbmUgb2YgdGhlIGRhdGFiYXNlcy5gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tcGFyZURCY29ubiA9IGNyZWF0ZUtuZXhJbnN0YW5jZShTb25hbXUuZGJDb25maWdbc3RhdHVzMGNvbm4uY29ubktleV0pO1xuICAgICAgY29uc3QgZ2VuQ29kZXMgPSBhd2FpdCB0aGlzLmNvbXBhcmVNaWdyYXRpb25zKGNvbXBhcmVEQmNvbm4pO1xuXG4gICAgICBhd2FpdCBjb21wYXJlREJjb25uLmRlc3Ryb3koKTtcblxuICAgICAgcmV0dXJuIGdlbkNvZGVzO1xuICAgIH0pKCk7XG5cbiAgICBOYWl0ZS50KFwibWlncmF0b3I6Z2V0U3RhdHVzOnByZXBhcmVkQ29kZXNcIiwgcHJlcGFyZWRDb2Rlcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29ubnM6IHN0YXR1c2VzLFxuICAgICAgY29kZXMsXG4gICAgICBwcmVwYXJlZENvZGVzLFxuICAgICAgZXJyb3I6IG1pZ3JhdGlvblN0YXR1c0Vycm9yLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog66eI7J206re466CI7J207IWY7J2EIOyggeyaqe2VmOqxsOuCmCDroaTrsLHtlanri4jri6QuXG4gICAqIFNvbmFtdSBVSeyXkOyEnCDrp4jsnbTqt7jroIjsnbTshZgg7J6R7JeF7J2EIOyImO2Wie2VoCDrlYwg7IKs7Jqp65Cp64uI64ukLlxuICAgKlxuICAgKiBDTEnsmYAgU29uYW11IFVJ7JeQ7IScIOyCrOyaqeuQqeuLiOuLpC5cbiAgICpcbiAgICogQHBhcmFtIGFjdGlvbiDsnpHsl4Ug7Jyg7ZiVIChhcHBseS9yb2xsYmFjaylcbiAgICogQHBhcmFtIHRhcmdldHMg7J6R7JeFIOuMgOyDgSBEQiDshKTsoJUg7YKkIChrZXlvZiBTb25hbXVEQkNvbmZpZylcbiAgICogQHJldHVybnMg7J6R7JeFIOqysOqzvFxuICAgKi9cbiAgYXN5bmMgcnVuQWN0aW9uKFxuICAgIGFjdGlvbjogXCJhcHBseVwiIHwgXCJyb2xsYmFja1wiLFxuICAgIHRhcmdldHM6IChrZXlvZiBTb25hbXVEQkNvbmZpZylbXSxcbiAgKTogUHJvbWlzZTxNaWdyYXRpb25SZXN1bHQ+IHtcbiAgICBOYWl0ZS50KFwibWlncmF0b3I6cnVuQWN0aW9uOmFjdGlvblwiLCBhY3Rpb24pO1xuICAgIE5haXRlLnQoXCJtaWdyYXRvcjpydW5BY3Rpb246dGFyZ2V0c1wiLCB0YXJnZXRzKTtcblxuICAgIC8vIGdldCB1bmlxIGtuZXggY29uZmlnc1xuICAgIGNvbnN0IGNvbmZpZ3MgPSB1bmlxdWUoXG4gICAgICB0YXJnZXRzXG4gICAgICAgIC5tYXAoKHRhcmdldCkgPT4gKHtcbiAgICAgICAgICBjb25uS2V5OiB0YXJnZXQsXG4gICAgICAgICAgb3B0aW9uczogU29uYW11LmRiQ29uZmlnW3RhcmdldCBhcyBrZXlvZiB0eXBlb2YgU29uYW11LmRiQ29uZmlnXSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5maWx0ZXIoKGMpID0+IGMub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSxcbiAgICAgICh7IG9wdGlvbnMgfSkgPT5cbiAgICAgICAgYCR7KG9wdGlvbnMuY29ubmVjdGlvbiBhcyBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZykuaG9zdH06JHtcbiAgICAgICAgICAob3B0aW9ucy5jb25uZWN0aW9uIGFzIEtuZXguUGdDb25uZWN0aW9uQ29uZmlnKS5wb3J0ID8/IDU0MzJcbiAgICAgICAgfS8keyhvcHRpb25zLmNvbm5lY3Rpb24gYXMgS25leC5QZ0Nvbm5lY3Rpb25Db25maWcpLmRhdGFiYXNlfWAsXG4gICAgKTtcblxuICAgIC8vIGdldCBjb25uZWN0aW9uc1xuICAgIGNvbnN0IGNvbm5zID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBjb25maWdzLm1hcChhc3luYyAoY29uZmlnKSA9PiAoe1xuICAgICAgICBjb25uS2V5OiBjb25maWcuY29ubktleSxcbiAgICAgICAga25leDogY3JlYXRlS25leEluc3RhbmNlKGNvbmZpZy5vcHRpb25zKSxcbiAgICAgIH0pKSxcbiAgICApO1xuXG4gICAgLy8gYWN0aW9uXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgIGNhc2UgXCJhcHBseVwiOlxuICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIGNvbm5zLm1hcChhc3luYyAoeyBjb25uS2V5LCBrbmV4IH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgW2JhdGNoTm8sIGFwcGxpZWRdID0gYXdhaXQga25leC5taWdyYXRlLmxhdGVzdCgpO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbm5LZXksXG4gICAgICAgICAgICAgICAgYmF0Y2hObyxcbiAgICAgICAgICAgICAgICBhcHBsaWVkLCAvLyDsnbTrsoggbGF0ZXN0IO2YuOy2nOuhnCDsnbjtlbQgXCJ1cFwi7J20IOyggeyaqeuQnCDrp4jsnbTqt7jroIjsnbTshZgg7J2066aEKGUuZy4gXCIyMDI1MTEyNDIzMzU1N19jcmVhdGVfX2NvbXBhbmllcy50c1wiKeuTpOydmCDrsLDsl7TsnoXri4jri6QuIOywuOqzoDogaHR0cHM6Ly9naXRodWIuY29tL2tuZXgva25leC9ibG9iLzAxYjE3N2M0ODVkNjk2ZjFiNzI4NThkZWU3MjhiYTE0M2M0ZmFkNzYvbGliL21pZ3JhdGlvbnMvbWlncmF0ZS9NaWdyYXRvci5qcyNMNTYwXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwicm9sbGJhY2tcIjpcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBjb25ucy5tYXAoYXN5bmMgKHsgY29ubktleSwga25leCB9KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IFtiYXRjaE5vLCBhcHBsaWVkXSA9IGF3YWl0IGtuZXgubWlncmF0ZS5yb2xsYmFjaygpO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbm5LZXksXG4gICAgICAgICAgICAgICAgYmF0Y2hObyxcbiAgICAgICAgICAgICAgICBhcHBsaWVkLCAvLyDsnbTrsoggcm9sbGJhY2sg7Zi47Lac66GcIOyduO2VtCBcImRvd25cIuydtCDsoIHsmqnrkJwoPeuhpOuwseuQnCkg66eI7J206re466CI7J207IWYIOydtOumhChlLmcuIFwiMjAyNTExMjQyMzM1NTdfY3JlYXRlX19jb21wYW5pZXMudHNcIinrk6TsnZgg67Cw7Je07J6F64uI64ukLiDssLjqs6A6IGh0dHBzOi8vZ2l0aHViLmNvbS9rbmV4L2tuZXgvYmxvYi8wMWIxNzdjNDg1ZDY5NmYxYjcyODU4ZGVlNzI4YmExNDNjNGZhZDc2L2xpYi9taWdyYXRpb25zL21pZ3JhdGUvTWlncmF0b3IuanMjTDYxMVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgLy8gZGVzdHJveVxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgY29ubnMubWFwKCh7IGtuZXggfSkgPT4ge1xuICAgICAgICByZXR1cm4ga25leC5kZXN0cm95KCk7XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgTmFpdGUudChcIm1pZ3JhdG9yOnJ1bkFjdGlvbjpyZXN1bHRcIiwgcmVzdWx0KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICog7IKt7KCcIOqwgOuKpe2VnCDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcIO2MjOydvOydhCDqsoDspp3tlanri4jri6QuXG4gICAqXG4gICAqIEBwYXJhbSBjb25ucyDrp4jsnbTqt7jroIjsnbTshZgg7IOB7YOcIOuwsOyXtFxuICAgKiBAcGFyYW0gY29kZU5hbWVzIOyCreygnO2VoCDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcIO2MjOydvCDsnbTrpoQg67Cw7Je0XG4gICAqIEByZXR1cm5zIOyCreygnCDqsIDriqUg7Jes67aAIOuwjyDsoIHsmqnrkJwg66eI7J206re466CI7J207IWYIOy9lOuTnCDtjIzsnbwg7J2066aEXG4gICAqL1xuICB2YWxpZGF0ZURlbGV0YWJsZShjb25uczogTWlncmF0aW9uU3RhdHVzW1wiY29ubnNcIl0sIGNvZGVOYW1lczogc3RyaW5nW10pIHtcbiAgICBjb25zdCBhcHBsaWVkQ29kZXMgPSBjb2RlTmFtZXMuZmlsdGVyKChjb2RlTmFtZSkgPT5cbiAgICAgIGNvbm5zLnNvbWUoKGNvbm4pID0+IGNvbm4ucGVuZGluZy5pbmNsdWRlcyhjb2RlTmFtZSkgPT09IGZhbHNlKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbkRlbGV0ZTogYXBwbGllZENvZGVzLmxlbmd0aCA9PT0gMCxcbiAgICAgIGFwcGxpZWRDb2RlcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIOuniOydtOq3uOugiOydtOyFmCDsvZTrk5wg7YyM7J287J2EIOyCreygnO2VqeuLiOuLpC5cbiAgICpcbiAgICogU29uYW11IFVJ7JeQ7IScIOyCrOyaqeuQqeuLiOuLpC5cbiAgICpcbiAgICogQHBhcmFtIGNvZGVOYW1lcyDsgq3soJztlaAg66eI7J206re466CI7J207IWYIOy9lOuTnCDtjIzsnbwg7J2066aEIOuwsOyXtFxuICAgKiBAcmV0dXJucyDsgq3soJzrkJwg66eI7J206re466CI7J207IWYIOy9lOuTnCDtjIzsnbwg6rCc7IiYXG4gICAqL1xuICBhc3luYyBkZWxDb2Rlcyhjb2RlTmFtZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB7IGNvbm5zIH0gPSBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIGNvbnN0IHsgY2FuRGVsZXRlLCBhcHBsaWVkQ29kZXMgfSA9IHRoaXMudmFsaWRhdGVEZWxldGFibGUoY29ubnMsIGNvZGVOYW1lcyk7XG4gICAgaWYgKCFjYW5EZWxldGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFlvdSBjYW5ub3QgZGVsZXRlIGEgbWlncmF0aW9uIGZpbGUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhcHBsaWVkLiBBcHBsaWVkIGNvZGVzOiAke2FwcGxpZWRDb2Rlcy5qb2luKFwiLCBcIil9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1bShcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBjb2RlTmFtZXMubWFwKGFzeW5jIChjb2RlTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7U29uYW11LmFwaVJvb3RQYXRofS9zcmMvbWlncmF0aW9ucy8ke2NvZGVOYW1lfS50c2A7XG4gICAgICAgICAgaWYgKGF3YWl0IGV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHVubGluayhmaWxlUGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5EYXRlVGFnKGluZGV4OiBudW1iZXIsIGJhc2VEYXRlOiBEYXRlID0gbmV3IERhdGUoKSk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGJhc2VEYXRlLmdldFRpbWUoKSArIGluZGV4ICogMTAwMCk7XG4gICAgY29uc3QgcGFkID0gKG51bTogbnVtYmVyLCBzaXplOiBudW1iZXIgPSAyKSA9PiBudW0udG9TdHJpbmcoKS5wYWRTdGFydChzaXplLCBcIjBcIik7XG4gICAgcmV0dXJuIChcbiAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpICtcbiAgICAgIHBhZChkYXRlLmdldE1vbnRoKCkgKyAxKSArXG4gICAgICBwYWQoZGF0ZS5nZXREYXRlKCkpICtcbiAgICAgIHBhZChkYXRlLmdldEhvdXJzKCkpICtcbiAgICAgIHBhZChkYXRlLmdldE1pbnV0ZXMoKSkgK1xuICAgICAgcGFkKGRhdGUuZ2V0U2Vjb25kcygpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog66eI7J206re466CI7J207IWYIOy9lOuTnCDtjIzsnbzsnYQg7IOd7ISx7ZWp64uI64ukLlxuICAgKlxuICAgKiBTb25hbXUgVUnsl5DshJwg7IKs7Jqp65Cp64uI64ukLlxuICAgKlxuICAgKiBAcmV0dXJucyDsg53shLHrkJwg66eI7J206re466CI7J207IWYIOy9lOuTnCDtjIzsnbwg6rCc7IiYXG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZVByZXBhcmVkQ29kZXMoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB7IHByZXBhcmVkQ29kZXMgfSA9IGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgTmFpdGUudChcIm1pZ3JhdG9yOmdlbmVyYXRlUHJlcGFyZWRDb2RlczpwcmVwYXJlZENvZGVzXCIsIHByZXBhcmVkQ29kZXMpO1xuICAgIGlmIChwcmVwYXJlZENvZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oXCJcXG7tmITsnqwg66qo65GQIOyLse2BrOuQnCDsg4Htg5zsnoXri4jri6QuXCIpKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8vIOyLpOygnCDsvZTrk5wg7IOd7ISxXG4gICAgY29uc3QgbWlncmF0aW9uc0RpciA9IGAke1NvbmFtdS5hcGlSb290UGF0aH0vc3JjL21pZ3JhdGlvbnNgO1xuXG4gICAgZm9yIChjb25zdCBbaW5kZXgsIHBjb2RlXSBvZiBwcmVwYXJlZENvZGVzLmVudHJpZXMoKSkge1xuICAgICAgaWYgKHBjb2RlLmZvcm1hdHRlZCkge1xuICAgICAgICBjb25zdCBkYXRlVGFnID0gdGhpcy5nZW5EYXRlVGFnKGluZGV4KTtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBgJHttaWdyYXRpb25zRGlyfS8ke2RhdGVUYWd9XyR7cGNvZGUudGl0bGV9LnRzYDtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBwY29kZS5mb3JtYXR0ZWQpO1xuICAgICAgICAhaXNUZXN0KCkgJiYgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYE1JR1JUQUlPTiBDUkVBVEVEICR7ZmlsZVBhdGh9YCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcmVwYXJlZENvZGVzLmxlbmd0aDtcbiAgfVxuXG4gIGFzeW5jIGNvbXBhcmVNaWdyYXRpb25zKGNvbXBhcmVEQjogS25leCk6IFByb21pc2U8R2VuTWlncmF0aW9uQ29kZVtdPiB7XG4gICAgLy8gRW50aXR5IOyInO2ajO2VmOyXrCDsi7HtgaxcbiAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuXG4gICAgLy8g7KGw7J247YWM7J2067iUIO2PrO2VqO2VmOyXrCBFbnRpdHnsl5DshJwgTWlncmF0aW9uU2V0IOy2lOy2nFxuICAgIGNvbnN0IGVudGl0eVNldHNXaXRoSm9pblRhYmxlID0gZW50aXR5SWRzXG4gICAgICAuZmlsdGVyKChlbnRpdHlJZCkgPT4gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpLnByb3BzLmxlbmd0aCA+IDApXG4gICAgICAubWFwKChlbnRpdHlJZCkgPT4gZ2V0TWlncmF0aW9uU2V0RnJvbUVudGl0eShFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCkpKTtcblxuICAgIC8vIOyhsOyduO2FjOydtOu4lOunjCDstpTstpxcbiAgICBjb25zdCBqb2luVGFibGVzV2l0aER1cCA9IGVudGl0eVNldHNXaXRoSm9pblRhYmxlLmZsYXRNYXAoKGVudGl0eVNldCkgPT4gZW50aXR5U2V0LmpvaW5UYWJsZXMpO1xuICAgIC8vIOykkeuztSDsoJzqsbAgKOykkeuzteyduCDqsr3smrAgaW5kZXhlc+ulvCDrs5HtlakpXG4gICAgY29uc3Qgam9pblRhYmxlcyA9IE9iamVjdC52YWx1ZXMoZ3JvdXAoam9pblRhYmxlc1dpdGhEdXAsIChqdCkgPT4ganQudGFibGUpKS5tYXAoKHRhYmxlcykgPT4ge1xuICAgICAgYXNzZXJ0KHRhYmxlcyAhPT0gdW5kZWZpbmVkLCBcInRhYmxlcyBpcyB1bmRlZmluZWRcIik7XG4gICAgICBpZiAodGFibGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gdGFibGVzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGFibGVzWzBdLFxuICAgICAgICBpbmRleGVzOiB1bmlxdWUoXG4gICAgICAgICAgdGFibGVzLmZsYXRNYXAoKHQpID0+IHQuaW5kZXhlcyksXG4gICAgICAgICAgKGluZGV4KSA9PiBbaW5kZXgudHlwZSwgLi4uaW5kZXguY29sdW1uc10uam9pbihcIi1cIiksXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8g7KGw7J247YWM7J2067iUIO2PrO2VqO2VmOyXrCBNaWdyYXRpb25TZXQg67Cw7Je0XG4gICAgY29uc3QgZW50aXR5U2V0czogTWlncmF0aW9uU2V0W10gPSBbLi4uZW50aXR5U2V0c1dpdGhKb2luVGFibGUsIC4uLmpvaW5UYWJsZXNdO1xuXG4gICAgY29uc3QgY29kZXM6IEdlbk1pZ3JhdGlvbkNvZGVbXSA9IChcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBlbnRpdHlTZXRzLm1hcChhc3luYyAoZW50aXR5U2V0KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGJTZXQgPSBhd2FpdCBQb3N0Z3JlU1FMU2NoZW1hUmVhZGVyLmdldE1pZ3JhdGlvblNldEZyb21EQihcbiAgICAgICAgICAgIGNvbXBhcmVEQixcbiAgICAgICAgICAgIGVudGl0eVNldC50YWJsZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIE5haXRlLnQoYG1pZ3JhdG9yOmNvbXBhcmVNaWdyYXRpb25zOmVudGl0eVNldDoke2VudGl0eVNldC50YWJsZX1gLCBlbnRpdHlTZXQpO1xuICAgICAgICAgIE5haXRlLnQoYG1pZ3JhdG9yOmNvbXBhcmVNaWdyYXRpb25zOmRiU2V0OiR7ZW50aXR5U2V0LnRhYmxlfWAsIGRiU2V0KTtcblxuICAgICAgICAgIGlmIChkYlNldCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8g6riw7KG0IO2FjOydtOu4lCDsl4bsnYwsIOyDiOuhnCDthYzsnbTruJQg7IOd7ISxXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZ2VuZXJhdGVDcmVhdGVDb2RlKGVudGl0eVNldCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOq4sOyhtCDthYzsnbTruJQg7KG07J6s7ZWY64qUIOy8gOydtOyKpFxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGdlbmVyYXRlQWx0ZXJDb2RlKGVudGl0eVNldCwgZGJTZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApXG4gICAgKS5mbGF0KCk7XG5cbiAgICAvLyBub3JtYWwg7YOA7J6F7J20IOyVnuycvOuhnCwgZm9yZWlnbuydtCDrkqTroZxcbiAgICBjb2Rlcy5zb3J0KChjb2RlQSwgY29kZUIpID0+IHtcbiAgICAgIGlmIChjb2RlQS50eXBlID09PSBcImZvcmVpZ25cIiAmJiBjb2RlQi50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIGlmIChjb2RlQS50eXBlID09PSBcIm5vcm1hbFwiICYmIGNvZGVCLnR5cGUgPT09IFwiZm9yZWlnblwiKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvZGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNoYWRvdyBEQiDthYzsiqTtirjrpbwg7KeE7ZaJ7ZWp64uI64ukLlxuICAgKlxuICAgKiBTb25hbXUgVUnsl5DshJwg7IKs7Jqp65Cp64uI64ukLlxuICAgKlxuICAgKiBAcmV0dXJucyBTaGFkb3cgREIg7YWM7Iqk7Yq4IOqysOqzvFxuICAgKi9cbiAgYXN5bmMgcnVuU2hhZG93VGVzdCgpOiBQcm9taXNlPE1pZ3JhdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IHRkYkNvbm4gPSBTb25hbXUuZGJDb25maWcudGVzdC5jb25uZWN0aW9uIGFzIEtuZXguUGdDb25uZWN0aW9uQ29uZmlnO1xuICAgIGNvbnN0IHNoYWRvd0RhdGFiYXNlID0gYCR7dGRiQ29ubi5kYXRhYmFzZX1fX21pZ3JhdGlvbl9zaGFkb3dgO1xuXG4gICAgLy8g7YWM7Iqk7Yq4IOyDge2ZqeyXkOyEnOuKlCDtirjrnpzsnq3shZjsnYQg7LSI6riw7ZmU7ZWY6rOgLCDsg4gg642w7J207YSw67Kg7J207IqkIOy7pOuEpeyFmOydhCDqsIDsoLjsmYDslbwg7ZWoXG4gICAgaWYgKGlzVGVzdCgpKSB7XG4gICAgICBhd2FpdCBEQi5jbGVhclRlc3RUcmFuc2FjdGlvbigpO1xuICAgICAgYXdhaXQgREIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8vIOq4sOyhtCBTaGFkb3cgREIg7IKt7KCcIO2bhCBTaGFkb3cgREIg7IOd7ISxXG4gICAgY29uc3QgdGRiID0gY3JlYXRlS25leEluc3RhbmNlKFNvbmFtdS5kYkNvbmZpZy50ZXN0KTtcbiAgICAhaXNUZXN0KCkgJiYgY29uc29sZS5sb2coY2hhbGsubWFnZW50YShgJHtzaGFkb3dEYXRhYmFzZX0g7IKt7KCcYCkpO1xuICAgIGF3YWl0IHRkYi5yYXcoYERST1AgREFUQUJBU0UgSUYgRVhJU1RTICR7c2hhZG93RGF0YWJhc2V9YCk7XG4gICAgYXdhaXQgdGRiLnJhdyhgXG4gICAgICBTRUxFQ1QgcGdfdGVybWluYXRlX2JhY2tlbmQocGdfc3RhdF9hY3Rpdml0eS5waWQpXG4gICAgICBGUk9NIHBnX3N0YXRfYWN0aXZpdHlcbiAgICAgIFdIRVJFIGRhdG5hbWUgPSAnJHt0ZGJDb25uLmRhdGFiYXNlfSdcbiAgICAgICAgQU5EIHBpZCA8PiBwZ19iYWNrZW5kX3BpZCgpO1xuICAgIGApO1xuICAgIGF3YWl0IHRkYi5yYXcoYENSRUFURSBEQVRBQkFTRSAke3NoYWRvd0RhdGFiYXNlfSBURU1QTEFURSAke3RkYkNvbm4uZGF0YWJhc2V9YCk7XG5cbiAgICAvLyBTaGFkb3cgRELsl5Ag7Jew6rKwXG4gICAgY29uc3Qgc2RiID0gY3JlYXRlS25leEluc3RhbmNlKHtcbiAgICAgIC4uLlNvbmFtdS5kYkNvbmZpZy50ZXN0LFxuICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAuLi50ZGJDb25uLFxuICAgICAgICBkYXRhYmFzZTogc2hhZG93RGF0YWJhc2UsXG4gICAgICAgIHBhc3N3b3JkOiB0ZGJDb25uLnBhc3N3b3JkLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIHNoYWRvdyBEQiDthYzsiqTtirgg7KeE7ZaJXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFtiYXRjaE5vLCBhcHBsaWVkXSA9IGF3YWl0IHNkYi5taWdyYXRlLmxhdGVzdCgpO1xuICAgICAgIWlzVGVzdCgpICYmXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKFwiU2hhZG93IERCIO2FjOyKpO2KuOyXkCDshLHqs7XtlojsirXri4jri6QhXCIpLCB7XG4gICAgICAgICAgYmF0Y2hObyxcbiAgICAgICAgICBhcHBsaWVkLFxuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbm5LZXk6IFwic2hhZG93XCIsXG4gICAgICAgICAgYmF0Y2hObyxcbiAgICAgICAgICBhcHBsaWVkLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgdGhyb3cgbmV3IFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbihcIlNoYWRvdyBEQiDthYzsiqTtirgg7KeE7ZaJIOykkSDsl5Drn6xcIik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFNoYWRvdyBEQiDsl7DqsrAg7KKF66OMXG4gICAgICBhd2FpdCBzZGIuZGVzdHJveSgpO1xuXG4gICAgICAvLyBTaGFkb3cgREIg7IKt7KCcXG4gICAgICAhaXNUZXN0KCkgJiYgY29uc29sZS5sb2coY2hhbGsubWFnZW50YShgJHtzaGFkb3dEYXRhYmFzZX0g7IKt7KCcYCkpO1xuICAgICAgYXdhaXQgdGRiLnJhdyhgRFJPUCBEQVRBQkFTRSBJRiBFWElTVFMgJHtzaGFkb3dEYXRhYmFzZX1gKTtcblxuICAgICAgLy8gVGVzdCBEQiDsl7DqsrAg7KKF66OMXG4gICAgICBhd2FpdCB0ZGIuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbImFzc2VydCIsImNoYWxrIiwibWtkaXIiLCJyZWFkZGlyIiwidW5saW5rIiwid3JpdGVGaWxlIiwicGF0aCIsImdyb3VwIiwic3VtIiwidW5pcXVlIiwiU29uYW11IiwiREIiLCJjcmVhdGVLbmV4SW5zdGFuY2UiLCJFbnRpdHlNYW5hZ2VyIiwiU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uIiwiTmFpdGUiLCJpc1Rlc3QiLCJleGlzdHMiLCJnZW5lcmF0ZUFsdGVyQ29kZSIsImdlbmVyYXRlQ3JlYXRlQ29kZSIsImdldE1pZ3JhdGlvblNldEZyb21FbnRpdHkiLCJQb3N0Z3JlU1FMU2NoZW1hUmVhZGVyIiwiTWlncmF0b3IiLCJnZXRNaWdyYXRpb25Db2RlcyIsInNyY01pZ3JhdGlvbnNEaXIiLCJqb2luIiwiYXBpUm9vdFBhdGgiLCJyZWN1cnNpdmUiLCJjb2RlcyIsImZpbHRlciIsImYiLCJlbmRzV2l0aCIsIm1hcCIsIm5hbWUiLCJyZXBsYWNlIiwic29ydCIsImEiLCJiIiwidCIsImdldFN0YXR1cyIsImNvbm5LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImRiQ29uZmlnIiwia2V5IiwibWlncmF0aW9uU3RhdHVzRXJyb3IiLCJzdGF0dXNlcyIsIlByb21pc2UiLCJhbGwiLCJjb25uS2V5Iiwia25leE9wdGlvbnMiLCJ0Q29ubiIsInN0YXR1cyIsIm1pZ3JhdGUiLCJlcnIiLCJjb25zb2xlIiwid2FybiIsInllbGxvdyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb25uZWN0aW9uIiwiRXJyb3IiLCJtZXNzYWdlIiwiU3RyaW5nIiwicGVuZGluZyIsImZkTGlzdCIsImxpc3QiLCJmZCIsImZpbGUiLCJjdXJyZW50VmVyc2lvbiIsIl9lcnIiLCJkZXN0cm95IiwiY29ublN0cmluZyIsInVzZXIiLCJob3N0IiwicG9ydCIsImRhdGFiYXNlIiwicHJlcGFyZWRDb2RlcyIsInN0YXR1czBjb25uIiwiZmluZCIsInVuZGVmaW5lZCIsImNvbXBhcmVEQmNvbm4iLCJnZW5Db2RlcyIsImNvbXBhcmVNaWdyYXRpb25zIiwiY29ubnMiLCJlcnJvciIsInJ1bkFjdGlvbiIsImFjdGlvbiIsInRhcmdldHMiLCJjb25maWdzIiwidGFyZ2V0Iiwib3B0aW9ucyIsImMiLCJjb25maWciLCJrbmV4IiwicmVzdWx0IiwiYmF0Y2hObyIsImFwcGxpZWQiLCJsYXRlc3QiLCJyb2xsYmFjayIsInZhbGlkYXRlRGVsZXRhYmxlIiwiY29kZU5hbWVzIiwiYXBwbGllZENvZGVzIiwiY29kZU5hbWUiLCJzb21lIiwiY29ubiIsImluY2x1ZGVzIiwiY2FuRGVsZXRlIiwibGVuZ3RoIiwiZGVsQ29kZXMiLCJmaWxlUGF0aCIsImdlbkRhdGVUYWciLCJpbmRleCIsImJhc2VEYXRlIiwiRGF0ZSIsImRhdGUiLCJnZXRUaW1lIiwicGFkIiwibnVtIiwic2l6ZSIsInRvU3RyaW5nIiwicGFkU3RhcnQiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJnZW5lcmF0ZVByZXBhcmVkQ29kZXMiLCJsb2ciLCJncmVlbiIsIm1pZ3JhdGlvbnNEaXIiLCJwY29kZSIsImVudHJpZXMiLCJmb3JtYXR0ZWQiLCJkYXRlVGFnIiwidGl0bGUiLCJjb21wYXJlREIiLCJlbnRpdHlJZHMiLCJnZXRBbGxJZHMiLCJlbnRpdHlTZXRzV2l0aEpvaW5UYWJsZSIsImVudGl0eUlkIiwiZ2V0IiwicHJvcHMiLCJqb2luVGFibGVzV2l0aER1cCIsImZsYXRNYXAiLCJlbnRpdHlTZXQiLCJqb2luVGFibGVzIiwidmFsdWVzIiwianQiLCJ0YWJsZSIsInRhYmxlcyIsImluZGV4ZXMiLCJ0eXBlIiwiY29sdW1ucyIsImVudGl0eVNldHMiLCJkYlNldCIsImdldE1pZ3JhdGlvblNldEZyb21EQiIsImZsYXQiLCJjb2RlQSIsImNvZGVCIiwicnVuU2hhZG93VGVzdCIsInRkYkNvbm4iLCJ0ZXN0Iiwic2hhZG93RGF0YWJhc2UiLCJjbGVhclRlc3RUcmFuc2FjdGlvbiIsInRkYiIsIm1hZ2VudGEiLCJyYXciLCJzZGIiLCJwYXNzd29yZCIsImUiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVksU0FBUztBQUM1QixPQUFPQyxXQUFXLFFBQVE7QUFDMUIsU0FBU0MsS0FBSyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxRQUFRLG1CQUFjO0FBRWhFLE9BQU9DLFVBQVUsT0FBTztBQUN4QixTQUFTQyxLQUFLLEVBQUVDLEdBQUcsRUFBRUMsTUFBTSxRQUFRLFVBQVU7QUFDN0MsU0FBU0MsTUFBTSxRQUFRLGtCQUFTO0FBQ2hDLFNBQVNDLEVBQUUsUUFBNkIsb0JBQWlCO0FBQ3pELFNBQVNDLGtCQUFrQixRQUFRLHNCQUFtQjtBQUN0RCxTQUFTQyxhQUFhLFFBQVEsOEJBQTJCO0FBQ3pELFNBQVNDLDJCQUEyQixRQUFRLGlDQUE4QjtBQUMxRSxTQUFTQyxLQUFLLFFBQVEsb0JBQWlCO0FBRXZDLFNBQVNDLE1BQU0sUUFBUSx5QkFBc0I7QUFDN0MsU0FBU0MsTUFBTSxRQUFRLHVCQUFvQjtBQUMzQyxTQUFTQyxpQkFBaUIsRUFBRUMsa0JBQWtCLFFBQVEsdUJBQW9CO0FBQzFFLFNBQVNDLHlCQUF5QixRQUFRLHFCQUFrQjtBQUM1RCxTQUFTQyxzQkFBc0IsUUFBUSxnQ0FBNkI7QUFTcEUsT0FBTyxNQUFNQztJQUNYLE1BQWNDLG9CQUE4QztRQUMxRCxNQUFNQyxtQkFBbUJsQixLQUFLbUIsSUFBSSxDQUFDZixPQUFPZ0IsV0FBVyxFQUFFLE9BQU8sZUFBZSwr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
@@ -1 +1 @@
1
- {"version":3,"file":"postgresql-schema-reader.d.ts","sourceRoot":"","sources":["../../src/migration/postgresql-schema-reader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,KAAK,EACV,eAAe,EAGf,YAAY,EAEb,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,KAAK,GAAG,MAAM,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,cAAM,2BAA2B;IAC/B;;;;;OAKG;IACG,qBAAqB,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAyHzF;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACG,SAAS,CACb,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAqHhD;;;OAGG;YACW,mBAAmB;IAwBjC;;OAEG;IACH,gBAAgB,CACd,QAAQ,EAAE,QAAQ,GACjB,IAAI,CACL,eAAe,EACf,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,CACxE;CA+FF;AAED,eAAO,MAAM,sBAAsB,6BAAoC,CAAC"}
1
+ {"version":3,"file":"postgresql-schema-reader.d.ts","sourceRoot":"","sources":["../../src/migration/postgresql-schema-reader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,KAAK,EACV,eAAe,EAGf,YAAY,EAEb,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,KAAK,GAAG,MAAM,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,cAAM,2BAA2B;IAC/B;;;;;OAKG;IACG,qBAAqB,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IA8HzF;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACG,SAAS,CACb,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAqHhD;;;OAGG;YACW,mBAAmB;IAwBjC;;OAEG;IACH,gBAAgB,CACd,QAAQ,EAAE,QAAQ,GACjB,IAAI,CACL,eAAe,EACf,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,CACxE;CA+FF;AAED,eAAO,MAAM,sBAAsB,6BAAoC,CAAC"}
@@ -81,8 +81,10 @@ class PostgreSQLSchemaReaderClass {
81
81
  name: indexName,
82
82
  columns: currentIndexes.map((idx)=>({
83
83
  name: idx.column_name,
84
- nullsFirst: idx.nulls_first,
85
- sortOrder: idx.sort_order
84
+ ...firstIndex.index_type === "btree" ? {
85
+ sortOrder: idx.sort_order,
86
+ nullsFirst: idx.nulls_first
87
+ } : {}
86
88
  })),
87
89
  nullsNotDistinct: firstIndex.nulls_not_distinct,
88
90
  using: firstIndex.index_type
@@ -376,4 +378,4 @@ class PostgreSQLSchemaReaderClass {
376
378
  }
377
379
  export const PostgreSQLSchemaReader = new PostgreSQLSchemaReaderClass();
378
380
 
379
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vcG9zdGdyZXNxbC1zY2hlbWEtcmVhZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGdyb3VwIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB0eXBlIHtcbiAgTWlncmF0aW9uQ29sdW1uLFxuICBNaWdyYXRpb25Gb3JlaWduLFxuICBNaWdyYXRpb25JbmRleCxcbiAgTWlncmF0aW9uU2V0LFxuICBSZWxhdGlvbk9uLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgUGdDb2x1bW4gPSB7XG4gIGNvbHVtbl9uYW1lOiBzdHJpbmc7XG4gIGRhdGFfdHlwZTogc3RyaW5nO1xuICB1ZHRfbmFtZTogc3RyaW5nO1xuICBjaGFyYWN0ZXJfbWF4aW11bV9sZW5ndGg6IG51bWJlciB8IG51bGw7XG4gIG51bWVyaWNfcHJlY2lzaW9uOiBudW1iZXIgfCBudWxsO1xuICBudW1lcmljX3NjYWxlOiBudW1iZXIgfCBudWxsO1xuICBpc19udWxsYWJsZTogc3RyaW5nO1xuICBjb2x1bW5fZGVmYXVsdDogc3RyaW5nIHwgbnVsbDtcbiAgaXNfZ2VuZXJhdGVkOiBzdHJpbmc7IC8vICdzJyA9IFNUT1JFRCwgJ3YnID0gVklSVFVBTCwgJycgPSBub25lXG4gIGdlbmVyYXRpb25fZXhwcmVzc2lvbjogc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUGdJbmRleCA9IHtcbiAgaW5kZXhfbmFtZTogc3RyaW5nO1xuICBjb2x1bW5fbmFtZTogc3RyaW5nO1xuICBpc191bmlxdWU6IGJvb2xlYW47XG4gIGlzX3ByaW1hcnk6IGJvb2xlYW47XG4gIGluZGV4X3R5cGU6IHN0cmluZztcbiAgbnVsbHNfZmlyc3Q6IGJvb2xlYW47XG4gIHNvcnRfb3JkZXI6IFwiQVNDXCIgfCBcIkRFU0NcIjtcbiAgbnVsbHNfbm90X2Rpc3RpbmN0OiBib29sZWFuO1xufTtcblxudHlwZSBQZ0ZvcmVpZ24gPSB7XG4gIGNvbnN0cmFpbnRfbmFtZTogc3RyaW5nO1xuICBjb2x1bW5fbmFtZTogc3RyaW5nO1xuICBmb3JlaWduX3RhYmxlX25hbWU6IHN0cmluZztcbiAgZm9yZWlnbl9jb2x1bW5fbmFtZTogc3RyaW5nO1xuICB1cGRhdGVfcnVsZTogc3RyaW5nO1xuICBkZWxldGVfcnVsZTogc3RyaW5nO1xufTtcblxuY2xhc3MgUG9zdGdyZVNRTFNjaGVtYVJlYWRlckNsYXNzIHtcbiAgLyoqXG4gICAqIERC7JeQ7IScIO2FjOydtOu4lCDsoJXrs7Trpbwg7J297Ja07IScIE1pZ3JhdGlvblNldOydhCDrp4zrk6TslrTsmLXri4jri6QuXG4gICAqIEBwYXJhbSBjb21wYXJlREIgS25leCDsnbjsiqTthLTsiqRcbiAgICogQHBhcmFtIHRhYmxlIO2FjOydtOu4lCDsnbTrpoRcbiAgICogQHJldHVybnMgTWlncmF0aW9uU2V0IOqwneyytFxuICAgKi9cbiAgYXN5bmMgZ2V0TWlncmF0aW9uU2V0RnJvbURCKGNvbXBhcmVEQjogS25leCwgdGFibGU6IHN0cmluZyk6IFByb21pc2U8TWlncmF0aW9uU2V0IHwgbnVsbD4ge1xuICAgIGxldCBkYkNvbHVtbnM6IFBnQ29sdW1uW10sIGRiSW5kZXhlczogUGdJbmRleFtdLCBkYkZvcmVpZ25zOiBQZ0ZvcmVpZ25bXTtcbiAgICB0cnkge1xuICAgICAgW2RiQ29sdW1ucywgZGJJbmRleGVzLCBkYkZvcmVpZ25zXSA9IGF3YWl0IHRoaXMucmVhZFRhYmxlKGNvbXBhcmVEQiwgdGFibGUpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKFwiVGFibGUgbm90IGZvdW5kXCIpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIHZlY3RvciDsu6zrn7zsnZggZGltZW5zaW9ucyDsobDtmoxcbiAgICBjb25zdCB2ZWN0b3JEaW1lbnNpb25zID0gYXdhaXQgdGhpcy5nZXRWZWN0b3JEaW1lbnNpb25zKGNvbXBhcmVEQiwgdGFibGUpO1xuXG4gICAgY29uc3QgY29sdW1uczogTWlncmF0aW9uQ29sdW1uW10gPSBkYkNvbHVtbnMubWFwKChkYkNvbHVtbikgPT4ge1xuICAgICAgY29uc3QgZGJDb2xUeXBlID0gdGhpcy5yZXNvbHZlREJDb2xUeXBlKGRiQ29sdW1uKTtcblxuICAgICAgLy8gdmVjdG9yIO2DgOyeheyduCDqsr3smrAgZGltZW5zaW9ucyDshKTsoJVcbiAgICAgIGlmIChkYkNvbFR5cGUudHlwZSA9PT0gXCJ2ZWN0b3JcIikge1xuICAgICAgICBkYkNvbFR5cGUuZGltZW5zaW9ucyA9IHZlY3RvckRpbWVuc2lvbnNbZGJDb2x1bW4uY29sdW1uX25hbWVdID8/IDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGRiQ29sdW1uLmNvbHVtbl9uYW1lLFxuICAgICAgICBudWxsYWJsZTogZGJDb2x1bW4uaXNfbnVsbGFibGUgPT09IFwiWUVTXCIsXG4gICAgICAgIC4uLmRiQ29sVHlwZSxcbiAgICAgICAgLy8gR2VuZXJhdGVkIENvbHVtbiDsspjrpqxcbiAgICAgICAgLi4uKCgpID0+IHtcbiAgICAgICAgICBpZiAoZGJDb2x1bW4uaXNfZ2VuZXJhdGVkID09PSBcInNcIiB8fCBkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwidlwiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwic1wiID8gXCJTVE9SRURcIiA6IFwiVklSVFVBTFwiLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGRiQ29sdW1uLmdlbmVyYXRpb25fZXhwcmVzc2lvbiA/PyBcIlwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9KSgpLFxuICAgICAgICAvLyBEZWZhdWx0IOqwkiDsspjrpqwgKEdlbmVyYXRlZCBDb2x1bW7snbQg7JWE64uMIOqyveyasOunjClcbiAgICAgICAgLi4uKCgpID0+IHtcbiAgICAgICAgICAvLyBHZW5lcmF0ZWQgQ29sdW1u7J2AIGRlZmF1bHQg6rCS7J20IOyXhuydjFxuICAgICAgICAgIGlmIChkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwic1wiIHx8IGRiQ29sdW1uLmlzX2dlbmVyYXRlZCA9PT0gXCJ2XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGJDb2x1bW4uY29sdW1uX2RlZmF1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFBvc3RncmVTUUwgZGVmYXVsdCDqsJIg7KCV66asIChuZXh0dmFsLCBDVVJSRU5UX1RJTUVTVEFNUCDrk7EpXG4gICAgICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gZGJDb2x1bW4uY29sdW1uX2RlZmF1bHQ7XG5cbiAgICAgICAgICAgIC8vIG5leHR2YWwg7KCc6rGwIChTRVJJQUwg7YOA7J6FKVxuICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZS5zdGFydHNXaXRoKFwibmV4dHZhbChcIikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDtg4DsnoUg7LqQ7Iqk7YyFIOygnOqxsCAo7JiIOiAnMSc6OmludGVnZXIg4oaSIDEpXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWUucmVwbGFjZSgvOjpbXFx3XFxzXSskL2csIFwiXCIpO1xuXG4gICAgICAgICAgICAvLyDrlLDsmLTtkZzqsIAgc2luZ2xlIHF1b3Rl7J24IOqyveyasCBkb3VibGUgcXVvdGXroZwg67OA7ZmYXG4gICAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlLnN0YXJ0c1dpdGgoXCInXCIpICYmIGRlZmF1bHRWYWx1ZS5lbmRzV2l0aChcIidcIikpIHtcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlLnJlcGxhY2VBbGwoXCInXCIsICdcIicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkZWZhdWx0VG86IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfSkoKSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBQUklNQVJZIEtFWeyZgCBmb3JlaWduIGtleeyaqSDsnbjrjbHsiqQg7KCc7Jm4XG4gICAgY29uc3QgZGJJbmRleGVzR3JvdXAgPSBncm91cChcbiAgICAgIGRiSW5kZXhlcy5maWx0ZXIoXG4gICAgICAgIChkYkluZGV4KSA9PlxuICAgICAgICAgICFkYkluZGV4LmlzX3ByaW1hcnkgJiZcbiAgICAgICAgICAhZGJGb3JlaWducy5maW5kKChkYkZvcmVpZ24pID0+IGRiSW5kZXguaW5kZXhfbmFtZS5pbmNsdWRlcyhkYkZvcmVpZ24uY29uc3RyYWludF9uYW1lKSksXG4gICAgICApLFxuICAgICAgKGRiSW5kZXgpID0+IGRiSW5kZXguaW5kZXhfbmFtZSxcbiAgICApO1xuXG4gICAgLy8gaW5kZXhlcyDsspjrpqxcbiAgICBjb25zdCBpbmRleGVzOiBNaWdyYXRpb25JbmRleFtdID0gT2JqZWN0LmtleXMoZGJJbmRleGVzR3JvdXApLm1hcCgoaW5kZXhOYW1lKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXhlcyA9IGRiSW5kZXhlc0dyb3VwW2luZGV4TmFtZV07XG4gICAgICBhc3NlcnQoY3VycmVudEluZGV4ZXMpO1xuXG4gICAgICBjb25zdCBmaXJzdEluZGV4ID0gY3VycmVudEluZGV4ZXNbMF07XG4gICAgICBjb25zdCB0eXBlID0gZmlyc3RJbmRleC5pc191bmlxdWUgPyBcInVuaXF1ZVwiIDogXCJpbmRleFwiO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBuYW1lOiBpbmRleE5hbWUsXG4gICAgICAgIGNvbHVtbnM6IGN1cnJlbnRJbmRleGVzLm1hcCgoaWR4KSA9PiAoe1xuICAgICAgICAgIG5hbWU6IGlkeC5jb2x1bW5fbmFtZSxcbiAgICAgICAgICBudWxsc0ZpcnN0OiBpZHgubnVsbHNfZmlyc3QsXG4gICAgICAgICAgc29ydE9yZGVyOiBpZHguc29ydF9vcmRlcixcbiAgICAgICAgfSkpLFxuICAgICAgICBudWxsc05vdERpc3RpbmN0OiBmaXJzdEluZGV4Lm51bGxzX25vdF9kaXN0aW5jdCxcbiAgICAgICAgdXNpbmc6IGZpcnN0SW5kZXguaW5kZXhfdHlwZSBhcyBcImJ0cmVlXCIgfCBcImhhc2hcIiB8IFwiZ2luXCIgfCBcImdpc3RcIiB8IFwicGdyb29uZ2FcIiB8IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBmb3JlaWducyDsspjrpqxcbiAgICBjb25zdCBmb3JlaWduczogTWlncmF0aW9uRm9yZWlnbltdID0gZGJGb3JlaWducy5tYXAoKGRiRm9yZWlnbikgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uczogW2RiRm9yZWlnbi5jb2x1bW5fbmFtZV0sXG4gICAgICAgIHRvOiBgJHtkYkZvcmVpZ24uZm9yZWlnbl90YWJsZV9uYW1lfS4ke2RiRm9yZWlnbi5mb3JlaWduX2NvbHVtbl9uYW1lfWAsXG4gICAgICAgIG9uVXBkYXRlOiB0aGlzLm1hcENvbnN0cmFpbnRBY3Rpb24oZGJGb3JlaWduLnVwZGF0ZV9ydWxlKSxcbiAgICAgICAgb25EZWxldGU6IHRoaXMubWFwQ29uc3RyYWludEFjdGlvbihkYkZvcmVpZ24uZGVsZXRlX3J1bGUpLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0YWJsZSxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBpbmRleGVzLFxuICAgICAgZm9yZWlnbnMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3N0Z3JlU1FM7J2YIGNvbnN0cmFpbnQgYWN0aW9u7J2EIEtuZXgg7ZiV7Iud7Jy866GcIOuzgO2ZmFxuICAgKi9cbiAgcHJpdmF0ZSBtYXBDb25zdHJhaW50QWN0aW9uKGFjdGlvbjogc3RyaW5nKTogUmVsYXRpb25PbiB7XG4gICAgY29uc3QgYWN0aW9uTWFwOiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbk9uPiA9IHtcbiAgICAgIFwiTk8gQUNUSU9OXCI6IFwiTk8gQUNUSU9OXCIsXG4gICAgICBSRVNUUklDVDogXCJSRVNUUklDVFwiLFxuICAgICAgQ0FTQ0FERTogXCJDQVNDQURFXCIsXG4gICAgICBcIlNFVCBOVUxMXCI6IFwiU0VUIE5VTExcIixcbiAgICAgIFwiU0VUIERFRkFVTFRcIjogXCJTRVQgREVGQVVMVFwiLFxuICAgIH07XG4gICAgcmV0dXJuIGFjdGlvbk1hcFthY3Rpb25dID8/IFwiTk8gQUNUSU9OXCI7XG4gIH1cblxuICAvKipcbiAgICog6riw7KG0IO2FjOydtOu4lCDsnb3slrTshJwgY29scywgaW5kZXhlcywgZm9yZWlnbnMg67CY7ZmYXG4gICAqL1xuICBhc3luYyByZWFkVGFibGUoXG4gICAgY29tcGFyZURCOiBLbmV4LFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPFtQZ0NvbHVtbltdLCBQZ0luZGV4W10sIFBnRm9yZWlnbltdXT4ge1xuICAgIC8vIENvbHVtbnMg7KGw7ZqMIChHZW5lcmF0ZWQgQ29sdW1uIOygleuztCDtj6ztlagpXG4gICAgY29uc3QgY29sdW1uc1F1ZXJ5ID0gYFxuICAgICAgU0VMRUNUXG4gICAgICAgIGMuY29sdW1uX25hbWUsXG4gICAgICAgIGMuZGF0YV90eXBlLFxuICAgICAgICBjLnVkdF9uYW1lLFxuICAgICAgICBjLmNoYXJhY3Rlcl9tYXhpbXVtX2xlbmd0aCxcbiAgICAgICAgYy5udW1lcmljX3ByZWNpc2lvbixcbiAgICAgICAgYy5udW1lcmljX3NjYWxlLFxuICAgICAgICBjLmlzX251bGxhYmxlLFxuICAgICAgICBjLmNvbHVtbl9kZWZhdWx0LFxuICAgICAgICBDT0FMRVNDRShhLmF0dGdlbmVyYXRlZCwgJycpIGFzIGlzX2dlbmVyYXRlZCxcbiAgICAgICAgYy5nZW5lcmF0aW9uX2V4cHJlc3Npb25cbiAgICAgIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgY1xuICAgICAgTEVGVCBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0bmFtZSA9IGMuY29sdW1uX25hbWVcbiAgICAgICAgQU5EIGEuYXR0cmVsaWQgPSAoXG4gICAgICAgICAgU0VMRUNUIG9pZCBGUk9NIHBnX2NsYXNzIFdIRVJFIHJlbG5hbWUgPSBjLnRhYmxlX25hbWVcbiAgICAgICAgICBBTkQgcmVsbmFtZXNwYWNlID0gKFNFTEVDVCBvaWQgRlJPTSBwZ19uYW1lc3BhY2UgV0hFUkUgbnNwbmFtZSA9IGMudGFibGVfc2NoZW1hKVxuICAgICAgICApXG4gICAgICBXSEVSRSBjLnRhYmxlX25hbWUgPSA/XG4gICAgICAgIEFORCBjLnRhYmxlX3NjaGVtYSA9ICdwdWJsaWMnXG4gICAgICBPUkRFUiBCWSBjLm9yZGluYWxfcG9zaXRpb25cbiAgICBgO1xuICAgIGNvbnN0IGNvbHVtbnMgPSAoYXdhaXQgY29tcGFyZURCLnJhdyhjb2x1bW5zUXVlcnksIFt0YWJsZU5hbWVdKSkucm93cyBhcyBQZ0NvbHVtbltdO1xuICAgIGlmIChjb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSBub3QgZm91bmQ6ICR7dGFibGVOYW1lfWApO1xuICAgIH1cblxuICAgIC8vIEluZGV4ZXMg7KGw7ZqMIChQR3Jvb25nYSDtkZztmITsi50g7J24642x7IqkIO2PrO2VqClcbiAgICBjb25zdCBpbmRleGVzUXVlcnkgPSBgXG4gICAgICBTRUxFQ1RcbiAgICAgICAgICBpLnJlbG5hbWUgQVMgaW5kZXhfbmFtZSxcbiAgICAgICAgICBDQVNFXG4gICAgICAgICAgICAgIFdIRU4gYW0uYW1uYW1lID0gJ3Bncm9vbmdhJyBBTkQgdS5hdHRudW0gPSAwIFRIRU5cbiAgICAgICAgICAgICAgICAgIHJlZ2V4cF9yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4cF9yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBUUklNKHBncm9vbmdhX2NvbC5jb2x1bW5fZXhwciksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICc6OnRleHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2cnXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAnWygpXScsXG4gICAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgICAgJ2cnXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIEVMU0UgYS5hdHRuYW1lXG4gICAgICAgICAgRU5EIEFTIGNvbHVtbl9uYW1lLFxuICAgICAgICAgIGl4LmluZGlzdW5pcXVlIEFTIGlzX3VuaXF1ZSxcbiAgICAgICAgICBpeC5pbmRpc3ByaW1hcnkgQVMgaXNfcHJpbWFyeSxcbiAgICAgICAgICBhbS5hbW5hbWUgQVMgaW5kZXhfdHlwZSxcbiAgICAgICAgICBDT0FMRVNDRSgodS5vcHQgJiAyKSA9IDIsIEZBTFNFKSBBUyBudWxsc19maXJzdCxcbiAgICAgICAgICBDQVNFIFxuICAgICAgICAgICAgICBXSEVOICh1Lm9wdCAmIDEpID0gMSBUSEVOICdERVNDJ1xuICAgICAgICAgICAgICBFTFNFICdBU0MnXG4gICAgICAgICAgRU5EIEFTIHNvcnRfb3JkZXIsXG4gICAgICAgICAgaXguaW5kbnVsbHNub3RkaXN0aW5jdCBBUyBudWxsc19ub3RfZGlzdGluY3RcbiAgICAgIEZST00gcGdfY2xhc3MgdFxuICAgICAgSk9JTiBwZ19pbmRleCBpeCBPTiB0Lm9pZCA9IGl4LmluZHJlbGlkXG4gICAgICBKT0lOIHBnX2NsYXNzIGkgT04gaS5vaWQgPSBpeC5pbmRleHJlbGlkXG4gICAgICBKT0lOIHBnX2FtIGFtIE9OIGkucmVsYW0gPSBhbS5vaWRcbiAgICAgIEpPSU4gTEFURVJBTCB1bm5lc3QoaXguaW5ka2V5LCBpeC5pbmRvcHRpb24pXG4gICAgICAgICAgV0lUSCBPUkRJTkFMSVRZIEFTIHUoYXR0bnVtLCBvcHQsIG9yZCkgT04gdHJ1ZVxuICAgICAgTEVGVCBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSB0Lm9pZCBcbiAgICAgICAgICBBTkQgYS5hdHRudW0gPSB1LmF0dG51bSBcbiAgICAgICAgICBBTkQgdS5hdHRudW0gPiAwXG4gICAgICBMRUZUIEpPSU4gTEFURVJBTCAoXG4gICAgICAgICAgU0VMRUNUIFxuICAgICAgICAgICAgICB1bm5lc3QoXG4gICAgICAgICAgICAgICAgICBDQVNFIFxuICAgICAgICAgICAgICAgICAgICAgIFdIRU4gcGdfZ2V0X2V4cHIoaXguaW5kZXhwcnMsIGl4LmluZHJlbGlkKSB+ICdeQVJSQVlcXFxcWycgVEhFTlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdfdG9fYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdleHBfcmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfZXhwcihpeC5pbmRleHBycywgaXguaW5kcmVsaWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdeQVJSQVlcXFxcWyguKilcXFxcXSQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXFxcMSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBFTFNFXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZW3BnX2dldF9leHByKGl4LmluZGV4cHJzLCBpeC5pbmRyZWxpZCldXG4gICAgICAgICAgICAgICAgICBFTkRcbiAgICAgICAgICAgICAgKSBhcyBjb2x1bW5fZXhwclxuICAgICAgKSBwZ3Jvb25nYV9jb2wgT04gYW0uYW1uYW1lID0gJ3Bncm9vbmdhJyBBTkQgdS5hdHRudW0gPSAwXG4gICAgICBXSEVSRSB0LnJlbG5hbWUgPSA/XG4gICAgICAgICAgQU5EICh1LmF0dG51bSA+IDAgT1IgKGFtLmFtbmFtZSA9ICdwZ3Jvb25nYScgQU5EIHUuYXR0bnVtID0gMCkpXG4gICAgICBPUkRFUiBCWSBpLnJlbG5hbWUsIHUub3JkO1xuYDtcbiAgICBjb25zdCBpbmRleGVzID0gKGF3YWl0IGNvbXBhcmVEQi5yYXcoaW5kZXhlc1F1ZXJ5LCBbdGFibGVOYW1lXSkpLnJvd3M7XG5cbiAgICAvLyBGb3JlaWduIEtleXMg7KGw7ZqMXG4gICAgY29uc3QgZm9yZWlnbnNRdWVyeSA9IGBcbiAgICAgIFNFTEVDVFxuICAgICAgICB0Yy5jb25zdHJhaW50X25hbWUsXG4gICAgICAgIGtjdS5jb2x1bW5fbmFtZSxcbiAgICAgICAgY2N1LnRhYmxlX25hbWUgQVMgZm9yZWlnbl90YWJsZV9uYW1lLFxuICAgICAgICBjY3UuY29sdW1uX25hbWUgQVMgZm9yZWlnbl9jb2x1bW5fbmFtZSxcbiAgICAgICAgcmMudXBkYXRlX3J1bGUsXG4gICAgICAgIHJjLmRlbGV0ZV9ydWxlXG4gICAgICBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZV9jb25zdHJhaW50cyBBUyB0Y1xuICAgICAgSk9JTiBpbmZvcm1hdGlvbl9zY2hlbWEua2V5X2NvbHVtbl91c2FnZSBBUyBrY3VcbiAgICAgICAgT04gdGMuY29uc3RyYWludF9uYW1lID0ga2N1LmNvbnN0cmFpbnRfbmFtZVxuICAgICAgICBBTkQgdGMudGFibGVfc2NoZW1hID0ga2N1LnRhYmxlX3NjaGVtYVxuICAgICAgSk9JTiBpbmZvcm1hdGlvbl9zY2hlbWEuY29uc3RyYWludF9jb2x1bW5fdXNhZ2UgQVMgY2N1XG4gICAgICAgIE9OIGNjdS5jb25zdHJhaW50X25hbWUgPSB0Yy5jb25zdHJhaW50X25hbWVcbiAgICAgICAgQU5EIGNjdS50YWJsZV9zY2hlbWEgPSB0Yy50YWJsZV9zY2hlbWFcbiAgICAgIEpPSU4gaW5mb3JtYXRpb25fc2NoZW1hLnJlZmVyZW50aWFsX2NvbnN0cmFpbnRzIEFTIHJjXG4gICAgICAgIE9OIHJjLmNvbnN0cmFpbnRfbmFtZSA9IHRjLmNvbnN0cmFpbnRfbmFtZVxuICAgICAgICBBTkQgcmMuY29uc3RyYWludF9zY2hlbWEgPSB0Yy50YWJsZV9zY2hlbWFcbiAgICAgIFdIRVJFIHRjLmNvbnN0cmFpbnRfdHlwZSA9ICdGT1JFSUdOIEtFWSdcbiAgICAgICAgQU5EIHRjLnRhYmxlX25hbWUgPSA/XG4gICAgYDtcbiAgICBjb25zdCBmb3JlaWducyA9IChhd2FpdCBjb21wYXJlREIucmF3KGZvcmVpZ25zUXVlcnksIFt0YWJsZU5hbWVdKSkucm93cztcblxuICAgIHJldHVybiBbY29sdW1ucywgaW5kZXhlcywgZm9yZWlnbnNdO1xuICB9XG5cbiAgLyoqXG4gICAqIHZlY3RvciDsu6zrn7zsnZggZGltZW5zaW9uc+ulvCDsobDtmoztlanri4jri6QuXG4gICAqIHBnX2F0dHJpYnV0ZeydmCBhdHR0eXBtb2Tsl5DshJwg7LCo7JuQIOyImOulvCDstpTstpztlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFZlY3RvckRpbWVuc2lvbnMoXG4gICAgY29tcGFyZURCOiBLbmV4LFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+IHtcbiAgICBjb25zdCBxdWVyeSA9IGBcbiAgICAgIFNFTEVDVFxuICAgICAgICBhLmF0dG5hbWUgYXMgY29sdW1uX25hbWUsXG4gICAgICAgIGEuYXR0dHlwbW9kIGFzIGRpbWVuc2lvbnNcbiAgICAgIEZST00gcGdfYXR0cmlidXRlIGFcbiAgICAgIEpPSU4gcGdfY2xhc3MgYyBPTiBhLmF0dHJlbGlkID0gYy5vaWRcbiAgICAgIEpPSU4gcGdfdHlwZSB0IE9OIGEuYXR0dHlwaWQgPSB0Lm9pZFxuICAgICAgV0hFUkUgYy5yZWxuYW1lID0gP1xuICAgICAgICBBTkQgdC50eXBuYW1lID0gJ3ZlY3RvcidcbiAgICAgICAgQU5EIGEuYXR0bnVtID4gMFxuICAgIGA7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29tcGFyZURCLnJhdyhxdWVyeSwgW3RhYmxlTmFtZV0pO1xuICAgIGNvbnN0IGRpbWVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByZXN1bHQucm93cykge1xuICAgICAgLy8gYXR0dHlwbW9k7JeQ7IScIOyLpOygnCBkaW1lbnNpb25zIOqwkiDstpTstpxcbiAgICAgIGRpbWVuc2lvbnNbcm93LmNvbHVtbl9uYW1lXSA9IHJvdy5kaW1lbnNpb25zID4gMCA/IHJvdy5kaW1lbnNpb25zIDogMDtcbiAgICB9XG4gICAgcmV0dXJuIGRpbWVuc2lvbnM7XG4gIH1cblxuICAvKipcbiAgICogUG9zdGdyZVNRTCDsu6zrn7wg7YOA7J6F7J2EIOu2hOyEne2VmOyXrCBNaWdyYXRpb25Db2x1bW4g6rCd7LK066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAgICovXG4gIHJlc29sdmVEQkNvbFR5cGUoXG4gICAgZGJDb2x1bW46IFBnQ29sdW1uLFxuICApOiBQaWNrPFxuICAgIE1pZ3JhdGlvbkNvbHVtbixcbiAgICBcInR5cGVcIiB8IFwibGVuZ3RoXCIgfCBcInByZWNpc2lvblwiIHwgXCJzY2FsZVwiIHwgXCJudW1iZXJUeXBlXCIgfCBcImRpbWVuc2lvbnNcIlxuICA+IHtcbiAgICBjb25zdCB7XG4gICAgICB1ZHRfbmFtZTogX3VkdF9uYW1lLFxuICAgICAgY2hhcmFjdGVyX21heGltdW1fbGVuZ3RoLFxuICAgICAgbnVtZXJpY19wcmVjaXNpb24sXG4gICAgICBudW1lcmljX3NjYWxlLFxuICAgIH0gPSBkYkNvbHVtbjtcblxuICAgIGNvbnN0IHsgdWR0X25hbWUsIHNpbmdsZU9yQXJyYXkgfSA9ICgoKSA9PiB7XG4gICAgICBpZiAoX3VkdF9uYW1lLnN0YXJ0c1dpdGgoXCJfXCIpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdWR0X25hbWU6IF91ZHRfbmFtZS5zdWJzdHJpbmcoMSksXG4gICAgICAgICAgc2luZ2xlT3JBcnJheTogXCJbXVwiIGFzIGNvbnN0LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWR0X25hbWU6IF91ZHRfbmFtZSxcbiAgICAgICAgc2luZ2xlT3JBcnJheTogXCJcIiBhcyBjb25zdCxcbiAgICAgIH07XG4gICAgfSkoKTtcblxuICAgIC8vIFVVSURcbiAgICBpZiAodWR0X25hbWUgPT09IFwidXVpZFwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBgdXVpZCR7c2luZ2xlT3JBcnJheX1gIH07XG4gICAgfVxuXG4gICAgLy8gSW50ZWdlciB0eXBlc1xuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJpbnQ0XCIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IGBpbnRlZ2VyJHtzaW5nbGVPckFycmF5fWAgfTtcbiAgICB9XG4gICAgaWYgKHVkdF9uYW1lID09PSBcImludDhcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYGJpZ0ludGVnZXIke3NpbmdsZU9yQXJyYXl9YCB9O1xuICAgIH1cblxuICAgIC8vIFN0cmluZyB0eXBlc1xuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJ2YXJjaGFyXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IGBzdHJpbmcke3NpbmdsZU9yQXJyYXl9YCxcbiAgICAgICAgLi4uKGNoYXJhY3Rlcl9tYXhpbXVtX2xlbmd0aCAmJiB7XG4gICAgICAgICAgbGVuZ3RoOiBjaGFyYWN0ZXJfbWF4aW11bV9sZW5ndGgsXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHVkdF9uYW1lID09PSBcInRleHRcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYHN0cmluZyR7c2luZ2xlT3JBcnJheX1gIH07IC8vIFN0cmluZ1Byb3Agd2l0aG91dCBsZW5ndGhcbiAgICB9XG5cbiAgICAvLyBOdW1iZXJPck51bWVyaWMgdHlwZXNcbiAgICBpZiAodWR0X25hbWUgPT09IFwibnVtZXJpY1wiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBgbnVtYmVyT3JOdW1lcmljJHtzaW5nbGVPckFycmF5fWAsXG4gICAgICAgIG51bWJlclR5cGU6IFwibnVtZXJpY1wiLFxuICAgICAgICAuLi4obnVtZXJpY19wcmVjaXNpb24gIT09IG51bGwgJiZcbiAgICAgICAgICBudW1lcmljX3NjYWxlICE9PSBudWxsICYmIHtcbiAgICAgICAgICAgIHByZWNpc2lvbjogbnVtZXJpY19wcmVjaXNpb24sXG4gICAgICAgICAgICBzY2FsZTogbnVtZXJpY19zY2FsZSxcbiAgICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJmbG9hdDRcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYG51bWJlck9yTnVtZXJpYyR7c2luZ2xlT3JBcnJheX1gLCBudW1iZXJUeXBlOiBcInJlYWxcIiB9O1xuICAgIH1cbiAgICBpZiAodWR0X25hbWUgPT09IFwiZmxvYXQ4XCIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IGBudW1iZXJPck51bWVyaWMke3NpbmdsZU9yQXJyYXl9YCwgbnVtYmVyVHlwZTogXCJkb3VibGUgcHJlY2lzaW9uXCIgfTtcbiAgICB9XG5cbiAgICAvLyBCb29sZWFuXG4gICAgaWYgKHVkdF9uYW1lID09PSBcImJvb2xcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYGJvb2xlYW4ke3NpbmdsZU9yQXJyYXl9YCB9O1xuICAgIH1cblxuICAgIC8vIFRpbWVzdGFtcHogdHlwZXNcbiAgICBpZiAodWR0X25hbWUgPT09IFwidGltZXN0YW1wdHpcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYGRhdGUke3NpbmdsZU9yQXJyYXl9YCB9OyAvLyBEYXRlUHJvcCDihpIgdGltZXN0YW1wdHpcbiAgICB9XG5cbiAgICAvLyBKU09OXG4gICAgaWYgKHVkdF9uYW1lID09PSBcImpzb25cIiB8fCB1ZHRfbmFtZSA9PT0gXCJqc29uYlwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcImpzb25cIiB9O1xuICAgIH1cblxuICAgIC8vIFZlY3RvciAocGd2ZWN0b3IpXG4gICAgaWYgKHVkdF9uYW1lID09PSBcInZlY3RvclwiKSB7XG4gICAgICAvLyB2ZWN0b3Ig7YOA7J6F7J2YIOywqOybkCDsiJjripQgY29sdW1uX2RlZmF1bHTrgpgg67OE64+EIOy/vOumrOuhnCDtmZXsnbjtlbTslbwg7ZWoXG4gICAgICAvLyDtmITsnqzripQg6riw67O46rCSIDDsnLzroZwg7ISk7KCVICjsi6TsoJwgZGltZW5zaW9uc+uKlCBnZXRNaWdyYXRpb25TZXRGcm9tRELsl5DshJwg67OE64+EIOy/vOumrOuhnCDtmZXsnbgpXG4gICAgICByZXR1cm4geyB0eXBlOiBgdmVjdG9yJHtzaW5nbGVPckFycmF5fWAsIGRpbWVuc2lvbnM6IDAgfTtcbiAgICB9XG5cbiAgICAvLyB0c3ZlY3RvciAoUG9zdGdyZVNRTCDsoITrrLgg6rKA7IOJ7JqpIO2DgOyehSlcbiAgICBpZiAodWR0X25hbWUgPT09IFwidHN2ZWN0b3JcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0c3ZlY3RvclwiIH07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGByZXNvbHZlIOu2iOqwgOuKpe2VnCBQb3N0Z3JlU1FMIOy7rOufvCDtg4DsnoU6ICR7dWR0X25hbWV9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFBvc3RncmVTUUxTY2hlbWFSZWFkZXIgPSBuZXcgUG9zdGdyZVNRTFNjaGVtYVJlYWRlckNsYXNzKCk7XG4iXSwibmFtZXMiOlsiYXNzZXJ0IiwiZ3JvdXAiLCJQb3N0Z3JlU1FMU2NoZW1hUmVhZGVyQ2xhc3MiLCJnZXRNaWdyYXRpb25TZXRGcm9tREIiLCJjb21wYXJlREIiLCJ0YWJsZSIsImRiQ29sdW1ucyIsImRiSW5kZXhlcyIsImRiRm9yZWlnbnMiLCJyZWFkVGFibGUiLCJlIiwiRXJyb3IiLCJtZXNzYWdlIiwiaW5jbHVkZXMiLCJjb25zb2xlIiwiZXJyb3IiLCJ2ZWN0b3JEaW1lbnNpb25zIiwiZ2V0VmVjdG9yRGltZW5zaW9ucyIsImNvbHVtbnMiLCJtYXAiLCJkYkNvbHVtbiIsImRiQ29sVHlwZSIsInJlc29sdmVEQkNvbFR5cGUiLCJ0eXBlIiwiZGltZW5zaW9ucyIsImNvbHVtbl9uYW1lIiwibmFtZSIsIm51bGxhYmxlIiwiaXNfbnVsbGFibGUiLCJpc19nZW5lcmF0ZWQiLCJnZW5lcmF0ZWQiLCJleHByZXNzaW9uIiwiZ2VuZXJhdGlvbl9leHByZXNzaW9uIiwiY29sdW1uX2RlZmF1bHQiLCJkZWZhdWx0VmFsdWUiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsImVuZHNXaXRoIiwicmVwbGFjZUFsbCIsImRlZmF1bHRUbyIsImRiSW5kZXhlc0dyb3VwIiwiZmlsdGVyIiwiZGJJbmRleCIsImlzX3ByaW1hcnkiLCJmaW5kIiwiZGJGb3JlaWduIiwiaW5kZXhfbmFtZSIsImNvbnN0cmFpbnRfbmFtZSIsImluZGV4ZXMiLCJPYmplY3QiLCJrZXlzIiwiaW5kZXhOYW1lIiwiY3VycmVudEluZGV4ZXMiLCJmaXJzdEluZGV4IiwiaXNfdW5pcXVlIiwiaWR4IiwibnVsbHNGaXJzdCIsIm51bGxzX2ZpcnN0Iiwic29ydE9yZGVyIiwic29ydF9vcmRlciIsIm51bGxzTm90RGlzdGluY3QiLCJudWxsc19ub3RfZGlzdGluY3QiLCJ1c2luZyIsImluZGV4X3R5cGUiLCJmb3JlaWducyIsInRvIiwiZm9yZWlnbl90YWJsZV9uYW1lIiwiZm9yZWlnbl9jb2x1bW5fbmFtZSIsIm9uVXBkYXRlIiwibWFwQ29uc3RyYWludEFjdGlvbiIsInVwZGF0ZV9ydWxlIiwib25EZWxldGUiLCJkZWxldGVfcnVsZSIsImFjdGlvbiIsImFjdGlvbk1hcCIsIlJFU1RSSUNUIiwiQ0FTQ0FERSIsInRhYmxlTmFtZSIsImNvbHVtbnNRdWVyeSIsInJhdyIsInJvd3MiLCJsZW5ndGgiLCJpbmRleGVzUXVlcnkiLCJmb3JlaWduc1F1ZXJ5IiwicXVlcnkiLCJyZXN1bHQiLCJyb3ciLCJ1ZHRfbmFtZSIsIl91ZHRfbmFtZSIsImNoYXJhY3Rlcl9tYXhpbXVtX2xlbmd0aCIsIm51bWVyaWNfcHJlY2lzaW9uIiwibnVtZXJpY19zY2FsZSIsInNpbmdsZU9yQXJyYXkiLCJzdWJzdHJpbmciLCJudW1iZXJUeXBlIiwicHJlY2lzaW9uIiwic2NhbGUiLCJQb3N0Z3JlU1FMU2NoZW1hUmVhZGVyIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxZQUFZLFNBQVM7QUFFNUIsU0FBU0MsS0FBSyxRQUFRLFVBQVU7QUEwQ2hDLE1BQU1DO0lBQ0o7Ozs7O0dBS0MsR0FDRCxNQUFNQyxzQkFBc0JDLFNBQWUsRUFBRUMsS0FBYSxFQUFnQztRQUN4RixJQUFJQyxXQUF1QkMsV0FBc0JDO1FBQ2pELElBQUk7WUFDRixDQUFDRixXQUFXQyxXQUFXQyxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUNDLFNBQVMsQ0FBQ0wsV0FBV0M7UUFDdkUsRUFBRSxPQUFPSyxHQUFZO1lBQ25CLElBQUlBLGFBQWFDLFNBQVNELEVBQUVFLE9BQU8sQ0FBQ0MsUUFBUSxDQUFDLG9CQUFvQjtnQkFDL0QsT0FBTztZQUNUO1lBQ0FDLFFBQVFDLEtBQUssQ0FBQ0w7WUFDZCxPQUFPO1FBQ1Q7UUFFQSwyQkFBMkI7UUFDM0IsTUFBTU0sbUJBQW1CLE1BQU0sSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQ2IsV0FBV0M7UUFFbkUsTUFBTWEsVUFBNkJaLFVBQVVhLEdBQUcsQ0FBQyxDQUFDQztZQUNoRCxNQUFNQyxZQUFZLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUNGO1lBRXhDLDhCQUE4QjtZQUM5QixJQUFJQyxVQUFVRSxJQUFJLEtBQUssVUFBVTtnQkFDL0JGLFVBQVVHLFVBQVUsR0FBR1IsZ0JBQWdCLENBQUNJLFNBQVNLLFdBQVcsQ0FBQyxJQUFJO1lBQ25FO1lBRUEsT0FBTztnQkFDTEMsTUFBTU4sU0FBU0ssV0FBVztnQkFDMUJFLFVBQVVQLFNBQVNRLFdBQVcsS0FBSztnQkFDbkMsR0FBR1AsU0FBUztnQkFDWixzQkFBc0I7Z0JBQ3RCLEdBQUcsQUFBQyxDQUFBO29CQUNGLElBQUlELFNBQVNTLFlBQVksS0FBSyxPQUFPVCxTQUFTUyxZQUFZLEtBQUssS0FBSzt3QkFDbEUsT0FBTzs0QkFDTEMsV0FBVztnQ0FDVFAsTUFBTUgsU0FBU1MsWUFBWSxLQUFLLE1BQU0sV0FBVztnQ0FDakRFLFlBQVlYLFNBQVNZLHFCQUFxQixJQUFJOzRCQUNoRDt3QkFDRjtvQkFDRjtvQkFDQSxPQUFPLENBQUM7Z0JBQ1YsQ0FBQSxHQUFJO2dCQUNKLDBDQUEwQztnQkFDMUMsR0FBRyxBQUFDLENBQUE7b0JBQ0Ysa0NBQWtDO29CQUNsQyxJQUFJWixTQUFTUyxZQUFZLEtBQUssT0FBT1QsU0FBU1MsWUFBWSxLQUFLLEtBQUs7d0JBQ2xFLE9BQU8sQ0FBQztvQkFDVjtvQkFFQSxJQUFJVCxTQUFTYSxjQUFjLEtBQUssTUFBTTt3QkFDcEMseURBQXlEO3dCQUN6RCxJQUFJQyxlQUFlZCxTQUFTYSxjQUFjO3dCQUUxQyx5QkFBeUI7d0JBQ3pCLElBQUlDLGFBQWFDLFVBQVUsQ0FBQyxhQUFhOzRCQUN2QyxPQUFPLENBQUM7d0JBQ1Y7d0JBRUEsa0NBQWtDO3dCQUNsQ0QsZUFBZUEsYUFBYUUsT0FBTyxDQUFDLGVBQWU7d0JBRW5ELHlDQUF5Qzt3QkFDekMsSUFBSUYsYUFBYUMsVUFBVSxDQUFDLFFBQVFELGFBQWFHLFFBQVEsQ0FBQyxNQUFNOzRCQUM5REgsZUFBZUEsYUFBYUksVUFBVSxDQUFDLEtBQUs7d0JBQzlDO3dCQUVBLE9BQU87NEJBQ0xDLFdBQVdMO3dCQUNiO29CQUNGO29CQUNBLE9BQU8sQ0FBQztnQkFDVixDQUFBLEdBQUk7WUFDTjtRQUNGO1FBRUEsbUNBQW1DO1FBQ25DLE1BQU1NLGlCQUFpQnZDLE1BQ3JCTSxVQUFVa0MsTUFBTSxDQUNkLENBQUNDLFVBQ0MsQ0FBQ0EsUUFBUUMsVUFBVSxJQUNuQixDQUFDbkMsV0FBV29DLElBQUksQ0FBQyxDQUFDQyxZQUFjSCxRQUFRSSxVQUFVLENBQUNqQyxRQUFRLENBQUNnQyxVQUFVRSxlQUFlLEtBRXpGLENBQUNMLFVBQVlBLFFBQVFJLFVBQVU7UUFHakMsYUFBYTtRQUNiLE1BQU1FLFVBQTRCQyxPQUFPQyxJQUFJLENBQUNWLGdCQUFnQnJCLEdBQUcsQ0FBQyxDQUFDZ0M7WUFDakUsTUFBTUMsaUJBQWlCWixjQUFjLENBQUNXLFVBQVU7WUFDaERuRCxPQUFPb0Q7WUFFUCxNQUFNQyxhQUFhRCxjQUFjLENBQUMsRUFBRTtZQUNwQyxNQUFNN0IsT0FBTzhCLFdBQVdDLFNBQVMsR0FBRyxXQUFXO1lBRS9DLE9BQU87Z0JBQ0wvQjtnQkFDQUcsTUFBTXlCO2dCQUNOakMsU0FBU2tDLGVBQWVqQyxHQUFHLENBQUMsQ0FBQ29DLE1BQVMsQ0FBQTt3QkFDcEM3QixNQUFNNkIsSUFBSTlCLFdBQVc7d0JBQ3JCK0IsWUFBWUQsSUFBSUUsV0FBVzt3QkFDM0JDLFdBQVdILElBQUlJLFVBQVU7b0JBQzNCLENBQUE7Z0JBQ0FDLGtCQUFrQlAsV0FBV1Esa0JBQWtCO2dCQUMvQ0MsT0FBT1QsV0FBV1UsVUFBVTtZQUM5QjtRQUNGO1FBRUEsY0FBYztRQUNkLE1BQU1DLFdBQStCeEQsV0FBV1csR0FBRyxDQUFDLENBQUMwQjtZQUNuRCxPQUFPO2dCQUNMM0IsU0FBUztvQkFBQzJCLFVBQVVwQixXQUFXO2lCQUFDO2dCQUNoQ3dDLElBQUksR0FBR3BCLFVBQVVxQixrQkFBa0IsQ0FBQyxDQUFDLEVBQUVyQixVQUFVc0IsbUJBQW1CLEVBQUU7Z0JBQ3RFQyxVQUFVLElBQUksQ0FBQ0MsbUJBQW1CLENBQUN4QixVQUFVeUIsV0FBVztnQkFDeERDLFVBQVUsSUFBSSxDQUFDRixtQkFBbUIsQ0FBQ3hCLFVBQVUyQixXQUFXO1lBQzFEO1FBQ0Y7UUFFQSxPQUFPO1lBQ0xuRTtZQUNBYTtZQUNBOEI7WUFDQWdCO1FBQ0Y7SUFDRjtJQUVBOztHQUVDLEdBQ0QsQUFBUUssb0JBQW9CSSxNQUFjLEVBQWM7UUFDdEQsTUFBTUMsWUFBd0M7WUFDNUMsYUFBYTtZQUNiQyxVQUFVO1lBQ1ZDLFNBQVM7WUFDVCxZQUFZO1lBQ1osZUFBZTtRQUNqQjtRQUNBLE9BQU9GLFNBQVMsQ0FBQ0QsT0FBTyxJQUFJO0lBQzlCO0lBRUE7O0dBRUMsR0FDRCxNQUFNaEUsVUFDSkwsU0FBZSxFQUNmeUUsU0FBaUIsRUFDOEI7UUFDL0Msc0NBQXNDO1FBQ3RDLE1BQU1DLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBcUJ0QixDQUFDO1FBQ0QsTUFBTTVELFVBQVUsQUFBQyxDQUFBLE1BQU1kLFVBQVUyRSxHQUFHLENBQUNELGNBQWM7WUFBQ0Q7U0FBVSxDQUFBLEVBQUdHLElBQUk7UUFDckUsSUFBSTlELFFBQVErRCxNQUFNLEtBQUssR0FBRztZQUN4QixNQUFNLElBQUl0RSxNQUFNLENBQUMsaUJBQWlCLEVBQUVrRSxXQUFXO1FBQ2pEO1FBRUEsbUNBQW1DO1FBQ25DLE1BQU1LLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUQxQixDQUFDO1FBQ0csTUFBTWxDLFVBQVUsQUFBQyxDQUFBLE1BQU01QyxVQUFVMkUsR0FBRyxDQUFDRyxjQUFjO1lBQUNMO1NBQVUsQ0FBQSxFQUFHRyxJQUFJO1FBRXJFLGtCQUFrQjtRQUNsQixNQUFNRyxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFvQnZCLENBQUM7UUFDRCxNQUFNbkIsV0FBVyxBQUFDLENBQUEsTUFBTTVELFVBQVUyRSxHQUFHLENBQUNJLGVBQWU7WUFBQ047U0FBVSxDQUFBLEVBQUdHLElBQUk7UUFFdkUsT0FBTztZQUFDOUQ7WUFBUzhCO1lBQVNnQjtTQUFTO0lBQ3JDO0lBRUE7OztHQUdDLEdBQ0QsTUFBYy9DLG9CQUNaYixTQUFlLEVBQ2Z5RSxTQUFpQixFQUNnQjtRQUNqQyxNQUFNTyxRQUFRLENBQUM7Ozs7Ozs7Ozs7SUFVZixDQUFDO1FBQ0QsTUFBTUMsU0FBUyxNQUFNakYsVUFBVTJFLEdBQUcsQ0FBQ0ssT0FBTztZQUFDUDtTQUFVO1FBQ3JELE1BQU1yRCxhQUFxQyxDQUFDO1FBQzVDLEtBQUssTUFBTThELE9BQU9ELE9BQU9MLElBQUksQ0FBRTtZQUM3QixpQ0FBaUM7WUFDakN4RCxVQUFVLENBQUM4RCxJQUFJN0QsV0FBVyxDQUFDLEdBQUc2RCxJQUFJOUQsVUFBVSxHQUFHLElBQUk4RCxJQUFJOUQsVUFBVSxHQUFHO1FBQ3RFO1FBQ0EsT0FBT0E7SUFDVDtJQUVBOztHQUVDLEdBQ0RGLGlCQUNFRixRQUFrQixFQUlsQjtRQUNBLE1BQU0sRUFDSm1FLFVBQVVDLFNBQVMsRUFDbkJDLHdCQUF3QixFQUN4QkMsaUJBQWlCLEVBQ2pCQyxhQUFhLEVBQ2QsR0FBR3ZFO1FBRUosTUFBTSxFQUFFbUUsUUFBUSxFQUFFSyxhQUFhLEVBQUUsR0FBRyxBQUFDLENBQUE7WUFDbkMsSUFBSUosVUFBVXJELFVBQVUsQ0FBQyxNQUFNO2dCQUM3QixPQUFPO29CQUNMb0QsVUFBVUMsVUFBVUssU0FBUyxDQUFDO29CQUM5QkQsZUFBZTtnQkFDakI7WUFDRjtZQUNBLE9BQU87Z0JBQ0xMLFVBQVVDO2dCQUNWSSxlQUFlO1lBQ2pCO1FBQ0YsQ0FBQTtRQUVBLE9BQU87UUFDUCxJQUFJTCxhQUFhLFFBQVE7WUFDdkIsT0FBTztnQkFBRWhFLE1BQU0sQ0FBQyxJQUFJLEVBQUVxRSxlQUFlO1lBQUM7UUFDeEM7UUFFQSxnQkFBZ0I7UUFDaEIsSUFBSUwsYUFBYSxRQUFRO1lBQ3ZCLE9BQU87Z0JBQUVoRSxNQUFNLENBQUMsT0FBTyxFQUFFcUUsZUFBZTtZQUFDO1FBQzNDO1FBQ0EsSUFBSUwsYUFBYSxRQUFRO1lBQ3ZCLE9BQU87Z0JBQUVoRSxNQUFNLENBQUMsVUFBVSxFQUFFcUUsZUFBZTtZQUFDO1FBQzlDO1FBRUEsZUFBZTtRQUNmLElBQUlMLGFBQWEsV0FBVztZQUMxQixPQUFPO2dCQUNMaEUsTUFBTSxDQUFDLE1BQU0sRUFBRXFFLGVBQWU7Z0JBQzlCLEdBQUlILDRCQUE0QjtvQkFDOUJSLFFBQVFRO2dCQUNWLENBQUM7WUFDSDtRQUNGO1FBQ0EsSUFBSUYsYUFBYSxRQUFRO1lBQ3ZCLE9BQU87Z0JBQUVoRSxNQUFNLENBQUMsTUFBTSxFQUFFcUUsZUFBZTtZQUFDLEdBQUcsNEJBQTRCO1FBQ3pFO1FBRUEsd0JBQXdCO1FBQ3hCLElBQUlMLGFBQWEsV0FBVztZQUMxQixPQUFPO2dCQUNMaEUsTUFBTSxDQUFDLGVBQWUsRUFBRXFFLGVBQWU7Z0JBQ3ZDRSxZQUFZO2dCQUNaLEdBQUlKLHNCQUFzQixRQUN4QkMsa0JBQWtCLFFBQVE7b0JBQ3hCSSxXQUFXTDtvQkFDWE0sT0FBT0w7Z0JBQ1QsQ0FBQztZQUNMO1FBQ0Y7UUFDQSxJQUFJSixhQUFhLFVBQVU7WUFDekIsT0FBTztnQkFBRWhFLE1BQU0sQ0FBQyxlQUFlLEVBQUVxRSxlQUFlO2dCQUFFRSxZQUFZO1lBQU87UUFDdkU7UUFDQSxJQUFJUCxhQUFhLFVBQVU7WUFDekIsT0FBTztnQkFBRWhFLE1BQU0sQ0FBQyxlQUFlLEVBQUVxRSxlQUFlO2dCQUFFRSxZQUFZO1lBQW1CO1FBQ25GO1FBRUEsVUFBVTtRQUNWLElBQUlQLGFBQWEsUUFBUTtZQUN2QixPQUFPO2dCQUFFaEUsTUFBTSxDQUFDLE9BQU8sRUFBRXFFLGVBQWU7WUFBQztRQUMzQztRQUVBLG1CQUFtQjtRQUNuQixJQUFJTCxhQUFhLGVBQWU7WUFDOUIsT0FBTztnQkFBRWhFLE1BQU0sQ0FBQyxJQUFJLEVBQUVxRSxlQUFlO1lBQUMsR0FBRyx5QkFBeUI7UUFDcEU7UUFFQSxPQUFPO1FBQ1AsSUFBSUwsYUFBYSxVQUFVQSxhQUFhLFNBQVM7WUFDL0MsT0FBTztnQkFBRWhFLE1BQU07WUFBTztRQUN4QjtRQUVBLG9CQUFvQjtRQUNwQixJQUFJZ0UsYUFBYSxVQUFVO1lBQ3pCLGlEQUFpRDtZQUNqRCxvRUFBb0U7WUFDcEUsT0FBTztnQkFBRWhFLE1BQU0sQ0FBQyxNQUFNLEVBQUVxRSxlQUFlO2dCQUFFcEUsWUFBWTtZQUFFO1FBQ3pEO1FBRUEsa0NBQWtDO1FBQ2xDLElBQUkrRCxhQUFhLFlBQVk7WUFDM0IsT0FBTztnQkFBRWhFLE1BQU07WUFBVztRQUM1QjtRQUVBLE1BQU0sSUFBSVosTUFBTSxDQUFDLCtCQUErQixFQUFFNEUsVUFBVTtJQUM5RDtBQUNGO0FBRUEsT0FBTyxNQUFNVSx5QkFBeUIsSUFBSS9GLDhCQUE4QiJ9
381
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vcG9zdGdyZXNxbC1zY2hlbWEtcmVhZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGdyb3VwIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB0eXBlIHtcbiAgTWlncmF0aW9uQ29sdW1uLFxuICBNaWdyYXRpb25Gb3JlaWduLFxuICBNaWdyYXRpb25JbmRleCxcbiAgTWlncmF0aW9uU2V0LFxuICBSZWxhdGlvbk9uLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgUGdDb2x1bW4gPSB7XG4gIGNvbHVtbl9uYW1lOiBzdHJpbmc7XG4gIGRhdGFfdHlwZTogc3RyaW5nO1xuICB1ZHRfbmFtZTogc3RyaW5nO1xuICBjaGFyYWN0ZXJfbWF4aW11bV9sZW5ndGg6IG51bWJlciB8IG51bGw7XG4gIG51bWVyaWNfcHJlY2lzaW9uOiBudW1iZXIgfCBudWxsO1xuICBudW1lcmljX3NjYWxlOiBudW1iZXIgfCBudWxsO1xuICBpc19udWxsYWJsZTogc3RyaW5nO1xuICBjb2x1bW5fZGVmYXVsdDogc3RyaW5nIHwgbnVsbDtcbiAgaXNfZ2VuZXJhdGVkOiBzdHJpbmc7IC8vICdzJyA9IFNUT1JFRCwgJ3YnID0gVklSVFVBTCwgJycgPSBub25lXG4gIGdlbmVyYXRpb25fZXhwcmVzc2lvbjogc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUGdJbmRleCA9IHtcbiAgaW5kZXhfbmFtZTogc3RyaW5nO1xuICBjb2x1bW5fbmFtZTogc3RyaW5nO1xuICBpc191bmlxdWU6IGJvb2xlYW47XG4gIGlzX3ByaW1hcnk6IGJvb2xlYW47XG4gIGluZGV4X3R5cGU6IHN0cmluZztcbiAgbnVsbHNfZmlyc3Q6IGJvb2xlYW47XG4gIHNvcnRfb3JkZXI6IFwiQVNDXCIgfCBcIkRFU0NcIjtcbiAgbnVsbHNfbm90X2Rpc3RpbmN0OiBib29sZWFuO1xufTtcblxudHlwZSBQZ0ZvcmVpZ24gPSB7XG4gIGNvbnN0cmFpbnRfbmFtZTogc3RyaW5nO1xuICBjb2x1bW5fbmFtZTogc3RyaW5nO1xuICBmb3JlaWduX3RhYmxlX25hbWU6IHN0cmluZztcbiAgZm9yZWlnbl9jb2x1bW5fbmFtZTogc3RyaW5nO1xuICB1cGRhdGVfcnVsZTogc3RyaW5nO1xuICBkZWxldGVfcnVsZTogc3RyaW5nO1xufTtcblxuY2xhc3MgUG9zdGdyZVNRTFNjaGVtYVJlYWRlckNsYXNzIHtcbiAgLyoqXG4gICAqIERC7JeQ7IScIO2FjOydtOu4lCDsoJXrs7Trpbwg7J297Ja07IScIE1pZ3JhdGlvblNldOydhCDrp4zrk6TslrTsmLXri4jri6QuXG4gICAqIEBwYXJhbSBjb21wYXJlREIgS25leCDsnbjsiqTthLTsiqRcbiAgICogQHBhcmFtIHRhYmxlIO2FjOydtOu4lCDsnbTrpoRcbiAgICogQHJldHVybnMgTWlncmF0aW9uU2V0IOqwneyytFxuICAgKi9cbiAgYXN5bmMgZ2V0TWlncmF0aW9uU2V0RnJvbURCKGNvbXBhcmVEQjogS25leCwgdGFibGU6IHN0cmluZyk6IFByb21pc2U8TWlncmF0aW9uU2V0IHwgbnVsbD4ge1xuICAgIGxldCBkYkNvbHVtbnM6IFBnQ29sdW1uW10sIGRiSW5kZXhlczogUGdJbmRleFtdLCBkYkZvcmVpZ25zOiBQZ0ZvcmVpZ25bXTtcbiAgICB0cnkge1xuICAgICAgW2RiQ29sdW1ucywgZGJJbmRleGVzLCBkYkZvcmVpZ25zXSA9IGF3YWl0IHRoaXMucmVhZFRhYmxlKGNvbXBhcmVEQiwgdGFibGUpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKFwiVGFibGUgbm90IGZvdW5kXCIpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIHZlY3RvciDsu6zrn7zsnZggZGltZW5zaW9ucyDsobDtmoxcbiAgICBjb25zdCB2ZWN0b3JEaW1lbnNpb25zID0gYXdhaXQgdGhpcy5nZXRWZWN0b3JEaW1lbnNpb25zKGNvbXBhcmVEQiwgdGFibGUpO1xuXG4gICAgY29uc3QgY29sdW1uczogTWlncmF0aW9uQ29sdW1uW10gPSBkYkNvbHVtbnMubWFwKChkYkNvbHVtbikgPT4ge1xuICAgICAgY29uc3QgZGJDb2xUeXBlID0gdGhpcy5yZXNvbHZlREJDb2xUeXBlKGRiQ29sdW1uKTtcblxuICAgICAgLy8gdmVjdG9yIO2DgOyeheyduCDqsr3smrAgZGltZW5zaW9ucyDshKTsoJVcbiAgICAgIGlmIChkYkNvbFR5cGUudHlwZSA9PT0gXCJ2ZWN0b3JcIikge1xuICAgICAgICBkYkNvbFR5cGUuZGltZW5zaW9ucyA9IHZlY3RvckRpbWVuc2lvbnNbZGJDb2x1bW4uY29sdW1uX25hbWVdID8/IDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGRiQ29sdW1uLmNvbHVtbl9uYW1lLFxuICAgICAgICBudWxsYWJsZTogZGJDb2x1bW4uaXNfbnVsbGFibGUgPT09IFwiWUVTXCIsXG4gICAgICAgIC4uLmRiQ29sVHlwZSxcbiAgICAgICAgLy8gR2VuZXJhdGVkIENvbHVtbiDsspjrpqxcbiAgICAgICAgLi4uKCgpID0+IHtcbiAgICAgICAgICBpZiAoZGJDb2x1bW4uaXNfZ2VuZXJhdGVkID09PSBcInNcIiB8fCBkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwidlwiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwic1wiID8gXCJTVE9SRURcIiA6IFwiVklSVFVBTFwiLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGRiQ29sdW1uLmdlbmVyYXRpb25fZXhwcmVzc2lvbiA/PyBcIlwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9KSgpLFxuICAgICAgICAvLyBEZWZhdWx0IOqwkiDsspjrpqwgKEdlbmVyYXRlZCBDb2x1bW7snbQg7JWE64uMIOqyveyasOunjClcbiAgICAgICAgLi4uKCgpID0+IHtcbiAgICAgICAgICAvLyBHZW5lcmF0ZWQgQ29sdW1u7J2AIGRlZmF1bHQg6rCS7J20IOyXhuydjFxuICAgICAgICAgIGlmIChkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwic1wiIHx8IGRiQ29sdW1uLmlzX2dlbmVyYXRlZCA9PT0gXCJ2XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGJDb2x1bW4uY29sdW1uX2RlZmF1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFBvc3RncmVTUUwgZGVmYXVsdCDqsJIg7KCV66asIChuZXh0dmFsLCBDVVJSRU5UX1RJTUVTVEFNUCDrk7EpXG4gICAgICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gZGJDb2x1bW4uY29sdW1uX2RlZmF1bHQ7XG5cbiAgICAgICAgICAgIC8vIG5leHR2YWwg7KCc6rGwIChTRVJJQUwg7YOA7J6FKVxuICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZS5zdGFydHNXaXRoKFwibmV4dHZhbChcIikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDtg4DsnoUg7LqQ7Iqk7YyFIOygnOqxsCAo7JiIOiAnMSc6OmludGVnZXIg4oaSIDEpXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWUucmVwbGFjZSgvOjpbXFx3XFxzXSskL2csIFwiXCIpO1xuXG4gICAgICAgICAgICAvLyDrlLDsmLTtkZzqsIAgc2luZ2xlIHF1b3Rl7J24IOqyveyasCBkb3VibGUgcXVvdGXroZwg67OA7ZmYXG4gICAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlLnN0YXJ0c1dpdGgoXCInXCIpICYmIGRlZmF1bHRWYWx1ZS5lbmRzV2l0aChcIidcIikpIHtcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlLnJlcGxhY2VBbGwoXCInXCIsICdcIicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkZWZhdWx0VG86IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfSkoKSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBQUklNQVJZIEtFWeyZgCBmb3JlaWduIGtleeyaqSDsnbjrjbHsiqQg7KCc7Jm4XG4gICAgY29uc3QgZGJJbmRleGVzR3JvdXAgPSBncm91cChcbiAgICAgIGRiSW5kZXhlcy5maWx0ZXIoXG4gICAgICAgIChkYkluZGV4KSA9PlxuICAgICAgICAgICFkYkluZGV4LmlzX3ByaW1hcnkgJiZcbiAgICAgICAgICAhZGJGb3JlaWducy5maW5kKChkYkZvcmVpZ24pID0+IGRiSW5kZXguaW5kZXhfbmFtZS5pbmNsdWRlcyhkYkZvcmVpZ24uY29uc3RyYWludF9uYW1lKSksXG4gICAgICApLFxuICAgICAgKGRiSW5kZXgpID0+IGRiSW5kZXguaW5kZXhfbmFtZSxcbiAgICApO1xuXG4gICAgLy8gaW5kZXhlcyDsspjrpqxcbiAgICBjb25zdCBpbmRleGVzOiBNaWdyYXRpb25JbmRleFtdID0gT2JqZWN0LmtleXMoZGJJbmRleGVzR3JvdXApLm1hcCgoaW5kZXhOYW1lKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXhlcyA9IGRiSW5kZXhlc0dyb3VwW2luZGV4TmFtZV07XG4gICAgICBhc3NlcnQoY3VycmVudEluZGV4ZXMpO1xuXG4gICAgICBjb25zdCBmaXJzdEluZGV4ID0gY3VycmVudEluZGV4ZXNbMF07XG4gICAgICBjb25zdCB0eXBlID0gZmlyc3RJbmRleC5pc191bmlxdWUgPyBcInVuaXF1ZVwiIDogXCJpbmRleFwiO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBuYW1lOiBpbmRleE5hbWUsXG4gICAgICAgIGNvbHVtbnM6IGN1cnJlbnRJbmRleGVzLm1hcCgoaWR4KSA9PiAoe1xuICAgICAgICAgIG5hbWU6IGlkeC5jb2x1bW5fbmFtZSxcbiAgICAgICAgICAuLi4oZmlyc3RJbmRleC5pbmRleF90eXBlID09PSBcImJ0cmVlXCJcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHNvcnRPcmRlcjogaWR4LnNvcnRfb3JkZXIsXG4gICAgICAgICAgICAgICAgbnVsbHNGaXJzdDogaWR4Lm51bGxzX2ZpcnN0LFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfSkpLFxuXG4gICAgICAgIG51bGxzTm90RGlzdGluY3Q6IGZpcnN0SW5kZXgubnVsbHNfbm90X2Rpc3RpbmN0LFxuICAgICAgICB1c2luZzogZmlyc3RJbmRleC5pbmRleF90eXBlIGFzIFwiYnRyZWVcIiB8IFwiaGFzaFwiIHwgXCJnaW5cIiB8IFwiZ2lzdFwiIHwgXCJwZ3Jvb25nYVwiIHwgdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIGZvcmVpZ25zIOyymOumrFxuICAgIGNvbnN0IGZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW10gPSBkYkZvcmVpZ25zLm1hcCgoZGJGb3JlaWduKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW5zOiBbZGJGb3JlaWduLmNvbHVtbl9uYW1lXSxcbiAgICAgICAgdG86IGAke2RiRm9yZWlnbi5mb3JlaWduX3RhYmxlX25hbWV9LiR7ZGJGb3JlaWduLmZvcmVpZ25fY29sdW1uX25hbWV9YCxcbiAgICAgICAgb25VcGRhdGU6IHRoaXMubWFwQ29uc3RyYWludEFjdGlvbihkYkZvcmVpZ24udXBkYXRlX3J1bGUpLFxuICAgICAgICBvbkRlbGV0ZTogdGhpcy5tYXBDb25zdHJhaW50QWN0aW9uKGRiRm9yZWlnbi5kZWxldGVfcnVsZSksXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRhYmxlLFxuICAgICAgY29sdW1ucyxcbiAgICAgIGluZGV4ZXMsXG4gICAgICBmb3JlaWducyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFBvc3RncmVTUUzsnZggY29uc3RyYWludCBhY3Rpb27snYQgS25leCDtmJXsi53snLzroZwg67OA7ZmYXG4gICAqL1xuICBwcml2YXRlIG1hcENvbnN0cmFpbnRBY3Rpb24oYWN0aW9uOiBzdHJpbmcpOiBSZWxhdGlvbk9uIHtcbiAgICBjb25zdCBhY3Rpb25NYXA6IFJlY29yZDxzdHJpbmcsIFJlbGF0aW9uT24+ID0ge1xuICAgICAgXCJOTyBBQ1RJT05cIjogXCJOTyBBQ1RJT05cIixcbiAgICAgIFJFU1RSSUNUOiBcIlJFU1RSSUNUXCIsXG4gICAgICBDQVNDQURFOiBcIkNBU0NBREVcIixcbiAgICAgIFwiU0VUIE5VTExcIjogXCJTRVQgTlVMTFwiLFxuICAgICAgXCJTRVQgREVGQVVMVFwiOiBcIlNFVCBERUZBVUxUXCIsXG4gICAgfTtcbiAgICByZXR1cm4gYWN0aW9uTWFwW2FjdGlvbl0gPz8gXCJOTyBBQ1RJT05cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiDquLDsobQg7YWM7J2067iUIOydveyWtOyEnCBjb2xzLCBpbmRleGVzLCBmb3JlaWducyDrsJjtmZhcbiAgICovXG4gIGFzeW5jIHJlYWRUYWJsZShcbiAgICBjb21wYXJlREI6IEtuZXgsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICk6IFByb21pc2U8W1BnQ29sdW1uW10sIFBnSW5kZXhbXSwgUGdGb3JlaWduW11dPiB7XG4gICAgLy8gQ29sdW1ucyDsobDtmowgKEdlbmVyYXRlZCBDb2x1bW4g7KCV67O0IO2PrO2VqClcbiAgICBjb25zdCBjb2x1bW5zUXVlcnkgPSBgXG4gICAgICBTRUxFQ1RcbiAgICAgICAgYy5jb2x1bW5fbmFtZSxcbiAgICAgICAgYy5kYXRhX3R5cGUsXG4gICAgICAgIGMudWR0X25hbWUsXG4gICAgICAgIGMuY2hhcmFjdGVyX21heGltdW1fbGVuZ3RoLFxuICAgICAgICBjLm51bWVyaWNfcHJlY2lzaW9uLFxuICAgICAgICBjLm51bWVyaWNfc2NhbGUsXG4gICAgICAgIGMuaXNfbnVsbGFibGUsXG4gICAgICAgIGMuY29sdW1uX2RlZmF1bHQsXG4gICAgICAgIENPQUxFU0NFKGEuYXR0Z2VuZXJhdGVkLCAnJykgYXMgaXNfZ2VuZXJhdGVkLFxuICAgICAgICBjLmdlbmVyYXRpb25fZXhwcmVzc2lvblxuICAgICAgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBjXG4gICAgICBMRUZUIEpPSU4gcGdfYXR0cmlidXRlIGEgT04gYS5hdHRuYW1lID0gYy5jb2x1bW5fbmFtZVxuICAgICAgICBBTkQgYS5hdHRyZWxpZCA9IChcbiAgICAgICAgICBTRUxFQ1Qgb2lkIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsbmFtZSA9IGMudGFibGVfbmFtZVxuICAgICAgICAgIEFORCByZWxuYW1lc3BhY2UgPSAoU0VMRUNUIG9pZCBGUk9NIHBnX25hbWVzcGFjZSBXSEVSRSBuc3BuYW1lID0gYy50YWJsZV9zY2hlbWEpXG4gICAgICAgIClcbiAgICAgIFdIRVJFIGMudGFibGVfbmFtZSA9ID9cbiAgICAgICAgQU5EIGMudGFibGVfc2NoZW1hID0gJ3B1YmxpYydcbiAgICAgIE9SREVSIEJZIGMub3JkaW5hbF9wb3NpdGlvblxuICAgIGA7XG4gICAgY29uc3QgY29sdW1ucyA9IChhd2FpdCBjb21wYXJlREIucmF3KGNvbHVtbnNRdWVyeSwgW3RhYmxlTmFtZV0pKS5yb3dzIGFzIFBnQ29sdW1uW107XG4gICAgaWYgKGNvbHVtbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlIG5vdCBmb3VuZDogJHt0YWJsZU5hbWV9YCk7XG4gICAgfVxuXG4gICAgLy8gSW5kZXhlcyDsobDtmowgKFBHcm9vbmdhIO2RnO2YhOyLnSDsnbjrjbHsiqQg7Y+s7ZWoKVxuICAgIGNvbnN0IGluZGV4ZXNRdWVyeSA9IGBcbiAgICAgIFNFTEVDVFxuICAgICAgICAgIGkucmVsbmFtZSBBUyBpbmRleF9uYW1lLFxuICAgICAgICAgIENBU0VcbiAgICAgICAgICAgICAgV0hFTiBhbS5hbW5hbWUgPSAncGdyb29uZ2EnIEFORCB1LmF0dG51bSA9IDAgVEhFTlxuICAgICAgICAgICAgICAgICAgcmVnZXhwX3JlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgcmVnZXhwX3JlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFRSSU0ocGdyb29uZ2FfY29sLmNvbHVtbl9leHByKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJzo6dGV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnZydcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICdbKCldJyxcbiAgICAgICAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAnZydcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgRUxTRSBhLmF0dG5hbWVcbiAgICAgICAgICBFTkQgQVMgY29sdW1uX25hbWUsXG4gICAgICAgICAgaXguaW5kaXN1bmlxdWUgQVMgaXNfdW5pcXVlLFxuICAgICAgICAgIGl4LmluZGlzcHJpbWFyeSBBUyBpc19wcmltYXJ5LFxuICAgICAgICAgIGFtLmFtbmFtZSBBUyBpbmRleF90eXBlLFxuICAgICAgICAgIENPQUxFU0NFKCh1Lm9wdCAmIDIpID0gMiwgRkFMU0UpIEFTIG51bGxzX2ZpcnN0LFxuICAgICAgICAgIENBU0UgXG4gICAgICAgICAgICAgIFdIRU4gKHUub3B0ICYgMSkgPSAxIFRIRU4gJ0RFU0MnXG4gICAgICAgICAgICAgIEVMU0UgJ0FTQydcbiAgICAgICAgICBFTkQgQVMgc29ydF9vcmRlcixcbiAgICAgICAgICBpeC5pbmRudWxsc25vdGRpc3RpbmN0IEFTIG51bGxzX25vdF9kaXN0aW5jdFxuICAgICAgRlJPTSBwZ19jbGFzcyB0XG4gICAgICBKT0lOIHBnX2luZGV4IGl4IE9OIHQub2lkID0gaXguaW5kcmVsaWRcbiAgICAgIEpPSU4gcGdfY2xhc3MgaSBPTiBpLm9pZCA9IGl4LmluZGV4cmVsaWRcbiAgICAgIEpPSU4gcGdfYW0gYW0gT04gaS5yZWxhbSA9IGFtLm9pZFxuICAgICAgSk9JTiBMQVRFUkFMIHVubmVzdChpeC5pbmRrZXksIGl4LmluZG9wdGlvbilcbiAgICAgICAgICBXSVRIIE9SRElOQUxJVFkgQVMgdShhdHRudW0sIG9wdCwgb3JkKSBPTiB0cnVlXG4gICAgICBMRUZUIEpPSU4gcGdfYXR0cmlidXRlIGEgT04gYS5hdHRyZWxpZCA9IHQub2lkIFxuICAgICAgICAgIEFORCBhLmF0dG51bSA9IHUuYXR0bnVtIFxuICAgICAgICAgIEFORCB1LmF0dG51bSA+IDBcbiAgICAgIExFRlQgSk9JTiBMQVRFUkFMIChcbiAgICAgICAgICBTRUxFQ1QgXG4gICAgICAgICAgICAgIHVubmVzdChcbiAgICAgICAgICAgICAgICAgIENBU0UgXG4gICAgICAgICAgICAgICAgICAgICAgV0hFTiBwZ19nZXRfZXhwcihpeC5pbmRleHBycywgaXguaW5kcmVsaWQpIH4gJ15BUlJBWVxcXFxbJyBUSEVOXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ190b19hcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4cF9yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9leHByKGl4LmluZGV4cHJzLCBpeC5pbmRyZWxpZCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ15BUlJBWVxcXFxbKC4qKVxcXFxdJCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcXFwxJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcsICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIEVMU0VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQVJSQVlbcGdfZ2V0X2V4cHIoaXguaW5kZXhwcnMsIGl4LmluZHJlbGlkKV1cbiAgICAgICAgICAgICAgICAgIEVORFxuICAgICAgICAgICAgICApIGFzIGNvbHVtbl9leHByXG4gICAgICApIHBncm9vbmdhX2NvbCBPTiBhbS5hbW5hbWUgPSAncGdyb29uZ2EnIEFORCB1LmF0dG51bSA9IDBcbiAgICAgIFdIRVJFIHQucmVsbmFtZSA9ID9cbiAgICAgICAgICBBTkQgKHUuYXR0bnVtID4gMCBPUiAoYW0uYW1uYW1lID0gJ3Bncm9vbmdhJyBBTkQgdS5hdHRudW0gPSAwKSlcbiAgICAgIE9SREVSIEJZIGkucmVsbmFtZSwgdS5vcmQ7XG5gO1xuICAgIGNvbnN0IGluZGV4ZXMgPSAoYXdhaXQgY29tcGFyZURCLnJhdyhpbmRleGVzUXVlcnksIFt0YWJsZU5hbWVdKSkucm93cztcblxuICAgIC8vIEZvcmVpZ24gS2V5cyDsobDtmoxcbiAgICBjb25zdCBmb3JlaWduc1F1ZXJ5ID0gYFxuICAgICAgU0VMRUNUXG4gICAgICAgIHRjLmNvbnN0cmFpbnRfbmFtZSxcbiAgICAgICAga2N1LmNvbHVtbl9uYW1lLFxuICAgICAgICBjY3UudGFibGVfbmFtZSBBUyBmb3JlaWduX3RhYmxlX25hbWUsXG4gICAgICAgIGNjdS5jb2x1bW5fbmFtZSBBUyBmb3JlaWduX2NvbHVtbl9uYW1lLFxuICAgICAgICByYy51cGRhdGVfcnVsZSxcbiAgICAgICAgcmMuZGVsZXRlX3J1bGVcbiAgICAgIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlX2NvbnN0cmFpbnRzIEFTIHRjXG4gICAgICBKT0lOIGluZm9ybWF0aW9uX3NjaGVtYS5rZXlfY29sdW1uX3VzYWdlIEFTIGtjdVxuICAgICAgICBPTiB0Yy5jb25zdHJhaW50X25hbWUgPSBrY3UuY29uc3RyYWludF9uYW1lXG4gICAgICAgIEFORCB0Yy50YWJsZV9zY2hlbWEgPSBrY3UudGFibGVfc2NoZW1hXG4gICAgICBKT0lOIGluZm9ybWF0aW9uX3NjaGVtYS5jb25zdHJhaW50X2NvbHVtbl91c2FnZSBBUyBjY3VcbiAgICAgICAgT04gY2N1LmNvbnN0cmFpbnRfbmFtZSA9IHRjLmNvbnN0cmFpbnRfbmFtZVxuICAgICAgICBBTkQgY2N1LnRhYmxlX3NjaGVtYSA9IHRjLnRhYmxlX3NjaGVtYVxuICAgICAgSk9JTiBpbmZvcm1hdGlvbl9zY2hlbWEucmVmZXJlbnRpYWxfY29uc3RyYWludHMgQVMgcmNcbiAgICAgICAgT04gcmMuY29uc3RyYWludF9uYW1lID0gdGMuY29uc3RyYWludF9uYW1lXG4gICAgICAgIEFORCByYy5jb25zdHJhaW50X3NjaGVtYSA9IHRjLnRhYmxlX3NjaGVtYVxuICAgICAgV0hFUkUgdGMuY29uc3RyYWludF90eXBlID0gJ0ZPUkVJR04gS0VZJ1xuICAgICAgICBBTkQgdGMudGFibGVfbmFtZSA9ID9cbiAgICBgO1xuICAgIGNvbnN0IGZvcmVpZ25zID0gKGF3YWl0IGNvbXBhcmVEQi5yYXcoZm9yZWlnbnNRdWVyeSwgW3RhYmxlTmFtZV0pKS5yb3dzO1xuXG4gICAgcmV0dXJuIFtjb2x1bW5zLCBpbmRleGVzLCBmb3JlaWduc107XG4gIH1cblxuICAvKipcbiAgICogdmVjdG9yIOy7rOufvOydmCBkaW1lbnNpb25z66W8IOyhsO2ajO2VqeuLiOuLpC5cbiAgICogcGdfYXR0cmlidXRl7J2YIGF0dHR5cG1vZOyXkOyEnCDssKjsm5Ag7IiY66W8IOy2lOy2nO2VqeuLiOuLpC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0VmVjdG9yRGltZW5zaW9ucyhcbiAgICBjb21wYXJlREI6IEtuZXgsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gYFxuICAgICAgU0VMRUNUXG4gICAgICAgIGEuYXR0bmFtZSBhcyBjb2x1bW5fbmFtZSxcbiAgICAgICAgYS5hdHR0eXBtb2QgYXMgZGltZW5zaW9uc1xuICAgICAgRlJPTSBwZ19hdHRyaWJ1dGUgYVxuICAgICAgSk9JTiBwZ19jbGFzcyBjIE9OIGEuYXR0cmVsaWQgPSBjLm9pZFxuICAgICAgSk9JTiBwZ190eXBlIHQgT04gYS5hdHR0eXBpZCA9IHQub2lkXG4gICAgICBXSEVSRSBjLnJlbG5hbWUgPSA/XG4gICAgICAgIEFORCB0LnR5cG5hbWUgPSAndmVjdG9yJ1xuICAgICAgICBBTkQgYS5hdHRudW0gPiAwXG4gICAgYDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb21wYXJlREIucmF3KHF1ZXJ5LCBbdGFibGVOYW1lXSk7XG4gICAgY29uc3QgZGltZW5zaW9uczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHJlc3VsdC5yb3dzKSB7XG4gICAgICAvLyBhdHR0eXBtb2Tsl5DshJwg7Iuk7KCcIGRpbWVuc2lvbnMg6rCSIOy2lOy2nFxuICAgICAgZGltZW5zaW9uc1tyb3cuY29sdW1uX25hbWVdID0gcm93LmRpbWVuc2lvbnMgPiAwID8gcm93LmRpbWVuc2lvbnMgOiAwO1xuICAgIH1cbiAgICByZXR1cm4gZGltZW5zaW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3N0Z3JlU1FMIOy7rOufvCDtg4DsnoXsnYQg67aE7ISd7ZWY7JesIE1pZ3JhdGlvbkNvbHVtbiDqsJ3ssrTroZwg67OA7ZmY7ZWp64uI64ukLlxuICAgKi9cbiAgcmVzb2x2ZURCQ29sVHlwZShcbiAgICBkYkNvbHVtbjogUGdDb2x1bW4sXG4gICk6IFBpY2s8XG4gICAgTWlncmF0aW9uQ29sdW1uLFxuICAgIFwidHlwZVwiIHwgXCJsZW5ndGhcIiB8IFwicHJlY2lzaW9uXCIgfCBcInNjYWxlXCIgfCBcIm51bWJlclR5cGVcIiB8IFwiZGltZW5zaW9uc1wiXG4gID4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHVkdF9uYW1lOiBfdWR0X25hbWUsXG4gICAgICBjaGFyYWN0ZXJfbWF4aW11bV9sZW5ndGgsXG4gICAgICBudW1lcmljX3ByZWNpc2lvbixcbiAgICAgIG51bWVyaWNfc2NhbGUsXG4gICAgfSA9IGRiQ29sdW1uO1xuXG4gICAgY29uc3QgeyB1ZHRfbmFtZSwgc2luZ2xlT3JBcnJheSB9ID0gKCgpID0+IHtcbiAgICAgIGlmIChfdWR0X25hbWUuc3RhcnRzV2l0aChcIl9cIikpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB1ZHRfbmFtZTogX3VkdF9uYW1lLnN1YnN0cmluZygxKSxcbiAgICAgICAgICBzaW5nbGVPckFycmF5OiBcIltdXCIgYXMgY29uc3QsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1ZHRfbmFtZTogX3VkdF9uYW1lLFxuICAgICAgICBzaW5nbGVPckFycmF5OiBcIlwiIGFzIGNvbnN0LFxuICAgICAgfTtcbiAgICB9KSgpO1xuXG4gICAgLy8gVVVJRFxuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJ1dWlkXCIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IGB1dWlkJHtzaW5nbGVPckFycmF5fWAgfTtcbiAgICB9XG5cbiAgICAvLyBJbnRlZ2VyIHR5cGVzXG4gICAgaWYgKHVkdF9uYW1lID09PSBcImludDRcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYGludGVnZXIke3NpbmdsZU9yQXJyYXl9YCB9O1xuICAgIH1cbiAgICBpZiAodWR0X25hbWUgPT09IFwiaW50OFwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBgYmlnSW50ZWdlciR7c2luZ2xlT3JBcnJheX1gIH07XG4gICAgfVxuXG4gICAgLy8gU3RyaW5nIHR5cGVzXG4gICAgaWYgKHVkdF9uYW1lID09PSBcInZhcmNoYXJcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogYHN0cmluZyR7c2luZ2xlT3JBcnJheX1gLFxuICAgICAgICAuLi4oY2hhcmFjdGVyX21heGltdW1fbGVuZ3RoICYmIHtcbiAgICAgICAgICBsZW5ndGg6IGNoYXJhY3Rlcl9tYXhpbXVtX2xlbmd0aCxcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodWR0X25hbWUgPT09IFwidGV4dFwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBgc3RyaW5nJHtzaW5nbGVPckFycmF5fWAgfTsgLy8gU3RyaW5nUHJvcCB3aXRob3V0IGxlbmd0aFxuICAgIH1cblxuICAgIC8vIE51bWJlck9yTnVtZXJpYyB0eXBlc1xuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJudW1lcmljXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IGBudW1iZXJPck51bWVyaWMke3NpbmdsZU9yQXJyYXl9YCxcbiAgICAgICAgbnVtYmVyVHlwZTogXCJudW1lcmljXCIsXG4gICAgICAgIC4uLihudW1lcmljX3ByZWNpc2lvbiAhPT0gbnVsbCAmJlxuICAgICAgICAgIG51bWVyaWNfc2NhbGUgIT09IG51bGwgJiYge1xuICAgICAgICAgICAgcHJlY2lzaW9uOiBudW1lcmljX3ByZWNpc2lvbixcbiAgICAgICAgICAgIHNjYWxlOiBudW1lcmljX3NjYWxlLFxuICAgICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHVkdF9uYW1lID09PSBcImZsb2F0NFwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBgbnVtYmVyT3JOdW1lcmljJHtzaW5nbGVPckFycmF5fWAsIG51bWJlclR5cGU6IFwicmVhbFwiIH07XG4gICAgfVxuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJmbG9hdDhcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYG51bWJlck9yTnVtZXJpYyR7c2luZ2xlT3JBcnJheX1gLCBudW1iZXJUeXBlOiBcImRvdWJsZSBwcmVjaXNpb25cIiB9O1xuICAgIH1cblxuICAgIC8vIEJvb2xlYW5cbiAgICBpZiAodWR0X25hbWUgPT09IFwiYm9vbFwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBgYm9vbGVhbiR7c2luZ2xlT3JBcnJheX1gIH07XG4gICAgfVxuXG4gICAgLy8gVGltZXN0YW1weiB0eXBlc1xuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJ0aW1lc3RhbXB0elwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBgZGF0ZSR7c2luZ2xlT3JBcnJheX1gIH07IC8vIERhdGVQcm9wIOKGkiB0aW1lc3RhbXB0elxuICAgIH1cblxuICAgIC8vIEpTT05cbiAgICBpZiAodWR0X25hbWUgPT09IFwianNvblwiIHx8IHVkdF9uYW1lID09PSBcImpzb25iXCIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwianNvblwiIH07XG4gICAgfVxuXG4gICAgLy8gVmVjdG9yIChwZ3ZlY3RvcilcbiAgICBpZiAodWR0X25hbWUgPT09IFwidmVjdG9yXCIpIHtcbiAgICAgIC8vIHZlY3RvciDtg4DsnoXsnZgg7LCo7JuQIOyImOuKlCBjb2x1bW5fZGVmYXVsdOuCmCDrs4Trj4Qg7L+866as66GcIO2ZleyduO2VtOyVvCDtlahcbiAgICAgIC8vIO2YhOyerOuKlCDquLDrs7jqsJIgMOycvOuhnCDshKTsoJUgKOyLpOygnCBkaW1lbnNpb25z64qUIGdldE1pZ3JhdGlvblNldEZyb21EQuyXkOyEnCDrs4Trj4Qg7L+866as66GcIO2ZleyduClcbiAgICAgIHJldHVybiB7IHR5cGU6IGB2ZWN0b3Ike3NpbmdsZU9yQXJyYXl9YCwgZGltZW5zaW9uczogMCB9O1xuICAgIH1cblxuICAgIC8vIHRzdmVjdG9yIChQb3N0Z3JlU1FMIOyghOusuCDqsoDsg4nsmqkg7YOA7J6FKVxuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJ0c3ZlY3RvclwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRzdmVjdG9yXCIgfTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJlc29sdmUg67aI6rCA64ql7ZWcIFBvc3RncmVTUUwg7Lus65+8IO2DgOyehTogJHt1ZHRfbmFtZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUG9zdGdyZVNRTFNjaGVtYVJlYWRlciA9IG5ldyBQb3N0Z3JlU1FMU2NoZW1hUmVhZGVyQ2xhc3MoKTtcbiJdLCJuYW1lcyI6WyJhc3NlcnQiLCJncm91cCIsIlBvc3RncmVTUUxTY2hlbWFSZWFkZXJDbGFzcyIsImdldE1pZ3JhdGlvblNldEZyb21EQiIsImNvbXBhcmVEQiIsInRhYmxlIiwiZGJDb2x1bW5zIiwiZGJJbmRleGVzIiwiZGJGb3JlaWducyIsInJlYWRUYWJsZSIsImUiLCJFcnJvciIsIm1lc3NhZ2UiLCJpbmNsdWRlcyIsImNvbnNvbGUiLCJlcnJvciIsInZlY3RvckRpbWVuc2lvbnMiLCJnZXRWZWN0b3JEaW1lbnNpb25zIiwiY29sdW1ucyIsIm1hcCIsImRiQ29sdW1uIiwiZGJDb2xUeXBlIiwicmVzb2x2ZURCQ29sVHlwZSIsInR5cGUiLCJkaW1lbnNpb25zIiwiY29sdW1uX25hbWUiLCJuYW1lIiwibnVsbGFibGUiLCJpc19udWxsYWJsZSIsImlzX2dlbmVyYXRlZCIsImdlbmVyYXRlZCIsImV4cHJlc3Npb24iLCJnZW5lcmF0aW9uX2V4cHJlc3Npb24iLCJjb2x1bW5fZGVmYXVsdCIsImRlZmF1bHRWYWx1ZSIsInN0YXJ0c1dpdGgiLCJyZXBsYWNlIiwiZW5kc1dpdGgiLCJyZXBsYWNlQWxsIiwiZGVmYXVsdFRvIiwiZGJJbmRleGVzR3JvdXAiLCJmaWx0ZXIiLCJkYkluZGV4IiwiaXNfcHJpbWFyeSIsImZpbmQiLCJkYkZvcmVpZ24iLCJpbmRleF9uYW1lIiwiY29uc3RyYWludF9uYW1lIiwiaW5kZXhlcyIsIk9iamVjdCIsImtleXMiLCJpbmRleE5hbWUiLCJjdXJyZW50SW5kZXhlcyIsImZpcnN0SW5kZXgiLCJpc191bmlxdWUiLCJpZHgiLCJpbmRleF90eXBlIiwic29ydE9yZGVyIiwic29ydF9vcmRlciIsIm51bGxzRmlyc3QiLCJudWxsc19maXJzdCIsIm51bGxzTm90RGlzdGluY3QiLCJudWxsc19ub3RfZGlzdGluY3QiLCJ1c2luZyIsImZvcmVpZ25zIiwidG8iLCJmb3JlaWduX3RhYmxlX25hbWUiLCJmb3JlaWduX2NvbHVtbl9uYW1lIiwib25VcGRhdGUiLCJtYXBDb25zdHJhaW50QWN0aW9uIiwidXBkYXRlX3J1bGUiLCJvbkRlbGV0ZSIsImRlbGV0ZV9ydWxlIiwiYWN0aW9uIiwiYWN0aW9uTWFwIiwiUkVTVFJJQ1QiLCJDQVNDQURFIiwidGFibGVOYW1lIiwiY29sdW1uc1F1ZXJ5IiwicmF3Iiwicm93cyIsImxlbmd0aCIsImluZGV4ZXNRdWVyeSIsImZvcmVpZ25zUXVlcnkiLCJxdWVyeSIsInJlc3VsdCIsInJvdyIsInVkdF9uYW1lIiwiX3VkdF9uYW1lIiwiY2hhcmFjdGVyX21heGltdW1fbGVuZ3RoIiwibnVtZXJpY19wcmVjaXNpb24iLCJudW1lcmljX3NjYWxlIiwic2luZ2xlT3JBcnJheSIsInN1YnN0cmluZyIsIm51bWJlclR5cGUiLCJwcmVjaXNpb24iLCJzY2FsZSIsIlBvc3RncmVTUUxTY2hlbWFSZWFkZXIiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVksU0FBUztBQUU1QixTQUFTQyxLQUFLLFFBQVEsVUFBVTtBQTBDaEMsTUFBTUM7SUFDSjs7Ozs7R0FLQyxHQUNELE1BQU1DLHNCQUFzQkMsU0FBZSxFQUFFQyxLQUFhLEVBQWdDO1FBQ3hGLElBQUlDLFdBQXVCQyxXQUFzQkM7UUFDakQsSUFBSTtZQUNGLENBQUNGLFdBQVdDLFdBQVdDLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQ0MsU0FBUyxDQUFDTCxXQUFXQztRQUN2RSxFQUFFLE9BQU9LLEdBQVk7WUFDbkIsSUFBSUEsYUFBYUMsU0FBU0QsRUFBRUUs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
@@ -85,10 +85,6 @@ export declare class NaiteClass {
85
85
  }[];
86
86
  del(key: string): void;
87
87
  createStore(): NaiteStore;
88
- d(_message: string): void;
89
- i(_message: string): void;
90
- w(_message: string): void;
91
- e(_message: string): void;
92
88
  }
93
89
  export declare const Naite: NaiteClass;
94
90
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"naite.d.ts","sourceRoot":"","sources":["../../src/naite/naite.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAIpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAIjE,UAAU,UAAU;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,EAAE,EAAE,IAAI,CAAC;CACV;AAGD,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AAsGnD;;;GAGG;AACH,qBAAa,UAAU;IACT,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,UAAU,EAAE;IAExC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAOtC;;;;OAIG;IACH,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;QAAE,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAA;KAAqB,GACnE,UAAU;IAgBb;;;;;OAKG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,UAAU,EAAE,KAAK,EAAE,GAAG,GAAG,UAAU;IA0BtF;;OAEG;IACH,MAAM,IAAI,GAAG,EAAE;IAIf;;OAEG;IACH,KAAK,IAAI,GAAG,GAAG,SAAS;IAIxB;;OAEG;IACH,IAAI,IAAI,GAAG,GAAG,SAAS;IAIvB;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS;IAIlC;;OAEG;IACH,SAAS,IAAI,UAAU,EAAE;CAG1B;AAGD,qBAAa,UAAU;IAErB,CAAC,CACC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,GAAG;IAmCZ;;;OAGG;IACH,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU;IA0BnC,MAAM,IAAI;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAmBhC;;;;;OAKG;IACH,YAAY,IAAI;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,GAAG,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;KACZ,EAAE;IA+CH,GAAG,CAAC,GAAG,EAAE,MAAM;IAQf,WAAW,IAAI,UAAU;IAKzB,CAAC,CAAC,QAAQ,EAAE,MAAM;IAIlB,CAAC,CAAC,QAAQ,EAAE,MAAM;IAIlB,CAAC,CAAC,QAAQ,EAAE,MAAM;IAIlB,CAAC,CAAC,QAAQ,EAAE,MAAM;CAInB;AAED,eAAO,MAAM,KAAK,YAAmB,CAAC"}
1
+ {"version":3,"file":"naite.d.ts","sourceRoot":"","sources":["../../src/naite/naite.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAKpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAKjE,UAAU,UAAU;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,EAAE,EAAE,IAAI,CAAC;CACV;AAGD,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AAsGnD;;;GAGG;AACH,qBAAa,UAAU;IACT,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,UAAU,EAAE;IAExC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAOtC;;;;OAIG;IACH,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;QAAE,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAA;KAAqB,GACnE,UAAU;IAgBb;;;;;OAKG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,UAAU,EAAE,KAAK,EAAE,GAAG,GAAG,UAAU;IA0BtF;;OAEG;IACH,MAAM,IAAI,GAAG,EAAE;IAIf;;OAEG;IACH,KAAK,IAAI,GAAG,GAAG,SAAS;IAIxB;;OAEG;IACH,IAAI,IAAI,GAAG,GAAG,SAAS;IAIvB;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS;IAIlC;;OAEG;IACH,SAAS,IAAI,UAAU,EAAE;CAG1B;AAGD,qBAAa,UAAU;IAErB,CAAC,CACC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,GAAG;IA2CZ;;;OAGG;IACH,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU;IA0BnC,MAAM,IAAI;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAmBhC;;;;;OAKG;IACH,YAAY,IAAI;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,GAAG,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;KACZ,EAAE;IA+CH,GAAG,CAAC,GAAG,EAAE,MAAM;IAQf,WAAW,IAAI,UAAU;CAG1B;AAED,eAAO,MAAM,KAAK,YAAmB,CAAC"}
@@ -1,5 +1,7 @@
1
- /** biome-ignore-all lint/suspicious/noExplicitAny: Naite는 expect와 호응하도록 any를 허용함 */ import { get } from "radashi";
1
+ /** biome-ignore-all lint/suspicious/noExplicitAny: Naite는 expect와 호응하도록 any를 허용함 */ import { getLogger } from "@logtape/logtape";
2
+ import { get } from "radashi";
2
3
  import { Sonamu } from "../api/sonamu.js";
4
+ import { convertNaiteKeyToCategory } from "../logger/category.js";
3
5
  import { isSerializable } from "../utils/object-utils.js";
4
6
  /**
5
7
  * 콜스택을 파싱하여 StackFrame 배열로 반환
@@ -198,6 +200,13 @@ export class NaiteClass {
198
200
  };
199
201
  // 항상 배열로 관리
200
202
  const existing = store.get(name) ?? [];
203
+ getLogger([
204
+ "naite",
205
+ ...convertNaiteKeyToCategory(name)
206
+ ]).debug(`naite: {name} ${existing.length === 0 ? "is empty state" : `already existing with ${existing.length === 0} entries`}, appending new entry`, {
207
+ name,
208
+ value
209
+ });
201
210
  store.set(name, [
202
211
  ...existing,
203
212
  trace
@@ -293,24 +302,7 @@ export class NaiteClass {
293
302
  createStore() {
294
303
  return new Map();
295
304
  }
296
- // 일반 로그 레벨
297
- d(_message) {
298
- // TODO: Logger 연결
299
- console.log(`[DEBUG] ${_message}`);
300
- }
301
- i(_message) {
302
- // TODO: Logger 연결
303
- console.log(`[INFO] ${_message}`);
304
- }
305
- w(_message) {
306
- // TODO: Logger 연결
307
- console.log(`[WARN] ${_message}`);
308
- }
309
- e(_message) {
310
- // TODO: Logger 연결
311
- console.log(`[ERROR] ${_message}`);
312
- }
313
305
  }
314
306
  export const Naite = new NaiteClass();
315
307
 
316
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9uYWl0ZS9uYWl0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogYmlvbWUtaWdub3JlLWFsbCBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogTmFpdGXripQgZXhwZWN07JmAIO2YuOydke2VmOuPhOuhnSBhbnnrpbwg7ZeI7Jqp7ZWoICovXG5cbmltcG9ydCB7IGdldCB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHR5cGUgeyBDb21wYXJpc29uT3BlcmF0b3IgfSBmcm9tIFwiLi4vZGF0YWJhc2UvcHVyaS50eXBlc1wiO1xuaW1wb3J0IHsgaXNTZXJpYWxpemFibGUgfSBmcm9tIFwiLi4vdXRpbHMvb2JqZWN0LXV0aWxzXCI7XG5cbi8vIFN0YWNrRnJhbWUg7YOA7J6FXG5pbnRlcmZhY2UgU3RhY2tGcmFtZSB7XG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgZmlsZVBhdGg6IHN0cmluZzsgLy8gXCIvVXNlcnMvLi4uL3N5bmNlci50c1wiIOuYkOuKlCBcIm5vZGU6aW50ZXJuYWwvLi4uXCJcbiAgbGluZU51bWJlcjogbnVtYmVyOyAvLyBUUyDtjIzsnbwg6riw7KSAIOudvOyduCDrsojtmLhcbn1cblxuLy8gTmFpdGVUcmFjZSDtg4DsnoVcbmludGVyZmFjZSBOYWl0ZVRyYWNlIHtcbiAga2V5OiBzdHJpbmc7XG4gIGRhdGE6IGFueTtcbiAgc3RhY2s6IFN0YWNrRnJhbWVbXTsgLy8g7L2c7Iqk7YOdIOygleuztFxuICBhdDogRGF0ZTtcbn1cblxuLy8gTmFpdGUudOqwgCDsoIDsnqXrkJjripQg7YOA7J6FICjtla3sg4Eg67Cw7Je066GcIO2GteydvClcbmV4cG9ydCB0eXBlIE5haXRlU3RvcmUgPSBNYXA8c3RyaW5nLCBOYWl0ZVRyYWNlW10+O1xuXG4vKipcbiAqIOy9nOyKpO2DneydhCDtjIzsi7HtlZjsl6wgU3RhY2tGcmFtZSDrsLDsl7TroZwg67CY7ZmYXG4gKiAtIGV4dHJhY3RDYWxsU3RhY2sg7J6Q7Iug6rO8IE5haXRlLnTripQg7KCc7Jm4XG4gKiAtIHJ1bldpdGhDb250ZXh0L3J1bldpdGhNb2NrQ29udGV4dCDrsJzqsqwg7IucIOqxsOq4sOyEnCDsooXro4xcbiAqIC0gbm9kZTog64K067aAIOqyveuhnOuKlCDtj6ztlajtlZjrkJgsIGxpbmVOdW1iZXLripQgcGF0aOyXkCA6IO2PrO2VqCDsi5wg67aZ7J207KeAIOyViuydjFxuICovXG5mdW5jdGlvbiBleHRyYWN0Q2FsbFN0YWNrKCk6IFN0YWNrRnJhbWVbXSB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gIGlmICghc3RhY2spIHJldHVybiBbXTtcblxuICBjb25zdCBsaW5lcyA9IHN0YWNrLnNwbGl0KFwiXFxuXCIpO1xuXG4gIC8vIOy9nOyKpO2DnSDqtazsobA6XG4gIC8vIFswXTogXCJFcnJvclwiXG4gIC8vIFsxXTogXCJhdCBleHRyYWN0Q2FsbFN0YWNrXCJcbiAgLy8gWzJdOiBcImF0IE5haXRlLnRcIlxuICAvLyBbM106IOyLpOygnCDtmLjstpwg7JyE7LmY67aA7YSwIOyLnOyekVxuICBjb25zdCBmcmFtZXMgPSBsaW5lc1xuICAgIC5zbGljZSgzKVxuICAgIC5tYXAocGFyc2VTdGFja0ZyYW1lKVxuICAgIC5maWx0ZXIoKGZyYW1lKTogZnJhbWUgaXMgU3RhY2tGcmFtZSA9PiBmcmFtZSAhPT0gbnVsbCk7XG5cbiAgLy8gcnVuV2l0aENvbnRleHQg6rOE7Je0IO2VqOyImCDrsJzqsqwg7IucIOqxsOq4sOyEnCDsnpDrpbTquLBcbiAgY29uc3QgY29udGV4dEluZGV4ID0gZnJhbWVzLmZpbmRJbmRleChcbiAgICAoZikgPT5cbiAgICAgIGYuZnVuY3Rpb25OYW1lPy5pbmNsdWRlcyhcInJ1bldpdGhDb250ZXh0XCIpIHx8IGYuZnVuY3Rpb25OYW1lPy5pbmNsdWRlcyhcInJ1bldpdGhNb2NrQ29udGV4dFwiKSxcbiAgKTtcblxuICByZXR1cm4gY29udGV4dEluZGV4ID49IDAgPyBmcmFtZXMuc2xpY2UoMCwgY29udGV4dEluZGV4ICsgMSkgOiBmcmFtZXM7XG59XG5cbi8qKlxuICog7L2c7Iqk7YOdIO2VnCDspITsnYQg7YyM7IuxXG4gKiDtmJXsi50xOiBcImF0IEZ1bmN0aW9uTmFtZSAoZmlsZVBhdGg6bGluZU51bWJlcjpjb2x1bW5OdW1iZXIpXCJcbiAqIO2YleyLnTI6IFwiYXQgZmlsZVBhdGg6bGluZU51bWJlcjpjb2x1bW5OdW1iZXJcIiAo7J2166qFIO2VqOyImC/rqqjrk4gg66CI67KoKVxuICovXG5mdW5jdGlvbiBwYXJzZVN0YWNrRnJhbWUobGluZTogc3RyaW5nKTogU3RhY2tGcmFtZSB8IG51bGwge1xuICAvLyDtjKjthLQxOiBcImF0IEZ1bmN0aW9uTmFtZSAoZmlsZVBhdGg6bGluZU51bWJlcjpjb2x1bW5OdW1iZXIpXCJcbiAgY29uc3QgbWF0Y2hXaXRoRnVuYyA9IGxpbmUubWF0Y2goL2F0XFxzKyguKz8pXFxzK1xcKCguKz8pOihcXGQrKTpcXGQrXFwpLyk7XG4gIGlmIChtYXRjaFdpdGhGdW5jKSB7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gbWF0Y2hXaXRoRnVuY1sxXTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IG1hdGNoV2l0aEZ1bmNbMl07XG4gICAgY29uc3QgbGluZU51bWJlclN0ciA9IG1hdGNoV2l0aEZ1bmNbM107XG5cbiAgICAvLyBmaWxlUGF0aOyXkCDsnbTrr7ggOuqwgCDtj6ztlajrkJjslrQg7J6I7Jy866m0ICjsmIg6IFwibm9kZTppbnRlcm5hbC8uLi5cIilcbiAgICBpZiAoZmlsZVBhdGguaW5jbHVkZXMoXCI6XCIpKSB7XG4gICAgICByZXR1cm4geyBmdW5jdGlvbk5hbWUsIGZpbGVQYXRoLCBsaW5lTnVtYmVyOiAwIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgIGZpbGVQYXRoLFxuICAgICAgbGluZU51bWJlcjogTnVtYmVyLnBhcnNlSW50KGxpbmVOdW1iZXJTdHIsIDEwKSxcbiAgICB9O1xuICB9XG5cbiAgLy8g7Yyo7YS0MjogXCJhdCBmaWxlUGF0aDpsaW5lTnVtYmVyOmNvbHVtbk51bWJlclwiICjtlajsiJjrqoUg7JeG7J2MKVxuICBjb25zdCBtYXRjaE5vRnVuYyA9IGxpbmUubWF0Y2goL2F0XFxzKyguKz8pOihcXGQrKTpcXGQrJC8pO1xuICBpZiAobWF0Y2hOb0Z1bmMpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IG1hdGNoTm9GdW5jWzFdO1xuICAgIGNvbnN0IGxpbmVOdW1iZXJTdHIgPSBtYXRjaE5vRnVuY1syXTtcblxuICAgIHJldHVybiB7XG4gICAgICBmdW5jdGlvbk5hbWU6IG51bGwsXG4gICAgICBmaWxlUGF0aCxcbiAgICAgIGxpbmVOdW1iZXI6IE51bWJlci5wYXJzZUludChsaW5lTnVtYmVyU3RyLCAxMCksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIHdpbGRjYXJkIO2MqO2EtCDrp6Tsua1cbiAqIOyYiOyLnDpcbiAqIC0gXCJzeW5jZXI6KlwiIOKGkiBcInN5bmNlcjphXCIsIFwic3luY2VyOmE6YlwiIOuqqOuRkCDrp6Tsua1cbiAqIC0gXCJzeW5jZXI6Kjp1c2VyXCIg4oaSIFwic3luY2VyOnJlbmRlclRlbXBsYXRlOnVzZXJcIiDrp6Tsua1cbiAqIC0gXCJzeW5jZXI6cmVuZGVyVGVtcGxhdGU6KlwiIOKGkiBcInN5bmNlcjpyZW5kZXJUZW1wbGF0ZTpzZXJ2aWNlXCIg66ek7LmtXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNQYXR0ZXJuKGtleTogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qga2V5UGFydHMgPSBrZXkuc3BsaXQoXCI6XCIpO1xuICBjb25zdCBwYXR0ZXJuUGFydHMgPSBwYXR0ZXJuLnNwbGl0KFwiOlwiKTtcblxuICAvLyDrp4jsp4Drp4nsnbQgKiDihpIgcHJlZml4IOunpOy5rSAo6ri47J20IOustOq0gClcbiAgLy8g7JiIOiBcInN5bmNlcjoqXCLripQgXCJzeW5jZXI6YVwiLCBcInN5bmNlcjphOmJcIiDrqqjrkZAg66ek7LmtXG4gIGlmIChwYXR0ZXJuUGFydHNbcGF0dGVyblBhcnRzLmxlbmd0aCAtIDFdID09PSBcIipcIikge1xuICAgIGNvbnN0IHByZWZpeFBhcnRzID0gcGF0dGVyblBhcnRzLnNsaWNlKDAsIC0xKTtcbiAgICAvLyBwcmVmaXjqsIAg66qo65GQIOydvOy5mO2VmOuKlOyngCDtmZXsnbhcbiAgICByZXR1cm4gcHJlZml4UGFydHMuZXZlcnkoKHBhcnQsIGkpID0+IHBhcnQgPT09IGtleVBhcnRzW2ldKTtcbiAgfVxuXG4gIC8vIOq4uOydtOqwgCDqsJnslYTslbwg7ZWoXG4gIGlmIChwYXR0ZXJuUGFydHMubGVuZ3RoICE9PSBrZXlQYXJ0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyDqsIEg7YyM7Yq46rCAICog65iQ64qUIOygle2Zle2eiCDsnbzsuZhcbiAgcmV0dXJuIHBhdHRlcm5QYXJ0cy5ldmVyeSgocGFydCwgaSkgPT4gcGFydCA9PT0gXCIqXCIgfHwgcGFydCA9PT0ga2V5UGFydHNbaV0pO1xufVxuXG4vKipcbiAqIE5haXRlUXVlcnkg7YG0656Y7IqkXG4gKiDssrTsnbTri53snYQg7Ya17ZWcIHRyYWNlIO2VhO2EsOungSDrsI8g7KGw7ZqMXG4gKi9cbmV4cG9ydCBjbGFzcyBOYWl0ZVF1ZXJ5IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFjZXM6IE5haXRlVHJhY2VbXSkge31cblxuICAvKipcbiAgICog7YyM7J2866qF7Jy866GcIO2VhO2EsOungVxuICAgKiBAcGFyYW0gZmlsZU5hbWUg7YyM7J2866qFICjsmIg6IFwic3luY2VyLnRlc3QudHNcIilcbiAgICovXG4gIGZyb21GaWxlKGZpbGVOYW1lOiBzdHJpbmcpOiBOYWl0ZVF1ZXJ5IHtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMudHJhY2VzLmZpbHRlcigodCkgPT5cbiAgICAgIHQuc3RhY2suc29tZSgoZnJhbWUpID0+IGZyYW1lLmZpbGVQYXRoLmVuZHNXaXRoKGAvJHtmaWxlTmFtZX1gKSksXG4gICAgKTtcbiAgICByZXR1cm4gbmV3IE5haXRlUXVlcnkoZmlsdGVyZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIO2VqOyImOuqheycvOuhnCDtlYTthLDrp4FcbiAgICogQHBhcmFtIGZ1bmNOYW1lIO2VqOyImOuqhSAoaW5jbHVkZXMg7LK07YGsKVxuICAgKiBAcGFyYW0gb3B0aW9ucy5mcm9tICdkaXJlY3QnID0g7KeB7KCRIO2YuOy2nOunjCwgJ2luZGlyZWN0JyA9IOqwhOygkSDtmLjstpzrp4wsICdib3RoJyA9IOuqqOuRkFxuICAgKi9cbiAgZnJvbUZ1bmN0aW9uKFxuICAgIGZ1bmNOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9uczogeyBmcm9tOiBcImRpcmVjdFwiIHwgXCJpbmRpcmVjdFwiIHwgXCJib3RoXCIgfSA9IHsgZnJvbTogXCJib3RoXCIgfSxcbiAgKTogTmFpdGVRdWVyeSB7XG4gICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLnRyYWNlcy5maWx0ZXIoKHQpID0+IHtcbiAgICAgIGlmIChvcHRpb25zLmZyb20gPT09IFwiZGlyZWN0XCIpIHtcbiAgICAgICAgLy8gc3RhY2tbMF3rp4wg7ZmV7J24ICjsp4HsoJEg7Zi47LacKVxuICAgICAgICByZXR1cm4gdC5zdGFja1swXT8uZnVuY3Rpb25OYW1lPy5pbmNsdWRlcyhmdW5jTmFtZSk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5mcm9tID09PSBcImluZGlyZWN0XCIpIHtcbiAgICAgICAgLy8gc3RhY2tbMStd7JeQ7IScIO2ZleyduCAo6rCE7KCRIO2YuOy2nClcbiAgICAgICAgcmV0dXJuIHQuc3RhY2suc2xpY2UoMSkuc29tZSgoZikgPT4gZi5mdW5jdGlvbk5hbWU/LmluY2x1ZGVzKGZ1bmNOYW1lKSk7XG4gICAgICB9XG4gICAgICAvLyDsoITssrQg7Iqk7YOd7JeQ7IScIO2ZleyduFxuICAgICAgcmV0dXJuIHQuc3RhY2suc29tZSgoZikgPT4gZi5mdW5jdGlvbk5hbWU/LmluY2x1ZGVzKGZ1bmNOYW1lKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBOYWl0ZVF1ZXJ5KGZpbHRlcmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrjbDsnbTthLAg6rK966GcIOq4sOuwmCDtlYTthLDrp4FcbiAgICogQHBhcmFtIHBhdGggcmFkYXNoIGdldCDqsr3roZwgKOyYiDogXCJkYXRhLnVzZXJJZFwiKVxuICAgKiBAcGFyYW0gb3BlcmF0b3Ig67mE6rWQIOyXsOyCsOyekFxuICAgKiBAcGFyYW0gdmFsdWUg67mE6rWQ6rCSXG4gICAqL1xuICB3aGVyZShwYXRoOiBzdHJpbmcsIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IgfCBcImluY2x1ZGVzXCIsIHZhbHVlOiBhbnkpOiBOYWl0ZVF1ZXJ5IHtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMudHJhY2VzLmZpbHRlcigodHJhY2UpID0+IHtcbiAgICAgIGNvbnN0IGFjdHVhbCA9IGdldCh0cmFjZSwgcGF0aCkgYXMgYW55O1xuXG4gICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICAgIGNhc2UgXCI+XCI6XG4gICAgICAgICAgcmV0dXJuIGFjdHVhbCA+IHZhbHVlO1xuICAgICAgICBjYXNlIFwiPFwiOlxuICAgICAgICAgIHJldHVybiBhY3R1YWwgPCB2YWx1ZTtcbiAgICAgICAgY2FzZSBcIj49XCI6XG4gICAgICAgICAgcmV0dXJuIGFjdHVhbCA+PSB2YWx1ZTtcbiAgICAgICAgY2FzZSBcIjw9XCI6XG4gICAgICAgICAgcmV0dXJuIGFjdHVhbCA8PSB2YWx1ZTtcbiAgICAgICAgY2FzZSBcIj1cIjpcbiAgICAgICAgICByZXR1cm4gYWN0dWFsID09PSB2YWx1ZTtcbiAgICAgICAgY2FzZSBcIiE9XCI6XG4gICAgICAgICAgcmV0dXJuIGFjdHVhbCAhPT0gdmFsdWU7XG4gICAgICAgIGNhc2UgXCJpbmNsdWRlc1wiOlxuICAgICAgICAgIHJldHVybiB0eXBlb2YgYWN0dWFsID09PSBcInN0cmluZ1wiICYmIGFjdHVhbC5pbmNsdWRlcyh2YWx1ZSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgTmFpdGVRdWVyeShmaWx0ZXJlZCk7XG4gIH1cblxuICAvKipcbiAgICog7KCE7LK0IOuNsOydtO2EsCDrsLDsl7Qg67CY7ZmYXG4gICAqL1xuICByZXN1bHQoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnRyYWNlcy5tYXAoKHQpID0+IHQuZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICog7LKrIOuyiOynuCDrjbDsnbTthLAg67CY7ZmYXG4gICAqL1xuICBmaXJzdCgpOiBhbnkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYWNlc1swXT8uZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrp4jsp4Drp4kg642w7J207YSwIOuwmO2ZmFxuICAgKi9cbiAgbGFzdCgpOiBhbnkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYWNlc1t0aGlzLnRyYWNlcy5sZW5ndGggLSAxXT8uZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBu67KI7Ke4IOuNsOydtO2EsCDrsJjtmZhcbiAgICovXG4gIGF0KGluZGV4OiBudW1iZXIpOiBhbnkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYWNlc1tpbmRleF0/LmRhdGE7XG4gIH1cblxuICAvKipcbiAgICog7JuQ67O4IHRyYWNlIOuwsOyXtCDrsJjtmZggKOuUlOuyhOq5hS9OYWl0ZVZpZXdlcuyaqSlcbiAgICovXG4gIGdldFRyYWNlcygpOiBOYWl0ZVRyYWNlW10ge1xuICAgIHJldHVybiB0aGlzLnRyYWNlcztcbiAgfVxufVxuXG4vLyBOYWl0ZSDsi7HquIDthLQg6rCd7LK0ICjstpTtm4QgbG9nZ2VyIOyXsOqysCDrk7HsnZgg7IOB7YOcIOq0gOumrCDtlYTsmpTshLEg6rOg66CkKVxuZXhwb3J0IGNsYXNzIE5haXRlQ2xhc3Mge1xuICAvLyDthYzsiqTtirgg66Gc6re4IOq4sOuhnVxuICB0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55IC8q7J2066CH6rKMIOuwm+ydgCDqsJLsnbQgTmFpdGVUcmFjZeuhnCDsoIDsnqXrkJjslrQg7J6I64uk6rCAIOy2lO2bhOyXkCB2aXRlc3Tsl5DqsowgbWV0YeulvCDthrXtlbQg64SY6rKo7KC4IO2UhOuhnOyEuOyKpOqwhCDthrXsi6DsnYQg7Ya17ZW0IOyngeugrO2ZlOuQmOyWtOyVvCDtlZjripQg7KCQ7J2EIOqzoOugpO2VmOyYgOydhCDrlYwg7Jes6riw7JeQIFNlcmlhbGl6YWJsZeydhCDsjajshJwg7KCc7ZWc7J2EIOuRmCDsiJjrj4Qg7J6I7KeA66eMLCDsgqzsmqnsg4HsnZgg7Y647J2Y66W8IOyDneqwge2VmOyXrCBhbnnroZwg67Cb7Iq164uI64ukLiovLFxuICApIHtcbiAgICAvLyDsnbQgdCDtlajsiJjripQg7YWM7Iqk7Yq4IO2ZmOqyveyXkOyEnOunjCDsnpHrj5ntlbTslbwg7ZWp64uI64ukLlxuICAgIC8vIOq3uOumrOqzoCDthYzsiqTtirgg7ZmY6rK9IO2MkOuLqOyXkCDsmZwgaXNUZXN0KCkg7ZWo7IiY66W8IOyCrOyaqe2VmOyngCDslYrslZjrg5DrqbTsmpQsLFxuICAgIC8vIOydtOugh+qyjCDtlZjripTqsowg7Jyg7Yu4IO2VqOyImCDrtojrn6zsmYDshJwg7IKs7Jqp7ZWY64qUIOqyg+uztOuLpCDsobDquIjsnbTrgpjrp4gg67mg66W8IOqygyDqsJnslZjquLAg65WM66y47J6F64uI64ukLlxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJ0ZXN0XCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGV4dCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgICBjb25zdCBzdG9yZSA9IGNvbnRleHQ/Lm5haXRlU3RvcmU7XG5cbiAgICAgIGlmICghc3RvcmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyDsvZzsiqTtg50g7IiY7KeRXG4gICAgICBjb25zdCBzdGFjayA9IGV4dHJhY3RDYWxsU3RhY2soKTtcblxuICAgICAgY29uc3QgdHJhY2U6IE5haXRlVHJhY2UgPSB7XG4gICAgICAgIGtleTogbmFtZSxcbiAgICAgICAgZGF0YTogdmFsdWUsXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBhdDogbmV3IERhdGUoKSxcbiAgICAgIH07XG5cbiAgICAgIC8vIO2VreyDgSDrsLDsl7TroZwg6rSA66asXG4gICAgICBjb25zdCBleGlzdGluZyA9IHN0b3JlLmdldChuYW1lKSA/PyBbXTtcbiAgICAgIHN0b3JlLnNldChuYW1lLCBbLi4uZXhpc3RpbmcsIHRyYWNlXSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBDb250ZXh0IOyXhuuKlCDsg4Htmansl5DshJwgTmFpdGUudCDtmLjstpxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICoga2V5IOuYkOuKlCB3aWxkY2FyZCDtjKjthLTsnLzroZwgdHJhY2Ug7KGw7ZqMXG4gICAqIO2VreyDgSBOYWl0ZVF1ZXJ5IOuwmO2ZmO2VmOyXrCDssrTsnbTri50g6rCA64qlXG4gICAqL1xuICBnZXQoa2V5UGF0dGVybjogc3RyaW5nKTogTmFpdGVRdWVyeSB7XG4gICAgY29uc3QgY29udGV4dCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgY29uc3Qgc3RvcmUgPSBjb250ZXh0Py5uYWl0ZVN0b3JlO1xuXG4gICAgaWYgKCFzdG9yZSkge1xuICAgICAgcmV0dXJuIG5ldyBOYWl0ZVF1ZXJ5KFtdKTtcbiAgICB9XG5cbiAgICAvLyB3aWxkY2FyZCDsl4bsnLzrqbQgZXhhY3QgbWF0Y2hcbiAgICBpZiAoIWtleVBhdHRlcm4uaW5jbHVkZXMoXCIqXCIpKSB7XG4gICAgICBjb25zdCB0cmFjZXMgPSBzdG9yZS5nZXQoa2V5UGF0dGVybikgPz8gW107XG4gICAgICByZXR1cm4gbmV3IE5haXRlUXVlcnkodHJhY2VzKTtcbiAgICB9XG5cbiAgICAvLyB3aWxkY2FyZCDtjKjthLQg66ek7LmtXG4gICAgY29uc3QgYWxsVHJhY2VzOiBOYWl0ZVRyYWNlW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHRyYWNlc10gb2Ygc3RvcmUuZW50cmllcygpKSB7XG4gICAgICBpZiAobWF0Y2hlc1BhdHRlcm4oa2V5LCBrZXlQYXR0ZXJuKSkge1xuICAgICAgICBhbGxUcmFjZXMucHVzaCguLi50cmFjZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgTmFpdGVRdWVyeShhbGxUcmFjZXMpO1xuICB9XG5cbiAgLy8g7KCE7LK0IOumrOyKpO2KuCDqsIDsoLjsmKTquLBcbiAgZ2V0QWxsKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBTb25hbXUuZ2V0Q29udGV4dCgpO1xuICAgIGlmICghY29udGV4dD8ubmFpdGVTdG9yZSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICAvLyBOYWl0ZVRyYWNlIOuwsOyXtOydhCBkYXRh66eMIOy2lOy2nO2VmOyXrCDrsJjtmZhcbiAgICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHRyYWNlc10gb2YgY29udGV4dC5uYWl0ZVN0b3JlLmVudHJpZXMoKSkge1xuICAgICAgaWYgKGtleS5zdGFydHNXaXRoKFwibW9jazpcIikpIHtcbiAgICAgICAgLy8gTW9jayDshKTsoJXsnYAg6re464yA66GcIOuwmO2ZmFxuICAgICAgICByZXN1bHRba2V5XSA9IHRyYWNlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5haXRlVHJhY2Ug67Cw7Je07J2AIGRhdGHrp4wg7LaU7LacXG4gICAgICAgIHJlc3VsdFtrZXldID0gdHJhY2VzLm1hcCgodDogTmFpdGVUcmFjZSkgPT4gdC5kYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiDsiqTthqDslrTsl5Ag65Ok7Ja07J6I642YIO2KuOugiOydtOyKpOulvCDqs6DrjIDroZwg6rq864K07Ji164uI64ukLlxuICAgKiDsnbTrlYwg6rCS65Ok7J2AIOuqqOuRkCDsp4HroKztmZQg6rCA64ql7ZWcIOyDge2DnOuhnCDrgpjqsIDqsowg65Cp64uI64ukLlxuICAgKiDthYzsiqTtirgg7KCV67O07JmAIO2VqOq7mCBleHRlbnNpb25z7JeQIOuztOuCvCDsmqnrj4TroZwg66eM65Ok7JeI7Iq164uI64ukLlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QWxsVHJhY2VzKCk6IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogYW55O1xuICAgIGZpbGVQYXRoOiBzdHJpbmc7XG4gICAgbGluZU51bWJlcjogbnVtYmVyO1xuICAgIGF0OiBzdHJpbmc7XG4gIH1bXSB7XG4gICAgY29uc3QgY29udGV4dCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgaWYgKCFjb250ZXh0Py5uYWl0ZVN0b3JlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgdHJhY2VzID0gQXJyYXkuZnJvbShjb250ZXh0Lm5haXRlU3RvcmUudmFsdWVzKCkpLmZsYXQoKTtcblxuICAgIC8vIOyngeugrO2ZlCDrtojqsIDriqXtlZwg6rCS7J20IOyhtOyerO2VnOuLpOuptCDsnbTrpbwg64yA66y47Ked66eM7ZWY6rKMIOyVjOugpOykjeuLiOuLpCEg6re47LmY66eMIOyVjOumrOq4sOunjCDtlZjqs6Ag6re464OlIOyngOuCmOqwkeuLiOuLpCDjhY7jhY5cbiAgICAvLyDsmZwg7KeB66Cs7ZmU6rCAIOykkeyalO2VnOqwgD8g7J20KGdldEFsbFRyYWNlcykg7Zi47Lac7J2YIOqysOqzvOuKlCDsmbjrtoDroZwg64KY6rCA6rKMIOuQmOuKlOuNsCxcbiAgICAvLyDsnbTrlYwg7KO8IOyaqeuPhOqwgCB2aXRlc3TsnZggdGFzay5tZXRhIO2VhOuTnOulvCDthrXtlbQgYWZ0ZXJFYWNo7JeQ7IScIFNvbmFtdSBleHRlbnNpb27snLzroZwg7KCE64us7ZWY64qUIOqyg+yeheuLiOuLpC5cbiAgICAvLyDsl6zquLDshJwgbWV0YSDtlYTrk5zsl5Ag64u06ri0IOuCtOyaqeydgCDtlITroZzshLjsiqTqsIQg7Ya17IugKHByb2Nlc3Muc2VuZCkg65iQ64qUIOyKpOugiOuTnOqwhCDthrXsi6AobWVzc2FnZSBwb3J0KeydhCDthrXtlbQg7KCE64us65CY7Ja07JW8IO2VmOuKlOuNsCxcbiAgICAvLyDsnbTroZwg7J247ZW0IFwi7KeB66Cs7ZmUIOqwgOuKpe2VnCDqsJLrk6Trp4wg7ZeI7JqpXCLtlZjripQg7KCc7JW97J20IOyDneq5geuLiOuLpC5cbiAgICAvL1xuICAgIC8vIOydtCDsoJzslb3snYQg7J2Y7Iud7ZWY7JesIE5haXRlLnTsl5Ag7KeB66Cs7ZmUIOqwgOuKpe2VnCDqsJLrp4wg64SY6riw6rKMIO2VoCDsiJjrj4Qg7J6I7JeI7KeA66eMLCDqt7jroIfqsowg7ZWY66m0IOu2iO2OuO2VtOyniCDqsoMg6rCZ7JWE7IScIO2VmOyngCDslYrslZjsirXri4jri6QuXG4gICAgLy8g65Sw65287IScIO2YhOyerCBOYWl0ZS5064qUIOuqqOuToCDqsJLsnYQg67Cb7J2EIOyImCDsnojqsowg65CY7Ja0IOyeiOyKteuLiOuLpC5cbiAgICAvLyDrjIDsi6Ag7J2066CH6rKMKGdldEFsbFRyYWNlcykg6re4IOqwkuuTpOydhCDrubzrgrwg65WMIEpTT04uc3RyaW5naWZ566W8IOyCrOyaqe2VmOyXrCDqsJXsoJzroZwg7KeB66Cs7ZmUIOqwgOuKpe2VmOqyjCDrp4zrk6Tsl4jsirXri4jri6QsLFxuICAgIGZvciAoY29uc3QgdHJhY2Ugb2YgdHJhY2VzKSB7XG4gICAgICBjb25zdCBjaGVjayA9IGlzU2VyaWFsaXphYmxlKHRyYWNlLmRhdGEpO1xuICAgICAgaWYgKCFjaGVjay52YWxpZCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICBcIuKVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVl1xcblwiICtcbiAgICAgICAgICAgIFwi4pWRICBbTmFpdGVdIE5vbi1zZXJpYWxpemFibGUgdmFsdWUgZGV0ZWN0ZWQhICAgICAgICAgICAgICAgICAgICAgIOKVkVxcblwiICtcbiAgICAgICAgICAgIFwi4pWg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWjXFxuXCIgK1xuICAgICAgICAgICAgYOKVkSAgS2V5OiAke3RyYWNlLmtleS5wYWRFbmQoNTcpfeKVkVxcbmAgK1xuICAgICAgICAgICAgYOKVkSAgUmVhc29uOiAkeyhjaGVjay5yZWFzb24gPz8gXCJ1bmtub3duXCIpLnNsaWNlKDAsIDU0KS5wYWRFbmQoNTQpfeKVkVxcbmAgK1xuICAgICAgICAgICAgYOKVkSAgTG9jYXRpb246ICR7KHRyYWNlLnN0YWNrWzBdPy5maWxlUGF0aCA/PyBcInVua25vd25cIikuc2xpY2UoLTUxKS5wYWRFbmQoNTIpfeKVkVxcbmAgK1xuICAgICAgICAgICAgYOKVkSAgTGluZTogJHtTdHJpbmcodHJhY2Uuc3RhY2tbMF0/LmxpbmVOdW1iZXIgPz8gMCkucGFkRW5kKDU2KX3ilZFcXG5gICtcbiAgICAgICAgICAgIFwi4pWg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWjXFxuXCIgK1xuICAgICAgICAgICAgXCLilZEgIE5haXRlLnQoKSBhY2NlcHRzIGFueSB0eXBlIG9mIHZhbHVlLiBIb3dldmVyLCB2YWx1ZXMgd2lsbCAgICAg4pWRXFxuXCIgK1xuICAgICAgICAgICAgXCLilZEgIGJlIHNlcmlhbGl6ZWQgdG8gSlNPTiB3aGVuIGV4cG9ydGVkIHZpYSBOYWl0ZS5nZXRBbGxUcmFjZXMoKS4g4pWRXFxuXCIgK1xuICAgICAgICAgICAgXCLilZrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZ1cXG5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJhY2VzLm1hcCgodHJhY2UpID0+ICh7XG4gICAgICBrZXk6IHRyYWNlLmtleSxcbiAgICAgIHZhbHVlOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRyYWNlLmRhdGEgPz8gXCJcIikpLCAvLyDsp4HroKztmZQg6rCA64ql7ZWcIOqyg+unjCDrgqjquLDroKTripQg64iI66y86rKo7Jq0IOuFuOugpSwsIOyViOq3uOufrOuptCB0YXNrLm1ldGHsl5Ag65Ok7Ja06rCA7IScIO2UhOuhnOyEuOyKpOqwhCDthrXsi6Ag7ZWgIOuVjCDrrLjsoJwg7IOd6riw6rGw65Og7JqULCxcbiAgICAgIGZpbGVQYXRoOiB0cmFjZS5zdGFja1swXT8uZmlsZVBhdGggPz8gXCJcIixcbiAgICAgIGxpbmVOdW1iZXI6IHRyYWNlLnN0YWNrWzBdPy5saW5lTnVtYmVyID8/IDAsXG4gICAgICBhdDogdHJhY2UuYXQudG9JU09TdHJpbmcoKSxcbiAgICB9KSk7XG4gIH1cblxuICAvLyDtirnsoJUg7YKkIOyCreygnO2VmOq4sFxuICBkZWwoa2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gU29uYW11LmdldENvbnRleHQoKTtcbiAgICBpZiAoIWNvbnRleHQ/Lm5haXRlU3RvcmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29udGV4dC5uYWl0ZVN0b3JlLmRlbGV0ZShrZXkpO1xuICB9XG5cbiAgY3JlYXRlU3RvcmUoKTogTmFpdGVTdG9yZSB7XG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBOYWl0ZVRyYWNlW10+KCk7XG4gIH1cblxuICAvLyDsnbzrsJgg66Gc6re4IOugiOuyqFxuICBkKF9tZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAvLyBUT0RPOiBMb2dnZXIg7Jew6rKwXG4gICAgY29uc29sZS5sb2coYFtERUJVR10gJHtfbWVzc2FnZX1gKTtcbiAgfVxuICBpKF9tZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAvLyBUT0RPOiBMb2dnZXIg7Jew6rKwXG4gICAgY29uc29sZS5sb2coYFtJTkZPXSAke19tZXNzYWdlfWApO1xuICB9XG4gIHcoX21lc3NhZ2U6IHN0cmluZykge1xuICAgIC8vIFRPRE86IExvZ2dlciDsl7DqsrBcbiAgICBjb25zb2xlLmxvZyhgW1dBUk5dICR7X21lc3NhZ2V9YCk7XG4gIH1cbiAgZShfbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgLy8gVE9ETzogTG9nZ2VyIOyXsOqysFxuICAgIGNvbnNvbGUubG9nKGBbRVJST1JdICR7X21lc3NhZ2V9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IE5haXRlID0gbmV3IE5haXRlQ2xhc3MoKTtcbiJdLCJuYW1lcyI6WyJnZXQiLCJTb25hbXUiLCJpc1NlcmlhbGl6YWJsZSIsImV4dHJhY3RDYWxsU3RhY2siLCJzdGFjayIsIkVycm9yIiwibGluZXMiLCJzcGxpdCIsImZyYW1lcyIsInNsaWNlIiwibWFwIiwicGFyc2VTdGFja0ZyYW1lIiwiZmlsdGVyIiwiZnJhbWUiLCJjb250ZXh0SW5kZXgiLCJmaW5kSW5kZXgiLCJmIiwiZnVuY3Rpb25OYW1lIiwiaW5jbHVkZXMiLCJsaW5lIiwibWF0Y2hXaXRoRnVuYyIsIm1hdGNoIiwiZmlsZVBhdGgiLCJsaW5lTnVtYmVyU3RyIiwibGluZU51bWJlciIsIk51bWJlciIsInBhcnNlSW50IiwibWF0Y2hOb0Z1bmMiLCJtYXRjaGVzUGF0dGVybiIsImtleSIsInBhdHRlcm4iLCJrZXlQYXJ0cyIsInBhdHRlcm5QYXJ0cyIsImxlbmd0aCIsInByZWZpeFBhcnRzIiwiZXZlcnkiLCJwYXJ0IiwiaSIsIk5haXRlUXVlcnkiLCJ0cmFjZXMiLCJmcm9tRmlsZSIsImZpbGVOYW1lIiwiZmlsdGVyZWQiLCJ0Iiwic29tZSIsImVuZHNXaXRoIiwiZnJvbUZ1bmN0aW9uIiwiZnVuY05hbWUiLCJvcHRpb25zIiwiZnJvbSIsIndoZXJlIiwicGF0aCIsIm9wZXJhdG9yIiwidmFsdWUiLCJ0cmFjZSIsImFjdHVhbCIsInJlc3VsdCIsImRhdGEiLCJmaXJzdCIsImxhc3QiLCJhdCIsImluZGV4IiwiZ2V0VHJhY2VzIiwiTmFpdGVDbGFzcyIsIm5hbWUiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsInN0b3JlIiwibmFpdGVTdG9yZSIsIkRhdGUiLCJleGlzdGluZyIsInNldCIsImtleVBhdHRlcm4iLCJhbGxUcmFjZXMiLCJlbnRyaWVzIiwicHVzaCIsImdldEFsbCIsInN0YXJ0c1dpdGgiLCJnZXRBbGxUcmFjZXMiLCJBcnJheSIsInZhbHVlcyIsImZsYXQiLCJjaGVjayIsInZhbGlkIiwiY29uc29sZSIsIndhcm4iLCJwYWRFbmQiLCJyZWFzb24iLCJTdHJpbmciLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJ0b0lTT1N0cmluZyIsImRlbCIsImRlbGV0ZSIsImNyZWF0ZVN0b3JlIiwiTWFwIiwiZCIsIl9tZXNzYWdlIiwibG9nIiwidyIsImUiLCJOYWl0ZSJdLCJtYXBwaW5ncyI6IkFBQUEsa0ZBQWtGLEdBRWxGLFNBQVNBLEdBQUcsUUFBUSxVQUFVO0FBQzlCLFNBQVNDLE1BQU0sUUFBUSxtQkFBZ0I7QUFFdkMsU0FBU0MsY0FBYyxRQUFRLDJCQUF3QjtBQW9CdkQ7Ozs7O0NBS0MsR0FDRCxTQUFTQztJQUNQLE1BQU1DLFFBQVEsSUFBSUMsUUFBUUQsS0FBSztJQUMvQixJQUFJLENBQUNBLE9BQU8sT0FBTyxFQUFFO0lBRXJCLE1BQU1FLFFBQVFGLE1BQU1HLEtBQUssQ0FBQztJQUUxQixVQUFVO0lBQ1YsZUFBZTtJQUNmLDZCQUE2QjtJQUM3QixvQkFBb0I7SUFDcEIscUJBQXFCO0lBQ3JCLE1BQU1DLFNBQVNGLE1BQ1pHLEtBQUssQ0FBQyxHQUNOQyxHQUFHLENBQUNDLGlCQUNKQyxNQUFNLENBQUMsQ0FBQ0MsUUFBK0JBLFVBQVU7SUFFcEQsb0NBQW9DO0lBQ3BDLE1BQU1DLGVBQWVOLE9BQU9PLFNBQVMsQ0FDbkMsQ0FBQ0MsSUFDQ0EsRUFBRUMsWUFBWSxFQUFFQyxTQUFTLHFCQUFxQkYsRUFBRUMsWUFBWSxFQUFFQyxTQUFTO0lBRzNFLE9BQU9KLGdCQUFnQixJQUFJTixPQUFPQyxLQUFLLENBQUMsR0FBR0ssZUFBZSxLQUFLTjtBQUNqRTtBQUVBOzs7O0NBSUMsR0FDRCxTQUFTRyxnQkFBZ0JRLElBQVk7SUFDbkMsNERBQTREO0lBQzVELE1BQU1DLGdCQUFnQkQsS0FBS0UsS0FBSyxDQUFDO0lBQ2pDLElBQUlELGVBQWU7UUFDakIsTUFBTUgsZUFBZUcsYUFBYSxD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
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9uYWl0ZS9uYWl0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogYmlvbWUtaWdub3JlLWFsbCBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogTmFpdGXripQgZXhwZWN07JmAIO2YuOydke2VmOuPhOuhnSBhbnnrpbwg7ZeI7Jqp7ZWoICovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyBnZXQgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGFyaXNvbk9wZXJhdG9yIH0gZnJvbSBcIi4uL2RhdGFiYXNlL3B1cmkudHlwZXNcIjtcbmltcG9ydCB7IGNvbnZlcnROYWl0ZUtleVRvQ2F0ZWdvcnkgfSBmcm9tIFwiLi4vbG9nZ2VyL2NhdGVnb3J5XCI7XG5pbXBvcnQgeyBpc1NlcmlhbGl6YWJsZSB9IGZyb20gXCIuLi91dGlscy9vYmplY3QtdXRpbHNcIjtcblxuLy8gU3RhY2tGcmFtZSDtg4DsnoVcbmludGVyZmFjZSBTdGFja0ZyYW1lIHtcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmcgfCBudWxsO1xuICBmaWxlUGF0aDogc3RyaW5nOyAvLyBcIi9Vc2Vycy8uLi4vc3luY2VyLnRzXCIg65iQ64qUIFwibm9kZTppbnRlcm5hbC8uLi5cIlxuICBsaW5lTnVtYmVyOiBudW1iZXI7IC8vIFRTIO2MjOydvCDquLDspIAg65287J24IOuyiO2YuFxufVxuXG4vLyBOYWl0ZVRyYWNlIO2DgOyehVxuaW50ZXJmYWNlIE5haXRlVHJhY2Uge1xuICBrZXk6IHN0cmluZztcbiAgZGF0YTogYW55O1xuICBzdGFjazogU3RhY2tGcmFtZVtdOyAvLyDsvZzsiqTtg50g7KCV67O0XG4gIGF0OiBEYXRlO1xufVxuXG4vLyBOYWl0ZS506rCAIOyggOyepeuQmOuKlCDtg4DsnoUgKO2VreyDgSDrsLDsl7TroZwg7Ya17J28KVxuZXhwb3J0IHR5cGUgTmFpdGVTdG9yZSA9IE1hcDxzdHJpbmcsIE5haXRlVHJhY2VbXT47XG5cbi8qKlxuICog7L2c7Iqk7YOd7J2EIO2MjOyLse2VmOyXrCBTdGFja0ZyYW1lIOuwsOyXtOuhnCDrsJjtmZhcbiAqIC0gZXh0cmFjdENhbGxTdGFjayDsnpDsi6Dqs7wgTmFpdGUudOuKlCDsoJzsmbhcbiAqIC0gcnVuV2l0aENvbnRleHQvcnVuV2l0aE1vY2tDb250ZXh0IOuwnOqyrCDsi5wg6rGw6riw7IScIOyiheujjFxuICogLSBub2RlOiDrgrTrtoAg6rK966Gc64qUIO2PrO2VqO2VmOuQmCwgbGluZU51bWJlcuuKlCBwYXRo7JeQIDog7Y+s7ZWoIOyLnCDrtpnsnbTsp4Ag7JWK7J2MXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RDYWxsU3RhY2soKTogU3RhY2tGcmFtZVtdIHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgaWYgKCFzdGFjaykgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IGxpbmVzID0gc3RhY2suc3BsaXQoXCJcXG5cIik7XG5cbiAgLy8g7L2c7Iqk7YOdIOq1rOyhsDpcbiAgLy8gWzBdOiBcIkVycm9yXCJcbiAgLy8gWzFdOiBcImF0IGV4dHJhY3RDYWxsU3RhY2tcIlxuICAvLyBbMl06IFwiYXQgTmFpdGUudFwiXG4gIC8vIFszXTog7Iuk7KCcIO2YuOy2nCDsnITsuZjrtoDthLAg7Iuc7J6RXG4gIGNvbnN0IGZyYW1lcyA9IGxpbmVzXG4gICAgLnNsaWNlKDMpXG4gICAgLm1hcChwYXJzZVN0YWNrRnJhbWUpXG4gICAgLmZpbHRlcigoZnJhbWUpOiBmcmFtZSBpcyBTdGFja0ZyYW1lID0+IGZyYW1lICE9PSBudWxsKTtcblxuICAvLyBydW5XaXRoQ29udGV4dCDqs4Tsl7Qg7ZWo7IiYIOuwnOqyrCDsi5wg6rGw6riw7IScIOyekOultOq4sFxuICBjb25zdCBjb250ZXh0SW5kZXggPSBmcmFtZXMuZmluZEluZGV4KFxuICAgIChmKSA9PlxuICAgICAgZi5mdW5jdGlvbk5hbWU/LmluY2x1ZGVzKFwicnVuV2l0aENvbnRleHRcIikgfHwgZi5mdW5jdGlvbk5hbWU/LmluY2x1ZGVzKFwicnVuV2l0aE1vY2tDb250ZXh0XCIpLFxuICApO1xuXG4gIHJldHVybiBjb250ZXh0SW5kZXggPj0gMCA/IGZyYW1lcy5zbGljZSgwLCBjb250ZXh0SW5kZXggKyAxKSA6IGZyYW1lcztcbn1cblxuLyoqXG4gKiDsvZzsiqTtg50g7ZWcIOykhOydhCDtjIzsi7FcbiAqIO2YleyLnTE6IFwiYXQgRnVuY3Rpb25OYW1lIChmaWxlUGF0aDpsaW5lTnVtYmVyOmNvbHVtbk51bWJlcilcIlxuICog7ZiV7IudMjogXCJhdCBmaWxlUGF0aDpsaW5lTnVtYmVyOmNvbHVtbk51bWJlclwiICjsnbXrqoUg7ZWo7IiYL+uqqOuTiCDroIjrsqgpXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU3RhY2tGcmFtZShsaW5lOiBzdHJpbmcpOiBTdGFja0ZyYW1lIHwgbnVsbCB7XG4gIC8vIO2MqO2EtDE6IFwiYXQgRnVuY3Rpb25OYW1lIChmaWxlUGF0aDpsaW5lTnVtYmVyOmNvbHVtbk51bWJlcilcIlxuICBjb25zdCBtYXRjaFdpdGhGdW5jID0gbGluZS5tYXRjaCgvYXRcXHMrKC4rPylcXHMrXFwoKC4rPyk6KFxcZCspOlxcZCtcXCkvKTtcbiAgaWYgKG1hdGNoV2l0aEZ1bmMpIHtcbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBtYXRjaFdpdGhGdW5jWzFdO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gbWF0Y2hXaXRoRnVuY1syXTtcbiAgICBjb25zdCBsaW5lTnVtYmVyU3RyID0gbWF0Y2hXaXRoRnVuY1szXTtcblxuICAgIC8vIGZpbGVQYXRo7JeQIOydtOuvuCA66rCAIO2PrO2VqOuQmOyWtCDsnojsnLzrqbQgKOyYiDogXCJub2RlOmludGVybmFsLy4uLlwiKVxuICAgIGlmIChmaWxlUGF0aC5pbmNsdWRlcyhcIjpcIikpIHtcbiAgICAgIHJldHVybiB7IGZ1bmN0aW9uTmFtZSwgZmlsZVBhdGgsIGxpbmVOdW1iZXI6IDAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgZmlsZVBhdGgsXG4gICAgICBsaW5lTnVtYmVyOiBOdW1iZXIucGFyc2VJbnQobGluZU51bWJlclN0ciwgMTApLFxuICAgIH07XG4gIH1cblxuICAvLyDtjKjthLQyOiBcImF0IGZpbGVQYXRoOmxpbmVOdW1iZXI6Y29sdW1uTnVtYmVyXCIgKO2VqOyImOuqhSDsl4bsnYwpXG4gIGNvbnN0IG1hdGNoTm9GdW5jID0gbGluZS5tYXRjaCgvYXRcXHMrKC4rPyk6KFxcZCspOlxcZCskLyk7XG4gIGlmIChtYXRjaE5vRnVuYykge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gbWF0Y2hOb0Z1bmNbMV07XG4gICAgY29uc3QgbGluZU51bWJlclN0ciA9IG1hdGNoTm9GdW5jWzJdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogbnVsbCxcbiAgICAgIGZpbGVQYXRoLFxuICAgICAgbGluZU51bWJlcjogTnVtYmVyLnBhcnNlSW50KGxpbmVOdW1iZXJTdHIsIDEwKSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogd2lsZGNhcmQg7Yyo7YS0IOunpOy5rVxuICog7JiI7IucOlxuICogLSBcInN5bmNlcjoqXCIg4oaSIFwic3luY2VyOmFcIiwgXCJzeW5jZXI6YTpiXCIg66qo65GQIOunpOy5rVxuICogLSBcInN5bmNlcjoqOnVzZXJcIiDihpIgXCJzeW5jZXI6cmVuZGVyVGVtcGxhdGU6dXNlclwiIOunpOy5rVxuICogLSBcInN5bmNlcjpyZW5kZXJUZW1wbGF0ZToqXCIg4oaSIFwic3luY2VyOnJlbmRlclRlbXBsYXRlOnNlcnZpY2VcIiDrp6Tsua1cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc1BhdHRlcm4oa2V5OiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBrZXlQYXJ0cyA9IGtleS5zcGxpdChcIjpcIik7XG4gIGNvbnN0IHBhdHRlcm5QYXJ0cyA9IHBhdHRlcm4uc3BsaXQoXCI6XCIpO1xuXG4gIC8vIOuniOyngOunieydtCAqIOKGkiBwcmVmaXgg66ek7LmtICjquLjsnbQg66y06rSAKVxuICAvLyDsmIg6IFwic3luY2VyOipcIuuKlCBcInN5bmNlcjphXCIsIFwic3luY2VyOmE6YlwiIOuqqOuRkCDrp6Tsua1cbiAgaWYgKHBhdHRlcm5QYXJ0c1twYXR0ZXJuUGFydHMubGVuZ3RoIC0gMV0gPT09IFwiKlwiKSB7XG4gICAgY29uc3QgcHJlZml4UGFydHMgPSBwYXR0ZXJuUGFydHMuc2xpY2UoMCwgLTEpO1xuICAgIC8vIHByZWZpeOqwgCDrqqjrkZAg7J287LmY7ZWY64qU7KeAIO2ZleyduFxuICAgIHJldHVybiBwcmVmaXhQYXJ0cy5ldmVyeSgocGFydCwgaSkgPT4gcGFydCA9PT0ga2V5UGFydHNbaV0pO1xuICB9XG5cbiAgLy8g6ri47J206rCAIOqwmeyVhOyVvCDtlahcbiAgaWYgKHBhdHRlcm5QYXJ0cy5sZW5ndGggIT09IGtleVBhcnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIOqwgSDtjIztirjqsIAgKiDrmJDripQg7KCV7ZmV7Z6IIOydvOy5mFxuICByZXR1cm4gcGF0dGVyblBhcnRzLmV2ZXJ5KChwYXJ0LCBpKSA9PiBwYXJ0ID09PSBcIipcIiB8fCBwYXJ0ID09PSBrZXlQYXJ0c1tpXSk7XG59XG5cbi8qKlxuICogTmFpdGVRdWVyeSDtgbTrnpjsiqRcbiAqIOyytOydtOuLneydhCDthrXtlZwgdHJhY2Ug7ZWE7YSw66eBIOuwjyDsobDtmoxcbiAqL1xuZXhwb3J0IGNsYXNzIE5haXRlUXVlcnkge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYWNlczogTmFpdGVUcmFjZVtdKSB7fVxuXG4gIC8qKlxuICAgKiDtjIzsnbzrqoXsnLzroZwg7ZWE7YSw66eBXG4gICAqIEBwYXJhbSBmaWxlTmFtZSDtjIzsnbzrqoUgKOyYiDogXCJzeW5jZXIudGVzdC50c1wiKVxuICAgKi9cbiAgZnJvbUZpbGUoZmlsZU5hbWU6IHN0cmluZyk6IE5haXRlUXVlcnkge1xuICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy50cmFjZXMuZmlsdGVyKCh0KSA9PlxuICAgICAgdC5zdGFjay5zb21lKChmcmFtZSkgPT4gZnJhbWUuZmlsZVBhdGguZW5kc1dpdGgoYC8ke2ZpbGVOYW1lfWApKSxcbiAgICApO1xuICAgIHJldHVybiBuZXcgTmFpdGVRdWVyeShmaWx0ZXJlZCk7XG4gIH1cblxuICAvKipcbiAgICog7ZWo7IiY66qF7Jy866GcIO2VhO2EsOungVxuICAgKiBAcGFyYW0gZnVuY05hbWUg7ZWo7IiY66qFIChpbmNsdWRlcyDssrTtgawpXG4gICAqIEBwYXJhbSBvcHRpb25zLmZyb20gJ2RpcmVjdCcgPSDsp4HsoJEg7Zi47Lac66eMLCAnaW5kaXJlY3QnID0g6rCE7KCRIO2YuOy2nOunjCwgJ2JvdGgnID0g66qo65GQXG4gICAqL1xuICBmcm9tRnVuY3Rpb24oXG4gICAgZnVuY05hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7IGZyb206IFwiZGlyZWN0XCIgfCBcImluZGlyZWN0XCIgfCBcImJvdGhcIiB9ID0geyBmcm9tOiBcImJvdGhcIiB9LFxuICApOiBOYWl0ZVF1ZXJ5IHtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMudHJhY2VzLmZpbHRlcigodCkgPT4ge1xuICAgICAgaWYgKG9wdGlvbnMuZnJvbSA9PT0gXCJkaXJlY3RcIikge1xuICAgICAgICAvLyBzdGFja1swXeunjCDtmZXsnbggKOyngeygkSDtmLjstpwpXG4gICAgICAgIHJldHVybiB0LnN0YWNrWzBdPy5mdW5jdGlvbk5hbWU/LmluY2x1ZGVzKGZ1bmNOYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmZyb20gPT09IFwiaW5kaXJlY3RcIikge1xuICAgICAgICAvLyBzdGFja1sxK13sl5DshJwg7ZmV7J24ICjqsITsoJEg7Zi47LacKVxuICAgICAgICByZXR1cm4gdC5zdGFjay5zbGljZSgxKS5zb21lKChmKSA9PiBmLmZ1bmN0aW9uTmFtZT8uaW5jbHVkZXMoZnVuY05hbWUpKTtcbiAgICAgIH1cbiAgICAgIC8vIOyghOyytCDsiqTtg53sl5DshJwg7ZmV7J24XG4gICAgICByZXR1cm4gdC5zdGFjay5zb21lKChmKSA9PiBmLmZ1bmN0aW9uTmFtZT8uaW5jbHVkZXMoZnVuY05hbWUpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IE5haXRlUXVlcnkoZmlsdGVyZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIOuNsOydtO2EsCDqsr3roZwg6riw67CYIO2VhO2EsOungVxuICAgKiBAcGFyYW0gcGF0aCByYWRhc2ggZ2V0IOqyveuhnCAo7JiIOiBcImRhdGEudXNlcklkXCIpXG4gICAqIEBwYXJhbSBvcGVyYXRvciDruYTqtZAg7Jew7IKw7J6QXG4gICAqIEBwYXJhbSB2YWx1ZSDruYTqtZDqsJJcbiAgICovXG4gIHdoZXJlKHBhdGg6IHN0cmluZywgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvciB8IFwiaW5jbHVkZXNcIiwgdmFsdWU6IGFueSk6IE5haXRlUXVlcnkge1xuICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy50cmFjZXMuZmlsdGVyKCh0cmFjZSkgPT4ge1xuICAgICAgY29uc3QgYWN0dWFsID0gZ2V0KHRyYWNlLCBwYXRoKSBhcyBhbnk7XG5cbiAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICAgICAgY2FzZSBcIj5cIjpcbiAgICAgICAgICByZXR1cm4gYWN0dWFsID4gdmFsdWU7XG4gICAgICAgIGNhc2UgXCI8XCI6XG4gICAgICAgICAgcmV0dXJuIGFjdHVhbCA8IHZhbHVlO1xuICAgICAgICBjYXNlIFwiPj1cIjpcbiAgICAgICAgICByZXR1cm4gYWN0dWFsID49IHZhbHVlO1xuICAgICAgICBjYXNlIFwiPD1cIjpcbiAgICAgICAgICByZXR1cm4gYWN0dWFsIDw9IHZhbHVlO1xuICAgICAgICBjYXNlIFwiPVwiOlxuICAgICAgICAgIHJldHVybiBhY3R1YWwgPT09IHZhbHVlO1xuICAgICAgICBjYXNlIFwiIT1cIjpcbiAgICAgICAgICByZXR1cm4gYWN0dWFsICE9PSB2YWx1ZTtcbiAgICAgICAgY2FzZSBcImluY2x1ZGVzXCI6XG4gICAgICAgICAgcmV0dXJuIHR5cGVvZiBhY3R1YWwgPT09IFwic3RyaW5nXCIgJiYgYWN0dWFsLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBOYWl0ZVF1ZXJ5KGZpbHRlcmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDsoITssrQg642w7J207YSwIOuwsOyXtCDrsJjtmZhcbiAgICovXG4gIHJlc3VsdCgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMudHJhY2VzLm1hcCgodCkgPT4gdC5kYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDssqsg67KI7Ke4IOuNsOydtO2EsCDrsJjtmZhcbiAgICovXG4gIGZpcnN0KCk6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHJhY2VzWzBdPy5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIOuniOyngOuniSDrjbDsnbTthLAg67CY7ZmYXG4gICAqL1xuICBsYXN0KCk6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHJhY2VzW3RoaXMudHJhY2VzLmxlbmd0aCAtIDFdPy5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIG7rsojsp7gg642w7J207YSwIOuwmO2ZmFxuICAgKi9cbiAgYXQoaW5kZXg6IG51bWJlcik6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHJhY2VzW2luZGV4XT8uZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiDsm5Drs7ggdHJhY2Ug67Cw7Je0IOuwmO2ZmCAo65SU67KE6rmFL05haXRlVmlld2Vy7JqpKVxuICAgKi9cbiAgZ2V0VHJhY2VzKCk6IE5haXRlVHJhY2VbXSB7XG4gICAgcmV0dXJuIHRoaXMudHJhY2VzO1xuICB9XG59XG5cbi8vIE5haXRlIOyLseq4gO2EtCDqsJ3ssrQgKOy2lO2bhCBsb2dnZXIg7Jew6rKwIOuTseydmCDsg4Htg5wg6rSA66asIO2VhOyalOyEsSDqs6DroKQpXG5leHBvcnQgY2xhc3MgTmFpdGVDbGFzcyB7XG4gIC8vIO2FjOyKpO2KuCDroZzqt7gg6riw66GdXG4gIHQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnkgLyrsnbTroIfqsowg67Cb7J2AIOqwkuydtCBOYWl0ZVRyYWNl66GcIOyggOyepeuQmOyWtCDsnojri6TqsIAg7LaU7ZuE7JeQIHZpdGVzdOyXkOqyjCBtZXRh66W8IO2Gte2VtCDrhJjqsqjsoLgg7ZSE66Gc7IS47Iqk6rCEIO2GteyLoOydhCDthrXtlbQg7KeB66Cs7ZmU65CY7Ja07JW8IO2VmOuKlCDsoJDsnYQg6rOg66Ck7ZWY7JiA7J2EIOuVjCDsl6zquLDsl5AgU2VyaWFsaXphYmxl7J2EIOyNqOyEnCDsoJztlZzsnYQg65GYIOyImOuPhCDsnojsp4Drp4wsIOyCrOyaqeyDgeydmCDtjrjsnZjrpbwg7IOd6rCB7ZWY7JesIGFueeuhnCDrsJvsirXri4jri6QuKi8sXG4gICkge1xuICAgIC8vIOydtCB0IO2VqOyImOuKlCDthYzsiqTtirgg7ZmY6rK97JeQ7ISc66eMIOyekeuPme2VtOyVvCDtlanri4jri6QuXG4gICAgLy8g6re466as6rOgIO2FjOyKpO2KuCDtmZjqsr0g7YyQ64uo7JeQIOyZnCBpc1Rlc3QoKSDtlajsiJjrpbwg7IKs7Jqp7ZWY7KeAIOyViuyVmOuDkOuptOyalCwsXG4gICAgLy8g7J2066CH6rKMIO2VmOuKlOqyjCDsnKDti7gg7ZWo7IiYIOu2iOufrOyZgOyEnCDsgqzsmqntlZjripQg6rKD67O064ukIOyhsOq4iOydtOuCmOuniCDruaDrpbwg6rKDIOqwmeyVmOq4sCDrlYzrrLjsnoXri4jri6QuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInRlc3RcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gU29uYW11LmdldENvbnRleHQoKTtcbiAgICAgIGNvbnN0IHN0b3JlID0gY29udGV4dD8ubmFpdGVTdG9yZTtcblxuICAgICAgaWYgKCFzdG9yZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIOy9nOyKpO2DnSDsiJjsp5FcbiAgICAgIGNvbnN0IHN0YWNrID0gZXh0cmFjdENhbGxTdGFjaygpO1xuXG4gICAgICBjb25zdCB0cmFjZTogTmFpdGVUcmFjZSA9IHtcbiAgICAgICAga2V5OiBuYW1lLFxuICAgICAgICBkYXRhOiB2YWx1ZSxcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIGF0OiBuZXcgRGF0ZSgpLFxuICAgICAgfTtcblxuICAgICAgLy8g7ZWt7IOBIOuwsOyXtOuhnCDqtIDrpqxcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gc3RvcmUuZ2V0KG5hbWUpID8/IFtdO1xuICAgICAgZ2V0TG9nZ2VyKFtcIm5haXRlXCIsIC4uLmNvbnZlcnROYWl0ZUtleVRvQ2F0ZWdvcnkobmFtZSldKS5kZWJ1ZyhcbiAgICAgICAgYG5haXRlOiB7bmFtZX0gJHtleGlzdGluZy5sZW5ndGggPT09IDAgPyBcImlzIGVtcHR5IHN0YXRlXCIgOiBgYWxyZWFkeSBleGlzdGluZyB3aXRoICR7ZXhpc3RpbmcubGVuZ3RoID09PSAwfSBlbnRyaWVzYH0sIGFwcGVuZGluZyBuZXcgZW50cnlgLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIHN0b3JlLnNldChuYW1lLCBbLi4uZXhpc3RpbmcsIHRyYWNlXSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBDb250ZXh0IOyXhuuKlCDsg4Htmansl5DshJwgTmFpdGUudCDtmLjstpxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICoga2V5IOuYkOuKlCB3aWxkY2FyZCDtjKjthLTsnLzroZwgdHJhY2Ug7KGw7ZqMXG4gICAqIO2VreyDgSBOYWl0ZVF1ZXJ5IOuwmO2ZmO2VmOyXrCDssrTsnbTri50g6rCA64qlXG4gICAqL1xuICBnZXQoa2V5UGF0dGVybjogc3RyaW5nKTogTmFpdGVRdWVyeSB7XG4gICAgY29uc3QgY29udGV4dCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgY29uc3Qgc3RvcmUgPSBjb250ZXh0Py5uYWl0ZVN0b3JlO1xuXG4gICAgaWYgKCFzdG9yZSkge1xuICAgICAgcmV0dXJuIG5ldyBOYWl0ZVF1ZXJ5KFtdKTtcbiAgICB9XG5cbiAgICAvLyB3aWxkY2FyZCDsl4bsnLzrqbQgZXhhY3QgbWF0Y2hcbiAgICBpZiAoIWtleVBhdHRlcm4uaW5jbHVkZXMoXCIqXCIpKSB7XG4gICAgICBjb25zdCB0cmFjZXMgPSBzdG9yZS5nZXQoa2V5UGF0dGVybikgPz8gW107XG4gICAgICByZXR1cm4gbmV3IE5haXRlUXVlcnkodHJhY2VzKTtcbiAgICB9XG5cbiAgICAvLyB3aWxkY2FyZCDtjKjthLQg66ek7LmtXG4gICAgY29uc3QgYWxsVHJhY2VzOiBOYWl0ZVRyYWNlW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHRyYWNlc10gb2Ygc3RvcmUuZW50cmllcygpKSB7XG4gICAgICBpZiAobWF0Y2hlc1BhdHRlcm4oa2V5LCBrZXlQYXR0ZXJuKSkge1xuICAgICAgICBhbGxUcmFjZXMucHVzaCguLi50cmFjZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgTmFpdGVRdWVyeShhbGxUcmFjZXMpO1xuICB9XG5cbiAgLy8g7KCE7LK0IOumrOyKpO2KuCDqsIDsoLjsmKTquLBcbiAgZ2V0QWxsKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBTb25hbXUuZ2V0Q29udGV4dCgpO1xuICAgIGlmICghY29udGV4dD8ubmFpdGVTdG9yZSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICAvLyBOYWl0ZVRyYWNlIOuwsOyXtOydhCBkYXRh66eMIOy2lOy2nO2VmOyXrCDrsJjtmZhcbiAgICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHRyYWNlc10gb2YgY29udGV4dC5uYWl0ZVN0b3JlLmVudHJpZXMoKSkge1xuICAgICAgaWYgKGtleS5zdGFydHNXaXRoKFwibW9jazpcIikpIHtcbiAgICAgICAgLy8gTW9jayDshKTsoJXsnYAg6re464yA66GcIOuwmO2ZmFxuICAgICAgICByZXN1bHRba2V5XSA9IHRyYWNlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5haXRlVHJhY2Ug67Cw7Je07J2AIGRhdGHrp4wg7LaU7LacXG4gICAgICAgIHJlc3VsdFtrZXldID0gdHJhY2VzLm1hcCgodDogTmFpdGVUcmFjZSkgPT4gdC5kYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiDsiqTthqDslrTsl5Ag65Ok7Ja07J6I642YIO2KuOugiOydtOyKpOulvCDqs6DrjIDroZwg6rq864K07Ji164uI64ukLlxuICAgKiDsnbTrlYwg6rCS65Ok7J2AIOuqqOuRkCDsp4HroKztmZQg6rCA64ql7ZWcIOyDge2DnOuhnCDrgpjqsIDqsowg65Cp64uI64ukLlxuICAgKiDthYzsiqTtirgg7KCV67O07JmAIO2VqOq7mCBleHRlbnNpb25z7JeQIOuztOuCvCDsmqnrj4TroZwg66eM65Ok7JeI7Iq164uI64ukLlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QWxsVHJhY2VzKCk6IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogYW55O1xuICAgIGZpbGVQYXRoOiBzdHJpbmc7XG4gICAgbGluZU51bWJlcjogbnVtYmVyO1xuICAgIGF0OiBzdHJpbmc7XG4gIH1bXSB7XG4gICAgY29uc3QgY29udGV4dCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgaWYgKCFjb250ZXh0Py5uYWl0ZVN0b3JlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgdHJhY2VzID0gQXJyYXkuZnJvbShjb250ZXh0Lm5haXRlU3RvcmUudmFsdWVzKCkpLmZsYXQoKTtcblxuICAgIC8vIOyngeugrO2ZlCDrtojqsIDriqXtlZwg6rCS7J20IOyhtOyerO2VnOuLpOuptCDsnbTrpbwg64yA66y47Ked66eM7ZWY6rKMIOyVjOugpOykjeuLiOuLpCEg6re47LmY66eMIOyVjOumrOq4sOunjCDtlZjqs6Ag6re464OlIOyngOuCmOqwkeuLiOuLpCDjhY7jhY5cbiAgICAvLyDsmZwg7KeB66Cs7ZmU6rCAIOykkeyalO2VnOqwgD8g7J20KGdldEFsbFRyYWNlcykg7Zi47Lac7J2YIOqysOqzvOuKlCDsmbjrtoDroZwg64KY6rCA6rKMIOuQmOuKlOuNsCxcbiAgICAvLyDsnbTrlYwg7KO8IOyaqeuPhOqwgCB2aXRlc3TsnZggdGFzay5tZXRhIO2VhOuTnOulvCDthrXtlbQgYWZ0ZXJFYWNo7JeQ7IScIFNvbmFtdSBleHRlbnNpb27snLzroZwg7KCE64us7ZWY64qUIOqyg+yeheuLiOuLpC5cbiAgICAvLyDsl6zquLDshJwgbWV0YSDtlYTrk5zsl5Ag64u06ri0IOuCtOyaqeydgCDtlITroZzshLjsiqTqsIQg7Ya17IugKHByb2Nlc3Muc2VuZCkg65iQ64qUIOyKpOugiOuTnOqwhCDthrXsi6AobWVzc2FnZSBwb3J0KeydhCDthrXtlbQg7KCE64us65CY7Ja07JW8IO2VmOuKlOuNsCxcbiAgICAvLyDsnbTroZwg7J247ZW0IFwi7KeB66Cs7ZmUIOqwgOuKpe2VnCDqsJLrk6Trp4wg7ZeI7JqpXCLtlZjripQg7KCc7JW97J20IOyDneq5geuLiOuLpC5cbiAgICAvL1xuICAgIC8vIOydtCDsoJzslb3snYQg7J2Y7Iud7ZWY7JesIE5haXRlLnTsl5Ag7KeB66Cs7ZmUIOqwgOuKpe2VnCDqsJLrp4wg64SY6riw6rKMIO2VoCDsiJjrj4Qg7J6I7JeI7KeA66eMLCDqt7jroIfqsowg7ZWY66m0IOu2iO2OuO2VtOyniCDqsoMg6rCZ7JWE7IScIO2VmOyngCDslYrslZjsirXri4jri6QuXG4gICAgLy8g65Sw65287IScIO2YhOyerCBOYWl0ZS5064qUIOuqqOuToCDqsJLsnYQg67Cb7J2EIOyImCDsnojqsowg65CY7Ja0IOyeiOyKteuLiOuLpC5cbiAgICAvLyDrjIDsi6Ag7J2066CH6rKMKGdldEFsbFRyYWNlcykg6re4IOqwkuuTpOydhCDrubzrgrwg65WMIEpTT04uc3RyaW5naWZ566W8IOyCrOyaqe2VmOyXrCDqsJXsoJzroZwg7KeB66Cs7ZmUIOqwgOuKpe2VmOqyjCDrp4zrk6Tsl4jsirXri4jri6QsLFxuICAgIGZvciAoY29uc3QgdHJhY2Ugb2YgdHJhY2VzKSB7XG4gICAgICBjb25zdCBjaGVjayA9IGlzU2VyaWFsaXphYmxlKHRyYWNlLmRhdGEpO1xuICAgICAgaWYgKCFjaGVjay52YWxpZCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICBcIuKVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVl1xcblwiICtcbiAgICAgICAgICAgIFwi4pWRICBbTmFpdGVdIE5vbi1zZXJpYWxpemFibGUgdmFsdWUgZGV0ZWN0ZWQhICAgICAgICAgICAgICAgICAgICAgIOKVkVxcblwiICtcbiAgICAgICAgICAgIFwi4pWg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWjXFxuXCIgK1xuICAgICAgICAgICAgYOKVkSAgS2V5OiAke3RyYWNlLmtleS5wYWRFbmQoNTcpfeKVkVxcbmAgK1xuICAgICAgICAgICAgYOKVkSAgUmVhc29uOiAkeyhjaGVjay5yZWFzb24gPz8gXCJ1bmtub3duXCIpLnNsaWNlKDAsIDU0KS5wYWRFbmQoNTQpfeKVkVxcbmAgK1xuICAgICAgICAgICAgYOKVkSAgTG9jYXRpb246ICR7KHRyYWNlLnN0YWNrWzBdPy5maWxlUGF0aCA/PyBcInVua25vd25cIikuc2xpY2UoLTUxKS5wYWRFbmQoNTIpfeKVkVxcbmAgK1xuICAgICAgICAgICAgYOKVkSAgTGluZTogJHtTdHJpbmcodHJhY2Uuc3RhY2tbMF0/LmxpbmVOdW1iZXIgPz8gMCkucGFkRW5kKDU2KX3ilZFcXG5gICtcbiAgICAgICAgICAgIFwi4pWg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWjXFxuXCIgK1xuICAgICAgICAgICAgXCLilZEgIE5haXRlLnQoKSBhY2NlcHRzIGFueSB0eXBlIG9mIHZhbHVlLiBIb3dldmVyLCB2YWx1ZXMgd2lsbCAgICAg4pWRXFxuXCIgK1xuICAgICAgICAgICAgXCLilZEgIGJlIHNlcmlhbGl6ZWQgdG8gSlNPTiB3aGVuIGV4cG9ydGVkIHZpYSBOYWl0ZS5nZXRBbGxUcmFjZXMoKS4g4pWRXFxuXCIgK1xuICAgICAgICAgICAgXCLilZrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZ1cXG5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJhY2VzLm1hcCgodHJhY2UpID0+ICh7XG4gICAgICBrZXk6IHRyYWNlLmtleSxcbiAgICAgIHZhbHVlOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRyYWNlLmRhdGEgPz8gXCJcIikpLCAvLyDsp4HroKztmZQg6rCA64ql7ZWcIOqyg+unjCDrgqjquLDroKTripQg64iI66y86rKo7Jq0IOuFuOugpSwsIOyViOq3uOufrOuptCB0YXNrLm1ldGHsl5Ag65Ok7Ja06rCA7IScIO2UhOuhnOyEuOyKpOqwhCDthrXsi6Ag7ZWgIOuVjCDrrLjsoJwg7IOd6riw6rGw65Og7JqULCxcbiAgICAgIGZpbGVQYXRoOiB0cmFjZS5zdGFja1swXT8uZmlsZVBhdGggPz8gXCJcIixcbiAgICAgIGxpbmVOdW1iZXI6IHRyYWNlLnN0YWNrWzBdPy5saW5lTnVtYmVyID8/IDAsXG4gICAgICBhdDogdHJhY2UuYXQudG9JU09TdHJpbmcoKSxcbiAgICB9KSk7XG4gIH1cblxuICAvLyDtirnsoJUg7YKkIOyCreygnO2VmOq4sFxuICBkZWwoa2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gU29uYW11LmdldENvbnRleHQoKTtcbiAgICBpZiAoIWNvbnRleHQ/Lm5haXRlU3RvcmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29udGV4dC5uYWl0ZVN0b3JlLmRlbGV0ZShrZXkpO1xuICB9XG5cbiAgY3JlYXRlU3RvcmUoKTogTmFpdGVTdG9yZSB7XG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBOYWl0ZVRyYWNlW10+KCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IE5haXRlID0gbmV3IE5haXRlQ2xhc3MoKTtcbiJdLCJuYW1lcyI6WyJnZXRMb2dnZXIiLCJnZXQiLCJTb25hbXUiLCJjb252ZXJ0TmFpdGVLZXlUb0NhdGVnb3J5IiwiaXNTZXJpYWxpemFibGUiLCJleHRyYWN0Q2FsbFN0YWNrIiwic3RhY2siLCJFcnJvciIsImxpbmVzIiwic3BsaXQiLCJmcmFtZXMiLCJzbGljZSIsIm1hcCIsInBhcnNlU3RhY2tGcmFtZSIsImZpbHRlciIsImZyYW1lIiwiY29udGV4dEluZGV4IiwiZmluZEluZGV4IiwiZiIsImZ1bmN0aW9uTmFtZSIsImluY2x1ZGVzIiwibGluZSIsIm1hdGNoV2l0aEZ1bmMiLCJtYXRjaCIsImZpbGVQYXRoIiwibGluZU51bWJlclN0ciIsImxpbmVOdW1iZXIiLCJOdW1iZXIiLCJwYXJzZUludCIsIm1hdGNoTm9GdW5jIiwibWF0Y2hlc1BhdHRlcm4iLCJrZXkiLCJwYXR0ZXJuIiwia2V5UGFydHMiLCJwYXR0ZXJuUGFydHMiLCJsZW5ndGgiLCJwcmVmaXhQYXJ0cyIsImV2ZXJ5IiwicGFydCIsImkiLCJOYWl0ZVF1ZXJ5IiwidHJhY2VzIiwiZnJvbUZpbGUiLCJmaWxlTmFtZSIsImZpbHRlcmVkIiwidCIsInNvbWUiLCJlbmRzV2l0aCIsImZyb21GdW5jdGlvbiIsImZ1bmNOYW1lIiwib3B0aW9ucyIsImZyb20iLCJ3aGVyZSIsInBhdGgiLCJvcGVyYXRvciIsInZhbHVlIiwidHJhY2UiLCJhY3R1YWwiLCJyZXN1bHQiLCJkYXRhIiwiZmlyc3QiLCJsYXN0IiwiYXQiLCJpbmRleCIsImdldFRyYWNlcyIsIk5haXRlQ2xhc3MiLCJuYW1lIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiY29udGV4dCIsImdldENvbnRleHQiLCJzdG9yZSIsIm5haXRlU3RvcmUiLCJEYXRlIiwiZXhpc3RpbmciLCJkZWJ1ZyIsInNldCIsImtleVBhdHRlcm4iLCJhbGxUcmFjZXMiLCJlbnRyaWVzIiwicHVzaCIsImdldEFsbCIsInN0YXJ0c1dpdGgiLCJnZXRBbGxUcmFjZXMiLCJBcnJheSIsInZhbHVlcyIsImZsYXQiLCJjaGVjayIsInZhbGlkIiwiY29uc29sZSIsIndhcm4iLCJwYWRFbmQiLCJyZWFzb24iLCJTdHJpbmciLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJ0b0lTT1N0cmluZyIsImRlbCIsImRlbGV0ZSIsImNyZWF0ZVN0b3JlIiwiTWFwIiwiTmFpdGUiXSwibWFwcGluZ3MiOiJBQUFBLGtGQUFrRixHQUVsRixTQUFTQSxTQUFTLFFBQVEsbUJBQW1CO0FBQzdDLFNBQVNDLEdBQUcsUUFBUSxVQUFVO0FBQzlCLFNBQVNDLE1BQU0sUUFBUSxtQkFBZ0I7QUFFdkMsU0FBU0MseUJBQXlCLFFBQVEsd0JBQXFCO0FBQy9ELFNBQVNDLGNBQWMsUUFBUSwyQkFBd0I7QUFvQnZEOzs7OztDQUtDLEdBQ0QsU0FBU0M7SUFDUCxNQUFNQyxRQUFRLElBQUlDLFFBQVFELEtBQUs7SUFDL0IsSUFBSSxDQUFDQSxPQUFPLE9BQU8sRUFBRTtJQUVyQixNQUFNRSxRQUFRRixNQUFNRyxLQUFLLENBQUM7SUFFMUIsVUFBVTtJQUNWLGVBQWU7SUFDZiw2QkFBNkI7SUFDN0Isb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixNQUFNQyxTQUFTRixNQUNaRyxLQUFLLENBQUMsR0FDTkMsR0FBRyxDQUFDQyxpQkFDSkMsTUFBTSxDQUFDLENBQUNDLFFBQStCQSxVQUFVO0lBRXBELG9DQUFvQztJQUNwQyxNQUFNQyxlQUFlTixPQUFPTyxTQUFTLENBQ25DLENBQUNDLElBQ0NBLEVBQUVDLFlBQVksRUFBRUMsU0FBUyxxQkFBcUJGLEVBQUVDLFlBQVksRUFBRUMsU0FBUztJQUczRSxPQUFPSixnQkFBZ0IsSUFBSU4sT0FBT0MsS0FBSyxDQUFDLEdBQUdLLGVBQWUsS0FBS047QUFDakU7QUFFQTs7OztDQUlDLEdBQ0QsU0FBU0csZ0JBQWdCUSxJQUFZO0lBQ25DLDREQUE0RDtJQUM1RCxNQUFN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
@@ -0,0 +1,4 @@
1
+ export { clearSSRRoutes, getSSRRoutes, matchSSRRoute, registerSSR, } from "./registry";
2
+ export { renderSSR } from "./renderer";
3
+ export type { PreloadConfig, PreloadedData, SSRQuery, SSRRoute, } from "./types";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ssr/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,YAAY,EACV,aAAa,EACb,aAAa,EACb,QAAQ,EACR,QAAQ,GACT,MAAM,SAAS,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { clearSSRRoutes, getSSRRoutes, matchSSRRoute, registerSSR } from "./registry.js";
2
+ export { renderSSR } from "./renderer.js";
3
+
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zc3IvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgY2xlYXJTU1JSb3V0ZXMsXG4gIGdldFNTUlJvdXRlcyxcbiAgbWF0Y2hTU1JSb3V0ZSxcbiAgcmVnaXN0ZXJTU1IsXG59IGZyb20gXCIuL3JlZ2lzdHJ5XCI7XG5leHBvcnQgeyByZW5kZXJTU1IgfSBmcm9tIFwiLi9yZW5kZXJlclwiO1xuZXhwb3J0IHR5cGUge1xuICBQcmVsb2FkQ29uZmlnLFxuICBQcmVsb2FkZWREYXRhLFxuICBTU1JRdWVyeSxcbiAgU1NSUm91dGUsXG59IGZyb20gXCIuL3R5cGVzXCI7XG4iXSwibmFtZXMiOlsiY2xlYXJTU1JSb3V0ZXMiLCJnZXRTU1JSb3V0ZXMiLCJtYXRjaFNTUlJvdXRlIiwicmVnaXN0ZXJTU1IiLCJyZW5kZXJTU1IiXSwibWFwcGluZ3MiOiJBQUFBLFNBQ0VBLGNBQWMsRUFDZEMsWUFBWSxFQUNaQyxhQUFhLEVBQ2JDLFdBQVcsUUFDTixnQkFBYTtBQUNwQixTQUFTQyxTQUFTLFFBQVEsZ0JBQWEifQ==