sonamu 0.11.16 → 0.13.0

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 (322) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +1 -2
  2. package/dist/ai/agents/agent.js +2 -3
  3. package/dist/ai/agents/index.js +1 -2
  4. package/dist/ai/index.js +1 -2
  5. package/dist/ai/providers/rtzr/api.js +1 -2
  6. package/dist/ai/providers/rtzr/error.js +2 -3
  7. package/dist/ai/providers/rtzr/model.js +1 -2
  8. package/dist/ai/providers/rtzr/options.js +1 -2
  9. package/dist/ai/providers/rtzr/provider.js +1 -2
  10. package/dist/ai/providers/rtzr/utils.js +1 -2
  11. package/dist/api/base-frame.js +4 -4
  12. package/dist/api/caster.d.ts +1 -1
  13. package/dist/api/caster.d.ts.map +1 -1
  14. package/dist/api/caster.js +9 -9
  15. package/dist/api/code-converters.js +6 -5
  16. package/dist/api/config.d.ts +1 -1
  17. package/dist/api/config.d.ts.map +1 -1
  18. package/dist/api/config.js +2 -3
  19. package/dist/api/context.d.ts +2 -3
  20. package/dist/api/context.d.ts.map +1 -1
  21. package/dist/api/context.js +2 -3
  22. package/dist/api/decorators.js +2 -3
  23. package/dist/api/http-validator.js +2 -3
  24. package/dist/api/index.js +8 -3
  25. package/dist/api/secret.js +1 -2
  26. package/dist/api/sonamu.d.ts +3 -5
  27. package/dist/api/sonamu.d.ts.map +1 -1
  28. package/dist/api/sonamu.js +30 -24
  29. package/dist/api/validator.js +1 -2
  30. package/dist/api/websocket-helpers.js +2 -3
  31. package/dist/auth/audit-log/builders.js +1 -2
  32. package/dist/auth/audit-log/client-ip.js +2 -3
  33. package/dist/auth/audit-log/events.js +1 -2
  34. package/dist/auth/audit-log/plugin.d.ts.map +1 -1
  35. package/dist/auth/audit-log/plugin.js +2 -3
  36. package/dist/auth/audit-log-ingestor.js +2 -3
  37. package/dist/auth/auth-generator.js +2 -3
  38. package/dist/auth/better-auth-entities.js +1 -2
  39. package/dist/auth/better-auth-request.js +2 -3
  40. package/dist/auth/index.js +2 -3
  41. package/dist/auth/knex-adapter.js +2 -3
  42. package/dist/auth/plugins/entity-definitions/admin.js +1 -2
  43. package/dist/auth/plugins/entity-definitions/anonymous.js +1 -2
  44. package/dist/auth/plugins/entity-definitions/api-key.js +1 -2
  45. package/dist/auth/plugins/entity-definitions/audit-log.js +1 -2
  46. package/dist/auth/plugins/entity-definitions/index.js +1 -2
  47. package/dist/auth/plugins/entity-definitions/jwt.js +1 -2
  48. package/dist/auth/plugins/entity-definitions/organization.js +1 -2
  49. package/dist/auth/plugins/entity-definitions/passkey.js +1 -2
  50. package/dist/auth/plugins/entity-definitions/phone-number.js +1 -2
  51. package/dist/auth/plugins/entity-definitions/sso.js +1 -2
  52. package/dist/auth/plugins/entity-definitions/two-factor.js +1 -2
  53. package/dist/auth/plugins/entity-definitions/username.js +1 -2
  54. package/dist/auth/plugins/wrappers/admin.d.ts +33 -32
  55. package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
  56. package/dist/auth/plugins/wrappers/admin.js +2 -3
  57. package/dist/auth/plugins/wrappers/anonymous.js +2 -3
  58. package/dist/auth/plugins/wrappers/api-key.js +2 -3
  59. package/dist/auth/plugins/wrappers/jwt.js +2 -3
  60. package/dist/auth/plugins/wrappers/organization.js +2 -3
  61. package/dist/auth/plugins/wrappers/passkey.js +2 -3
  62. package/dist/auth/plugins/wrappers/phone-number.d.ts +43 -1
  63. package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
  64. package/dist/auth/plugins/wrappers/phone-number.js +2 -3
  65. package/dist/auth/plugins/wrappers/sso.d.ts +138 -187
  66. package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -1
  67. package/dist/auth/plugins/wrappers/sso.js +1 -2
  68. package/dist/auth/plugins/wrappers/two-factor.d.ts +51 -10
  69. package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
  70. package/dist/auth/plugins/wrappers/two-factor.js +2 -3
  71. package/dist/auth/plugins/wrappers/username.d.ts +39 -5
  72. package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
  73. package/dist/auth/plugins/wrappers/username.js +2 -3
  74. package/dist/bin/build-config.js +5 -5
  75. package/dist/bin/compiler-policy.js +2 -3
  76. package/dist/bin/fixture.js +7 -5
  77. package/dist/bin/hmr-hook-register.js +1 -2
  78. package/dist/bin/migrate-targets.js +2 -3
  79. package/dist/bin/test-command.js +2 -3
  80. package/dist/bin/ts-loader-register.js +2 -3
  81. package/dist/bin/ts-loader-registration.js +2 -3
  82. package/dist/bin/typecheck-web.js +2 -3
  83. package/dist/cache/cache-manager.js +1 -2
  84. package/dist/cache/decorator.js +2 -3
  85. package/dist/cache/drivers.js +1 -2
  86. package/dist/cache/index.js +2 -3
  87. package/dist/cache-control/cache-control.js +1 -2
  88. package/dist/code-formatting/index.js +2 -3
  89. package/dist/code-formatting/oxfmt.js +2 -3
  90. package/dist/code-formatting/oxlint.js +2 -3
  91. package/dist/compress/compress.js +1 -2
  92. package/dist/compress/index.js +2 -2
  93. package/dist/compress/types.d.ts +1 -1
  94. package/dist/compress/types.d.ts.map +1 -1
  95. package/dist/cone/cone-generator.js +2 -3
  96. package/dist/database/_batch_update.js +1 -2
  97. package/dist/database/base-model.js +4 -4
  98. package/dist/database/db.js +4 -4
  99. package/dist/database/knex.js +2 -3
  100. package/dist/database/puri-wrapper.js +2 -3
  101. package/dist/database/puri.js +23 -22
  102. package/dist/database/puri.types.js +1 -2
  103. package/dist/database/transaction-context.js +1 -2
  104. package/dist/database/upsert-builder.js +2 -3
  105. package/dist/dict/en.js +2 -3
  106. package/dist/dict/index.js +3 -3
  107. package/dist/dict/ko.js +2 -3
  108. package/dist/dict/rc-keys.js +1 -2
  109. package/dist/dict/sd.js +2 -3
  110. package/dist/dict/sonamu-dictionary.js +7 -6
  111. package/dist/dict/utils.js +2 -3
  112. package/dist/entity/entity-manager.d.ts +66 -66
  113. package/dist/entity/entity-manager.js +4 -4
  114. package/dist/entity/entity-template-cone.js +2 -3
  115. package/dist/entity/entity.js +21 -18
  116. package/dist/env.js +1 -2
  117. package/dist/exceptions/error-handler.d.ts.map +1 -1
  118. package/dist/exceptions/error-handler.js +2 -3
  119. package/dist/exceptions/so-exceptions.js +2 -3
  120. package/dist/filter/index.js +3 -2
  121. package/dist/filter/types.js +1 -2
  122. package/dist/filter/utils.js +7 -6
  123. package/dist/index.d.ts +1 -0
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +42 -6
  126. package/dist/logger/category.js +2 -3
  127. package/dist/logger/configure.js +5 -5
  128. package/dist/migration/code-generation.js +23 -16
  129. package/dist/migration/index-where-predicate.js +2 -3
  130. package/dist/migration/migration-set.js +2 -3
  131. package/dist/migration/migrator.js +2 -3
  132. package/dist/migration/postgresql-schema-reader.js +6 -9
  133. package/dist/migration/slack-confirm.js +2 -3
  134. package/dist/naite/naite-reporter.js +2 -3
  135. package/dist/naite/naite.js +10 -8
  136. package/dist/runtime-type.js +2 -3
  137. package/dist/ssr/hmr-opt-out.js +1 -2
  138. package/dist/ssr/index.js +7 -4
  139. package/dist/ssr/registry.js +1 -2
  140. package/dist/ssr/renderer.js +2 -3
  141. package/dist/storage/base-file.js +1 -2
  142. package/dist/storage/buffered-file.js +2 -3
  143. package/dist/storage/drivers.js +1 -2
  144. package/dist/storage/index.js +2 -3
  145. package/dist/storage/s3-driver.js +1 -2
  146. package/dist/storage/storage-manager.js +2 -3
  147. package/dist/storage/uploaded-file.js +2 -3
  148. package/dist/stream/__tests__/ws-test-helpers.d.ts +108 -0
  149. package/dist/stream/__tests__/ws-test-helpers.d.ts.map +1 -0
  150. package/dist/stream/__tests__/ws-test-helpers.js +259 -0
  151. package/dist/stream/index.d.ts +1 -0
  152. package/dist/stream/index.d.ts.map +1 -1
  153. package/dist/stream/index.js +15 -4
  154. package/dist/stream/sse.js +1 -2
  155. package/dist/stream/ws-audience-resolver.d.ts +8 -5
  156. package/dist/stream/ws-audience-resolver.d.ts.map +1 -1
  157. package/dist/stream/ws-audience-resolver.js +17 -15
  158. package/dist/stream/ws-audience.js +1 -2
  159. package/dist/stream/ws-cluster-bus.d.ts +9 -4
  160. package/dist/stream/ws-cluster-bus.d.ts.map +1 -1
  161. package/dist/stream/ws-cluster-bus.js +2 -3
  162. package/dist/stream/ws-core.d.ts +10 -0
  163. package/dist/stream/ws-core.d.ts.map +1 -1
  164. package/dist/stream/ws-delivery.d.ts +30 -4
  165. package/dist/stream/ws-delivery.d.ts.map +1 -1
  166. package/dist/stream/ws-delivery.js +200 -54
  167. package/dist/stream/ws-frame.d.ts +15 -0
  168. package/dist/stream/ws-frame.d.ts.map +1 -0
  169. package/dist/stream/ws-frame.js +28 -0
  170. package/dist/stream/ws-local-connection-store.d.ts +4 -4
  171. package/dist/stream/ws-local-connection-store.d.ts.map +1 -1
  172. package/dist/stream/ws-local-connection-store.js +3 -4
  173. package/dist/stream/ws-presence-index.d.ts +36 -0
  174. package/dist/stream/ws-presence-index.d.ts.map +1 -0
  175. package/dist/stream/ws-presence-index.js +176 -0
  176. package/dist/stream/ws-presence-store.d.ts +39 -39
  177. package/dist/stream/ws-presence-store.d.ts.map +1 -1
  178. package/dist/stream/ws-presence-store.js +23 -154
  179. package/dist/stream/ws-registry.d.ts +45 -17
  180. package/dist/stream/ws-registry.d.ts.map +1 -1
  181. package/dist/stream/ws-registry.js +170 -62
  182. package/dist/stream/ws-session-id.d.ts +14 -0
  183. package/dist/stream/ws-session-id.d.ts.map +1 -0
  184. package/dist/stream/ws-session-id.js +36 -0
  185. package/dist/stream/ws-telemetry-memory.js +3 -4
  186. package/dist/stream/ws-telemetry-trace.js +1 -2
  187. package/dist/stream/ws-telemetry.js +2 -3
  188. package/dist/stream/ws.d.ts +20 -10
  189. package/dist/stream/ws.d.ts.map +1 -1
  190. package/dist/stream/ws.js +60 -38
  191. package/dist/syncer/api-parser.js +2 -3
  192. package/dist/syncer/checksum.js +4 -4
  193. package/dist/syncer/code-generator.js +4 -4
  194. package/dist/syncer/entity-operations.js +2 -3
  195. package/dist/syncer/event-batcher.js +1 -2
  196. package/dist/syncer/file-copy.js +2 -3
  197. package/dist/syncer/file-patterns.js +2 -3
  198. package/dist/syncer/file-tracking.js +2 -3
  199. package/dist/syncer/filesystem-dependencies.js +1 -2
  200. package/dist/syncer/index.js +8 -2
  201. package/dist/syncer/module-loader.js +8 -6
  202. package/dist/syncer/syncer-actions.js +8 -7
  203. package/dist/syncer/syncer.js +13 -8
  204. package/dist/syncer/watcher.js +2 -3
  205. package/dist/tasks/decorator.js +1 -2
  206. package/dist/tasks/step-wrapper.js +2 -3
  207. package/dist/tasks/workflow-manager.js +2 -3
  208. package/dist/template/entity-converter.js +17 -16
  209. package/dist/template/helpers.js +2 -3
  210. package/dist/template/implementations/entity.template.js +2 -3
  211. package/dist/template/implementations/entry-server.template.js +2 -3
  212. package/dist/template/implementations/generated.template.js +2 -3
  213. package/dist/template/implementations/generated_http.template.js +6 -6
  214. package/dist/template/implementations/generated_sso.template.js +2 -3
  215. package/dist/template/implementations/http_validators.template.js +2 -3
  216. package/dist/template/implementations/init_types.template.js +2 -3
  217. package/dist/template/implementations/model.template.js +4 -4
  218. package/dist/template/implementations/model_test.template.js +2 -3
  219. package/dist/template/implementations/queries.template.js +2 -3
  220. package/dist/template/implementations/sd.template.js +2 -3
  221. package/dist/template/implementations/services.template.js +2 -3
  222. package/dist/template/implementations/view_form.template.js +12 -9
  223. package/dist/template/implementations/view_id_all_select.template.js +2 -3
  224. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  225. package/dist/template/implementations/view_list.template.js +19 -17
  226. package/dist/template/implementations/view_search_input.template.js +2 -3
  227. package/dist/template/index.js +9 -3
  228. package/dist/template/template-manager.js +2 -3
  229. package/dist/template/template-types.js +1 -2
  230. package/dist/template/template.js +2 -3
  231. package/dist/template/zod-converter.js +54 -47
  232. package/dist/testing/_relation-graph.js +2 -3
  233. package/dist/testing/bootstrap.js +2 -3
  234. package/dist/testing/data-explorer.js +2 -3
  235. package/dist/testing/dev-test-routes.js +2 -3
  236. package/dist/testing/dev-vitest-manager.js +15 -12
  237. package/dist/testing/faker-mappings.js +1 -2
  238. package/dist/testing/filesystem.js +2 -3
  239. package/dist/testing/fixture-generator.js +2 -3
  240. package/dist/testing/fixture-loader.js +1 -2
  241. package/dist/testing/fixture-manager.js +12 -9
  242. package/dist/testing/global-setup.js +5 -5
  243. package/dist/testing/index.js +6 -3
  244. package/dist/testing/naite-vitest-reporter.js +1 -2
  245. package/dist/testing/parallel-db-manager.js +2 -3
  246. package/dist/testing/vitest-helpers.js +2 -3
  247. package/dist/tooling/__tests__/helpers/sonamu-test-root.js +2 -3
  248. package/dist/tooling/cdd-service.js +1 -2
  249. package/dist/tooling/cli-tooling.js +1 -2
  250. package/dist/tooling/fixture-service.js +1 -2
  251. package/dist/tooling/index.js +1 -2
  252. package/dist/tooling/test-run-client.js +2 -3
  253. package/dist/tsdown.api.config.js +1 -2
  254. package/dist/types/types.js +2 -3
  255. package/dist/ui/ai-api.d.ts.map +1 -1
  256. package/dist/ui/ai-api.js +4 -5
  257. package/dist/ui/ai-client.d.ts +2 -2
  258. package/dist/ui/ai-client.d.ts.map +1 -1
  259. package/dist/ui/ai-client.js +9 -8
  260. package/dist/ui/api.d.ts.map +1 -1
  261. package/dist/ui/api.js +11 -8
  262. package/dist/ui/async-route.js +1 -2
  263. package/dist/ui/cdd-service.js +22 -21
  264. package/dist/ui/migrations-api.js +6 -5
  265. package/dist/ui-web/assets/index-QDMyy31K.js +180 -0
  266. package/dist/ui-web/assets/index-dV7akMFB.css +1 -0
  267. package/dist/ui-web/index.html +2 -2
  268. package/dist/utils/async-utils.js +1 -2
  269. package/dist/utils/class-name.js +1 -2
  270. package/dist/utils/console-util.js +1 -2
  271. package/dist/utils/controller.js +2 -3
  272. package/dist/utils/esm-utils.js +1 -2
  273. package/dist/utils/fs-utils.js +2 -3
  274. package/dist/utils/lodash-able.js +1 -2
  275. package/dist/utils/model.js +1 -2
  276. package/dist/utils/object-utils.js +2 -3
  277. package/dist/utils/path-utils.js +2 -3
  278. package/dist/utils/process-utils.js +2 -3
  279. package/dist/utils/runtime-value.js +1 -2
  280. package/dist/utils/sql-parser.js +2 -3
  281. package/dist/utils/type-utils.js +8 -8
  282. package/dist/utils/utils.js +2 -3
  283. package/dist/utils/zod-error.js +2 -3
  284. package/dist/vector/chunking.js +1 -2
  285. package/dist/vector/config.js +1 -2
  286. package/dist/vector/embedding.js +4 -4
  287. package/package.json +63 -63
  288. package/src/ai/agents/agent.ts +1 -1
  289. package/src/api/__tests__/sonamu.plugins.test.ts +11 -1
  290. package/src/api/__tests__/sonamu.websocket-routes.test.ts +234 -0
  291. package/src/api/__tests__/sonamu.websocket.test.ts +241 -24
  292. package/src/api/config.ts +1 -1
  293. package/src/api/context.ts +2 -8
  294. package/src/api/sonamu.ts +46 -28
  295. package/src/auth/audit-log/plugin.ts +2 -0
  296. package/src/compress/types.ts +1 -1
  297. package/src/exceptions/error-handler.ts +3 -2
  298. package/src/index.ts +1 -0
  299. package/src/stream/__tests__/ws-contracts.test.ts +483 -265
  300. package/src/stream/__tests__/ws-multinode.test.ts +326 -0
  301. package/src/stream/__tests__/ws-registry-async.test.ts +855 -0
  302. package/src/stream/__tests__/ws-test-helpers.ts +360 -0
  303. package/src/stream/__tests__/ws.test.ts +342 -145
  304. package/src/stream/index.ts +1 -0
  305. package/src/stream/ws-audience-resolver.ts +21 -19
  306. package/src/stream/ws-cluster-bus.ts +12 -4
  307. package/src/stream/ws-core.ts +14 -0
  308. package/src/stream/ws-delivery.ts +321 -97
  309. package/src/stream/ws-frame.ts +39 -0
  310. package/src/stream/ws-local-connection-store.ts +10 -9
  311. package/src/stream/ws-presence-index.ts +273 -0
  312. package/src/stream/ws-presence-store.ts +64 -284
  313. package/src/stream/ws-registry.ts +272 -85
  314. package/src/stream/ws-session-id.ts +39 -0
  315. package/src/stream/ws.ts +91 -50
  316. package/src/template/implementations/model.template.ts +3 -3
  317. package/src/template/implementations/view_list.template.ts +12 -13
  318. package/src/ui/ai-api.ts +4 -2
  319. package/src/ui/ai-client.ts +2 -2
  320. package/src/ui/api.ts +58 -62
  321. package/dist/ui-web/assets/index-BMdIyKXS.css +0 -1
  322. package/dist/ui-web/assets/index-LpE8u19O.js +0 -178
@@ -1,6 +1,6 @@
1
1
  import inflection from "inflection";
2
2
  import { randomUUID } from "node:crypto";
3
- //#region src/tasks/decorator.ts
3
+ // src/tasks/decorator.ts
4
4
  function workflow(options, fn) {
5
5
  const decorated = (workflowFunction) => {
6
6
  const id = randomUUID();
@@ -25,7 +25,6 @@ function workflow(options, fn) {
25
25
  if (!fn) return decorated;
26
26
  return decorated(fn);
27
27
  }
28
- //#endregion
29
28
  export { workflow };
30
29
 
31
30
  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9yLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrcy9kZWNvcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuXG5pbXBvcnQge1xuICB0eXBlIFJldHJ5UG9saWN5LFxuICB0eXBlIFNjaGVtYUlucHV0LFxuICB0eXBlIFNjaGVtYU91dHB1dCxcbiAgdHlwZSBTdGFuZGFyZFNjaGVtYVYxLFxuICB0eXBlIFdvcmtmbG93U3BlYyxcbn0gZnJvbSBcIkBzb25hbXUta2l0L3Rhc2tzL2ludGVybmFsXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuXG5pbXBvcnQgeyB0eXBlIEV4ZWN1dGFibGUgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgV29ya2Zsb3dGdW5jdGlvbiB9IGZyb20gXCIuL3dvcmtmbG93LW1hbmFnZXJcIjtcblxuLy8g7JuM7YGs7ZSM66Gc7Jqw7J2YIOuplO2DgOuNsOydtO2EsCDqsJ3ssrRcbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dNZXRhZGF0YTxSYXdJbnB1dCA9IHVua25vd24sIElucHV0ID0gdW5rbm93biwgT3V0cHV0ID0gdW5rbm93bj4ge1xuICB0eXBlOiBcIndvcmtmbG93XCI7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgc2NoZW1hOiBTdGFuZGFyZFNjaGVtYVYxPFJhd0lucHV0LCBJbnB1dD4gfCB1bmRlZmluZWQ7XG4gIHNjaGVkdWxlczoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBleHByZXNzaW9uOiBzdHJpbmc7XG4gICAgaW5wdXQ6IEV4ZWN1dGFibGU8UmF3SW5wdXQgfCB1bmRlZmluZWQ+O1xuICB9W107XG4gIGZuOiBXb3JrZmxvd0Z1bmN0aW9uPElucHV0LCBPdXRwdXQ+O1xuICByZXRyeVBvbGljeT86IFJldHJ5UG9saWN5O1xufVxuXG4vLyDsm4ztgaztlIzroZzsmrAg7KCV7J2YIOqzvOygleyXkOyEnOydmCDsmLXshZhcbmV4cG9ydCB0eXBlIERlZmluZVdvcmtmbG93T3B0aW9uczxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVFNjaGVtYSBleHRlbmRzIFN0YW5kYXJkU2NoZW1hVjEgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4+ID0gT21pdDxcbiAgV29ya2Zsb3dTcGVjPFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD4sIE91dHB1dCwgU2NoZW1hSW5wdXQ8VFNjaGVtYSwgSW5wdXQ+PixcbiAgXCJuYW1lXCJcbj4gJiB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNjaGVkdWxlcz86IHtcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIGV4cHJlc3Npb246IHN0cmluZztcbiAgICBpbnB1dD86IEV4ZWN1dGFibGU8U2NoZW1hSW5wdXQ8VFNjaGVtYSwgSW5wdXQ+IHwgdW5kZWZpbmVkPjtcbiAgfVtdO1xuICByZXRyeVBvbGljeT86IFJldHJ5UG9saWN5O1xufTtcblxuLy8g7JuM7YGs7ZSM66Gc7JqwIOygleydmOulvCDsnITtlZwg642w7L2U66CI7J207YSwLFxuLy8g7J206rKD65Ok7J2AIHN5bmNlcuyXkOyEnCDtlZzrsojsl5AgbG9hZO2VnCDri6TsnYwsIFdvcmtmbG93TWFuYWdlcuyXkOyEnCBzeW5jaHJvbml6ZeulvCDthrXtlbQg65Ox66Gd65CoLlxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93PElucHV0LCBPdXRwdXQsIFRTY2hlbWEgZXh0ZW5kcyBTdGFuZGFyZFNjaGVtYVYxIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgb3B0aW9uczogRGVmaW5lV29ya2Zsb3dPcHRpb25zPElucHV0LCBPdXRwdXQsIFRTY2hlbWE+LFxuKTogKFxuICBmbjogV29ya2Zsb3dGdW5jdGlvbjxTY2hlbWFPdXRwdXQ8VFNjaGVtYSwgSW5wdXQ+LCBPdXRwdXQ+LFxuKSA9PiBXb3JrZmxvd01ldGFkYXRhPFNjaGVtYUlucHV0PFRTY2hlbWEsIElucHV0PiwgU2NoZW1hT3V0cHV0PFRTY2hlbWEsIElucHV0PiwgT3V0cHV0PjtcbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvdzxJbnB1dCwgT3V0cHV0LCBUU2NoZW1hIGV4dGVuZHMgU3RhbmRhcmRTY2hlbWFWMSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gIG9wdGlvbnM6IERlZmluZVdvcmtmbG93T3B0aW9uczxJbnB1dCwgT3V0cHV0LCBUU2NoZW1hPixcbiAgZm46IFdvcmtmbG93RnVuY3Rpb248U2NoZW1hT3V0cHV0PFRTY2hlbWEsIElucHV0PiwgT3V0cHV0Pixcbik6IFdvcmtmbG93TWV0YWRhdGE8U2NoZW1hSW5wdXQ8VFNjaGVtYSwgSW5wdXQ+LCBTY2hlbWFPdXRwdXQ8VFNjaGVtYSwgSW5wdXQ+LCBPdXRwdXQ+O1xuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93PElucHV0LCBPdXRwdXQsIFRTY2hlbWEgZXh0ZW5kcyBTdGFuZGFyZFNjaGVtYVYxIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgb3B0aW9uczogRGVmaW5lV29ya2Zsb3dPcHRpb25zPElucHV0LCBPdXRwdXQsIFRTY2hlbWE+LFxuICBmbj86IFdvcmtmbG93RnVuY3Rpb248U2NoZW1hT3V0cHV0PFRTY2hlbWEsIElucHV0PiwgT3V0cHV0Pixcbik6XG4gIHwgV29ya2Zsb3dNZXRhZGF0YTxTY2hlbWFJbnB1dDxUU2NoZW1hLCBJbnB1dD4sIFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD4sIE91dHB1dD5cbiAgfCAoKFxuICAgICAgZm46IFdvcmtmbG93RnVuY3Rpb248U2NoZW1hT3V0cHV0PFRTY2hlbWEsIElucHV0PiwgT3V0cHV0PixcbiAgICApID0+IFdvcmtmbG93TWV0YWRhdGE8U2NoZW1hSW5wdXQ8VFNjaGVtYSwgSW5wdXQ+LCBTY2hlbWFPdXRwdXQ8VFNjaGVtYSwgSW5wdXQ+LCBPdXRwdXQ+KSB7XG4gIGNvbnN0IGRlY29yYXRlZCA9ICh3b3JrZmxvd0Z1bmN0aW9uOiBXb3JrZmxvd0Z1bmN0aW9uPFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD4sIE91dHB1dD4pID0+IHtcbiAgICBjb25zdCBpZCA9IHJhbmRvbVVVSUQoKTtcbiAgICBjb25zdCB3b3JrZmxvd05hbWUgPSBvcHRpb25zLm5hbWUgPz8gaW5mbGVjdGlvbi51bmRlcnNjb3JlKHdvcmtmbG93RnVuY3Rpb24ubmFtZSk7XG5cbiAgICBjb25zdCBtZXRhZGF0YTogV29ya2Zsb3dNZXRhZGF0YTxcbiAgICAgIFNjaGVtYUlucHV0PFRTY2hlbWEsIElucHV0PixcbiAgICAgIFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD4sXG4gICAgICBPdXRwdXRcbiAgICA+ID0ge1xuICAgICAgdHlwZTogXCJ3b3JrZmxvd1wiIGFzIGNvbnN0LFxuICAgICAgaWQsXG4gICAgICBuYW1lOiB3b3JrZmxvd05hbWUsXG4gICAgICBzY2hlbWE6IG9wdGlvbnMuc2NoZW1hLFxuICAgICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IG51bGwsXG4gICAgICBzY2hlZHVsZXM6IChvcHRpb25zLnNjaGVkdWxlcyA/PyBbXSkubWFwKChzY2hlZHVsZSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IHNjaGVkdWxlLm5hbWUgPz8gYCR7d29ya2Zsb3dOYW1lfVske3NjaGVkdWxlLmV4cHJlc3Npb259XWAsXG4gICAgICAgICAgZXhwcmVzc2lvbjogc2NoZWR1bGUuZXhwcmVzc2lvbixcbiAgICAgICAgICBpbnB1dDogc2NoZWR1bGUuaW5wdXQsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIGZuOiB3b3JrZmxvd0Z1bmN0aW9uLFxuICAgICAgcmV0cnlQb2xpY3k6IG9wdGlvbnMucmV0cnlQb2xpY3ksXG4gICAgfTtcblxuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcblxuICBpZiAoIWZuKSB7XG4gICAgcmV0dXJuIGRlY29yYXRlZDtcbiAgfVxuXG4gIHJldHVybiBkZWNvcmF0ZWQoZm4pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUEyREEsU0FBZ0IsU0FDZCxTQUNBLElBSzRGO0NBQzVGLE1BQU0sYUFBYSxxQkFBNkU7RUFDOUYsTUFBTSxLQUFLLFdBQVc7RUFDdEIsTUFBTSxlQUFlLFFBQVEsUUFBUSxXQUFXLFdBQVcsaUJBQWlCLElBQUk7RUF1QmhGLE9BQU87R0FoQkwsTUFBTTtHQUNOO0dBQ0EsTUFBTTtHQUNOLFFBQVEsUUFBUTtHQUNoQixTQUFTLFFBQVEsV0FBVztHQUM1QixZQUFZLFFBQVEsYUFBYSxDQUFDLEVBQUEsQ0FBRyxLQUFLLGFBQWE7SUFDckQsT0FBTztLQUNMLE1BQU0sU0FBUyxRQUFRLEdBQUcsYUFBYSxHQUFHLFNBQVMsV0FBVztLQUM5RCxZQUFZLFNBQVM7S0FDckIsT0FBTyxTQUFTO0lBQ2xCO0dBQ0YsQ0FBQztHQUNELElBQUk7R0FDSixhQUFhLFFBQVE7RUFHaEI7Q0FDVDtDQUVBLElBQUksQ0FBQyxJQUNILE9BQU87Q0FHVCxPQUFPLFVBQVUsRUFBRTtBQUNyQiJ9
@@ -1,6 +1,6 @@
1
1
  import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
2
  import inflection from "inflection";
3
- //#region src/tasks/step-wrapper.ts
3
+ // src/tasks/step-wrapper.ts
4
4
  var StepWrapper;
5
5
  var init_step_wrapper = __esmMin((() => {
6
6
  StepWrapper = class {
@@ -36,8 +36,7 @@ var init_step_wrapper = __esmMin((() => {
36
36
  }
37
37
  };
38
38
  }));
39
- //#endregion
40
39
  init_step_wrapper();
41
40
  export { StepWrapper, init_step_wrapper };
42
41
 
43
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC13cmFwcGVyLmpzIiwibmFtZXMiOlsiI3N0ZXBBcGkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFza3Mvc3RlcC13cmFwcGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRHVyYXRpb25TdHJpbmcsIHR5cGUgU3RlcEFwaSB9IGZyb20gXCJAc29uYW11LWtpdC90YXNrcy9pbnRlcm5hbFwiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcblxuZXhwb3J0IHR5cGUgU3RlcEZ1bmN0aW9uPFRBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBUUmVzdWx0PiA9ICguLi5hcmdzOiBUQXJncykgPT4gVFJlc3VsdDtcbmV4cG9ydCB0eXBlIFJ1bm5hYmxlU3RlcDxUQXJncyBleHRlbmRzIHVua25vd25bXSwgVFJlc3VsdD4gPSB7XG4gIHJ1bjogU3RlcEZ1bmN0aW9uPFRBcmdzLCBQcm9taXNlPFRSZXN1bHQ+Pjtcbn07XG5cbmludGVyZmFjZSBTdGVwQ29uZmlnIHtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBNZXRob2ROYW1lczxULCBUS2V5IGV4dGVuZHMga2V5b2YgVD4gPSBUW1RLZXldIGV4dGVuZHMgKFxuICAuLi5hcmdzOiBpbmZlciBfVEFyZ3NcbikgPT4gaW5mZXIgX1RSZXN1bHRcbiAgPyBUS2V5XG4gIDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIE1ldGhvZEFyZ3VtZW50czxULCBUS2V5IGV4dGVuZHMga2V5b2YgVD4gPSBUW1RLZXldIGV4dGVuZHMgKFxuICAuLi5hcmdzOiBpbmZlciBUQXJnc1xuKSA9PiBpbmZlciBfVFJlc3VsdFxuICA/IFRBcmdzXG4gIDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIE1ldGhvZFJldHVyblR5cGU8VCwgVEtleSBleHRlbmRzIGtleW9mIFQ+ID0gVFtUS2V5XSBleHRlbmRzIChcbiAgdGhpczogVCxcbiAgLi4uYXJnczogaW5mZXIgX1RBcmdzXG4pID0+IGluZmVyIFRSZXN1bHRcbiAgPyBUUmVzdWx0XG4gIDogbmV2ZXI7XG5cbmV4cG9ydCBjbGFzcyBTdGVwV3JhcHBlciB7XG4gIHJlYWRvbmx5ICNzdGVwQXBpOiBTdGVwQXBpO1xuXG4gIGNvbnN0cnVjdG9yKHN0ZXBBcGk6IFN0ZXBBcGkpIHtcbiAgICB0aGlzLiNzdGVwQXBpID0gc3RlcEFwaTtcbiAgfVxuXG4gIGdldDxcbiAgICBULFxuICAgIFRLZXkgZXh0ZW5kcyBrZXlvZiBULFxuICAgIFRBcmdzIGV4dGVuZHMgTWV0aG9kQXJndW1lbnRzPFQsIFRLZXk+LFxuICAgIFRSZXN1bHQgZXh0ZW5kcyBNZXRob2RSZXR1cm5UeXBlPFQsIFRLZXk+LFxuICA+KGNvbmZpZzogU3RlcENvbmZpZywgb2JqZWN0OiBULCBuYW1lOiBNZXRob2ROYW1lczxULCBUS2V5Pik6IFJ1bm5hYmxlU3RlcDxUQXJncywgVFJlc3VsdD47XG4gIGdldDxcbiAgICBULFxuICAgIFRLZXkgZXh0ZW5kcyBrZXlvZiBULFxuICAgIFRBcmdzIGV4dGVuZHMgTWV0aG9kQXJndW1lbnRzPFQsIFRLZXk+LFxuICAgIFRSZXN1bHQgZXh0ZW5kcyBNZXRob2RSZXR1cm5UeXBlPFQsIFRLZXk+LFxuICA+KG9iamVjdDogVCwgbmFtZTogTWV0aG9kTmFtZXM8VCwgVEtleT4pOiBSdW5uYWJsZVN0ZXA8VEFyZ3MsIFRSZXN1bHQ+O1xuICBnZXQ8XG4gICAgVCxcbiAgICBUS2V5IGV4dGVuZHMga2V5b2YgVCxcbiAgICBUQXJncyBleHRlbmRzIE1ldGhvZEFyZ3VtZW50czxULCBUS2V5PixcbiAgICBUUmVzdWx0IGV4dGVuZHMgTWV0aG9kUmV0dXJuVHlwZTxULCBUS2V5PixcbiAgPihcbiAgICAuLi5kZWZpbml0aW9uQXJnczogW1N0ZXBDb25maWcsIFQsIE1ldGhvZE5hbWVzPFQsIFRLZXk+XSB8IFtULCBNZXRob2ROYW1lczxULCBUS2V5Pl1cbiAgKTogUnVubmFibGVTdGVwPFRBcmdzLCBUUmVzdWx0PiB7XG4gICAgbGV0IGNvbmZpZzogU3RlcENvbmZpZztcbiAgICBsZXQgZm46IFN0ZXBGdW5jdGlvbjxUQXJncywgRXhjbHVkZTxUUmVzdWx0LCBuZXZlcj4+O1xuXG4gICAgaWYgKGRlZmluaXRpb25BcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgW3Jhd09iamVjdCwgbWV0aG9kTmFtZV0gPSBkZWZpbml0aW9uQXJncztcbiAgICAgIGNvbnN0IG1ldGhvZCA9XG4gICAgICAgIC8qIFNBRkVUWTog7J6R7JeFIOuNsOy9lOugiOydtO2EsOyZgCDsm4ztgaztlIzroZwg7KCV7J2Y6rCAIOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gcmF3T2JqZWN0W1xuICAgICAgICAgIG1ldGhvZE5hbWVcbiAgICAgICAgXSBhcyBDYWxsYWJsZUZ1bmN0aW9uO1xuICAgICAgY29uZmlnID0geyBuYW1lOiBpbmZsZWN0aW9uLnVuZGVyc2NvcmUobWV0aG9kTmFtZS50b1N0cmluZygpKSB9O1xuXG4gICAgICBmbiA9ICguLi5hcmdzOiBUQXJncykgPT4gbWV0aG9kLmJpbmQocmF3T2JqZWN0KSguLi5hcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3Jhd0NvbmZpZywgcmF3T2JqZWN0LCBuYW1lXSA9IGRlZmluaXRpb25BcmdzO1xuICAgICAgY29uc3QgbWV0aG9kID1cbiAgICAgICAgLyogU0FGRVRZOiDsnpHsl4Ug642w7L2U66CI7J207YSw7JmAIOybjO2BrO2UjOuhnCDsoJXsnZjqsIAg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyByYXdPYmplY3RbXG4gICAgICAgICAgbmFtZVxuICAgICAgICBdIGFzIENhbGxhYmxlRnVuY3Rpb247XG5cbiAgICAgIGNvbmZpZyA9IHsgbmFtZTogcmF3Q29uZmlnLm5hbWUgPz8gaW5mbGVjdGlvbi51bmRlcnNjb3JlKG5hbWUudG9TdHJpbmcoKSkgfTtcbiAgICAgIGZuID0gKC4uLmFyZ3M6IFRBcmdzKSA9PiBtZXRob2QuYmluZChyYXdPYmplY3QpKC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBydW46ICgoc3RlcEFwaTogU3RlcEFwaSwgLi4uYXJnczogVEFyZ3MpID0+IHtcbiAgICAgICAgcmV0dXJuIHN0ZXBBcGkucnVuKGNvbmZpZywgKCkgPT4gZm4oLi4uYXJncykpO1xuICAgICAgfSkuYmluZChudWxsLCB0aGlzLiNzdGVwQXBpKSxcbiAgICB9O1xuICB9XG5cbiAgZGVmaW5lPFRBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBUUmVzdWx0PihcbiAgICBjb25maWc6IHsgbmFtZTogc3RyaW5nIH0sXG4gICAgZm46IFN0ZXBGdW5jdGlvbjxUQXJncywgVFJlc3VsdD4sXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBydW46ICgoc3RlcEFwaTogU3RlcEFwaSwgLi4uYXJnczogVEFyZ3MpID0+IHtcbiAgICAgICAgcmV0dXJuIHN0ZXBBcGkucnVuKGNvbmZpZywgKCkgPT4gZm4oLi4uYXJncykpO1xuICAgICAgfSkuYmluZChudWxsLCB0aGlzLiNzdGVwQXBpKSxcbiAgICB9O1xuICB9XG5cbiAgc2xlZXAobmFtZTogc3RyaW5nLCBkdXJhdGlvbjogRHVyYXRpb25TdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy4jc3RlcEFwaS5zbGVlcChuYW1lLCBkdXJhdGlvbik7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Q0ErQmEsY0FBYixNQUF5QjtFQUN2QjtFQUVBLFlBQVksU0FBa0I7R0FDNUIsS0FBS0EsV0FBVztFQUNsQjtFQWNBLElBTUUsR0FBRyxnQkFDMkI7R0FDOUIsSUFBSTtHQUNKLElBQUk7R0FFSixJQUFJLGVBQWUsV0FBVyxHQUFHO0lBQy9CLE1BQU0sQ0FBQyxXQUFXLGNBQWM7SUFDaEMsTUFBTSxTQUM0QyxVQUM5QztJQUVKLFNBQVMsRUFBRSxNQUFNLFdBQVcsV0FBVyxXQUFXLFNBQVMsQ0FBQyxFQUFFO0lBRTlELE1BQU0sR0FBRyxTQUFnQixPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJO0dBQ3pELE9BQU87SUFDTCxNQUFNLENBQUMsV0FBVyxXQUFXLFFBQVE7SUFDckMsTUFBTSxTQUM0QyxVQUM5QztJQUdKLFNBQVMsRUFBRSxNQUFNLFVBQVUsUUFBUSxXQUFXLFdBQVcsS0FBSyxTQUFTLENBQUMsRUFBRTtJQUMxRSxNQUFNLEdBQUcsU0FBZ0IsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtHQUN6RDtHQUVBLE9BQU8sRUFDTCxPQUFPLFNBQWtCLEdBQUcsU0FBZ0I7SUFDMUMsT0FBTyxRQUFRLElBQUksY0FBYyxHQUFHLEdBQUcsSUFBSSxDQUFDO0dBQzlDLEVBQUEsQ0FBRyxLQUFLLE1BQU0sS0FBS0EsUUFBUSxFQUM3QjtFQUNGO0VBRUEsT0FDRSxRQUNBLElBQ0E7R0FDQSxPQUFPLEVBQ0wsT0FBTyxTQUFrQixHQUFHLFNBQWdCO0lBQzFDLE9BQU8sUUFBUSxJQUFJLGNBQWMsR0FBRyxHQUFHLElBQUksQ0FBQztHQUM5QyxFQUFBLENBQUcsS0FBSyxNQUFNLEtBQUtBLFFBQVEsRUFDN0I7RUFDRjtFQUVBLE1BQU0sTUFBYyxVQUEwQjtHQUM1QyxPQUFPLEtBQUtBLFNBQVMsTUFBTSxNQUFNLFFBQVE7RUFDM0M7Q0FDRiJ9
42
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC13cmFwcGVyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrcy9zdGVwLXdyYXBwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBEdXJhdGlvblN0cmluZywgdHlwZSBTdGVwQXBpIH0gZnJvbSBcIkBzb25hbXUta2l0L3Rhc2tzL2ludGVybmFsXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuXG5leHBvcnQgdHlwZSBTdGVwRnVuY3Rpb248VEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFRSZXN1bHQ+ID0gKC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmVzdWx0O1xuZXhwb3J0IHR5cGUgUnVubmFibGVTdGVwPFRBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBUUmVzdWx0PiA9IHtcbiAgcnVuOiBTdGVwRnVuY3Rpb248VEFyZ3MsIFByb21pc2U8VFJlc3VsdD4+O1xufTtcblxuaW50ZXJmYWNlIFN0ZXBDb25maWcge1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE1ldGhvZE5hbWVzPFQsIFRLZXkgZXh0ZW5kcyBrZXlvZiBUPiA9IFRbVEtleV0gZXh0ZW5kcyAoXG4gIC4uLmFyZ3M6IGluZmVyIF9UQXJnc1xuKSA9PiBpbmZlciBfVFJlc3VsdFxuICA/IFRLZXlcbiAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgTWV0aG9kQXJndW1lbnRzPFQsIFRLZXkgZXh0ZW5kcyBrZXlvZiBUPiA9IFRbVEtleV0gZXh0ZW5kcyAoXG4gIC4uLmFyZ3M6IGluZmVyIFRBcmdzXG4pID0+IGluZmVyIF9UUmVzdWx0XG4gID8gVEFyZ3NcbiAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgTWV0aG9kUmV0dXJuVHlwZTxULCBUS2V5IGV4dGVuZHMga2V5b2YgVD4gPSBUW1RLZXldIGV4dGVuZHMgKFxuICB0aGlzOiBULFxuICAuLi5hcmdzOiBpbmZlciBfVEFyZ3NcbikgPT4gaW5mZXIgVFJlc3VsdFxuICA/IFRSZXN1bHRcbiAgOiBuZXZlcjtcblxuZXhwb3J0IGNsYXNzIFN0ZXBXcmFwcGVyIHtcbiAgcmVhZG9ubHkgI3N0ZXBBcGk6IFN0ZXBBcGk7XG5cbiAgY29uc3RydWN0b3Ioc3RlcEFwaTogU3RlcEFwaSkge1xuICAgIHRoaXMuI3N0ZXBBcGkgPSBzdGVwQXBpO1xuICB9XG5cbiAgZ2V0PFxuICAgIFQsXG4gICAgVEtleSBleHRlbmRzIGtleW9mIFQsXG4gICAgVEFyZ3MgZXh0ZW5kcyBNZXRob2RBcmd1bWVudHM8VCwgVEtleT4sXG4gICAgVFJlc3VsdCBleHRlbmRzIE1ldGhvZFJldHVyblR5cGU8VCwgVEtleT4sXG4gID4oY29uZmlnOiBTdGVwQ29uZmlnLCBvYmplY3Q6IFQsIG5hbWU6IE1ldGhvZE5hbWVzPFQsIFRLZXk+KTogUnVubmFibGVTdGVwPFRBcmdzLCBUUmVzdWx0PjtcbiAgZ2V0PFxuICAgIFQsXG4gICAgVEtleSBleHRlbmRzIGtleW9mIFQsXG4gICAgVEFyZ3MgZXh0ZW5kcyBNZXRob2RBcmd1bWVudHM8VCwgVEtleT4sXG4gICAgVFJlc3VsdCBleHRlbmRzIE1ldGhvZFJldHVyblR5cGU8VCwgVEtleT4sXG4gID4ob2JqZWN0OiBULCBuYW1lOiBNZXRob2ROYW1lczxULCBUS2V5Pik6IFJ1bm5hYmxlU3RlcDxUQXJncywgVFJlc3VsdD47XG4gIGdldDxcbiAgICBULFxuICAgIFRLZXkgZXh0ZW5kcyBrZXlvZiBULFxuICAgIFRBcmdzIGV4dGVuZHMgTWV0aG9kQXJndW1lbnRzPFQsIFRLZXk+LFxuICAgIFRSZXN1bHQgZXh0ZW5kcyBNZXRob2RSZXR1cm5UeXBlPFQsIFRLZXk+LFxuICA+KFxuICAgIC4uLmRlZmluaXRpb25BcmdzOiBbU3RlcENvbmZpZywgVCwgTWV0aG9kTmFtZXM8VCwgVEtleT5dIHwgW1QsIE1ldGhvZE5hbWVzPFQsIFRLZXk+XVxuICApOiBSdW5uYWJsZVN0ZXA8VEFyZ3MsIFRSZXN1bHQ+IHtcbiAgICBsZXQgY29uZmlnOiBTdGVwQ29uZmlnO1xuICAgIGxldCBmbjogU3RlcEZ1bmN0aW9uPFRBcmdzLCBFeGNsdWRlPFRSZXN1bHQsIG5ldmVyPj47XG5cbiAgICBpZiAoZGVmaW5pdGlvbkFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCBbcmF3T2JqZWN0LCBtZXRob2ROYW1lXSA9IGRlZmluaXRpb25BcmdzO1xuICAgICAgY29uc3QgbWV0aG9kID1cbiAgICAgICAgLyogU0FGRVRZOiDsnpHsl4Ug642w7L2U66CI7J207YSw7JmAIOybjO2BrO2UjOuhnCDsoJXsnZjqsIAg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyByYXdPYmplY3RbXG4gICAgICAgICAgbWV0aG9kTmFtZVxuICAgICAgICBdIGFzIENhbGxhYmxlRnVuY3Rpb247XG4gICAgICBjb25maWcgPSB7IG5hbWU6IGluZmxlY3Rpb24udW5kZXJzY29yZShtZXRob2ROYW1lLnRvU3RyaW5nKCkpIH07XG5cbiAgICAgIGZuID0gKC4uLmFyZ3M6IFRBcmdzKSA9PiBtZXRob2QuYmluZChyYXdPYmplY3QpKC4uLmFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBbcmF3Q29uZmlnLCByYXdPYmplY3QsIG5hbWVdID0gZGVmaW5pdGlvbkFyZ3M7XG4gICAgICBjb25zdCBtZXRob2QgPVxuICAgICAgICAvKiBTQUZFVFk6IOyekeyXhSDrjbDsvZTroIjsnbTthLDsmYAg7JuM7YGs7ZSM66GcIOygleydmOqwgCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJhd09iamVjdFtcbiAgICAgICAgICBuYW1lXG4gICAgICAgIF0gYXMgQ2FsbGFibGVGdW5jdGlvbjtcblxuICAgICAgY29uZmlnID0geyBuYW1lOiByYXdDb25maWcubmFtZSA/PyBpbmZsZWN0aW9uLnVuZGVyc2NvcmUobmFtZS50b1N0cmluZygpKSB9O1xuICAgICAgZm4gPSAoLi4uYXJnczogVEFyZ3MpID0+IG1ldGhvZC5iaW5kKHJhd09iamVjdCkoLi4uYXJncyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJ1bjogKChzdGVwQXBpOiBTdGVwQXBpLCAuLi5hcmdzOiBUQXJncykgPT4ge1xuICAgICAgICByZXR1cm4gc3RlcEFwaS5ydW4oY29uZmlnLCAoKSA9PiBmbiguLi5hcmdzKSk7XG4gICAgICB9KS5iaW5kKG51bGwsIHRoaXMuI3N0ZXBBcGkpLFxuICAgIH07XG4gIH1cblxuICBkZWZpbmU8VEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFRSZXN1bHQ+KFxuICAgIGNvbmZpZzogeyBuYW1lOiBzdHJpbmcgfSxcbiAgICBmbjogU3RlcEZ1bmN0aW9uPFRBcmdzLCBUUmVzdWx0PixcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJ1bjogKChzdGVwQXBpOiBTdGVwQXBpLCAuLi5hcmdzOiBUQXJncykgPT4ge1xuICAgICAgICByZXR1cm4gc3RlcEFwaS5ydW4oY29uZmlnLCAoKSA9PiBmbiguLi5hcmdzKSk7XG4gICAgICB9KS5iaW5kKG51bGwsIHRoaXMuI3N0ZXBBcGkpLFxuICAgIH07XG4gIH1cblxuICBzbGVlcChuYW1lOiBzdHJpbmcsIGR1cmF0aW9uOiBEdXJhdGlvblN0cmluZykge1xuICAgIHJldHVybiB0aGlzLiNzdGVwQXBpLnNsZWVwKG5hbWUsIGR1cmF0aW9uKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztDQStCYSxjQUFiLE1BQXlCO0VBQ3ZCO0VBRUEsWUFBWSxTQUFrQjtHQUM1QixLQUFLLFdBQVc7RUFDbEI7RUFjQSxJQU1FLEdBQUcsZ0JBQzJCO0dBQzlCLElBQUk7R0FDSixJQUFJO0dBRUosSUFBSSxlQUFlLFdBQVcsR0FBRztJQUMvQixNQUFNLENBQUMsV0FBVyxjQUFjO0lBQ2hDLE1BQU0sU0FDNEMsVUFDOUM7SUFFSixTQUFTLEVBQUUsTUFBTSxXQUFXLFdBQVcsV0FBVyxTQUFTLENBQUMsRUFBRTtJQUU5RCxNQUFNLEdBQUcsU0FBZ0IsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtHQUN6RCxPQUFPO0lBQ0wsTUFBTSxDQUFDLFdBQVcsV0FBVyxRQUFRO0lBQ3JDLE1BQU0sU0FDNEMsVUFDOUM7SUFHSixTQUFTLEVBQUUsTUFBTSxVQUFVLFFBQVEsV0FBVyxXQUFXLEtBQUssU0FBUyxDQUFDLEVBQUU7SUFDMUUsTUFBTSxHQUFHLFNBQWdCLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxHQUFHLElBQUk7R0FDekQ7R0FFQSxPQUFPLEVBQ0wsT0FBTyxTQUFrQixHQUFHLFNBQWdCO0lBQzFDLE9BQU8sUUFBUSxJQUFJLGNBQWMsR0FBRyxHQUFHLElBQUksQ0FBQztHQUM5QyxFQUFBLENBQUcsS0FBSyxNQUFNLEtBQUssUUFBUSxFQUM3QjtFQUNGO0VBRUEsT0FDRSxRQUNBLElBQ0E7R0FDQSxPQUFPLEVBQ0wsT0FBTyxTQUFrQixHQUFHLFNBQWdCO0lBQzFDLE9BQU8sUUFBUSxJQUFJLGNBQWMsR0FBRyxHQUFHLElBQUksQ0FBQztHQUM5QyxFQUFBLENBQUcsS0FBSyxNQUFNLEtBQUssUUFBUSxFQUM3QjtFQUNGO0VBRUEsTUFBTSxNQUFjLFVBQTBCO0dBQzVDLE9BQU8sS0FBSyxTQUFTLE1BQU0sTUFBTSxRQUFRO0VBQzNDO0NBQ0YifQ==
@@ -10,9 +10,8 @@ import assert from "assert";
10
10
  import { BackendPostgres, OpenWorkflow } from "@sonamu-kit/tasks";
11
11
  import { serializeRetryPolicy } from "@sonamu-kit/tasks/internal";
12
12
  import { schedule } from "node-cron";
13
- //#region src/tasks/workflow-manager.ts
13
+ // src/tasks/workflow-manager.ts
14
14
  var WorkflowManager;
15
- //#endregion
16
15
  __esmMin((() => {
17
16
  init_sonamu();
18
17
  init_category();
@@ -193,4 +192,4 @@ __esmMin((() => {
193
192
  }))();
194
193
  export { WorkflowManager };
195
194
 
196
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbWFuYWdlci5qcyIsIm5hbWVzIjpbIiNiYWNrZW5kIiwiI293IiwiI3dvcmtlciIsIiN3b3JrZmxvd3NNYXAiLCIjc2NoZWR1bGVkVGFza3MiLCJjcm9uU2NoZWR1bGUiLCJzY2hlZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrcy93b3JrZmxvdy1tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgdHlwZSBMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgQmFja2VuZFBvc3RncmVzLCBPcGVuV29ya2Zsb3cgfSBmcm9tIFwiQHNvbmFtdS1raXQvdGFza3NcIjtcbmltcG9ydCB7IHR5cGUgV29ya2VyIH0gZnJvbSBcIkBzb25hbXUta2l0L3Rhc2tzXCI7XG5pbXBvcnQgeyBzZXJpYWxpemVSZXRyeVBvbGljeSB9IGZyb20gXCJAc29uYW11LWtpdC90YXNrcy9pbnRlcm5hbFwiO1xuaW1wb3J0IHtcbiAgdHlwZSBSdW5uYWJsZVdvcmtmbG93LFxuICB0eXBlIFNjaGVtYUlucHV0LFxuICB0eXBlIFNjaGVtYU91dHB1dCxcbiAgdHlwZSBTdGFuZGFyZFNjaGVtYVYxLFxuICB0eXBlIFN0ZXBBcGksXG4gIHR5cGUgV29ya2Zsb3dSdW5IYW5kbGUsXG4gIHR5cGUgV29ya2Zsb3dTcGVjLFxufSBmcm9tIFwiQHNvbmFtdS1raXQvdGFza3MvaW50ZXJuYWxcIjtcbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgeyBzY2hlZHVsZSBhcyBjcm9uU2NoZWR1bGUgfSBmcm9tIFwibm9kZS1jcm9uXCI7XG5pbXBvcnQgeyB0eXBlIFNjaGVkdWxlZFRhc2sgfSBmcm9tIFwibm9kZS1jcm9uXCI7XG5pbXBvcnQgeyB0eXBlIFpvZE9iamVjdCB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgdHlwZSBDb250ZXh0IH0gZnJvbSBcIi4uL2FwaS9jb250ZXh0XCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgY29udmVydERvbWFpblRvQ2F0ZWdvcnkgfSBmcm9tIFwiLi4vbG9nZ2VyL2NhdGVnb3J5XCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgY3JlYXRlTW9ja1NTRUZhY3RvcnkgfSBmcm9tIFwiLi4vc3RyZWFtL3NzZVwiO1xuaW1wb3J0IHsgdHlwZSBFeGVjdXRhYmxlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uVmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgdHlwZSBXb3JrZmxvd01ldGFkYXRhIH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdGVwV3JhcHBlciB9IGZyb20gXCIuL3N0ZXAtd3JhcHBlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93T3B0aW9ucyB7XG4gIC8vIHdvcmtlcuyXkOyEnCDrj5nsi5wg7Iuk7ZaJ7ZWgIO2DnOyKpO2BrCDsiJgsIOq4sOuzuOydgCAxXG4gIGNvbmN1cnJlbmN5PzogbnVtYmVyO1xuXG4gIC8vIHdvcmtlcuyXkOyEnCDsgqzsmqntlaAgcHViL3N1YiDsl6zrtoAsIOq4sOuzuOydgCB0cnVlXG4gIHVzZVB1YlN1Yj86IGJvb2xlYW47XG5cbiAgLy8gcHViL3N1YuycvOuhnCDtg5zsiqTtgazrpbwg7IiY7Iug7ZaI7J2EIOuVjCDsm4ztgaztlIzroZzsmrAg7Iuk7ZaJ6rmM7KeAIOyngOyXsCDsi5zqsIQsIOq4sOuzuOydgCA1MDBtc1xuICBsaXN0ZW5EZWxheT86IG51bWJlcjtcbn1cblxuLy8gV29ya2Zsb3cg7ZWo7IiY7J2YIO2DgOyehSwgQHNvbmFtdS1raXQvdGFza3PsmYAg64uk66W4IOygkOydgCBzdGVw7J2EIO2VnOuyiCDqsJDsi7wg7ZiV7YOcLlxuZXhwb3J0IHR5cGUgV29ya2Zsb3dGdW5jdGlvbjxJbnB1dCwgT3V0cHV0PiA9IChcbiAgcGFyYW1zOiBSZWFkb25seTx7XG4gICAgbG9nZ2VyOiBMb2dnZXI7XG4gICAgaW5wdXQ6IElucHV0O1xuICAgIHN0ZXA6IFN0ZXBXcmFwcGVyO1xuICAgIHZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gIH0+LFxuKSA9PiBQcm9taXNlPE91dHB1dD4gfCBPdXRwdXQ7XG5cbi8vIFdvcmtmbG9366W8IOuTseuhne2VoCDrlYzrpbwg7JyE7ZWcIO2DgOyehVxuZXhwb3J0IHR5cGUgV29ya2Zsb3dDcmVhdGVPcHRpb25zPFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBUU2NoZW1hIGV4dGVuZHMgU3RhbmRhcmRTY2hlbWFWMSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbj4gPSBPbWl0PFxuICBXb3JrZmxvd1NwZWM8U2NoZW1hT3V0cHV0PFRTY2hlbWEsIElucHV0PiwgT3V0cHV0LCBTY2hlbWFJbnB1dDxUU2NoZW1hLCBJbnB1dD4+LFxuICBcInZlcnNpb25cIlxuPiAmIHtcbiAgaWQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgZnVuY3Rpb246IFdvcmtmbG93RnVuY3Rpb248U2NoZW1hT3V0cHV0PFRTY2hlbWEsIElucHV0PiwgT3V0cHV0Pjtcbn07XG5cbmV4cG9ydCBjbGFzcyBXb3JrZmxvd01hbmFnZXIge1xuICAvLyBiYWNrZW5kIOyduOyKpO2EtOyKpFxuICByZWFkb25seSAjYmFja2VuZDogQmFja2VuZFBvc3RncmVzO1xuXG4gIC8vIE9wZW5Xb3JrZmxvdyDsnbjsiqTthLTsiqRcbiAgcmVhZG9ubHkgI293OiBPcGVuV29ya2Zsb3c7XG5cbiAgLy8gV29ya2VyIOyduOyKpO2EtOyKpCAo7JeG7J2EIOyImCDsnojsnLzrqbAsIOydtCDrlYzripQg67aE7IKw65CcIOyEnOuyhCDtmZjqsr3sl5DshJwgRELsl5AgcHVibGlzaOunjCDtlZzri6Tqs6Ag6rCA7KCV7ZWoKVxuICAjd29ya2VyOiBXb3JrZXIgfCBudWxsO1xuXG4gIC8vIO2MjOydvCDqsr3roZwgLT4g7YyM7J287JeQIOygleydmOuQnCDsm4ztgaztlIzroZzsmrAg66mU7YOA642w7J207YSwIOuqqeuhnVxuICAjd29ya2Zsb3dzTWFwOiBNYXA8c3RyaW5nLCBXb3JrZmxvd01ldGFkYXRhW10+O1xuXG4gIC8vIFRhc2sg7J2066aEIC0+IFRhc2sg7KCV67O0IOuwjyBJbnB1dCDqsJIsIFdvcmtmbG93IElEXG4gICNzY2hlZHVsZWRUYXNrczogTWFwPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICB0YXNrOiBTY2hlZHVsZWRUYXNrO1xuICAgICAgaW5wdXRGbjogRXhlY3V0YWJsZTxTY2hlbWFJbnB1dDx1bmtub3duLCB1bmtub3duPj47XG4gICAgICB3b3JrZmxvd0lkOiBzdHJpbmc7XG4gICAgfVxuICA+O1xuXG4gIC8vIEJhY2tlbmRQb3N0Z3Jlc+yXkOyEnCDsspjrpqztlZjripQg6rKD65Ok7J20IOyeiOyWtOyEnCBLbmV4IOy7pOuEpeyFmOydtCDslYTri4jrnbwg7ISk7KCV6rCS7J2EIOuEo+yWtOykmOyVvO2VqC5cbiAgY29uc3RydWN0b3IoZGJDb25mOiBLbmV4LkNvbmZpZywgcnVuTWlncmF0aW9uczogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBiYWNrZW5kID0gbmV3IEJhY2tlbmRQb3N0Z3JlcyhkYkNvbmYsIHsgcnVuTWlncmF0aW9ucyB9KTtcblxuICAgIHRoaXMuI2JhY2tlbmQgPSBiYWNrZW5kO1xuICAgIHRoaXMuI293ID0gbmV3IE9wZW5Xb3JrZmxvdyh7IGJhY2tlbmQgfSk7XG4gICAgdGhpcy4jd29ya2VyID0gbnVsbDtcblxuICAgIHRoaXMuI3dvcmtmbG93c01hcCA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLiNzY2hlZHVsZWRUYXNrcyA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIC8vIFNvbmFtdSBVSSBBUEnsl5DshJwg7JuM7YGs7ZSM66Gc7JqwIOyLpO2WiSDrqqnroZ0g7KGw7ZqMLCDst6jshowg65Ox7JeQIOyCrOyaqe2VqeuLiOuLpC5cbiAgZ2V0IGJhY2tlbmQoKTogQmFja2VuZFBvc3RncmVzIHtcbiAgICByZXR1cm4gdGhpcy4jYmFja2VuZDtcbiAgfVxuXG4gIGdldCB3b3JrZmxvd0RlZmluaXRpb25zKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuI3dvcmtmbG93c01hcC52YWx1ZXMoKSlcbiAgICAgIC5mbGF0KClcbiAgICAgIC5tYXAoKHdmKSA9PiAoe1xuICAgICAgICBpZDogd2YuaWQsXG4gICAgICAgIG5hbWU6IHdmLm5hbWUsXG4gICAgICAgIHZlcnNpb246IHdmLnZlcnNpb24sXG4gICAgICAgIHNjaGVkdWxlczogd2Yuc2NoZWR1bGVzLm1hcCgocykgPT4gKHtcbiAgICAgICAgICBuYW1lOiBzLm5hbWUsXG4gICAgICAgICAgZXhwcmVzc2lvbjogcy5leHByZXNzaW9uLFxuICAgICAgICB9KSksXG4gICAgICAgIHJldHJ5UG9saWN5OiB3Zi5yZXRyeVBvbGljeSA/IHNlcmlhbGl6ZVJldHJ5UG9saWN5KHdmLnJldHJ5UG9saWN5KSA6IHVuZGVmaW5lZCxcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDsoJXsnZjrkJwg7JuM7YGs7ZSM66Gc7JqwIOuwjyDsm4ztgaztlIzroZzsmrDsl5Ag64yA7ZWcIHNjaGVkdWxlZCB0YXNrc+ulvCDrj5nquLDtmZTtlanri4jri6QuXG4gICAqL1xuICBhc3luYyBzeW5jaHJvbml6ZSh3b3JrZmxvd01hcDogTWFwPHN0cmluZywgV29ya2Zsb3dNZXRhZGF0YVtdPikge1xuICAgIC8vIDEuIOyCreygnOuQnCDtjIzsnbzsnYAg7J286rSEIOyCreygnFxuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIEFycmF5LmZyb20odGhpcy4jd29ya2Zsb3dzTWFwLmVudHJpZXMoKSlcbiAgICAgICAgLmZpbHRlcigoW2tleV0pID0+ICF3b3JrZmxvd01hcC5oYXMoa2V5KSlcbiAgICAgICAgLmZsYXRNYXAoKFssIHdvcmtmbG93c10pID0+XG4gICAgICAgICAgd29ya2Zsb3dzLm1hcCgod29ya2Zsb3cpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgICAgICAgICAgICAuLi53b3JrZmxvdy5zY2hlZHVsZXMubWFwKChzY2hlZHVsZSkgPT4gdGhpcy51bnNjaGVkdWxlVGFzayhzY2hlZHVsZS5uYW1lKSksXG4gICAgICAgICAgICAgIHRoaXMudW5yZWdpc3RlcldvcmtmbG93KHdvcmtmbG93KSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICk7XG5cbiAgICAvLyAyLiDsg4jroZwg7LaU6rCA65CcIO2MjOydvOydgCDsnbzqtIQg65Ox66GdXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgQXJyYXkuZnJvbSh3b3JrZmxvd01hcC5lbnRyaWVzKCkpXG4gICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiAhdGhpcy4jd29ya2Zsb3dzTWFwLmhhcyhrZXkpKVxuICAgICAgICAuZmxhdE1hcCgoWywgd29ya2Zsb3dzXSkgPT5cbiAgICAgICAgICB3b3JrZmxvd3MubWFwKCh3b3JrZmxvdykgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlcldvcmtmbG93KHtcbiAgICAgICAgICAgICAgaWQ6IHdvcmtmbG93LmlkLFxuICAgICAgICAgICAgICBuYW1lOiB3b3JrZmxvdy5uYW1lLFxuICAgICAgICAgICAgICB2ZXJzaW9uOiB3b3JrZmxvdy52ZXJzaW9uID8/IG51bGwsXG4gICAgICAgICAgICAgIHNjaGVtYTogd29ya2Zsb3cuc2NoZW1hLFxuICAgICAgICAgICAgICBmdW5jdGlvbjogd29ya2Zsb3cuZm4sXG4gICAgICAgICAgICAgIHJldHJ5UG9saWN5OiB3b3JrZmxvdy5yZXRyeVBvbGljeSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgICAgICAgICB3b3JrZmxvdy5zY2hlZHVsZXMubWFwKChzY2hlZHVsZSkgPT4gdGhpcy5zY2hlZHVsZVRhc2sod29ya2Zsb3csIHNjaGVkdWxlKSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICk7XG5cbiAgICAvLyAzLiDquLDsobTqs7wg64uk66W4IOqyg+ydhCBkaWZm7LmcIOuLpOydjCwg7IKt7KCcIO2bhCDsnqzrk7HroZ1cbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICBBcnJheS5mcm9tKHdvcmtmbG93TWFwLmVudHJpZXMoKSlcbiAgICAgICAgLmZpbHRlcigoW2tleV0pID0+IHRoaXMuI3dvcmtmbG93c01hcC5oYXMoa2V5KSlcbiAgICAgICAgLm1hcDxbc3RyaW5nLCBbV29ya2Zsb3dNZXRhZGF0YVtdLCBXb3JrZmxvd01ldGFkYXRhW11dXT4oKFtrZXksIG5ld1dvcmtmbG93c10pID0+IHtcbiAgICAgICAgICBjb25zdCBwcmV2aW91c1dvcmtmbG93cyA9IHRoaXMuI3dvcmtmbG93c01hcC5nZXQoa2V5KTtcbiAgICAgICAgICBhc3NlcnQocHJldmlvdXNXb3JrZmxvd3MsIFwicHJldmlvdXMgd29ya2Zsb3dzIG5vdCBmb3VuZFwiKTtcbiAgICAgICAgICByZXR1cm4gW2tleSwgW3ByZXZpb3VzV29ya2Zsb3dzLCBuZXdXb3JrZmxvd3NdXTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcChhc3luYyAoWywgW3ByZXZpb3VzV29ya2Zsb3dzLCBuZXdXb3JrZmxvd3NdXSkgPT4ge1xuICAgICAgICAgIC8vIOq4sOyhtCDqsoPrk6TsnYQg7IKt7KCc67aA7YSwIO2VtOyVvO2VqC5cbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgICBwcmV2aW91c1dvcmtmbG93c1xuICAgICAgICAgICAgICAuZmlsdGVyKChwcmV2SXRlbSkgPT4gIW5ld1dvcmtmbG93cy5zb21lKChuZXdJdGVtKSA9PiBuZXdJdGVtLmlkID09PSBwcmV2SXRlbS5pZCkpXG4gICAgICAgICAgICAgIC5tYXAoKHByZXZJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICAgICAgICAgICAgICAuLi5wcmV2SXRlbS5zY2hlZHVsZXMubWFwKChzY2hlZHVsZSkgPT4gdGhpcy51bnNjaGVkdWxlVGFzayhzY2hlZHVsZS5uYW1lKSksXG4gICAgICAgICAgICAgICAgICB0aGlzLnVucmVnaXN0ZXJXb3JrZmxvdyhwcmV2SXRlbSksXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyDsg4jroZwg7LaU6rCA65CcIOqyg+uTpOydhCDrk7HroZ1cbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgICBuZXdXb3JrZmxvd3NcbiAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAobmV3SXRlbSkgPT4gIXByZXZpb3VzV29ya2Zsb3dzLnNvbWUoKHByZXZJdGVtKSA9PiBwcmV2SXRlbS5pZCA9PT0gbmV3SXRlbS5pZCksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLm1hcChhc3luYyAobmV3SXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJXb3JrZmxvdyh7XG4gICAgICAgICAgICAgICAgICBpZDogbmV3SXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IG5ld0l0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgIHZlcnNpb246IG5ld0l0ZW0udmVyc2lvbiA/PyBudWxsLFxuICAgICAgICAgICAgICAgICAgc2NoZW1hOiBuZXdJdGVtLnNjaGVtYSxcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uOiBuZXdJdGVtLmZuLFxuICAgICAgICAgICAgICAgICAgcmV0cnlQb2xpY3k6IG5ld0l0ZW0ucmV0cnlQb2xpY3ksXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgICAgICAgICAgICAgbmV3SXRlbS5zY2hlZHVsZXMubWFwKChzY2hlZHVsZSkgPT4gdGhpcy5zY2hlZHVsZVRhc2sobmV3SXRlbSwgc2NoZWR1bGUpKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICApO1xuXG4gICAgdGhpcy4jd29ya2Zsb3dzTWFwID0gd29ya2Zsb3dNYXA7XG4gIH1cblxuICAvLyDsm4ztgaztlIzroZzsmrDrpbwg7Iuk7ZaJXG4gIHJ1bjxJbnB1dCwgT3V0cHV0LCBUU2NoZW1hIGV4dGVuZHMgU3RhbmRhcmRTY2hlbWFWMSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gICAgb3B0aW9uczogT21pdDxXb3JrZmxvd0NyZWF0ZU9wdGlvbnM8SW5wdXQsIE91dHB1dCwgVFNjaGVtYT4sIFwiZnVuY3Rpb25cIiB8IFwic2NoZW1hXCIgfCBcImlkXCI+LFxuICAgIGlucHV0OiBTY2hlbWFJbnB1dDxUU2NoZW1hLCBJbnB1dD4sXG4gICk6IFByb21pc2U8V29ya2Zsb3dSdW5IYW5kbGU8T3V0cHV0Pj4ge1xuICAgIHJldHVybiB0aGlzLiNvdy5ydW5Xb3JrZmxvdyhcbiAgICAgIHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIGlucHV0LFxuICAgICk7XG4gIH1cblxuICAvLyBjcm9uIHRhc2vrpbwg65Ox66GdXG4gIGFzeW5jIHNjaGVkdWxlVGFzayhcbiAgICB3b3JrZmxvdzogUGljazxXb3JrZmxvd01ldGFkYXRhLCBcImlkXCIgfCBcIm5hbWVcIiB8IFwidmVyc2lvblwiPixcbiAgICBzY2hlZHVsZTogV29ya2Zsb3dNZXRhZGF0YVtcInNjaGVkdWxlc1wiXVtudW1iZXJdLFxuICApIHtcbiAgICAvLyBXb3JrZXLqsIAg7Zmc7ISx7ZmU65CcIOuFuOuTnOyXkOyEnOunjCDsspjrpqxcbiAgICBpZiAoIXRoaXMuI3dvcmtlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhc2sgPSBjcm9uU2NoZWR1bGUoXG4gICAgICBzY2hlZHVsZS5leHByZXNzaW9uLFxuICAgICAgKGFzeW5jIChcbiAgICAgICAgeyBuYW1lLCB2ZXJzaW9uIH06IFBpY2s8V29ya2Zsb3dNZXRhZGF0YSwgXCJuYW1lXCIgfCBcInZlcnNpb25cIj4sXG4gICAgICAgIHsgaW5wdXQgfTogV29ya2Zsb3dNZXRhZGF0YVtcInNjaGVkdWxlc1wiXVtudW1iZXJdLFxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0RGF0YSA9IGF3YWl0IChpc0Z1bmN0aW9uVmFsdWUoaW5wdXQpXG4gICAgICAgICAgPyBQcm9taXNlLnJlc29sdmUoaW5wdXQoKSlcbiAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZShpbnB1dCkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJ1bih7IG5hbWUsIHZlcnNpb246IHZlcnNpb24gPz8gbnVsbCB9LCBpbnB1dERhdGEpO1xuICAgICAgfSkuYmluZCh0aGlzLCB3b3JrZmxvdywgc2NoZWR1bGUpLFxuICAgICAge1xuICAgICAgICBuYW1lOiBzY2hlZHVsZS5uYW1lLFxuICAgICAgICB0aW1lem9uZTogU29uYW11LmNvbmZpZy5hcGkudGltZXpvbmUsXG4gICAgICAgIG5vT3ZlcmxhcDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLiNzY2hlZHVsZWRUYXNrcy5zZXQoc2NoZWR1bGUubmFtZSwge1xuICAgICAgdGFzayxcbiAgICAgIGlucHV0Rm46IHNjaGVkdWxlLmlucHV0LFxuICAgICAgd29ya2Zsb3dJZDogd29ya2Zsb3cuaWQsXG4gICAgfSk7XG4gICAgYXdhaXQgdGFzay5zdGFydCgpO1xuICB9XG5cbiAgLy8gY3JvbiB0YXNr66W8IOykkeyngFxuICBhc3luYyB1bnNjaGVkdWxlVGFzayhuYW1lOiBzdHJpbmcpIHtcbiAgICAvLyBXb3JrZXLqsIAg7Zmc7ISx7ZmU65CcIOuFuOuTnOyXkOyEnOunjCDsspjrpqxcbiAgICBpZiAoIXRoaXMuI3dvcmtlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhc2tJdGVtID0gdGhpcy4jc2NoZWR1bGVkVGFza3MuZ2V0KG5hbWUpO1xuICAgIGlmICghdGFza0l0ZW0pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJzY2hlZHVsZWQgdGFzayBub3QgZm91bmRcIiwgbmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy4jc2NoZWR1bGVkVGFza3MuZGVsZXRlKG5hbWUpO1xuICAgIGF3YWl0IHRhc2tJdGVtLnRhc2suc3RvcCgpO1xuICAgIGF3YWl0IHRhc2tJdGVtLnRhc2suZGVzdHJveSgpO1xuICB9XG5cbiAgLy8g7JuM7YGs7ZSM66Gc7Jqw66W8IOuTseuhnSwg6rSA66Co65CcIOyKpOy8gOykhOydgCDrs4Trj4TroZwg65Ox66Gd7ZW07JW8IO2VqC5cbiAgcmVnaXN0ZXJXb3JrZmxvdzxJbnB1dCwgT3V0cHV0LCBUU2NoZW1hIGV4dGVuZHMgU3RhbmRhcmRTY2hlbWFWMSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gICAgb3B0aW9uczogV29ya2Zsb3dDcmVhdGVPcHRpb25zPElucHV0LCBPdXRwdXQsIFRTY2hlbWE+LFxuICApOiBSdW5uYWJsZVdvcmtmbG93PFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD4sIE91dHB1dCwgU2NoZW1hSW5wdXQ8VFNjaGVtYSwgSW5wdXQ+PiB7XG4gICAgY29uc3QgZm4gPSBhc3luYyAoXG4gICAgICBwYXJhbXM6IFJlYWRvbmx5PHtcbiAgICAgICAgaW5wdXQ6IFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD47XG4gICAgICAgIHN0ZXA6IFN0ZXBBcGk7XG4gICAgICAgIHZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gICAgICB9PixcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGJhc2VDb250ZXh0OiBDb250ZXh0ID0ge1xuICAgICAgICB0cmFuc3BvcnQ6IFwiaHR0cFwiIGFzIGNvbnN0LFxuICAgICAgICAvLyDsm4ztgaztlIzroZzsmrDsl5DripQgSFRUUCDsmpTssq3snbQg7JeG7Jy866+A66GcIOyemOuqu+uQnCDsoJHqt7zsnYQg7KaJ7IucIOuTnOufrOuDheuLiOuLpC5cbiAgICAgICAgZ2V0IHJlcXVlc3QoKTogQ29udGV4dFtcInJlcXVlc3RcIl0ge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkhUVFAgcmVxdWVzdCBpcyB1bmF2YWlsYWJsZSBpbiB3b3JrZmxvdyBjb250ZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgcmVwbHkoKTogQ29udGV4dFtcInJlcGx5XCJdIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJIVFRQIHJlcGx5IGlzIHVuYXZhaWxhYmxlIGluIHdvcmtmbG93IGNvbnRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBjcmVhdGVTU0U6IDxUIGV4dGVuZHMgWm9kT2JqZWN0PihzY2hlbWE6IFQpID0+IGNyZWF0ZU1vY2tTU0VGYWN0b3J5KHNjaGVtYSksXG4gICAgICAgIG5haXRlU3RvcmU6IE5haXRlLmNyZWF0ZVN0b3JlKCksXG4gICAgICAgIGxvY2FsZTogXCJcIixcbiAgICAgICAgdXNlcjogbnVsbCxcbiAgICAgICAgc2Vzc2lvbjogbnVsbCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNvbnRleHRQcm92aWRlciA9IFNvbmFtdS5jb25maWcudGFza3M/LmNvbnRleHRQcm92aWRlcjtcbiAgICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHQgPSBjb250ZXh0UHJvdmlkZXJcbiAgICAgICAgPyBhd2FpdCBQcm9taXNlLnJlc29sdmUoY29udGV4dFByb3ZpZGVyKGJhc2VDb250ZXh0KSlcbiAgICAgICAgOiBiYXNlQ29udGV4dDtcblxuICAgICAgY29uc3Qgc3RlcCA9IG5ldyBTdGVwV3JhcHBlcihwYXJhbXMuc3RlcCk7XG4gICAgICByZXR1cm4gU29uYW11LmFzeW5jTG9jYWxTdG9yYWdlLnJ1bih7IGNvbnRleHQgfSwgKCkgPT5cbiAgICAgICAgb3B0aW9ucy5mdW5jdGlvbih7XG4gICAgICAgICAgaW5wdXQ6IHBhcmFtcy5pbnB1dCxcbiAgICAgICAgICBzdGVwLFxuICAgICAgICAgIHZlcnNpb246IHBhcmFtcy52ZXJzaW9uLFxuICAgICAgICAgIGxvZ2dlcjogZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KG9wdGlvbnMubmFtZSwgXCJ3b3JrZmxvd1wiKSksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgd29ya2Zsb3cgPSB0aGlzLiNvdy5kZWZpbmVXb3JrZmxvdyhcbiAgICAgIHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gdW5kZWZpbmVkLFxuICAgICAgICBzY2hlbWE6IG9wdGlvbnMuc2NoZW1hLFxuICAgICAgICByZXRyeVBvbGljeTogb3B0aW9ucy5yZXRyeVBvbGljeSxcbiAgICAgIH0sXG4gICAgICBmbixcbiAgICApO1xuICAgIHJldHVybiB3b3JrZmxvdztcbiAgfVxuXG4gIC8vIOybjO2BrO2UjOuhnOyasOulvCDrk7HroZ0g7ZW07KCcLCDqtIDroKjrkJwg7Iqk7LyA7KSE7J2AIOuzhOuPhOuhnCDtlbTsoJztlbTslbwg7ZWoLlxuICBhc3luYyB1bnJlZ2lzdGVyV29ya2Zsb3cod29ya2Zsb3c6IFBpY2s8V29ya2Zsb3dNZXRhZGF0YSwgXCJuYW1lXCIgfCBcInZlcnNpb25cIiB8IFwiaWRcIj4pIHtcbiAgICB0aGlzLiNvdy51bnJlZ2lzdGVyV29ya2Zsb3cod29ya2Zsb3cubmFtZSwgd29ya2Zsb3cudmVyc2lvbiA/PyBudWxsKTtcbiAgfVxuXG4gIC8vIFdvcmtlcuulvCDshKTsoJUg7ZuEIOyLnOyekVxuICBzZXR1cFdvcmtlcihvcHRpb25zOiBXb3JrZmxvd09wdGlvbnMpIHtcbiAgICB0aGlzLiN3b3JrZXIgPSB0aGlzLiNvdy5uZXdXb3JrZXIob3B0aW9ucyk7XG4gIH1cblxuICAvLyBXb3JrZXLqsIAg7J6I7Jy866m0IFdvcmtlcuq5jOyngCDstIjquLDtmZQsIOyVhOuLiOuptCDrsLHsl5Trk5zrp4wg7LSI6riw7ZmUXG4gIGFzeW5jIHN0YXJ0V29ya2VyKCkge1xuICAgIGF3YWl0IHRoaXMuI2JhY2tlbmQuaW5pdGlhbGl6ZSgpO1xuICAgIGF3YWl0IHRoaXMuI3dvcmtlcj8uc3RhcnQoKTtcbiAgfVxuXG4gIC8vIFdvcmtlcuulvCDspJHsp4BcbiAgYXN5bmMgc3RvcFdvcmtlcigpIHtcbiAgICBhd2FpdCB0aGlzLiN3b3JrZXI/LnN0b3AoKTtcbiAgfVxuXG4gIC8vIGNyb24gdGFza+uTpOydhCDrqqjrkZAg7KSR7KeAXG4gIGFzeW5jIHN0b3BTY2hlZHVsZXMoKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgQXJyYXkuZnJvbSh0aGlzLiNzY2hlZHVsZWRUYXNrcy52YWx1ZXMoKSkubWFwKCh7IHRhc2sgfSkgPT4gUHJvbWlzZS5yZXNvbHZlKHRhc2suc3RvcCgpKSksXG4gICAgKTtcbiAgfVxuXG4gIC8vIGNyb24gdGFza+uTpOydhCDrqqjrkZAg7KCV66asXG4gIGFzeW5jIGRlc3Ryb3lTY2hlZHVsZXMoKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgQXJyYXkuZnJvbSh0aGlzLiNzY2hlZHVsZWRUYXNrcy52YWx1ZXMoKSkubWFwKCh7IHRhc2sgfSkgPT4gUHJvbWlzZS5yZXNvbHZlKHRhc2suZGVzdHJveSgpKSksXG4gICAgKTtcbiAgICB0aGlzLiNzY2hlZHVsZWRUYXNrcy5jbGVhcigpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpIHtcbiAgICBhd2FpdCB0aGlzLnN0b3BTY2hlZHVsZXMoKTtcbiAgICBhd2FpdCB0aGlzLnN0b3BXb3JrZXIoKTtcbiAgICBhd2FpdCB0aGlzLmRlc3Ryb3lTY2hlZHVsZXMoKTtcbiAgICBhd2FpdCB0aGlzLiNiYWNrZW5kLnN0b3AoKTtcbiAgfVxuXG4gIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXN0cm95KCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OzthQXNCc0M7ZUFDc0I7WUFDdEI7VUFDYztvQkFFSTttQkFFWjtDQXFDL0Isa0JBQWIsTUFBNkI7RUFFM0I7RUFHQTtFQUdBO0VBR0E7RUFHQTtFQVVBLFlBQVksUUFBcUIsZ0JBQXlCLE1BQU07R0FDOUQsTUFBTSxVQUFVLElBQUksZ0JBQWdCLFFBQVEsRUFBRSxjQUFjLENBQUM7R0FFN0QsS0FBS0EsV0FBVztHQUNoQixLQUFLQyxNQUFNLElBQUksYUFBYSxFQUFFLFFBQVEsQ0FBQztHQUN2QyxLQUFLQyxVQUFVO0dBRWYsS0FBS0MsZ0NBQWdCLElBQUksSUFBSTtHQUM3QixLQUFLQyxrQ0FBa0IsSUFBSSxJQUFJO0VBQ2pDO0VBR0EsSUFBSSxVQUEyQjtHQUM3QixPQUFPLEtBQUtKO0VBQ2Q7RUFFQSxJQUFJLHNCQUFzQjtHQUN4QixPQUFPLE1BQU0sS0FBSyxLQUFLRyxjQUFjLE9BQU8sQ0FBQyxDQUFDLENBQzNDLEtBQUssQ0FBQyxDQUNOLEtBQUssUUFBUTtJQUNaLElBQUksR0FBRztJQUNQLE1BQU0sR0FBRztJQUNULFNBQVMsR0FBRztJQUNaLFdBQVcsR0FBRyxVQUFVLEtBQUssT0FBTztLQUNsQyxNQUFNLEVBQUU7S0FDUixZQUFZLEVBQUU7SUFDaEIsRUFBRTtJQUNGLGFBQWEsR0FBRyxjQUFjLHFC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
195
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbWFuYWdlci5qcyIsIm5hbWVzIjpbImNyb25TY2hlZHVsZSIsInNjaGVkdWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rhc2tzL3dvcmtmbG93LW1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyBCYWNrZW5kUG9zdGdyZXMsIE9wZW5Xb3JrZmxvdyB9IGZyb20gXCJAc29uYW11LWtpdC90YXNrc1wiO1xuaW1wb3J0IHsgdHlwZSBXb3JrZXIgfSBmcm9tIFwiQHNvbmFtdS1raXQvdGFza3NcIjtcbmltcG9ydCB7IHNlcmlhbGl6ZVJldHJ5UG9saWN5IH0gZnJvbSBcIkBzb25hbXUta2l0L3Rhc2tzL2ludGVybmFsXCI7XG5pbXBvcnQge1xuICB0eXBlIFJ1bm5hYmxlV29ya2Zsb3csXG4gIHR5cGUgU2NoZW1hSW5wdXQsXG4gIHR5cGUgU2NoZW1hT3V0cHV0LFxuICB0eXBlIFN0YW5kYXJkU2NoZW1hVjEsXG4gIHR5cGUgU3RlcEFwaSxcbiAgdHlwZSBXb3JrZmxvd1J1bkhhbmRsZSxcbiAgdHlwZSBXb3JrZmxvd1NwZWMsXG59IGZyb20gXCJAc29uYW11LWtpdC90YXNrcy9pbnRlcm5hbFwiO1xuaW1wb3J0IHsgdHlwZSBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IHNjaGVkdWxlIGFzIGNyb25TY2hlZHVsZSB9IGZyb20gXCJub2RlLWNyb25cIjtcbmltcG9ydCB7IHR5cGUgU2NoZWR1bGVkVGFzayB9IGZyb20gXCJub2RlLWNyb25cIjtcbmltcG9ydCB7IHR5cGUgWm9kT2JqZWN0IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyB0eXBlIENvbnRleHQgfSBmcm9tIFwiLi4vYXBpL2NvbnRleHRcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSB9IGZyb20gXCIuLi9sb2dnZXIvY2F0ZWdvcnlcIjtcbmltcG9ydCB7IE5haXRlIH0gZnJvbSBcIi4uL25haXRlL25haXRlXCI7XG5pbXBvcnQgeyBjcmVhdGVNb2NrU1NFRmFjdG9yeSB9IGZyb20gXCIuLi9zdHJlYW0vc3NlXCI7XG5pbXBvcnQgeyB0eXBlIEV4ZWN1dGFibGUgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb25WYWx1ZSB9IGZyb20gXCIuLi91dGlscy9ydW50aW1lLXZhbHVlXCI7XG5pbXBvcnQgeyB0eXBlIFdvcmtmbG93TWV0YWRhdGEgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN0ZXBXcmFwcGVyIH0gZnJvbSBcIi4vc3RlcC13cmFwcGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dPcHRpb25zIHtcbiAgLy8gd29ya2Vy7JeQ7IScIOuPmeyLnCDsi6TtlontlaAg7YOc7Iqk7YGsIOyImCwg6riw67O47J2AIDFcbiAgY29uY3VycmVuY3k/OiBudW1iZXI7XG5cbiAgLy8gd29ya2Vy7JeQ7IScIOyCrOyaqe2VoCBwdWIvc3ViIOyXrOu2gCwg6riw67O47J2AIHRydWVcbiAgdXNlUHViU3ViPzogYm9vbGVhbjtcblxuICAvLyBwdWIvc3Vi7Jy866GcIO2DnOyKpO2BrOulvCDsiJjsi6DtlojsnYQg65WMIOybjO2BrO2UjOuhnOyasCDsi6TtlonquYzsp4Ag7KeA7JewIOyLnOqwhCwg6riw67O47J2AIDUwMG1zXG4gIGxpc3RlbkRlbGF5PzogbnVtYmVyO1xufVxuXG4vLyBXb3JrZmxvdyDtlajsiJjsnZgg7YOA7J6FLCBAc29uYW11LWtpdC90YXNrc+yZgCDri6Trpbgg7KCQ7J2AIHN0ZXDsnYQg7ZWc67KIIOqwkOyLvCDtmJXtg5wuXG5leHBvcnQgdHlwZSBXb3JrZmxvd0Z1bmN0aW9uPElucHV0LCBPdXRwdXQ+ID0gKFxuICBwYXJhbXM6IFJlYWRvbmx5PHtcbiAgICBsb2dnZXI6IExvZ2dlcjtcbiAgICBpbnB1dDogSW5wdXQ7XG4gICAgc3RlcDogU3RlcFdyYXBwZXI7XG4gICAgdmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgfT4sXG4pID0+IFByb21pc2U8T3V0cHV0PiB8IE91dHB1dDtcblxuLy8gV29ya2Zsb3frpbwg65Ox66Gd7ZWgIOuVjOulvCDsnITtlZwg7YOA7J6FXG5leHBvcnQgdHlwZSBXb3JrZmxvd0NyZWF0ZU9wdGlvbnM8XG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFRTY2hlbWEgZXh0ZW5kcyBTdGFuZGFyZFNjaGVtYVYxIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuPiA9IE9taXQ8XG4gIFdvcmtmbG93U3BlYzxTY2hlbWFPdXRwdXQ8VFNjaGVtYSwgSW5wdXQ+LCBPdXRwdXQsIFNjaGVtYUlucHV0PFRTY2hlbWEsIElucHV0Pj4sXG4gIFwidmVyc2lvblwiXG4+ICYge1xuICBpZDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICBmdW5jdGlvbjogV29ya2Zsb3dGdW5jdGlvbjxTY2hlbWFPdXRwdXQ8VFNjaGVtYSwgSW5wdXQ+LCBPdXRwdXQ+O1xufTtcblxuZXhwb3J0IGNsYXNzIFdvcmtmbG93TWFuYWdlciB7XG4gIC8vIGJhY2tlbmQg7J247Iqk7YS07IqkXG4gIHJlYWRvbmx5ICNiYWNrZW5kOiBCYWNrZW5kUG9zdGdyZXM7XG5cbiAgLy8gT3BlbldvcmtmbG93IOyduOyKpO2EtOyKpFxuICByZWFkb25seSAjb3c6IE9wZW5Xb3JrZmxvdztcblxuICAvLyBXb3JrZXIg7J247Iqk7YS07IqkICjsl4bsnYQg7IiYIOyeiOycvOupsCwg7J20IOuVjOuKlCDrtoTsgrDrkJwg7ISc67KEIO2ZmOqyveyXkOyEnCBEQuyXkCBwdWJsaXNo66eMIO2VnOuLpOqzoCDqsIDsoJXtlagpXG4gICN3b3JrZXI6IFdvcmtlciB8IG51bGw7XG5cbiAgLy8g7YyM7J28IOqyveuhnCAtPiDtjIzsnbzsl5Ag7KCV7J2Y65CcIOybjO2BrO2UjOuhnOyasCDrqZTtg4DrjbDsnbTthLAg66qp66GdXG4gICN3b3JrZmxvd3NNYXA6IE1hcDxzdHJpbmcsIFdvcmtmbG93TWV0YWRhdGFbXT47XG5cbiAgLy8gVGFzayDsnbTrpoQgLT4gVGFzayDsoJXrs7Qg67CPIElucHV0IOqwkiwgV29ya2Zsb3cgSURcbiAgI3NjaGVkdWxlZFRhc2tzOiBNYXA8XG4gICAgc3RyaW5nLFxuICAgIHtcbiAgICAgIHRhc2s6IFNjaGVkdWxlZFRhc2s7XG4gICAgICBpbnB1dEZuOiBFeGVjdXRhYmxlPFNjaGVtYUlucHV0PHVua25vd24sIHVua25vd24+PjtcbiAgICAgIHdvcmtmbG93SWQ6IHN0cmluZztcbiAgICB9XG4gID47XG5cbiAgLy8gQmFja2VuZFBvc3RncmVz7JeQ7IScIOyymOumrO2VmOuKlCDqsoPrk6TsnbQg7J6I7Ja07IScIEtuZXgg7Luk64Sl7IWY7J20IOyVhOuLiOudvCDshKTsoJXqsJLsnYQg64Sj7Ja07KSY7JW87ZWoLlxuICBjb25zdHJ1Y3RvcihkYkNvbmY6IEtuZXguQ29uZmlnLCBydW5NaWdyYXRpb25zOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGJhY2tlbmQgPSBuZXcgQmFja2VuZFBvc3RncmVzKGRiQ29uZiwgeyBydW5NaWdyYXRpb25zIH0pO1xuXG4gICAgdGhpcy4jYmFja2VuZCA9IGJhY2tlbmQ7XG4gICAgdGhpcy4jb3cgPSBuZXcgT3BlbldvcmtmbG93KHsgYmFja2VuZCB9KTtcbiAgICB0aGlzLiN3b3JrZXIgPSBudWxsO1xuXG4gICAgdGhpcy4jd29ya2Zsb3dzTWFwID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuI3NjaGVkdWxlZFRhc2tzID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgLy8gU29uYW11IFVJIEFQSeyXkOyEnCDsm4ztgaztlIzroZzsmrAg7Iuk7ZaJIOuqqeuhnSDsobDtmowsIOy3qOyGjCDrk7Hsl5Ag7IKs7Jqp7ZWp64uI64ukLlxuICBnZXQgYmFja2VuZCgpOiBCYWNrZW5kUG9zdGdyZXMge1xuICAgIHJldHVybiB0aGlzLiNiYWNrZW5kO1xuICB9XG5cbiAgZ2V0IHdvcmtmbG93RGVmaW5pdGlvbnMoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy4jd29ya2Zsb3dzTWFwLnZhbHVlcygpKVxuICAgICAgLmZsYXQoKVxuICAgICAgLm1hcCgod2YpID0+ICh7XG4gICAgICAgIGlkOiB3Zi5pZCxcbiAgICAgICAgbmFtZTogd2YubmFtZSxcbiAgICAgICAgdmVyc2lvbjogd2YudmVyc2lvbixcbiAgICAgICAgc2NoZWR1bGVzOiB3Zi5zY2hlZHVsZXMubWFwKChzKSA9PiAoe1xuICAgICAgICAgIG5hbWU6IHMubmFtZSxcbiAgICAgICAgICBleHByZXNzaW9uOiBzLmV4cHJlc3Npb24sXG4gICAgICAgIH0pKSxcbiAgICAgICAgcmV0cnlQb2xpY3k6IHdmLnJldHJ5UG9saWN5ID8gc2VyaWFsaXplUmV0cnlQb2xpY3kod2YucmV0cnlQb2xpY3kpIDogdW5kZWZpbmVkLFxuICAgICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIOygleydmOuQnCDsm4ztgaztlIzroZzsmrAg67CPIOybjO2BrO2UjOuhnOyasOyXkCDrjIDtlZwgc2NoZWR1bGVkIHRhc2tz66W8IOuPmeq4sO2ZlO2VqeuLiOuLpC5cbiAgICovXG4gIGFzeW5jIHN5bmNocm9uaXplKHdvcmtmbG93TWFwOiBNYXA8c3RyaW5nLCBXb3JrZmxvd01ldGFkYXRhW10+KSB7XG4gICAgLy8gMS4g7IKt7KCc65CcIO2MjOydvOydgCDsnbzqtIQg7IKt7KCcXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgQXJyYXkuZnJvbSh0aGlzLiN3b3JrZmxvd3NNYXAuZW50cmllcygpKVxuICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4gIXdvcmtmbG93TWFwLmhhcyhrZXkpKVxuICAgICAgICAuZmxhdE1hcCgoWywgd29ya2Zsb3dzXSkgPT5cbiAgICAgICAgICB3b3JrZmxvd3MubWFwKCh3b3JrZmxvdykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICAgICAgICAgIC4uLndvcmtmbG93LnNjaGVkdWxlcy5tYXAoKHNjaGVkdWxlKSA9PiB0aGlzLnVuc2NoZWR1bGVUYXNrKHNjaGVkdWxlLm5hbWUpKSxcbiAgICAgICAgICAgICAgdGhpcy51bnJlZ2lzdGVyV29ya2Zsb3cod29ya2Zsb3cpLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIC8vIDIuIOyDiOuhnCDstpTqsIDrkJwg7YyM7J287J2AIOydvOq0hCDrk7HroZ1cbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICBBcnJheS5mcm9tKHdvcmtmbG93TWFwLmVudHJpZXMoKSlcbiAgICAgICAgLmZpbHRlcigoW2tleV0pID0+ICF0aGlzLiN3b3JrZmxvd3NNYXAuaGFzKGtleSkpXG4gICAgICAgIC5mbGF0TWFwKChbLCB3b3JrZmxvd3NdKSA9PlxuICAgICAgICAgIHdvcmtmbG93cy5tYXAoKHdvcmtmbG93KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyV29ya2Zsb3coe1xuICAgICAgICAgICAgICBpZDogd29ya2Zsb3cuaWQsXG4gICAgICAgICAgICAgIG5hbWU6IHdvcmtmbG93Lm5hbWUsXG4gICAgICAgICAgICAgIHZlcnNpb246IHdvcmtmbG93LnZlcnNpb24gPz8gbnVsbCxcbiAgICAgICAgICAgICAgc2NoZW1hOiB3b3JrZmxvdy5zY2hlbWEsXG4gICAgICAgICAgICAgIGZ1bmN0aW9uOiB3b3JrZmxvdy5mbixcbiAgICAgICAgICAgICAgcmV0cnlQb2xpY3k6IHdvcmtmbG93LnJldHJ5UG9saWN5LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgICAgIHdvcmtmbG93LnNjaGVkdWxlcy5tYXAoKHNjaGVkdWxlKSA9PiB0aGlzLnNjaGVkdWxlVGFzayh3b3JrZmxvdywgc2NoZWR1bGUpKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIC8vIDMuIOq4sOyhtOqzvCDri6Trpbgg6rKD7J2EIGRpZmbsuZwg64uk7J2MLCDsgq3soJwg7ZuEIOyerOuTseuhnVxuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIEFycmF5LmZyb20od29ya2Zsb3dNYXAuZW50cmllcygpKVxuICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4gdGhpcy4jd29ya2Zsb3dzTWFwLmhhcyhrZXkpKVxuICAgICAgICAubWFwPFtzdHJpbmcsIFtXb3JrZmxvd01ldGFkYXRhW10sIFdvcmtmbG93TWV0YWRhdGFbXV1dPigoW2tleSwgbmV3V29ya2Zsb3dzXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHByZXZpb3VzV29ya2Zsb3dzID0gdGhpcy4jd29ya2Zsb3dzTWFwLmdldChrZXkpO1xuICAgICAgICAgIGFzc2VydChwcmV2aW91c1dvcmtmbG93cywgXCJwcmV2aW91cyB3b3JrZmxvd3Mgbm90IGZvdW5kXCIpO1xuICAgICAgICAgIHJldHVybiBba2V5LCBbcHJldmlvdXNXb3JrZmxvd3MsIG5ld1dvcmtmbG93c11dO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKGFzeW5jIChbLCBbcHJldmlvdXNXb3JrZmxvd3MsIG5ld1dvcmtmbG93c11dKSA9PiB7XG4gICAgICAgICAgLy8g6riw7KG0IOqyg+uTpOydhCDsgq3soJzrtoDthLAg7ZW07JW87ZWoLlxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgICAgIHByZXZpb3VzV29ya2Zsb3dzXG4gICAgICAgICAgICAgIC5maWx0ZXIoKHByZXZJdGVtKSA9PiAhbmV3V29ya2Zsb3dzLnNvbWUoKG5ld0l0ZW0pID0+IG5ld0l0ZW0uaWQgPT09IHByZXZJdGVtLmlkKSlcbiAgICAgICAgICAgICAgLm1hcCgocHJldkl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICAgICAgICAgICAgICAgIC4uLnByZXZJdGVtLnNjaGVkdWxlcy5tYXAoKHNjaGVkdWxlKSA9PiB0aGlzLnVuc2NoZWR1bGVUYXNrKHNjaGVkdWxlLm5hbWUpKSxcbiAgICAgICAgICAgICAgICAgIHRoaXMudW5yZWdpc3RlcldvcmtmbG93KHByZXZJdGVtKSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIOyDiOuhnCDstpTqsIDrkJwg6rKD65Ok7J2EIOuTseuhnVxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgICAgIG5ld1dvcmtmbG93c1xuICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChuZXdJdGVtKSA9PiAhcHJldmlvdXNXb3JrZmxvd3Muc29tZSgocHJldkl0ZW0pID0+IHByZXZJdGVtLmlkID09PSBuZXdJdGVtLmlkKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAubWFwKGFzeW5jIChuZXdJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RlcldvcmtmbG93KHtcbiAgICAgICAgICAgICAgICAgIGlkOiBuZXdJdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgbmFtZTogbmV3SXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgdmVyc2lvbjogbmV3SXRlbS52ZXJzaW9uID8/IG51bGwsXG4gICAgICAgICAgICAgICAgICBzY2hlbWE6IG5ld0l0ZW0uc2NoZW1hLFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb246IG5ld0l0ZW0uZm4sXG4gICAgICAgICAgICAgICAgICByZXRyeVBvbGljeTogbmV3SXRlbS5yZXRyeVBvbGljeSxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgICAgICAgICBuZXdJdGVtLnNjaGVkdWxlcy5tYXAoKHNjaGVkdWxlKSA9PiB0aGlzLnNjaGVkdWxlVGFzayhuZXdJdGVtLCBzY2hlZHVsZSkpLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICk7XG5cbiAgICB0aGlzLiN3b3JrZmxvd3NNYXAgPSB3b3JrZmxvd01hcDtcbiAgfVxuXG4gIC8vIOybjO2BrO2UjOuhnOyasOulvCDsi6TtlolcbiAgcnVuPElucHV0LCBPdXRwdXQsIFRTY2hlbWEgZXh0ZW5kcyBTdGFuZGFyZFNjaGVtYVYxIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgICBvcHRpb25zOiBPbWl0PFdvcmtmbG93Q3JlYXRlT3B0aW9uczxJbnB1dCwgT3V0cHV0LCBUU2NoZW1hPiwgXCJmdW5jdGlvblwiIHwgXCJzY2hlbWFcIiB8IFwiaWRcIj4sXG4gICAgaW5wdXQ6IFNjaGVtYUlucHV0PFRTY2hlbWEsIElucHV0PixcbiAgKTogUHJvbWlzZTxXb3JrZmxvd1J1bkhhbmRsZTxPdXRwdXQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuI293LnJ1bldvcmtmbG93KFxuICAgICAge1xuICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgaW5wdXQsXG4gICAgKTtcbiAgfVxuXG4gIC8vIGNyb24gdGFza+ulvCDrk7HroZ1cbiAgYXN5bmMgc2NoZWR1bGVUYXNrKFxuICAgIHdvcmtmbG93OiBQaWNrPFdvcmtmbG93TWV0YWRhdGEsIFwiaWRcIiB8IFwibmFtZVwiIHwgXCJ2ZXJzaW9uXCI+LFxuICAgIHNjaGVkdWxlOiBXb3JrZmxvd01ldGFkYXRhW1wic2NoZWR1bGVzXCJdW251bWJlcl0sXG4gICkge1xuICAgIC8vIFdvcmtlcuqwgCDtmZzshLHtmZTrkJwg64W465Oc7JeQ7ISc66eMIOyymOumrFxuICAgIGlmICghdGhpcy4jd29ya2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGFzayA9IGNyb25TY2hlZHVsZShcbiAgICAgIHNjaGVkdWxlLmV4cHJlc3Npb24sXG4gICAgICAoYXN5bmMgKFxuICAgICAgICB7IG5hbWUsIHZlcnNpb24gfTogUGljazxXb3JrZmxvd01ldGFkYXRhLCBcIm5hbWVcIiB8IFwidmVyc2lvblwiPixcbiAgICAgICAgeyBpbnB1dCB9OiBXb3JrZmxvd01ldGFkYXRhW1wic2NoZWR1bGVzXCJdW251bWJlcl0sXG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXREYXRhID0gYXdhaXQgKGlzRnVuY3Rpb25WYWx1ZShpbnB1dClcbiAgICAgICAgICA/IFByb21pc2UucmVzb2x2ZShpbnB1dCgpKVxuICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGlucHV0KSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucnVuKHsgbmFtZSwgdmVyc2lvbjogdmVyc2lvbiA/PyBudWxsIH0sIGlucHV0RGF0YSk7XG4gICAgICB9KS5iaW5kKHRoaXMsIHdvcmtmbG93LCBzY2hlZHVsZSksXG4gICAgICB7XG4gICAgICAgIG5hbWU6IHNjaGVkdWxlLm5hbWUsXG4gICAgICAgIHRpbWV6b25lOiBTb25hbXUuY29uZmlnLmFwaS50aW1lem9uZSxcbiAgICAgICAgbm9PdmVybGFwOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMuI3NjaGVkdWxlZFRhc2tzLnNldChzY2hlZHVsZS5uYW1lLCB7XG4gICAgICB0YXNrLFxuICAgICAgaW5wdXRGbjogc2NoZWR1bGUuaW5wdXQsXG4gICAgICB3b3JrZmxvd0lkOiB3b3JrZmxvdy5pZCxcbiAgICB9KTtcbiAgICBhd2FpdCB0YXNrLnN0YXJ0KCk7XG4gIH1cblxuICAvLyBjcm9uIHRhc2vrpbwg7KSR7KeAXG4gIGFzeW5jIHVuc2NoZWR1bGVUYXNrKG5hbWU6IHN0cmluZykge1xuICAgIC8vIFdvcmtlcuqwgCDtmZzshLHtmZTrkJwg64W465Oc7JeQ7ISc66eMIOyymOumrFxuICAgIGlmICghdGhpcy4jd29ya2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGFza0l0ZW0gPSB0aGlzLiNzY2hlZHVsZWRUYXNrcy5nZXQobmFtZSk7XG4gICAgaWYgKCF0YXNrSXRlbSkge1xuICAgICAgY29uc29sZS5lcnJvcihcInNjaGVkdWxlZCB0YXNrIG5vdCBmb3VuZFwiLCBuYW1lKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLiNzY2hlZHVsZWRUYXNrcy5kZWxldGUobmFtZSk7XG4gICAgYXdhaXQgdGFza0l0ZW0udGFzay5zdG9wKCk7XG4gICAgYXdhaXQgdGFza0l0ZW0udGFzay5kZXN0cm95KCk7XG4gIH1cblxuICAvLyDsm4ztgaztlIzroZzsmrDrpbwg65Ox66GdLCDqtIDroKjrkJwg7Iqk7LyA7KSE7J2AIOuzhOuPhOuhnCDrk7HroZ3tlbTslbwg7ZWoLlxuICByZWdpc3RlcldvcmtmbG93PElucHV0LCBPdXRwdXQsIFRTY2hlbWEgZXh0ZW5kcyBTdGFuZGFyZFNjaGVtYVYxIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgICBvcHRpb25zOiBXb3JrZmxvd0NyZWF0ZU9wdGlvbnM8SW5wdXQsIE91dHB1dCwgVFNjaGVtYT4sXG4gICk6IFJ1bm5hYmxlV29ya2Zsb3c8U2NoZW1hT3V0cHV0PFRTY2hlbWEsIElucHV0PiwgT3V0cHV0LCBTY2hlbWFJbnB1dDxUU2NoZW1hLCBJbnB1dD4+IHtcbiAgICBjb25zdCBmbiA9IGFzeW5jIChcbiAgICAgIHBhcmFtczogUmVhZG9ubHk8e1xuICAgICAgICBpbnB1dDogU2NoZW1hT3V0cHV0PFRTY2hlbWEsIElucHV0PjtcbiAgICAgICAgc3RlcDogU3RlcEFwaTtcbiAgICAgICAgdmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgICAgIH0+LFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgYmFzZUNvbnRleHQ6IENvbnRleHQgPSB7XG4gICAgICAgIHRyYW5zcG9ydDogXCJodHRwXCIgYXMgY29uc3QsXG4gICAgICAgIC8vIOybjO2BrO2UjOuhnOyasOyXkOuKlCBIVFRQIOyalOyyreydtCDsl4bsnLzrr4DroZwg7J6Y66q765CcIOygkeq3vOydhCDsponsi5wg65Oc65+s64OF64uI64ukLlxuICAgICAgICBnZXQgcmVxdWVzdCgpOiBDb250ZXh0W1wicmVxdWVzdFwiXSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSFRUUCByZXF1ZXN0IGlzIHVuYXZhaWxhYmxlIGluIHdvcmtmbG93IGNvbnRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCByZXBseSgpOiBDb250ZXh0W1wicmVwbHlcIl0ge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkhUVFAgcmVwbHkgaXMgdW5hdmFpbGFibGUgaW4gd29ya2Zsb3cgY29udGV4dFwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgIGNyZWF0ZVNTRTogPFQgZXh0ZW5kcyBab2RPYmplY3Q+KHNjaGVtYTogVCkgPT4gY3JlYXRlTW9ja1NTRUZhY3Rvcnkoc2NoZW1hKSxcbiAgICAgICAgbmFpdGVTdG9yZTogTmFpdGUuY3JlYXRlU3RvcmUoKSxcbiAgICAgICAgbG9jYWxlOiBcIlwiLFxuICAgICAgICB1c2VyOiBudWxsLFxuICAgICAgICBzZXNzaW9uOiBudWxsLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgY29udGV4dFByb3ZpZGVyID0gU29uYW11LmNvbmZpZy50YXNrcz8uY29udGV4dFByb3ZpZGVyO1xuICAgICAgY29uc3QgY29udGV4dDogQ29udGV4dCA9IGNvbnRleHRQcm92aWRlclxuICAgICAgICA/IGF3YWl0IFByb21pc2UucmVzb2x2ZShjb250ZXh0UHJvdmlkZXIoYmFzZUNvbnRleHQpKVxuICAgICAgICA6IGJhc2VDb250ZXh0O1xuXG4gICAgICBjb25zdCBzdGVwID0gbmV3IFN0ZXBXcmFwcGVyKHBhcmFtcy5zdGVwKTtcbiAgICAgIHJldHVybiBTb25hbXUuYXN5bmNMb2NhbFN0b3JhZ2UucnVuKHsgY29udGV4dCB9LCAoKSA9PlxuICAgICAgICBvcHRpb25zLmZ1bmN0aW9uKHtcbiAgICAgICAgICBpbnB1dDogcGFyYW1zLmlucHV0LFxuICAgICAgICAgIHN0ZXAsXG4gICAgICAgICAgdmVyc2lvbjogcGFyYW1zLnZlcnNpb24sXG4gICAgICAgICAgbG9nZ2VyOiBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkob3B0aW9ucy5uYW1lLCBcIndvcmtmbG93XCIpKSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCB3b3JrZmxvdyA9IHRoaXMuI293LmRlZmluZVdvcmtmbG93KFxuICAgICAge1xuICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyB1bmRlZmluZWQsXG4gICAgICAgIHNjaGVtYTogb3B0aW9ucy5zY2hlbWEsXG4gICAgICAgIHJldHJ5UG9saWN5OiBvcHRpb25zLnJldHJ5UG9saWN5LFxuICAgICAgfSxcbiAgICAgIGZuLFxuICAgICk7XG4gICAgcmV0dXJuIHdvcmtmbG93O1xuICB9XG5cbiAgLy8g7JuM7YGs7ZSM66Gc7Jqw66W8IOuTseuhnSDtlbTsoJwsIOq0gOugqOuQnCDsiqTsvIDspITsnYAg67OE64+E66GcIO2VtOygnO2VtOyVvCDtlaguXG4gIGFzeW5jIHVucmVnaXN0ZXJXb3JrZmxvdyh3b3JrZmxvdzogUGljazxXb3JrZmxvd01ldGFkYXRhLCBcIm5hbWVcIiB8IFwidmVyc2lvblwiIHwgXCJpZFwiPikge1xuICAgIHRoaXMuI293LnVucmVnaXN0ZXJXb3JrZmxvdyh3b3JrZmxvdy5uYW1lLCB3b3JrZmxvdy52ZXJzaW9uID8/IG51bGwpO1xuICB9XG5cbiAgLy8gV29ya2Vy66W8IOyEpOyglSDtm4Qg7Iuc7J6RXG4gIHNldHVwV29ya2VyKG9wdGlvbnM6IFdvcmtmbG93T3B0aW9ucykge1xuICAgIHRoaXMuI3dvcmtlciA9IHRoaXMuI293Lm5ld1dvcmtlcihvcHRpb25zKTtcbiAgfVxuXG4gIC8vIFdvcmtlcuqwgCDsnojsnLzrqbQgV29ya2Vy6rmM7KeAIOy0iOq4sO2ZlCwg7JWE64uI66m0IOuwseyXlOuTnOunjCDstIjquLDtmZRcbiAgYXN5bmMgc3RhcnRXb3JrZXIoKSB7XG4gICAgYXdhaXQgdGhpcy4jYmFja2VuZC5pbml0aWFsaXplKCk7XG4gICAgYXdhaXQgdGhpcy4jd29ya2VyPy5zdGFydCgpO1xuICB9XG5cbiAgLy8gV29ya2Vy66W8IOykkeyngFxuICBhc3luYyBzdG9wV29ya2VyKCkge1xuICAgIGF3YWl0IHRoaXMuI3dvcmtlcj8uc3RvcCgpO1xuICB9XG5cbiAgLy8gY3JvbiB0YXNr65Ok7J2EIOuqqOuRkCDspJHsp4BcbiAgYXN5bmMgc3RvcFNjaGVkdWxlcygpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICBBcnJheS5mcm9tKHRoaXMuI3NjaGVkdWxlZFRhc2tzLnZhbHVlcygpKS5tYXAoKHsgdGFzayB9KSA9PiBQcm9taXNlLnJlc29sdmUodGFzay5zdG9wKCkpKSxcbiAgICApO1xuICB9XG5cbiAgLy8gY3JvbiB0YXNr65Ok7J2EIOuqqOuRkCDsoJXrpqxcbiAgYXN5bmMgZGVzdHJveVNjaGVkdWxlcygpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICBBcnJheS5mcm9tKHRoaXMuI3NjaGVkdWxlZFRhc2tzLnZhbHVlcygpKS5tYXAoKHsgdGFzayB9KSA9PiBQcm9taXNlLnJlc29sdmUodGFzay5kZXN0cm95KCkpKSxcbiAgICApO1xuICAgIHRoaXMuI3NjaGVkdWxlZFRhc2tzLmNsZWFyKCk7XG4gIH1cblxuICBhc3luYyBkZXN0cm95KCkge1xuICAgIGF3YWl0IHRoaXMuc3RvcFNjaGVkdWxlcygpO1xuICAgIGF3YWl0IHRoaXMuc3RvcFdvcmtlcigpO1xuICAgIGF3YWl0IHRoaXMuZGVzdHJveVNjaGVkdWxlcygpO1xuICAgIGF3YWl0IHRoaXMuI2JhY2tlbmQuc3RvcCgpO1xuICB9XG5cbiAgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCkge1xuICAgIHJldHVybiB0aGlzLmRlc3Ryb3koKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Q0FzQnNDLFlBQUE7Q0FDc0IsY0FBQTtDQUN0QixXQUFBO0NBQ2MsU0FBQTtDQUVJLG1CQUFBO0NBRVosa0JBQUE7Q0FxQy9CLGtCQUFiLE1BQTZCO0VBRTNCO0VBR0E7RUFHQTtFQUdBO0VBR0E7RUFVQSxZQUFZLFFBQXFCLGdCQUF5QixNQUFNO0dBQzlELE1BQU0sVUFBVSxJQUFJLGdCQUFnQixRQUFRLEVBQUUsY0FBYyxDQUFDO0dBRTdELEtBQUssV0FBVztHQUNoQixLQUFLLE1BQU0sSUFBSSxhQUFhLEVBQUUsUUFBUSxDQUFDO0dBQ3ZDLEtBQUssVUFBVTtHQUVmLEtBQUssZ0NBQWdCLElBQUksSUFBSTtHQUM3QixLQUFLLGtDQUFrQixJQUFJLElBQUk7RUFDakM7RUFHQSxJQUFJLFVBQTJCO0dBQzdCLE9BQU8sS0FBSztFQUNkO0VBRUEsSUFBSSxzQkFBc0I7R0FDeEIsT0FBTyxNQUFNLEtBQUssS0FBSyxjQUFjLE9BQU8sQ0FBQyxDQUFDLENBQzNDLEtBQUssQ0FBQyxDQUNOLEtBQUssUUFBUTtJQUNaLElBQUksR0FBRztJQUNQLE1BQU0sR0FBRztJQUNULFNBQVMsR0FBRztJQUNaLFdBQVcsR0FBRyxVQUFVLEtBQUssT0FBTztLQUNsQyxNQUFNLEVBQUU7S0FDUixZQUFZLEVBQUU7SUFDaEIsRUFBRTtJQUNGLGFBQWEsR0FBRyxjQUFjLHFCQUFxQixHQUFHLFdBQVcsSUFBSTtHQUN2RSxFQUFFO0VBQ047Ozs7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
@@ -5,7 +5,7 @@ import { EntityManager, init_entity_manager } from "../entity/entity-manager.js"
5
5
  import { init_zod_converter, propToZodType, zodTypeToRenderingNode } from "./zod-converter.js";
6
6
  import { z } from "zod";
7
7
  import assert from "assert";
8
- //#region src/template/entity-converter.ts
8
+ // src/template/entity-converter.ts
9
9
  /**
10
10
  * 엔티티의 특정 subset을 RenderingNode로 변환합니다.
11
11
  * subset의 필드들을 Zod 타입으로 변환한 후 UI 렌더링용 노드로 만듭니다.
@@ -15,10 +15,11 @@ async function getColumnsNode(entityId, subsetKey) {
15
15
  const entity = EntityManager.get(entityId);
16
16
  const subsetDef = entity.subsets[subsetKey];
17
17
  if (subsetDef === void 0) throw new ServiceUnavailableException(SD("sonamu.error.subsetNotFound")(subsetKey));
18
- const columnsNode = zodTypeToRenderingNode(await propNodeToZodType({
18
+ const columnsZodType = await propNodeToZodType({
19
19
  nodeType: "object",
20
20
  children: entity.fieldExprsToPropNodes(subsetDef)
21
- }));
21
+ });
22
+ const columnsNode = zodTypeToRenderingNode(columnsZodType);
22
23
  assert(columnsNode.children !== void 0, "columnsNode.children is undefined");
23
24
  columnsNode.children = columnsNode.children.map((child) => {
24
25
  if (child.renderType === "object") {
@@ -52,17 +53,18 @@ async function getColumnsNode(entityId, subsetKey) {
52
53
  */
53
54
  async function propNodeToZodType(propNode) {
54
55
  if (propNode.nodeType === "plain") return propToZodType(propNode.prop);
55
- else if (propNode.nodeType === "array") if (propNode.prop === void 0) throw new Error();
56
- else if (propNode.children.length > 0) return (await propNodeToZodType({
57
- ...propNode,
58
- nodeType: "object"
59
- })).array();
60
- else {
61
- const innerType = await propToZodType(propNode.prop);
62
- if (propNode.prop.nullable === true) return z.array(innerType).nullable();
63
- else return z.array(innerType);
64
- }
65
- else if (propNode.nodeType === "object") {
56
+ else if (propNode.nodeType === "array") {
57
+ if (propNode.prop === void 0) throw new Error();
58
+ else if (propNode.children.length > 0) return (await propNodeToZodType({
59
+ ...propNode,
60
+ nodeType: "object"
61
+ })).array();
62
+ else {
63
+ const innerType = await propToZodType(propNode.prop);
64
+ if (propNode.prop.nullable === true) return z.array(innerType).nullable();
65
+ else return z.array(innerType);
66
+ }
67
+ } else if (propNode.nodeType === "object") {
66
68
  const entries = await Promise.all(propNode.children.map(async (childPropNode) => {
67
69
  assert(childPropNode.prop?.name !== void 0, "childPropNode.prop.name is undefined");
68
70
  return [childPropNode.prop.name, await propNodeToZodType(childPropNode)];
@@ -78,8 +80,7 @@ var init_entity_converter = __esmMin((() => {
78
80
  init_so_exceptions();
79
81
  init_zod_converter();
80
82
  }));
81
- //#endregion
82
83
  init_entity_converter();
83
84
  export { getColumnsNode, init_entity_converter, propNodeToZodType };
84
85
 
85
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWNvbnZlcnRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvZW50aXR5LWNvbnZlcnRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vZGljdC9zZFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5UHJvcE5vZGUsIHR5cGUgUmVuZGVyaW5nTm9kZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgcHJvcFRvWm9kVHlwZSwgem9kVHlwZVRvUmVuZGVyaW5nTm9kZSB9IGZyb20gXCIuL3pvZC1jb252ZXJ0ZXJcIjtcblxuLyoqXG4gKiDsl5Tti7Dti7DsnZgg7Yq57KCVIHN1YnNldOydhCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHN1YnNldOydmCDtlYTrk5zrk6TsnYQgWm9kIO2DgOyeheycvOuhnCDrs4DtmZjtlZwg7ZuEIFVJIOugjOuNlOungeyaqSDrhbjrk5zroZwg66eM65Ot64uI64ukLlxuICogb2JqZWN07JmAIGFycmF57J2YIOqyveyasCDsoIHsoIjtlZwgcGljayDtlYTrk5zrpbwg7J6Q64+Z7Jy866GcIOyEoO2Dne2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENvbHVtbnNOb2RlKGVudGl0eUlkOiBzdHJpbmcsIHN1YnNldEtleTogc3RyaW5nKTogUHJvbWlzZTxSZW5kZXJpbmdOb2RlPiB7XG4gIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgY29uc3Qgc3Vic2V0RGVmID0gZW50aXR5LnN1YnNldHNbc3Vic2V0S2V5XTtcbiAgaWYgKHN1YnNldERlZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbihTRChcInNvbmFtdS5lcnJvci5zdWJzZXROb3RGb3VuZFwiKShzdWJzZXRLZXkpKTtcbiAgfVxuICBjb25zdCBwcm9wTm9kZXMgPSBlbnRpdHkuZmllbGRFeHByc1RvUHJvcE5vZGVzKHN1YnNldERlZik7XG4gIGNvbnN0IHJvb3RQcm9wTm9kZTogRW50aXR5UHJvcE5vZGUgPSB7XG4gICAgbm9kZVR5cGU6IFwib2JqZWN0XCIsXG4gICAgY2hpbGRyZW46IHByb3BOb2RlcyxcbiAgfTtcblxuICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSB6b2Qg7Iqk7YKk66eI66W8IOuhnOuTnO2VoCDrlYwg7IKs7Jqp7ZWY64qUIO2DgOyehVxuICBjb25zdCBjb2x1bW5zWm9kVHlwZSA9XG4gICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoYXdhaXQgcHJvcE5vZGVUb1pvZFR5cGUoXG4gICAgICByb290UHJvcE5vZGUsXG4gICAgKSkgYXMgei5ab2RPYmplY3Q8YW55PjtcblxuICBjb25zdCBjb2x1bW5zTm9kZSA9IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoY29sdW1uc1pvZFR5cGUpO1xuICBhc3NlcnQoY29sdW1uc05vZGUuY2hpbGRyZW4gIT09IHVuZGVmaW5lZCwgXCJjb2x1bW5zTm9kZS5jaGlsZHJlbiBpcyB1bmRlZmluZWRcIik7XG4gIGNvbHVtbnNOb2RlLmNoaWxkcmVuID0gY29sdW1uc05vZGUuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4ge1xuICAgIGlmIChjaGlsZC5yZW5kZXJUeXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBhc3NlcnQoY2hpbGQuY2hpbGRyZW4gIT09IHVuZGVmaW5lZCwgXCJjaGlsZC5jaGlsZHJlbiBpcyB1bmRlZmluZWRcIik7XG4gICAgICBjb25zdCBwaWNrZWRDb2wgPSBjaGlsZC5jaGlsZHJlbi5maW5kKChjYykgPT4gW1widGl0bGVcIiwgXCJuYW1lXCJdLmluY2x1ZGVzKGNjLm5hbWUpKTtcbiAgICAgIGlmIChwaWNrZWRDb2wpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICByZW5kZXJUeXBlOiBcIm9iamVjdC1waWNrXCIsXG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICBwaWNrZWQ6IHBpY2tlZENvbC5uYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGNoaWxkLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIiAmJlxuICAgICAgY2hpbGQuZWxlbWVudCAmJlxuICAgICAgY2hpbGQuZWxlbWVudC5yZW5kZXJUeXBlID09PSBcIm9iamVjdFwiXG4gICAgKSB7XG4gICAgICBjb25zdCBwaWNrZWRDb2wgPSBjaGlsZC5lbGVtZW50Py5jaGlsZHJlbj8uZmluZCgoY2MpID0+IFtcInRpdGxlXCIsIFwibmFtZVwiXS5pbmNsdWRlcyhjYy5uYW1lKSk7XG4gICAgICBpZiAocGlja2VkQ29sKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY2hpbGQsXG4gICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgLi4uY2hpbGQuZWxlbWVudCxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6IFwib2JqZWN0LXBpY2tcIixcbiAgICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgICBwaWNrZWQ6IHBpY2tlZENvbC5uYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pO1xuXG4gIHJldHVybiBjb2x1bW5zTm9kZTtcbn1cblxuLyoqXG4gKiBFbnRpdHlQcm9wTm9kZeulvCBab2Qg7YOA7J6F7Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHBsYWluLCBhcnJheSwgb2JqZWN0IOyEuCDqsIDsp4Agbm9kZVR5cGXsnYQg7J6s6reA7KCB7Jy866GcIOyymOumrO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb3BOb2RlVG9ab2RUeXBlKHByb3BOb2RlOiBFbnRpdHlQcm9wTm9kZSk6IFByb21pc2U8ei5ab2RUeXBlQW55PiB7XG4gIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJwbGFpblwiKSB7XG4gICAgcmV0dXJuIHByb3BUb1pvZFR5cGUocHJvcE5vZGUucHJvcCk7XG4gIH0gZWxzZSBpZiAocHJvcE5vZGUubm9kZVR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgIGlmIChwcm9wTm9kZS5wcm9wID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgIH0gZWxzZSBpZiAocHJvcE5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgYXdhaXQgcHJvcE5vZGVUb1pvZFR5cGUoe1xuICAgICAgICAgIC4uLnByb3BOb2RlLFxuICAgICAgICAgIG5vZGVUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgICB9KVxuICAgICAgKS5hcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbm5lclR5cGUgPSBhd2FpdCBwcm9wVG9ab2RUeXBlKHByb3BOb2RlLnByb3ApO1xuICAgICAgaWYgKHByb3BOb2RlLnByb3AubnVsbGFibGUgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHouYXJyYXkoaW5uZXJUeXBlKS5udWxsYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHouYXJyYXkoaW5uZXJUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvcE5vZGUubm9kZVR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBwcm9wTm9kZS5jaGlsZHJlbi5tYXAoYXN5bmMgKGNoaWxkUHJvcE5vZGUpID0+IHtcbiAgICAgICAgYXNzZXJ0KGNoaWxkUHJvcE5vZGUucHJvcD8ubmFtZSAhPT0gdW5kZWZpbmVkLCBcImNoaWxkUHJvcE5vZGUucHJvcC5uYW1lIGlzIHVuZGVmaW5lZFwiKTtcbiAgICAgICAgcmV0dXJuIFtjaGlsZFByb3BOb2RlLnByb3AubmFtZSwgYXdhaXQgcHJvcE5vZGVUb1pvZFR5cGUoY2hpbGRQcm9wTm9kZSldIGFzIGNvbnN0O1xuICAgICAgfSksXG4gICAgKTtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcyk7XG5cbiAgICBpZiAocHJvcE5vZGUucHJvcD8ubnVsbGFibGUgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiB6Lm9iamVjdChvYmopLm51bGxhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB6Lm9iamVjdChvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcjtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBZUEsZUFBc0IsZUFBZSxVQUFrQixXQUEyQztDQUNoRyxNQUFNLFNBQVMsY0FBYyxJQUFJLFFBQVE7Q0FDekMsTUFBTSxZQUFZLE9BQU8sUUFBUTtDQUNqQyxJQUFJLGNBQWMsUUFDaEIsTUFBTSxJQUFJLDRCQUE0QixHQUFHLDZCQUE2QixDQUFDLENBQUMsU0FBUyxDQUFDO0NBY3BGLE1BQU0sY0FBYyx1QkFBdUIsTUFKb0Isa0JBQzNEO0VBUEYsVUFBVTtFQUNWLFVBSGdCLE9BQU8sc0JBQXNCLFNBR25DO0NBTVIsQ0FDRixDQUV1RDtDQUN6RCxPQUFPLFlBQVksYUFBYSxRQUFXLG1DQUFtQztDQUM5RSxZQUFZLFdBQVcsWUFBWSxTQUFTLEtBQUssVUFBVTtFQUN6RCxJQUFJLE1BQU0sZUFBZSxVQUFVO0dBQ2pDLE9BQU8sTUFBTSxhQUFhLFFBQVcsNkJBQTZCO0dBQ2xFLE1BQU0sWUFBWSxNQUFNLFNBQVMsTUFBTSxPQUFPLENBQUMsU0FBUyxNQUFNLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0dBQ2pGLElBQUksV0FDRixPQUFPO0lBQ0wsR0FBRztJQUNILFlBQVk7SUFDWixRQUFRLEVBQ04sUUFBUSxVQUFVLEtBQ3BCO0dBQ0Y7UUFFQSxPQUFPO0VBRVgsT0FBTyxJQUNMLE1BQU0sZUFBZSxXQUNyQixNQUFNLFdBQ04sTUFBTSxRQUFRLGVBQWUsVUFDN0I7R0FDQSxNQUFNLFlBQVksTUFBTSxTQUFTLFVBQVUsTUFBTSxPQUFPLENBQUMsU0FBUyxNQUFNLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0dBQzNGLElBQUksV0FDRixPQUFPO0lBQ0wsR0FBRztJQUNILFNBQVM7S0FDUCxHQUFHLE1BQU07S0FDVCxZQUFZO0tBQ1osUUFBUSxFQUNOLFFBQVEsVUFBVSxLQUNwQjtJQUNGO0dBQ0Y7UUFFQSxPQUFPO0VBRVg7RUFDQSxPQUFPO0NBQ1QsQ0FBQztDQUVELE9BQU87QUFDVDs7Ozs7QUFNQSxlQUFzQixrQkFBa0IsVUFBaUQ7Q0FDdkYsSUFBSSxTQUFTLGFBQWEsU0FDeEIsT0FBTyxjQUFjLFNBQVMsSUFBSTtNQUM3QixJQUFJLFNBQVMsYUFBYSxTQUMvQixJQUFJLFNBQVMsU0FBUyxRQUNwQixNQUFNLElBQUksTUFBTTtNQUNYLElBQUksU0FBUyxTQUFTLFNBQVMsR0FDcEMsUUFDRSxNQUFNLGtCQUFrQjtFQUN0QixHQUFHO0VBQ0gsVUFBVTtDQUNaLENBQUMsRUFBQSxDQUNELE1BQU07TUFDSDtFQUNMLE1BQU0sWUFBWSxNQUFNLGNBQWMsU0FBUyxJQUFJO0VBQ25ELElBQUksU0FBUyxLQUFLLGFBQWEsTUFDN0IsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDLENBQUMsU0FBUztPQUVuQyxPQUFPLEVBQUUsTUFBTSxTQUFTO0NBRTVCO01BQ0ssSUFBSSxTQUFTLGFBQWEsVUFBVTtFQUN6QyxNQUFNLFVBQVUsTUFBTSxRQUFRLElBQzVCLFNBQVMsU0FBUyxJQUFJLE9BQU8sa0JBQWtCO0dBQzdDLE9BQU8sY0FBYyxNQUFNLFNBQVMsUUFBVyxzQ0FBc0M7R0FDckYsT0FBTyxDQUFDLGNBQWMsS0FBSyxNQUFNLE1BQU0sa0JBQWtCLGFBQWEsQ0FBQztFQUN6RSxDQUFDLENBQ0g7RUFDQSxNQUFNLE1BQU0sT0FBTyxZQUFZLE9BQU87RUFFdEMsSUFBSSxTQUFTLE1BQU0sYUFBYSxNQUM5QixPQUFPLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTO09BRTlCLE9BQU8sRUFBRSxPQUFPLEdBQUc7Q0FFdkIsT0FDRSxNQUFNO0FBRVY7O1NBbkgrQjtxQkFDeUI7b0JBQ2lCO29CQUVGIn0=
86
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWNvbnZlcnRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvZW50aXR5LWNvbnZlcnRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vZGljdC9zZFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5UHJvcE5vZGUsIHR5cGUgUmVuZGVyaW5nTm9kZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgcHJvcFRvWm9kVHlwZSwgem9kVHlwZVRvUmVuZGVyaW5nTm9kZSB9IGZyb20gXCIuL3pvZC1jb252ZXJ0ZXJcIjtcblxuLyoqXG4gKiDsl5Tti7Dti7DsnZgg7Yq57KCVIHN1YnNldOydhCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHN1YnNldOydmCDtlYTrk5zrk6TsnYQgWm9kIO2DgOyeheycvOuhnCDrs4DtmZjtlZwg7ZuEIFVJIOugjOuNlOungeyaqSDrhbjrk5zroZwg66eM65Ot64uI64ukLlxuICogb2JqZWN07JmAIGFycmF57J2YIOqyveyasCDsoIHsoIjtlZwgcGljayDtlYTrk5zrpbwg7J6Q64+Z7Jy866GcIOyEoO2Dne2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENvbHVtbnNOb2RlKGVudGl0eUlkOiBzdHJpbmcsIHN1YnNldEtleTogc3RyaW5nKTogUHJvbWlzZTxSZW5kZXJpbmdOb2RlPiB7XG4gIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgY29uc3Qgc3Vic2V0RGVmID0gZW50aXR5LnN1YnNldHNbc3Vic2V0S2V5XTtcbiAgaWYgKHN1YnNldERlZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbihTRChcInNvbmFtdS5lcnJvci5zdWJzZXROb3RGb3VuZFwiKShzdWJzZXRLZXkpKTtcbiAgfVxuICBjb25zdCBwcm9wTm9kZXMgPSBlbnRpdHkuZmllbGRFeHByc1RvUHJvcE5vZGVzKHN1YnNldERlZik7XG4gIGNvbnN0IHJvb3RQcm9wTm9kZTogRW50aXR5UHJvcE5vZGUgPSB7XG4gICAgbm9kZVR5cGU6IFwib2JqZWN0XCIsXG4gICAgY2hpbGRyZW46IHByb3BOb2RlcyxcbiAgfTtcblxuICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSB6b2Qg7Iqk7YKk66eI66W8IOuhnOuTnO2VoCDrlYwg7IKs7Jqp7ZWY64qUIO2DgOyehVxuICBjb25zdCBjb2x1bW5zWm9kVHlwZSA9XG4gICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoYXdhaXQgcHJvcE5vZGVUb1pvZFR5cGUoXG4gICAgICByb290UHJvcE5vZGUsXG4gICAgKSkgYXMgei5ab2RPYmplY3Q8YW55PjtcblxuICBjb25zdCBjb2x1bW5zTm9kZSA9IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoY29sdW1uc1pvZFR5cGUpO1xuICBhc3NlcnQoY29sdW1uc05vZGUuY2hpbGRyZW4gIT09IHVuZGVmaW5lZCwgXCJjb2x1bW5zTm9kZS5jaGlsZHJlbiBpcyB1bmRlZmluZWRcIik7XG4gIGNvbHVtbnNOb2RlLmNoaWxkcmVuID0gY29sdW1uc05vZGUuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4ge1xuICAgIGlmIChjaGlsZC5yZW5kZXJUeXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBhc3NlcnQoY2hpbGQuY2hpbGRyZW4gIT09IHVuZGVmaW5lZCwgXCJjaGlsZC5jaGlsZHJlbiBpcyB1bmRlZmluZWRcIik7XG4gICAgICBjb25zdCBwaWNrZWRDb2wgPSBjaGlsZC5jaGlsZHJlbi5maW5kKChjYykgPT4gW1widGl0bGVcIiwgXCJuYW1lXCJdLmluY2x1ZGVzKGNjLm5hbWUpKTtcbiAgICAgIGlmIChwaWNrZWRDb2wpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICByZW5kZXJUeXBlOiBcIm9iamVjdC1waWNrXCIsXG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICBwaWNrZWQ6IHBpY2tlZENvbC5uYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGNoaWxkLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIiAmJlxuICAgICAgY2hpbGQuZWxlbWVudCAmJlxuICAgICAgY2hpbGQuZWxlbWVudC5yZW5kZXJUeXBlID09PSBcIm9iamVjdFwiXG4gICAgKSB7XG4gICAgICBjb25zdCBwaWNrZWRDb2wgPSBjaGlsZC5lbGVtZW50Py5jaGlsZHJlbj8uZmluZCgoY2MpID0+IFtcInRpdGxlXCIsIFwibmFtZVwiXS5pbmNsdWRlcyhjYy5uYW1lKSk7XG4gICAgICBpZiAocGlja2VkQ29sKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY2hpbGQsXG4gICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgLi4uY2hpbGQuZWxlbWVudCxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6IFwib2JqZWN0LXBpY2tcIixcbiAgICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgICBwaWNrZWQ6IHBpY2tlZENvbC5uYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pO1xuXG4gIHJldHVybiBjb2x1bW5zTm9kZTtcbn1cblxuLyoqXG4gKiBFbnRpdHlQcm9wTm9kZeulvCBab2Qg7YOA7J6F7Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHBsYWluLCBhcnJheSwgb2JqZWN0IOyEuCDqsIDsp4Agbm9kZVR5cGXsnYQg7J6s6reA7KCB7Jy866GcIOyymOumrO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb3BOb2RlVG9ab2RUeXBlKHByb3BOb2RlOiBFbnRpdHlQcm9wTm9kZSk6IFByb21pc2U8ei5ab2RUeXBlQW55PiB7XG4gIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJwbGFpblwiKSB7XG4gICAgcmV0dXJuIHByb3BUb1pvZFR5cGUocHJvcE5vZGUucHJvcCk7XG4gIH0gZWxzZSBpZiAocHJvcE5vZGUubm9kZVR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgIGlmIChwcm9wTm9kZS5wcm9wID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgIH0gZWxzZSBpZiAocHJvcE5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgYXdhaXQgcHJvcE5vZGVUb1pvZFR5cGUoe1xuICAgICAgICAgIC4uLnByb3BOb2RlLFxuICAgICAgICAgIG5vZGVUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgICB9KVxuICAgICAgKS5hcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbm5lclR5cGUgPSBhd2FpdCBwcm9wVG9ab2RUeXBlKHByb3BOb2RlLnByb3ApO1xuICAgICAgaWYgKHByb3BOb2RlLnByb3AubnVsbGFibGUgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHouYXJyYXkoaW5uZXJUeXBlKS5udWxsYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHouYXJyYXkoaW5uZXJUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvcE5vZGUubm9kZVR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBwcm9wTm9kZS5jaGlsZHJlbi5tYXAoYXN5bmMgKGNoaWxkUHJvcE5vZGUpID0+IHtcbiAgICAgICAgYXNzZXJ0KGNoaWxkUHJvcE5vZGUucHJvcD8ubmFtZSAhPT0gdW5kZWZpbmVkLCBcImNoaWxkUHJvcE5vZGUucHJvcC5uYW1lIGlzIHVuZGVmaW5lZFwiKTtcbiAgICAgICAgcmV0dXJuIFtjaGlsZFByb3BOb2RlLnByb3AubmFtZSwgYXdhaXQgcHJvcE5vZGVUb1pvZFR5cGUoY2hpbGRQcm9wTm9kZSldIGFzIGNvbnN0O1xuICAgICAgfSksXG4gICAgKTtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcyk7XG5cbiAgICBpZiAocHJvcE5vZGUucHJvcD8ubnVsbGFibGUgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiB6Lm9iamVjdChvYmopLm51bGxhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB6Lm9iamVjdChvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcjtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBZUEsZUFBc0IsZUFBZSxVQUFrQixXQUEyQztDQUNoRyxNQUFNLFNBQVMsY0FBYyxJQUFJLFFBQVE7Q0FDekMsTUFBTSxZQUFZLE9BQU8sUUFBUTtDQUNqQyxJQUFJLGNBQWMsUUFDaEIsTUFBTSxJQUFJLDRCQUE0QixHQUFHLDZCQUE2QixDQUFDLENBQUMsU0FBUyxDQUFDO0NBU3BGLE1BQU0saUJBQ21ELE1BQU0sa0JBQzNEO0VBUEYsVUFBVTtFQUNWLFVBSGdCLE9BQU8sc0JBQXNCLFNBR25DO0NBTVIsQ0FDRjtDQUVGLE1BQU0sY0FBYyx1QkFBdUIsY0FBYztDQUN6RCxPQUFPLFlBQVksYUFBYSxRQUFXLG1DQUFtQztDQUM5RSxZQUFZLFdBQVcsWUFBWSxTQUFTLEtBQUssVUFBVTtFQUN6RCxJQUFJLE1BQU0sZUFBZSxVQUFVO0dBQ2pDLE9BQU8sTUFBTSxhQUFhLFFBQVcsNkJBQTZCO0dBQ2xFLE1BQU0sWUFBWSxNQUFNLFNBQVMsTUFBTSxPQUFPLENBQUMsU0FBUyxNQUFNLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0dBQ2pGLElBQUksV0FDRixPQUFPO0lBQ0wsR0FBRztJQUNILFlBQVk7SUFDWixRQUFRLEVBQ04sUUFBUSxVQUFVLEtBQ3BCO0dBQ0Y7UUFFQSxPQUFPO0VBRVgsT0FBTyxJQUNMLE1BQU0sZUFBZSxXQUNyQixNQUFNLFdBQ04sTUFBTSxRQUFRLGVBQWUsVUFDN0I7R0FDQSxNQUFNLFlBQVksTUFBTSxTQUFTLFVBQVUsTUFBTSxPQUFPLENBQUMsU0FBUyxNQUFNLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0dBQzNGLElBQUksV0FDRixPQUFPO0lBQ0wsR0FBRztJQUNILFNBQVM7S0FDUCxHQUFHLE1BQU07S0FDVCxZQUFZO0tBQ1osUUFBUSxFQUNOLFFBQVEsVUFBVSxLQUNwQjtJQUNGO0dBQ0Y7UUFFQSxPQUFPO0VBRVg7RUFDQSxPQUFPO0NBQ1QsQ0FBQztDQUVELE9BQU87QUFDVDs7Ozs7QUFNQSxlQUFzQixrQkFBa0IsVUFBaUQ7Q0FDdkYsSUFBSSxTQUFTLGFBQWEsU0FDeEIsT0FBTyxjQUFjLFNBQVMsSUFBSTtNQUM3QixJQUFJLFNBQVMsYUFBYSxTQUFTO0VBQ3hDLElBQUksU0FBUyxTQUFTLFFBQ3BCLE1BQU0sSUFBSSxNQUFNO09BQ1gsSUFBSSxTQUFTLFNBQVMsU0FBUyxHQUNwQyxRQUNFLE1BQU0sa0JBQWtCO0dBQ3RCLEdBQUc7R0FDSCxVQUFVO0VBQ1osQ0FBQyxFQUFBLENBQ0QsTUFBTTtPQUNIO0dBQ0wsTUFBTSxZQUFZLE1BQU0sY0FBYyxTQUFTLElBQUk7R0FDbkQsSUFBSSxTQUFTLEtBQUssYUFBYSxNQUM3QixPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUMsQ0FBQyxTQUFTO1FBRW5DLE9BQU8sRUFBRSxNQUFNLFNBQVM7RUFFNUI7Q0FDRixPQUFPLElBQUksU0FBUyxhQUFhLFVBQVU7RUFDekMsTUFBTSxVQUFVLE1BQU0sUUFBUSxJQUM1QixTQUFTLFNBQVMsSUFBSSxPQUFPLGtCQUFrQjtHQUM3QyxPQUFPLGNBQWMsTUFBTSxTQUFTLFFBQVcsc0NBQXNDO0dBQ3JGLE9BQU8sQ0FBQyxjQUFjLEtBQUssTUFBTSxNQUFNLGtCQUFrQixhQUFhLENBQUM7RUFDekUsQ0FBQyxDQUNIO0VBQ0EsTUFBTSxNQUFNLE9BQU8sWUFBWSxPQUFPO0VBRXRDLElBQUksU0FBUyxNQUFNLGFBQWEsTUFDOUIsT0FBTyxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsU0FBUztPQUU5QixPQUFPLEVBQUUsT0FBTyxHQUFHO0NBRXZCLE9BQ0UsTUFBTTtBQUVWOztDQW5IK0IsUUFBQTtDQUN5QixvQkFBQTtDQUNpQixtQkFBQTtDQUVGLG1CQUFBIn0=
@@ -2,7 +2,7 @@ import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
2
  import { init_types, isEnumProp, isRelationProp } from "../types/types.js";
3
3
  import { EntityManager, init_entity_manager } from "../entity/entity-manager.js";
4
4
  import inflection from "inflection";
5
- //#region src/template/helpers.ts
5
+ // src/template/helpers.ts
6
6
  /**
7
7
  * Enum의 표시용 라벨을 가져옵니다.
8
8
  * OrderBy, SearchField 등 특수한 경우와 일반 Enum을 구분하여 처리합니다.
@@ -137,8 +137,7 @@ var init_helpers = __esmMin((() => {
137
137
  init_entity_manager();
138
138
  init_types();
139
139
  }));
140
- //#endregion
141
140
  init_helpers();
142
141
  export { extractObjectDeclaration, getEnumInfoFromColName, getLabel, getRelationNameFromColumnName, getRelationPropFromColName, init_helpers };
143
142
 
144
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuXG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IGlzRW51bVByb3AsIGlzUmVsYXRpb25Qcm9wIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFJlbGF0aW9uUHJvcCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuXG5pbnRlcmZhY2UgRW51bUNvbHVtbkluZm8ge1xuICBpZDogc3RyaW5nO1xuICB0YXJnZXRFbnRpdHlOYW1lczogRW50aXR5TmFtZXNSZWNvcmQ7XG4gIHRhcmdldEVudGl0eUlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW51beydmCDtkZzsi5zsmqkg652867Ko7J2EIOqwgOyguOyYteuLiOuLpC5cbiAqIE9yZGVyQnksIFNlYXJjaEZpZWxkIOuTsSDtirnsiJjtlZwg6rK97Jqw7JmAIOydvOuwmCBFbnVt7J2EIOq1rOu2hO2VmOyXrCDsspjrpqztlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYWJlbChlbnRpdHlJZDogc3RyaW5nLCBlbnVtSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChlbnVtSWQuZW5kc1dpdGgoXCJPcmRlckJ5XCIpKSB7XG4gICAgcmV0dXJuIFwi7KCV66CsXCI7XG4gIH0gZWxzZSBpZiAoZW51bUlkLmVuZHNXaXRoKFwiU2VhcmNoRmllbGRcIikpIHtcbiAgICByZXR1cm4gXCLqsoDsg4lcIjtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlbnVtUHJvcCA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKS5wcm9wcy5maW5kKFxuICAgICAgKHByb3ApID0+IGAke2VudGl0eUlkfSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wLm5hbWUpfWAgPT09IGVudW1JZCxcbiAgICApO1xuICAgIGlmIChlbnVtUHJvcD8uZGVzYykge1xuICAgICAgcmV0dXJuIGVudW1Qcm9wLmRlc2M7XG4gICAgfVxuICAgIHJldHVybiBlbnVtSWQ7XG4gIH1cbn1cblxuLyoqXG4gKiDsu6zrn7wg7J2066aE7Jy866Gc67aA7YSwIEVudW0g7KCV67O066W8IOy2lOy2nO2VqeuLiOuLpC5cbiAqIEVudGl0eeydmCBwcm9wIOykkSBlbnVtIO2DgOyeheyduCDqsoPsnYQg7LC+7JWEIOq0gOugqCDsoJXrs7Trpbwg67CY7ZmY7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZDogc3RyaW5nLCBjb2xOYW1lOiBzdHJpbmcpOiBFbnVtQ29sdW1uSW5mbyB7XG4gIGNvbnN0IGJhc2VFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gIGNvbnN0IHByb3AgPSBiYXNlRW50aXR5LnByb3BzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gY29sTmFtZSk7XG4gIGlmIChwcm9wICYmIGlzRW51bVByb3AocHJvcCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHByb3AuaWQsXG4gICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICB0YXJnZXRFbnRpdHlOYW1lczogRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCksXG4gICAgICB0aXRsZTogcHJvcC5kZXNjID8/IHByb3AuaWQsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBpZENhbmRpZGF0ZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBgJHtpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpfV8ke2luZmxlY3Rpb24udW5kZXJzY29yZShjb2xOYW1lKX1gLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRFbnRpdHlOYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogaWRDYW5kaWRhdGUsXG4gICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICB0YXJnZXRFbnRpdHlOYW1lczogdGFyZ2V0RW50aXR5TmFtZXMsXG4gICAgICB0aXRsZTogaWRDYW5kaWRhdGUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIOy7rOufvCDsnbTrpoTsnLzroZzrtoDthLAgUmVsYXRpb24gcHJvcCDsoJXrs7Trpbwg6rCA7KC47Ji164uI64ukLlxuICog6rSA6rOE7ZiVIHByb3DsnbQg7JWE64uMIOqyveyasCDsl5Drn6zrpbwg67Cc7IOd7Iuc7YK164uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQ6IHN0cmluZywgY29sTmFtZTogc3RyaW5nKTogUmVsYXRpb25Qcm9wIHtcbiAgY29uc3QgYmFzZUVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgY29uc3QgcmVsUHJvcCA9IGJhc2VFbnRpdHkucHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC5uYW1lID09PSBjb2xOYW1lKTtcbiAgaWYgKGlzUmVsYXRpb25Qcm9wKHJlbFByb3ApKSB7XG4gICAgY29uc3QgcmVsRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocmVsUHJvcC53aXRoKTtcbiAgICBpZiAocmVsRW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk9ubHkgcGFyZW50IGVudGl0aWVzIGNhbiBiZSB1c2VkIGFzIHJlbGF0aW9uIHByb3BzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVsUHJvcDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOywvuydhCDsiJgg7JeG64qUIFJlbGF0aW9uICR7Y29sTmFtZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEZLIOy7rOufvOuqheyXkOyEnCDsi6TsoJwgcmVsYXRpb24g7J2066aE7J2EIOy2lOy2nO2VqeuLiOuLpC5cbiAqIEJlbG9uZ3NUb09uZS9PbmVUb09uZSByZWxhdGlvbuydgCBzdWJzZXTsl5DshJwgRksg7Lus65+866qFKHVzZXJfaWQp7Jy866GcIOyDneyEseuQmOuvgOuhnCDrs4DtmZjsnbQg7ZWE7JqU7ZWY6rOgLFxuICogTWFueVRvTWFueSByZWxhdGlvbuydgCBzdWJzZXTsl5DshJwgcmVsYXRpb27rqoUoZW1wbG95ZWUp7Jy866GcIOyDneyEseuQmOuvgOuhnCDrs4DtmZjsnbQg67aI7ZWE7JqU7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShcIkVtcGxveWVlXCIsIFwidXNlcl9pZFwiKSAvLyBcInVzZXJcIlxuICogZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoXCJQcm9qZWN0XCIsIFwidGFnX2lkc1wiKSAvLyBcInRhZ3NcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQ6IHN0cmluZywgY29sTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gX2lkcyAo67O17IiYKSDsspjrpqxcbiAgaWYgKGNvbE5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgY29uc3QgYmFzZU5hbWUgPSBjb2xOYW1lLnJlcGxhY2UoL19pZHMkLywgXCJcIik7XG4gICAgLy8g66i87KCAIGJhc2UgbmFtZeycvOuhnCDssL7quLBcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBiYXNlTmFtZSk7XG4gICAgICByZXR1cm4gcmVsUHJvcC5uYW1lO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gcGx1cmFsaXpl7ZW07IScIOywvuq4sFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGx1cmFsTmFtZSA9IGluZmxlY3Rpb24ucGx1cmFsaXplKGJhc2VOYW1lKTtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBwbHVyYWxOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gX2lkICjri6jsiJgpIOyymOumrFxuICBpZiAoY29sTmFtZS5lbmRzV2l0aChcIl9pZFwiKSAmJiBjb2xOYW1lICE9PSBcImlkXCIpIHtcbiAgICBjb25zdCBiYXNlTmFtZSA9IGNvbE5hbWUucmVwbGFjZSgvX2lkJC8sIFwiXCIpO1xuICAgIC8vIOuovOyggCBiYXNlIG5hbWXsnLzroZwg7LC+6riwXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgYmFzZU5hbWUpO1xuICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHNpbmd1bGFyaXpl7ZW07IScIOywvuq4sFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2luZ3VsYXJOYW1lID0gaW5mbGVjdGlvbi5zaW5ndWxhcml6ZShiYXNlTmFtZSk7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgc2luZ3VsYXJOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbE5hbWU7XG59XG5cbi8qKlxuICog7IaM7IqkIOy9lOuTnOyXkOyEnCDqsJ3ssrQg7ISg7Ja47J2EIOy2lOy2nO2VqeuLiOuLpC5cbiAqIOykkeq0hO2YuCDsubTsmrTtjIUg67Cp7Iud7Jy866GcIOykkeyyqeuQnCDqsJ3ssrTrj4Qg7KCV7ZmV7Z6IIO2MjOyLse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RPYmplY3REZWNsYXJhdGlvbihzb3VyY2VDb2RlOiBzdHJpbmcsIHZhck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFwiZXhwb3J0IGNvbnN0IHZhck5hbWUgPSB7XCIg7Yyo7YS0IOywvuq4sFxuICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChgZXhwb3J0IGNvbnN0ICR7dmFyTmFtZX1cXFxccyo9XFxcXHMqXFxcXHtgKTtcbiAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc291cmNlQ29kZSk7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgLy8g7Iuc7J6RIOychOy5mFxuICBjb25zdCBzdGFydElkeCA9IG1hdGNoLmluZGV4O1xuICBjb25zdCBvcGVuQnJhY2VJZHggPSBzb3VyY2VDb2RlLmluZGV4T2YoXCJ7XCIsIHN0YXJ0SWR4KTtcblxuICAvLyDspJHqtITtmLgg7Lm07Jq07YyFXG4gIGxldCBicmFjZUNvdW50ID0gMDtcbiAgbGV0IGluU3RyaW5nID0gZmFsc2U7XG4gIGxldCBpblRlbXBsYXRlID0gZmFsc2U7XG4gIGxldCBzdHJpbmdDaGFyID0gXCJcIjtcbiAgbGV0IGVuZElkeCA9IG9wZW5CcmFjZUlkeDtcblxuICBmb3IgKGxldCBpID0gb3BlbkJyYWNlSWR4OyBpIDwgc291cmNlQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoYXIgPSBzb3VyY2VDb2RlW2ldO1xuICAgIGNvbnN0IHByZXZDaGFyID0gaSA+IDAgPyBzb3VyY2VDb2RlW2kgLSAxXSA6IFwiXCI7XG5cbiAgICAvLyDsnbTsiqTsvIDsnbTtlITrkJwg66y47J6Q64qUIOustOyLnFxuICAgIGlmIChwcmV2Q2hhciA9PT0gXCJcXFxcXCIgJiYgKGluU3RyaW5nIHx8IGluVGVtcGxhdGUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDrrLjsnpDsl7Qg7Iuc7J6RL+yiheujjFxuICAgIGlmICgoY2hhciA9PT0gJ1wiJyB8fCBjaGFyID09PSBcIidcIikgJiYgIWluVGVtcGxhdGUpIHtcbiAgICAgIGlmICghaW5TdHJpbmcpIHtcbiAgICAgICAgaW5TdHJpbmcgPSB0cnVlO1xuICAgICAgICBzdHJpbmdDaGFyID0gY2hhcjtcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gc3RyaW5nQ2hhcikge1xuICAgICAgICBpblN0cmluZyA9IGZhbHNlO1xuICAgICAgICBzdHJpbmdDaGFyID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIO2FnO2UjOumvyDrpqzthLDrn7Qg7Iuc7J6RL+yiheujjFxuICAgIGlmIChjaGFyID09PSBcImBcIiAmJiAhaW5TdHJpbmcpIHtcbiAgICAgIGluVGVtcGxhdGUgPSAhaW5UZW1wbGF0ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIOusuOyekOyXtC/thZztlIzrpr8g64K067aA64qUIOykkeq0hO2YuCDsubTsmrTtjIUg7JWIIO2VqFxuICAgIGlmIChpblN0cmluZyB8fCBpblRlbXBsYXRlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDspJHqtITtmLgg7Lm07Jq07YyFXG4gICAgaWYgKGNoYXIgPT09IFwie1wiKSB7XG4gICAgICBicmFjZUNvdW50Kys7XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSBcIn1cIikge1xuICAgICAgYnJhY2VDb3VudC0tO1xuICAgICAgaWYgKGJyYWNlQ291bnQgPT09IDApIHtcbiAgICAgICAgZW5kSWR4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8g7ISg7Ja466y4IOuBneq5jOyngCDssL7quLAgKH07KVxuICBsZXQgZmluYWxFbmRJZHggPSBlbmRJZHg7XG4gIGZvciAobGV0IGkgPSBlbmRJZHggKyAxOyBpIDwgc291cmNlQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzb3VyY2VDb2RlW2ldID09PSBcIjtcIikge1xuICAgICAgZmluYWxFbmRJZHggPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNvdXJjZUNvZGUuc3Vic3RyaW5nKHN0YXJ0SWR4LCBmaW5hbEVuZElkeCArIDEpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFrQkEsU0FBZ0IsU0FBUyxVQUFrQixRQUF3QjtDQUNqRSxJQUFJLE9BQU8sU0FBUyxTQUFTLEdBQzNCLE9BQU87TUFDRixJQUFJLE9BQU8sU0FBUyxhQUFhLEdBQ3RDLE9BQU87TUFDRjtFQUNMLE1BQU0sV0FBVyxjQUFjLElBQUksUUFBUSxDQUFDLENBQUMsTUFBTSxNQUNoRCxTQUFTLEdBQUcsV0FBVyxXQUFXLFNBQVMsS0FBSyxJQUFJLFFBQVEsTUFDL0Q7RUFDQSxJQUFJLFVBQVUsTUFDWixPQUFPLFNBQVM7RUFFbEIsT0FBTztDQUNUO0FBQ0Y7Ozs7O0FBTUEsU0FBZ0IsdUJBQXVCLFVBQWtCLFNBQWlDO0NBRXhGLE1BQU0sT0FEYSxjQUFjLElBQUksUUFDeEIsQ0FBQSxDQUFXLE1BQU0sTUFBTSxNQUFNLEVBQUUsU0FBUyxPQUFPO0NBQzVELElBQUksUUFBUSxXQUFXLElBQUksR0FDekIsT0FBTztFQUNMLElBQUksS0FBSztFQUNULGdCQUFnQjtFQUNoQixtQkFBbUIsY0FBYyxlQUFlLFFBQVE7RUFDeEQsT0FBTyxLQUFLLFFBQVEsS0FBSztDQUMzQjtNQUNLO0VBQ0wsTUFBTSxjQUFjLFdBQVcsU0FDN0IsR0FBRyxXQUFXLFdBQVcsUUFBUSxFQUFFLEdBQUcsV0FBVyxXQUFXLE9BQU8s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
143
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuXG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IGlzRW51bVByb3AsIGlzUmVsYXRpb25Qcm9wIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFJlbGF0aW9uUHJvcCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuXG5pbnRlcmZhY2UgRW51bUNvbHVtbkluZm8ge1xuICBpZDogc3RyaW5nO1xuICB0YXJnZXRFbnRpdHlOYW1lczogRW50aXR5TmFtZXNSZWNvcmQ7XG4gIHRhcmdldEVudGl0eUlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW51beydmCDtkZzsi5zsmqkg652867Ko7J2EIOqwgOyguOyYteuLiOuLpC5cbiAqIE9yZGVyQnksIFNlYXJjaEZpZWxkIOuTsSDtirnsiJjtlZwg6rK97Jqw7JmAIOydvOuwmCBFbnVt7J2EIOq1rOu2hO2VmOyXrCDsspjrpqztlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYWJlbChlbnRpdHlJZDogc3RyaW5nLCBlbnVtSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChlbnVtSWQuZW5kc1dpdGgoXCJPcmRlckJ5XCIpKSB7XG4gICAgcmV0dXJuIFwi7KCV66CsXCI7XG4gIH0gZWxzZSBpZiAoZW51bUlkLmVuZHNXaXRoKFwiU2VhcmNoRmllbGRcIikpIHtcbiAgICByZXR1cm4gXCLqsoDsg4lcIjtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlbnVtUHJvcCA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKS5wcm9wcy5maW5kKFxuICAgICAgKHByb3ApID0+IGAke2VudGl0eUlkfSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wLm5hbWUpfWAgPT09IGVudW1JZCxcbiAgICApO1xuICAgIGlmIChlbnVtUHJvcD8uZGVzYykge1xuICAgICAgcmV0dXJuIGVudW1Qcm9wLmRlc2M7XG4gICAgfVxuICAgIHJldHVybiBlbnVtSWQ7XG4gIH1cbn1cblxuLyoqXG4gKiDsu6zrn7wg7J2066aE7Jy866Gc67aA7YSwIEVudW0g7KCV67O066W8IOy2lOy2nO2VqeuLiOuLpC5cbiAqIEVudGl0eeydmCBwcm9wIOykkSBlbnVtIO2DgOyeheyduCDqsoPsnYQg7LC+7JWEIOq0gOugqCDsoJXrs7Trpbwg67CY7ZmY7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZDogc3RyaW5nLCBjb2xOYW1lOiBzdHJpbmcpOiBFbnVtQ29sdW1uSW5mbyB7XG4gIGNvbnN0IGJhc2VFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gIGNvbnN0IHByb3AgPSBiYXNlRW50aXR5LnByb3BzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gY29sTmFtZSk7XG4gIGlmIChwcm9wICYmIGlzRW51bVByb3AocHJvcCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHByb3AuaWQsXG4gICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICB0YXJnZXRFbnRpdHlOYW1lczogRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCksXG4gICAgICB0aXRsZTogcHJvcC5kZXNjID8/IHByb3AuaWQsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBpZENhbmRpZGF0ZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBgJHtpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpfV8ke2luZmxlY3Rpb24udW5kZXJzY29yZShjb2xOYW1lKX1gLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRFbnRpdHlOYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogaWRDYW5kaWRhdGUsXG4gICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICB0YXJnZXRFbnRpdHlOYW1lczogdGFyZ2V0RW50aXR5TmFtZXMsXG4gICAgICB0aXRsZTogaWRDYW5kaWRhdGUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIOy7rOufvCDsnbTrpoTsnLzroZzrtoDthLAgUmVsYXRpb24gcHJvcCDsoJXrs7Trpbwg6rCA7KC47Ji164uI64ukLlxuICog6rSA6rOE7ZiVIHByb3DsnbQg7JWE64uMIOqyveyasCDsl5Drn6zrpbwg67Cc7IOd7Iuc7YK164uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQ6IHN0cmluZywgY29sTmFtZTogc3RyaW5nKTogUmVsYXRpb25Qcm9wIHtcbiAgY29uc3QgYmFzZUVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgY29uc3QgcmVsUHJvcCA9IGJhc2VFbnRpdHkucHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC5uYW1lID09PSBjb2xOYW1lKTtcbiAgaWYgKGlzUmVsYXRpb25Qcm9wKHJlbFByb3ApKSB7XG4gICAgY29uc3QgcmVsRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocmVsUHJvcC53aXRoKTtcbiAgICBpZiAocmVsRW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk9ubHkgcGFyZW50IGVudGl0aWVzIGNhbiBiZSB1c2VkIGFzIHJlbGF0aW9uIHByb3BzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVsUHJvcDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOywvuydhCDsiJgg7JeG64qUIFJlbGF0aW9uICR7Y29sTmFtZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEZLIOy7rOufvOuqheyXkOyEnCDsi6TsoJwgcmVsYXRpb24g7J2066aE7J2EIOy2lOy2nO2VqeuLiOuLpC5cbiAqIEJlbG9uZ3NUb09uZS9PbmVUb09uZSByZWxhdGlvbuydgCBzdWJzZXTsl5DshJwgRksg7Lus65+866qFKHVzZXJfaWQp7Jy866GcIOyDneyEseuQmOuvgOuhnCDrs4DtmZjsnbQg7ZWE7JqU7ZWY6rOgLFxuICogTWFueVRvTWFueSByZWxhdGlvbuydgCBzdWJzZXTsl5DshJwgcmVsYXRpb27rqoUoZW1wbG95ZWUp7Jy866GcIOyDneyEseuQmOuvgOuhnCDrs4DtmZjsnbQg67aI7ZWE7JqU7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShcIkVtcGxveWVlXCIsIFwidXNlcl9pZFwiKSAvLyBcInVzZXJcIlxuICogZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoXCJQcm9qZWN0XCIsIFwidGFnX2lkc1wiKSAvLyBcInRhZ3NcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQ6IHN0cmluZywgY29sTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gX2lkcyAo67O17IiYKSDsspjrpqxcbiAgaWYgKGNvbE5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgY29uc3QgYmFzZU5hbWUgPSBjb2xOYW1lLnJlcGxhY2UoL19pZHMkLywgXCJcIik7XG4gICAgLy8g66i87KCAIGJhc2UgbmFtZeycvOuhnCDssL7quLBcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBiYXNlTmFtZSk7XG4gICAgICByZXR1cm4gcmVsUHJvcC5uYW1lO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gcGx1cmFsaXpl7ZW07IScIOywvuq4sFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGx1cmFsTmFtZSA9IGluZmxlY3Rpb24ucGx1cmFsaXplKGJhc2VOYW1lKTtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBwbHVyYWxOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gX2lkICjri6jsiJgpIOyymOumrFxuICBpZiAoY29sTmFtZS5lbmRzV2l0aChcIl9pZFwiKSAmJiBjb2xOYW1lICE9PSBcImlkXCIpIHtcbiAgICBjb25zdCBiYXNlTmFtZSA9IGNvbE5hbWUucmVwbGFjZSgvX2lkJC8sIFwiXCIpO1xuICAgIC8vIOuovOyggCBiYXNlIG5hbWXsnLzroZwg7LC+6riwXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgYmFzZU5hbWUpO1xuICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHNpbmd1bGFyaXpl7ZW07IScIOywvuq4sFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2luZ3VsYXJOYW1lID0gaW5mbGVjdGlvbi5zaW5ndWxhcml6ZShiYXNlTmFtZSk7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgc2luZ3VsYXJOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbE5hbWU7XG59XG5cbi8qKlxuICog7IaM7IqkIOy9lOuTnOyXkOyEnCDqsJ3ssrQg7ISg7Ja47J2EIOy2lOy2nO2VqeuLiOuLpC5cbiAqIOykkeq0hO2YuCDsubTsmrTtjIUg67Cp7Iud7Jy866GcIOykkeyyqeuQnCDqsJ3ssrTrj4Qg7KCV7ZmV7Z6IIO2MjOyLse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RPYmplY3REZWNsYXJhdGlvbihzb3VyY2VDb2RlOiBzdHJpbmcsIHZhck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFwiZXhwb3J0IGNvbnN0IHZhck5hbWUgPSB7XCIg7Yyo7YS0IOywvuq4sFxuICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChgZXhwb3J0IGNvbnN0ICR7dmFyTmFtZX1cXFxccyo9XFxcXHMqXFxcXHtgKTtcbiAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc291cmNlQ29kZSk7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgLy8g7Iuc7J6RIOychOy5mFxuICBjb25zdCBzdGFydElkeCA9IG1hdGNoLmluZGV4O1xuICBjb25zdCBvcGVuQnJhY2VJZHggPSBzb3VyY2VDb2RlLmluZGV4T2YoXCJ7XCIsIHN0YXJ0SWR4KTtcblxuICAvLyDspJHqtITtmLgg7Lm07Jq07YyFXG4gIGxldCBicmFjZUNvdW50ID0gMDtcbiAgbGV0IGluU3RyaW5nID0gZmFsc2U7XG4gIGxldCBpblRlbXBsYXRlID0gZmFsc2U7XG4gIGxldCBzdHJpbmdDaGFyID0gXCJcIjtcbiAgbGV0IGVuZElkeCA9IG9wZW5CcmFjZUlkeDtcblxuICBmb3IgKGxldCBpID0gb3BlbkJyYWNlSWR4OyBpIDwgc291cmNlQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoYXIgPSBzb3VyY2VDb2RlW2ldO1xuICAgIGNvbnN0IHByZXZDaGFyID0gaSA+IDAgPyBzb3VyY2VDb2RlW2kgLSAxXSA6IFwiXCI7XG5cbiAgICAvLyDsnbTsiqTsvIDsnbTtlITrkJwg66y47J6Q64qUIOustOyLnFxuICAgIGlmIChwcmV2Q2hhciA9PT0gXCJcXFxcXCIgJiYgKGluU3RyaW5nIHx8IGluVGVtcGxhdGUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDrrLjsnpDsl7Qg7Iuc7J6RL+yiheujjFxuICAgIGlmICgoY2hhciA9PT0gJ1wiJyB8fCBjaGFyID09PSBcIidcIikgJiYgIWluVGVtcGxhdGUpIHtcbiAgICAgIGlmICghaW5TdHJpbmcpIHtcbiAgICAgICAgaW5TdHJpbmcgPSB0cnVlO1xuICAgICAgICBzdHJpbmdDaGFyID0gY2hhcjtcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gc3RyaW5nQ2hhcikge1xuICAgICAgICBpblN0cmluZyA9IGZhbHNlO1xuICAgICAgICBzdHJpbmdDaGFyID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIO2FnO2UjOumvyDrpqzthLDrn7Qg7Iuc7J6RL+yiheujjFxuICAgIGlmIChjaGFyID09PSBcImBcIiAmJiAhaW5TdHJpbmcpIHtcbiAgICAgIGluVGVtcGxhdGUgPSAhaW5UZW1wbGF0ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIOusuOyekOyXtC/thZztlIzrpr8g64K067aA64qUIOykkeq0hO2YuCDsubTsmrTtjIUg7JWIIO2VqFxuICAgIGlmIChpblN0cmluZyB8fCBpblRlbXBsYXRlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDspJHqtITtmLgg7Lm07Jq07YyFXG4gICAgaWYgKGNoYXIgPT09IFwie1wiKSB7XG4gICAgICBicmFjZUNvdW50Kys7XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSBcIn1cIikge1xuICAgICAgYnJhY2VDb3VudC0tO1xuICAgICAgaWYgKGJyYWNlQ291bnQgPT09IDApIHtcbiAgICAgICAgZW5kSWR4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8g7ISg7Ja466y4IOuBneq5jOyngCDssL7quLAgKH07KVxuICBsZXQgZmluYWxFbmRJZHggPSBlbmRJZHg7XG4gIGZvciAobGV0IGkgPSBlbmRJZHggKyAxOyBpIDwgc291cmNlQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzb3VyY2VDb2RlW2ldID09PSBcIjtcIikge1xuICAgICAgZmluYWxFbmRJZHggPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNvdXJjZUNvZGUuc3Vic3RyaW5nKHN0YXJ0SWR4LCBmaW5hbEVuZElkeCArIDEpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFrQkEsU0FBZ0IsU0FBUyxVQUFrQixRQUF3QjtDQUNqRSxJQUFJLE9BQU8sU0FBUyxTQUFTLEdBQzNCLE9BQU87TUFDRixJQUFJLE9BQU8sU0FBUyxhQUFhLEdBQ3RDLE9BQU87TUFDRjtFQUNMLE1BQU0sV0FBVyxjQUFjLElBQUksUUFBUSxDQUFDLENBQUMsTUFBTSxNQUNoRCxTQUFTLEdBQUcsV0FBVyxXQUFXLFNBQVMsS0FBSyxJQUFJLFFBQVEsTUFDL0Q7RUFDQSxJQUFJLFVBQVUsTUFDWixPQUFPLFNBQVM7RUFFbEIsT0FBTztDQUNUO0FBQ0Y7Ozs7O0FBTUEsU0FBZ0IsdUJBQXVCLFVBQWtCLFNBQWlDO0NBRXhGLE1BQU0sT0FEYSxjQUFjLElBQUksUUFDeEIsQ0FBQSxDQUFXLE1BQU0sTUFBTSxNQUFNLEVBQUUsU0FBUyxPQUFPO0NBQzVELElBQUksUUFBUSxXQUFXLElBQUksR0FDekIsT0FBTztFQUNMLElBQUksS0FBSztFQUNULGdCQUFnQjtFQUNoQixtQkFBbUIsY0FBYyxlQUFlLFFBQVE7RUFDeEQsT0FBTyxLQUFLLFFBQVEsS0FBSztDQUMzQjtNQUNLO0VBQ0wsTUFBTSxjQUFjLFdBQVcsU0FDN0IsR0FBRyxXQUFXLFdBQVcsUUFBUSxFQUFFLEdBQUcsV0FBVyxXQUFXLE9BQU8s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
@@ -2,7 +2,7 @@ import { Sonamu } from "../../api/sonamu.js";
2
2
  import { EntityManager, init_entity_manager } from "../../entity/entity-manager.js";
3
3
  import { init_api } from "../../api/index.js";
4
4
  import { Template, init_template } from "../template.js";
5
- //#region src/template/implementations/entity.template.ts
5
+ // src/template/implementations/entity.template.ts
6
6
  init_api();
7
7
  init_entity_manager();
8
8
  init_template();
@@ -67,7 +67,6 @@ var Template__entity = class extends Template {
67
67
  };
68
68
  }
69
69
  };
70
- //#endregion
71
70
  export { Template__entity };
72
71
 
73
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZW50aXR5LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fZW50aXR5IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcImVudGl0eVwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgobmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkLCBwYXJlbnROYW1lcz86IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgY29uc3QgeyBkaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogYCR7ZGlyfS9zcmMvYXBwbGljYXRpb25gLFxuICAgICAgcGF0aDogYCR7KHBhcmVudE5hbWVzID8/IG5hbWVzKS5mc30vJHtuYW1lcy5mc30uZW50aXR5Lmpzb25gLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIob3B0aW9uczogVGVtcGxhdGVPcHRpb25zW1wiZW50aXR5XCJdKSB7XG4gICAgY29uc3QgeyBlbnRpdHlJZCwgdGl0bGUsIHBhcmVudElkLCB0YWJsZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuXG4gICAgY29uc3QgcGFyZW50ID0gKCgpID0+IHtcbiAgICAgIGlmIChwYXJlbnRJZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWVzOiBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKHBhcmVudElkKSxcbiAgICAgICAgICBlbnRpdHk6IEVudGl0eU1hbmFnZXIuZ2V0KHBhcmVudElkKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzLCBwYXJlbnQ/Lm5hbWVzID8/IG5hbWVzKSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgaWQ6IGVudGl0eUlkLFxuICAgICAgICB0aXRsZTogdGl0bGUgPz8gZW50aXR5SWQsXG4gICAgICAgIHBhcmVudElkLFxuICAgICAgICB0YWJsZTogdGFibGUgPz8gbmFtZXMuZnNQbHVyYWwucmVwbGFjZSgvLS9nLCBcIl9cIiksXG4gICAgICAgIHByb3BzOiBvcHRpb25zLnByb3BzPy5sZW5ndGhcbiAgICAgICAgICA/IG9wdGlvbnMucHJvcHNcbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiaW50ZWdlclwiLCBkZXNjOiBcIklEXCIgfSxcbiAgICAgICAgICAgICAgLi4uKHBhcmVudFxuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJyZWxhdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcmVudC5uYW1lcy5jYW1lbCxcbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvblR5cGU6IFwiQmVsb25nc1RvT25lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgd2l0aDogcGFyZW50SWQsXG4gICAgICAgICAgICAgICAgICAgICAgb25VcGRhdGU6IFwiQ0FTQ0FERVwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uRGVsZXRlOiBcIkNBU0NBREVcIixcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBwYXJlbnQuZW50aXR5LnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgZGVzYzogXCLrk7HroZ3snbzsi5xcIixcbiAgICAgICAgICAgICAgICBkYkRlZmF1bHQ6IFwiQ1VSUkVOVF9USU1FU1RBTVBcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIGluZGV4ZXM6IFsuLi4ob3B0aW9ucy5pbmRleGVzID8/IFtdKV0sXG4gICAgICAgIHN1YnNldHM6XG4gICAgICAgICAgb3B0aW9ucy5zdWJzZXRzID8/XG4gICAgICAgICAgKHBhcmVudElkXG4gICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBBOiBbXCJpZFwiLCBcImNyZWF0ZWRfYXRcIl0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICBlbnVtczpcbiAgICAgICAgICBvcHRpb25zLmVudW1zID8/XG4gICAgICAgICAgKHBhcmVudElkXG4gICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBbYCR7bmFtZXMuY2FwaXRhbH1PcmRlckJ5YF06IHtcbiAgICAgICAgICAgICAgICAgIFwiaWQtZGVzY1wiOiBcIklE7LWc7Iug7IicXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbYCR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZGBdOiB7IGlkOiBcIklEXCIgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICB9KS50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O1NBQWtDO29CQUN5QjtjQUdyQjtBQUV0QyxJQUFhLG1CQUFiLGNBQXNDLFNBQVM7Q0FDN0MsY0FBYztFQUNaLE1BQU0sUUFBUTtDQUNoQjtDQUVBLGlCQUFpQixPQUEwQixhQUFpQztFQUMxRSxNQUFNLEVBQUUsUUFBUSxPQUFPLE9BQU87RUFFOUIsT0FBTztHQUNMLFFBQVEsR0FBRyxJQUFJO0dBQ2YsTUFBTSxJQUFJLGVBQWUsTUFBQSxDQUFPLEdBQUcsR0FBRyxNQUFNLEdBQUc7RUFDakQ7Q0FDRjtDQUVBLE9BQU8sU0FBb0M7RUFDekMsTUFBTSxFQUFFLFVBQVUsT0FBTyxVQUFVLFVBQVU7RUFDN0MsTUFBTSxRQUFRLGNBQWMsZUFBZSxRQUFRO0VBRW5ELE1BQU0sZ0JBQWdCO0dBQ3BCLElBQUksVUFDRixPQUFPO0lBQ0wsT0FBTyxjQUFjLGVBQWUsUUFBUTtJQUM1QyxRQUFRLGNBQWMsSUFBSSxRQUFRO0dBQ3BDO1FBRUEsT0FBTztFQUVYLEVBQUEsQ0FBRztFQUVILE9BQU87R0FDTCxHQUFHLEtBQUssaUJBQWlCLE9BQU8sUUFBUSxTQUFTLEtBQUs7R0FDdEQsTUFBTSxLQUFLLFVBQVU7SUFDbkIsSUFBSTtJQUNKLE9BQU8sU0FBUztJQUNoQjtJQUNBLE9BQU8sU0FBUyxNQUFNLFNBQVMsUUFBUSxNQUFNLEdBQUc7SUFDaEQsT0FBTyxRQUFRLE9BQU8sU0FDbEIsUUFBUSxRQUNSO0tBQ0U7TUFBRSxNQUFNO01BQU0sTUFBTTtNQUFXLE1BQU07S0FBSztLQUMxQyxHQUFJLFNBQ0EsQ0FDRTtNQUNFLE1BQU07TUFDTixNQUFNLE9BQU8sTUFBTTtNQUNuQixjQUFjO01BQ2QsTUFBTTtNQUNOLFVBQVU7TUFDVixVQUFVO01BQ1YsTUFBTSxPQUFPLE9BQU87S0FDdEIsQ0FDRixJQUNBLENBQUM7S0FDTDtNQUNFLE1BQU07TUFDTixNQUFNO01BQ04sTUFBTTtNQUNOLFdBQVc7S0FDYjtJQUNGO0lBQ0osU0FBUyxDQUFDLEdBQUksUUFBUSxXQUFXLENBQUMsQ0FBRTtJQUNwQyxTQUNFLFFBQVEsWUFDUCxXQUNHLENBQUMsSUFDRCxFQUNFLEdBQUcsQ0FBQyxNQUFNLFlBQVksRUFDeEI7SUFDTixPQUNFLFFBQVEsVUFDUCxXQUNHLENBQUMsSUFDRDtNQUNHLEdBQUcsTUFBTSxRQUFRLFdBQVcsRUFDM0IsV0FBVyxRQUNiO01BQ0MsR0FBRyxNQUFNLFFBQVEsZUFBZSxFQUFFLElBQUksS0FBSztJQUM5QztHQUNSLENBQUMsQ0FBQyxDQUFDLEtBQUs7R0FDUixZQUFZLENBQUM7RUFDZjtDQUNGO0FBQ0YifQ==
72
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZW50aXR5LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fZW50aXR5IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcImVudGl0eVwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgobmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkLCBwYXJlbnROYW1lcz86IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgY29uc3QgeyBkaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogYCR7ZGlyfS9zcmMvYXBwbGljYXRpb25gLFxuICAgICAgcGF0aDogYCR7KHBhcmVudE5hbWVzID8/IG5hbWVzKS5mc30vJHtuYW1lcy5mc30uZW50aXR5Lmpzb25gLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIob3B0aW9uczogVGVtcGxhdGVPcHRpb25zW1wiZW50aXR5XCJdKSB7XG4gICAgY29uc3QgeyBlbnRpdHlJZCwgdGl0bGUsIHBhcmVudElkLCB0YWJsZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuXG4gICAgY29uc3QgcGFyZW50ID0gKCgpID0+IHtcbiAgICAgIGlmIChwYXJlbnRJZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWVzOiBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKHBhcmVudElkKSxcbiAgICAgICAgICBlbnRpdHk6IEVudGl0eU1hbmFnZXIuZ2V0KHBhcmVudElkKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzLCBwYXJlbnQ/Lm5hbWVzID8/IG5hbWVzKSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgaWQ6IGVudGl0eUlkLFxuICAgICAgICB0aXRsZTogdGl0bGUgPz8gZW50aXR5SWQsXG4gICAgICAgIHBhcmVudElkLFxuICAgICAgICB0YWJsZTogdGFibGUgPz8gbmFtZXMuZnNQbHVyYWwucmVwbGFjZSgvLS9nLCBcIl9cIiksXG4gICAgICAgIHByb3BzOiBvcHRpb25zLnByb3BzPy5sZW5ndGhcbiAgICAgICAgICA/IG9wdGlvbnMucHJvcHNcbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiaW50ZWdlclwiLCBkZXNjOiBcIklEXCIgfSxcbiAgICAgICAgICAgICAgLi4uKHBhcmVudFxuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJyZWxhdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcmVudC5uYW1lcy5jYW1lbCxcbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvblR5cGU6IFwiQmVsb25nc1RvT25lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgd2l0aDogcGFyZW50SWQsXG4gICAgICAgICAgICAgICAgICAgICAgb25VcGRhdGU6IFwiQ0FTQ0FERVwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uRGVsZXRlOiBcIkNBU0NBREVcIixcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBwYXJlbnQuZW50aXR5LnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgZGVzYzogXCLrk7HroZ3snbzsi5xcIixcbiAgICAgICAgICAgICAgICBkYkRlZmF1bHQ6IFwiQ1VSUkVOVF9USU1FU1RBTVBcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIGluZGV4ZXM6IFsuLi4ob3B0aW9ucy5pbmRleGVzID8/IFtdKV0sXG4gICAgICAgIHN1YnNldHM6XG4gICAgICAgICAgb3B0aW9ucy5zdWJzZXRzID8/XG4gICAgICAgICAgKHBhcmVudElkXG4gICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBBOiBbXCJpZFwiLCBcImNyZWF0ZWRfYXRcIl0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICBlbnVtczpcbiAgICAgICAgICBvcHRpb25zLmVudW1zID8/XG4gICAgICAgICAgKHBhcmVudElkXG4gICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBbYCR7bmFtZXMuY2FwaXRhbH1PcmRlckJ5YF06IHtcbiAgICAgICAgICAgICAgICAgIFwiaWQtZGVzY1wiOiBcIklE7LWc7Iug7IicXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbYCR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZGBdOiB7IGlkOiBcIklEXCIgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICB9KS50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQWtDLFNBQUE7QUFDeUIsb0JBQUE7QUFHckIsY0FBQTtBQUV0QyxJQUFhLG1CQUFiLGNBQXNDLFNBQVM7Q0FDN0MsY0FBYztFQUNaLE1BQU0sUUFBUTtDQUNoQjtDQUVBLGlCQUFpQixPQUEwQixhQUFpQztFQUMxRSxNQUFNLEVBQUUsUUFBUSxPQUFPLE9BQU87RUFFOUIsT0FBTztHQUNMLFFBQVEsR0FBRyxJQUFJO0dBQ2YsTUFBTSxJQUFJLGVBQWUsTUFBQSxDQUFPLEdBQUcsR0FBRyxNQUFNLEdBQUc7RUFDakQ7Q0FDRjtDQUVBLE9BQU8sU0FBb0M7RUFDekMsTUFBTSxFQUFFLFVBQVUsT0FBTyxVQUFVLFVBQVU7RUFDN0MsTUFBTSxRQUFRLGNBQWMsZUFBZSxRQUFRO0VBRW5ELE1BQU0sZ0JBQWdCO0dBQ3BCLElBQUksVUFDRixPQUFPO0lBQ0wsT0FBTyxjQUFjLGVBQWUsUUFBUTtJQUM1QyxRQUFRLGNBQWMsSUFBSSxRQUFRO0dBQ3BDO1FBRUEsT0FBTztFQUVYLEVBQUEsQ0FBRztFQUVILE9BQU87R0FDTCxHQUFHLEtBQUssaUJBQWlCLE9BQU8sUUFBUSxTQUFTLEtBQUs7R0FDdEQsTUFBTSxLQUFLLFVBQVU7SUFDbkIsSUFBSTtJQUNKLE9BQU8sU0FBUztJQUNoQjtJQUNBLE9BQU8sU0FBUyxNQUFNLFNBQVMsUUFBUSxNQUFNLEdBQUc7SUFDaEQsT0FBTyxRQUFRLE9BQU8sU0FDbEIsUUFBUSxRQUNSO0tBQ0U7TUFBRSxNQUFNO01BQU0sTUFBTTtNQUFXLE1BQU07S0FBSztLQUMxQyxHQUFJLFNBQ0EsQ0FDRTtNQUNFLE1BQU07TUFDTixNQUFNLE9BQU8sTUFBTTtNQUNuQixjQUFjO01BQ2QsTUFBTTtNQUNOLFVBQVU7TUFDVixVQUFVO01BQ1YsTUFBTSxPQUFPLE9BQU87S0FDdEIsQ0FDRixJQUNBLENBQUM7S0FDTDtNQUNFLE1BQU07TUFDTixNQUFNO01BQ04sTUFBTTtNQUNOLFdBQVc7S0FDYjtJQUNGO0lBQ0osU0FBUyxDQUFDLEdBQUksUUFBUSxXQUFXLENBQUMsQ0FBRTtJQUNwQyxTQUNFLFFBQVEsWUFDUCxXQUNHLENBQUMsSUFDRCxFQUNFLEdBQUcsQ0FBQyxNQUFNLFlBQVksRUFDeEI7SUFDTixPQUNFLFFBQVEsVUFDUCxXQUNHLENBQUMsSUFDRDtNQUNHLEdBQUcsTUFBTSxRQUFRLFdBQVcsRUFDM0IsV0FBVyxRQUNiO01BQ0MsR0FBRyxNQUFNLFFBQVEsZUFBZSxFQUFFLElBQUksS0FBSztJQUM5QztHQUNSLENBQUMsQ0FBQyxDQUFDLEtBQUs7R0FDUixZQUFZLENBQUM7RUFDZjtDQUNGO0FBQ0YifQ==
@@ -1,5 +1,5 @@
1
1
  import { Template, init_template } from "../template.js";
2
- //#region src/template/implementations/entry-server.template.ts
2
+ // src/template/implementations/entry-server.template.ts
3
3
  init_template();
4
4
  var Template__entry_server = class extends Template {
5
5
  constructor() {
@@ -82,7 +82,6 @@ export async function render(url: string, preloadedData: PreloadedData[] = []) {
82
82
  };
83
83
  }
84
84
  };
85
- //#endregion
86
85
  export { Template__entry_server };
87
86
 
88
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnktc2VydmVyLnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZW50cnktc2VydmVyLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2VudHJ5X3NlcnZlciBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJlbnRyeV9zZXJ2ZXJcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyY1wiLFxuICAgICAgcGF0aDogYGVudHJ5LXNlcnZlci5nZW5lcmF0ZWQudHN4YCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHt9OiBUZW1wbGF0ZU9wdGlvbnNbXCJlbnRyeV9zZXJ2ZXJcIl0pIHtcbiAgICBjb25zdCBib2R5ID0gYFxuaW1wb3J0IHsgUXVlcnlDbGllbnQsIGRlaHlkcmF0ZSB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBjcmVhdGVNZW1vcnlIaXN0b3J5LCBjcmVhdGVSb3V0ZXIsIFJvdXRlclByb3ZpZGVyIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgeyByZW5kZXJUb1N0cmluZyB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuaW1wb3J0IHsgcm91dGVUcmVlIH0gZnJvbSAnLi9yb3V0ZVRyZWUuZ2VuJztcbmltcG9ydCB7IFN1c3BlbnNlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCB0eXBlIFByZWxvYWRlZERhdGEgPSB7XG4gIHF1ZXJ5S2V5OiBhbnlbXTtcbiAgZGF0YTogYW55O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcih1cmw6IHN0cmluZywgcHJlbG9hZGVkRGF0YTogUHJlbG9hZGVkRGF0YVtdID0gW10pIHtcbiAgLy8gUXVlcnlDbGllbnQg7IOd7ISxXG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KHtcbiAgICBkZWZhdWx0T3B0aW9uczoge1xuICAgICAgcXVlcmllczoge1xuICAgICAgICBzdGFsZVRpbWU6IDUwMDAsXG4gICAgICAgIHJldHJ5OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gUHJlbG9hZGVkIOuNsOydtO2EsOulvCBxdWVyeUNsaWVudOyXkCDsp4HsoJEg7KO87J6FXG4gIGZvciAoY29uc3QgeyBxdWVyeUtleSwgZGF0YSB9IG9mIHByZWxvYWRlZERhdGEpIHtcbiAgICBxdWVyeUNsaWVudC5zZXRRdWVyeURhdGEocXVlcnlLZXksIGRhdGEpO1xuICB9XG5cbiAgLy8gRGVoeWRyYXRlXG4gIGNvbnN0IGRlaHlkcmF0ZWRTdGF0ZSA9IGRlaHlkcmF0ZShxdWVyeUNsaWVudCk7XG5cbiAgLy8gU1NS7JqpIOuplOuqqOumrCDtnojsiqTthqDrpqwg7IOd7ISxXG4gIGNvbnN0IG1lbW9yeUhpc3RvcnkgPSBjcmVhdGVNZW1vcnlIaXN0b3J5KHtcbiAgICBpbml0aWFsRW50cmllczogW3VybF0sXG4gIH0pO1xuXG4gIC8vIFJvdXRlciDsg53shLEgKFNTUiDrqqjrk5wpXG4gIGNvbnN0IHJvdXRlciA9IGNyZWF0ZVJvdXRlcih7XG4gICAgcm91dGVUcmVlLFxuICAgIGNvbnRleHQ6IHsgcXVlcnlDbGllbnQgfSxcbiAgICBoaXN0b3J5OiBtZW1vcnlIaXN0b3J5LFxuICAgIGRlZmF1bHRQcmVsb2FkOiAnaW50ZW50JyxcbiAgfSk7XG5cbiAgLy8g65287Jqw7YSwIOy0iOq4sO2ZlDogU1NS7JeQ7IScIOuwmOuTnOyLnCBhd2FpdCByb3V0ZXIubG9hZCgpIO2YuOy2nCDtlYTsmpRcbiAgYXdhaXQgcm91dGVyLmxvYWQoKTtcblxuICAvLyBSb3V0ZXJQcm92aWRlcuunjCDroIzrjZTrp4EgKFN1c3BlbnNl66GcIOuemO2VkSAtIGh5ZHJhdGlvbiBtaXNtYXRjaCDrsKnsp4ApXG4gIGNvbnN0IGFwcEh0bWwgPSByZW5kZXJUb1N0cmluZyg8U3VzcGVuc2UgZmFsbGJhY2s9e251bGx9PjxSb3V0ZXJQcm92aWRlciByb3V0ZXI9e3JvdXRlcn0gLz48L1N1c3BlbnNlPik7XG5cbiAgcmV0dXJuIHtcbiAgICBodG1sOiBhcHBIdG1sLFxuICAgIGRlaHlkcmF0ZWRTdGF0ZSxcbiAgfTtcbn1cbiAgICBgLnRyaW0oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcIi8qKlwiLCBcIiAqIEBnZW5lcmF0ZWRcIiwgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIiwgXCIgKi9cIiwgXCJcIl0sXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOztjQUNzQztBQUV0QyxJQUFhLHlCQUFiLGNBQTRDLFNBQVM7Q0FDbkQsY0FBYztFQUNaLE1BQU0sY0FBYztDQUN0QjtDQUVBLG1CQUFtQjtFQUNqQixPQUFPO0dBQ0wsUUFBUTtHQUNSLE1BQU07RUFDUjtDQUNGO0NBRUEsT0FBTyxJQUFxQztFQUMxQyxNQUFNLE9BQU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF1RFgsS0FBSztFQUVQLE9BQU87R0FDTCxHQUFHLEtBQUssaUJBQWlCO0dBQ3pCO0dBQ0EsWUFBWSxDQUFDO0dBQ2IsZUFBZTtJQUFDO0lBQU87SUFBaUI7SUFBbUI7SUFBTztHQUFFO0VBQ3RFO0NBQ0Y7QUFDRiJ9
87
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnktc2VydmVyLnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZW50cnktc2VydmVyLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2VudHJ5X3NlcnZlciBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJlbnRyeV9zZXJ2ZXJcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyY1wiLFxuICAgICAgcGF0aDogYGVudHJ5LXNlcnZlci5nZW5lcmF0ZWQudHN4YCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHt9OiBUZW1wbGF0ZU9wdGlvbnNbXCJlbnRyeV9zZXJ2ZXJcIl0pIHtcbiAgICBjb25zdCBib2R5ID0gYFxuaW1wb3J0IHsgUXVlcnlDbGllbnQsIGRlaHlkcmF0ZSB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBjcmVhdGVNZW1vcnlIaXN0b3J5LCBjcmVhdGVSb3V0ZXIsIFJvdXRlclByb3ZpZGVyIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgeyByZW5kZXJUb1N0cmluZyB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuaW1wb3J0IHsgcm91dGVUcmVlIH0gZnJvbSAnLi9yb3V0ZVRyZWUuZ2VuJztcbmltcG9ydCB7IFN1c3BlbnNlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCB0eXBlIFByZWxvYWRlZERhdGEgPSB7XG4gIHF1ZXJ5S2V5OiBhbnlbXTtcbiAgZGF0YTogYW55O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcih1cmw6IHN0cmluZywgcHJlbG9hZGVkRGF0YTogUHJlbG9hZGVkRGF0YVtdID0gW10pIHtcbiAgLy8gUXVlcnlDbGllbnQg7IOd7ISxXG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KHtcbiAgICBkZWZhdWx0T3B0aW9uczoge1xuICAgICAgcXVlcmllczoge1xuICAgICAgICBzdGFsZVRpbWU6IDUwMDAsXG4gICAgICAgIHJldHJ5OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gUHJlbG9hZGVkIOuNsOydtO2EsOulvCBxdWVyeUNsaWVudOyXkCDsp4HsoJEg7KO87J6FXG4gIGZvciAoY29uc3QgeyBxdWVyeUtleSwgZGF0YSB9IG9mIHByZWxvYWRlZERhdGEpIHtcbiAgICBxdWVyeUNsaWVudC5zZXRRdWVyeURhdGEocXVlcnlLZXksIGRhdGEpO1xuICB9XG5cbiAgLy8gRGVoeWRyYXRlXG4gIGNvbnN0IGRlaHlkcmF0ZWRTdGF0ZSA9IGRlaHlkcmF0ZShxdWVyeUNsaWVudCk7XG5cbiAgLy8gU1NS7JqpIOuplOuqqOumrCDtnojsiqTthqDrpqwg7IOd7ISxXG4gIGNvbnN0IG1lbW9yeUhpc3RvcnkgPSBjcmVhdGVNZW1vcnlIaXN0b3J5KHtcbiAgICBpbml0aWFsRW50cmllczogW3VybF0sXG4gIH0pO1xuXG4gIC8vIFJvdXRlciDsg53shLEgKFNTUiDrqqjrk5wpXG4gIGNvbnN0IHJvdXRlciA9IGNyZWF0ZVJvdXRlcih7XG4gICAgcm91dGVUcmVlLFxuICAgIGNvbnRleHQ6IHsgcXVlcnlDbGllbnQgfSxcbiAgICBoaXN0b3J5OiBtZW1vcnlIaXN0b3J5LFxuICAgIGRlZmF1bHRQcmVsb2FkOiAnaW50ZW50JyxcbiAgfSk7XG5cbiAgLy8g65287Jqw7YSwIOy0iOq4sO2ZlDogU1NS7JeQ7IScIOuwmOuTnOyLnCBhd2FpdCByb3V0ZXIubG9hZCgpIO2YuOy2nCDtlYTsmpRcbiAgYXdhaXQgcm91dGVyLmxvYWQoKTtcblxuICAvLyBSb3V0ZXJQcm92aWRlcuunjCDroIzrjZTrp4EgKFN1c3BlbnNl66GcIOuemO2VkSAtIGh5ZHJhdGlvbiBtaXNtYXRjaCDrsKnsp4ApXG4gIGNvbnN0IGFwcEh0bWwgPSByZW5kZXJUb1N0cmluZyg8U3VzcGVuc2UgZmFsbGJhY2s9e251bGx9PjxSb3V0ZXJQcm92aWRlciByb3V0ZXI9e3JvdXRlcn0gLz48L1N1c3BlbnNlPik7XG5cbiAgcmV0dXJuIHtcbiAgICBodG1sOiBhcHBIdG1sLFxuICAgIGRlaHlkcmF0ZWRTdGF0ZSxcbiAgfTtcbn1cbiAgICBgLnRyaW0oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcIi8qKlwiLCBcIiAqIEBnZW5lcmF0ZWRcIiwgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIiwgXCIgKi9cIiwgXCJcIl0sXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOztBQUNzQyxjQUFBO0FBRXRDLElBQWEseUJBQWIsY0FBNEMsU0FBUztDQUNuRCxjQUFjO0VBQ1osTUFBTSxjQUFjO0NBQ3RCO0NBRUEsbUJBQW1CO0VBQ2pCLE9BQU87R0FDTCxRQUFRO0dBQ1IsTUFBTTtFQUNSO0NBQ0Y7Q0FFQSxPQUFPLElBQXFDO0VBQzFDLE1BQU0sT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXVEWCxLQUFLO0VBRVAsT0FBTztHQUNMLEdBQUcsS0FBSyxpQkFBaUI7R0FDekI7R0FDQSxZQUFZLENBQUM7R0FDYixlQUFlO0lBQUM7SUFBTztJQUFpQjtJQUFtQjtJQUFPO0dBQUU7RUFDdEU7Q0FDRjtBQUNGIn0=
@@ -8,7 +8,7 @@ import { Template, init_template } from "../template.js";
8
8
  import { BUILT_IN_TYPES, init_zod_converter, propNodeToZodTypeDef, zodTypeToZodCode } from "../zod-converter.js";
9
9
  import { unique } from "radashi";
10
10
  import assert from "assert";
11
- //#region src/template/implementations/generated.template.ts
11
+ // src/template/implementations/generated.template.ts
12
12
  init_api();
13
13
  init_entity_manager();
14
14
  init_naite();
@@ -241,7 +241,6 @@ z.object({
241
241
  };
242
242
  }
243
243
  };
244
- //#endregion
245
244
  export { Template__generated };
246
245
 
247
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vLi4vYXBpXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eSB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IGlzVmlydHVhbENvZGVQcm9wLCBpc1ZpcnR1YWxRdWVyeVByb3AgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5SW5kZXgsIHR5cGUgRW50aXR5UHJvcE5vZGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IG5vbk51bGxhYmxlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgQlVJTFRfSU5fVFlQRVMsIHByb3BOb2RlVG9ab2RUeXBlRGVmLCB6b2RUeXBlVG9ab2RDb2RlIH0gZnJvbSBcIi4uL3pvZC1jb252ZXJ0ZXJcIjtcblxuZXhwb3J0IHR5cGUgU291cmNlQ29kZSA9IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbGluZXM6IHN0cmluZ1tdO1xuICBpbXBvcnRLZXlzOiBzdHJpbmdbXTtcbn07XG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2dlbmVyYXRlZCBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJnZW5lcmF0ZWRcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgc29uYW11LmdlbmVyYXRlZC50c2AsXG4gICAgfTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgZW50aXR5SWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICBjb25zdCBlbnRpdGllcyA9IGVudGl0eUlkcy5tYXAoKGlkKSA9PiBFbnRpdHlNYW5hZ2VyLmdldChpZCkpO1xuXG4gICAgLy8g7KCE7LK0IFNvdXJjZUNvZGUg7IOd7ISxXG4gICAgY29uc3Qgc291cmNlQ29kZXMgPSBlbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHRoaXMuZ2V0RW51bXNTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICAgIHRoaXMuZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRCYXNlTGlzdFBhcmFtc1NvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRTdWJzZXRTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICBdLmZpbHRlcihub25OdWxsYWJsZSk7XG4gICAgfSk7XG4gICAgTmFpdGUudChcIlRlbXBsYXRlX19nZW5lcmF0ZWQ6c291cmNlQ29kZXNcIiwgc291cmNlQ29kZXMpO1xuXG4gICAgLy8gU29ydFxuICAgIGNvbnN0IExBQkVMX0tFWV9PUkRFUiA9IFtcIkVudW1zXCIsIFwiQmFzZVNjaGVtYVwiLCBcIkJhc2VMaXN0UGFyYW1zXCIsIFwiU3Vic2V0c1wiLCBcIlN1YnNldFF1ZXJpZXNcIl07XG4gICAgc291cmNlQ29kZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgW2FLZXldID0gYS5sYWJlbC5zcGxpdChcIjpcIik7XG4gICAgICBjb25zdCBbYktleV0gPSBiLmxhYmVsLnNwbGl0KFwiOlwiKTtcbiAgICAgIGNvbnN0IGFJbmRleCA9IExBQkVMX0tFWV9PUkRFUi5pbmRleE9mKGFLZXkpO1xuICAgICAgY29uc3QgYkluZGV4ID0gTEFCRUxfS0VZX09SREVSLmluZGV4T2YoYktleSk7XG4gICAgICBpZiAoYUluZGV4ID4gYkluZGV4KSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIGlmIChhSW5kZXggPCBiSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzb3VyY2VDb2RlID0gc291cmNlQ29kZXMucmVkdWNlKFxuICAgICAgKHJlc3VsdCwgdHMpID0+IHtcbiAgICAgICAgaWYgKHRzID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmVzOiBbLi4ucmVzdWx0LmxpbmVzLCBgLy8gJHt0cy5sYWJlbH1gLCAuLi50cy5saW5lcywgXCJcIl0sXG4gICAgICAgICAgaW1wb3J0S2V5czogdW5pcXVlKFsuLi5yZXN1bHQuaW1wb3J0S2V5cywgLi4udHMuaW1wb3J0S2V5c10udG9Tb3J0ZWQoKSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgLyogU0FGRVRZOiByZWR1Y2Ug64iE7IKw6riw64qUIGxhYmVs7J2EIOygnOyZuO2VnCBTb3VyY2VDb2Rl7J2YIOuRkCDrsLDsl7TroZwg7LSI6riw7ZmU65Cc64ukLiAqLyB7XG4gICAgICAgIGxpbmVzOiBbXSxcbiAgICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICB9IGFzIE9taXQ8U291cmNlQ29kZSwgXCJsYWJlbFwiPixcbiAgICApO1xuXG4gICAgLy8gLnR5cGVzLnRz7J2YIO2DgOyeheydhCDssLjsobDtlZjripQg6rK97JqwIOyInO2ZmOywuOyhsCjsg4HtmLjssLjsobAp6rCAIOuwnOyDne2VmOuvgOuhnCDtg4DsnoXsnYQg6rCA7KC47JmAIOyduOudvOyduCDsspjrpqxcbiAgICBjb25zdCBhbGxUeXBlS2V5cyA9IGVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT4gT2JqZWN0LmtleXMoZW50aXR5LnR5cGVzKSk7XG4gICAgY29uc3QgY2RJbXBvcnRLZXlzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoaW1wb3J0S2V5KSA9PlxuICAgICAgYWxsVHlwZUtleXMuaW5jbHVkZXMoaW1wb3J0S2V5KSxcbiAgICApO1xuICAgIGlmIChjZEltcG9ydEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VzdG9tU2NhbGFyTGluZXMgPSBjZEltcG9ydEtleXMuZmxhdE1hcCgoaW1wb3J0S2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IGVudGl0aWVzLmZpbmQoKGNhbmRpZGF0ZUVudGl0eSkgPT4gY2FuZGlkYXRlRW50aXR5LnR5cGVzW2ltcG9ydEtleV0pO1xuICAgICAgICBpZiAoIWVudGl0eSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWm9kVHlwZSBub3QgZm91bmQgJHtpbXBvcnRLZXl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgem9kVHlwZSA9IGVudGl0eS50eXBlc1tpbXBvcnRLZXldO1xuICAgICAgICBhc3NlcnQoem9kVHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgLy8gQ3VzdG9tU2NhbGFyOiAke2ltcG9ydEtleX1gLFxuICAgICAgICAgIGBjb25zdCAke2ltcG9ydEtleX0gPSAke3pvZFR5cGVUb1pvZENvZGUoem9kVHlwZSwgc291cmNlQ29kZS5pbXBvcnRLZXlzKX07YCxcbiAgICAgICAgICBgdHlwZSAke2ltcG9ydEtleX0gPSB6LmluZmVyPHR5cGVvZiAke2ltcG9ydEtleX0+YCxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICBdO1xuICAgICAgfSk7XG4gICAgICBzb3VyY2VDb2RlLmxpbmVzID0gWy4uLmN1c3RvbVNjYWxhckxpbmVzLCAuLi5zb3VyY2VDb2RlLmxpbmVzXTtcbiAgICAgIHNvdXJjZUNvZGUuaW1wb3J0S2V5cyA9IHVuaXF1ZShcbiAgICAgICAgc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoaW1wb3J0S2V5KSA9PiAhY2RJbXBvcnRLZXlzLmluY2x1ZGVzKGltcG9ydEtleSkpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gc291cmNlQ29kZS5saW5lcy5qb2luKFwiXFxuXCIpO1xuICAgIE5haXRlLnQoXCJUZW1wbGF0ZV9fZ2VuZXJhdGVkOmJvZHlcIiwgYm9keSk7XG5cbiAgICAvLyBpbXBvcnRcbiAgICAvLyBzb3VyY2VDb2RlLmltcG9ydEtleXPsl5Ag64K07J6lIO2DgOyeheydmCDsiqTtgqTrp4jqsIAg7J6I7Jy866m0IHNvbmFtdSBpbXBvcnTsl5Ag7LaU6rCAXG4gICAgY29uc3QgYnVpbHRJblNjaGVtYU5hbWVzID0gT2JqZWN0LnZhbHVlcyhCVUlMVF9JTl9UWVBFUykubWFwKFxuICAgICAgKGluZm8pID0+XG4gICAgICAgIC8qIFNBRkVUWTogQlVJTFRfSU5fVFlQRVPsnZgg66qo65OgIO2VreuqqeydgCDsg53shLEg7L2U65Oc7JeQIOyTuCBzY2hlbWFOYW1l7J2EIOqwgOynhOuLpC4gKi8gaW5mby5zY2hlbWFOYW1lIGFzIHN0cmluZyxcbiAgICApO1xuICAgIGNvbnN0IGJ1aWx0SW5TY2hlbWFzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoa2V5KSA9PiBidWlsdEluU2NoZW1hTmFtZXMuaW5jbHVkZXMoa2V5KSk7XG4gICAgY29uc3Qgc29uYW11SW1wb3J0cyA9IFtcbiAgICAgIFwiekFycmF5YWJsZVwiLFxuICAgICAgXCJTUUxEYXRlVGltZVN0cmluZ1wiLFxuICAgICAgXCJTdWJzZXRRdWVyeVwiLFxuICAgICAgXCJTb25hbXVRdWVyeU1vZGVcIixcbiAgICAgIFwiQXBwbHlTb25hbXVGaWx0ZXJcIixcbiAgICAgIC4uLmJ1aWx0SW5TY2hlbWFzLFxuICAgIF0uZmlsdGVyKChtb2QpID0+IGJvZHkuaW5jbHVkZXMobW9kKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKCksXG4gICAgICBib2R5LFxuICAgICAgaW1wb3J0S2V5czogc291cmNlQ29kZS5pbXBvcnRLZXlzLFxuICAgICAgY3VzdG9tSGVhZGVyczogW1xuICAgICAgICBcIi8qKlwiLFxuICAgICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgICAgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgXCIgKi9cIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgXCIvKiBveGxpbnQtZGlzYWJsZSAqL1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICBgaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7YCxcbiAgICAgICAgYGltcG9ydCB7ICR7c29uYW11SW1wb3J0cy5qb2luKFwiLFwiKX0gfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGdldEVudW1zU291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LmVudW1MYWJlbHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEVudW1zOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXM6IE9iamVjdC5lbnRyaWVzKGVudGl0eS5lbnVtTGFiZWxzKVxuICAgICAgICAuZmlsdGVyKChbLCBlbnVtTGFiZWxdKSA9PiBPYmplY3Qua2V5cyhlbnVtTGFiZWwpLmxlbmd0aCA+IDApXG4gICAgICAgIC5mbGF0TWFwKChbZW51bUlkLCBlbnVtTGFiZWxdKSA9PiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudW1JZH0gPSB6LmVudW0oWyR7T2JqZWN0LmtleXMoZW51bUxhYmVsKS5tYXAoXG4gICAgICAgICAgICAoZWwpID0+IGBcIiR7ZWx9XCJgLFxuICAgICAgICAgICl9XSkuZGVzY3JpYmUoXCIke2VudW1JZH1cIik7YCxcbiAgICAgICAgICBgZXhwb3J0IHR5cGUgJHtlbnVtSWR9ID0gei5pbmZlcjx0eXBlb2YgJHtlbnVtSWR9PjtgLFxuICAgICAgICAgIGBleHBvcnQgY29uc3QgJHtlbnVtSWR9TGFiZWwgPSAke0pTT04uc3RyaW5naWZ5KGVudW1MYWJlbCl9O2AsXG4gICAgICAgIF0pLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxuXG4gIGdldEJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5LCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdKTogU291cmNlQ29kZSB7XG4gICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9QmFzZVNjaGVtYWA7XG4gICAgY29uc3QgcHJvcE5vZGU6IEVudGl0eVByb3BOb2RlID0ge1xuICAgICAgbm9kZVR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBjaGlsZHJlbjogZW50aXR5LnByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIsXG4gICAgICAgICAgcHJvcCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBzY2hlbWFCb2R5ID0gKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHByb3BOb2RlVG9ab2RUeXBlRGVmKHByb3BOb2RlLCBpbXBvcnRLZXlzKTtcbiAgICAgIGlmIChyZXN1bHQuZW5kc1dpdGgoXCIsXCIpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pKCk7XG5cbiAgICAvLyBmdWxsdGV4dCBpbmRleOyXkCDtj6ztlajrkJwg7Lus65+865OkIOy2lOy2nFxuICAgIC8vIFRPRE86IEdJTi9HaVNUIOyduOuNseyKpCDsg53shLHrkJwg7Lus65+8IOy2lOy2nFxuICAgIGNvbnN0IGZ1bGx0ZXh0Q29sdW1uczogRW50aXR5SW5kZXhbXCJjb2x1bW5zXCJdW10gPSBbXTtcblxuICAgIC8vIHZpcnR1YWwgcHJvcHMgKHZpcnR1YWxUeXBlOiBcImNvZGVcIiDrmJDripQgdW5kZWZpbmVk7J24IOqyg+unjCDtj6ztlagpXG4gICAgY29uc3QgdmlydHVhbFByb3BzID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBpc1ZpcnR1YWxDb2RlUHJvcChwcm9wKSlcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICAvLyBxdWVyeSB2aXJ0dWFsIHByb3BzICh2aXJ0dWFsVHlwZTogXCJxdWVyeVwi7J24IOqyg+unjCDtj6ztlagpXG4gICAgY29uc3QgdmlydHVhbFF1ZXJ5UHJvcHMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IGlzVmlydHVhbFF1ZXJ5UHJvcChwcm9wKSlcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICAvKipcbiAgICAgKiBoYXNEZWZhdWx0IHByb3BzXG4gICAgICogLSBudWxsYWJsZSDrmJDripQgZGJEZWZhdWx06rCAIOyeiOuKlCDsu6zrn7wgKGlkIO2PrO2VqClcbiAgICAgKiAtIHJlbGF0aW9u7J20IOyVhOuLiOqxsOuCmCwgcmVsYXRpb27snbTslrTrj4QgbnVsbGFibGXsnbTrqbQg7Y+s7ZWoXG4gICAgICovXG4gICAgY29uc3QgaGFzRGVmYXVsdENvbHVtbnMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChwcm9wKSA9PlxuICAgICAgICAgIChwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiB8fCBwcm9wLm51bGxhYmxlID09PSB0cnVlKSAmJlxuICAgICAgICAgIChwcm9wLm51bGxhYmxlID09PSB0cnVlIHx8IChwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiAmJiBwcm9wLmRiRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSksXG4gICAgICApXG4gICAgICAubWFwKChwcm9wKSA9PiAocHJvcC50eXBlID09PSBcInJlbGF0aW9uXCIgPyBgJHtwcm9wLm5hbWV9X2lkYCA6IHByb3AubmFtZSkpXG4gICAgICAuY29uY2F0KFwiaWRcIik7XG5cbiAgICAvKipcbiAgICAgKiBoYXNWZWN0b3IgcHJvcHNcbiAgICAgKiAtIHZlY3RvciDtg4DsnoXsnbgg7Lus65+8XG4gICAgICovXG4gICAgY29uc3QgaGFzVmVjdG9yQ29sdW1ucyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcigocHJvcCkgPT4gcHJvcC50eXBlID09PSBcInZlY3RvclwiIHx8IHByb3AudHlwZSA9PT0gXCJ2ZWN0b3JbXVwiKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8qKlxuICAgICAqIEpTT04gcHJvcHNcbiAgICAgKiAtIGpzb24g7YOA7J6F7J24IOy7rOufvFxuICAgICAqL1xuICAgIGNvbnN0IGpzb25Db2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBwcm9wLnR5cGUgPT09IFwianNvblwiKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlZCBwcm9wc1xuICAgICAqIC0gZ2VuZXJhdGVkIOyGjeyEseydtCDsnojripQg7Lus65+8IChJTlNFUlQvVVBEQVRFIOyLnCDqsJIg7KCc6rO1IOu2iOqwgClcbiAgICAgKi9cbiAgICBjb25zdCBnZW5lcmF0ZWRDb2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAocHJvcCkgPT5cbiAgICAgICAgICBwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiAmJiAocHJvcC5nZW5lcmF0ZWQgIT09IHVuZGVmaW5lZCB8fCBwcm9wLnR5cGUgPT09IFwic2VhcmNoVGV4dFwiKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICBjb25zdCBoYXNNZXRhZGF0YSA9XG4gICAgICBmdWxsdGV4dENvbHVtbnMubGVuZ3RoID4gMCB8fFxuICAgICAgdmlydHVhbFByb3BzLmxlbmd0aCA+IDAgfHxcbiAgICAgIHZpcnR1YWxRdWVyeVByb3BzLmxlbmd0aCA+IDAgfHxcbiAgICAgIGhhc0RlZmF1bHRDb2x1bW5zLmxlbmd0aCA+IDAgfHxcbiAgICAgIGdlbmVyYXRlZENvbHVtbnMubGVuZ3RoID4gMCB8fFxuICAgICAgaGFzVmVjdG9yQ29sdW1ucy5sZW5ndGggPiAwIHx8XG4gICAgICBqc29uQ29sdW1ucy5sZW5ndGggPiAwO1xuXG4gICAgY29uc3QgbGluZXMgPSBbXG4gICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke3NjaGVtYUJvZHl9O2AsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+YCArXG4gICAgICAgIChoYXNNZXRhZGF0YVxuICAgICAgICAgID8gYCAmIHske1xuICAgICAgICAgICAgICAoZnVsbHRleHRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX2Z1bGx0ZXh0X186IHJlYWRvbmx5IFske2Z1bGx0ZXh0Q29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKHZpcnR1YWxQcm9wcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX192aXJ0dWFsX186IHJlYWRvbmx5IFske3ZpcnR1YWxQcm9wcy5tYXAoKHByb3ApID0+IGBcIiR7cHJvcH1cImApLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKHZpcnR1YWxRdWVyeVByb3BzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX3ZpcnR1YWxfcXVlcnlfXzogcmVhZG9ubHkgWyR7dmlydHVhbFF1ZXJ5UHJvcHMubWFwKChwcm9wKSA9PiBgXCIke3Byb3B9XCJgKS5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgIChoYXNEZWZhdWx0Q29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19oYXNEZWZhdWx0X186IHJlYWRvbmx5IFske2hhc0RlZmF1bHRDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAoZ2VuZXJhdGVkQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19nZW5lcmF0ZWRfXzogcmVhZG9ubHkgWyR7Z2VuZXJhdGVkQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKGhhc1ZlY3RvckNvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fdmVjdG9yX186IHJlYWRvbmx5IFske2hhc1ZlY3RvckNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgIChqc29uQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19qc29uX186IHJlYWRvbmx5IFske2pzb25Db2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIilcbiAgICAgICAgICAgIH19YFxuICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICBcIjtcIixcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgQmFzZVNjaGVtYTogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZUxpc3RQYXJhbXNTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIC8vIFByb3Ag7JeG64qUIE1E7J24IOqyveyasCDsg53shLEg7KCc7Jm4XG4gICAgaWYgKGVudGl0eS5wcm9wcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfUJhc2VMaXN0UGFyYW1zYDtcblxuICAgIGNvbnN0IGZpbHRlclByb3BzID0gZW50aXR5LnByb3BzLmZpbHRlcigocHJvcCkgPT4gcHJvcC50b0ZpbHRlciA9PT0gdHJ1ZSk7XG5cbiAgICBjb25zdCBwcm9wTm9kZXM6IEVudGl0eVByb3BOb2RlW10gPSBmaWx0ZXJQcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIgYXMgY29uc3QsXG4gICAgICAgIHByb3AsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGZpbHRlckJvZHkgPSBwcm9wTm9kZXNcbiAgICAgIC5tYXAoKHByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cykpXG4gICAgICAuam9pbihcIlxcblwiKTtcblxuICAgIC8vIEZpbHRlclF1ZXJ5IO2DgOyeheydhCDsnITtlZwg7KCc7Jm47ZWgIHByb3BzIOy2lOy2nCAodmlydHVhbOunjCDsoJzsmbgpXG4gICAgY29uc3QgZXhjbHVkZWRQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHApID0+IHAudHlwZSA9PT0gXCJ2aXJ0dWFsXCIpLm1hcCgocCkgPT4gcC5uYW1lKTtcblxuICAgIC8vIG51bWVyaWMg7YOA7J6F7J24IHByb3BzIOy2lOy2nFxuICAgIGNvbnN0IG51bWVyaWNQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHApID0+IHAudHlwZSA9PT0gXCJudW1lcmljXCIpO1xuXG4gICAgLy8gQXBwbHlTb25hbXVGaWx0ZXIg7YOA7J6FIOyduOyekCDsg53shLFcbiAgICBjb25zdCBlbnRpdHlUeXBlID0gYCR7ZW50aXR5LmlkfUJhc2VTY2hlbWFgO1xuICAgIGNvbnN0IG51bWVyaWNLZXlzVW5pb24gPVxuICAgICAgbnVtZXJpY1Byb3BzLmxlbmd0aCA+IDAgPyBudW1lcmljUHJvcHMubWFwKChwcm9wKSA9PiBgXCIke3Byb3AubmFtZX1cImApLmpvaW4oXCIgfCBcIikgOiBcIm5ldmVyXCI7XG4gICAgY29uc3Qgb21pdEtleXNVbmlvbiA9XG4gICAgICBleGNsdWRlZFByb3BzLmxlbmd0aCA+IDAgPyBleGNsdWRlZFByb3BzLm1hcCgobikgPT4gYFwiJHtufVwiYCkuam9pbihcIiB8IFwiKSA6IFwibmV2ZXJcIjtcblxuICAgIC8vIFBLIO2DgOyeheyXkCDrlLDrpbggaWQgWm9kIO2DgOyehSDqsrDsoJVcbiAgICBjb25zdCBwa1R5cGUgPSBlbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgY29uc3QgaWRab2RUeXBlID1cbiAgICAgIHBrVHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBwa1R5cGUgPT09IFwidXVpZFwiXG4gICAgICAgID8gXCJ6QXJyYXlhYmxlKHouc3RyaW5nKCkpXCJcbiAgICAgICAgOiBcInpBcnJheWFibGUoei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpKVwiO1xuXG4gICAgY29uc3Qgc2NoZW1hQm9keSA9IGBcbnoub2JqZWN0KHtcbiAgbnVtOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIHBhZ2U6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLFxuICBzZWFyY2g6ICR7ZW50aXR5LmlkfVNlYXJjaEZpZWxkLFxuICBrZXl3b3JkOiB6LnN0cmluZygpLFxuICBvcmRlckJ5OiAke2VudGl0eS5pZH1PcmRlckJ5LFxuICBxdWVyeU1vZGU6IFNvbmFtdVF1ZXJ5TW9kZSxcbiAgaWQ6ICR7aWRab2RUeXBlfSxcbiAgc29uYW11RmlsdGVyOiB6LmN1c3RvbTxBcHBseVNvbmFtdUZpbHRlcjwke2VudGl0eVR5cGV9LCAke29taXRLZXlzVW5pb259LCAke251bWVyaWNLZXlzVW5pb259Pj4oKSwke2ZpbHRlckJvZHl9XG59KS5wYXJ0aWFsKCk7XG5gLnRyaW0oKTtcblxuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgYGV4cG9ydCBjb25zdCAke3NjaGVtYU5hbWV9ID0gJHtzY2hlbWFCb2R5fTtgLFxuICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PjtgLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBCYXNlTGlzdFBhcmFtczogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0U3Vic2V0U291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LnN1YnNldHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChlbnRpdHkucGFyZW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc3Vic2V0S2V5cyA9IE9iamVjdC5rZXlzKGVudGl0eS5zdWJzZXRzKTtcbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAgIC4uLnN1YnNldEtleXMuZmxhdE1hcCgoc3Vic2V0S2V5KSA9PiB7XG4gICAgICAgIC8vIOyEnOu4jOyFi+yXkOyEnCBGaWVsZEV4cHJbXSDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgZmllbGRFeHBycyA9IGVudGl0eS5zdWJzZXRzW3N1YnNldEtleV07XG5cbiAgICAgICAgLy8gRmllbGRFeHByW13roZwgRW50aXR5UHJvcE5vZGVbXSDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgcHJvcE5vZGVzID0gZW50aXR5LmZpZWxkRXhwcnNUb1Byb3BOb2RlcyhmaWVsZEV4cHJzKTtcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0JHtzdWJzZXRLZXl9YDtcbiAgICAgICAgY29uc3QgcHJvcE5vZGU6IEVudGl0eVByb3BOb2RlID0ge1xuICAgICAgICAgIG5vZGVUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIGNoaWxkcmVuOiBwcm9wTm9kZXMsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRW50aXR5UHJvcE5vZGVbXeuhnCBab2RUeXBlRGVmKHN0cmluZynsnYQg6rCA7KC47Ji0XG4gICAgICAgIGNvbnN0IGJvZHkgPSBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cyk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke2JvZHkucmVwbGFjZSgvLCQvLCBcIlwiKX07YCxcbiAgICAgICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+O2AsXG4gICAgICAgIF07XG4gICAgICB9KSxcbiAgICAgIGBleHBvcnQgdHlwZSAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0TWFwcGluZyA9IHtgLFxuICAgICAgLi4uc3Vic2V0S2V5cy5tYXAoKHN1YnNldEtleSkgPT4gYCAgJHtzdWJzZXRLZXl9OiAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0JHtzdWJzZXRLZXl9O2ApLFxuICAgICAgXCJ9O1wiLFxuICAgICAgYGV4cG9ydCBjb25zdCAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5ID0gei5lbnVtKFske3N1YnNldEtleXNcbiAgICAgICAgLm1hcCgoaykgPT4gYFwiJHtrfVwiYClcbiAgICAgICAgLmpvaW4oXCIsXCIpfV0pO2AsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleSA9IHouaW5mZXI8dHlwZW9mICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXk+O2AsXG4gICAgICBcIlwiLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBTdWJzZXRzOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXMsXG4gICAgICBpbXBvcnRLZXlzOiB1bmlxdWUoaW1wb3J0S2V5cyksXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztTQUlrQztvQkFFeUI7V0FDbEI7V0FDZ0M7V0FFMUI7Y0FDVDttQkFDbUQ7QUFPekYsSUFBYSxzQkFBYixjQUF5QyxTQUFTO0NBQ2hELGNBQWM7RUFDWixNQUFNLFdBQVc7Q0FDbkI7Q0FFQSxtQkFBbUI7RUFDakIsTUFBTSxFQUFFLFFBQVEsT0FBTyxPQUFPO0VBQzlCLE9BQU87R0FDTCxRQUFRLEdBQUcsSUFBSTtHQUNmLE1BQU07RUFDUjtDQUNGO0NBQ0EsU0FBUztFQUVQLE1BQU0sV0FEWSxjQUFjLFVBQ2YsQ0FBQSxDQUFVLEtBQUssT0FBTyxjQUFjLElBQUksRUFBRSxDQUFDO0VBRzVELE1BQU0sY0FBYyxTQUFTLFNBQVMsV0FBVztHQUMvQyxPQUFPO0lBQ0wsS0FBSyxtQkFBbUIsTUFBTTtJQUM5QixLQUFLLHdCQUF3QixNQUFNO0lBQ25DLEtBQUssNEJBQTRCLE1BQU07SUFDdkMsS0FBSyxvQkFBb0IsTUFBTTtHQUNqQyxDQUFDLENBQUMsT0FBTyxXQUFXO0VBQ3RCLENBQUM7RUFDRCxNQUFNLEVBQUUsbUNBQW1DLFdBQVc7RUFHdEQsTUFBTSxrQkFBa0I7R0FBQztHQUFTO0dBQWM7R0FBa0I7R0FBVztFQUFlO0VBQzVGLFlBQVksTUFBTSxHQUFHLE1BQU07R0FDekIsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLE1BQU0sR0FBRztHQUNoQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sTUFBTSxHQUFHO0dBQ2hDLE1BQU0sU0FBUyxnQkFBZ0IsUUFBUSxJQUFJO0dBQzNDLE1BQU0sU0FBUyxnQkFBZ0IsUUFBUSxJQUFJO0dBQzNDLElBQUksU0FBUyxRQUNYLE9BQU87UUFDRixJQUFJLFNBQVMsUUFDbEIsT0FBTztRQUVQLE9BQU87RUFFWCxDQUFDO0VBRUQsTUFBTSxhQUFhLFlBQVksUUFDNUIsUUFBUSxPQUFPO0dBQ2QsSUFB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
246
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vLi4vYXBpXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eSB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IGlzVmlydHVhbENvZGVQcm9wLCBpc1ZpcnR1YWxRdWVyeVByb3AgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5SW5kZXgsIHR5cGUgRW50aXR5UHJvcE5vZGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IG5vbk51bGxhYmxlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgQlVJTFRfSU5fVFlQRVMsIHByb3BOb2RlVG9ab2RUeXBlRGVmLCB6b2RUeXBlVG9ab2RDb2RlIH0gZnJvbSBcIi4uL3pvZC1jb252ZXJ0ZXJcIjtcblxuZXhwb3J0IHR5cGUgU291cmNlQ29kZSA9IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbGluZXM6IHN0cmluZ1tdO1xuICBpbXBvcnRLZXlzOiBzdHJpbmdbXTtcbn07XG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2dlbmVyYXRlZCBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJnZW5lcmF0ZWRcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgc29uYW11LmdlbmVyYXRlZC50c2AsXG4gICAgfTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgZW50aXR5SWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICBjb25zdCBlbnRpdGllcyA9IGVudGl0eUlkcy5tYXAoKGlkKSA9PiBFbnRpdHlNYW5hZ2VyLmdldChpZCkpO1xuXG4gICAgLy8g7KCE7LK0IFNvdXJjZUNvZGUg7IOd7ISxXG4gICAgY29uc3Qgc291cmNlQ29kZXMgPSBlbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHRoaXMuZ2V0RW51bXNTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICAgIHRoaXMuZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRCYXNlTGlzdFBhcmFtc1NvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRTdWJzZXRTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICBdLmZpbHRlcihub25OdWxsYWJsZSk7XG4gICAgfSk7XG4gICAgTmFpdGUudChcIlRlbXBsYXRlX19nZW5lcmF0ZWQ6c291cmNlQ29kZXNcIiwgc291cmNlQ29kZXMpO1xuXG4gICAgLy8gU29ydFxuICAgIGNvbnN0IExBQkVMX0tFWV9PUkRFUiA9IFtcIkVudW1zXCIsIFwiQmFzZVNjaGVtYVwiLCBcIkJhc2VMaXN0UGFyYW1zXCIsIFwiU3Vic2V0c1wiLCBcIlN1YnNldFF1ZXJpZXNcIl07XG4gICAgc291cmNlQ29kZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgW2FLZXldID0gYS5sYWJlbC5zcGxpdChcIjpcIik7XG4gICAgICBjb25zdCBbYktleV0gPSBiLmxhYmVsLnNwbGl0KFwiOlwiKTtcbiAgICAgIGNvbnN0IGFJbmRleCA9IExBQkVMX0tFWV9PUkRFUi5pbmRleE9mKGFLZXkpO1xuICAgICAgY29uc3QgYkluZGV4ID0gTEFCRUxfS0VZX09SREVSLmluZGV4T2YoYktleSk7XG4gICAgICBpZiAoYUluZGV4ID4gYkluZGV4KSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIGlmIChhSW5kZXggPCBiSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzb3VyY2VDb2RlID0gc291cmNlQ29kZXMucmVkdWNlKFxuICAgICAgKHJlc3VsdCwgdHMpID0+IHtcbiAgICAgICAgaWYgKHRzID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmVzOiBbLi4ucmVzdWx0LmxpbmVzLCBgLy8gJHt0cy5sYWJlbH1gLCAuLi50cy5saW5lcywgXCJcIl0sXG4gICAgICAgICAgaW1wb3J0S2V5czogdW5pcXVlKFsuLi5yZXN1bHQuaW1wb3J0S2V5cywgLi4udHMuaW1wb3J0S2V5c10udG9Tb3J0ZWQoKSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgLyogU0FGRVRZOiByZWR1Y2Ug64iE7IKw6riw64qUIGxhYmVs7J2EIOygnOyZuO2VnCBTb3VyY2VDb2Rl7J2YIOuRkCDrsLDsl7TroZwg7LSI6riw7ZmU65Cc64ukLiAqLyB7XG4gICAgICAgIGxpbmVzOiBbXSxcbiAgICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICB9IGFzIE9taXQ8U291cmNlQ29kZSwgXCJsYWJlbFwiPixcbiAgICApO1xuXG4gICAgLy8gLnR5cGVzLnRz7J2YIO2DgOyeheydhCDssLjsobDtlZjripQg6rK97JqwIOyInO2ZmOywuOyhsCjsg4HtmLjssLjsobAp6rCAIOuwnOyDne2VmOuvgOuhnCDtg4DsnoXsnYQg6rCA7KC47JmAIOyduOudvOyduCDsspjrpqxcbiAgICBjb25zdCBhbGxUeXBlS2V5cyA9IGVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT4gT2JqZWN0LmtleXMoZW50aXR5LnR5cGVzKSk7XG4gICAgY29uc3QgY2RJbXBvcnRLZXlzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoaW1wb3J0S2V5KSA9PlxuICAgICAgYWxsVHlwZUtleXMuaW5jbHVkZXMoaW1wb3J0S2V5KSxcbiAgICApO1xuICAgIGlmIChjZEltcG9ydEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VzdG9tU2NhbGFyTGluZXMgPSBjZEltcG9ydEtleXMuZmxhdE1hcCgoaW1wb3J0S2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IGVudGl0aWVzLmZpbmQoKGNhbmRpZGF0ZUVudGl0eSkgPT4gY2FuZGlkYXRlRW50aXR5LnR5cGVzW2ltcG9ydEtleV0pO1xuICAgICAgICBpZiAoIWVudGl0eSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWm9kVHlwZSBub3QgZm91bmQgJHtpbXBvcnRLZXl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgem9kVHlwZSA9IGVudGl0eS50eXBlc1tpbXBvcnRLZXldO1xuICAgICAgICBhc3NlcnQoem9kVHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgLy8gQ3VzdG9tU2NhbGFyOiAke2ltcG9ydEtleX1gLFxuICAgICAgICAgIGBjb25zdCAke2ltcG9ydEtleX0gPSAke3pvZFR5cGVUb1pvZENvZGUoem9kVHlwZSwgc291cmNlQ29kZS5pbXBvcnRLZXlzKX07YCxcbiAgICAgICAgICBgdHlwZSAke2ltcG9ydEtleX0gPSB6LmluZmVyPHR5cGVvZiAke2ltcG9ydEtleX0+YCxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICBdO1xuICAgICAgfSk7XG4gICAgICBzb3VyY2VDb2RlLmxpbmVzID0gWy4uLmN1c3RvbVNjYWxhckxpbmVzLCAuLi5zb3VyY2VDb2RlLmxpbmVzXTtcbiAgICAgIHNvdXJjZUNvZGUuaW1wb3J0S2V5cyA9IHVuaXF1ZShcbiAgICAgICAgc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoaW1wb3J0S2V5KSA9PiAhY2RJbXBvcnRLZXlzLmluY2x1ZGVzKGltcG9ydEtleSkpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gc291cmNlQ29kZS5saW5lcy5qb2luKFwiXFxuXCIpO1xuICAgIE5haXRlLnQoXCJUZW1wbGF0ZV9fZ2VuZXJhdGVkOmJvZHlcIiwgYm9keSk7XG5cbiAgICAvLyBpbXBvcnRcbiAgICAvLyBzb3VyY2VDb2RlLmltcG9ydEtleXPsl5Ag64K07J6lIO2DgOyeheydmCDsiqTtgqTrp4jqsIAg7J6I7Jy866m0IHNvbmFtdSBpbXBvcnTsl5Ag7LaU6rCAXG4gICAgY29uc3QgYnVpbHRJblNjaGVtYU5hbWVzID0gT2JqZWN0LnZhbHVlcyhCVUlMVF9JTl9UWVBFUykubWFwKFxuICAgICAgKGluZm8pID0+XG4gICAgICAgIC8qIFNBRkVUWTogQlVJTFRfSU5fVFlQRVPsnZgg66qo65OgIO2VreuqqeydgCDsg53shLEg7L2U65Oc7JeQIOyTuCBzY2hlbWFOYW1l7J2EIOqwgOynhOuLpC4gKi8gaW5mby5zY2hlbWFOYW1lIGFzIHN0cmluZyxcbiAgICApO1xuICAgIGNvbnN0IGJ1aWx0SW5TY2hlbWFzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoa2V5KSA9PiBidWlsdEluU2NoZW1hTmFtZXMuaW5jbHVkZXMoa2V5KSk7XG4gICAgY29uc3Qgc29uYW11SW1wb3J0cyA9IFtcbiAgICAgIFwiekFycmF5YWJsZVwiLFxuICAgICAgXCJTUUxEYXRlVGltZVN0cmluZ1wiLFxuICAgICAgXCJTdWJzZXRRdWVyeVwiLFxuICAgICAgXCJTb25hbXVRdWVyeU1vZGVcIixcbiAgICAgIFwiQXBwbHlTb25hbXVGaWx0ZXJcIixcbiAgICAgIC4uLmJ1aWx0SW5TY2hlbWFzLFxuICAgIF0uZmlsdGVyKChtb2QpID0+IGJvZHkuaW5jbHVkZXMobW9kKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKCksXG4gICAgICBib2R5LFxuICAgICAgaW1wb3J0S2V5czogc291cmNlQ29kZS5pbXBvcnRLZXlzLFxuICAgICAgY3VzdG9tSGVhZGVyczogW1xuICAgICAgICBcIi8qKlwiLFxuICAgICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgICAgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgXCIgKi9cIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgXCIvKiBveGxpbnQtZGlzYWJsZSAqL1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICBgaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7YCxcbiAgICAgICAgYGltcG9ydCB7ICR7c29uYW11SW1wb3J0cy5qb2luKFwiLFwiKX0gfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGdldEVudW1zU291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LmVudW1MYWJlbHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEVudW1zOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXM6IE9iamVjdC5lbnRyaWVzKGVudGl0eS5lbnVtTGFiZWxzKVxuICAgICAgICAuZmlsdGVyKChbLCBlbnVtTGFiZWxdKSA9PiBPYmplY3Qua2V5cyhlbnVtTGFiZWwpLmxlbmd0aCA+IDApXG4gICAgICAgIC5mbGF0TWFwKChbZW51bUlkLCBlbnVtTGFiZWxdKSA9PiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudW1JZH0gPSB6LmVudW0oWyR7T2JqZWN0LmtleXMoZW51bUxhYmVsKS5tYXAoXG4gICAgICAgICAgICAoZWwpID0+IGBcIiR7ZWx9XCJgLFxuICAgICAgICAgICl9XSkuZGVzY3JpYmUoXCIke2VudW1JZH1cIik7YCxcbiAgICAgICAgICBgZXhwb3J0IHR5cGUgJHtlbnVtSWR9ID0gei5pbmZlcjx0eXBlb2YgJHtlbnVtSWR9PjtgLFxuICAgICAgICAgIGBleHBvcnQgY29uc3QgJHtlbnVtSWR9TGFiZWwgPSAke0pTT04uc3RyaW5naWZ5KGVudW1MYWJlbCl9O2AsXG4gICAgICAgIF0pLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxuXG4gIGdldEJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5LCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdKTogU291cmNlQ29kZSB7XG4gICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9QmFzZVNjaGVtYWA7XG4gICAgY29uc3QgcHJvcE5vZGU6IEVudGl0eVByb3BOb2RlID0ge1xuICAgICAgbm9kZVR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBjaGlsZHJlbjogZW50aXR5LnByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIsXG4gICAgICAgICAgcHJvcCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBzY2hlbWFCb2R5ID0gKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHByb3BOb2RlVG9ab2RUeXBlRGVmKHByb3BOb2RlLCBpbXBvcnRLZXlzKTtcbiAgICAgIGlmIChyZXN1bHQuZW5kc1dpdGgoXCIsXCIpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pKCk7XG5cbiAgICAvLyBmdWxsdGV4dCBpbmRleOyXkCDtj6ztlajrkJwg7Lus65+865OkIOy2lOy2nFxuICAgIC8vIFRPRE86IEdJTi9HaVNUIOyduOuNseyKpCDsg53shLHrkJwg7Lus65+8IOy2lOy2nFxuICAgIGNvbnN0IGZ1bGx0ZXh0Q29sdW1uczogRW50aXR5SW5kZXhbXCJjb2x1bW5zXCJdW10gPSBbXTtcblxuICAgIC8vIHZpcnR1YWwgcHJvcHMgKHZpcnR1YWxUeXBlOiBcImNvZGVcIiDrmJDripQgdW5kZWZpbmVk7J24IOqyg+unjCDtj6ztlagpXG4gICAgY29uc3QgdmlydHVhbFByb3BzID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBpc1ZpcnR1YWxDb2RlUHJvcChwcm9wKSlcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICAvLyBxdWVyeSB2aXJ0dWFsIHByb3BzICh2aXJ0dWFsVHlwZTogXCJxdWVyeVwi7J24IOqyg+unjCDtj6ztlagpXG4gICAgY29uc3QgdmlydHVhbFF1ZXJ5UHJvcHMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IGlzVmlydHVhbFF1ZXJ5UHJvcChwcm9wKSlcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICAvKipcbiAgICAgKiBoYXNEZWZhdWx0IHByb3BzXG4gICAgICogLSBudWxsYWJsZSDrmJDripQgZGJEZWZhdWx06rCAIOyeiOuKlCDsu6zrn7wgKGlkIO2PrO2VqClcbiAgICAgKiAtIHJlbGF0aW9u7J20IOyVhOuLiOqxsOuCmCwgcmVsYXRpb27snbTslrTrj4QgbnVsbGFibGXsnbTrqbQg7Y+s7ZWoXG4gICAgICovXG4gICAgY29uc3QgaGFzRGVmYXVsdENvbHVtbnMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChwcm9wKSA9PlxuICAgICAgICAgIChwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiB8fCBwcm9wLm51bGxhYmxlID09PSB0cnVlKSAmJlxuICAgICAgICAgIChwcm9wLm51bGxhYmxlID09PSB0cnVlIHx8IChwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiAmJiBwcm9wLmRiRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSksXG4gICAgICApXG4gICAgICAubWFwKChwcm9wKSA9PiAocHJvcC50eXBlID09PSBcInJlbGF0aW9uXCIgPyBgJHtwcm9wLm5hbWV9X2lkYCA6IHByb3AubmFtZSkpXG4gICAgICAuY29uY2F0KFwiaWRcIik7XG5cbiAgICAvKipcbiAgICAgKiBoYXNWZWN0b3IgcHJvcHNcbiAgICAgKiAtIHZlY3RvciDtg4DsnoXsnbgg7Lus65+8XG4gICAgICovXG4gICAgY29uc3QgaGFzVmVjdG9yQ29sdW1ucyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcigocHJvcCkgPT4gcHJvcC50eXBlID09PSBcInZlY3RvclwiIHx8IHByb3AudHlwZSA9PT0gXCJ2ZWN0b3JbXVwiKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8qKlxuICAgICAqIEpTT04gcHJvcHNcbiAgICAgKiAtIGpzb24g7YOA7J6F7J24IOy7rOufvFxuICAgICAqL1xuICAgIGNvbnN0IGpzb25Db2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBwcm9wLnR5cGUgPT09IFwianNvblwiKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlZCBwcm9wc1xuICAgICAqIC0gZ2VuZXJhdGVkIOyGjeyEseydtCDsnojripQg7Lus65+8IChJTlNFUlQvVVBEQVRFIOyLnCDqsJIg7KCc6rO1IOu2iOqwgClcbiAgICAgKi9cbiAgICBjb25zdCBnZW5lcmF0ZWRDb2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAocHJvcCkgPT5cbiAgICAgICAgICBwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiAmJiAocHJvcC5nZW5lcmF0ZWQgIT09IHVuZGVmaW5lZCB8fCBwcm9wLnR5cGUgPT09IFwic2VhcmNoVGV4dFwiKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICBjb25zdCBoYXNNZXRhZGF0YSA9XG4gICAgICBmdWxsdGV4dENvbHVtbnMubGVuZ3RoID4gMCB8fFxuICAgICAgdmlydHVhbFByb3BzLmxlbmd0aCA+IDAgfHxcbiAgICAgIHZpcnR1YWxRdWVyeVByb3BzLmxlbmd0aCA+IDAgfHxcbiAgICAgIGhhc0RlZmF1bHRDb2x1bW5zLmxlbmd0aCA+IDAgfHxcbiAgICAgIGdlbmVyYXRlZENvbHVtbnMubGVuZ3RoID4gMCB8fFxuICAgICAgaGFzVmVjdG9yQ29sdW1ucy5sZW5ndGggPiAwIHx8XG4gICAgICBqc29uQ29sdW1ucy5sZW5ndGggPiAwO1xuXG4gICAgY29uc3QgbGluZXMgPSBbXG4gICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke3NjaGVtYUJvZHl9O2AsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+YCArXG4gICAgICAgIChoYXNNZXRhZGF0YVxuICAgICAgICAgID8gYCAmIHske1xuICAgICAgICAgICAgICAoZnVsbHRleHRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX2Z1bGx0ZXh0X186IHJlYWRvbmx5IFske2Z1bGx0ZXh0Q29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKHZpcnR1YWxQcm9wcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX192aXJ0dWFsX186IHJlYWRvbmx5IFske3ZpcnR1YWxQcm9wcy5tYXAoKHByb3ApID0+IGBcIiR7cHJvcH1cImApLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKHZpcnR1YWxRdWVyeVByb3BzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX3ZpcnR1YWxfcXVlcnlfXzogcmVhZG9ubHkgWyR7dmlydHVhbFF1ZXJ5UHJvcHMubWFwKChwcm9wKSA9PiBgXCIke3Byb3B9XCJgKS5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgIChoYXNEZWZhdWx0Q29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19oYXNEZWZhdWx0X186IHJlYWRvbmx5IFske2hhc0RlZmF1bHRDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAoZ2VuZXJhdGVkQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19nZW5lcmF0ZWRfXzogcmVhZG9ubHkgWyR7Z2VuZXJhdGVkQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKGhhc1ZlY3RvckNvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fdmVjdG9yX186IHJlYWRvbmx5IFske2hhc1ZlY3RvckNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgIChqc29uQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19qc29uX186IHJlYWRvbmx5IFske2pzb25Db2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIilcbiAgICAgICAgICAgIH19YFxuICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICBcIjtcIixcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgQmFzZVNjaGVtYTogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZUxpc3RQYXJhbXNTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIC8vIFByb3Ag7JeG64qUIE1E7J24IOqyveyasCDsg53shLEg7KCc7Jm4XG4gICAgaWYgKGVudGl0eS5wcm9wcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfUJhc2VMaXN0UGFyYW1zYDtcblxuICAgIGNvbnN0IGZpbHRlclByb3BzID0gZW50aXR5LnByb3BzLmZpbHRlcigocHJvcCkgPT4gcHJvcC50b0ZpbHRlciA9PT0gdHJ1ZSk7XG5cbiAgICBjb25zdCBwcm9wTm9kZXM6IEVudGl0eVByb3BOb2RlW10gPSBmaWx0ZXJQcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIgYXMgY29uc3QsXG4gICAgICAgIHByb3AsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGZpbHRlckJvZHkgPSBwcm9wTm9kZXNcbiAgICAgIC5tYXAoKHByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cykpXG4gICAgICAuam9pbihcIlxcblwiKTtcblxuICAgIC8vIEZpbHRlclF1ZXJ5IO2DgOyeheydhCDsnITtlZwg7KCc7Jm47ZWgIHByb3BzIOy2lOy2nCAodmlydHVhbOunjCDsoJzsmbgpXG4gICAgY29uc3QgZXhjbHVkZWRQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHApID0+IHAudHlwZSA9PT0gXCJ2aXJ0dWFsXCIpLm1hcCgocCkgPT4gcC5uYW1lKTtcblxuICAgIC8vIG51bWVyaWMg7YOA7J6F7J24IHByb3BzIOy2lOy2nFxuICAgIGNvbnN0IG51bWVyaWNQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHApID0+IHAudHlwZSA9PT0gXCJudW1lcmljXCIpO1xuXG4gICAgLy8gQXBwbHlTb25hbXVGaWx0ZXIg7YOA7J6FIOyduOyekCDsg53shLFcbiAgICBjb25zdCBlbnRpdHlUeXBlID0gYCR7ZW50aXR5LmlkfUJhc2VTY2hlbWFgO1xuICAgIGNvbnN0IG51bWVyaWNLZXlzVW5pb24gPVxuICAgICAgbnVtZXJpY1Byb3BzLmxlbmd0aCA+IDAgPyBudW1lcmljUHJvcHMubWFwKChwcm9wKSA9PiBgXCIke3Byb3AubmFtZX1cImApLmpvaW4oXCIgfCBcIikgOiBcIm5ldmVyXCI7XG4gICAgY29uc3Qgb21pdEtleXNVbmlvbiA9XG4gICAgICBleGNsdWRlZFByb3BzLmxlbmd0aCA+IDAgPyBleGNsdWRlZFByb3BzLm1hcCgobikgPT4gYFwiJHtufVwiYCkuam9pbihcIiB8IFwiKSA6IFwibmV2ZXJcIjtcblxuICAgIC8vIFBLIO2DgOyeheyXkCDrlLDrpbggaWQgWm9kIO2DgOyehSDqsrDsoJVcbiAgICBjb25zdCBwa1R5cGUgPSBlbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgY29uc3QgaWRab2RUeXBlID1cbiAgICAgIHBrVHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBwa1R5cGUgPT09IFwidXVpZFwiXG4gICAgICAgID8gXCJ6QXJyYXlhYmxlKHouc3RyaW5nKCkpXCJcbiAgICAgICAgOiBcInpBcnJheWFibGUoei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpKVwiO1xuXG4gICAgY29uc3Qgc2NoZW1hQm9keSA9IGBcbnoub2JqZWN0KHtcbiAgbnVtOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIHBhZ2U6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLFxuICBzZWFyY2g6ICR7ZW50aXR5LmlkfVNlYXJjaEZpZWxkLFxuICBrZXl3b3JkOiB6LnN0cmluZygpLFxuICBvcmRlckJ5OiAke2VudGl0eS5pZH1PcmRlckJ5LFxuICBxdWVyeU1vZGU6IFNvbmFtdVF1ZXJ5TW9kZSxcbiAgaWQ6ICR7aWRab2RUeXBlfSxcbiAgc29uYW11RmlsdGVyOiB6LmN1c3RvbTxBcHBseVNvbmFtdUZpbHRlcjwke2VudGl0eVR5cGV9LCAke29taXRLZXlzVW5pb259LCAke251bWVyaWNLZXlzVW5pb259Pj4oKSwke2ZpbHRlckJvZHl9XG59KS5wYXJ0aWFsKCk7XG5gLnRyaW0oKTtcblxuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgYGV4cG9ydCBjb25zdCAke3NjaGVtYU5hbWV9ID0gJHtzY2hlbWFCb2R5fTtgLFxuICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PjtgLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBCYXNlTGlzdFBhcmFtczogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0U3Vic2V0U291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LnN1YnNldHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChlbnRpdHkucGFyZW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc3Vic2V0S2V5cyA9IE9iamVjdC5rZXlzKGVudGl0eS5zdWJzZXRzKTtcbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAgIC4uLnN1YnNldEtleXMuZmxhdE1hcCgoc3Vic2V0S2V5KSA9PiB7XG4gICAgICAgIC8vIOyEnOu4jOyFi+yXkOyEnCBGaWVsZEV4cHJbXSDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgZmllbGRFeHBycyA9IGVudGl0eS5zdWJzZXRzW3N1YnNldEtleV07XG5cbiAgICAgICAgLy8gRmllbGRFeHByW13roZwgRW50aXR5UHJvcE5vZGVbXSDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgcHJvcE5vZGVzID0gZW50aXR5LmZpZWxkRXhwcnNUb1Byb3BOb2RlcyhmaWVsZEV4cHJzKTtcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0JHtzdWJzZXRLZXl9YDtcbiAgICAgICAgY29uc3QgcHJvcE5vZGU6IEVudGl0eVByb3BOb2RlID0ge1xuICAgICAgICAgIG5vZGVUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIGNoaWxkcmVuOiBwcm9wTm9kZXMsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRW50aXR5UHJvcE5vZGVbXeuhnCBab2RUeXBlRGVmKHN0cmluZynsnYQg6rCA7KC47Ji0XG4gICAgICAgIGNvbnN0IGJvZHkgPSBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cyk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke2JvZHkucmVwbGFjZSgvLCQvLCBcIlwiKX07YCxcbiAgICAgICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+O2AsXG4gICAgICAgIF07XG4gICAgICB9KSxcbiAgICAgIGBleHBvcnQgdHlwZSAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0TWFwcGluZyA9IHtgLFxuICAgICAgLi4uc3Vic2V0S2V5cy5tYXAoKHN1YnNldEtleSkgPT4gYCAgJHtzdWJzZXRLZXl9OiAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0JHtzdWJzZXRLZXl9O2ApLFxuICAgICAgXCJ9O1wiLFxuICAgICAgYGV4cG9ydCBjb25zdCAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5ID0gei5lbnVtKFske3N1YnNldEtleXNcbiAgICAgICAgLm1hcCgoaykgPT4gYFwiJHtrfVwiYClcbiAgICAgICAgLmpvaW4oXCIsXCIpfV0pO2AsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleSA9IHouaW5mZXI8dHlwZW9mICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXk+O2AsXG4gICAgICBcIlwiLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBTdWJzZXRzOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXMsXG4gICAgICBpbXBvcnRLZXlzOiB1bmlxdWUoaW1wb3J0S2V5cyksXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUlrQyxTQUFBO0FBRXlCLG9CQUFBO0FBQ2xCLFdBQUE7QUFDZ0MsV0FBQTtBQUUxQixXQUFBO0FBQ1QsY0FBQTtBQUNtRCxtQkFBQTtBQU96RixJQUFhLHNCQUFiLGNBQXlDLFNBQVM7Q0FDaEQsY0FBYztFQUNaLE1BQU0sV0FBVztDQUNuQjtDQUVBLG1CQUFtQjtFQUNqQixNQUFNLEVBQUUsUUFBUSxPQUFPLE9BQU87RUFDOUIsT0FBTztHQUNMLFFBQVEsR0FBRyxJQUFJO0dBQ2YsTUFBTTtFQUNSO0NBQ0Y7Q0FDQSxTQUFTO0VBRVAsTUFBTSxXQURZLGNBQWMsVUFDZixDQUFBLENBQVUsS0FBSyxPQUFPLGNBQWMsSUFBSSxFQUFFLENBQUM7RUFHNUQsTUFBTSxjQUFjLFNBQVMsU0FBUyxXQUFXO0dBQy9DLE9BQU87SUFDTCxLQUFLLG1CQUFtQixNQUFNO0lBQzlCLEtBQUssd0JBQXdCLE1BQU07SUFDbkMsS0FBSyw0QkFBNEIsTUFBTTtJQUN2QyxLQUFLLG9CQUFvQixNQUFNO0dBQ2pDLENBQUMsQ0FBQyxPQUFPLFdBQVc7RUFDdEIsQ0FBQztFQUNELE1BQU0sRUFBRSxtQ0FBbUMsV0FBVztFQUd0RCxNQUFNLGtCQUFrQjtHQUFDO0dBQVM7R0FBYztHQUFrQjtHQUFXO0VBQWU7RUFDNUYsWUFBWSxNQUFNLEdBQUcsTUFBTTtHQUN6QixNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sTUFBTSxHQUFHO0dBQ2hDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxNQUFNLEdBQUc7R0FDaEMsTUFBTSxTQUFTLGdCQUFnQixRQUFRLElBQUk7R0FDM0MsTUFBTSxTQUFTLGdCQUFnQixRQUFRLElBQUk7R0FDM0MsSUFBSSxTQUFTLFFBQ1gsT0FBTztRQUNGLElBQUksU0FBUyxRQUNsQixPQUFPO1FBRVAsT0FBTztFQUVYLENBQUM7RUFFRCxNQUFN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