@pipeline-builder/api-core 4.1.12 → 4.1.14

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 (187) hide show
  1. package/README.md +3 -2
  2. package/lib/constants/index.d.ts +0 -1
  3. package/lib/constants/index.js +1 -2
  4. package/lib/errors/app-errors.d.ts +8 -3
  5. package/lib/errors/app-errors.js +10 -5
  6. package/lib/helpers/access-helpers.d.ts +4 -6
  7. package/lib/helpers/access-helpers.js +6 -8
  8. package/lib/helpers/index.d.ts +3 -3
  9. package/lib/helpers/index.js +4 -4
  10. package/lib/helpers/org-hierarchy-http.d.ts +11 -10
  11. package/lib/helpers/org-hierarchy-http.js +24 -35
  12. package/lib/helpers/org-hierarchy.d.ts +37 -3
  13. package/lib/helpers/org-hierarchy.js +45 -4
  14. package/lib/helpers/restore-helpers.d.ts +44 -24
  15. package/lib/helpers/restore-helpers.js +41 -52
  16. package/lib/helpers/sse-helpers.d.ts +29 -7
  17. package/lib/helpers/sse-helpers.js +36 -9
  18. package/lib/index.d.ts +16 -14
  19. package/lib/index.js +17 -15
  20. package/lib/middleware/assurance.d.ts +116 -0
  21. package/lib/middleware/assurance.js +176 -0
  22. package/lib/middleware/auth.d.ts +5 -427
  23. package/lib/middleware/auth.js +36 -789
  24. package/lib/middleware/ecosystem-guard.d.ts +47 -0
  25. package/lib/middleware/ecosystem-guard.js +60 -0
  26. package/lib/middleware/index.d.ts +11 -4
  27. package/lib/middleware/index.js +12 -5
  28. package/lib/middleware/jwt-verify.d.ts +52 -0
  29. package/lib/middleware/jwt-verify.js +105 -0
  30. package/lib/middleware/permission-gates.d.ts +133 -0
  31. package/lib/middleware/permission-gates.js +260 -0
  32. package/lib/middleware/revocation.d.ts +96 -0
  33. package/lib/middleware/revocation.js +162 -0
  34. package/lib/middleware/route-table.d.ts +11 -0
  35. package/lib/middleware/route-table.js +4 -1
  36. package/lib/middleware/service-tokens.d.ts +83 -0
  37. package/lib/middleware/service-tokens.js +158 -0
  38. package/lib/middleware/step-up.d.ts +2 -2
  39. package/lib/middleware/step-up.js +8 -7
  40. package/lib/middleware/system-org.d.ts +20 -0
  41. package/lib/middleware/system-org.js +25 -0
  42. package/lib/openapi/routes/plugin-routes.js +133 -10
  43. package/lib/openapi/schema-registry.js +2 -5
  44. package/lib/routes/index.d.ts +1 -1
  45. package/lib/routes/index.js +2 -2
  46. package/lib/services/api-key-exchange.js +7 -5
  47. package/lib/services/audit-spool.d.ts +34 -10
  48. package/lib/services/audit-spool.js +75 -34
  49. package/lib/services/cache-service.d.ts +7 -0
  50. package/lib/services/cache-service.js +1 -1
  51. package/lib/services/circuit-breaker.d.ts +14 -1
  52. package/lib/services/circuit-breaker.js +36 -10
  53. package/lib/services/compliance-client.d.ts +10 -2
  54. package/lib/services/compliance-client.js +17 -10
  55. package/lib/services/compliance-event-subscriber.js +6 -6
  56. package/lib/services/durable-event-bus.js +8 -11
  57. package/lib/services/ecosystem-notify-client.d.ts +32 -0
  58. package/lib/services/ecosystem-notify-client.js +71 -0
  59. package/lib/services/env-redis.d.ts +4 -1
  60. package/lib/services/env-redis.js +32 -3
  61. package/lib/services/http-client.d.ts +19 -0
  62. package/lib/services/http-client.js +98 -19
  63. package/lib/services/index.d.ts +25 -24
  64. package/lib/services/index.js +25 -22
  65. package/lib/services/jwks-cache.js +5 -4
  66. package/lib/services/leader-lock.d.ts +22 -5
  67. package/lib/services/leader-lock.js +61 -6
  68. package/lib/services/quota.d.ts +9 -4
  69. package/lib/services/quota.js +34 -40
  70. package/lib/services/remote-audit-client.d.ts +28 -32
  71. package/lib/services/remote-audit-client.js +166 -49
  72. package/lib/services/retry-forever.js +5 -11
  73. package/lib/services/retry-strategy.d.ts +1 -1
  74. package/lib/services/retry-strategy.js +5 -4
  75. package/lib/services/scheduler.d.ts +8 -3
  76. package/lib/services/scheduler.js +17 -5
  77. package/lib/services/service-boot.d.ts +14 -13
  78. package/lib/services/service-boot.js +18 -15
  79. package/lib/services/service-keys.d.ts +1 -1
  80. package/lib/services/service-keys.js +12 -18
  81. package/lib/services/sse-ticket-store.d.ts +9 -1
  82. package/lib/services/sse-ticket-store.js +24 -9
  83. package/lib/services/system-notification.d.ts +27 -0
  84. package/lib/services/system-notification.js +50 -0
  85. package/lib/services/token-revocation.d.ts +50 -1
  86. package/lib/services/token-revocation.js +103 -3
  87. package/lib/types/audit-events.d.ts +6 -6
  88. package/lib/types/audit-events.js +1 -1
  89. package/lib/types/common.d.ts +32 -13
  90. package/lib/types/common.js +2 -1
  91. package/lib/types/ecosystem-notifications.d.ts +142 -0
  92. package/lib/types/ecosystem-notifications.js +210 -0
  93. package/lib/types/ecosystem.d.ts +77 -0
  94. package/lib/types/ecosystem.js +119 -0
  95. package/lib/types/error-codes.d.ts +81 -0
  96. package/lib/types/error-codes.js +108 -1
  97. package/lib/types/feature-flags.d.ts +21 -1
  98. package/lib/types/feature-flags.js +36 -2
  99. package/lib/types/index.d.ts +14 -9
  100. package/lib/types/index.js +15 -10
  101. package/lib/types/permissions.d.ts +46 -8
  102. package/lib/types/permissions.js +75 -12
  103. package/lib/types/plugin-catalog.d.ts +35 -0
  104. package/lib/types/plugin-catalog.js +39 -0
  105. package/lib/types/plugin-health.d.ts +102 -0
  106. package/lib/types/plugin-health.js +184 -0
  107. package/lib/types/quota-tiers.d.ts +15 -0
  108. package/lib/types/quota-tiers.js +23 -3
  109. package/lib/types/wire-vocabulary.d.ts +102 -0
  110. package/lib/types/wire-vocabulary.js +94 -0
  111. package/lib/utils/alias-resolver.js +2 -2
  112. package/lib/utils/audit.d.ts +5 -2
  113. package/lib/utils/audit.js +6 -3
  114. package/lib/utils/compliance-attributes.js +3 -4
  115. package/lib/utils/concurrency.d.ts +7 -0
  116. package/lib/utils/concurrency.js +13 -1
  117. package/lib/utils/env.d.ts +3 -4
  118. package/lib/utils/env.js +4 -5
  119. package/lib/utils/identity.d.ts +13 -4
  120. package/lib/utils/identity.js +18 -10
  121. package/lib/utils/index.d.ts +13 -10
  122. package/lib/utils/index.js +13 -10
  123. package/lib/utils/jwk.d.ts +4 -0
  124. package/lib/utils/jwk.js +13 -1
  125. package/lib/utils/logger.d.ts +1 -1
  126. package/lib/utils/logger.js +1 -1
  127. package/lib/utils/object.d.ts +11 -0
  128. package/lib/utils/object.js +24 -1
  129. package/lib/utils/params.d.ts +8 -22
  130. package/lib/utils/params.js +15 -43
  131. package/lib/utils/plugin-compliance.d.ts +98 -0
  132. package/lib/utils/plugin-compliance.js +78 -0
  133. package/lib/utils/proof-of-work.d.ts +69 -0
  134. package/lib/utils/proof-of-work.js +139 -0
  135. package/lib/utils/response.d.ts +16 -6
  136. package/lib/utils/response.js +18 -15
  137. package/lib/utils/retention.d.ts +17 -0
  138. package/lib/utils/retention.js +30 -0
  139. package/lib/utils/secret-encryption.d.ts +7 -7
  140. package/lib/utils/secret-encryption.js +9 -10
  141. package/lib/utils/secret-rotation.js +2 -2
  142. package/lib/utils/sensitive-patterns.js +4 -5
  143. package/lib/utils/service-registry.d.ts +15 -0
  144. package/lib/utils/service-registry.js +24 -0
  145. package/lib/utils/ssrf.d.ts +11 -2
  146. package/lib/utils/ssrf.js +112 -33
  147. package/lib/validation/ai-schemas.js +3 -2
  148. package/lib/validation/common-schemas.d.ts +0 -9
  149. package/lib/validation/common-schemas.js +1 -7
  150. package/lib/validation/dockerfile-static.d.ts +26 -0
  151. package/lib/validation/dockerfile-static.js +210 -0
  152. package/lib/validation/index.d.ts +13 -4
  153. package/lib/validation/index.js +14 -5
  154. package/lib/validation/message-schemas.js +6 -4
  155. package/lib/validation/pipeline-schemas.d.ts +8 -2
  156. package/lib/validation/pipeline-schemas.js +30 -4
  157. package/lib/validation/plugin-base-images.d.ts +20 -0
  158. package/lib/validation/plugin-base-images.js +17 -0
  159. package/lib/validation/plugin-catalog-detect.d.ts +86 -0
  160. package/lib/validation/plugin-catalog-detect.js +237 -0
  161. package/lib/validation/plugin-catalog-metadata.d.ts +141 -0
  162. package/lib/validation/plugin-catalog-metadata.js +162 -0
  163. package/lib/validation/plugin-heuristics.d.ts +41 -0
  164. package/lib/validation/plugin-heuristics.js +211 -0
  165. package/lib/validation/plugin-lint.d.ts +18 -0
  166. package/lib/validation/plugin-lint.js +136 -0
  167. package/lib/validation/plugin-name-confusable.d.ts +15 -0
  168. package/lib/validation/plugin-name-confusable.js +81 -0
  169. package/lib/validation/plugin-schemas.d.ts +40 -26
  170. package/lib/validation/plugin-schemas.js +26 -23
  171. package/lib/validation/plugin-spec-schema.d.ts +112 -0
  172. package/lib/validation/plugin-spec-schema.js +163 -0
  173. package/lib/validation/plugin-template-contract.d.ts +64 -0
  174. package/lib/validation/plugin-template-contract.js +113 -0
  175. package/package.json +69 -4
  176. package/lib/testing/mock-api-core.d.ts +0 -150
  177. package/lib/testing/mock-api-core.js +0 -246
  178. package/lib/testing/mock-drizzle.d.ts +0 -6
  179. package/lib/testing/mock-drizzle.js +0 -57
  180. package/lib/testing/route-coverage.d.ts +0 -64
  181. package/lib/testing/route-coverage.js +0 -183
  182. package/lib/testing/service-tokens.d.ts +0 -66
  183. package/lib/testing/service-tokens.js +0 -137
  184. package/lib/testing/tier-mock.d.ts +0 -44
  185. package/lib/testing/tier-mock.js +0 -65
  186. package/lib/testing/user-tokens.d.ts +0 -75
  187. package/lib/testing/user-tokens.js +0 -115
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The system tenant's well-known identity.
3
+ */
4
+ /**
5
+ * The system tenant's canonical org **id** — a fixed, well-known ObjectId (NOT
6
+ * the string 'system'). This is the single knob every service resolves the
7
+ * system tenant through; override via the `SYSTEM_ORG_ID` env for alternate
8
+ * installs. The system org's human identifier stays the slug/name 'system'
9
+ * (see {@link SYSTEM_ORG_SLUG}); only its `_id` is this ObjectId.
10
+ */
11
+ export declare const SYSTEM_ORG_ID: string;
12
+ /** The system org's well-known slug/name (the human identifier; its `_id` is {@link SYSTEM_ORG_ID}). */
13
+ export declare const SYSTEM_ORG_SLUG = "system";
14
+ /**
15
+ * Check if an orgId or orgName/slug matches the system org. Use this instead of
16
+ * comparing directly: the id is now an ObjectId ({@link SYSTEM_ORG_ID}) while the
17
+ * name/slug is 'system' ({@link SYSTEM_ORG_SLUG}), so the two are compared against
18
+ * their respective canonical values.
19
+ */
20
+ export declare function isSystemOrgId(orgId?: string, orgName?: string): boolean;
@@ -0,0 +1,25 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * The system tenant's well-known identity.
5
+ */
6
+ /**
7
+ * The system tenant's canonical org **id** — a fixed, well-known ObjectId (NOT
8
+ * the string 'system'). This is the single knob every service resolves the
9
+ * system tenant through; override via the `SYSTEM_ORG_ID` env for alternate
10
+ * installs. The system org's human identifier stays the slug/name 'system'
11
+ * (see {@link SYSTEM_ORG_SLUG}); only its `_id` is this ObjectId.
12
+ */
13
+ export const SYSTEM_ORG_ID = (process.env.SYSTEM_ORG_ID || '000000000000000000000001').toLowerCase();
14
+ /** The system org's well-known slug/name (the human identifier; its `_id` is {@link SYSTEM_ORG_ID}). */
15
+ export const SYSTEM_ORG_SLUG = 'system';
16
+ /**
17
+ * Check if an orgId or orgName/slug matches the system org. Use this instead of
18
+ * comparing directly: the id is now an ObjectId ({@link SYSTEM_ORG_ID}) while the
19
+ * name/slug is 'system' ({@link SYSTEM_ORG_SLUG}), so the two are compared against
20
+ * their respective canonical values.
21
+ */
22
+ export function isSystemOrgId(orgId, orgName) {
23
+ return orgId?.toLowerCase() === SYSTEM_ORG_ID || orgName?.toLowerCase() === SYSTEM_ORG_SLUG;
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLW9yZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL3N5c3RlbS1vcmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7R0FFRztBQUVIOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLDBCQUEwQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFFckcsd0dBQXdHO0FBQ3hHLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUM7QUFFeEM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQWMsRUFBRSxPQUFnQjtJQUM1RCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxhQUFhLElBQUksT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLGVBQWUsQ0FBQztBQUM5RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIHN5c3RlbSB0ZW5hbnQncyB3ZWxsLWtub3duIGlkZW50aXR5LlxuICovXG5cbi8qKlxuICogVGhlIHN5c3RlbSB0ZW5hbnQncyBjYW5vbmljYWwgb3JnICoqaWQqKiDigJQgYSBmaXhlZCwgd2VsbC1rbm93biBPYmplY3RJZCAoTk9UXG4gKiB0aGUgc3RyaW5nICdzeXN0ZW0nKS4gVGhpcyBpcyB0aGUgc2luZ2xlIGtub2IgZXZlcnkgc2VydmljZSByZXNvbHZlcyB0aGVcbiAqIHN5c3RlbSB0ZW5hbnQgdGhyb3VnaDsgb3ZlcnJpZGUgdmlhIHRoZSBgU1lTVEVNX09SR19JRGAgZW52IGZvciBhbHRlcm5hdGVcbiAqIGluc3RhbGxzLiBUaGUgc3lzdGVtIG9yZydzIGh1bWFuIGlkZW50aWZpZXIgc3RheXMgdGhlIHNsdWcvbmFtZSAnc3lzdGVtJ1xuICogKHNlZSB7QGxpbmsgU1lTVEVNX09SR19TTFVHfSk7IG9ubHkgaXRzIGBfaWRgIGlzIHRoaXMgT2JqZWN0SWQuXG4gKi9cbmV4cG9ydCBjb25zdCBTWVNURU1fT1JHX0lEID0gKHByb2Nlc3MuZW52LlNZU1RFTV9PUkdfSUQgfHwgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScpLnRvTG93ZXJDYXNlKCk7XG5cbi8qKiBUaGUgc3lzdGVtIG9yZydzIHdlbGwta25vd24gc2x1Zy9uYW1lICh0aGUgaHVtYW4gaWRlbnRpZmllcjsgaXRzIGBfaWRgIGlzIHtAbGluayBTWVNURU1fT1JHX0lEfSkuICovXG5leHBvcnQgY29uc3QgU1lTVEVNX09SR19TTFVHID0gJ3N5c3RlbSc7XG5cbi8qKlxuICogQ2hlY2sgaWYgYW4gb3JnSWQgb3Igb3JnTmFtZS9zbHVnIG1hdGNoZXMgdGhlIHN5c3RlbSBvcmcuIFVzZSB0aGlzIGluc3RlYWQgb2ZcbiAqIGNvbXBhcmluZyBkaXJlY3RseTogdGhlIGlkIGlzIG5vdyBhbiBPYmplY3RJZCAoe0BsaW5rIFNZU1RFTV9PUkdfSUR9KSB3aGlsZSB0aGVcbiAqIG5hbWUvc2x1ZyBpcyAnc3lzdGVtJyAoe0BsaW5rIFNZU1RFTV9PUkdfU0xVR30pLCBzbyB0aGUgdHdvIGFyZSBjb21wYXJlZCBhZ2FpbnN0XG4gKiB0aGVpciByZXNwZWN0aXZlIGNhbm9uaWNhbCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N5c3RlbU9yZ0lkKG9yZ0lkPzogc3RyaW5nLCBvcmdOYW1lPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBvcmdJZD8udG9Mb3dlckNhc2UoKSA9PT0gU1lTVEVNX09SR19JRCB8fCBvcmdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSBTWVNURU1fT1JHX1NMVUc7XG59XG5cbiJdfQ==
@@ -3,7 +3,71 @@
3
3
  import { registry } from '../registry.js';
4
4
  const tags = ['Plugins'];
5
5
  const auth = [{ bearerAuth: [] }];
6
+ const publicTags = ['Public plugin directory'];
6
7
  export function registerPluginRoutes() {
8
+ // -- Anonymous public directory. No auth; nginx serves
9
+ // these at /api/public/* with credentials stripped. Off → every route 404s.
10
+ registry.registerPath({
11
+ method: 'get',
12
+ path: '/public/plugins',
13
+ summary: 'Search the public plugin directory',
14
+ description: 'Anonymous search and browse over publicly listed plugins, with facets. Query: `q` (full text + '
15
+ + 'typo-tolerant name match), `category`, `tier` (official | verified | community | unverified), `license`, '
16
+ + '`computeType`, `needsSecrets` (true | false), `minRating` (1-5), `sort` (relevance | rating | installs | '
17
+ + 'updated | name), `cursor` (from `nextCursor`), `limit` (capped at 60). Rate limited per client IP; '
18
+ + 'publicly cacheable.',
19
+ tags: publicTags,
20
+ security: [],
21
+ responses: {
22
+ 200: { description: '`{ items, facets, total, nextCursor }`' },
23
+ 400: { description: 'Invalid query parameter' },
24
+ 404: { description: 'The public directory is turned off' },
25
+ 429: { description: 'Rate limited' },
26
+ },
27
+ });
28
+ registry.registerPath({
29
+ method: 'get',
30
+ path: '/public/plugins/categories',
31
+ summary: 'Public directory categories',
32
+ description: 'Every category with its live listing count and top listings.',
33
+ tags: publicTags,
34
+ security: [],
35
+ responses: { 200: { description: '`{ categories }`' }, 404: { description: 'The public directory is turned off' } },
36
+ });
37
+ registry.registerPath({
38
+ method: 'get',
39
+ path: '/public/plugins/sitemap',
40
+ summary: 'Public directory sitemap entries',
41
+ description: 'Every public listing\'s publisher, name and last update, for building `/sitemap.xml`.',
42
+ tags: publicTags,
43
+ security: [],
44
+ responses: { 200: { description: '`{ entries }`' }, 404: { description: 'The public directory is turned off' } },
45
+ });
46
+ registry.registerPath({
47
+ method: 'get',
48
+ path: '/public/plugins/{publisher}/{name}',
49
+ summary: 'Public plugin page data',
50
+ description: 'One public listing: card fields, README (sanitized HTML), versions, configuration contract, '
51
+ + 'supply-chain facts, advisories and rating distribution. Unknown, paused or suspended listings are 404.',
52
+ tags: publicTags,
53
+ security: [],
54
+ responses: { 200: { description: '`{ listing }`' }, 404: { description: 'Not a public listing' } },
55
+ });
56
+ registry.registerPath({
57
+ method: 'get',
58
+ path: '/public/plugins/{publisher}/{name}/versions/{version}/sbom',
59
+ summary: 'Download a listed version\'s SBOM',
60
+ description: 'The SPDX JSON SBOM of a listed, non-yanked version\'s public image, read from its signed '
61
+ + 'attestation. Anonymous; publicly cacheable.',
62
+ tags: publicTags,
63
+ security: [],
64
+ responses: {
65
+ 200: { description: 'SPDX JSON document (application/spdx+json, served as an attachment)' },
66
+ 404: { description: 'Not a listed version (unknown, yanked or paused)' },
67
+ 409: { description: 'IMAGE_VERIFICATION_FAILED — no SBOM attestation verified' },
68
+ 503: { description: 'Too many SBOM verifications in progress; retry after `Retry-After` seconds' },
69
+ },
70
+ });
7
71
  registry.registerPath({
8
72
  method: 'get',
9
73
  path: '/plugins',
@@ -19,11 +83,13 @@ export function registerPluginRoutes() {
19
83
  summary: 'Find a single plugin',
20
84
  description: 'Find a single plugin matching the query filters. For a plugin that runs on its own image, '
21
85
  + 'the image\'s cosign signature is verified first; `imageDigest` in the response is the verified digest '
22
- + 'pipelines pin CodeBuild to.',
86
+ + 'pipelines pin CodeBuild to. `name` matches exactly. A yanked version resolves only when pinned exactly '
87
+ + '(by `id` or an exact `version`). The answer is `{ plugin, warnings }`: `warnings` lists '
88
+ + '`PLUGIN_DEPRECATED` / `PLUGIN_YANKED` notices ({ code, message }) for the resolved version.',
23
89
  tags,
24
90
  security: auth,
25
91
  responses: {
26
- 200: { description: 'Plugin found' },
92
+ 200: { description: '`{ plugin, warnings }`' },
27
93
  404: { description: 'Not found' },
28
94
  409: { description: 'IMAGE_VERIFICATION_FAILED — the plugin image has no signed digest, or its signature did not verify' },
29
95
  },
@@ -33,11 +99,12 @@ export function registerPluginRoutes() {
33
99
  path: '/plugins/lookup',
34
100
  summary: 'Resolve a single plugin (synth)',
35
101
  description: 'Same as `GET /plugins/find` with the filter in the body — the endpoint pipeline synth resolves '
36
- + 'plugins through. Verifies the plugin image signature before returning it.',
102
+ + 'plugins through. Verifies the plugin image signature before returning it. Synth prints the answer\'s '
103
+ + '`warnings` (deprecated / yanked-but-pinned versions).',
37
104
  tags,
38
105
  security: auth,
39
106
  responses: {
40
- 200: { description: 'Plugin found' },
107
+ 200: { description: '`{ plugin, warnings }`' },
41
108
  400: { description: 'Missing or invalid filter' },
42
109
  404: { description: 'Not found' },
43
110
  409: { description: 'IMAGE_VERIFICATION_FAILED — the plugin image has no signed digest, or its signature did not verify' },
@@ -69,27 +136,83 @@ export function registerPluginRoutes() {
69
136
  method: 'post',
70
137
  path: '/plugins',
71
138
  summary: 'Upload a plugin',
72
- description: 'Upload a plugin ZIP file with spec. Builds Docker image and saves to database.',
139
+ description: 'Upload a plugin ZIP (multipart part `plugin`). Builds, signs and scans the image, then saves the '
140
+ + 'version. Optional parts: `visibility`, and `metadata` — a JSON object of catalog edits (summary, '
141
+ + 'description, displayName, category, keywords, license, homepageUrl, sourceUrl, documentationUrl, icon, '
142
+ + 'changelog, readme; `null` clears a field). When `metadata` is absent every value detected from the '
143
+ + 'package is accepted. Execution-contract keys in `metadata` are refused with 400.',
73
144
  tags,
74
145
  security: auth,
75
146
  responses: { 202: { description: 'Plugin build queued' }, 400: { description: 'Validation error' }, 429: { description: 'Quota exceeded' } },
76
147
  });
148
+ registry.registerPath({
149
+ method: 'post',
150
+ path: '/plugins/inspect',
151
+ summary: 'Inspect a plugin zip (dry run)',
152
+ description: 'Parses a plugin ZIP (multipart part `plugin`) without building or storing anything and returns '
153
+ + 'every descriptive catalog field detected from the package: `{ plugin, fields: [{ field, value, source, '
154
+ + 'error }] }`. `source` is spec | readme | dockerfile | derived (or null when nothing was found); a value '
155
+ + 'that fails validation comes back blank with its `error`. Same zip bounds as upload; rate limited; '
156
+ + 'requires plugins:write.',
157
+ tags,
158
+ security: auth,
159
+ responses: { 200: { description: 'Detected catalog fields' }, 400: { description: 'Invalid zip or spec' }, 429: { description: 'Rate limited' } },
160
+ });
77
161
  registry.registerPath({
78
162
  method: 'put',
79
163
  path: '/plugins/{id}',
80
164
  summary: 'Update a plugin',
165
+ description: 'Edit a version\'s descriptive catalog fields (summary, description, displayName, category, '
166
+ + 'keywords, license, links, icon, changelog, readme) and its operational flags (isActive, isDefault, '
167
+ + 'visibility, lifecycle, criticality, labels, links, owner). Execution-contract keys (commands, env, '
168
+ + 'secrets, computeType, …) are refused with 400: they change only with a new version. A version that is '
169
+ + 'frozen by a publish request or listed has its catalog details frozen (409).',
81
170
  tags,
82
171
  security: auth,
83
- responses: { 200: { description: 'Plugin updated' }, 404: { description: 'Not found' } },
172
+ responses: {
173
+ 200: { description: 'Plugin updated' },
174
+ 400: { description: 'Validation error, or an execution-contract key' },
175
+ 404: { description: 'Not found' },
176
+ 409: { description: 'PLUGIN_VERSION_FROZEN — catalog details are frozen with the version' },
177
+ },
84
178
  });
85
179
  registry.registerPath({
86
180
  method: 'delete',
87
181
  path: '/plugins/{id}',
88
- summary: 'Delete a plugin',
89
- description: 'Soft-delete a plugin by setting isActive to false.',
182
+ summary: 'Delete a plugin version',
183
+ description: 'Soft-delete a version. A version used by the org\'s pipelines or published to a listing is refused '
184
+ + 'unless `?force=true`, which requires a step-up token (`X-Step-Up-Token`). A version referenced by a pending '
185
+ + 'publish request is never deletable. Deleting the default promotes the next default; the version\'s '
186
+ + '`plugins` quota slot is refunded while its quota period is current.',
187
+ tags,
188
+ security: auth,
189
+ responses: {
190
+ 200: { description: 'Plugin deleted (`promotedDefault` when a new default was chosen)' },
191
+ 401: { description: 'STEP_UP_REQUIRED — force delete without a step-up token' },
192
+ 404: { description: 'Not found' },
193
+ 409: { description: 'PLUGIN_VERSION_IN_USE / PLUGIN_VERSION_FROZEN' },
194
+ },
195
+ });
196
+ registry.registerPath({
197
+ method: 'post',
198
+ path: '/plugins/{id}/deprecate',
199
+ summary: 'Deprecate a plugin version',
200
+ description: 'Body `{ deprecated?: boolean (default true), message?: string }`. A deprecated version keeps '
201
+ + 'resolving with a warning, and is no longer offered by AI plugin selection.',
202
+ tags,
203
+ security: auth,
204
+ responses: { 200: { description: 'Updated version' }, 404: { description: 'Not found' } },
205
+ });
206
+ registry.registerPath({
207
+ method: 'post',
208
+ path: '/plugins/{id}/yank',
209
+ summary: 'Yank a plugin version',
210
+ description: 'Body `{ reason }`. A yanked version stops resolving for ranges, `latest` and the default; an '
211
+ + 'exact pin still resolves with a warning. Yanking the default promotes the next one. A version published '
212
+ + 'to the ecosystem is yanked through a publish request instead (409).',
90
213
  tags,
91
214
  security: auth,
92
- responses: { 200: { description: 'Plugin deleted' }, 404: { description: 'Not found' } },
215
+ responses: { 200: { description: 'Yanked version (`promotedDefault` when a new default was chosen)' }, 404: { description: 'Not found' }, 409: { description: 'PLUGIN_VERSION_FROZEN' } },
93
216
  });
94
217
  registry.registerPath({
95
218
  method: 'get',
@@ -128,4 +251,4 @@ export function registerPluginRoutes() {
128
251
  responses: { 202: { description: 'Plugin build queued' }, 400: { description: 'Validation error' }, 403: { description: 'Admin required' }, 429: { description: 'Quota exceeded' } },
129
252
  });
130
253
  }
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJvdXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vcGVuYXBpL3JvdXRlcy9wbHVnaW4tcm91dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE1BQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRWxDLE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLElBQUksRUFBRSxVQUFVO1FBQ2hCLE9BQU8sRUFBRSxjQUFjO1FBQ3ZCLFdBQVcsRUFBRSx1REFBdUQ7UUFDcEUsSUFBSTtRQUNKLFFBQVEsRUFBRSxJQUFJO1FBQ2QsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLDJCQUEyQixFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFO0tBQ3ZHLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLEtBQUs7UUFDYixJQUFJLEVBQUUsZUFBZTtRQUNyQixPQUFPLEVBQUUsc0JBQXNCO1FBQy9CLFdBQVcsRUFBRSw0RkFBNEY7Y0FDckcsd0dBQXdHO2NBQ3hHLDZCQUE2QjtRQUNqQyxJQUFJO1FBQ0osUUFBUSxFQUFFLElBQUk7UUFDZCxTQUFTLEVBQUU7WUFDVCxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFO1lBQ3BDLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUU7WUFDakMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLG9HQUFvRyxFQUFFO1NB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RUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRTtLQUNyTCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJlZ2lzdHJ5IH0gZnJvbSAnLi4vcmVnaXN0cnkuanMnO1xuXG5jb25zdCB0YWdzID0gWydQbHVnaW5zJ107XG5jb25zdCBhdXRoID0gW3sgYmVhcmVyQXV0aDogW10gfV07XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclBsdWdpblJvdXRlcygpOiB2b2lkIHtcbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcGx1Z2lucycsXG4gICAgc3VtbWFyeTogJ0xpc3QgcGx1Z2lucycsXG4gICAgZGVzY3JpcHRpb246ICdMaXN0IHBsdWdpbnMgd2l0aCBwYWdpbmF0aW9uLCBmaWx0ZXJpbmcsIGFuZCBzb3J0aW5nLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnUGFnaW5hdGVkIGxpc3Qgb2YgcGx1Z2lucycgfSwgNDAxOiB7IGRlc2NyaXB0aW9uOiAnVW5hdXRob3JpemVkJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAnZ2V0JyxcbiAgICBwYXRoOiAnL3BsdWdpbnMvZmluZCcsXG4gICAgc3VtbWFyeTogJ0ZpbmQgYSBzaW5nbGUgcGx1Z2luJyxcbiAgICBkZXNjcmlwdGlvbjogJ0ZpbmQgYSBzaW5nbGUgcGx1Z2luIG1hdGNoaW5nIHRoZSBxdWVyeSBmaWx0ZXJzLiBGb3IgYSBwbHVnaW4gdGhhdCBydW5zIG9uIGl0cyBvd24gaW1hZ2UsICdcbiAgICAgICsgJ3RoZSBpbWFnZVxcJ3MgY29zaWduIHNpZ25hdHVyZSBpcyB2ZXJpZmllZCBmaXJzdDsgYGltYWdlRGlnZXN0YCBpbiB0aGUgcmVzcG9uc2UgaXMgdGhlIHZlcmlmaWVkIGRpZ2VzdCAnXG4gICAgICArICdwaXBlbGluZXMgcGluIENvZGVCdWlsZCB0by4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAyMDA6IHsgZGVzY3JpcHRpb246ICdQbHVnaW4gZm91bmQnIH0sXG4gICAgICA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0sXG4gICAgICA0MDk6IHsgZGVzY3JpcHRpb246ICdJTUFHRV9WRVJJRklDQVRJT05fRkFJTEVEIOKAlCB0aGUgcGx1Z2luIGltYWdlIGhhcyBubyBzaWduZWQgZGlnZXN0LCBvciBpdHMgc2lnbmF0dXJlIGRpZCBub3QgdmVyaWZ5JyB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAncG9zdCcsXG4gICAgcGF0aDogJy9wbHVnaW5zL2xvb2t1cCcsXG4gICAgc3VtbWFyeTogJ1Jlc29sdmUgYSBzaW5nbGUgcGx1Z2luIChzeW50aCknLFxuICAgIGRlc2NyaXB0aW9uOiAnU2FtZSBhcyBgR0VUIC9wbHVnaW5zL2ZpbmRgIHdpdGggdGhlIGZpbHRlciBpbiB0aGUgYm9keSDigJQgdGhlIGVuZHBvaW50IHBpcGVsaW5lIHN5bnRoIHJlc29sdmVzICdcbiAgICAgICsgJ3BsdWdpbnMgdGhyb3VnaC4gVmVyaWZpZXMgdGhlIHBsdWdpbiBpbWFnZSBzaWduYXR1cmUgYmVmb3JlIHJldHVybmluZyBpdC4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAyMDA6IHsgZGVzY3JpcHRpb246ICdQbHVnaW4gZm91bmQnIH0sXG4gICAgICA0MDA6IHsgZGVzY3JpcHRpb246ICdNaXNzaW5nIG9yIGludmFsaWQgZmlsdGVyJyB9LFxuICAgICAgNDA0OiB7IGRlc2NyaXB0aW9uOiAnTm90IGZvdW5kJyB9LFxuICAgICAgNDA5OiB7IGRlc2NyaXB0aW9uOiAnSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRCDigJQgdGhlIHBsdWdpbiBpbWFnZSBoYXMgbm8gc2lnbmVkIGRpZ2VzdCwgb3IgaXRzIHNpZ25hdHVyZSBkaWQgbm90IHZlcmlmeScgfSxcbiAgICB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9wbHVnaW5zL3tpZH0vc2JvbScsXG4gICAgc3VtbWFyeTogJ0Rvd25sb2FkIGEgcGx1Z2luIGltYWdlIFNCT00nLFxuICAgIGRlc2NyaXB0aW9uOiAnVGhlIFNQRFggSlNPTiBTQk9NIG9mIHRoZSBwbHVnaW4gaW1hZ2UsIHJlYWQgZnJvbSBpdHMgc2lnbmVkIGluLXRvdG8gYXR0ZXN0YXRpb24g4oCUIHNvIHRoZSAnXG4gICAgICArICdkb2N1bWVudCByZXR1cm5lZCBpcyBleGFjdGx5IHdoYXQgdGhlIHBsYXRmb3JtIGdlbmVyYXRlZCBhbmQgc2lnbmVkIGF0IGJ1aWxkIHRpbWUuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgMjAwOiB7IGRlc2NyaXB0aW9uOiAnU1BEWCBKU09OIGRvY3VtZW50IChhcHBsaWNhdGlvbi9zcGR4K2pzb24sIHNlcnZlZCBhcyBhbiBhdHRhY2htZW50KScgfSxcbiAgICAgIDQwNDogeyBkZXNjcmlwdGlvbjogJ1BsdWdpbiBub3QgZm91bmQsIG9yIHRoZSBwbHVnaW4gaGFzIG5vIGltYWdlJyB9LFxuICAgICAgNDA5OiB7IGRlc2NyaXB0aW9uOiAnSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRCDigJQgbm8gU0JPTSBhdHRlc3RhdGlvbiB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBwbHVnaW4tc2lnbmluZyBrZXknIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcGx1Z2lucy97aWR9JyxcbiAgICBzdW1tYXJ5OiAnR2V0IHBsdWdpbiBieSBJRCcsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnUGx1Z2luIGRldGFpbHMnIH0sIDQwNDogeyBkZXNjcmlwdGlvbjogJ05vdCBmb3VuZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIHBhdGg6ICcvcGx1Z2lucycsXG4gICAgc3VtbWFyeTogJ1VwbG9hZCBhIHBsdWdpbicsXG4gICAgZGVzY3JpcHRpb246ICdVcGxvYWQgYSBwbHVnaW4gWklQIGZpbGUgd2l0aCBzcGVjLiBCdWlsZHMgRG9ja2VyIGltYWdlIGFuZCBzYXZlcyB0byBkYXRhYmFzZS4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMjogeyBkZXNjcmlwdGlvbjogJ1BsdWdpbiBidWlsZCBxdWV1ZWQnIH0sIDQwMDogeyBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRpb24gZXJyb3InIH0sIDQyOTogeyBkZXNjcmlwdGlvbjogJ1F1b3RhIGV4Y2VlZGVkJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAncHV0JyxcbiAgICBwYXRoOiAnL3BsdWdpbnMve2lkfScsXG4gICAgc3VtbWFyeTogJ1VwZGF0ZSBhIHBsdWdpbicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnUGx1Z2luIHVwZGF0ZWQnIH0sIDQwNDogeyBkZXNjcmlwdGlvbjogJ05vdCBmb3VuZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2RlbGV0ZScsXG4gICAgcGF0aDogJy9wbHVnaW5zL3tpZH0nLFxuICAgIHN1bW1hcnk6ICdEZWxldGUgYSBwbHVnaW4nLFxuICAgIGRlc2NyaXB0aW9uOiAnU29mdC1kZWxldGUgYSBwbHVnaW4gYnkgc2V0dGluZyBpc0FjdGl2ZSB0byBmYWxzZS4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ1BsdWdpbiBkZWxldGVkJyB9LCA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcGx1Z2lucy9wcm92aWRlcnMnLFxuICAgIHN1bW1hcnk6ICdMaXN0IEFJIHByb3ZpZGVycycsXG4gICAgZGVzY3JpcHRpb246ICdMaXN0IEFJIHByb3ZpZGVycyBjb25maWd1cmVkIGZvciBwbHVnaW4gZ2VuZXJhdGlvbi4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ0xpc3Qgb2YgYXZhaWxhYmxlIEFJIHByb3ZpZGVycyB3aXRoIG1vZGVscycgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIHBhdGg6ICcvcGx1Z2lucy9nZW5lcmF0ZScsXG4gICAgc3VtbWFyeTogJ0dlbmVyYXRlIHBsdWdpbiB2aWEgQUknLFxuICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgYSBwbHVnaW4gY29uZmlndXJhdGlvbiBhbmQgRG9ja2VyZmlsZSBmcm9tIGEgbmF0dXJhbCBsYW5ndWFnZSBwcm9tcHQuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdHZW5lcmF0ZWQgcGx1Z2luIGNvbmZpZ3VyYXRpb24gYW5kIERvY2tlcmZpbGUnIH0sIDQwMDogeyBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRpb24gZXJyb3InIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBwYXRoOiAnL3BsdWdpbnMvZ2VuZXJhdGUvc3RyZWFtJyxcbiAgICBzdW1tYXJ5OiAnU3RyZWFtIHBsdWdpbiBnZW5lcmF0aW9uIHZpYSBBSScsXG4gICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSBwbHVnaW4gY29uZmlndXJhdGlvbiBmcm9tIGEgbmF0dXJhbCBsYW5ndWFnZSBwcm9tcHQuIFN0cmVhbXMgcGFydGlhbCByZXN1bHRzIGFzIFNTRSBldmVudHMuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdTU0UgZXZlbnQgc3RyZWFtIG9mIHBhcnRpYWwgcGx1Z2luIG9iamVjdHMnIH0sIDQwMDogeyBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRpb24gZXJyb3InIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBwYXRoOiAnL3BsdWdpbnMvZGVwbG95LWdlbmVyYXRlZCcsXG4gICAgc3VtbWFyeTogJ0RlcGxveSBBSS1nZW5lcmF0ZWQgcGx1Z2luJyxcbiAgICBkZXNjcmlwdGlvbjogJ0J1aWxkIERvY2tlciBpbWFnZSBmcm9tIEFJLWdlbmVyYXRlZCBEb2NrZXJmaWxlIGFuZCBzYXZlIHBsdWdpbiB0byBkYXRhYmFzZS4gUmVxdWlyZXMgYWRtaW4uJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDI6IHsgZGVzY3JpcHRpb246ICdQbHVnaW4gYnVpbGQgcXVldWVkJyB9LCA0MDA6IHsgZGVzY3JpcHRpb246ICdWYWxpZGF0aW9uIGVycm9yJyB9LCA0MDM6IHsgZGVzY3JpcHRpb246ICdBZG1pbiByZXF1aXJlZCcgfSwgNDI5OiB7IGRlc2NyaXB0aW9uOiAnUXVvdGEgZXhjZWVkZWQnIH0gfSxcbiAgfSk7XG59XG4iXX0=
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJvdXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vcGVuYXBpL3JvdXRlcy9wbHVnaW4tcm91dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE1BQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRWxDLE1BQU0sVUFBVSxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUUvQyxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLHVEQUF1RDtJQUN2RCwrRUFBK0U7SUFDL0UsUUFBUSxDQUFDLFlBQVksQ0FBQztRQUNwQixNQUFNLEVBQUUsS0FBSztRQUNiLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsT0FBTyxFQUFFLG9DQUFvQztRQUM3QyxXQUFXLEVBQUUsaUdBQWlHO2NBQzFHLDJHQUEyRztjQUMzRywyR0FBMkc7Y0FDM0cscUdBQXFHO2NBQ3JHLHFCQUFxQjtRQUN6QixJQUFJLEVBQUUsVUFBVTtRQUNoQixRQUFRLEVBQUUsRUFBRTtRQUNaLFNBQVMsRUFBRTtZQUNULEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSx3Q0FBd0MsRUFBRTtZQUM5RCxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUseUJBQXlCLEVBQUU7WUFDL0MsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLG9DQUFvQyxFQUFFO1lBQzFELEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUU7U0FDckM7S0FDRixDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLDRCQUE0QjtRQUNsQyxPQUFPLEVBQUUsNkJB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UUFDSixRQUFRLEVBQUUsSUFBSTtRQUNkLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSw0Q0FBNEMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxFQUFFO0tBQzVILENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDcEIsTUFBTSxFQUFFLE1BQU07UUFDZCxJQUFJLEVBQUUsMkJBQTJCO1FBQ2pDLE9BQU8sRUFBRSw0QkFBNEI7UUFDckMsV0FBVyxFQUFFLDhGQUE4RjtRQUMzRyxJQUFJO1FBQ0osUUFBUSxFQUFFLElBQUk7UUFDZCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRTtLQUNyTCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJlZ2lzdHJ5IH0gZnJvbSAnLi4vcmVnaXN0cnkuanMnO1xuXG5jb25zdCB0YWdzID0gWydQbHVnaW5zJ107XG5jb25zdCBhdXRoID0gW3sgYmVhcmVyQXV0aDogW10gfV07XG5cbmNvbnN0IHB1YmxpY1RhZ3MgPSBbJ1B1YmxpYyBwbHVnaW4gZGlyZWN0b3J5J107XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclBsdWdpblJvdXRlcygpOiB2b2lkIHtcbiAgLy8gLS0gQW5vbnltb3VzIHB1YmxpYyBkaXJlY3RvcnkuIE5vIGF1dGg7IG5naW54IHNlcnZlc1xuICAvLyAgICB0aGVzZSBhdCAvYXBpL3B1YmxpYy8qIHdpdGggY3JlZGVudGlhbHMgc3RyaXBwZWQuIE9mZiDihpIgZXZlcnkgcm91dGUgNDA0cy5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcHVibGljL3BsdWdpbnMnLFxuICAgIHN1bW1hcnk6ICdTZWFyY2ggdGhlIHB1YmxpYyBwbHVnaW4gZGlyZWN0b3J5JyxcbiAgICBkZXNjcmlwdGlvbjogJ0Fub255bW91cyBzZWFyY2ggYW5kIGJyb3dzZSBvdmVyIHB1YmxpY2x5IGxpc3RlZCBwbHVnaW5zLCB3aXRoIGZhY2V0cy4gUXVlcnk6IGBxYCAoZnVsbCB0ZXh0ICsgJ1xuICAgICAgKyAndHlwby10b2xlcmFudCBuYW1lIG1hdGNoKSwgYGNhdGVnb3J5YCwgYHRpZXJgIChvZmZpY2lhbCB8IHZlcmlmaWVkIHwgY29tbXVuaXR5IHwgdW52ZXJpZmllZCksIGBsaWNlbnNlYCwgJ1xuICAgICAgKyAnYGNvbXB1dGVUeXBlYCwgYG5lZWRzU2VjcmV0c2AgKHRydWUgfCBmYWxzZSksIGBtaW5SYXRpbmdgICgxLTUpLCBgc29ydGAgKHJlbGV2YW5jZSB8IHJhdGluZyB8IGluc3RhbGxzIHwgJ1xuICAgICAgKyAndXBkYXRlZCB8IG5hbWUpLCBgY3Vyc29yYCAoZnJvbSBgbmV4dEN1cnNvcmApLCBgbGltaXRgIChjYXBwZWQgYXQgNjApLiBSYXRlIGxpbWl0ZWQgcGVyIGNsaWVudCBJUDsgJ1xuICAgICAgKyAncHVibGljbHkgY2FjaGVhYmxlLicsXG4gICAgdGFnczogcHVibGljVGFncyxcbiAgICBzZWN1cml0eTogW10sXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAyMDA6IHsgZGVzY3JpcHRpb246ICdgeyBpdGVtcywgZmFjZXRzLCB0b3RhbCwgbmV4dEN1cnNvciB9YCcgfSxcbiAgICAgIDQwMDogeyBkZXNjcmlwdGlvbjogJ0ludmFsaWQgcXVlcnkgcGFyYW1ldGVyJyB9LFxuICAgICAgNDA0OiB7IGRlc2NyaXB0aW9uOiAnVGhlIHB1YmxpYyBkaXJlY3RvcnkgaXMgdHVybmVkIG9mZicgfSxcbiAgICAgIDQyOTogeyBkZXNjcmlwdGlvbjogJ1JhdGUgbGltaXRlZCcgfSxcbiAgICB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9wdWJsaWMvcGx1Z2lucy9jYXRlZ29yaWVzJyxcbiAgICBzdW1tYXJ5OiAnUHVibGljIGRpcmVjdG9yeSBjYXRlZ29yaWVzJyxcbiAgICBkZXNjcmlwdGlvbjogJ0V2ZXJ5IGNhdGVnb3J5IHdpdGggaXRzIGxpdmUgbGlzdGluZyBjb3VudCBhbmQgdG9wIGxpc3RpbmdzLicsXG4gICAgdGFnczogcHVibGljVGFncyxcbiAgICBzZWN1cml0eTogW10sXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ2B7IGNhdGVnb3JpZXMgfWAnIH0sIDQwNDogeyBkZXNjcmlwdGlvbjogJ1RoZSBwdWJsaWMgZGlyZWN0b3J5IGlzIHR1cm5lZCBvZmYnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcHVibGljL3BsdWdpbnMvc2l0ZW1hcCcsXG4gICAgc3VtbWFyeTogJ1B1YmxpYyBkaXJlY3Rvcnkgc2l0ZW1hcCBlbnRyaWVzJyxcbiAgICBkZXNjcmlwdGlvbjogJ0V2ZXJ5IHB1YmxpYyBsaXN0aW5nXFwncyBwdWJsaXNoZXIsIG5hbWUgYW5kIGxhc3QgdXBkYXRlLCBmb3IgYnVpbGRpbmcgYC9zaXRlbWFwLnhtbGAuJyxcbiAgICB0YWdzOiBwdWJsaWNUYWdzLFxuICAgIHNlY3VyaXR5OiBbXSxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnYHsgZW50cmllcyB9YCcgfSwgNDA0OiB7IGRlc2NyaXB0aW9uOiAnVGhlIHB1YmxpYyBkaXJlY3RvcnkgaXMgdHVybmVkIG9mZicgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9wdWJsaWMvcGx1Z2lucy97cHVibGlzaGVyfS97bmFtZX0nLFxuICAgIHN1bW1hcnk6ICdQdWJsaWMgcGx1Z2luIHBhZ2UgZGF0YScsXG4gICAgZGVzY3JpcHRpb246ICdPbmUgcHVibGljIGxpc3Rpbmc6IGNhcmQgZmllbGRzLCBSRUFETUUgKHNhbml0aXplZCBIVE1MKSwgdmVyc2lvbnMsIGNvbmZpZ3VyYXRpb24gY29udHJhY3QsICdcbiAgICAgICsgJ3N1cHBseS1jaGFpbiBmYWN0cywgYWR2aXNvcmllcyBhbmQgcmF0aW5nIGRpc3RyaWJ1dGlvbi4gVW5rbm93biwgcGF1c2VkIG9yIHN1c3BlbmRlZCBsaXN0aW5ncyBhcmUgNDA0LicsXG4gICAgdGFnczogcHVibGljVGFncyxcbiAgICBzZWN1cml0eTogW10sXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ2B7IGxpc3RpbmcgfWAnIH0sIDQwNDogeyBkZXNjcmlwdGlvbjogJ05vdCBhIHB1YmxpYyBsaXN0aW5nJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAnZ2V0JyxcbiAgICBwYXRoOiAnL3B1YmxpYy9wbHVnaW5zL3twdWJsaXNoZXJ9L3tuYW1lfS92ZXJzaW9ucy97dmVyc2lvbn0vc2JvbScsXG4gICAgc3VtbWFyeTogJ0Rvd25sb2FkIGEgbGlzdGVkIHZlcnNpb25cXCdzIFNCT00nLFxuICAgIGRlc2NyaXB0aW9uOiAnVGhlIFNQRFggSlNPTiBTQk9NIG9mIGEgbGlzdGVkLCBub24teWFua2VkIHZlcnNpb25cXCdzIHB1YmxpYyBpbWFnZSwgcmVhZCBmcm9tIGl0cyBzaWduZWQgJ1xuICAgICAgKyAnYXR0ZXN0YXRpb24uIEFub255bW91czsgcHVibGljbHkgY2FjaGVhYmxlLicsXG4gICAgdGFnczogcHVibGljVGFncyxcbiAgICBzZWN1cml0eTogW10sXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAyMDA6IHsgZGVzY3JpcHRpb246ICdTUERYIEpTT04gZG9jdW1lbnQgKGFwcGxpY2F0aW9uL3NwZHgranNvbiwgc2VydmVkIGFzIGFuIGF0dGFjaG1lbnQpJyB9LFxuICAgICAgNDA0OiB7IGRlc2NyaXB0aW9uOiAnTm90IGEgbGlzdGVkIHZlcnNpb24gKHVua25vd24sIHlhbmtlZCBvciBwYXVzZWQpJyB9LFxuICAgICAgNDA5OiB7IGRlc2NyaXB0aW9uOiAnSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRCDigJQgbm8gU0JPTSBhdHRlc3RhdGlvbiB2ZXJpZmllZCcgfSxcbiAgICAgIDUwMzogeyBkZXNjcmlwdGlvbjogJ1RvbyBtYW55IFNCT00gdmVyaWZpY2F0aW9ucyBpbiBwcm9ncmVzczsgcmV0cnkgYWZ0ZXIgYFJldHJ5LUFmdGVyYCBzZWNvbmRzJyB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAnZ2V0JyxcbiAgICBwYXRoOiAnL3BsdWdpbnMnLFxuICAgIHN1bW1hcnk6ICdMaXN0IHBsdWdpbnMnLFxuICAgIGRlc2NyaXB0aW9uOiAnTGlzdCBwbHVnaW5zIHdpdGggcGFnaW5hdGlvbiwgZmlsdGVyaW5nLCBhbmQgc29ydGluZy4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ1BhZ2luYXRlZCBsaXN0IG9mIHBsdWdpbnMnIH0sIDQwMTogeyBkZXNjcmlwdGlvbjogJ1VuYXV0aG9yaXplZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9wbHVnaW5zL2ZpbmQnLFxuICAgIHN1bW1hcnk6ICdGaW5kIGEgc2luZ2xlIHBsdWdpbicsXG4gICAgZGVzY3JpcHRpb246ICdGaW5kIGEgc2luZ2xlIHBsdWdpbiBtYXRjaGluZyB0aGUgcXVlcnkgZmlsdGVycy4gRm9yIGEgcGx1Z2luIHRoYXQgcnVucyBvbiBpdHMgb3duIGltYWdlLCAnXG4gICAgICArICd0aGUgaW1hZ2VcXCdzIGNvc2lnbiBzaWduYXR1cmUgaXMgdmVyaWZpZWQgZmlyc3Q7IGBpbWFnZURpZ2VzdGAgaW4gdGhlIHJlc3BvbnNlIGlzIHRoZSB2ZXJpZmllZCBkaWdlc3QgJ1xuICAgICAgKyAncGlwZWxpbmVzIHBpbiBDb2RlQnVpbGQgdG8uIGBuYW1lYCBtYXRjaGVzIGV4YWN0bHkuIEEgeWFua2VkIHZlcnNpb24gcmVzb2x2ZXMgb25seSB3aGVuIHBpbm5lZCBleGFjdGx5ICdcbiAgICAgICsgJyhieSBgaWRgIG9yIGFuIGV4YWN0IGB2ZXJzaW9uYCkuIFRoZSBhbnN3ZXIgaXMgYHsgcGx1Z2luLCB3YXJuaW5ncyB9YDogYHdhcm5pbmdzYCBsaXN0cyAnXG4gICAgICArICdgUExVR0lOX0RFUFJFQ0FURURgIC8gYFBMVUdJTl9ZQU5LRURgIG5vdGljZXMgKHsgY29kZSwgbWVzc2FnZSB9KSBmb3IgdGhlIHJlc29sdmVkIHZlcnNpb24uJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgMjAwOiB7IGRlc2NyaXB0aW9uOiAnYHsgcGx1Z2luLCB3YXJuaW5ncyB9YCcgfSxcbiAgICAgIDQwNDogeyBkZXNjcmlwdGlvbjogJ05vdCBmb3VuZCcgfSxcbiAgICAgIDQwOTogeyBkZXNjcmlwdGlvbjogJ0lNQUdFX1ZFUklGSUNBVElPTl9GQUlMRUQg4oCUIHRoZSBwbHVnaW4gaW1hZ2UgaGFzIG5vIHNpZ25lZCBkaWdlc3QsIG9yIGl0cyBzaWduYXR1cmUgZGlkIG5vdCB2ZXJpZnknIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBwYXRoOiAnL3BsdWdpbnMvbG9va3VwJyxcbiAgICBzdW1tYXJ5OiAnUmVzb2x2ZSBhIHNpbmdsZSBwbHVnaW4gKHN5bnRoKScsXG4gICAgZGVzY3JpcHRpb246ICdTYW1lIGFzIGBHRVQgL3BsdWdpbnMvZmluZGAgd2l0aCB0aGUgZmlsdGVyIGluIHRoZSBib2R5IOKAlCB0aGUgZW5kcG9pbnQgcGlwZWxpbmUgc3ludGggcmVzb2x2ZXMgJ1xuICAgICAgKyAncGx1Z2lucyB0aHJvdWdoLiBWZXJpZmllcyB0aGUgcGx1Z2luIGltYWdlIHNpZ25hdHVyZSBiZWZvcmUgcmV0dXJuaW5nIGl0LiBTeW50aCBwcmludHMgdGhlIGFuc3dlclxcJ3MgJ1xuICAgICAgKyAnYHdhcm5pbmdzYCAoZGVwcmVjYXRlZCAvIHlhbmtlZC1idXQtcGlubmVkIHZlcnNpb25zKS4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAyMDA6IHsgZGVzY3JpcHRpb246ICdgeyBwbHVnaW4sIHdhcm5pbmdzIH1gJyB9LFxuICAgICAgNDAwOiB7IGRlc2NyaXB0aW9uOiAnTWlzc2luZyBvciBpbnZhbGlkIGZpbHRlcicgfSxcbiAgICAgIDQwNDogeyBkZXNjcmlwdGlvbjogJ05vdCBmb3VuZCcgfSxcbiAgICAgIDQwOTogeyBkZXNjcmlwdGlvbjogJ0lNQUdFX1ZFUklGSUNBVElPTl9GQUlMRUQg4oCUIHRoZSBwbHVnaW4gaW1hZ2UgaGFzIG5vIHNpZ25lZCBkaWdlc3QsIG9yIGl0cyBzaWduYXR1cmUgZGlkIG5vdCB2ZXJpZnknIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdnZXQnLFxuICAgIHBhdGg6ICcvcGx1Z2lucy97aWR9L3Nib20nLFxuICAgIHN1bW1hcnk6ICdEb3dubG9hZCBhIHBsdWdpbiBpbWFnZSBTQk9NJyxcbiAgICBkZXNjcmlwdGlvbjogJ1RoZSBTUERYIEpTT04gU0JPTSBvZiB0aGUgcGx1Z2luIGltYWdlLCByZWFkIGZyb20gaXRzIHNpZ25lZCBpbi10b3RvIGF0dGVzdGF0aW9uIOKAlCBzbyB0aGUgJ1xuICAgICAgKyAnZG9jdW1lbnQgcmV0dXJuZWQgaXMgZXhhY3RseSB3aGF0IHRoZSBwbGF0Zm9ybSBnZW5lcmF0ZWQgYW5kIHNpZ25lZCBhdCBidWlsZCB0aW1lLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHtcbiAgICAgIDIwMDogeyBkZXNjcmlwdGlvbjogJ1NQRFggSlNPTiBkb2N1bWVudCAoYXBwbGljYXRpb24vc3BkeCtqc29uLCBzZXJ2ZWQgYXMgYW4gYXR0YWNobWVudCknIH0sXG4gICAgICA0MDQ6IHsgZGVzY3JpcHRpb246ICdQbHVnaW4gbm90IGZvdW5kLCBvciB0aGUgcGx1Z2luIGhhcyBubyBpbWFnZScgfSxcbiAgICAgIDQwOTogeyBkZXNjcmlwdGlvbjogJ0lNQUdFX1ZFUklGSUNBVElPTl9GQUlMRUQg4oCUIG5vIFNCT00gYXR0ZXN0YXRpb24gdmVyaWZpZWQgYWdhaW5zdCB0aGUgcGx1Z2luLXNpZ25pbmcga2V5JyB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAnZ2V0JyxcbiAgICBwYXRoOiAnL3BsdWdpbnMve2lkfScsXG4gICAgc3VtbWFyeTogJ0dldCBwbHVnaW4gYnkgSUQnLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ1BsdWdpbiBkZXRhaWxzJyB9LCA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBwYXRoOiAnL3BsdWdpbnMnLFxuICAgIHN1bW1hcnk6ICdVcGxvYWQgYSBwbHVnaW4nLFxuICAgIGRlc2NyaXB0aW9uOiAnVXBsb2FkIGEgcGx1Z2luIFpJUCAobXVsdGlwYXJ0IHBhcnQgYHBsdWdpbmApLiBCdWlsZHMsIHNpZ25zIGFuZCBzY2FucyB0aGUgaW1hZ2UsIHRoZW4gc2F2ZXMgdGhlICdcbiAgICAgICsgJ3ZlcnNpb24uIE9wdGlvbmFsIHBhcnRzOiBgdmlzaWJpbGl0eWAsIGFuZCBgbWV0YWRhdGFgIOKAlCBhIEpTT04gb2JqZWN0IG9mIGNhdGFsb2cgZWRpdHMgKHN1bW1hcnksICdcbiAgICAgICsgJ2Rlc2NyaXB0aW9uLCBkaXNwbGF5TmFtZSwgY2F0ZWdvcnksIGtleXdvcmRzLCBsaWNlbnNlLCBob21lcGFnZVVybCwgc291cmNlVXJsLCBkb2N1bWVudGF0aW9uVXJsLCBpY29uLCAnXG4gICAgICArICdjaGFuZ2Vsb2csIHJlYWRtZTsgYG51bGxgIGNsZWFycyBhIGZpZWxkKS4gV2hlbiBgbWV0YWRhdGFgIGlzIGFic2VudCBldmVyeSB2YWx1ZSBkZXRlY3RlZCBmcm9tIHRoZSAnXG4gICAgICArICdwYWNrYWdlIGlzIGFjY2VwdGVkLiBFeGVjdXRpb24tY29udHJhY3Qga2V5cyBpbiBgbWV0YWRhdGFgIGFyZSByZWZ1c2VkIHdpdGggNDAwLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAyOiB7IGRlc2NyaXB0aW9uOiAnUGx1Z2luIGJ1aWxkIHF1ZXVlZCcgfSwgNDAwOiB7IGRlc2NyaXB0aW9uOiAnVmFsaWRhdGlvbiBlcnJvcicgfSwgNDI5OiB7IGRlc2NyaXB0aW9uOiAnUXVvdGEgZXhjZWVkZWQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBwYXRoOiAnL3BsdWdpbnMvaW5zcGVjdCcsXG4gICAgc3VtbWFyeTogJ0luc3BlY3QgYSBwbHVnaW4gemlwIChkcnkgcnVuKScsXG4gICAgZGVzY3JpcHRpb246ICdQYXJzZXMgYSBwbHVnaW4gWklQIChtdWx0aXBhcnQgcGFydCBgcGx1Z2luYCkgd2l0aG91dCBidWlsZGluZyBvciBzdG9yaW5nIGFueXRoaW5nIGFuZCByZXR1cm5zICdcbiAgICAgICsgJ2V2ZXJ5IGRlc2NyaXB0aXZlIGNhdGFsb2cgZmllbGQgZGV0ZWN0ZWQgZnJvbSB0aGUgcGFja2FnZTogYHsgcGx1Z2luLCBmaWVsZHM6IFt7IGZpZWxkLCB2YWx1ZSwgc291cmNlLCAnXG4gICAgICArICdlcnJvciB9XSB9YC4gYHNvdXJjZWAgaXMgc3BlYyB8IHJlYWRtZSB8IGRvY2tlcmZpbGUgfCBkZXJpdmVkIChvciBudWxsIHdoZW4gbm90aGluZyB3YXMgZm91bmQpOyBhIHZhbHVlICdcbiAgICAgICsgJ3RoYXQgZmFpbHMgdmFsaWRhdGlvbiBjb21lcyBiYWNrIGJsYW5rIHdpdGggaXRzIGBlcnJvcmAuIFNhbWUgemlwIGJvdW5kcyBhcyB1cGxvYWQ7IHJhdGUgbGltaXRlZDsgJ1xuICAgICAgKyAncmVxdWlyZXMgcGx1Z2luczp3cml0ZS4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ0RldGVjdGVkIGNhdGFsb2cgZmllbGRzJyB9LCA0MDA6IHsgZGVzY3JpcHRpb246ICdJbnZhbGlkIHppcCBvciBzcGVjJyB9LCA0Mjk6IHsgZGVzY3JpcHRpb246ICdSYXRlIGxpbWl0ZWQnIH0gfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdwdXQnLFxuICAgIHBhdGg6ICcvcGx1Z2lucy97aWR9JyxcbiAgICBzdW1tYXJ5OiAnVXBkYXRlIGEgcGx1Z2luJyxcbiAgICBkZXNjcmlwdGlvbjogJ0VkaXQgYSB2ZXJzaW9uXFwncyBkZXNjcmlwdGl2ZSBjYXRhbG9nIGZpZWxkcyAoc3VtbWFyeSwgZGVzY3JpcHRpb24sIGRpc3BsYXlOYW1lLCBjYXRlZ29yeSwgJ1xuICAgICAgKyAna2V5d29yZHMsIGxpY2Vuc2UsIGxpbmtzLCBpY29uLCBjaGFuZ2Vsb2csIHJlYWRtZSkgYW5kIGl0cyBvcGVyYXRpb25hbCBmbGFncyAoaXNBY3RpdmUsIGlzRGVmYXVsdCwgJ1xuICAgICAgKyAndmlzaWJpbGl0eSwgbGlmZWN5Y2xlLCBjcml0aWNhbGl0eSwgbGFiZWxzLCBsaW5rcywgb3duZXIpLiBFeGVjdXRpb24tY29udHJhY3Qga2V5cyAoY29tbWFuZHMsIGVudiwgJ1xuICAgICAgKyAnc2VjcmV0cywgY29tcHV0ZVR5cGUsIOKApikgYXJlIHJlZnVzZWQgd2l0aCA0MDA6IHRoZXkgY2hhbmdlIG9ubHkgd2l0aCBhIG5ldyB2ZXJzaW9uLiBBIHZlcnNpb24gdGhhdCBpcyAnXG4gICAgICArICdmcm96ZW4gYnkgYSBwdWJsaXNoIHJlcXVlc3Qgb3IgbGlzdGVkIGhhcyBpdHMgY2F0YWxvZyBkZXRhaWxzIGZyb3plbiAoNDA5KS4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7XG4gICAgICAyMDA6IHsgZGVzY3JpcHRpb246ICdQbHVnaW4gdXBkYXRlZCcgfSxcbiAgICAgIDQwMDogeyBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRpb24gZXJyb3IsIG9yIGFuIGV4ZWN1dGlvbi1jb250cmFjdCBrZXknIH0sXG4gICAgICA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0sXG4gICAgICA0MDk6IHsgZGVzY3JpcHRpb246ICdQTFVHSU5fVkVSU0lPTl9GUk9aRU4g4oCUIGNhdGFsb2cgZGV0YWlscyBhcmUgZnJvemVuIHdpdGggdGhlIHZlcnNpb24nIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXJQYXRoKHtcbiAgICBtZXRob2Q6ICdkZWxldGUnLFxuICAgIHBhdGg6ICcvcGx1Z2lucy97aWR9JyxcbiAgICBzdW1tYXJ5OiAnRGVsZXRlIGEgcGx1Z2luIHZlcnNpb24nLFxuICAgIGRlc2NyaXB0aW9uOiAnU29mdC1kZWxldGUgYSB2ZXJzaW9uLiBBIHZlcnNpb24gdXNlZCBieSB0aGUgb3JnXFwncyBwaXBlbGluZXMgb3IgcHVibGlzaGVkIHRvIGEgbGlzdGluZyBpcyByZWZ1c2VkICdcbiAgICAgICsgJ3VubGVzcyBgP2ZvcmNlPXRydWVgLCB3aGljaCByZXF1aXJlcyBhIHN0ZXAtdXAgdG9rZW4gKGBYLVN0ZXAtVXAtVG9rZW5gKS4gQSB2ZXJzaW9uIHJlZmVyZW5jZWQgYnkgYSBwZW5kaW5nICdcbiAgICAgICsgJ3B1Ymxpc2ggcmVxdWVzdCBpcyBuZXZlciBkZWxldGFibGUuIERlbGV0aW5nIHRoZSBkZWZhdWx0IHByb21vdGVzIHRoZSBuZXh0IGRlZmF1bHQ7IHRoZSB2ZXJzaW9uXFwncyAnXG4gICAgICArICdgcGx1Z2luc2AgcXVvdGEgc2xvdCBpcyByZWZ1bmRlZCB3aGlsZSBpdHMgcXVvdGEgcGVyaW9kIGlzIGN1cnJlbnQuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczoge1xuICAgICAgMjAwOiB7IGRlc2NyaXB0aW9uOiAnUGx1Z2luIGRlbGV0ZWQgKGBwcm9tb3RlZERlZmF1bHRgIHdoZW4gYSBuZXcgZGVmYXVsdCB3YXMgY2hvc2VuKScgfSxcbiAgICAgIDQwMTogeyBkZXNjcmlwdGlvbjogJ1NURVBfVVBfUkVRVUlSRUQg4oCUIGZvcmNlIGRlbGV0ZSB3aXRob3V0IGEgc3RlcC11cCB0b2tlbicgfSxcbiAgICAgIDQwNDogeyBkZXNjcmlwdGlvbjogJ05vdCBmb3VuZCcgfSxcbiAgICAgIDQwOTogeyBkZXNjcmlwdGlvbjogJ1BMVUdJTl9WRVJTSU9OX0lOX1VTRSAvIFBMVUdJTl9WRVJTSU9OX0ZST1pFTicgfSxcbiAgICB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIHBhdGg6ICcvcGx1Z2lucy97aWR9L2RlcHJlY2F0ZScsXG4gICAgc3VtbWFyeTogJ0RlcHJlY2F0ZSBhIHBsdWdpbiB2ZXJzaW9uJyxcbiAgICBkZXNjcmlwdGlvbjogJ0JvZHkgYHsgZGVwcmVjYXRlZD86IGJvb2xlYW4gKGRlZmF1bHQgdHJ1ZSksIG1lc3NhZ2U/OiBzdHJpbmcgfWAuIEEgZGVwcmVjYXRlZCB2ZXJzaW9uIGtlZXBzICdcbiAgICAgICsgJ3Jlc29sdmluZyB3aXRoIGEgd2FybmluZywgYW5kIGlzIG5vIGxvbmdlciBvZmZlcmVkIGJ5IEFJIHBsdWdpbiBzZWxlY3Rpb24uJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdVcGRhdGVkIHZlcnNpb24nIH0sIDQwNDogeyBkZXNjcmlwdGlvbjogJ05vdCBmb3VuZCcgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIHBhdGg6ICcvcGx1Z2lucy97aWR9L3lhbmsnLFxuICAgIHN1bW1hcnk6ICdZYW5rIGEgcGx1Z2luIHZlcnNpb24nLFxuICAgIGRlc2NyaXB0aW9uOiAnQm9keSBgeyByZWFzb24gfWAuIEEgeWFua2VkIHZlcnNpb24gc3RvcHMgcmVzb2x2aW5nIGZvciByYW5nZXMsIGBsYXRlc3RgIGFuZCB0aGUgZGVmYXVsdDsgYW4gJ1xuICAgICAgKyAnZXhhY3QgcGluIHN0aWxsIHJlc29sdmVzIHdpdGggYSB3YXJuaW5nLiBZYW5raW5nIHRoZSBkZWZhdWx0IHByb21vdGVzIHRoZSBuZXh0IG9uZS4gQSB2ZXJzaW9uIHB1Ymxpc2hlZCAnXG4gICAgICArICd0byB0aGUgZWNvc3lzdGVtIGlzIHlhbmtlZCB0aHJvdWdoIGEgcHVibGlzaCByZXF1ZXN0IGluc3RlYWQgKDQwOSkuJyxcbiAgICB0YWdzLFxuICAgIHNlY3VyaXR5OiBhdXRoLFxuICAgIHJlc3BvbnNlczogeyAyMDA6IHsgZGVzY3JpcHRpb246ICdZYW5rZWQgdmVyc2lvbiAoYHByb21vdGVkRGVmYXVsdGAgd2hlbiBhIG5ldyBkZWZhdWx0IHdhcyBjaG9zZW4pJyB9LCA0MDQ6IHsgZGVzY3JpcHRpb246ICdOb3QgZm91bmQnIH0sIDQwOTogeyBkZXNjcmlwdGlvbjogJ1BMVUdJTl9WRVJTSU9OX0ZST1pFTicgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ2dldCcsXG4gICAgcGF0aDogJy9wbHVnaW5zL3Byb3ZpZGVycycsXG4gICAgc3VtbWFyeTogJ0xpc3QgQUkgcHJvdmlkZXJzJyxcbiAgICBkZXNjcmlwdGlvbjogJ0xpc3QgQUkgcHJvdmlkZXJzIGNvbmZpZ3VyZWQgZm9yIHBsdWdpbiBnZW5lcmF0aW9uLicsXG4gICAgdGFncyxcbiAgICBzZWN1cml0eTogYXV0aCxcbiAgICByZXNwb25zZXM6IHsgMjAwOiB7IGRlc2NyaXB0aW9uOiAnTGlzdCBvZiBhdmFpbGFibGUgQUkgcHJvdmlkZXJzIHdpdGggbW9kZWxzJyB9IH0sXG4gIH0pO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyUGF0aCh7XG4gICAgbWV0aG9kOiAncG9zdCcsXG4gICAgcGF0aDogJy9wbHVnaW5zL2dlbmVyYXRlJyxcbiAgICBzdW1tYXJ5OiAnR2VuZXJhdGUgcGx1Z2luIHZpYSBBSScsXG4gICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSBhIHBsdWdpbiBjb25maWd1cmF0aW9uIGFuZCBEb2NrZXJmaWxlIGZyb20gYSBuYXR1cmFsIGxhbmd1YWdlIHByb21wdC4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlZCBwbHVnaW4gY29uZmlndXJhdGlvbiBhbmQgRG9ja2VyZmlsZScgfSwgNDAwOiB7IGRlc2NyaXB0aW9uOiAnVmFsaWRhdGlvbiBlcnJvcicgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIHBhdGg6ICcvcGx1Z2lucy9nZW5lcmF0ZS9zdHJlYW0nLFxuICAgIHN1bW1hcnk6ICdTdHJlYW0gcGx1Z2luIGdlbmVyYXRpb24gdmlhIEFJJyxcbiAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIHBsdWdpbiBjb25maWd1cmF0aW9uIGZyb20gYSBuYXR1cmFsIGxhbmd1YWdlIHByb21wdC4gU3RyZWFtcyBwYXJ0aWFsIHJlc3VsdHMgYXMgU1NFIGV2ZW50cy4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMDogeyBkZXNjcmlwdGlvbjogJ1NTRSBldmVudCBzdHJlYW0gb2YgcGFydGlhbCBwbHVnaW4gb2JqZWN0cycgfSwgNDAwOiB7IGRlc2NyaXB0aW9uOiAnVmFsaWRhdGlvbiBlcnJvcicgfSB9LFxuICB9KTtcblxuICByZWdpc3RyeS5yZWdpc3RlclBhdGgoe1xuICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIHBhdGg6ICcvcGx1Z2lucy9kZXBsb3ktZ2VuZXJhdGVkJyxcbiAgICBzdW1tYXJ5OiAnRGVwbG95IEFJLWdlbmVyYXRlZCBwbHVnaW4nLFxuICAgIGRlc2NyaXB0aW9uOiAnQnVpbGQgRG9ja2VyIGltYWdlIGZyb20gQUktZ2VuZXJhdGVkIERvY2tlcmZpbGUgYW5kIHNhdmUgcGx1Z2luIHRvIGRhdGFiYXNlLiBSZXF1aXJlcyBhZG1pbi4nLFxuICAgIHRhZ3MsXG4gICAgc2VjdXJpdHk6IGF1dGgsXG4gICAgcmVzcG9uc2VzOiB7IDIwMjogeyBkZXNjcmlwdGlvbjogJ1BsdWdpbiBidWlsZCBxdWV1ZWQnIH0sIDQwMDogeyBkZXNjcmlwdGlvbjogJ1ZhbGlkYXRpb24gZXJyb3InIH0sIDQwMzogeyBkZXNjcmlwdGlvbjogJ0FkbWluIHJlcXVpcmVkJyB9LCA0Mjk6IHsgZGVzY3JpcHRpb246ICdRdW90YSBleGNlZWRlZCcgfSB9LFxuICB9KTtcbn1cbiJdfQ==
@@ -3,7 +3,7 @@
3
3
  import { z } from 'zod';
4
4
  import { registry } from './registry.js';
5
5
  import { AIGenerateBodySchema, PluginDeployGeneratedSchema, } from '../validation/ai-schemas.js';
6
- import { VisibilitySchema, PaginationSchema, BaseFilterSchema, } from '../validation/common-schemas.js';
6
+ import { VisibilitySchema, BaseFilterSchema, } from '../validation/common-schemas.js';
7
7
  import { MessageFilterSchema, MessageCreateSchema, MessageReplySchema, } from '../validation/message-schemas.js';
8
8
  import { PipelineFilterSchema, PipelineCreateSchema, PipelineUpdateSchema, } from '../validation/pipeline-schemas.js';
9
9
  import { PluginFilterSchema, PluginCreateSchema, PluginUpdateSchema, PluginUploadBodySchema, } from '../validation/plugin-schemas.js';
@@ -37,9 +37,6 @@ export function registerSchemas() {
37
37
  description: 'Sharing rung: "private" (author only), "org" (everyone in the owning organization), or "public" (the org, its teams, and — from the system org — every org)',
38
38
  example: 'private',
39
39
  }));
40
- registry.register('PaginationParams', PaginationSchema.openapi({
41
- description: 'Standard pagination and sorting parameters',
42
- }));
43
40
  registry.register('BaseFilter', BaseFilterSchema.openapi({
44
41
  description: 'Common filter fields shared by all entity queries',
45
42
  }));
@@ -88,4 +85,4 @@ export function registerSchemas() {
88
85
  registry.register('ErrorResponse', ErrorResponseSchema.openapi('ErrorResponse'));
89
86
  registry.register('PaginatedResponse', PaginatedResponseSchema.openapi('PaginatedResponse'));
90
87
  }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLXJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZW5hcGkvc2NoZW1hLXJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsMkJBQTJCLEdBQzVCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEdBQ2pCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsa0JBQWtCLEdBQ25CLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsb0JBQW9CLEdBQ3JCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLHNCQUFzQixHQUN2QixNQUFNLGlDQUFpQyxDQUFDO0FBRXpDLDZDQUE2QztBQUM3QyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUN0QixJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUMvQixDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFD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QyxRQUFRLENBQUMsZUFBZSxFQUFFLG1CQUFtQixDQUFDLE9BQU8sQ0FBQztRQUM3RCxXQUFXLEVBQUUsb0NBQW9DO0tBQ2xELENBQUMsQ0FBQyxDQUFDO0lBRUosUUFBUSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsbUJBQW1CLENBQUMsT0FBTyxDQUFDO1FBQzdELFdBQVcsRUFBRSx5REFBeUQ7S0FDdkUsQ0FBQyxDQUFDLENBQUM7SUFFSixRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7UUFDM0QsV0FBVyxFQUFFLCtDQUErQztLQUM3RCxDQUFDLENBQUMsQ0FBQztJQUVKLGFBQWE7SUFDYixRQUFRLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLG9CQUFvQixDQUFDLE9BQU8sQ0FBQztRQUMvRCxXQUFXLEVBQUUsNkRBQTZEO0tBQzNFLENBQUMsQ0FBQyxDQUFDO0lBRUosUUFBUSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSwyQkFBMkIsQ0FBQyxPQUFPLENBQUM7UUFDN0UsV0FBVyxFQUFFLG1EQUFtRDtLQUNqRSxDQUFDLENBQUMsQ0FBQztJQUVKLG1CQUFtQjtJQUNuQixRQUFRLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7SUFDdkYsUUFBUSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsbUJBQW1CLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDakYsUUFBUSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0FBQy9GLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7IHJlZ2lzdHJ5IH0gZnJvbSAnLi9yZWdpc3RyeS5qcyc7XG5pbXBvcnQge1xuICBBSUdlbmVyYXRlQm9keVNjaGVtYSxcbiAgUGx1Z2luRGVwbG95R2VuZXJhdGVkU2NoZW1hLFxufSBmcm9tICcuLi92YWxpZGF0aW9uL2FpLXNjaGVtYXMuanMnO1xuaW1wb3J0IHtcbiAgVmlzaWJpbGl0eVNjaGVtYSxcbiAgUGFnaW5hdGlvblNjaGVtYSxcbiAgQmFzZUZpbHRlclNjaGVtYSxcbn0gZnJvbSAnLi4vdmFsaWRhdGlvbi9jb21tb24tc2NoZW1hcy5qcyc7XG5pbXBvcnQge1xuICBNZXNzYWdlRmlsdGVyU2NoZW1hLFxuICBNZXNzYWdlQ3JlYXRlU2NoZW1hLFxuICBNZXNzYWdlUmVwbHlTY2hlbWEsXG59IGZyb20gJy4uL3ZhbGlkYXRpb24vbWVzc2FnZS1zY2hlbWFzLmpzJztcbmltcG9ydCB7XG4gIFBpcGVsaW5lRmlsdGVyU2NoZW1hLFxuICBQaXBlbGluZUNyZWF0ZVNjaGVtYSxcbiAgUGlwZWxpbmVVcGRhdGVTY2hlbWEsXG59IGZyb20gJy4uL3ZhbGlkYXRpb24vcGlwZWxpbmUtc2NoZW1hcy5qcyc7XG5pbXBvcnQge1xuICBQbHVnaW5GaWx0ZXJTY2hlbWEsXG4gIFBsdWdpbkNyZWF0ZVNjaGVtYSxcbiAgUGx1Z2luVXBkYXRlU2NoZW1hLFxuICBQbHVnaW5VcGxvYWRCb2R5U2NoZW1hLFxufSBmcm9tICcuLi92YWxpZGF0aW9uL3BsdWdpbi1zY2hlbWFzLmpzJztcblxuLy8gUmVzcG9uc2Ugc2NoZW1hcyAoZXhwb3J0ZWQgZm9yIHR5cGUgdXNhZ2UpXG5leHBvcnQgY29uc3QgU3VjY2Vzc1Jlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwodHJ1ZSksXG4gIHN0YXR1c0NvZGU6IHoubnVtYmVyKCksXG4gIGRhdGE6IHoudW5rbm93bigpLm9wdGlvbmFsKCksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgRXJyb3JSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKGZhbHNlKSxcbiAgc3RhdHVzQ29kZTogei5udW1iZXIoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkZXRhaWxzOiB6LnVua25vd24oKS5vcHRpb25hbCgpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBQYWdpbmF0ZWRSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKHRydWUpLFxuICBzdGF0dXNDb2RlOiB6Lm51bWJlcigpLFxuICBkYXRhOiB6LmFycmF5KHoudW5rbm93bigpKSxcbiAgY291bnQ6IHoubnVtYmVyKCksXG4gIGxpbWl0OiB6Lm51bWJlcigpLFxuICBvZmZzZXQ6IHoubnVtYmVyKCksXG4gIHRvdGFsOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJTY2hlbWFzKCk6IHZvaWQge1xuICAvLyBDb21tb24gc2NoZW1hc1xuICByZWdpc3RyeS5yZWdpc3RlcignVmlzaWJpbGl0eScsIFZpc2liaWxpdHlTY2hlbWEub3BlbmFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdTaGFyaW5nIHJ1bmc6IFwicHJpdmF0ZVwiIChhdXRob3Igb25seSksIFwib3JnXCIgKGV2ZXJ5b25lIGluIHRoZSBvd25pbmcgb3JnYW5pemF0aW9uKSwgb3IgXCJwdWJsaWNcIiAodGhlIG9yZywgaXRzIHRlYW1zLCBhbmQg4oCUIGZyb20gdGhlIHN5c3RlbSBvcmcg4oCUIGV2ZXJ5IG9yZyknLFxuICAgIGV4YW1wbGU6ICdwcml2YXRlJyxcbiAgfSkpO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdQYWdpbmF0aW9uUGFyYW1zJywgUGFnaW5hdGlvblNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1N0YW5kYXJkIHBhZ2luYXRpb24gYW5kIHNvcnRpbmcgcGFyYW1ldGVycycsXG4gIH0pKTtcblxuICByZWdpc3RyeS5yZWdpc3RlcignQmFzZUZpbHRlcicsIEJhc2VGaWx0ZXJTY2hlbWEub3BlbmFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdDb21tb24gZmlsdGVyIGZpZWxkcyBzaGFyZWQgYnkgYWxsIGVudGl0eSBxdWVyaWVzJyxcbiAgfSkpO1xuXG4gIC8vIFBpcGVsaW5lIHNjaGVtYXNcbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ1BpcGVsaW5lRmlsdGVyJywgUGlwZWxpbmVGaWx0ZXJTY2hlbWEub3BlbmFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdRdWVyeSBmaWx0ZXJzIGZvciBsaXN0aW5nIHBpcGVsaW5lcycsXG4gIH0pKTtcblxuICByZWdpc3RyeS5yZWdpc3RlcignUGlwZWxpbmVDcmVhdGUnLCBQaXBlbGluZUNyZWF0ZVNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlcXVlc3QgYm9keSBmb3IgY3JlYXRpbmcgYSBuZXcgcGlwZWxpbmUnLFxuICB9KSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ1BpcGVsaW5lVXBkYXRlJywgUGlwZWxpbmVVcGRhdGVTY2hlbWEub3BlbmFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdSZXF1ZXN0IGJvZHkgZm9yIHVwZGF0aW5nIGFuIGV4aXN0aW5nIHBpcGVsaW5lJyxcbiAgfSkpO1xuXG4gIC8vIFBsdWdpbiBzY2hlbWFzXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdQbHVnaW5GaWx0ZXInLCBQbHVnaW5GaWx0ZXJTY2hlbWEub3BlbmFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdRdWVyeSBmaWx0ZXJzIGZvciBsaXN0aW5nIHBsdWdpbnMnLFxuICB9KSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ1BsdWdpbkNyZWF0ZScsIFBsdWdpbkNyZWF0ZVNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlcXVlc3QgYm9keSBmb3IgY3JlYXRpbmcgYSBuZXcgcGx1Z2luJyxcbiAgfSkpO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdQbHVnaW5VcGRhdGUnLCBQbHVnaW5VcGRhdGVTY2hlbWEub3BlbmFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdSZXF1ZXN0IGJvZHkgZm9yIHVwZGF0aW5nIGFuIGV4aXN0aW5nIHBsdWdpbicsXG4gIH0pKTtcblxuICByZWdpc3RyeS5yZWdpc3RlcignUGx1Z2luVXBsb2FkQm9keScsIFBsdWdpblVwbG9hZEJvZHlTY2hlbWEub3BlbmFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdNZXRhZGF0YSBmb3IgcGx1Z2luIFpJUCB1cGxvYWQgKG11bHRpcGFydCBmb3JtLWRhdGEpJyxcbiAgfSkpO1xuXG4gIC8vIE1lc3NhZ2Ugc2NoZW1hc1xuICByZWdpc3RyeS5yZWdpc3RlcignTWVzc2FnZUZpbHRlcicsIE1lc3NhZ2VGaWx0ZXJTY2hlbWEub3BlbmFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdRdWVyeSBmaWx0ZXJzIGZvciBsaXN0aW5nIG1lc3NhZ2VzJyxcbiAgfSkpO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdNZXNzYWdlQ3JlYXRlJywgTWVzc2FnZUNyZWF0ZVNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlcXVlc3QgYm9keSBmb3IgY3JlYXRpbmcgYSBuZXcgbWVzc2FnZSBvciBhbm5vdW5jZW1lbnQnLFxuICB9KSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ01lc3NhZ2VSZXBseScsIE1lc3NhZ2VSZXBseVNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlcXVlc3QgYm9keSBmb3IgcmVwbHlpbmcgdG8gYSBtZXNzYWdlIHRocmVhZCcsXG4gIH0pKTtcblxuICAvLyBBSSBzY2hlbWFzXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdBSUdlbmVyYXRlQm9keScsIEFJR2VuZXJhdGVCb2R5U2NoZW1hLm9wZW5hcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnUmVxdWVzdCBib2R5IGZvciBBSS1wb3dlcmVkIGdlbmVyYXRpb24gKHBpcGVsaW5lIG9yIHBsdWdpbiknLFxuICB9KSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ1BsdWdpbkRlcGxveUdlbmVyYXRlZCcsIFBsdWdpbkRlcGxveUdlbmVyYXRlZFNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlcXVlc3QgYm9keSBmb3IgZGVwbG95aW5nIGFuIEFJLWdlbmVyYXRlZCBwbHVnaW4nLFxuICB9KSk7XG5cbiAgLy8gUmVzcG9uc2Ugc2NoZW1hc1xuICByZWdpc3RyeS5yZWdpc3RlcignU3VjY2Vzc1Jlc3BvbnNlJywgU3VjY2Vzc1Jlc3BvbnNlU2NoZW1hLm9wZW5hcGkoJ1N1Y2Nlc3NSZXNwb25zZScpKTtcbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ0Vycm9yUmVzcG9uc2UnLCBFcnJvclJlc3BvbnNlU2NoZW1hLm9wZW5hcGkoJ0Vycm9yUmVzcG9uc2UnKSk7XG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdQYWdpbmF0ZWRSZXNwb25zZScsIFBhZ2luYXRlZFJlc3BvbnNlU2NoZW1hLm9wZW5hcGkoJ1BhZ2luYXRlZFJlc3BvbnNlJykpO1xufVxuIl19
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLXJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZW5hcGkvc2NoZW1hLXJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsMkJBQTJCLEdBQzVCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixnQkFBZ0IsR0FDakIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixrQkFBa0IsR0FDbkIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixvQkFBb0IsR0FDckIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsc0JBQXNCLEdBQ3ZCLE1BQU0saUNBQWlDLENBQUM7QUFFekMsNkNBQTZDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDNUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3RCLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzVCLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQy9CLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxNQUFNLENB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ZSxFQUFFLG1CQUFtQixDQUFDLE9BQU8sQ0FBQztRQUM3RCxXQUFXLEVBQUUseURBQXlEO0tBQ3ZFLENBQUMsQ0FBQyxDQUFDO0lBRUosUUFBUSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDO1FBQzNELFdBQVcsRUFBRSwrQ0FBK0M7S0FDN0QsQ0FBQyxDQUFDLENBQUM7SUFFSixhQUFhO0lBQ2IsUUFBUSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBQyxPQUFPLENBQUM7UUFDL0QsV0FBVyxFQUFFLDZEQUE2RDtLQUMzRSxDQUFDLENBQUMsQ0FBQztJQUVKLFFBQVEsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLEVBQUUsMkJBQTJCLENBQUMsT0FBTyxDQUFDO1FBQzdFLFdBQVcsRUFBRSxtREFBbUQ7S0FDakUsQ0FBQyxDQUFDLENBQUM7SUFFSixtQkFBbUI7SUFDbkIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLFFBQVEsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLFFBQVEsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsdUJBQXVCLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztBQUMvRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuXG5pbXBvcnQgeyByZWdpc3RyeSB9IGZyb20gJy4vcmVnaXN0cnkuanMnO1xuaW1wb3J0IHtcbiAgQUlHZW5lcmF0ZUJvZHlTY2hlbWEsXG4gIFBsdWdpbkRlcGxveUdlbmVyYXRlZFNjaGVtYSxcbn0gZnJvbSAnLi4vdmFsaWRhdGlvbi9haS1zY2hlbWFzLmpzJztcbmltcG9ydCB7XG4gIFZpc2liaWxpdHlTY2hlbWEsXG4gIEJhc2VGaWx0ZXJTY2hlbWEsXG59IGZyb20gJy4uL3ZhbGlkYXRpb24vY29tbW9uLXNjaGVtYXMuanMnO1xuaW1wb3J0IHtcbiAgTWVzc2FnZUZpbHRlclNjaGVtYSxcbiAgTWVzc2FnZUNyZWF0ZVNjaGVtYSxcbiAgTWVzc2FnZVJlcGx5U2NoZW1hLFxufSBmcm9tICcuLi92YWxpZGF0aW9uL21lc3NhZ2Utc2NoZW1hcy5qcyc7XG5pbXBvcnQge1xuICBQaXBlbGluZUZpbHRlclNjaGVtYSxcbiAgUGlwZWxpbmVDcmVhdGVTY2hlbWEsXG4gIFBpcGVsaW5lVXBkYXRlU2NoZW1hLFxufSBmcm9tICcuLi92YWxpZGF0aW9uL3BpcGVsaW5lLXNjaGVtYXMuanMnO1xuaW1wb3J0IHtcbiAgUGx1Z2luRmlsdGVyU2NoZW1hLFxuICBQbHVnaW5DcmVhdGVTY2hlbWEsXG4gIFBsdWdpblVwZGF0ZVNjaGVtYSxcbiAgUGx1Z2luVXBsb2FkQm9keVNjaGVtYSxcbn0gZnJvbSAnLi4vdmFsaWRhdGlvbi9wbHVnaW4tc2NoZW1hcy5qcyc7XG5cbi8vIFJlc3BvbnNlIHNjaGVtYXMgKGV4cG9ydGVkIGZvciB0eXBlIHVzYWdlKVxuZXhwb3J0IGNvbnN0IFN1Y2Nlc3NSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKHRydWUpLFxuICBzdGF0dXNDb2RlOiB6Lm51bWJlcigpLFxuICBkYXRhOiB6LnVua25vd24oKS5vcHRpb25hbCgpLFxuICBtZXNzYWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IGNvbnN0IEVycm9yUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHoubGl0ZXJhbChmYWxzZSksXG4gIHN0YXR1c0NvZGU6IHoubnVtYmVyKCksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGNvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGV0YWlsczogei51bmtub3duKCkub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgUGFnaW5hdGVkUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHoubGl0ZXJhbCh0cnVlKSxcbiAgc3RhdHVzQ29kZTogei5udW1iZXIoKSxcbiAgZGF0YTogei5hcnJheSh6LnVua25vd24oKSksXG4gIGNvdW50OiB6Lm51bWJlcigpLFxuICBsaW1pdDogei5udW1iZXIoKSxcbiAgb2Zmc2V0OiB6Lm51bWJlcigpLFxuICB0b3RhbDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBtZXNzYWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyU2NoZW1hcygpOiB2b2lkIHtcbiAgLy8gQ29tbW9uIHNjaGVtYXNcbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ1Zpc2liaWxpdHknLCBWaXNpYmlsaXR5U2NoZW1hLm9wZW5hcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnU2hhcmluZyBydW5nOiBcInByaXZhdGVcIiAoYXV0aG9yIG9ubHkpLCBcIm9yZ1wiIChldmVyeW9uZSBpbiB0aGUgb3duaW5nIG9yZ2FuaXphdGlvbiksIG9yIFwicHVibGljXCIgKHRoZSBvcmcsIGl0cyB0ZWFtcywgYW5kIOKAlCBmcm9tIHRoZSBzeXN0ZW0gb3JnIOKAlCBldmVyeSBvcmcpJyxcbiAgICBleGFtcGxlOiAncHJpdmF0ZScsXG4gIH0pKTtcblxuICByZWdpc3RyeS5yZWdpc3RlcignQmFzZUZpbHRlcicsIEJhc2VGaWx0ZXJTY2hlbWEub3BlbmFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdDb21tb24gZmlsdGVyIGZpZWxkcyBzaGFyZWQgYnkgYWxsIGVudGl0eSBxdWVyaWVzJyxcbiAgfSkpO1xuXG4gIC8vIFBpcGVsaW5lIHNjaGVtYXNcbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ1BpcGVsaW5lRmlsdGVyJywgUGlwZWxpbmVGaWx0ZXJTY2hlbWEub3BlbmFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdRdWVyeSBmaWx0ZXJzIGZvciBsaXN0aW5nIHBpcGVsaW5lcycsXG4gIH0pKTtcblxuICByZWdpc3RyeS5yZWdpc3RlcignUGlwZWxpbmVDcmVhdGUnLCBQaXBlbGluZUNyZWF0ZVNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlcXVlc3QgYm9keSBmb3IgY3JlYXRpbmcgYSBuZXcgcGlwZWxpbmUnLFxuICB9KSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ1BpcGVsaW5lVXBkYXRlJywgUGlwZWxpbmVVcGRhdGVTY2hlbWEub3BlbmFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdSZXF1ZXN0IGJvZHkgZm9yIHVwZGF0aW5nIGFuIGV4aXN0aW5nIHBpcGVsaW5lJyxcbiAgfSkpO1xuXG4gIC8vIFBsdWdpbiBzY2hlbWFzXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdQbHVnaW5GaWx0ZXInLCBQbHVnaW5GaWx0ZXJTY2hlbWEub3BlbmFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdRdWVyeSBmaWx0ZXJzIGZvciBsaXN0aW5nIHBsdWdpbnMnLFxuICB9KSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ1BsdWdpbkNyZWF0ZScsIFBsdWdpbkNyZWF0ZVNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlcXVlc3QgYm9keSBmb3IgY3JlYXRpbmcgYSBuZXcgcGx1Z2luJyxcbiAgfSkpO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdQbHVnaW5VcGRhdGUnLCBQbHVnaW5VcGRhdGVTY2hlbWEub3BlbmFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdSZXF1ZXN0IGJvZHkgZm9yIHVwZGF0aW5nIGFuIGV4aXN0aW5nIHBsdWdpbicsXG4gIH0pKTtcblxuICByZWdpc3RyeS5yZWdpc3RlcignUGx1Z2luVXBsb2FkQm9keScsIFBsdWdpblVwbG9hZEJvZHlTY2hlbWEub3BlbmFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdNZXRhZGF0YSBmb3IgcGx1Z2luIFpJUCB1cGxvYWQgKG11bHRpcGFydCBmb3JtLWRhdGEpJyxcbiAgfSkpO1xuXG4gIC8vIE1lc3NhZ2Ugc2NoZW1hc1xuICByZWdpc3RyeS5yZWdpc3RlcignTWVzc2FnZUZpbHRlcicsIE1lc3NhZ2VGaWx0ZXJTY2hlbWEub3BlbmFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdRdWVyeSBmaWx0ZXJzIGZvciBsaXN0aW5nIG1lc3NhZ2VzJyxcbiAgfSkpO1xuXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdNZXNzYWdlQ3JlYXRlJywgTWVzc2FnZUNyZWF0ZVNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlcXVlc3QgYm9keSBmb3IgY3JlYXRpbmcgYSBuZXcgbWVzc2FnZSBvciBhbm5vdW5jZW1lbnQnLFxuICB9KSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ01lc3NhZ2VSZXBseScsIE1lc3NhZ2VSZXBseVNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlcXVlc3QgYm9keSBmb3IgcmVwbHlpbmcgdG8gYSBtZXNzYWdlIHRocmVhZCcsXG4gIH0pKTtcblxuICAvLyBBSSBzY2hlbWFzXG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdBSUdlbmVyYXRlQm9keScsIEFJR2VuZXJhdGVCb2R5U2NoZW1hLm9wZW5hcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnUmVxdWVzdCBib2R5IGZvciBBSS1wb3dlcmVkIGdlbmVyYXRpb24gKHBpcGVsaW5lIG9yIHBsdWdpbiknLFxuICB9KSk7XG5cbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ1BsdWdpbkRlcGxveUdlbmVyYXRlZCcsIFBsdWdpbkRlcGxveUdlbmVyYXRlZFNjaGVtYS5vcGVuYXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlcXVlc3QgYm9keSBmb3IgZGVwbG95aW5nIGFuIEFJLWdlbmVyYXRlZCBwbHVnaW4nLFxuICB9KSk7XG5cbiAgLy8gUmVzcG9uc2Ugc2NoZW1hc1xuICByZWdpc3RyeS5yZWdpc3RlcignU3VjY2Vzc1Jlc3BvbnNlJywgU3VjY2Vzc1Jlc3BvbnNlU2NoZW1hLm9wZW5hcGkoJ1N1Y2Nlc3NSZXNwb25zZScpKTtcbiAgcmVnaXN0cnkucmVnaXN0ZXIoJ0Vycm9yUmVzcG9uc2UnLCBFcnJvclJlc3BvbnNlU2NoZW1hLm9wZW5hcGkoJ0Vycm9yUmVzcG9uc2UnKSk7XG4gIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdQYWdpbmF0ZWRSZXNwb25zZScsIFBhZ2luYXRlZFJlc3BvbnNlU2NoZW1hLm9wZW5hcGkoJ1BhZ2luYXRlZFJlc3BvbnNlJykpO1xufVxuIl19
@@ -1 +1 @@
1
- export * from './health.js';
1
+ export { createHealthCheck, createReadinessCheck, createHealthRouter, } from './health.js';
@@ -1,4 +1,4 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- export * from './health.js';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm91dGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuZXhwb3J0ICogZnJvbSAnLi9oZWFsdGguanMnO1xuIl19
3
+ export { createHealthCheck, createReadinessCheck, createHealthRouter, } from './health.js';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm91dGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIsa0JBQWtCLEdBQ25CLE1BQU0sYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCB7XG4gIGNyZWF0ZUhlYWx0aENoZWNrLFxuICBjcmVhdGVSZWFkaW5lc3NDaGVjayxcbiAgY3JlYXRlSGVhbHRoUm91dGVyLFxufSBmcm9tICcuL2hlYWx0aC5qcyc7XG4iXX0=
@@ -31,12 +31,15 @@
31
31
  * pod's exchanges would otherwise share one bucket) and names the caller in
32
32
  * platform's audit trail.
33
33
  */
34
- import { getServiceAuthHeader, SYSTEM_ORG_ID } from '../middleware/auth.js';
34
+ import { getServiceAuthHeader } from '../middleware/service-tokens.js';
35
+ import { SYSTEM_ORG_ID } from '../middleware/system-org.js';
35
36
  import { InternalHttpClient } from '../services/http-client.js';
36
37
  import { hashApiKey } from '../utils/api-key.js';
37
38
  import { createLogger } from '../utils/logger.js';
38
39
  import { emitCounter } from '../utils/metric-emitter.js';
39
40
  import { errorMessage } from '../utils/response.js';
41
+ import { envInt } from '../utils/env.js';
42
+ import { serviceEndpoint } from '../utils/service-registry.js';
40
43
  const logger = createLogger('api-key-exchange');
41
44
  /** Most distinct keys held in the process-wide cache before the oldest are dropped. */
42
45
  const MAX_CACHED_KEYS = 1000;
@@ -81,9 +84,8 @@ export function setApiKeyExchangeServiceName(name) {
81
84
  /** Platform's in-cluster address — the same env pair every other caller uses. */
82
85
  function platformClient() {
83
86
  return new InternalHttpClient({
84
- host: process.env.PLATFORM_SERVICE_HOST || 'platform',
85
- port: parseInt(process.env.PLATFORM_SERVICE_PORT || '3000', 10),
86
- timeout: parseInt(process.env.API_KEY_EXCHANGE_TIMEOUT_MS || '3000', 10),
87
+ ...serviceEndpoint('platform'),
88
+ timeout: envInt('API_KEY_EXCHANGE_TIMEOUT_MS', 3000, { min: 1 }),
87
89
  });
88
90
  }
89
91
  /** The epoch ms at which a token with `ttlSeconds` of life should be refreshed early. */
@@ -217,4 +219,4 @@ export function resetApiKeyExchangeCache() {
217
219
  rejectionCache.clear();
218
220
  inFlight.clear();
219
221
  }
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWtleS1leGNoYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9hcGkta2V5LWV4Y2hhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUVILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFaEQsdUZBQXVGO0FBQ3ZGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQztBQUU3Qix3REFBd0Q7QUFDeEQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDO0FBRS9CLGtGQUFrRjtBQUNsRixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUVqQzs7MkRBRTJEO0FBQzNELE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBRXBDLGlGQUFpRjtBQUNqRixNQUFNLE9BQU8sbUJBQW9CLFNBQVEsS0FBSztJQUM1QyxZQUFZLE9BQU8sR0FBRywyQ0FBMkM7UUFDL0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFFRCx1RkFBdUY7QUFDdkYsTUFBTSxPQUFPLDhCQUErQixTQUFRLEtB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Q0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDckMsSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuRCwyRUFBMkU7WUFDM0UseUVBQXlFO1lBQ3pFLGtFQUFrRTtZQUNsRSxXQUFXLENBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNuRSxLQUFLLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUE2QyxDQUFDLENBQUMsQ0FBQztRQUMxRixDQUFDO2FBQU0sQ0FBQztZQUNOLFdBQVcsQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELFdBQVcsQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLE9BQU8sQ0FBQyxNQUFNLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSx3QkFBd0I7SUFDdEMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ25CLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QixRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRyYWRlIGFuIG9wYXF1ZSBhY2Nlc3Mga2V5IGZvciBhIHNob3J0LWxpdmVkIEpXVCwgb25jZSwgYW5kIGNhY2hlIGl0LlxuICpcbiAqIE9ubHkgcGxhdGZvcm0sIGJpbGxpbmcgYW5kIHF1b3RhIGhhdmUgTW9uZ29EQiwgc28gdGhlIHN0YXRlbGVzcyBzZXJ2aWNlc1xuICogY2Fubm90IGxvb2sgdXAgYSBrZXkgaGFzaCDigJQgYW5kIGFza2luZyBwbGF0Zm9ybSB0byB2YWxpZGF0ZSBFVkVSWSByZXF1ZXN0XG4gKiB3b3VsZCBwdXQgaXQgb24gdGhlIGhvdCBwYXRoIG9mIHRoZSB3aG9sZSBmbGVldC4gSW5zdGVhZCB0aGlzIG1vZHVsZSBkb2VzIHRoZVxuICogZXhjaGFuZ2Ugb25jZSBwZXIga2V5IChgUE9TVCAvYXV0aC90b2tlbi9leGNoYW5nZWApIGFuZCBjYWNoZXMgdGhlIHJldHVybmVkXG4gKiBKV1QgaW4tcHJvY2VzcyB1bnRpbCBpdCBleHBpcmVzLCBzbyBgcmVxdWlyZUF1dGhgIG9ubHkgZXZlciB2ZXJpZmllcyBhIEpXVC5cbiAqXG4gKiBQcm9wZXJ0aWVzIHRoYXQgbWF0dGVyOlxuICpcbiAqIC0gKipSZXZvY2F0aW9uIGxhdGVuY3kgaXMgYm91bmRlZCBieSB0aGUgdG9rZW4gVFRMKiogKDUgbWludXRlcykuIEEgcmV2b2tlZFxuICogICBrZXkgY2FuIG5vIGxvbmdlciBiZSBleGNoYW5nZWQsIGFuZCB0aGUgY2FjaGVkIHRva2VuIGl0IGFscmVhZHkgcHJvZHVjZWRcbiAqICAgZGllcyBvbiBpdHMgb3duLlxuICogLSAqKkVhcmx5LCBqaXR0ZXJlZCByZWZyZXNoLioqIFRoZSBjYWNoZWQgdG9rZW4gaXMgcmUtZXhjaGFuZ2VkIGluIHRoZVxuICogICBiYWNrZ3JvdW5kIGF0IH43NSUgb2YgaXRzIGxpZmUgKMKxMjAlIGppdHRlcikgc28gbm8gcmVxdWVzdCBldmVyIGJsb2NrcyBvblxuICogICB0aGUgZXhjaGFuZ2UsIGFuZCBhIGZsZWV0IG9mIHBvZHMgaG9sZGluZyB0aGUgc2FtZSBrZXkgZG9lc24ndCBzdGFtcGVkZVxuICogICBwbGF0Zm9ybSBhdCB0aGUgc2FtZSBpbnN0YW50LlxuICogLSAqKk9uZSBpbi1mbGlnaHQgZXhjaGFuZ2UgcGVyIGtleS4qKiBDb25jdXJyZW50IHJlcXVlc3RzIHNoYXJlIGEgcHJvbWlzZS5cbiAqIC0gKipTaG9ydCBuZWdhdGl2ZSBjYWNoZS4qKiBBIGtleSBwbGF0Zm9ybSByZWplY3RlZCBpcyByZW1lbWJlcmVkIGZvciAzMHMsIHNvXG4gKiAgIGEgbWlzY29uZmlndXJlZCBjbGllbnQgKG9yIGEgc2Nhbm5lcikgY2FuJ3QgdHVybiBldmVyeSByZXF1ZXN0IGludG8gYVxuICogICBwbGF0Zm9ybSByb3VuZC10cmlwLlxuICogLSAqKlBsYXRmb3JtIGRvd24gaXMgYSA1MDMsIG5ldmVyIGEgMjAwLioqIFRoZSBjYWxsZXIgbWFwc1xuICogICB7QGxpbmsgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yfSB0byBcInRyeSBhZ2FpblwiLCB3aXRoIGEgbWV0cmljIOKAlCBpdCBpc1xuICogICBkZWxpYmVyYXRlbHkgTk9UIGZhaWwtb3BlbjogYW4gdW52ZXJpZmlhYmxlIGNyZWRlbnRpYWwgaXMgbm90IGFuIGlkZW50aXR5LlxuICpcbiAqIFRoZSBleGNoYW5nZSByZXF1ZXN0IGl0c2VsZiBjYXJyaWVzIHRoaXMgc2VydmljZSdzIG93biBzaWduZWQgc2VydmljZSB0b2tlbixcbiAqIHdoaWNoIGlzIHdoYXQgZXhlbXB0cyBpdCBmcm9tIHBsYXRmb3JtJ3MgSVAta2V5ZWQgYC9hdXRoYCByYXRlIGxpbWl0ZXIgKGV2ZXJ5XG4gKiBwb2QncyBleGNoYW5nZXMgd291bGQgb3RoZXJ3aXNlIHNoYXJlIG9uZSBidWNrZXQpIGFuZCBuYW1lcyB0aGUgY2FsbGVyIGluXG4gKiBwbGF0Zm9ybSdzIGF1ZGl0IHRyYWlsLlxuICovXG5cbmltcG9ydCB7IGdldFNlcnZpY2VBdXRoSGVhZGVyLCBTWVNURU1fT1JHX0lEIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9hdXRoLmpzJztcbmltcG9ydCB7IEludGVybmFsSHR0cENsaWVudCB9IGZyb20gJy4uL3NlcnZpY2VzL2h0dHAtY2xpZW50LmpzJztcbmltcG9ydCB7IGhhc2hBcGlLZXkgfSBmcm9tICcuLi91dGlscy9hcGkta2V5LmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdhcGkta2V5LWV4Y2hhbmdlJyk7XG5cbi8qKiBNb3N0IGRpc3RpbmN0IGtleXMgaGVsZCBpbiB0aGUgcHJvY2Vzcy13aWRlIGNhY2hlIGJlZm9yZSB0aGUgb2xkZXN0IGFyZSBkcm9wcGVkLiAqL1xuY29uc3QgTUFYX0NBQ0hFRF9LRVlTID0gMTAwMDtcblxuLyoqIEhvdyBsb25nIGEgcGxhdGZvcm0gUkVKRUNUSU9OIGlzIHJlbWVtYmVyZWQgKG1zKS4gKi9cbmNvbnN0IE5FR0FUSVZFX1RUTF9NUyA9IDMwXzAwMDtcblxuLyoqIEZyYWN0aW9uIG9mIGEgdG9rZW4ncyBsaWZlIGFmdGVyIHdoaWNoIGEgYmFja2dyb3VuZCByZS1leGNoYW5nZSBpcyBzdGFydGVkLiAqL1xuY29uc3QgUkVGUkVTSF9BVF9GUkFDVElPTiA9IDAuNzU7XG5cbi8qKiDCsSBqaXR0ZXIgYXBwbGllZCB0byB0aGUgcmVmcmVzaCBwb2ludCwgYXMgYSBmcmFjdGlvbiBvZiB0aGUgdG9rZW4ncyBsaWZlLlxuICogIFdpZGUgZW5vdWdoIHRvIGRlLXN5bmNocm9uaXplIGEgZmxlZXQsIG5hcnJvdyBlbm91Z2ggdG8gbGVhdmUgYSBjbGVhciB0YWlsIG9mXG4gKiAgc3RpbGwtdmFsaWQgdG9rZW4gYWZ0ZXIgdGhlIGxhdGVzdCBwb3NzaWJsZSByZWZyZXNoLiAqL1xuY29uc3QgUkVGUkVTSF9KSVRURVJfRlJBQ1RJT04gPSAwLjE7XG5cbi8qKiBUaGUga2V5IHdhcyBwcmVzZW50ZWQgdG8gcGxhdGZvcm0gYW5kIHJlZnVzZWQgKHVua25vd24sIHJldm9rZWQsIGV4cGlyZWQpLiAqL1xuZXhwb3J0IGNsYXNzIEFwaUtleVJlamVjdGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnQWNjZXNzIGtleSBpcyBpbnZhbGlkLCByZXZva2VkIG9yIGV4cGlyZWQnKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0FwaUtleVJlamVjdGVkRXJyb3InO1xuICB9XG59XG5cbi8qKiBQbGF0Zm9ybSBjb3VsZCBub3QgYmUgcmVhY2hlZCAob3IgYW5zd2VyZWQgNXh4KSDigJQgdGhlIGtleSdzIHZhbGlkaXR5IGlzIHVua25vd24uICovXG5leHBvcnQgY2xhc3MgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ0FjY2Vzcy1rZXkgdmVyaWZpY2F0aW9uIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlJykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3InO1xuICB9XG59XG5cbmludGVyZmFjZSBDYWNoZUVudHJ5IHtcbiAgLyoqIFRoZSBleGNoYW5nZWQgSldULiAqL1xuICB0b2tlbjogc3RyaW5nO1xuICAvKiogRXBvY2ggbXMgYXQgd2hpY2ggdGhlIEpXVCBzdG9wcyBiZWluZyB1c2FibGUuICovXG4gIGV4cGlyZXNBdDogbnVtYmVyO1xuICAvKiogRXBvY2ggbXMgYWZ0ZXIgd2hpY2ggYSBiYWNrZ3JvdW5kIHJlLWV4Y2hhbmdlIHNob3VsZCBiZSBzdGFydGVkLiAqL1xuICByZWZyZXNoQXQ6IG51bWJlcjtcbn1cblxuLyoqIENhY2hlIG9mIHN1Y2Nlc3NmdWwgZXhjaGFuZ2VzLCBrZXllZCBieSBgc2hhMjU2KGtleSlgIOKAlCBuZXZlciBieSB0aGUga2V5IGl0c2VsZi4gKi9cbmNvbnN0IHRva2VuQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQ2FjaGVFbnRyeT4oKTtcbi8qKiBDYWNoZSBvZiByZWplY3Rpb25zLCBrZXllZCB0aGUgc2FtZSB3YXk7IHZhbHVlIGlzIHRoZSBlcG9jaCBtcyBpdCBleHBpcmVzLiAqL1xuY29uc3QgcmVqZWN0aW9uQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuLyoqIEluLWZsaWdodCBleGNoYW5nZXMsIHNvIGNvbmN1cnJlbnQgcmVxdWVzdHMgZm9yIG9uZSBrZXkgc2hhcmUgYSByb3VuZC10cmlwLiAqL1xuY29uc3QgaW5GbGlnaHQgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxDYWNoZUVudHJ5Pj4oKTtcblxuLyoqIFRoZSBzZXJ2aWNlIG5hbWUgbWludGVkIGludG8gdGhlIGV4Y2hhbmdlIGNhbGwncyBvd24gc2VydmljZSB0b2tlbi4gKi9cbmxldCBzZXJ2aWNlTmFtZSA9IHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAndW5rbm93bic7XG5cbi8qKlxuICogTmFtZSB0aGlzIHByb2Nlc3MgaW4gdGhlIGV4Y2hhbmdlIGNhbGwncyBzZXJ2aWNlIHRva2VuLiBDYWxsZWQgZnJvbVxuICogYHdpcmVTZXJ2aWNlU2VjdXJpdHlgIGF0IGJvb3QgKGFuZCBieSB0aGUgcGx1Z2luIHNlcnZpY2UsIHdoaWNoIHdpcmVzIGl0c1xuICogYm9vdCBzZWN1cml0eSBieSBoYW5kKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEFwaUtleUV4Y2hhbmdlU2VydmljZU5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIHNlcnZpY2VOYW1lID0gbmFtZTtcbn1cblxuLyoqIFBsYXRmb3JtJ3MgaW4tY2x1c3RlciBhZGRyZXNzIOKAlCB0aGUgc2FtZSBlbnYgcGFpciBldmVyeSBvdGhlciBjYWxsZXIgdXNlcy4gKi9cbmZ1bmN0aW9uIHBsYXRmb3JtQ2xpZW50KCk6IEludGVybmFsSHR0cENsaWVudCB7XG4gIHJldHVybiBuZXcgSW50ZXJuYWxIdHRwQ2xpZW50KHtcbiAgICBob3N0OiBwcm9jZXNzLmVudi5QTEFURk9STV9TRVJWSUNFX0hPU1QgfHwgJ3BsYXRmb3JtJyxcbiAgICBwb3J0OiBwYXJzZUludChwcm9jZXNzLmVudi5QTEFURk9STV9TRVJWSUNFX1BPUlQgfHwgJzMwMDAnLCAxMCksXG4gICAgdGltZW91dDogcGFyc2VJbnQocHJvY2Vzcy5lbnYuQVBJX0tFWV9FWENIQU5HRV9USU1FT1VUX01TIHx8ICczMDAwJywgMTApLFxuICB9KTtcbn1cblxuLyoqIFRoZSBlcG9jaCBtcyBhdCB3aGljaCBhIHRva2VuIHdpdGggYHR0bFNlY29uZHNgIG9mIGxpZmUgc2hvdWxkIGJlIHJlZnJlc2hlZCBlYXJseS4gKi9cbmZ1bmN0aW9uIGppdHRlcmVkUmVmcmVzaEF0KGlzc3VlZEF0OiBudW1iZXIsIHR0bFNlY29uZHM6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IGxpZmVNcyA9IHR0bFNlY29uZHMgKiAxMDAwO1xuICBjb25zdCBqaXR0ZXIgPSAoTWF0aC5yYW5kb20oKSAqIDIgLSAxKSAqIFJFRlJFU0hfSklUVEVSX0ZSQUNUSU9OO1xuICAvLyBDbGFtcCBpbnRvICgwLCAxKSBzbyB0aGUgcmVmcmVzaCBwb2ludCBpcyBhbHdheXMgYmVmb3JlIGV4cGlyeSBhbmQgbmV2ZXIgaW5cbiAgLy8gdGhlIHBhc3QsIHdoYXRldmVyIFRUTCBwbGF0Zm9ybSByZXR1cm5zLlxuICBjb25zdCBmcmFjdGlvbiA9IE1hdGgubWluKDAuOTUsIE1hdGgubWF4KDAuMSwgUkVGUkVTSF9BVF9GUkFDVElPTiArIGppdHRlcikpO1xuICByZXR1cm4gaXNzdWVkQXQgKyBsaWZlTXMgKiBmcmFjdGlvbjtcbn1cblxuLyoqIERyb3AgdGhlIG9sZGVzdCBlbnRyaWVzIG9uY2UgdGhlIGNhY2hlIGlzIG92ZXIgaXRzIGNhcCAoa2V5cyBhcmUgbG9uZy1saXZlZCwgdG9rZW5zIGFyZSBub3QpLiAqL1xuZnVuY3Rpb24gZXZpY3RJZkZ1bGwoKTogdm9pZCB7XG4gIGlmICh0b2tlbkNhY2hlLnNpemUgPD0gTUFYX0NBQ0hFRF9LRVlTKSByZXR1cm47XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGZvciAoY29uc3QgW2hhc2gsIGVudHJ5XSBvZiB0b2tlbkNhY2hlKSB7XG4gICAgaWYgKGVudHJ5LmV4cGlyZXNBdCA8PSBub3cpIHRva2VuQ2FjaGUuZGVsZXRlKGhhc2gpO1xuICB9XG4gIC8vIE1hcCBwcmVzZXJ2ZXMgaW5zZXJ0aW9uIG9yZGVyIOKAlCBkcm9wIGZyb20gdGhlIGZyb250IHVudGlsIGJhY2sgdW5kZXIgdGhlIGNhcC5cbiAgd2hpbGUgKHRva2VuQ2FjaGUuc2l6ZSA+IE1BWF9DQUNIRURfS0VZUykge1xuICAgIGNvbnN0IG9sZGVzdCA9IHRva2VuQ2FjaGUua2V5cygpLm5leHQoKTtcbiAgICBpZiAob2xkZXN0LmRvbmUpIGJyZWFrO1xuICAgIHRva2VuQ2FjaGUuZGVsZXRlKG9sZGVzdC52YWx1ZSk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIEV4Y2hhbmdlUmVzcG9uc2Uge1xuICBzdWNjZXNzPzogYm9vbGVhbjtcbiAgZGF0YT86IHsgYWNjZXNzVG9rZW4/OiBzdHJpbmc7IGV4cGlyZXNJbj86IG51bWJlciB9O1xufVxuXG4vKiogT25lIHJlYWwgcm91bmQtdHJpcCB0byBwbGF0Zm9ybS4gVGhyb3dzIHRoZSB0d28gdHlwZWQgZXJyb3JzIGFib3ZlLiAqL1xuYXN5bmMgZnVuY3Rpb24gcGVyZm9ybUV4Y2hhbmdlKGtleTogc3RyaW5nLCBoYXNoOiBzdHJpbmcpOiBQcm9taXNlPENhY2hlRW50cnk+IHtcbiAgY29uc3QgY2xpZW50ID0gcGxhdGZvcm1DbGllbnQoKTtcbiAgbGV0IHN0YXR1czogbnVtYmVyO1xuICBsZXQgYm9keTogRXhjaGFuZ2VSZXNwb25zZTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBjbGllbnQucG9zdDxFeGNoYW5nZVJlc3BvbnNlPignL2F1dGgvdG9rZW4vZXhjaGFuZ2UnLCB7IGtleSB9LCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEF1dGhvcml6YXRpb246IGdldFNlcnZpY2VBdXRoSGVhZGVyKHsgc2VydmljZU5hbWUsIHJvbGU6ICdtZW1iZXInLCBvcmdJZDogU1lTVEVNX09SR19JRCB9KSxcbiAgICAgIH0sXG4gICAgICAvLyBUaGUgZXhjaGFuZ2UgaXMgYSBwdXJlIHJlYWQgb2YgdGhlIGtleSByZWNvcmQgcGx1cyBhIHRva2VuIG1pbnQg4oCUIHNhZmUgdG9cbiAgICAgIC8vIHJldHJ5LCBhbmQgYSBsb3N0IHJldHJ5IG9ubHkgY29zdHMgb25lIGV4dHJhIG1pbnQuXG4gICAgICBpZGVtcG90ZW50OiB0cnVlLFxuICAgIH0pO1xuICAgIHN0YXR1cyA9IHJlcy5zdGF0dXNDb2RlO1xuICAgIGJvZHkgPSByZXMuYm9keTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfdG90YWwnLCB7IHJlc3VsdDogJ3VuYXZhaWxhYmxlJyB9KTtcbiAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9mYWlsdXJlc190b3RhbCcsIHsgcmVhc29uOiAndW5hdmFpbGFibGUnIH0pO1xuICAgIGxvZ2dlci53YXJuKCdBY2Nlc3Mta2V5IGV4Y2hhbmdlIGZhaWxlZCB0byByZWFjaCBwbGF0Zm9ybScsIHtcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgICB0aHJvdyBuZXcgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yKCk7XG4gIH1cblxuICBpZiAoc3RhdHVzID09PSA0MDEgfHwgc3RhdHVzID09PSA0MDMgfHwgc3RhdHVzID09PSA0MDAgfHwgc3RhdHVzID09PSA0MDQpIHtcbiAgICByZWplY3Rpb25DYWNoZS5zZXQoaGFzaCwgRGF0ZS5ub3coKSArIE5FR0FUSVZFX1RUTF9NUyk7XG4gICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfdG90YWwnLCB7IHJlc3VsdDogJ3JlamVjdGVkJyB9KTtcbiAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9mYWlsdXJlc190b3RhbCcsIHsgcmVhc29uOiAncmVqZWN0ZWQnIH0pO1xuICAgIHRocm93IG5ldyBBcGlLZXlSZWplY3RlZEVycm9yKCk7XG4gIH1cblxuICBjb25zdCBhY2Nlc3NUb2tlbiA9IGJvZHk/LmRhdGE/LmFjY2Vzc1Rva2VuO1xuICBpZiAoc3RhdHVzID49IDQwMCB8fCB0eXBlb2YgYWNjZXNzVG9rZW4gIT09ICdzdHJpbmcnIHx8IGFjY2Vzc1Rva2VuLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIDQyOSBhbmQgNXh4IGxhbmQgaGVyZTogcGxhdGZvcm0gaXMgdXAgYnV0IGNhbid0IGFuc3dlciByaWdodCBub3csIHdoaWNoIGlzXG4gICAgLy8gXCJ1bmtub3duXCIsIG5vdCBcImludmFsaWRcIiDigJQgbmV2ZXIgY2FjaGUgaXQgYXMgYSByZWplY3Rpb24uXG4gICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfdG90YWwnLCB7IHJlc3VsdDogJ3VuYXZhaWxhYmxlJyB9KTtcbiAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9mYWlsdXJlc190b3RhbCcsIHsgcmVhc29uOiBzdGF0dXMgPT09IDQyOSA/ICd0aHJvdHRsZWQnIDogJ3NlcnZlcl9lcnJvcicgfSk7XG4gICAgdGhyb3cgbmV3IEFwaUtleUV4Y2hhbmdlVW5hdmFpbGFibGVFcnJvcigpO1xuICB9XG5cbiAgY29uc3QgdHRsU2Vjb25kcyA9IHR5cGVvZiBib2R5Py5kYXRhPy5leHBpcmVzSW4gPT09ICdudW1iZXInICYmIGJvZHkuZGF0YS5leHBpcmVzSW4gPiAwXG4gICAgPyBib2R5LmRhdGEuZXhwaXJlc0luXG4gICAgOiA2MDtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZW50cnk6IENhY2hlRW50cnkgPSB7XG4gICAgdG9rZW46IGFjY2Vzc1Rva2VuLFxuICAgIGV4cGlyZXNBdDogbm93ICsgdHRsU2Vjb25kcyAqIDEwMDAsXG4gICAgcmVmcmVzaEF0OiBqaXR0ZXJlZFJlZnJlc2hBdChub3csIHR0bFNlY29uZHMpLFxuICB9O1xuICB0b2tlbkNhY2hlLnNldChoYXNoLCBlbnRyeSk7XG4gIHJlamVjdGlvbkNhY2hlLmRlbGV0ZShoYXNoKTtcbiAgZXZpY3RJZkZ1bGwoKTtcbiAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfdG90YWwnLCB7IHJlc3VsdDogJ3N1Y2Nlc3MnIH0pO1xuICByZXR1cm4gZW50cnk7XG59XG5cbi8qKiBFeGNoYW5nZSwgc2hhcmluZyBhIHNpbmdsZSBpbi1mbGlnaHQgcm91bmQtdHJpcCBwZXIga2V5LiAqL1xuZnVuY3Rpb24gZXhjaGFuZ2VPbmNlKGtleTogc3RyaW5nLCBoYXNoOiBzdHJpbmcpOiBQcm9taXNlPENhY2hlRW50cnk+IHtcbiAgY29uc3QgcGVuZGluZyA9IGluRmxpZ2h0LmdldChoYXNoKTtcbiAgaWYgKHBlbmRpbmcpIHJldHVybiBwZW5kaW5nO1xuICBjb25zdCBwcm9taXNlID0gcGVyZm9ybUV4Y2hhbmdlKGtleSwgaGFzaCkuZmluYWxseSgoKSA9PiBpbkZsaWdodC5kZWxldGUoaGFzaCkpO1xuICBpbkZsaWdodC5zZXQoaGFzaCwgcHJvbWlzZSk7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG4vKipcbiAqIFRoZSBKV1QgZm9yIGBrZXlgLCBmcm9tIGNhY2hlIHdoZW4gcG9zc2libGUuIFRocm93cyB7QGxpbmsgQXBpS2V5UmVqZWN0ZWRFcnJvcn1cbiAqIHdoZW4gcGxhdGZvcm0gcmVmdXNlZCB0aGUga2V5IGFuZCB7QGxpbmsgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yfSB3aGVuXG4gKiBpdCBjb3VsZCBub3QgYmUgYXNrZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGNoYW5nZUFwaUtleShrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGhhc2ggPSBoYXNoQXBpS2V5KGtleSk7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgY29uc3QgcmVqZWN0ZWRVbnRpbCA9IHJlamVjdGlvbkNhY2hlLmdldChoYXNoKTtcbiAgaWYgKHJlamVjdGVkVW50aWwgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChyZWplY3RlZFVudGlsID4gbm93KSB7XG4gICAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9jYWNoZV90b3RhbCcsIHsgcmVzdWx0OiAncmVqZWN0ZWQnIH0pO1xuICAgICAgdGhyb3cgbmV3IEFwaUtleVJlamVjdGVkRXJyb3IoKTtcbiAgICB9XG4gICAgcmVqZWN0aW9uQ2FjaGUuZGVsZXRlKGhhc2gpO1xuICB9XG5cbiAgY29uc3QgY2FjaGVkID0gdG9rZW5DYWNoZS5nZXQoaGFzaCk7XG4gIGlmIChjYWNoZWQgJiYgY2FjaGVkLmV4cGlyZXNBdCA+IG5vdykge1xuICAgIGlmIChjYWNoZWQucmVmcmVzaEF0IDw9IG5vdyAmJiAhaW5GbGlnaHQuaGFzKGhhc2gpKSB7XG4gICAgICAvLyBFYXJseSByZWZyZXNoOiB3YXJtIHRoZSBjYWNoZSBXSVRIT1VUIG1ha2luZyB0aGlzIHJlcXVlc3Qgd2FpdC4gQSBmYWlsZWRcbiAgICAgIC8vIGJhY2tncm91bmQgcmVmcmVzaCBpcyBub3QgdGhpcyByZXF1ZXN0J3MgcHJvYmxlbSDigJQgdGhlIGNhY2hlZCB0b2tlbiBpc1xuICAgICAgLy8gc3RpbGwgdmFsaWQsIGFuZCB0aGUgbmV4dCByZXF1ZXN0IHBhc3QgZXhwaXJ5IGV4Y2hhbmdlcyBpbmxpbmUuXG4gICAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9jYWNoZV90b3RhbCcsIHsgcmVzdWx0OiAncmVmcmVzaCcgfSk7XG4gICAgICB2b2lkIGV4Y2hhbmdlT25jZShrZXksIGhhc2gpLmNhdGNoKCgpID0+IHsgLyogbG9nZ2VkICsgY291bnRlZCBpbiBwZXJmb3JtRXhjaGFuZ2UgKi8gfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX2NhY2hlX3RvdGFsJywgeyByZXN1bHQ6ICdoaXQnIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVkLnRva2VuO1xuICB9XG5cbiAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfY2FjaGVfdG90YWwnLCB7IHJlc3VsdDogJ21pc3MnIH0pO1xuICByZXR1cm4gKGF3YWl0IGV4Y2hhbmdlT25jZShrZXksIGhhc2gpKS50b2tlbjtcbn1cblxuLyoqXG4gKiBEcm9wIGV2ZXJ5IGNhY2hlZCBleGNoYW5nZS4gRm9yIHRlc3RzIGFuZCBmb3IgYSBwcm9jZXNzIHRoYXQgd2FudHMgdG8gZm9yY2VcbiAqIHJlLXZhbGlkYXRpb247IHByb2R1Y3Rpb24gcmVsaWVzIG9uIHRoZSBUVExzIGFib3ZlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRBcGlLZXlFeGNoYW5nZUNhY2hlKCk6IHZvaWQge1xuICB0b2tlbkNhY2hlLmNsZWFyKCk7XG4gIHJlamVjdGlvbkNhY2hlLmNsZWFyKCk7XG4gIGluRmxpZ2h0LmNsZWFyKCk7XG59XG4iXX0=
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWtleS1leGNoYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9hcGkta2V5LWV4Y2hhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUVILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUVoRCx1RkFBdUY7QUFDdkYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBRTdCLHdEQUF3RDtBQUN4RCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFFL0Isa0ZBQWtGO0FBQ2xGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBRWpDOzsyREFFMkQ7QUFDM0QsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFFcEMsaUZBQWlGO0FBQ2pGLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxLQUFLO0lBQzVDLFlBQVksT0FBTyxHQUFHLDJDQUEyQztRQUMvRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO0lBQ3BDLENBQUM7Q0FDRjtBQUVELHVGQUF1RjtBQUN2RixNQUFNLE9BQU8sOEJBQStCLFNBQVEsS0FBSztJQUN2RCxZQUFZLE9BQU8sR0FBRyxvREFBb0Q7UUFDeEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxnQ0FBZ0MsQ0FBQztJQUMvQyxDQUFDO0NBQ0Y7QUFXRCx1RkFBdUY7QUFDdkYsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQXNCLENBQUM7QUFDakQsaUZBQWlGO0FBQ2pGLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0FBQ2pELGtGQUFrRjtBQUNsRixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBK0IsQ0FBQztBQUV4RCwwRUFBMEU7QUFDMUUsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksU0FBUyxDQUFDO0FBRXhEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsNEJBQTRCLENBQUMsSUFBWTtJQUN2RCxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLENBQUM7QUFFRCxpRkFBaUY7QUFDakYsU0FBUyxjQUFjO0lBQ3JCLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQztRQUM1QixHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUM7UUFDOUIsT0FBTyxFQUFFLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7S0FDakUsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELHlGQUF5RjtBQUN6RixTQUFTLGlCQUFpQixDQUFDLFFBQWdCLEVBQUUsVUFBa0I7SUFDN0QsTUFBTSxNQUFNLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQztJQUNqQyxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsdUJBQXVCLENBQUM7SUFDakUsOEVBQThFO0lBQzlFLDJDQUEyQztJQUMzQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdFLE9BQU8sUUFBUSxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDdEMsQ0FBQztBQUVELG9HQUFvRztBQUNwRyxTQUFTLFdBQVc7SUFDbEIsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGVBQWU7UUFBRSxPQUFPO0lBQy9DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2QixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdkMsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLEdBQUc7WUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCxnRkFBZ0Y7SUFDaEYsT0FBTyxVQUFVLENBQUMsSUFBSSxHQUFHLGVBQWUsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QyxJQUFJLE1BQU0sQ0FBQyxJQUFJO1lBQUUsTUFBTTtRQUN2QixVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0FBQ0gsQ0FBQztBQU9ELDBFQUEwRTtBQUMxRSxLQUFLLFVBQVUsZUFBZSxDQUFDLEdBQVcsRUFBRSxJQUFZO0lBQ3RELE1BQU0sTUFBTSxHQUFHLGNBQWMsRUFBRSxDQUFDO0lBQ2hDLElBQUksTUFBYyxDQUFDO0lBQ25CLElBQUksSUFBc0IsQ0FBQztJQUMzQixJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQW1CLHNCQUFzQixFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDL0UsT0FBTyxFQUFFO2dCQUNQLGFBQWEsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsQ0FBQzthQUMzRjtZQUNELDRFQUE0RTtZQUM1RSxxREFBcUQ7WUFDckQsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDeEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDbEIsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixXQUFXLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNqRSxXQUFXLENBQUMsaUNBQWlDLEVBQUUsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUMxRSxNQUFNLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxFQUFFO1lBQzFELEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO1NBQ3pCLENBQUMsQ0FBQztRQUNILE1BQU0sSUFBSSw4QkFBOEIsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUN6RSxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUM7UUFDdkQsV0FBVyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDOUQsV0FBVyxDQUFDLGlDQUFpQyxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDdkUsTUFBTSxJQUFJLG1CQUFtQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDO0lBQzVDLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqRiw2RUFBNkU7UUFDN0UsNERBQTREO1FBQzVELFdBQVcsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLFdBQVcsQ0FBQyxpQ0FBaUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDMUcsTUFBTSxJQUFJLDhCQUE4QixFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLE9BQU8sSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUM7UUFDckYsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztRQUNyQixDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1AsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLE1BQU0sS0FBSyxHQUFlO1FBQ3hCLEtBQUssRUFBRSxXQUFXO1FBQ2xCLFNBQVMsRUFBRSxHQUFHLEdBQUcsVUFBVSxHQUFHLElBQUk7UUFDbEMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUM7S0FDOUMsQ0FBQztJQUNGLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVCLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsV0FBVyxFQUFFLENBQUM7SUFDZCxXQUFXLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM3RCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCwrREFBK0Q7QUFDL0QsU0FBUyxZQUFZLENBQUMsR0FBVyxFQUFFLElBQVk7SUFDN0MsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxJQUFJLE9BQU87UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUM1QixNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEYsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUIsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGNBQWMsQ0FBQyxHQUFXO0lBQzlDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFdkIsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNoQyxJQUFJLGFBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUN4QixXQUFXLENBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUNwRSxNQUFNLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ3JDLElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbkQsMkVBQTJFO1lBQzNFLHlFQUF5RTtZQUN6RSxrRUFBa0U7WUFDbEUsV0FBVyxDQUFDLDhCQUE4QixFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDbkUsS0FBSyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBNkMsQ0FBQyxDQUFDLENBQUM7UUFDMUYsQ0FBQzthQUFNLENBQUM7WUFDTixXQUFXLENBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXLENBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNoRSxPQUFPLENBQUMsTUFBTSxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQy9DLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQixjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkIsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUcmFkZSBhbiBvcGFxdWUgYWNjZXNzIGtleSBmb3IgYSBzaG9ydC1saXZlZCBKV1QsIG9uY2UsIGFuZCBjYWNoZSBpdC5cbiAqXG4gKiBPbmx5IHBsYXRmb3JtLCBiaWxsaW5nIGFuZCBxdW90YSBoYXZlIE1vbmdvREIsIHNvIHRoZSBzdGF0ZWxlc3Mgc2VydmljZXNcbiAqIGNhbm5vdCBsb29rIHVwIGEga2V5IGhhc2gg4oCUIGFuZCBhc2tpbmcgcGxhdGZvcm0gdG8gdmFsaWRhdGUgRVZFUlkgcmVxdWVzdFxuICogd291bGQgcHV0IGl0IG9uIHRoZSBob3QgcGF0aCBvZiB0aGUgd2hvbGUgZmxlZXQuIEluc3RlYWQgdGhpcyBtb2R1bGUgZG9lcyB0aGVcbiAqIGV4Y2hhbmdlIG9uY2UgcGVyIGtleSAoYFBPU1QgL2F1dGgvdG9rZW4vZXhjaGFuZ2VgKSBhbmQgY2FjaGVzIHRoZSByZXR1cm5lZFxuICogSldUIGluLXByb2Nlc3MgdW50aWwgaXQgZXhwaXJlcywgc28gYHJlcXVpcmVBdXRoYCBvbmx5IGV2ZXIgdmVyaWZpZXMgYSBKV1QuXG4gKlxuICogUHJvcGVydGllcyB0aGF0IG1hdHRlcjpcbiAqXG4gKiAtICoqUmV2b2NhdGlvbiBsYXRlbmN5IGlzIGJvdW5kZWQgYnkgdGhlIHRva2VuIFRUTCoqICg1IG1pbnV0ZXMpLiBBIHJldm9rZWRcbiAqICAga2V5IGNhbiBubyBsb25nZXIgYmUgZXhjaGFuZ2VkLCBhbmQgdGhlIGNhY2hlZCB0b2tlbiBpdCBhbHJlYWR5IHByb2R1Y2VkXG4gKiAgIGRpZXMgb24gaXRzIG93bi5cbiAqIC0gKipFYXJseSwgaml0dGVyZWQgcmVmcmVzaC4qKiBUaGUgY2FjaGVkIHRva2VuIGlzIHJlLWV4Y2hhbmdlZCBpbiB0aGVcbiAqICAgYmFja2dyb3VuZCBhdCB+NzUlIG9mIGl0cyBsaWZlICjCsTIwJSBqaXR0ZXIpIHNvIG5vIHJlcXVlc3QgZXZlciBibG9ja3Mgb25cbiAqICAgdGhlIGV4Y2hhbmdlLCBhbmQgYSBmbGVldCBvZiBwb2RzIGhvbGRpbmcgdGhlIHNhbWUga2V5IGRvZXNuJ3Qgc3RhbXBlZGVcbiAqICAgcGxhdGZvcm0gYXQgdGhlIHNhbWUgaW5zdGFudC5cbiAqIC0gKipPbmUgaW4tZmxpZ2h0IGV4Y2hhbmdlIHBlciBrZXkuKiogQ29uY3VycmVudCByZXF1ZXN0cyBzaGFyZSBhIHByb21pc2UuXG4gKiAtICoqU2hvcnQgbmVnYXRpdmUgY2FjaGUuKiogQSBrZXkgcGxhdGZvcm0gcmVqZWN0ZWQgaXMgcmVtZW1iZXJlZCBmb3IgMzBzLCBzb1xuICogICBhIG1pc2NvbmZpZ3VyZWQgY2xpZW50IChvciBhIHNjYW5uZXIpIGNhbid0IHR1cm4gZXZlcnkgcmVxdWVzdCBpbnRvIGFcbiAqICAgcGxhdGZvcm0gcm91bmQtdHJpcC5cbiAqIC0gKipQbGF0Zm9ybSBkb3duIGlzIGEgNTAzLCBuZXZlciBhIDIwMC4qKiBUaGUgY2FsbGVyIG1hcHNcbiAqICAge0BsaW5rIEFwaUtleUV4Y2hhbmdlVW5hdmFpbGFibGVFcnJvcn0gdG8gXCJ0cnkgYWdhaW5cIiwgd2l0aCBhIG1ldHJpYyDigJQgaXQgaXNcbiAqICAgZGVsaWJlcmF0ZWx5IE5PVCBmYWlsLW9wZW46IGFuIHVudmVyaWZpYWJsZSBjcmVkZW50aWFsIGlzIG5vdCBhbiBpZGVudGl0eS5cbiAqXG4gKiBUaGUgZXhjaGFuZ2UgcmVxdWVzdCBpdHNlbGYgY2FycmllcyB0aGlzIHNlcnZpY2UncyBvd24gc2lnbmVkIHNlcnZpY2UgdG9rZW4sXG4gKiB3aGljaCBpcyB3aGF0IGV4ZW1wdHMgaXQgZnJvbSBwbGF0Zm9ybSdzIElQLWtleWVkIGAvYXV0aGAgcmF0ZSBsaW1pdGVyIChldmVyeVxuICogcG9kJ3MgZXhjaGFuZ2VzIHdvdWxkIG90aGVyd2lzZSBzaGFyZSBvbmUgYnVja2V0KSBhbmQgbmFtZXMgdGhlIGNhbGxlciBpblxuICogcGxhdGZvcm0ncyBhdWRpdCB0cmFpbC5cbiAqL1xuXG5pbXBvcnQgeyBnZXRTZXJ2aWNlQXV0aEhlYWRlciB9IGZyb20gJy4uL21pZGRsZXdhcmUvc2VydmljZS10b2tlbnMuanMnO1xuaW1wb3J0IHsgU1lTVEVNX09SR19JRCB9IGZyb20gJy4uL21pZGRsZXdhcmUvc3lzdGVtLW9yZy5qcyc7XG5pbXBvcnQgeyBJbnRlcm5hbEh0dHBDbGllbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9odHRwLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBoYXNoQXBpS2V5IH0gZnJvbSAnLi4vdXRpbHMvYXBpLWtleS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBlbnZJbnQgfSBmcm9tICcuLi91dGlscy9lbnYuanMnO1xuaW1wb3J0IHsgc2VydmljZUVuZHBvaW50IH0gZnJvbSAnLi4vdXRpbHMvc2VydmljZS1yZWdpc3RyeS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignYXBpLWtleS1leGNoYW5nZScpO1xuXG4vKiogTW9zdCBkaXN0aW5jdCBrZXlzIGhlbGQgaW4gdGhlIHByb2Nlc3Mtd2lkZSBjYWNoZSBiZWZvcmUgdGhlIG9sZGVzdCBhcmUgZHJvcHBlZC4gKi9cbmNvbnN0IE1BWF9DQUNIRURfS0VZUyA9IDEwMDA7XG5cbi8qKiBIb3cgbG9uZyBhIHBsYXRmb3JtIFJFSkVDVElPTiBpcyByZW1lbWJlcmVkIChtcykuICovXG5jb25zdCBORUdBVElWRV9UVExfTVMgPSAzMF8wMDA7XG5cbi8qKiBGcmFjdGlvbiBvZiBhIHRva2VuJ3MgbGlmZSBhZnRlciB3aGljaCBhIGJhY2tncm91bmQgcmUtZXhjaGFuZ2UgaXMgc3RhcnRlZC4gKi9cbmNvbnN0IFJFRlJFU0hfQVRfRlJBQ1RJT04gPSAwLjc1O1xuXG4vKiogwrEgaml0dGVyIGFwcGxpZWQgdG8gdGhlIHJlZnJlc2ggcG9pbnQsIGFzIGEgZnJhY3Rpb24gb2YgdGhlIHRva2VuJ3MgbGlmZS5cbiAqICBXaWRlIGVub3VnaCB0byBkZS1zeW5jaHJvbml6ZSBhIGZsZWV0LCBuYXJyb3cgZW5vdWdoIHRvIGxlYXZlIGEgY2xlYXIgdGFpbCBvZlxuICogIHN0aWxsLXZhbGlkIHRva2VuIGFmdGVyIHRoZSBsYXRlc3QgcG9zc2libGUgcmVmcmVzaC4gKi9cbmNvbnN0IFJFRlJFU0hfSklUVEVSX0ZSQUNUSU9OID0gMC4xO1xuXG4vKiogVGhlIGtleSB3YXMgcHJlc2VudGVkIHRvIHBsYXRmb3JtIGFuZCByZWZ1c2VkICh1bmtub3duLCByZXZva2VkLCBleHBpcmVkKS4gKi9cbmV4cG9ydCBjbGFzcyBBcGlLZXlSZWplY3RlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ0FjY2VzcyBrZXkgaXMgaW52YWxpZCwgcmV2b2tlZCBvciBleHBpcmVkJykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdBcGlLZXlSZWplY3RlZEVycm9yJztcbiAgfVxufVxuXG4vKiogUGxhdGZvcm0gY291bGQgbm90IGJlIHJlYWNoZWQgKG9yIGFuc3dlcmVkIDV4eCkg4oCUIHRoZSBrZXkncyB2YWxpZGl0eSBpcyB1bmtub3duLiAqL1xuZXhwb3J0IGNsYXNzIEFwaUtleUV4Y2hhbmdlVW5hdmFpbGFibGVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSA9ICdBY2Nlc3Mta2V5IHZlcmlmaWNhdGlvbiBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZScpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yJztcbiAgfVxufVxuXG5pbnRlcmZhY2UgQ2FjaGVFbnRyeSB7XG4gIC8qKiBUaGUgZXhjaGFuZ2VkIEpXVC4gKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIEVwb2NoIG1zIGF0IHdoaWNoIHRoZSBKV1Qgc3RvcHMgYmVpbmcgdXNhYmxlLiAqL1xuICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgLyoqIEVwb2NoIG1zIGFmdGVyIHdoaWNoIGEgYmFja2dyb3VuZCByZS1leGNoYW5nZSBzaG91bGQgYmUgc3RhcnRlZC4gKi9cbiAgcmVmcmVzaEF0OiBudW1iZXI7XG59XG5cbi8qKiBDYWNoZSBvZiBzdWNjZXNzZnVsIGV4Y2hhbmdlcywga2V5ZWQgYnkgYHNoYTI1NihrZXkpYCDigJQgbmV2ZXIgYnkgdGhlIGtleSBpdHNlbGYuICovXG5jb25zdCB0b2tlbkNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIENhY2hlRW50cnk+KCk7XG4vKiogQ2FjaGUgb2YgcmVqZWN0aW9ucywga2V5ZWQgdGhlIHNhbWUgd2F5OyB2YWx1ZSBpcyB0aGUgZXBvY2ggbXMgaXQgZXhwaXJlcy4gKi9cbmNvbnN0IHJlamVjdGlvbkNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbi8qKiBJbi1mbGlnaHQgZXhjaGFuZ2VzLCBzbyBjb25jdXJyZW50IHJlcXVlc3RzIGZvciBvbmUga2V5IHNoYXJlIGEgcm91bmQtdHJpcC4gKi9cbmNvbnN0IGluRmxpZ2h0ID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8Q2FjaGVFbnRyeT4+KCk7XG5cbi8qKiBUaGUgc2VydmljZSBuYW1lIG1pbnRlZCBpbnRvIHRoZSBleGNoYW5nZSBjYWxsJ3Mgb3duIHNlcnZpY2UgdG9rZW4uICovXG5sZXQgc2VydmljZU5hbWUgPSBwcm9jZXNzLmVudi5TRVJWSUNFX05BTUUgfHwgJ3Vua25vd24nO1xuXG4vKipcbiAqIE5hbWUgdGhpcyBwcm9jZXNzIGluIHRoZSBleGNoYW5nZSBjYWxsJ3Mgc2VydmljZSB0b2tlbi4gQ2FsbGVkIGZyb21cbiAqIGB3aXJlU2VydmljZVNlY3VyaXR5YCBhdCBib290IChhbmQgYnkgdGhlIHBsdWdpbiBzZXJ2aWNlLCB3aGljaCB3aXJlcyBpdHNcbiAqIGJvb3Qgc2VjdXJpdHkgYnkgaGFuZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRBcGlLZXlFeGNoYW5nZVNlcnZpY2VOYW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICBzZXJ2aWNlTmFtZSA9IG5hbWU7XG59XG5cbi8qKiBQbGF0Zm9ybSdzIGluLWNsdXN0ZXIgYWRkcmVzcyDigJQgdGhlIHNhbWUgZW52IHBhaXIgZXZlcnkgb3RoZXIgY2FsbGVyIHVzZXMuICovXG5mdW5jdGlvbiBwbGF0Zm9ybUNsaWVudCgpOiBJbnRlcm5hbEh0dHBDbGllbnQge1xuICByZXR1cm4gbmV3IEludGVybmFsSHR0cENsaWVudCh7XG4gICAgLi4uc2VydmljZUVuZHBvaW50KCdwbGF0Zm9ybScpLFxuICAgIHRpbWVvdXQ6IGVudkludCgnQVBJX0tFWV9FWENIQU5HRV9USU1FT1VUX01TJywgMzAwMCwgeyBtaW46IDEgfSksXG4gIH0pO1xufVxuXG4vKiogVGhlIGVwb2NoIG1zIGF0IHdoaWNoIGEgdG9rZW4gd2l0aCBgdHRsU2Vjb25kc2Agb2YgbGlmZSBzaG91bGQgYmUgcmVmcmVzaGVkIGVhcmx5LiAqL1xuZnVuY3Rpb24gaml0dGVyZWRSZWZyZXNoQXQoaXNzdWVkQXQ6IG51bWJlciwgdHRsU2Vjb25kczogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgbGlmZU1zID0gdHRsU2Vjb25kcyAqIDEwMDA7XG4gIGNvbnN0IGppdHRlciA9IChNYXRoLnJhbmRvbSgpICogMiAtIDEpICogUkVGUkVTSF9KSVRURVJfRlJBQ1RJT047XG4gIC8vIENsYW1wIGludG8gKDAsIDEpIHNvIHRoZSByZWZyZXNoIHBvaW50IGlzIGFsd2F5cyBiZWZvcmUgZXhwaXJ5IGFuZCBuZXZlciBpblxuICAvLyB0aGUgcGFzdCwgd2hhdGV2ZXIgVFRMIHBsYXRmb3JtIHJldHVybnMuXG4gIGNvbnN0IGZyYWN0aW9uID0gTWF0aC5taW4oMC45NSwgTWF0aC5tYXgoMC4xLCBSRUZSRVNIX0FUX0ZSQUNUSU9OICsgaml0dGVyKSk7XG4gIHJldHVybiBpc3N1ZWRBdCArIGxpZmVNcyAqIGZyYWN0aW9uO1xufVxuXG4vKiogRHJvcCB0aGUgb2xkZXN0IGVudHJpZXMgb25jZSB0aGUgY2FjaGUgaXMgb3ZlciBpdHMgY2FwIChrZXlzIGFyZSBsb25nLWxpdmVkLCB0b2tlbnMgYXJlIG5vdCkuICovXG5mdW5jdGlvbiBldmljdElmRnVsbCgpOiB2b2lkIHtcbiAgaWYgKHRva2VuQ2FjaGUuc2l6ZSA8PSBNQVhfQ0FDSEVEX0tFWVMpIHJldHVybjtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgZm9yIChjb25zdCBbaGFzaCwgZW50cnldIG9mIHRva2VuQ2FjaGUpIHtcbiAgICBpZiAoZW50cnkuZXhwaXJlc0F0IDw9IG5vdykgdG9rZW5DYWNoZS5kZWxldGUoaGFzaCk7XG4gIH1cbiAgLy8gTWFwIHByZXNlcnZlcyBpbnNlcnRpb24gb3JkZXIg4oCUIGRyb3AgZnJvbSB0aGUgZnJvbnQgdW50aWwgYmFjayB1bmRlciB0aGUgY2FwLlxuICB3aGlsZSAodG9rZW5DYWNoZS5zaXplID4gTUFYX0NBQ0hFRF9LRVlTKSB7XG4gICAgY29uc3Qgb2xkZXN0ID0gdG9rZW5DYWNoZS5rZXlzKCkubmV4dCgpO1xuICAgIGlmIChvbGRlc3QuZG9uZSkgYnJlYWs7XG4gICAgdG9rZW5DYWNoZS5kZWxldGUob2xkZXN0LnZhbHVlKTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgRXhjaGFuZ2VSZXNwb25zZSB7XG4gIHN1Y2Nlc3M/OiBib29sZWFuO1xuICBkYXRhPzogeyBhY2Nlc3NUb2tlbj86IHN0cmluZzsgZXhwaXJlc0luPzogbnVtYmVyIH07XG59XG5cbi8qKiBPbmUgcmVhbCByb3VuZC10cmlwIHRvIHBsYXRmb3JtLiBUaHJvd3MgdGhlIHR3byB0eXBlZCBlcnJvcnMgYWJvdmUuICovXG5hc3luYyBmdW5jdGlvbiBwZXJmb3JtRXhjaGFuZ2Uoa2V5OiBzdHJpbmcsIGhhc2g6IHN0cmluZyk6IFByb21pc2U8Q2FjaGVFbnRyeT4ge1xuICBjb25zdCBjbGllbnQgPSBwbGF0Zm9ybUNsaWVudCgpO1xuICBsZXQgc3RhdHVzOiBudW1iZXI7XG4gIGxldCBib2R5OiBFeGNoYW5nZVJlc3BvbnNlO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5wb3N0PEV4Y2hhbmdlUmVzcG9uc2U+KCcvYXV0aC90b2tlbi9leGNoYW5nZScsIHsga2V5IH0sIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogZ2V0U2VydmljZUF1dGhIZWFkZXIoeyBzZXJ2aWNlTmFtZSwgcm9sZTogJ21lbWJlcicsIG9yZ0lkOiBTWVNURU1fT1JHX0lEIH0pLFxuICAgICAgfSxcbiAgICAgIC8vIFRoZSBleGNoYW5nZSBpcyBhIHB1cmUgcmVhZCBvZiB0aGUga2V5IHJlY29yZCBwbHVzIGEgdG9rZW4gbWludCDigJQgc2FmZSB0b1xuICAgICAgLy8gcmV0cnksIGFuZCBhIGxvc3QgcmV0cnkgb25seSBjb3N0cyBvbmUgZXh0cmEgbWludC5cbiAgICAgIGlkZW1wb3RlbnQ6IHRydWUsXG4gICAgfSk7XG4gICAgc3RhdHVzID0gcmVzLnN0YXR1c0NvZGU7XG4gICAgYm9keSA9IHJlcy5ib2R5O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV90b3RhbCcsIHsgcmVzdWx0OiAndW5hdmFpbGFibGUnIH0pO1xuICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX2ZhaWx1cmVzX3RvdGFsJywgeyByZWFzb246ICd1bmF2YWlsYWJsZScgfSk7XG4gICAgbG9nZ2VyLndhcm4oJ0FjY2Vzcy1rZXkgZXhjaGFuZ2UgZmFpbGVkIHRvIHJlYWNoIHBsYXRmb3JtJywge1xuICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpLFxuICAgIH0pO1xuICAgIHRocm93IG5ldyBBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3IoKTtcbiAgfVxuXG4gIGlmIChzdGF0dXMgPT09IDQwMSB8fCBzdGF0dXMgPT09IDQwMyB8fCBzdGF0dXMgPT09IDQwMCB8fCBzdGF0dXMgPT09IDQwNCkge1xuICAgIHJlamVjdGlvbkNhY2hlLnNldChoYXNoLCBEYXRlLm5vdygpICsgTkVHQVRJVkVfVFRMX01TKTtcbiAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV90b3RhbCcsIHsgcmVzdWx0OiAncmVqZWN0ZWQnIH0pO1xuICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX2ZhaWx1cmVzX3RvdGFsJywgeyByZWFzb246ICdyZWplY3RlZCcgfSk7XG4gICAgdGhyb3cgbmV3IEFwaUtleVJlamVjdGVkRXJyb3IoKTtcbiAgfVxuXG4gIGNvbnN0IGFjY2Vzc1Rva2VuID0gYm9keT8uZGF0YT8uYWNjZXNzVG9rZW47XG4gIGlmIChzdGF0dXMgPj0gNDAwIHx8IHR5cGVvZiBhY2Nlc3NUb2tlbiAhPT0gJ3N0cmluZycgfHwgYWNjZXNzVG9rZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gNDI5IGFuZCA1eHggbGFuZCBoZXJlOiBwbGF0Zm9ybSBpcyB1cCBidXQgY2FuJ3QgYW5zd2VyIHJpZ2h0IG5vdywgd2hpY2ggaXNcbiAgICAvLyBcInVua25vd25cIiwgbm90IFwiaW52YWxpZFwiIOKAlCBuZXZlciBjYWNoZSBpdCBhcyBhIHJlamVjdGlvbi5cbiAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV90b3RhbCcsIHsgcmVzdWx0OiAndW5hdmFpbGFibGUnIH0pO1xuICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX2ZhaWx1cmVzX3RvdGFsJywgeyByZWFzb246IHN0YXR1cyA9PT0gNDI5ID8gJ3Rocm90dGxlZCcgOiAnc2VydmVyX2Vycm9yJyB9KTtcbiAgICB0aHJvdyBuZXcgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yKCk7XG4gIH1cblxuICBjb25zdCB0dGxTZWNvbmRzID0gdHlwZW9mIGJvZHk/LmRhdGE/LmV4cGlyZXNJbiA9PT0gJ251bWJlcicgJiYgYm9keS5kYXRhLmV4cGlyZXNJbiA+IDBcbiAgICA/IGJvZHkuZGF0YS5leHBpcmVzSW5cbiAgICA6IDYwO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlbnRyeTogQ2FjaGVFbnRyeSA9IHtcbiAgICB0b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgZXhwaXJlc0F0OiBub3cgKyB0dGxTZWNvbmRzICogMTAwMCxcbiAgICByZWZyZXNoQXQ6IGppdHRlcmVkUmVmcmVzaEF0KG5vdywgdHRsU2Vjb25kcyksXG4gIH07XG4gIHRva2VuQ2FjaGUuc2V0KGhhc2gsIGVudHJ5KTtcbiAgcmVqZWN0aW9uQ2FjaGUuZGVsZXRlKGhhc2gpO1xuICBldmljdElmRnVsbCgpO1xuICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV90b3RhbCcsIHsgcmVzdWx0OiAnc3VjY2VzcycgfSk7XG4gIHJldHVybiBlbnRyeTtcbn1cblxuLyoqIEV4Y2hhbmdlLCBzaGFyaW5nIGEgc2luZ2xlIGluLWZsaWdodCByb3VuZC10cmlwIHBlciBrZXkuICovXG5mdW5jdGlvbiBleGNoYW5nZU9uY2Uoa2V5OiBzdHJpbmcsIGhhc2g6IHN0cmluZyk6IFByb21pc2U8Q2FjaGVFbnRyeT4ge1xuICBjb25zdCBwZW5kaW5nID0gaW5GbGlnaHQuZ2V0KGhhc2gpO1xuICBpZiAocGVuZGluZykgcmV0dXJuIHBlbmRpbmc7XG4gIGNvbnN0IHByb21pc2UgPSBwZXJmb3JtRXhjaGFuZ2Uoa2V5LCBoYXNoKS5maW5hbGx5KCgpID0+IGluRmxpZ2h0LmRlbGV0ZShoYXNoKSk7XG4gIGluRmxpZ2h0LnNldChoYXNoLCBwcm9taXNlKTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8qKlxuICogVGhlIEpXVCBmb3IgYGtleWAsIGZyb20gY2FjaGUgd2hlbiBwb3NzaWJsZS4gVGhyb3dzIHtAbGluayBBcGlLZXlSZWplY3RlZEVycm9yfVxuICogd2hlbiBwbGF0Zm9ybSByZWZ1c2VkIHRoZSBrZXkgYW5kIHtAbGluayBBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3J9IHdoZW5cbiAqIGl0IGNvdWxkIG5vdCBiZSBhc2tlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4Y2hhbmdlQXBpS2V5KGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGFzaCA9IGhhc2hBcGlLZXkoa2V5KTtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICBjb25zdCByZWplY3RlZFVudGlsID0gcmVqZWN0aW9uQ2FjaGUuZ2V0KGhhc2gpO1xuICBpZiAocmVqZWN0ZWRVbnRpbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHJlamVjdGVkVW50aWwgPiBub3cpIHtcbiAgICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX2NhY2hlX3RvdGFsJywgeyByZXN1bHQ6ICdyZWplY3RlZCcgfSk7XG4gICAgICB0aHJvdyBuZXcgQXBpS2V5UmVqZWN0ZWRFcnJvcigpO1xuICAgIH1cbiAgICByZWplY3Rpb25DYWNoZS5kZWxldGUoaGFzaCk7XG4gIH1cblxuICBjb25zdCBjYWNoZWQgPSB0b2tlbkNhY2hlLmdldChoYXNoKTtcbiAgaWYgKGNhY2hlZCAmJiBjYWNoZWQuZXhwaXJlc0F0ID4gbm93KSB7XG4gICAgaWYgKGNhY2hlZC5yZWZyZXNoQXQgPD0gbm93ICYmICFpbkZsaWdodC5oYXMoaGFzaCkpIHtcbiAgICAgIC8vIEVhcmx5IHJlZnJlc2g6IHdhcm0gdGhlIGNhY2hlIFdJVEhPVVQgbWFraW5nIHRoaXMgcmVxdWVzdCB3YWl0LiBBIGZhaWxlZFxuICAgICAgLy8gYmFja2dyb3VuZCByZWZyZXNoIGlzIG5vdCB0aGlzIHJlcXVlc3QncyBwcm9ibGVtIOKAlCB0aGUgY2FjaGVkIHRva2VuIGlzXG4gICAgICAvLyBzdGlsbCB2YWxpZCwgYW5kIHRoZSBuZXh0IHJlcXVlc3QgcGFzdCBleHBpcnkgZXhjaGFuZ2VzIGlubGluZS5cbiAgICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX2NhY2hlX3RvdGFsJywgeyByZXN1bHQ6ICdyZWZyZXNoJyB9KTtcbiAgICAgIHZvaWQgZXhjaGFuZ2VPbmNlKGtleSwgaGFzaCkuY2F0Y2goKCkgPT4geyAvKiBsb2dnZWQgKyBjb3VudGVkIGluIHBlcmZvcm1FeGNoYW5nZSAqLyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfY2FjaGVfdG90YWwnLCB7IHJlc3VsdDogJ2hpdCcgfSk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZWQudG9rZW47XG4gIH1cblxuICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9jYWNoZV90b3RhbCcsIHsgcmVzdWx0OiAnbWlzcycgfSk7XG4gIHJldHVybiAoYXdhaXQgZXhjaGFuZ2VPbmNlKGtleSwgaGFzaCkpLnRva2VuO1xufVxuXG4vKipcbiAqIERyb3AgZXZlcnkgY2FjaGVkIGV4Y2hhbmdlLiBGb3IgdGVzdHMgYW5kIGZvciBhIHByb2Nlc3MgdGhhdCB3YW50cyB0byBmb3JjZVxuICogcmUtdmFsaWRhdGlvbjsgcHJvZHVjdGlvbiByZWxpZXMgb24gdGhlIFRUTHMgYWJvdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldEFwaUtleUV4Y2hhbmdlQ2FjaGUoKTogdm9pZCB7XG4gIHRva2VuQ2FjaGUuY2xlYXIoKTtcbiAgcmVqZWN0aW9uQ2FjaGUuY2xlYXIoKTtcbiAgaW5GbGlnaHQuY2xlYXIoKTtcbn1cbiJdfQ==