@pipeline-builder/api-core 5.2.2 → 5.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/lib/constants/ai-providers.d.ts +3 -22
  2. package/lib/constants/ai-providers.js +6 -56
  3. package/lib/errors/app-errors.d.ts +14 -0
  4. package/lib/errors/app-errors.js +21 -1
  5. package/lib/helpers/index.d.ts +1 -0
  6. package/lib/helpers/index.js +2 -1
  7. package/lib/helpers/sse-helpers.d.ts +33 -3
  8. package/lib/helpers/sse-helpers.js +91 -19
  9. package/lib/helpers/support-calendar.d.ts +69 -0
  10. package/lib/helpers/support-calendar.js +179 -0
  11. package/lib/middleware/auth.js +6 -3
  12. package/lib/middleware/deferred-quota-check.d.ts +5 -0
  13. package/lib/middleware/deferred-quota-check.js +33 -0
  14. package/lib/middleware/ecosystem-guard.d.ts +3 -3
  15. package/lib/middleware/ecosystem-guard.js +5 -5
  16. package/lib/middleware/index.d.ts +5 -2
  17. package/lib/middleware/index.js +6 -3
  18. package/lib/middleware/on-behalf.d.ts +37 -0
  19. package/lib/middleware/on-behalf.js +143 -0
  20. package/lib/middleware/permission-gates.d.ts +11 -0
  21. package/lib/middleware/permission-gates.js +7 -1
  22. package/lib/middleware/quota-exempt-routes.d.ts +36 -0
  23. package/lib/middleware/quota-exempt-routes.js +47 -0
  24. package/lib/middleware/route-table.d.ts +104 -0
  25. package/lib/middleware/route-table.js +72 -2
  26. package/lib/middleware/service-tokens.d.ts +8 -0
  27. package/lib/middleware/service-tokens.js +5 -3
  28. package/lib/middleware/step-up.js +11 -1
  29. package/lib/services/ai-call-weight.d.ts +24 -0
  30. package/lib/services/ai-call-weight.js +77 -0
  31. package/lib/services/alert-delivery.d.ts +99 -0
  32. package/lib/services/alert-delivery.js +132 -0
  33. package/lib/services/audit-context.d.ts +105 -0
  34. package/lib/services/audit-context.js +134 -0
  35. package/lib/services/index.d.ts +10 -2
  36. package/lib/services/index.js +10 -2
  37. package/lib/services/org-ai-client.d.ts +61 -0
  38. package/lib/services/org-ai-client.js +112 -0
  39. package/lib/services/pagerduty-inbound.d.ts +101 -0
  40. package/lib/services/pagerduty-inbound.js +195 -0
  41. package/lib/services/pagerduty.d.ts +109 -0
  42. package/lib/services/pagerduty.js +186 -0
  43. package/lib/services/quota-increment-batcher.d.ts +81 -0
  44. package/lib/services/quota-increment-batcher.js +166 -0
  45. package/lib/services/quota.d.ts +158 -14
  46. package/lib/services/quota.js +252 -22
  47. package/lib/services/remote-audit-client.d.ts +44 -1
  48. package/lib/services/remote-audit-client.js +106 -20
  49. package/lib/services/version-vuln-policy.d.ts +174 -0
  50. package/lib/services/version-vuln-policy.js +242 -0
  51. package/lib/types/ai-catalog.d.ts +63 -0
  52. package/lib/types/ai-catalog.js +82 -0
  53. package/lib/types/ask-proposals.js +6 -6
  54. package/lib/types/build-catalog.d.ts +154 -0
  55. package/lib/types/build-catalog.js +158 -0
  56. package/lib/types/common.d.ts +37 -3
  57. package/lib/types/common.js +20 -2
  58. package/lib/types/ecosystem-notifications.d.ts +5 -5
  59. package/lib/types/ecosystem-notifications.js +9 -3
  60. package/lib/types/error-codes.d.ts +13 -6
  61. package/lib/types/error-codes.js +18 -8
  62. package/lib/types/feature-flags.d.ts +71 -1
  63. package/lib/types/feature-flags.js +131 -11
  64. package/lib/types/index.d.ts +6 -4
  65. package/lib/types/index.js +12 -5
  66. package/lib/types/metadata-keys.d.ts +6 -0
  67. package/lib/types/metadata-keys.js +4 -1
  68. package/lib/types/permissions.d.ts +351 -3
  69. package/lib/types/permissions.js +610 -21
  70. package/lib/types/pipeline.d.ts +39 -0
  71. package/lib/types/pipeline.js +57 -1
  72. package/lib/types/plugin-health.d.ts +0 -2
  73. package/lib/types/plugin-health.js +1 -11
  74. package/lib/types/plugin-scan.d.ts +192 -42
  75. package/lib/types/plugin-scan.js +159 -43
  76. package/lib/types/quota-catalog.d.ts +247 -0
  77. package/lib/types/quota-catalog.js +122 -0
  78. package/lib/types/quota-tiers.d.ts +150 -0
  79. package/lib/types/quota-tiers.js +167 -2
  80. package/lib/types/remote-audit-actions.d.ts +1 -1
  81. package/lib/types/remote-audit-actions.js +217 -4
  82. package/lib/types/wire-vocabulary.js +8 -1
  83. package/lib/utils/index.d.ts +1 -1
  84. package/lib/utils/index.js +2 -2
  85. package/lib/utils/response.d.ts +35 -2
  86. package/lib/utils/response.js +42 -3
  87. package/lib/validation/ai-schemas.d.ts +27 -0
  88. package/lib/validation/ai-schemas.js +31 -5
  89. package/lib/validation/plugin-schemas.d.ts +15 -0
  90. package/lib/validation/plugin-schemas.js +28 -1
  91. package/package.json +31 -2
@@ -78,7 +78,19 @@ export declare const AUTH_METHODS: readonly AuthMethod[];
78
78
  * Quota type identifiers.
79
79
  *
80
80
  * - `plugins` / `pipelines` — count of created entities
81
- * - `apiCalls` — generic API call count (read-heavy paths)
81
+ * - `apiCalls` — generic API call count (read-heavy paths) made by PEOPLE in
82
+ * INTERACTIVE SESSIONS. Personal access tokens are NOT here: this entry used
83
+ * to say they were, and {@link meteredQuotaTypeFor} says otherwise.
84
+ * - `automationCalls` — the same metered API calls when the caller is not an
85
+ * interactive session: an ORG SERVICE ACCOUNT
86
+ * (`principalType: 'service_account'` — platform-automation,
87
+ * pipeline-register, reporting-ingest and registry-push keys), a PERSONAL
88
+ * ACCESS KEY (`token_use: 'api_key'`), or any token minted while holding one
89
+ * (`parentKeyId`). Counted INSTEAD of `apiCalls`, never as well, so a
90
+ * self-mutating pipeline doing one plugin lookup per step per run cannot lock
91
+ * its own humans out of the console (see {@link meteredQuotaTypeFor}, which is
92
+ * the authority for the split — `docs/quotas.md` agrees with it). Sized for
93
+ * that traffic per tier.
82
94
  * - `aiCalls` — AI provider invocations (counted separately because each call
83
95
  * has external dollar cost; sized smaller than apiCalls per tier)
84
96
  * - `storageBytes` — registry storage budget per org. Unlike the others
@@ -99,11 +111,27 @@ export declare const AUTH_METHODS: readonly AuthMethod[];
99
111
  * `plugins`: checked at publish-request submit and re-checked at approval;
100
112
  * installs never count.
101
113
  */
102
- export type QuotaType = 'plugins' | 'pipelines' | 'apiCalls' | 'aiCalls' | 'storageBytes' | 'dashboards' | 'alertRules' | 'alertDestinations' | 'idpConfigs' | 'listings';
114
+ export type QuotaType = 'plugins' | 'pipelines' | 'apiCalls' | 'automationCalls' | 'aiCalls' | 'storageBytes' | 'cpuCredits' | 'dashboards' | 'alertRules' | 'alertDestinations' | 'idpConfigs' | 'listings';
103
115
  /**
104
116
  * Valid quota type values.
105
117
  */
106
- export declare const VALID_QUOTA_TYPES: readonly ['plugins', 'pipelines', 'apiCalls', 'aiCalls', 'storageBytes', 'dashboards', 'alertRules', 'alertDestinations', 'idpConfigs', 'listings'];
118
+ export declare const VALID_QUOTA_TYPES: readonly ['plugins', 'pipelines', 'apiCalls', 'automationCalls', 'aiCalls', 'storageBytes', 'cpuCredits', 'dashboards', 'alertRules', 'alertDestinations', 'idpConfigs', 'listings'];
119
+ /**
120
+ * Human label for each quota type, singular — the one spelling every 429 body,
121
+ * notification and dashboard uses ("API call quota reached …").
122
+ *
123
+ * DERIVED from `types/quota-catalog.ts`, which is the one place a quota type's
124
+ * display facts live and the one the browser imports directly. This stays here
125
+ * as the server-side name because every service already reads it from the
126
+ * barrel; it is a projection of the catalog, not a second copy of it.
127
+ */
128
+ export declare const QUOTA_TYPE_LABELS: Readonly<Record<QuotaType, string>>;
129
+ /**
130
+ * Where a person goes to raise a limit. Relative on purpose: the dashboard and
131
+ * the API share an origin behind nginx, and a CLI / Lambda that renders a 429
132
+ * prefixes it with the platform URL it already talks to.
133
+ */
134
+ export declare const QUOTA_UPGRADE_PATH = "/dashboard/billing";
107
135
  /**
108
136
  * Type guard to check if a value is a valid QuotaType.
109
137
  *
@@ -337,6 +365,12 @@ export interface JwtPayload {
337
365
  * every token that names it here or as its `jti`.
338
366
  */
339
367
  parentKeyId?: string;
368
+ /**
369
+ * SERVICE tokens only: this audit delivery may record an `affectedOrgId`
370
+ * outside the token's org (see `ServiceTokenOptions.auditCrossOrg`). Honoured
371
+ * by platform's `/audit/events` ingest alone.
372
+ */
373
+ auditCrossOrg?: true;
340
374
  /**
341
375
  * The user's ACCESS version at the moment this token was issued: the hard
342
376
  * `tokenVersion` (deactivate / password change / logout-all — clears slots)
@@ -1,5 +1,6 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
+ import { QUOTA_CATALOG } from './quota-catalog.js';
3
4
  /**
4
5
  * Runtime catalog of {@link TokenScope} (a union is erased at runtime). This is
5
6
  * the ONE allowlist every mint path validates against — platform's key/token
@@ -14,10 +15,27 @@ export const AUTH_METHODS = ['pwd', 'oauth', 'sso', 'webauthn', 'stepup', 'mfa']
14
15
  * Valid quota type values.
15
16
  */
16
17
  export const VALID_QUOTA_TYPES = [
17
- 'plugins', 'pipelines', 'apiCalls', 'aiCalls', 'storageBytes',
18
+ 'plugins', 'pipelines', 'apiCalls', 'automationCalls', 'aiCalls', 'storageBytes',
19
+ 'cpuCredits',
18
20
  'dashboards', 'alertRules', 'alertDestinations', 'idpConfigs',
19
21
  'listings',
20
22
  ];
23
+ /**
24
+ * Human label for each quota type, singular — the one spelling every 429 body,
25
+ * notification and dashboard uses ("API call quota reached …").
26
+ *
27
+ * DERIVED from `types/quota-catalog.ts`, which is the one place a quota type's
28
+ * display facts live and the one the browser imports directly. This stays here
29
+ * as the server-side name because every service already reads it from the
30
+ * barrel; it is a projection of the catalog, not a second copy of it.
31
+ */
32
+ export const QUOTA_TYPE_LABELS = Object.fromEntries(Object.entries(QUOTA_CATALOG).map(([type, meta]) => [type, meta.label]));
33
+ /**
34
+ * Where a person goes to raise a limit. Relative on purpose: the dashboard and
35
+ * the API share an origin behind nginx, and a CLI / Lambda that renders a 429
36
+ * prefixes it with the platform URL it already talks to.
37
+ */
38
+ export const QUOTA_UPGRADE_PATH = '/dashboard/billing';
21
39
  /**
22
40
  * Type guard to check if a value is a valid QuotaType.
23
41
  *
@@ -49,4 +67,4 @@ export function isValidQuotaType(value) {
49
67
  export function effectiveRootOrgId(payload) {
50
68
  return payload.rootOrganizationId ?? payload.organizationId;
51
69
  }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBMkJ0Qzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUEwQixDQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQWlEakcsa0ZBQWtGO0FBQ2xGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBNkIsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDaEcsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUF3QixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNyRSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQTBCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQW1DeEc7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRztJQUMvQixTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsY0FBYztJQUM3RCxZQUFZLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFlBQVk7SUFDN0QsVUFBVTtDQUNGLENBQUM7QUFFWDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBYztJQUM3QyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsS0FBa0IsQ0FBQyxDQUFDO0FBQ3JGLENBQUM7QUFxUEQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLE9BQWtFO0lBRWxFLE9BQU8sT0FBTyxDQUFDLGtCQUFrQixJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUM7QUFDOUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFBlcm1pc3Npb24gfSBmcm9tICcuL3Blcm1pc3Npb25zLmpzJztcbmltcG9ydCB0eXBlIHsgUXVvdGFUaWVyIH0gZnJvbSAnLi9xdW90YS10aWVycy5qcyc7XG5cbi8qKlxuICogQ2FwYWJpbGl0eSBzY29wZSBjYXRhbG9nIGZvciBtYWNoaW5lL2F1dG9tYXRpb24gdG9rZW5zLiBBIHNjb3BlZCB0b2tlbiBjYXJyaWVzXG4gKiBleGFjdGx5IG9uZSBvZiB0aGVzZSBpbnN0ZWFkIG9mIHJvbGUtYmFzZWQgcGVybWlzc2lvbnM7IGVuZHBvaW50cyB0aGF0IGFjY2VwdCBhXG4gKiBzY29wZWQgaWRlbnRpdHkgY2hlY2sgaXQgdmlhIGBoYXNTY29wZWAuIEtlcHQgYSBjbG9zZWQgdW5pb24gKG1pcnJvcmluZ1xuICoge0BsaW5rIFBlcm1pc3Npb259KSBzbyBhIHR5cG8gb24gZWl0aGVyIHRoZSBtaW50IG9yIHRoZSBjaGVjayBzaWRlIGlzIGEgY29tcGlsZVxuICogZXJyb3IuIEFkZCBhIHZhbHVlIGhlcmUgd2hlbiBpbnRyb2R1Y2luZyBhIG5ldyBzY29wZWQtdG9rZW4gc3VyZmFjZS5cbiAqXG4gKiAtIGByZXBvcnRpbmc6aW5nZXN0YCDigJQgdGhlIEFXUyBldmVudC1pbmdlc3Rpb24gTGFtYmRhJ3Mgd3JpdGVzIChgL3JlcG9ydHMvZXZlbnRzYCxcbiAqICAgYC9yZXBvcnRzL2luZ2VzdC1oZWFsdGhgKSBhbmQgdGhlIGluY2lkZW50IHdlYmhvb2suXG4gKiAtIGByZWdpc3RyeTpwdXNoYCAgICDigJQgYGRvY2tlciBwdXNoYCBpbnRvIHRoZSBvd25pbmcgb3JnJ3Mgb3duIG5hbWVzcGFjZSB2aWFcbiAqICAgaW1hZ2UtcmVnaXN0cnkncyBgL3Rva2VuYCBlbmRwb2ludC4gR3JhbnRzIHRoZSByYXctaW1hZ2Ugd3JpdGUgdGhhdFxuICogICBgcGx1Z2luczp3cml0ZWAgZ3JhbnRzIGEgcGVyc29uLCBhbmQgbm90aGluZyBlbHNlOiBhIHNjb3BlZCB0b2tlbiBjYXJyaWVzIG5vXG4gKiAgIHBlcm1pc3Npb25zLCBzbyBpdCBjYW4gbmVpdGhlciByZWFkIHRoZSBBUEkgbm9yIHB1c2ggb3V0c2lkZSBpdHMgb3JnLlxuICogLSBgc2NpbWAgICAgICAgICAgICAg4oCUIGFuIGlkZW50aXR5IHByb3ZpZGVyJ3MgU0NJTSAyLjAgY2xpZW50ICgzYikgZHJpdmluZ1xuICogICBgL3NjaW0vdjIvVXNlcnNgIGFuZCBgL3NjaW0vdjIvR3JvdXBzYCBmb3IgdGhlIGtleSdzIE9XTiBvcmcuIEl0IHByb3Zpc2lvbnNcbiAqICAgYW5kIGRlYWN0aXZhdGVzIG1lbWJlcnNoaXBzIGFuZCBtb3ZlcyBwZW9wbGUgYmV0d2VlbiBkaXJlY3RvcnkgZ3JvdXBzOyBpdFxuICogICBjYW4gbmV2ZXIgcmVhZCBvciB3cml0ZSBhbnl0aGluZyBlbHNlLCBhbmQg4oCUIGJlY2F1c2UgYSBzY29wZWQgdG9rZW4gY2Fycmllc1xuICogICBubyBwZXJtaXNzaW9ucyDigJQgaXQgY2Fubm90IGF1dGhvciB0aGUgZ3JvdXAg4oaSIFJvbGUgcnVsZXMgaXRzIHN5bmNzIHJlc29sdmVcbiAqICAgdGhyb3VnaC4gT25seSBhIHNlcnZpY2UtYWNjb3VudCBrZXkgbWF5IGNhcnJ5IGl0OyBhIHBlcnNvbidzIHRva2VuIG5ldmVyIGRvZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFRva2VuU2NvcGUgPSAncmVwb3J0aW5nOmluZ2VzdCcgfCAncmVnaXN0cnk6cHVzaCcgfCAnc2NpbSc7XG5cbi8qKlxuICogUnVudGltZSBjYXRhbG9nIG9mIHtAbGluayBUb2tlblNjb3BlfSAoYSB1bmlvbiBpcyBlcmFzZWQgYXQgcnVudGltZSkuIFRoaXMgaXNcbiAqIHRoZSBPTkUgYWxsb3dsaXN0IGV2ZXJ5IG1pbnQgcGF0aCB2YWxpZGF0ZXMgYWdhaW5zdCDigJQgcGxhdGZvcm0ncyBrZXkvdG9rZW5cbiAqIGlzc3VlIHJvdXRlcyBpbmNsdWRlZCDigJQgc28gYSBuZXcgc2NvcGUgaXMgYWRkZWQgaW4gZXhhY3RseSBvbmUgcGxhY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBUT0tFTl9TQ09QRVM6IHJlYWRvbmx5IFRva2VuU2NvcGVbXSA9IFsncmVwb3J0aW5nOmluZ2VzdCcsICdyZWdpc3RyeTpwdXNoJywgJ3NjaW0nXTtcblxuLyoqXG4gKiBXaGF0IGtpbmQgb2YgcHJpbmNpcGFsIGEgdG9rZW4gc3BlYWtzIGZvci4gQXV0aCBkZWNpc2lvbnMgYnJhbmNoIG9uIHRoaXMgY2xhaW1cbiAqIOKAlCBuZXZlciBvbiB0aGUgc2hhcGUgb2YgYHN1YmAgb3Igb24gd2hpY2ggb3B0aW9uYWwgY2xhaW1zIGhhcHBlbiB0byBiZSBwcmVzZW50LlxuICpcbiAqIC0gYHVzZXJgICAgICAgICAgICAg4oCUIGEgcGVyc29uIChzZXNzaW9uLCBtYWNoaW5lIHNlc3Npb24sIFBBVCBvciBpbXBlcnNvbmF0aW9uKS5cbiAqIC0gYHNlcnZpY2VfYWNjb3VudGAg4oCUIGEgbm9uLWh1bWFuIGFjY291bnQgb3duZWQgYnkgT05FIG9yZywgaG9sZGluZyBvcmcgUm9sZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICBhbmQgYXV0aGVudGljYXRpbmcgd2l0aCBhIGBwYl9zYV/igKZgIGtleSBleGNoYW5nZWQgYXRcbiAqICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybS4gTmV2ZXIgc2F0aXNmaWVzIGFuIGFzc3VyYW5jZS9zdGVwLXVwIGdhdGUuXG4gKiAtIGBzZXJ2aWNlYCAgICAgICAgIOKAlCBhbiBpbnRlcm5hbCBQaXBlbGluZSBCdWlsZGVyIHNlcnZpY2UgKHtAbGluayBzaWduU2VydmljZVRva2VufSkuXG4gKi9cbmV4cG9ydCB0eXBlIFByaW5jaXBhbFR5cGUgPSAndXNlcicgfCAnc2VydmljZV9hY2NvdW50JyB8ICdzZXJ2aWNlJztcblxuLyoqXG4gKiBIb3cgYSB0b2tlbiBpcyB1c2VkLiBgYWNjZXNzYCBpcyBhIHNlc3Npb24tc3R5bGUgYWNjZXNzIHRva2VuIChpbnRlcmFjdGl2ZSxcbiAqIG1hY2hpbmUtc2Vzc2lvbiBvciBzZXJ2aWNlKTsgYGFwaV9rZXlgIGlzIGEgc3RhbmRhbG9uZSBjcmVkZW50aWFsIHRyYWNrZWQgYnlcbiAqIGl0cyBvd24gcmVjb3JkIOKAlCBhIFBlcnNvbmFsIEFjY2VzcyBUb2tlbiBvciBhIHNlcnZpY2UtYWNjb3VudCBrZXksIG5hbWVkIGJ5XG4gKiBganRpYC5cbiAqL1xuZXhwb3J0IHR5cGUgVG9rZW5Vc2UgPSAnYWNjZXNzJyB8ICdhcGlfa2V5JztcblxuLyoqXG4gKiBBdXRoZW50aWNhdGlvbiBtZXRob2RzIChgYW1yYCwgUkZDIDgxNzYgc3R5bGUpIHRoYXQgZXN0YWJsaXNoZWQgYSB1c2VyJ3NcbiAqIHNlc3Npb24uIGBwd2RgIHBhc3N3b3JkIHNpZ24taW47IGBvYXV0aGAgc29jaWFsIHNpZ24taW4gKEdvb2dsZSwgR2l0SHViIOKApik7XG4gKiBgc3NvYCBwZXItb3JnIE9JREMgc2luZ2xlIHNpZ24tb247IGB3ZWJhdXRobmAgYSBwYXNza2V5IChXZWJBdXRobiBhc3NlcnRpb25cbiAqIHdpdGggdXNlciB2ZXJpZmljYXRpb24pOyBgc3RlcHVwYCBhIHN0ZXAtdXAgcmUtdmVyaWZpY2F0aW9uIHRva2VuOyBgbWZhYCBhXG4gKiBzZWNvbmQgZmFjdG9yIHdhcyBwcmVzZW50ZWQgYXMgd2VsbCDigJQgdG9kYXkgYW4gYXV0aGVudGljYXRvci1hcHAgY29kZSAoVE9UUClcbiAqIG9yIG9uZSBvZiBpdHMgcmVjb3ZlcnkgY29kZXMsIHNvIGl0IGFwcGVhcnMgQUxPTkdTSURFIHRoZSBtZXRob2QgdGhhdFxuICogaWRlbnRpZmllZCB0aGUgdXNlciAoYFsncHdkJywgJ21mYSddYCksIG5ldmVyIG9uIGl0cyBvd24uXG4gKi9cbmV4cG9ydCB0eXBlIEF1dGhNZXRob2QgPSAncHdkJyB8ICdvYXV0aCcgfCAnc3NvJyB8ICd3ZWJhdXRobicgfCAnc3RlcHVwJyB8ICdtZmEnO1xuXG4vKipcbiAqIEF1dGhlbnRpY2F0b3IgYXNzdXJhbmNlIGxldmVsIG9mIHRoZSBzZXNzaW9uIGEgdG9rZW4gc3BlYWtzIGZvci5cbiAqXG4gKiAtIGAxYCDigJQgb25lIGZhY3RvcjogYSBwYXNzd29yZCwgYSBzb2NpYWwgc2lnbi1pbiwgb3IgU1NPIHRocm91Z2ggYW4gSWRQIHRoZVxuICogICBvcmcgaGFzIE5PVCBtYXJrZWQgYXMgZW5mb3JjaW5nIE1GQS5cbiAqIC0gYDJgIOKAlCBNRkEtZ3JhZGU6IGEgcGFzc2tleSBhc3NlcnRlZCB3aXRoIHVzZXIgdmVyaWZpY2F0aW9uLCBhIHBhc3N3b3JkIHBsdXNcbiAqICAgYW4gYXV0aGVudGljYXRvci1hcHAgY29kZSwgb3IgU1NPIHRocm91Z2ggYW4gSWRQIHRoZSBvcmcgSEFTIG1hcmtlZCBhc1xuICogICBlbmZvcmNpbmcgTUZBIChwcm92aWRlcnMgZG9uJ3Qgc2VuZCBgYW1yYCByZWxpYWJseSwgc28gdGhlIG9yZydzIG93blxuICogICBzdGF0ZW1lbnQgYWJvdXQgaXRzIElkUCBpcyB0aGUgc2lnbmFsKS5cbiAqXG4gKiBGaXhlZCB3aGVuIHRoZSBzZXNzaW9uIGlzIG9wZW5lZCBhbmQgc3RvcmVkIG9uIGl0cyByZWZyZXNoLXNlc3Npb24gc2xvdCwgc29cbiAqIHJlZnJlc2ggLyByZW5ld2FsIC8gc3dpdGNoLW9yZyBjb3B5IGl0IHZlcmJhdGltIGFuZCBjYW4gbmV2ZXIgUkFJU0UgaXQg4oCUXG4gKiBlYXJuaW5nIGFhbCAyIGFsd2F5cyBtZWFucyBhdXRoZW50aWNhdGluZyBhZ2FpbiB3aXRoIGEgc2Vjb25kIGZhY3Rvci5cbiAqL1xuZXhwb3J0IHR5cGUgQXNzdXJhbmNlTGV2ZWwgPSAxIHwgMjtcblxuLyoqIFJ1bnRpbWUgY2F0YWxvZ3MgZm9yIHRoZSBjbGFpbSB1bmlvbnMgYWJvdmUgKGEgdW5pb24gaXMgZXJhc2VkIGF0IHJ1bnRpbWUpLiAqL1xuZXhwb3J0IGNvbnN0IFBSSU5DSVBBTF9UWVBFUzogcmVhZG9ubHkgUHJpbmNpcGFsVHlwZVtdID0gWyd1c2VyJywgJ3NlcnZpY2VfYWNjb3VudCcsICdzZXJ2aWNlJ107XG5leHBvcnQgY29uc3QgVE9LRU5fVVNFUzogcmVhZG9ubHkgVG9rZW5Vc2VbXSA9IFsnYWNjZXNzJywgJ2FwaV9rZXknXTtcbmV4cG9ydCBjb25zdCBBVVRIX01FVEhPRFM6IHJlYWRvbmx5IEF1dGhNZXRob2RbXSA9IFsncHdkJywgJ29hdXRoJywgJ3NzbycsICd3ZWJhdXRobicsICdzdGVwdXAnLCAnbWZhJ107XG5cbi8qKlxuICogUXVvdGEgdHlwZSBpZGVudGlmaWVycy5cbiAqXG4gKiAtIGBwbHVnaW5zYCAvIGBwaXBlbGluZXNgIOKAlCBjb3VudCBvZiBjcmVhdGVkIGVudGl0aWVzXG4gKiAtIGBhcGlDYWxsc2Ag4oCUIGdlbmVyaWMgQVBJIGNhbGwgY291bnQgKHJlYWQtaGVhdnkgcGF0aHMpXG4gKiAtIGBhaUNhbGxzYCDigJQgQUkgcHJvdmlkZXIgaW52b2NhdGlvbnMgKGNvdW50ZWQgc2VwYXJhdGVseSBiZWNhdXNlIGVhY2ggY2FsbFxuICogICBoYXMgZXh0ZXJuYWwgZG9sbGFyIGNvc3Q7IHNpemVkIHNtYWxsZXIgdGhhbiBhcGlDYWxscyBwZXIgdGllcilcbiAqIC0gYHN0b3JhZ2VCeXRlc2Ag4oCUIHJlZ2lzdHJ5IHN0b3JhZ2UgYnVkZ2V0IHBlciBvcmcuIFVubGlrZSB0aGUgb3RoZXJzXG4gKiAgICh3aGljaCBjb3VudCBkaXNjcmV0ZSBldmVudHMpLCB0aGlzIGlzIGEgbWVhc3VyZWQgdG90YWwgcmVjb21wdXRlZFxuICogICBvbiBkZW1hbmQuIEluY3JlbWVudGVkIGJ5IHRoZSBpbWFnZS1yZWdpc3RyeSdzIHB1c2gtZ2F0ZSBiZWZvcmVcbiAqICAgaXNzdWluZyBhIHRva2VuIHdob3NlIHNjb3BlIGluY2x1ZGVzIGBwdXNoYDsgdGhlIEdDIHNjaGVkdWxlclxuICogICBldmVudHVhbGx5IGZyZWVzIHRoZSBieXRlcywgdGhlbiB0aGUgbmV4dCBwdXNoLWdhdGUgY2hlY2sgcmVhZHNcbiAqICAgdGhlIGxvd2VyIHZhbHVlLiBOT1QgYSBjb3VudGVyLXN0eWxlIHF1b3RhIGluIHRoZSBzZW5zZSBvZlxuICogICBgaW5jcmVtZW50VXNhZ2VgIOKAlCB0aGUgcmVnaXN0cnkgcHVzaGVzIHRoZSBtZWFzdXJlZCB0b3RhbCB2aWFcbiAqICAgYHVwZGF0ZUxpbWl0c2AvYHJlc2V0VXNhZ2VgIGZsb3dzLiBUaWVyIGxpbWl0cyBhcmUgYnl0ZXMuXG4gKiAtIGBkYXNoYm9hcmRzYCAvIGBhbGVydFJ1bGVzYCAvIGBhbGVydERlc3RpbmF0aW9uc2AgLyBgaWRwQ29uZmlnc2Ag4oCUXG4gKiAgIHJlc291cmNlLWNvdW50IHF1b3RhcyBhZGRlZCB0byBjbG9zZSBwZXItb3JnIERvUyBzdXJmYWNlcyBpbiB0aGVcbiAqICAgdXNlci1lZGl0YWJsZSBmZWF0dXJlIHRhYmxlcy4gV2l0aG91dCB0aGVzZSBjYXBzIGEgc2luZ2xlIG9yZyBjb3VsZFxuICogICBzcGFtIHRob3VzYW5kcyBvZiBkYXNoYm9hcmRzIC8gcnVsZXMgYW5kIGJsb2F0IHRoZSBzaGFyZWQgUG9zdGdyZXMgL1xuICogICBNb25nbyB3b3JraW5nIHNldHMuIENvdW50ZWQgYXQgY3JlYXRlIHRpbWU7IGRlY3JlbWVudGVkIG9uIGRlbGV0ZS5cbiAqIC0gYGxpc3RpbmdzYCDigJQgYWN0aXZlLCBub24tc3VzcGVuZGVkIHBsdWdpbi1lY29zeXN0ZW0gbGlzdGluZ3MgYSAocm9vdCkgb3JnXG4gKiAgIHB1Ymxpc2hlcyAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuIEEgQ09VTlQgcXVvdGEgbGlrZVxuICogICBgcGx1Z2luc2A6IGNoZWNrZWQgYXQgcHVibGlzaC1yZXF1ZXN0IHN1Ym1pdCBhbmQgcmUtY2hlY2tlZCBhdCBhcHByb3ZhbDtcbiAqICAgaW5zdGFsbHMgbmV2ZXIgY291bnQuXG4gKi9cbi8vIE5PVEU6IGBzZWF0c2AgaXMgaW50ZW50aW9uYWxseSBOT1QgaGVyZS4gSXQncyBhIHRpZXIgbGltaXQgKFF1b3RhVGllckxpbWl0cylcbi8vIGVuZm9yY2VkIGJ5IGNvbXBhcmluZyB0aGUgb3JnJ3MgTElWRSBtZW1iZXIgY291bnQgYXQgaW52aXRlIHRpbWUg4oCUIG5vdCBhblxuLy8gaW5jcmVtZW50aW5nIHBlci1wZXJpb2QgY291bnRlciBsaWtlIHRoZSBjb25zdW1hYmxlIHF1b3RhcyBiZWxvdy5cbmV4cG9ydCB0eXBlIFF1b3RhVHlwZSA9XG4gIHwgJ3BsdWdpbnMnIHwgJ3BpcGVsaW5lcycgfCAnYXBpQ2FsbHMnIHwgJ2FpQ2FsbHMnIHwgJ3N0b3JhZ2VCeXRlcydcbiAgfCAnZGFzaGJvYXJkcycgfCAnYWxlcnRSdWxlcycgfCAnYWxlcnREZXN0aW5hdGlvbnMnIHwgJ2lkcENvbmZpZ3MnXG4gIHwgJ2xpc3RpbmdzJztcblxuLyoqXG4gKiBWYWxpZCBxdW90YSB0eXBlIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFZBTElEX1FVT1RBX1RZUEVTID0gW1xuICAncGx1Z2lucycsICdwaXBlbGluZXMnLCAnYXBpQ2FsbHMnLCAnYWlDYWxscycsICdzdG9yYWdlQnl0ZXMnLFxuICAnZGFzaGJvYXJkcycsICdhbGVydFJ1bGVzJywgJ2FsZXJ0RGVzdGluYXRpb25zJywgJ2lkcENvbmZpZ3MnLFxuICAnbGlzdGluZ3MnLFxuXSBhcyBjb25zdDtcblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYSB2YWxpZCBRdW90YVR5cGUuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdmFsdWUgaXMgYSB2YWxpZCBRdW90YVR5cGVcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaWYgKGlzVmFsaWRRdW90YVR5cGUocmVxLmJvZHkucXVvdGFUeXBlKSkge1xuICogICAvLyBxdW90YVR5cGUgaXMgZ3VhcmFudGVlZCB0byBiZSBRdW90YVR5cGVcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFF1b3RhVHlwZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFF1b3RhVHlwZSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIFZBTElEX1FVT1RBX1RZUEVTLmluY2x1ZGVzKHZhbHVlIGFzIFF1b3RhVHlwZSk7XG59XG5cbi8qKlxuICogUmVzdWx0IGZyb20gcXVvdGEgY2hlY2sgb3BlcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhQ2hlY2tSZXN1bHQge1xuICAvKiogV2hldGhlciB0aGUgcmVxdWVzdCBpcyBhbGxvd2VkICovXG4gIGFsbG93ZWQ6IGJvb2xlYW47XG4gIC8qKiBNYXhpbXVtIHF1b3RhIGxpbWl0ICgtMSBmb3IgdW5saW1pdGVkKSAqL1xuICBsaW1pdDogbnVtYmVyO1xuICAvKiogQ3VycmVudCB1c2FnZSBjb3VudCAqL1xuICB1c2VkOiBudW1iZXI7XG4gIC8qKiBSZW1haW5pbmcgcXVvdGEgKC0xIGZvciB1bmxpbWl0ZWQpICovXG4gIHJlbWFpbmluZzogbnVtYmVyO1xuICAvKiogSVNPIHRpbWVzdGFtcCB3aGVuIHF1b3RhIHJlc2V0cyAqL1xuICByZXNldEF0OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHF1b3RhIGlzIHVubGltaXRlZCAqL1xuICB1bmxpbWl0ZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcnVlIE9OTFkgd2hlbiB0aGlzIHJlc3VsdCBpcyB0aGUgZmFpbC1vcGVuIHNlbnRpbmVsIHJldHVybmVkIGJlY2F1c2UgdGhlXG4gICAqIHF1b3RhIHNlcnZpY2Ugd2FzIHVucmVhY2hhYmxlIC8gcmV0dXJuZWQgbm9uLW9rIChub3QgYSByZWFsIHF1b3RhIHJlYWRpbmcpLlxuICAgKiBMZXRzIGZhaWwtY2xvc2VkIGNhbGxlcnMgKGUuZy4gdGhlIHJlZ2lzdHJ5IHN0b3JhZ2UgcHVzaC1nYXRlKSBkaXN0aW5ndWlzaFxuICAgKiBhbiBvdXRhZ2UgZnJvbSBhIGdlbnVpbmUgYGxpbWl0OiAtMWAgKHVubGltaXRlZCkgb3JnLiBBYnNlbnQgb24gcmVhbCByZXN1bHRzLlxuICAgKi9cbiAgZmFpbE9wZW4/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFF1b3RhIGluZm9ybWF0aW9uIGZvciBlcnJvciByZXNwb25zZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFJbmZvIHtcbiAgdHlwZTogUXVvdGFUeXBlO1xuICBsaW1pdDogbnVtYmVyO1xuICB1c2VkOiBudW1iZXI7XG4gIHJlbWFpbmluZzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFN0YW5kYXJkIEFQSSBzdWNjZXNzIHJlc3BvbnNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaVN1Y2Nlc3NSZXNwb25zZTxUID0gdW5rbm93bj4ge1xuICBzdWNjZXNzOiB0cnVlO1xuICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIGRhdGE/OiBUO1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0YW5kYXJkIEFQSSBlcnJvciByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlFcnJvclJlc3BvbnNlIHtcbiAgc3VjY2VzczogZmFsc2U7XG4gIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xuICBkZXRhaWxzPzogdW5rbm93bjtcbiAgcXVvdGE/OiBRdW90YUluZm87XG59XG5cbi8qKlxuICogQ29tYmluZWQgQVBJIHJlc3BvbnNlIHR5cGUuXG4gKi9cbmV4cG9ydCB0eXBlIEFwaVJlc3BvbnNlPFQgPSB1bmtub3duPiA9IEFwaVN1Y2Nlc3NSZXNwb25zZTxUPiB8IEFwaUVycm9yUmVzcG9uc2U7XG5cbi8qKlxuICogSldUIHBheWxvYWQgZnJvbSBhY2Nlc3MgdG9rZW5zLlxuICpcbiAqIFVzZXJzIGNhbiBiZWxvbmcgdG8gbXVsdGlwbGUgb3JnYW5pemF0aW9ucy4gVGhlIHRva2VuIGlzIHNjb3BlZCB0byBvbmVcbiAqIGFjdGl2ZSBvcmdhbml6YXRpb24gYXQgYSB0aW1lLiBUaGUgYHJvbGVgIGZpZWxkIGlzIHRoZSB1c2VyJ3MgcGVyLW9yZ1xuICogcm9sZSBpbiB0aGF0IG9yZ2FuaXphdGlvbiAoZnJvbSB0aGUgVXNlck9yZ2FuaXphdGlvbiBqdW5jdGlvbiBjb2xsZWN0aW9uKSxcbiAqIGFuZCBgaXNBZG1pbmAgaXMgZGVyaXZlZCBhcyBgcm9sZSA9PT0gJ2FkbWluJyB8fCByb2xlID09PSAnb3duZXInYC5cbiAqXG4gKiBVc2UgYFBPU1QgL2F1dGgvc3dpdGNoLW9yZ2AgdG8gY2hhbmdlIHRoZSBhY3RpdmUgb3JnYW5pemF0aW9uLCB3aGljaFxuICogcmUtaXNzdWVzIHRva2VucyB3aXRoIHRoZSBuZXcgb3JnJ3Mgcm9sZSBhbmQgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBDb2Fyc2UgcGVyLW9yZyBtZW1iZXJzaGlwIGxhYmVsLCBERVJJVkVEIGZyb20gdGhlIFJvbGVzIGEgdXNlciBpcyBhc3NpZ25lZFxuICogKHRoZSBoaWdoZXN0IGBncmFudHNSb2xlYCBhbW9uZyB0aGVtOyBgb3duZXJgIGlzIHNldCBvbmx5IGJ5IG93bmVyc2hpcFxuICogdHJhbnNmZXIpLiBJdCBpcyBhIGRpc3BsYXkvYXV0aG9yaXR5IGxhYmVsIOKAlCBkcml2aW5nIGBpc0FkbWluYCwgb3duZXJzaGlwLFxuICogYW5kIHNlYXQgYWNjb3VudGluZyDigJQgTk9UIGEgcGVybWlzc2lvbiBzb3VyY2UuIEVmZmVjdGl2ZSBwZXJtaXNzaW9ucyBjb21lXG4gKiBzb2xlbHkgZnJvbSB0aGUgdXNlcidzIGFzc2lnbmVkIFJvbGVzIChzZWUgYHJlc29sdmVVc2VyUGVybWlzc2lvbnNgKS4gTm90IGFcbiAqIGdsb2JhbCByb2xlLlxuICovXG5leHBvcnQgdHlwZSBPcmdSb2xlID0gJ293bmVyJyB8ICdhZG1pbicgfCAnbWVtYmVyJztcblxuZXhwb3J0IGludGVyZmFjZSBKd3RQYXlsb2FkIHtcbiAgLyoqIFVzZXIgSUQgKHN1YmplY3QpICovXG4gIHN1Yjogc3RyaW5nO1xuICAvKiogVXNlcm5hbWUgKi9cbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgLyoqIFVzZXIgZW1haWwgKi9cbiAgZW1haWw6IHN0cmluZztcbiAgLyoqIFdoaWNoIGtpbmQgb2YgcHJpbmNpcGFsIHRoaXMgdG9rZW4gc3BlYWtzIGZvciAoc2VlIHtAbGluayBQcmluY2lwYWxUeXBlfSkuICovXG4gIHByaW5jaXBhbFR5cGU6IFByaW5jaXBhbFR5cGU7XG4gIC8qKiBIb3cgdGhlIHRva2VuIGlzIHVzZWQgKHNlZSB7QGxpbmsgVG9rZW5Vc2V9KTsgUEFUcyBhcmUgYGFwaV9rZXlgLiAqL1xuICB0b2tlbl91c2U6IFRva2VuVXNlO1xuICAvKipcbiAgICogTWV0aG9kcyB0aGF0IGF1dGhlbnRpY2F0ZWQgdGhlIHNlc3Npb24gKHVzZXIgcHJpbmNpcGFscykuIEtlcHQgb24gdGhlXG4gICAqIHJlZnJlc2gtc2Vzc2lvbiBzbG90LCBzbyByZWZyZXNoIC8gcmVuZXcgLyBzd2l0Y2gtb3JnIGNhcnJ5IGl0IHVuY2hhbmdlZC5cbiAgICogQWJzZW50IG9uIHNlcnZpY2UgdG9rZW5zLlxuICAgKi9cbiAgYW1yPzogQXV0aE1ldGhvZFtdO1xuICAvKiogQXNzdXJhbmNlIGxldmVsICh1c2VyIHByaW5jaXBhbHMpLiBOZXZlciByYWlzZWQgYnkgcmVmcmVzaCAvIHJlbmV3IC8gc3dpdGNoLW9yZy4gKi9cbiAgYWFsPzogQXNzdXJhbmNlTGV2ZWw7XG4gIC8qKiBFcG9jaCBzZWNvbmRzIG9mIHRoZSBzaWduLWluIHRoYXQgZXN0YWJsaXNoZWQgdGhlIHNlc3Npb24gKHVzZXIgcHJpbmNpcGFscykuXG4gICAqICBOZXZlciByZXNldCBieSByZWZyZXNoIC8gcmVuZXcgLyBzd2l0Y2gtb3JnLiAqL1xuICBhdXRoX3RpbWU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgYWN0aXZlIG9yZyBSRVFVSVJFUyBNRkEgYW5kIGl0cyBncmFjZSBwZXJpb2QgaGFzIHBhc3NlZC5cbiAgICpcbiAgICogQ2FycmllZCBhcyBhIGNsYWltIHNvIG5vIHNlcnZpY2UgaGFzIHRvIGxvb2sgdGhlIHBvbGljeSB1cDogdGhlIG9yZyBwb2xpY3lcbiAgICogaXMgZW5mb3JjZWQgd2hlcmUgdGhlIHRva2VuIGlzIElTU1VFRCAoYSBzZXNzaW9uIHNjb3BlZCB0byBzdWNoIGFuIG9yZyBnZXRzXG4gICAqIGBhYWw6IDJgIG9yIGlzIHJlZnVzZWQpLCBhbmQgdGhpcyBjbGFpbSBpcyB0aGUgcmVjb3JkIG9mIHRoYXQgZGVjaXNpb24sIGZvclxuICAgKiBVSSBjb3B5IGFuZCBhdWRpdCByYXRoZXIgdGhhbiBmb3IgYSBzZWNvbmQgZW5mb3JjZW1lbnQgcG9pbnQuXG4gICAqL1xuICBtZmFSZXF1aXJlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgYWN0aXZlIG9yZydzIFwiYWRtaW5pc3RyYXRpdmUgYWN0aW9ucyByZXF1aXJlIE1GQVwiIHBvbGljeVxuICAgKiAoYGFkbWluQWN0aW9uc1JlcXVpcmVNZmFgLCBzdHJpY3Rlc3QgYWNyb3NzIHRoZSBvcmcgYW5kIGl0cyBhbmNlc3RvcnMpLlxuICAgKiBQcmVzZW50IOKAlCBhbmQgYWx3YXlzIGAyYCDigJQgb25seSB3aGVuIHRoZSBwb2xpY3kgaXMgb24uIEl0IGlzIHJlc29sdmVkIHdoZW5cbiAgICogdGhlIHRva2VuIGlzIElTU1VFRCwgc28gc2VydmljZXMgdGhhdCBjYW4ndCByZWFkIHRoZSBvcmcgZG9jdW1lbnQgc3RpbGwga25vd1xuICAgKiB0aGUgcG9saWN5OiBgcmVxdWlyZU9yZ0FkbWluQXNzdXJhbmNlYCByZWZ1c2VzIGFuIGBhYWw6IDFgIHNlc3Npb24gb24gYW5cbiAgICogYWRtaW5pc3RyYXRpdmUgcm91dGUgd2hlbiB0aGlzIGNsYWltIGlzIHByZXNlbnQuIENoYW5naW5nIHRoZSBwb2xpY3kgYnVtcHNcbiAgICogZXZlcnkgYWZmZWN0ZWQgbWVtYmVyJ3MgYHRva2VuVmVyc2lvbmAsIHNvIHRoZSBjbGFpbSBjYW4ndCBnbyBzdGFsZS5cbiAgICovXG4gIG9yZ19hZG1pbl9hYWw/OiAyO1xuICAvKipcbiAgICogQk9PVFNUUkFQLUFETUlOIEVYQ0VQVElPTi4gU2V0IG9ubHkgb24gYSBzZXNzaW9uIG9wZW5lZCBieVxuICAgKiB0aGUgaW5zdGFsbCdzIGJvb3RzdHJhcCBhZG1pbiAoYEJPT1RTVFJBUF9TVVBFUkFETUlOX0VNQUlMU2AsIHN5c3RlbSBvcmcpXG4gICAqIHdoaWxlIHRoZXkgc3RpbGwgaGF2ZSBubyBlbnJvbGxlZCBmYWN0b3IuIFN1Y2ggYSBzZXNzaW9uIGlzIGBhYWw6IDFgIGFuZCBtYXlcbiAgICogcmVhY2ggT05MWSBlbnJvbG1lbnQsIHNpZ24tb3V0IGFuZCB0aGUgcm91dGVzIGBpbml0LXBsYXRmb3JtLnNoYCBjYWxscztcbiAgICogZXZlcnkgb3RoZXIgc2VydmljZSByZWZ1c2VzIGl0IG91dHJpZ2h0IChzZWUgYHJlcXVpcmVBdXRoYCkuIFRoZSBleGNlcHRpb25cbiAgICogY2xvc2VzIHBlcm1hbmVudGx5IGF0IHRoZSBmaXJzdCBlbnJvbG1lbnQgYW5kIG5ldmVyIHJlb3BlbnMuXG4gICAqL1xuICBtZmFFbnJvbGxtZW50UGVuZGluZz86IGJvb2xlYW47XG4gIC8qKiBQZXItb3JnIHJvbGUgaW4gdGhlIGFjdGl2ZSBvcmdhbml6YXRpb24gKCdvd25lcicgfCAnYWRtaW4nIHwgJ21lbWJlcicpLiBOb3QgYSBnbG9iYWwgcm9sZS4gKi9cbiAgcm9sZTogT3JnUm9sZTtcbiAgLyoqIERlcml2ZWQ6IHRydWUgd2hlbiByb2xlIGlzICdhZG1pbicgb3IgJ293bmVyJyBpbiB0aGUgYWN0aXZlIG9yZ2FuaXphdGlvbiAqL1xuICBpc0FkbWluPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJlc29sdmVkIGZpbmUtZ3JhaW5lZCBwZXJtaXNzaW9ucyBmb3IgdGhlIGFjdGl2ZSBvcmcvdGVhbSDigJQgdGhlIHVuaW9uIG9mXG4gICAqIHRoZSBwZXJtaXNzaW9ucyBjYXJyaWVkIGJ5IGV2ZXJ5IFJvbGUgdGhlIHVzZXIgaXMgYXNzaWduZWQgKHNlZVxuICAgKiBgcmVzb2x2ZVVzZXJQZXJtaXNzaW9uc2ApLiBBYnNlbnQgb24gbWFjaGluZS9zY29wZWQgdG9rZW5zLiBTdXBlcmFkbWlucyBhcmVcbiAgICogZ3JhbnRlZCBhbGwgcGVybWlzc2lvbnMgaW1wbGljaXRseSBhbmQgbWF5IG9taXQgdGhpcy4gRW5kcG9pbnRzIGVuZm9yY2UgdmlhXG4gICAqIGByZXF1aXJlUGVybWlzc2lvbiguLi4pYC5cbiAgICovXG4gIHBlcm1pc3Npb25zPzogUGVybWlzc2lvbltdO1xuICAvKipcbiAgICogR2xvYmFsIHN1cGVyLWFkbWluIGZsYWcgKGNyb3NzLW9yZykuIFdoZW4gYHRydWVgLCB0aGUgdXNlciBpcyB0cmVhdGVkXG4gICAqIGFzIGEgc3lzdGVtIGFkbWluaXN0cmF0b3IgcmVnYXJkbGVzcyBvZiB3aGljaCBvcmcgdGhleSdyZSBjdXJyZW50bHlcbiAgICogYWN0aW5nIHVuZGVyLiBUaGlzIGlzIHRoZSBTT0xFIHNpZ25hbCBmb3Igc3lzYWRtaW4gYXV0aG9yaXR5IOKAlCBtZW1iZXJzaGlwIGluXG4gICAqIHRoZSB3ZWxsLWtub3duIFwic3lzdGVtXCIgb3JnIGdyYW50cyBub3RoaW5nLCBiZWNhdXNlIHRoYXQgd291bGQgY29uZmxhdGVcbiAgICogXCJQaXBlbGluZSBCdWlsZGVyIG9wZXJhdG9yXCIgd2l0aCBcImN1c3RvbWVyIHRlbmFudFwiIGluIHRoZSBkYXRhIG1vZGVsLlxuICAgKi9cbiAgaXNTdXBlckFkbWluPzogYm9vbGVhbjtcbiAgLyoqIE9yZ2FuaXphdGlvbidzIHF1b3RhIHRpZXIuICovXG4gIHRpZXI/OiBRdW90YVRpZXI7XG4gIC8qKiBSZXNvbHZlZCBmZWF0dXJlIGZsYWdzIGZvciB0aGlzIHVzZXIvb3JnICovXG4gIGZlYXR1cmVzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBOYXJyb3cgY2FwYWJpbGl0eSBzY29wZSBmb3IgbWFjaGluZS9hdXRvbWF0aW9uIHRva2VucyAoZS5nLlxuICAgKiBgJ3JlcG9ydGluZzppbmdlc3QnYCkuIEFic2VudCBvbiBub3JtYWwgaW50ZXJhY3RpdmUgdXNlciB0b2tlbnMuIEVuZHBvaW50c1xuICAgKiB0aGF0IGFjY2VwdCBhIHNjb3BlZCBpZGVudGl0eSBjaGVjayB0aGlzIChzZWUgYGhhc1Njb3BlYCkgaW5zdGVhZCBvZiByb2xlO1xuICAgKiBhIHNjb3BlZCB0b2tlbiBpcyBtaW50ZWQgd2l0aCBtaW5pbWFsIHJvbGUgZm9yIGxlYXN0LXByaXZpbGVnZS5cbiAgICovXG4gIHNjb3BlPzogVG9rZW5TY29wZTtcbiAgLyoqXG4gICAqIFRoZSB0b2tlbidzIGBwZXJtaXNzaW9uc2Agd2VyZSBOQVJST1dFRCB0byBhIGNhdGFsb2cgc3Vic2V0IGNob3NlbiB3aGVuIHRoZVxuICAgKiBjcmVkZW50aWFsIHdhcyBjcmVhdGVkIChhIHBlcm1pc3Npb24tc2NvcGVkIHBlcnNvbmFsIGFjY2VzcyBrZXkgb3IgbWFjaGluZVxuICAgKiB0b2tlbikuIFRoZSBjbGFpbSBpcyB0aGUgcmVjb3JkIHRoYXQgYHBlcm1pc3Npb25zYCBpcyB0aGUgSU5URVJTRUNUSU9OIG9mXG4gICAqIHRoYXQgc3Vic2V0IHdpdGggdGhlIGhvbGRlcidzIGN1cnJlbnQgUm9sZXMg4oCUIG5vdCB0aGVpciBmdWxsIGF1dGhvcml0eSDigJQgc29cbiAgICogYW55dGhpbmcgdGhlIHRva2VuIG1pbnRzIGNhbiBvbmx5IGJlIG5hcnJvd2VyIHN0aWxsLCBhbmQgaXQgbmV2ZXIgY2Fycmllc1xuICAgKiBgaXNTdXBlckFkbWluYCBvciBhbiBhZG1pbiBgcm9sZWAgKGJvdGggd291bGQgYnlwYXNzIHRoZSBzdWJzZXQpLiBPbmx5IGV2ZXJcbiAgICogYHRydWVgOyBhYnNlbnQgb24gdW5yZXN0cmljdGVkIHRva2Vucy5cbiAgICovXG4gIHBlcm1pc3Npb25zUmVzdHJpY3RlZD86IGJvb2xlYW47XG4gIC8qKiBBY3RpdmUgb3JnYW5pemF0aW9uIElEIChmcm9tIFVzZXJPcmdhbml6YXRpb24gbWVtYmVyc2hpcCkgKi9cbiAgb3JnYW5pemF0aW9uSWQ/OiBzdHJpbmc7XG4gIC8qKiBBY3RpdmUgb3JnYW5pemF0aW9uIG5hbWUgKi9cbiAgb3JnYW5pemF0aW9uTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE9yZyDihpIgdGVhbSBoaWVyYXJjaHkgKG9yZy10ZWFtLWhpZXJhcmNoeSBwcm9wb3NhbCwgcGhhc2UgMSkuXG4gICAqIGBwYXJlbnRPcmdhbml6YXRpb25JZGAgaXMgdGhlIGFjdGl2ZSBvcmcncyBkaXJlY3QgcGFyZW50OyBgcm9vdE9yZ2FuaXphdGlvbklkYFxuICAgKiBpcyB0aGUgdG9wIG9mIGl0cyBhbmNlc3RyeSBjaGFpbi4gQm90aCBhcmUgKipvbWl0dGVkIGZvciBmbGF0IChyb290KSBvcmdzKiog4oCUXG4gICAqIGNvbnN1bWVycyBzaG91bGQgdHJlYXQgdGhlIGVmZmVjdGl2ZSByb290IGFzIGByb290T3JnYW5pemF0aW9uSWQgPz8gb3JnYW5pemF0aW9uSWRgXG4gICAqICh1c2UgdGhlIHNoYXJlZCB7QGxpbmsgZWZmZWN0aXZlUm9vdE9yZ0lkfSBhY2Nlc3NvciByYXRoZXIgdGhhbiBjb2FsZXNjaW5nIGlubGluZSkuXG4gICAqIEN1cnJlbnRseSBldmVyeSBvcmcgaXMgZmxhdCwgc28gdGhlc2UgYXJlIGFic2VudCBvbiBhbGwgdG9rZW5zIHRvZGF5LlxuICAgKi9cbiAgcGFyZW50T3JnYW5pemF0aW9uSWQ/OiBzdHJpbmc7XG4gIC8qKiBSb290IG9yZ2FuaXphdGlvbiBJRCBvZiB0aGUgYWN0aXZlIG9yZydzIGFuY2VzdHJ5IGNoYWluIChzZWUgYHBhcmVudE9yZ2FuaXphdGlvbklkYCkuICovXG4gIHJvb3RPcmdhbml6YXRpb25JZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFNldCBvbiB0b2tlbnMgaXNzdWVkIGJ5IHRoZSBzeXNhZG1pbiBpbXBlcnNvbmF0aW9uIGZsb3dcbiAgICogKGBQT1NUIC9hZG1pbi9pbXBlcnNvbmF0ZS86dXNlcklkYCkuIENhcnJpZXMgdGhlIG9yaWdpbmFsIHN5c2FkbWluJ3NcbiAgICogdXNlciBpZCBzbyBhdWRpdCBldmVudHMgc3RpbGwgYXR0cmlidXRlIGFjdGlvbnMgY29ycmVjdGx5LlxuICAgKi9cbiAgaW1wZXJzb25hdG9ySWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBVbmlxdWUgdG9rZW4gaWQuIE9uIGFuIGltcGVyc29uYXRpb24gdG9rZW4gaXQgaWRlbnRpZmllcyB0aGUgU0VTU0lPTiwgc28gaXRcbiAgICogY2FuIGJlIHJldm9rZWQgb24gaXRzIG93biBhY3Jvc3MgZXZlcnkgc2VydmljZSAoc2VlXG4gICAqIGBUb2tlblJldm9jYXRpb25TdG9yZS5nZXRTZXNzaW9uUmV2b2NhdGlvbmApLiBQZXJzb25hbCBBY2Nlc3MgVG9rZW5zXG4gICAqIChgdG9rZW5fdXNlOiAnYXBpX2tleSdgKSBjYXJyeSBvbmUgdG9vLCB2YWxpZGF0ZWQgYWdhaW5zdCB0aGVpciBvd24gcmVjb3JkLlxuICAgKiBBIGBqdGlgIGFsb25lIG5ldmVyIGNsYXNzaWZpZXMgYSB0b2tlbiDigJQgYHRva2VuX3VzZWAgYW5kIGBpbXBlcnNvbmF0b3JJZGAgZG8uXG4gICAqL1xuICBqdGk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSB0b2tlbiBpcyByZWFkLW9ubHkg4oCUIGFueSBub24tR0VUIHJlcXVlc3QgaXMgcmVqZWN0ZWRcbiAgICogdXBzdHJlYW0gYnkgdGhlIHBsYXRmb3JtJ3MgcmVhZC1vbmx5IGltcGVyc29uYXRpb24gZ2F0ZS4gTGV0c1xuICAgKiBzeXNhZG1pbnMgXCJ2aWV3IGFzIHVzZXIgWFwiIHdpdGhvdXQgcmlza2luZyBhIGRlc3RydWN0aXZlIGFjdGlvbi5cbiAgICovXG4gIGltcGVyc29uYXRpb25SZWFkT25seT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgcmVmcmVzaC1zZXNzaW9uIHNsb3QgKGludGVyYWN0aXZlIG9yIG1hY2hpbmUpIHRoaXMgYWNjZXNzIHRva2VuIHdhc1xuICAgKiBtaW50ZWQgd2l0aC4gUmV2b2tpbmcgdGhhdCBPTkUgc2xvdCBwdWJsaXNoZXMgYHJldm9rZTpzaWQ6PHNpZD5gIChzZWVcbiAgICogYGNyZWRlbnRpYWxSZXZvY2F0aW9uS2V5YCksIHdoaWNoIGV2ZXJ5IHNlcnZpY2UgY2hlY2tzIGluIGByZXF1aXJlQXV0aGAsIHNvXG4gICAqIGEgc2luZ2xlIHNpZ25lZC1vdXQgZGV2aWNlIC8gbWFjaGluZSBjcmVkZW50aWFsIHN0b3BzIHdvcmtpbmcgZXZlcnl3aGVyZVxuICAgKiBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGF0IG5hdHVyYWwgZXhwaXJ5LiBBYnNlbnQgb24gUEFUcyBhbmQgaW1wZXJzb25hdGlvbi5cbiAgICovXG4gIHNpZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBhY2Nlc3Mga2V5IChQQVQgLyBzZXJ2aWNlLWFjY291bnQga2V5IGlkKSB0aGlzIHRva2VuIHdhcyBERVJJVkVEIGZyb20sXG4gICAqIHdoZW4gaXQgaXMgbm90IGl0c2VsZiB0aGUgZXhjaGFuZ2VkIGtleSB0b2tlbiAod2hvc2Uga2V5IGlkIGlzIGl0cyBganRpYCkg4oCUXG4gICAqIGUuZy4gYSBzd2l0Y2gtb3JnIG9yIGdlbmVyYXRlLXRva2VuIG1pbnQgbWFkZSB3aGlsZSBob2xkaW5nIGFuIGV4Y2hhbmdlZFxuICAgKiBrZXkgdG9rZW4uIFJldm9raW5nIHRoZSBrZXkgcHVibGlzaGVzIGByZXZva2U6a2V5OjxrZXlJZD5gLCB3aGljaCByZWplY3RzXG4gICAqIGV2ZXJ5IHRva2VuIHRoYXQgbmFtZXMgaXQgaGVyZSBvciBhcyBpdHMgYGp0aWAuXG4gICAqL1xuICBwYXJlbnRLZXlJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB1c2VyJ3MgQUNDRVNTIHZlcnNpb24gYXQgdGhlIG1vbWVudCB0aGlzIHRva2VuIHdhcyBpc3N1ZWQ6IHRoZSBoYXJkXG4gICAqIGB0b2tlblZlcnNpb25gIChkZWFjdGl2YXRlIC8gcGFzc3dvcmQgY2hhbmdlIC8gbG9nb3V0LWFsbCDigJQgY2xlYXJzIHNsb3RzKVxuICAgKiBwbHVzIGBjbGFpbXNWZXJzaW9uYCAocm9sZSwgdGllciwgbWVtYmVyc2hpcCBvciBvd25lcnNoaXAgY2hhbmdlcyDigJQgcmUtbWludGVkXG4gICAqIG9uIHJlZnJlc2gpLiBCb3RoIG9ubHkgZ3Jvdywgc28gYSB0b2tlbiB3aG9zZSBlbWJlZGRlZCB2ZXJzaW9uIGlzIGJlaGluZCB0aGVcbiAgICogY3VycmVudCBvbmUgaGFzIGJlZW4gUkVWT0tFRC4gUGxhdGZvcm0gdmFsaWRhdGVzIHRoaXMgYWdhaW5zdCBNb25nbzsgdGhlXG4gICAqIHN0YXRlbGVzcyBzZXJ2aWNlcyB2YWxpZGF0ZSBpdCBhZ2FpbnN0IGEgUmVkaXMtcHVibGlzaGVkIGN1cnJlbnQtdmVyc2lvblxuICAgKiBzdG9yZSAoc2VlIGBzZXRUb2tlblJldm9jYXRpb25TdG9yZWApLiBBYnNlbnQgb24gbWFjaGluZS9zZXJ2aWNlIHRva2Vucy5cbiAgICovXG4gIHRva2VuVmVyc2lvbj86IG51bWJlcjtcbiAgLyoqIFRva2VuIHR5cGUgKi9cbiAgdHlwZTogJ2FjY2VzcycgfCAncmVmcmVzaCc7XG4gIC8qKiBJc3N1ZWQgYXQgdGltZXN0YW1wICovXG4gIGlhdD86IG51bWJlcjtcbiAgLyoqIEV4cGlyYXRpb24gdGltZXN0YW1wICovXG4gIGV4cD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgYWNjb3VudCBib3VuZGFyeSAocm9vdCBvcmcpIGZvciBhIHRva2VuJ3MgYWN0aXZlIG9yZy5cbiAqXG4gKiBUaGUgYWNjb3VudCByb290IGlzIGByb290T3JnYW5pemF0aW9uSWQgPz8gb3JnYW5pemF0aW9uSWRgOiBhIGZsYXQgKHJvb3QpIG9yZ1xuICogb21pdHMgYHJvb3RPcmdhbml6YXRpb25JZGAsIHNvIGl0IElTIGl0cyBvd24gcm9vdDsgYSB0ZWFtIChjaGlsZCkgb3JnIGNhcnJpZXNcbiAqIHRoZSB0b3Agb2YgaXRzIGFuY2VzdHJ5IGNoYWluLiBFdmVyeSBhY2NvdW50LXNjb3BlZCByZWFkIChxdW90YS9zZWF0L2JpbGxpbmdcbiAqIHBvb2xpbmcpIG11c3QgcmVzb2x2ZSB0aHJvdWdoIHRoaXMgY29hbGVzY2UgcmF0aGVyIHRoYW4gcmVhZGluZ1xuICogYG9yZ2FuaXphdGlvbklkYCBkaXJlY3RseSDigJQgdGhlIGxhdHRlciBzaWxlbnRseSB3b3JrcyB0b2RheSAoYWxsIG9yZ3MgZmxhdClcbiAqIGJ1dCB3b3VsZCBiaW5kIHRvIHRoZSB0ZWFtIGluc3RlYWQgb2YgdGhlIGFjY291bnQgb25jZSB0ZWFtcyBleGlzdC5cbiAqXG4gKiBAcmV0dXJucyB0aGUgZWZmZWN0aXZlIHJvb3Qgb3JnIGlkLCBvciBgdW5kZWZpbmVkYCB3aGVuIG5laXRoZXIgZmllbGQgaXMgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWZmZWN0aXZlUm9vdE9yZ0lkKFxuICBwYXlsb2FkOiBQaWNrPEp3dFBheWxvYWQsICdvcmdhbml6YXRpb25JZCcgfCAncm9vdE9yZ2FuaXphdGlvbklkJz4sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gcGF5bG9hZC5yb290T3JnYW5pemF0aW9uSWQgPz8gcGF5bG9hZC5vcmdhbml6YXRpb25JZDtcbn1cblxuLyoqXG4gKiBFeHRlbmRlZCBFeHByZXNzIFJlcXVlc3Qgd2l0aCB1c2VyIHByb3BlcnR5LlxuICovXG5kZWNsYXJlIGdsb2JhbCB7XG4gIG5hbWVzcGFjZSBFeHByZXNzIHtcbiAgICBpbnRlcmZhY2UgUmVxdWVzdCB7XG4gICAgICB1c2VyPzogSnd0UGF5bG9hZDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gZm9yIGludGVybmFsIEhUVFAgY2xpZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25maWcge1xuICAvKiogU2VydmljZSBob3N0bmFtZSAqL1xuICBob3N0OiBzdHJpbmc7XG4gIC8qKiBTZXJ2aWNlIHBvcnQgKi9cbiAgcG9ydDogbnVtYmVyO1xuICAvKiogUmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEhlYWx0aCBjaGVjayByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIZWFsdGhDaGVja1Jlc3BvbnNlIHtcbiAgc3RhdHVzOiAnaGVhbHRoeScgfCAndW5oZWFsdGh5JztcbiAgc2VydmljZTogc3RyaW5nO1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdXB0aW1lOiBudW1iZXI7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIGRlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsICdjb25uZWN0ZWQnIHwgJ2Rpc2Nvbm5lY3RlZCcgfCAndW5rbm93bic+O1xufVxuIl19
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBR3RDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQXlCbkQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBMEIsQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFpRGpHLGtGQUFrRjtBQUNsRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQTZCLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2hHLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBd0IsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDckUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUEwQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFnRHhHOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGNBQWM7SUFDaEYsWUFBWTtJQUNaLFlBQVksRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsWUFBWTtJQUM3RCxVQUFVO0NBQ0YsQ0FBQztBQUVYOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQXdDLE1BQU0sQ0FBQyxXQUFXLENBQ3JGLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUEyQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDNUUsQ0FBQztBQUV6Qzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsb0JBQW9CLENBQUM7QUFFdkQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQWM7SUFDN0MsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLEtBQWtCLENBQUMsQ0FBQztBQUNyRixDQUFDO0FBMlBEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxPQUFrRTtJQUVsRSxPQUFPLE9BQU8sQ0FBQyxrQkFBa0IsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDO0FBQzlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBQZXJtaXNzaW9uIH0gZnJvbSAnLi9wZXJtaXNzaW9ucy5qcyc7XG5pbXBvcnQgeyBRVU9UQV9DQVRBTE9HIH0gZnJvbSAnLi9xdW90YS1jYXRhbG9nLmpzJztcbmltcG9ydCB0eXBlIHsgUXVvdGFUaWVyIH0gZnJvbSAnLi9xdW90YS10aWVycy5qcyc7XG5cbi8qKlxuICogQ2FwYWJpbGl0eSBzY29wZSBjYXRhbG9nIGZvciBtYWNoaW5lL2F1dG9tYXRpb24gdG9rZW5zLiBBIHNjb3BlZCB0b2tlbiBjYXJyaWVzXG4gKiBleGFjdGx5IG9uZSBvZiB0aGVzZSBpbnN0ZWFkIG9mIHJvbGUtYmFzZWQgcGVybWlzc2lvbnM7IGVuZHBvaW50cyB0aGF0IGFjY2VwdCBhXG4gKiBzY29wZWQgaWRlbnRpdHkgY2hlY2sgaXQgdmlhIGBoYXNTY29wZWAuIEtlcHQgYSBjbG9zZWQgdW5pb24gKG1pcnJvcmluZ1xuICoge0BsaW5rIFBlcm1pc3Npb259KSBzbyBhIHR5cG8gb24gZWl0aGVyIHRoZSBtaW50IG9yIHRoZSBjaGVjayBzaWRlIGlzIGEgY29tcGlsZVxuICogZXJyb3IuIEFkZCBhIHZhbHVlIGhlcmUgd2hlbiBpbnRyb2R1Y2luZyBhIG5ldyBzY29wZWQtdG9rZW4gc3VyZmFjZS5cbiAqXG4gKiAtIGByZXBvcnRpbmc6aW5nZXN0YCDigJQgdGhlIEFXUyBldmVudC1pbmdlc3Rpb24gTGFtYmRhJ3Mgd3JpdGVzIChgL3JlcG9ydHMvZXZlbnRzYCxcbiAqICAgYC9yZXBvcnRzL2luZ2VzdC1oZWFsdGhgKSBhbmQgdGhlIGluY2lkZW50IHdlYmhvb2suXG4gKiAtIGByZWdpc3RyeTpwdXNoYCAgICDigJQgYGRvY2tlciBwdXNoYCBpbnRvIHRoZSBvd25pbmcgb3JnJ3Mgb3duIG5hbWVzcGFjZSB2aWFcbiAqICAgaW1hZ2UtcmVnaXN0cnkncyBgL3Rva2VuYCBlbmRwb2ludC4gR3JhbnRzIHRoZSByYXctaW1hZ2Ugd3JpdGUgdGhhdFxuICogICBgcGx1Z2luczp3cml0ZWAgZ3JhbnRzIGEgcGVyc29uLCBhbmQgbm90aGluZyBlbHNlOiBhIHNjb3BlZCB0b2tlbiBjYXJyaWVzIG5vXG4gKiAgIHBlcm1pc3Npb25zLCBzbyBpdCBjYW4gbmVpdGhlciByZWFkIHRoZSBBUEkgbm9yIHB1c2ggb3V0c2lkZSBpdHMgb3JnLlxuICogLSBgc2NpbWAgICAgICAgICAgICAg4oCUIGFuIGlkZW50aXR5IHByb3ZpZGVyJ3MgU0NJTSAyLjAgY2xpZW50ICgzYikgZHJpdmluZ1xuICogICBgL3NjaW0vdjIvVXNlcnNgIGFuZCBgL3NjaW0vdjIvR3JvdXBzYCBmb3IgdGhlIGtleSdzIE9XTiBvcmcuIEl0IHByb3Zpc2lvbnNcbiAqICAgYW5kIGRlYWN0aXZhdGVzIG1lbWJlcnNoaXBzIGFuZCBtb3ZlcyBwZW9wbGUgYmV0d2VlbiBkaXJlY3RvcnkgZ3JvdXBzOyBpdFxuICogICBjYW4gbmV2ZXIgcmVhZCBvciB3cml0ZSBhbnl0aGluZyBlbHNlLCBhbmQg4oCUIGJlY2F1c2UgYSBzY29wZWQgdG9rZW4gY2Fycmllc1xuICogICBubyBwZXJtaXNzaW9ucyDigJQgaXQgY2Fubm90IGF1dGhvciB0aGUgZ3JvdXAg4oaSIFJvbGUgcnVsZXMgaXRzIHN5bmNzIHJlc29sdmVcbiAqICAgdGhyb3VnaC4gT25seSBhIHNlcnZpY2UtYWNjb3VudCBrZXkgbWF5IGNhcnJ5IGl0OyBhIHBlcnNvbidzIHRva2VuIG5ldmVyIGRvZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFRva2VuU2NvcGUgPSAncmVwb3J0aW5nOmluZ2VzdCcgfCAncmVnaXN0cnk6cHVzaCcgfCAnc2NpbSc7XG5cbi8qKlxuICogUnVudGltZSBjYXRhbG9nIG9mIHtAbGluayBUb2tlblNjb3BlfSAoYSB1bmlvbiBpcyBlcmFzZWQgYXQgcnVudGltZSkuIFRoaXMgaXNcbiAqIHRoZSBPTkUgYWxsb3dsaXN0IGV2ZXJ5IG1pbnQgcGF0aCB2YWxpZGF0ZXMgYWdhaW5zdCDigJQgcGxhdGZvcm0ncyBrZXkvdG9rZW5cbiAqIGlzc3VlIHJvdXRlcyBpbmNsdWRlZCDigJQgc28gYSBuZXcgc2NvcGUgaXMgYWRkZWQgaW4gZXhhY3RseSBvbmUgcGxhY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBUT0tFTl9TQ09QRVM6IHJlYWRvbmx5IFRva2VuU2NvcGVbXSA9IFsncmVwb3J0aW5nOmluZ2VzdCcsICdyZWdpc3RyeTpwdXNoJywgJ3NjaW0nXTtcblxuLyoqXG4gKiBXaGF0IGtpbmQgb2YgcHJpbmNpcGFsIGEgdG9rZW4gc3BlYWtzIGZvci4gQXV0aCBkZWNpc2lvbnMgYnJhbmNoIG9uIHRoaXMgY2xhaW1cbiAqIOKAlCBuZXZlciBvbiB0aGUgc2hhcGUgb2YgYHN1YmAgb3Igb24gd2hpY2ggb3B0aW9uYWwgY2xhaW1zIGhhcHBlbiB0byBiZSBwcmVzZW50LlxuICpcbiAqIC0gYHVzZXJgICAgICAgICAgICAg4oCUIGEgcGVyc29uIChzZXNzaW9uLCBtYWNoaW5lIHNlc3Npb24sIFBBVCBvciBpbXBlcnNvbmF0aW9uKS5cbiAqIC0gYHNlcnZpY2VfYWNjb3VudGAg4oCUIGEgbm9uLWh1bWFuIGFjY291bnQgb3duZWQgYnkgT05FIG9yZywgaG9sZGluZyBvcmcgUm9sZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICBhbmQgYXV0aGVudGljYXRpbmcgd2l0aCBhIGBwYl9zYV/igKZgIGtleSBleGNoYW5nZWQgYXRcbiAqICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybS4gTmV2ZXIgc2F0aXNmaWVzIGFuIGFzc3VyYW5jZS9zdGVwLXVwIGdhdGUuXG4gKiAtIGBzZXJ2aWNlYCAgICAgICAgIOKAlCBhbiBpbnRlcm5hbCBQaXBlbGluZSBCdWlsZGVyIHNlcnZpY2UgKHtAbGluayBzaWduU2VydmljZVRva2VufSkuXG4gKi9cbmV4cG9ydCB0eXBlIFByaW5jaXBhbFR5cGUgPSAndXNlcicgfCAnc2VydmljZV9hY2NvdW50JyB8ICdzZXJ2aWNlJztcblxuLyoqXG4gKiBIb3cgYSB0b2tlbiBpcyB1c2VkLiBgYWNjZXNzYCBpcyBhIHNlc3Npb24tc3R5bGUgYWNjZXNzIHRva2VuIChpbnRlcmFjdGl2ZSxcbiAqIG1hY2hpbmUtc2Vzc2lvbiBvciBzZXJ2aWNlKTsgYGFwaV9rZXlgIGlzIGEgc3RhbmRhbG9uZSBjcmVkZW50aWFsIHRyYWNrZWQgYnlcbiAqIGl0cyBvd24gcmVjb3JkIOKAlCBhIFBlcnNvbmFsIEFjY2VzcyBUb2tlbiBvciBhIHNlcnZpY2UtYWNjb3VudCBrZXksIG5hbWVkIGJ5XG4gKiBganRpYC5cbiAqL1xuZXhwb3J0IHR5cGUgVG9rZW5Vc2UgPSAnYWNjZXNzJyB8ICdhcGlfa2V5JztcblxuLyoqXG4gKiBBdXRoZW50aWNhdGlvbiBtZXRob2RzIChgYW1yYCwgUkZDIDgxNzYgc3R5bGUpIHRoYXQgZXN0YWJsaXNoZWQgYSB1c2VyJ3NcbiAqIHNlc3Npb24uIGBwd2RgIHBhc3N3b3JkIHNpZ24taW47IGBvYXV0aGAgc29jaWFsIHNpZ24taW4gKEdvb2dsZSwgR2l0SHViIOKApik7XG4gKiBgc3NvYCBwZXItb3JnIE9JREMgc2luZ2xlIHNpZ24tb247IGB3ZWJhdXRobmAgYSBwYXNza2V5IChXZWJBdXRobiBhc3NlcnRpb25cbiAqIHdpdGggdXNlciB2ZXJpZmljYXRpb24pOyBgc3RlcHVwYCBhIHN0ZXAtdXAgcmUtdmVyaWZpY2F0aW9uIHRva2VuOyBgbWZhYCBhXG4gKiBzZWNvbmQgZmFjdG9yIHdhcyBwcmVzZW50ZWQgYXMgd2VsbCDigJQgdG9kYXkgYW4gYXV0aGVudGljYXRvci1hcHAgY29kZSAoVE9UUClcbiAqIG9yIG9uZSBvZiBpdHMgcmVjb3ZlcnkgY29kZXMsIHNvIGl0IGFwcGVhcnMgQUxPTkdTSURFIHRoZSBtZXRob2QgdGhhdFxuICogaWRlbnRpZmllZCB0aGUgdXNlciAoYFsncHdkJywgJ21mYSddYCksIG5ldmVyIG9uIGl0cyBvd24uXG4gKi9cbmV4cG9ydCB0eXBlIEF1dGhNZXRob2QgPSAncHdkJyB8ICdvYXV0aCcgfCAnc3NvJyB8ICd3ZWJhdXRobicgfCAnc3RlcHVwJyB8ICdtZmEnO1xuXG4vKipcbiAqIEF1dGhlbnRpY2F0b3IgYXNzdXJhbmNlIGxldmVsIG9mIHRoZSBzZXNzaW9uIGEgdG9rZW4gc3BlYWtzIGZvci5cbiAqXG4gKiAtIGAxYCDigJQgb25lIGZhY3RvcjogYSBwYXNzd29yZCwgYSBzb2NpYWwgc2lnbi1pbiwgb3IgU1NPIHRocm91Z2ggYW4gSWRQIHRoZVxuICogICBvcmcgaGFzIE5PVCBtYXJrZWQgYXMgZW5mb3JjaW5nIE1GQS5cbiAqIC0gYDJgIOKAlCBNRkEtZ3JhZGU6IGEgcGFzc2tleSBhc3NlcnRlZCB3aXRoIHVzZXIgdmVyaWZpY2F0aW9uLCBhIHBhc3N3b3JkIHBsdXNcbiAqICAgYW4gYXV0aGVudGljYXRvci1hcHAgY29kZSwgb3IgU1NPIHRocm91Z2ggYW4gSWRQIHRoZSBvcmcgSEFTIG1hcmtlZCBhc1xuICogICBlbmZvcmNpbmcgTUZBIChwcm92aWRlcnMgZG9uJ3Qgc2VuZCBgYW1yYCByZWxpYWJseSwgc28gdGhlIG9yZydzIG93blxuICogICBzdGF0ZW1lbnQgYWJvdXQgaXRzIElkUCBpcyB0aGUgc2lnbmFsKS5cbiAqXG4gKiBGaXhlZCB3aGVuIHRoZSBzZXNzaW9uIGlzIG9wZW5lZCBhbmQgc3RvcmVkIG9uIGl0cyByZWZyZXNoLXNlc3Npb24gc2xvdCwgc29cbiAqIHJlZnJlc2ggLyByZW5ld2FsIC8gc3dpdGNoLW9yZyBjb3B5IGl0IHZlcmJhdGltIGFuZCBjYW4gbmV2ZXIgUkFJU0UgaXQg4oCUXG4gKiBlYXJuaW5nIGFhbCAyIGFsd2F5cyBtZWFucyBhdXRoZW50aWNhdGluZyBhZ2FpbiB3aXRoIGEgc2Vjb25kIGZhY3Rvci5cbiAqL1xuZXhwb3J0IHR5cGUgQXNzdXJhbmNlTGV2ZWwgPSAxIHwgMjtcblxuLyoqIFJ1bnRpbWUgY2F0YWxvZ3MgZm9yIHRoZSBjbGFpbSB1bmlvbnMgYWJvdmUgKGEgdW5pb24gaXMgZXJhc2VkIGF0IHJ1bnRpbWUpLiAqL1xuZXhwb3J0IGNvbnN0IFBSSU5DSVBBTF9UWVBFUzogcmVhZG9ubHkgUHJpbmNpcGFsVHlwZVtdID0gWyd1c2VyJywgJ3NlcnZpY2VfYWNjb3VudCcsICdzZXJ2aWNlJ107XG5leHBvcnQgY29uc3QgVE9LRU5fVVNFUzogcmVhZG9ubHkgVG9rZW5Vc2VbXSA9IFsnYWNjZXNzJywgJ2FwaV9rZXknXTtcbmV4cG9ydCBjb25zdCBBVVRIX01FVEhPRFM6IHJlYWRvbmx5IEF1dGhNZXRob2RbXSA9IFsncHdkJywgJ29hdXRoJywgJ3NzbycsICd3ZWJhdXRobicsICdzdGVwdXAnLCAnbWZhJ107XG5cbi8qKlxuICogUXVvdGEgdHlwZSBpZGVudGlmaWVycy5cbiAqXG4gKiAtIGBwbHVnaW5zYCAvIGBwaXBlbGluZXNgIOKAlCBjb3VudCBvZiBjcmVhdGVkIGVudGl0aWVzXG4gKiAtIGBhcGlDYWxsc2Ag4oCUIGdlbmVyaWMgQVBJIGNhbGwgY291bnQgKHJlYWQtaGVhdnkgcGF0aHMpIG1hZGUgYnkgUEVPUExFIGluXG4gKiAgIElOVEVSQUNUSVZFIFNFU1NJT05TLiBQZXJzb25hbCBhY2Nlc3MgdG9rZW5zIGFyZSBOT1QgaGVyZTogdGhpcyBlbnRyeSB1c2VkXG4gKiAgIHRvIHNheSB0aGV5IHdlcmUsIGFuZCB7QGxpbmsgbWV0ZXJlZFF1b3RhVHlwZUZvcn0gc2F5cyBvdGhlcndpc2UuXG4gKiAtIGBhdXRvbWF0aW9uQ2FsbHNgIOKAlCB0aGUgc2FtZSBtZXRlcmVkIEFQSSBjYWxscyB3aGVuIHRoZSBjYWxsZXIgaXMgbm90IGFuXG4gKiAgIGludGVyYWN0aXZlIHNlc3Npb246IGFuIE9SRyBTRVJWSUNFIEFDQ09VTlRcbiAqICAgKGBwcmluY2lwYWxUeXBlOiAnc2VydmljZV9hY2NvdW50J2Ag4oCUIHBsYXRmb3JtLWF1dG9tYXRpb24sXG4gKiAgIHBpcGVsaW5lLXJlZ2lzdGVyLCByZXBvcnRpbmctaW5nZXN0IGFuZCByZWdpc3RyeS1wdXNoIGtleXMpLCBhIFBFUlNPTkFMXG4gKiAgIEFDQ0VTUyBLRVkgKGB0b2tlbl91c2U6ICdhcGlfa2V5J2ApLCBvciBhbnkgdG9rZW4gbWludGVkIHdoaWxlIGhvbGRpbmcgb25lXG4gKiAgIChgcGFyZW50S2V5SWRgKS4gQ291bnRlZCBJTlNURUFEIG9mIGBhcGlDYWxsc2AsIG5ldmVyIGFzIHdlbGwsIHNvIGFcbiAqICAgc2VsZi1tdXRhdGluZyBwaXBlbGluZSBkb2luZyBvbmUgcGx1Z2luIGxvb2t1cCBwZXIgc3RlcCBwZXIgcnVuIGNhbm5vdCBsb2NrXG4gKiAgIGl0cyBvd24gaHVtYW5zIG91dCBvZiB0aGUgY29uc29sZSAoc2VlIHtAbGluayBtZXRlcmVkUXVvdGFUeXBlRm9yfSwgd2hpY2ggaXNcbiAqICAgdGhlIGF1dGhvcml0eSBmb3IgdGhlIHNwbGl0IOKAlCBgZG9jcy9xdW90YXMubWRgIGFncmVlcyB3aXRoIGl0KS4gU2l6ZWQgZm9yXG4gKiAgIHRoYXQgdHJhZmZpYyBwZXIgdGllci5cbiAqIC0gYGFpQ2FsbHNgIOKAlCBBSSBwcm92aWRlciBpbnZvY2F0aW9ucyAoY291bnRlZCBzZXBhcmF0ZWx5IGJlY2F1c2UgZWFjaCBjYWxsXG4gKiAgIGhhcyBleHRlcm5hbCBkb2xsYXIgY29zdDsgc2l6ZWQgc21hbGxlciB0aGFuIGFwaUNhbGxzIHBlciB0aWVyKVxuICogLSBgc3RvcmFnZUJ5dGVzYCDigJQgcmVnaXN0cnkgc3RvcmFnZSBidWRnZXQgcGVyIG9yZy4gVW5saWtlIHRoZSBvdGhlcnNcbiAqICAgKHdoaWNoIGNvdW50IGRpc2NyZXRlIGV2ZW50cyksIHRoaXMgaXMgYSBtZWFzdXJlZCB0b3RhbCByZWNvbXB1dGVkXG4gKiAgIG9uIGRlbWFuZC4gSW5jcmVtZW50ZWQgYnkgdGhlIGltYWdlLXJlZ2lzdHJ5J3MgcHVzaC1nYXRlIGJlZm9yZVxuICogICBpc3N1aW5nIGEgdG9rZW4gd2hvc2Ugc2NvcGUgaW5jbHVkZXMgYHB1c2hgOyB0aGUgR0Mgc2NoZWR1bGVyXG4gKiAgIGV2ZW50dWFsbHkgZnJlZXMgdGhlIGJ5dGVzLCB0aGVuIHRoZSBuZXh0IHB1c2gtZ2F0ZSBjaGVjayByZWFkc1xuICogICB0aGUgbG93ZXIgdmFsdWUuIE5PVCBhIGNvdW50ZXItc3R5bGUgcXVvdGEgaW4gdGhlIHNlbnNlIG9mXG4gKiAgIGBpbmNyZW1lbnRVc2FnZWAg4oCUIHRoZSByZWdpc3RyeSBwdXNoZXMgdGhlIG1lYXN1cmVkIHRvdGFsIHZpYVxuICogICBgdXBkYXRlTGltaXRzYC9gcmVzZXRVc2FnZWAgZmxvd3MuIFRpZXIgbGltaXRzIGFyZSBieXRlcy5cbiAqIC0gYGRhc2hib2FyZHNgIC8gYGFsZXJ0UnVsZXNgIC8gYGFsZXJ0RGVzdGluYXRpb25zYCAvIGBpZHBDb25maWdzYCDigJRcbiAqICAgcmVzb3VyY2UtY291bnQgcXVvdGFzIGFkZGVkIHRvIGNsb3NlIHBlci1vcmcgRG9TIHN1cmZhY2VzIGluIHRoZVxuICogICB1c2VyLWVkaXRhYmxlIGZlYXR1cmUgdGFibGVzLiBXaXRob3V0IHRoZXNlIGNhcHMgYSBzaW5nbGUgb3JnIGNvdWxkXG4gKiAgIHNwYW0gdGhvdXNhbmRzIG9mIGRhc2hib2FyZHMgLyBydWxlcyBhbmQgYmxvYXQgdGhlIHNoYXJlZCBQb3N0Z3JlcyAvXG4gKiAgIE1vbmdvIHdvcmtpbmcgc2V0cy4gQ291bnRlZCBhdCBjcmVhdGUgdGltZTsgZGVjcmVtZW50ZWQgb24gZGVsZXRlLlxuICogLSBgbGlzdGluZ3NgIOKAlCBhY3RpdmUsIG5vbi1zdXNwZW5kZWQgcGx1Z2luLWVjb3N5c3RlbSBsaXN0aW5ncyBhIChyb290KSBvcmdcbiAqICAgcHVibGlzaGVzIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gQSBDT1VOVCBxdW90YSBsaWtlXG4gKiAgIGBwbHVnaW5zYDogY2hlY2tlZCBhdCBwdWJsaXNoLXJlcXVlc3Qgc3VibWl0IGFuZCByZS1jaGVja2VkIGF0IGFwcHJvdmFsO1xuICogICBpbnN0YWxscyBuZXZlciBjb3VudC5cbiAqL1xuLy8gTk9URTogYHNlYXRzYCBpcyBpbnRlbnRpb25hbGx5IE5PVCBoZXJlLiBJdCdzIGEgdGllciBsaW1pdCAoUXVvdGFUaWVyTGltaXRzKVxuLy8gZW5mb3JjZWQgYnkgY29tcGFyaW5nIHRoZSBvcmcncyBMSVZFIG1lbWJlciBjb3VudCBhdCBpbnZpdGUgdGltZSDigJQgbm90IGFuXG4vLyBpbmNyZW1lbnRpbmcgcGVyLXBlcmlvZCBjb3VudGVyIGxpa2UgdGhlIGNvbnN1bWFibGUgcXVvdGFzIGJlbG93LlxuZXhwb3J0IHR5cGUgUXVvdGFUeXBlID1cbiAgfCAncGx1Z2lucycgfCAncGlwZWxpbmVzJyB8ICdhcGlDYWxscycgfCAnYXV0b21hdGlvbkNhbGxzJyB8ICdhaUNhbGxzJyB8ICdzdG9yYWdlQnl0ZXMnXG4gIHwgJ2NwdUNyZWRpdHMnXG4gIHwgJ2Rhc2hib2FyZHMnIHwgJ2FsZXJ0UnVsZXMnIHwgJ2FsZXJ0RGVzdGluYXRpb25zJyB8ICdpZHBDb25maWdzJ1xuICB8ICdsaXN0aW5ncyc7XG5cbi8qKlxuICogVmFsaWQgcXVvdGEgdHlwZSB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBWQUxJRF9RVU9UQV9UWVBFUyA9IFtcbiAgJ3BsdWdpbnMnLCAncGlwZWxpbmVzJywgJ2FwaUNhbGxzJywgJ2F1dG9tYXRpb25DYWxscycsICdhaUNhbGxzJywgJ3N0b3JhZ2VCeXRlcycsXG4gICdjcHVDcmVkaXRzJyxcbiAgJ2Rhc2hib2FyZHMnLCAnYWxlcnRSdWxlcycsICdhbGVydERlc3RpbmF0aW9ucycsICdpZHBDb25maWdzJyxcbiAgJ2xpc3RpbmdzJyxcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogSHVtYW4gbGFiZWwgZm9yIGVhY2ggcXVvdGEgdHlwZSwgc2luZ3VsYXIg4oCUIHRoZSBvbmUgc3BlbGxpbmcgZXZlcnkgNDI5IGJvZHksXG4gKiBub3RpZmljYXRpb24gYW5kIGRhc2hib2FyZCB1c2VzIChcIkFQSSBjYWxsIHF1b3RhIHJlYWNoZWQg4oCmXCIpLlxuICpcbiAqIERFUklWRUQgZnJvbSBgdHlwZXMvcXVvdGEtY2F0YWxvZy50c2AsIHdoaWNoIGlzIHRoZSBvbmUgcGxhY2UgYSBxdW90YSB0eXBlJ3NcbiAqIGRpc3BsYXkgZmFjdHMgbGl2ZSBhbmQgdGhlIG9uZSB0aGUgYnJvd3NlciBpbXBvcnRzIGRpcmVjdGx5LiBUaGlzIHN0YXlzIGhlcmVcbiAqIGFzIHRoZSBzZXJ2ZXItc2lkZSBuYW1lIGJlY2F1c2UgZXZlcnkgc2VydmljZSBhbHJlYWR5IHJlYWRzIGl0IGZyb20gdGhlXG4gKiBiYXJyZWw7IGl0IGlzIGEgcHJvamVjdGlvbiBvZiB0aGUgY2F0YWxvZywgbm90IGEgc2Vjb25kIGNvcHkgb2YgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBRVU9UQV9UWVBFX0xBQkVMUzogUmVhZG9ubHk8UmVjb3JkPFF1b3RhVHlwZSwgc3RyaW5nPj4gPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gIChPYmplY3QuZW50cmllcyhRVU9UQV9DQVRBTE9HKSBhcyBBcnJheTxbUXVvdGFUeXBlLCB7IGxhYmVsOiBzdHJpbmcgfV0+KS5tYXAoKFt0eXBlLCBtZXRhXSkgPT4gW3R5cGUsIG1ldGEubGFiZWxdKSxcbikgYXMgUmVhZG9ubHk8UmVjb3JkPFF1b3RhVHlwZSwgc3RyaW5nPj47XG5cbi8qKlxuICogV2hlcmUgYSBwZXJzb24gZ29lcyB0byByYWlzZSBhIGxpbWl0LiBSZWxhdGl2ZSBvbiBwdXJwb3NlOiB0aGUgZGFzaGJvYXJkIGFuZFxuICogdGhlIEFQSSBzaGFyZSBhbiBvcmlnaW4gYmVoaW5kIG5naW54LCBhbmQgYSBDTEkgLyBMYW1iZGEgdGhhdCByZW5kZXJzIGEgNDI5XG4gKiBwcmVmaXhlcyBpdCB3aXRoIHRoZSBwbGF0Zm9ybSBVUkwgaXQgYWxyZWFkeSB0YWxrcyB0by5cbiAqL1xuZXhwb3J0IGNvbnN0IFFVT1RBX1VQR1JBREVfUEFUSCA9ICcvZGFzaGJvYXJkL2JpbGxpbmcnO1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBhIHZhbGlkIFF1b3RhVHlwZS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZhbGlkIFF1b3RhVHlwZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpZiAoaXNWYWxpZFF1b3RhVHlwZShyZXEuYm9keS5xdW90YVR5cGUpKSB7XG4gKiAgIC8vIHF1b3RhVHlwZSBpcyBndWFyYW50ZWVkIHRvIGJlIFF1b3RhVHlwZVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUXVvdGFUeXBlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUXVvdGFUeXBlIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgVkFMSURfUVVPVEFfVFlQRVMuaW5jbHVkZXModmFsdWUgYXMgUXVvdGFUeXBlKTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgZnJvbSBxdW90YSBjaGVjayBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFDaGVja1Jlc3VsdCB7XG4gIC8qKiBXaGV0aGVyIHRoZSByZXF1ZXN0IGlzIGFsbG93ZWQgKi9cbiAgYWxsb3dlZDogYm9vbGVhbjtcbiAgLyoqIE1heGltdW0gcXVvdGEgbGltaXQgKC0xIGZvciB1bmxpbWl0ZWQpICovXG4gIGxpbWl0OiBudW1iZXI7XG4gIC8qKiBDdXJyZW50IHVzYWdlIGNvdW50ICovXG4gIHVzZWQ6IG51bWJlcjtcbiAgLyoqIFJlbWFpbmluZyBxdW90YSAoLTEgZm9yIHVubGltaXRlZCkgKi9cbiAgcmVtYWluaW5nOiBudW1iZXI7XG4gIC8qKiBJU08gdGltZXN0YW1wIHdoZW4gcXVvdGEgcmVzZXRzICovXG4gIHJlc2V0QXQ6IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgcXVvdGEgaXMgdW5saW1pdGVkICovXG4gIHVubGltaXRlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRydWUgT05MWSB3aGVuIHRoaXMgcmVzdWx0IGlzIHRoZSBmYWlsLW9wZW4gc2VudGluZWwgcmV0dXJuZWQgYmVjYXVzZSB0aGVcbiAgICogcXVvdGEgc2VydmljZSB3YXMgdW5yZWFjaGFibGUgLyByZXR1cm5lZCBub24tb2sgKG5vdCBhIHJlYWwgcXVvdGEgcmVhZGluZykuXG4gICAqIExldHMgZmFpbC1jbG9zZWQgY2FsbGVycyAoZS5nLiB0aGUgcmVnaXN0cnkgc3RvcmFnZSBwdXNoLWdhdGUpIGRpc3Rpbmd1aXNoXG4gICAqIGFuIG91dGFnZSBmcm9tIGEgZ2VudWluZSBgbGltaXQ6IC0xYCAodW5saW1pdGVkKSBvcmcuIEFic2VudCBvbiByZWFsIHJlc3VsdHMuXG4gICAqL1xuICBmYWlsT3Blbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUXVvdGEgaW5mb3JtYXRpb24gZm9yIGVycm9yIHJlc3BvbnNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YUluZm8ge1xuICB0eXBlOiBRdW90YVR5cGU7XG4gIGxpbWl0OiBudW1iZXI7XG4gIHVzZWQ6IG51bWJlcjtcbiAgcmVtYWluaW5nOiBudW1iZXI7XG59XG5cbi8qKlxuICogU3RhbmRhcmQgQVBJIHN1Y2Nlc3MgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpU3VjY2Vzc1Jlc3BvbnNlPFQgPSB1bmtub3duPiB7XG4gIHN1Y2Nlc3M6IHRydWU7XG4gIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgZGF0YT86IFQ7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU3RhbmRhcmQgQVBJIGVycm9yIHJlc3BvbnNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaUVycm9yUmVzcG9uc2Uge1xuICBzdWNjZXNzOiBmYWxzZTtcbiAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGRldGFpbHM/OiB1bmtub3duO1xuICBxdW90YT86IFF1b3RhSW5mbztcbn1cblxuLyoqXG4gKiBDb21iaW5lZCBBUEkgcmVzcG9uc2UgdHlwZS5cbiAqL1xuZXhwb3J0IHR5cGUgQXBpUmVzcG9uc2U8VCA9IHVua25vd24+ID0gQXBpU3VjY2Vzc1Jlc3BvbnNlPFQ+IHwgQXBpRXJyb3JSZXNwb25zZTtcblxuLyoqXG4gKiBKV1QgcGF5bG9hZCBmcm9tIGFjY2VzcyB0b2tlbnMuXG4gKlxuICogVXNlcnMgY2FuIGJlbG9uZyB0byBtdWx0aXBsZSBvcmdhbml6YXRpb25zLiBUaGUgdG9rZW4gaXMgc2NvcGVkIHRvIG9uZVxuICogYWN0aXZlIG9yZ2FuaXphdGlvbiBhdCBhIHRpbWUuIFRoZSBgcm9sZWAgZmllbGQgaXMgdGhlIHVzZXIncyBwZXItb3JnXG4gKiByb2xlIGluIHRoYXQgb3JnYW5pemF0aW9uIChmcm9tIHRoZSBVc2VyT3JnYW5pemF0aW9uIGp1bmN0aW9uIGNvbGxlY3Rpb24pLFxuICogYW5kIGBpc0FkbWluYCBpcyBkZXJpdmVkIGFzIGByb2xlID09PSAnYWRtaW4nIHx8IHJvbGUgPT09ICdvd25lcidgLlxuICpcbiAqIFVzZSBgUE9TVCAvYXV0aC9zd2l0Y2gtb3JnYCB0byBjaGFuZ2UgdGhlIGFjdGl2ZSBvcmdhbml6YXRpb24sIHdoaWNoXG4gKiByZS1pc3N1ZXMgdG9rZW5zIHdpdGggdGhlIG5ldyBvcmcncyByb2xlIGFuZCBjb250ZXh0LlxuICovXG4vKipcbiAqIENvYXJzZSBwZXItb3JnIG1lbWJlcnNoaXAgbGFiZWwsIERFUklWRUQgZnJvbSB0aGUgUm9sZXMgYSB1c2VyIGlzIGFzc2lnbmVkXG4gKiAodGhlIGhpZ2hlc3QgYGdyYW50c1JvbGVgIGFtb25nIHRoZW07IGBvd25lcmAgaXMgc2V0IG9ubHkgYnkgb3duZXJzaGlwXG4gKiB0cmFuc2ZlcikuIEl0IGlzIGEgZGlzcGxheS9hdXRob3JpdHkgbGFiZWwg4oCUIGRyaXZpbmcgYGlzQWRtaW5gLCBvd25lcnNoaXAsXG4gKiBhbmQgc2VhdCBhY2NvdW50aW5nIOKAlCBOT1QgYSBwZXJtaXNzaW9uIHNvdXJjZS4gRWZmZWN0aXZlIHBlcm1pc3Npb25zIGNvbWVcbiAqIHNvbGVseSBmcm9tIHRoZSB1c2VyJ3MgYXNzaWduZWQgUm9sZXMgKHNlZSBgcmVzb2x2ZVVzZXJQZXJtaXNzaW9uc2ApLiBOb3QgYVxuICogZ2xvYmFsIHJvbGUuXG4gKi9cbmV4cG9ydCB0eXBlIE9yZ1JvbGUgPSAnb3duZXInIHwgJ2FkbWluJyB8ICdtZW1iZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEp3dFBheWxvYWQge1xuICAvKiogVXNlciBJRCAoc3ViamVjdCkgKi9cbiAgc3ViOiBzdHJpbmc7XG4gIC8qKiBVc2VybmFtZSAqL1xuICB1c2VybmFtZTogc3RyaW5nO1xuICAvKiogVXNlciBlbWFpbCAqL1xuICBlbWFpbDogc3RyaW5nO1xuICAvKiogV2hpY2gga2luZCBvZiBwcmluY2lwYWwgdGhpcyB0b2tlbiBzcGVha3MgZm9yIChzZWUge0BsaW5rIFByaW5jaXBhbFR5cGV9KS4gKi9cbiAgcHJpbmNpcGFsVHlwZTogUHJpbmNpcGFsVHlwZTtcbiAgLyoqIEhvdyB0aGUgdG9rZW4gaXMgdXNlZCAoc2VlIHtAbGluayBUb2tlblVzZX0pOyBQQVRzIGFyZSBgYXBpX2tleWAuICovXG4gIHRva2VuX3VzZTogVG9rZW5Vc2U7XG4gIC8qKlxuICAgKiBNZXRob2RzIHRoYXQgYXV0aGVudGljYXRlZCB0aGUgc2Vzc2lvbiAodXNlciBwcmluY2lwYWxzKS4gS2VwdCBvbiB0aGVcbiAgICogcmVmcmVzaC1zZXNzaW9uIHNsb3QsIHNvIHJlZnJlc2ggLyByZW5ldyAvIHN3aXRjaC1vcmcgY2FycnkgaXQgdW5jaGFuZ2VkLlxuICAgKiBBYnNlbnQgb24gc2VydmljZSB0b2tlbnMuXG4gICAqL1xuICBhbXI/OiBBdXRoTWV0aG9kW107XG4gIC8qKiBBc3N1cmFuY2UgbGV2ZWwgKHVzZXIgcHJpbmNpcGFscykuIE5ldmVyIHJhaXNlZCBieSByZWZyZXNoIC8gcmVuZXcgLyBzd2l0Y2gtb3JnLiAqL1xuICBhYWw/OiBBc3N1cmFuY2VMZXZlbDtcbiAgLyoqIEVwb2NoIHNlY29uZHMgb2YgdGhlIHNpZ24taW4gdGhhdCBlc3RhYmxpc2hlZCB0aGUgc2Vzc2lvbiAodXNlciBwcmluY2lwYWxzKS5cbiAgICogIE5ldmVyIHJlc2V0IGJ5IHJlZnJlc2ggLyByZW5ldyAvIHN3aXRjaC1vcmcuICovXG4gIGF1dGhfdGltZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBhY3RpdmUgb3JnIFJFUVVJUkVTIE1GQSBhbmQgaXRzIGdyYWNlIHBlcmlvZCBoYXMgcGFzc2VkLlxuICAgKlxuICAgKiBDYXJyaWVkIGFzIGEgY2xhaW0gc28gbm8gc2VydmljZSBoYXMgdG8gbG9vayB0aGUgcG9saWN5IHVwOiB0aGUgb3JnIHBvbGljeVxuICAgKiBpcyBlbmZvcmNlZCB3aGVyZSB0aGUgdG9rZW4gaXMgSVNTVUVEIChhIHNlc3Npb24gc2NvcGVkIHRvIHN1Y2ggYW4gb3JnIGdldHNcbiAgICogYGFhbDogMmAgb3IgaXMgcmVmdXNlZCksIGFuZCB0aGlzIGNsYWltIGlzIHRoZSByZWNvcmQgb2YgdGhhdCBkZWNpc2lvbiwgZm9yXG4gICAqIFVJIGNvcHkgYW5kIGF1ZGl0IHJhdGhlciB0aGFuIGZvciBhIHNlY29uZCBlbmZvcmNlbWVudCBwb2ludC5cbiAgICovXG4gIG1mYVJlcXVpcmVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBhY3RpdmUgb3JnJ3MgXCJhZG1pbmlzdHJhdGl2ZSBhY3Rpb25zIHJlcXVpcmUgTUZBXCIgcG9saWN5XG4gICAqIChgYWRtaW5BY3Rpb25zUmVxdWlyZU1mYWAsIHN0cmljdGVzdCBhY3Jvc3MgdGhlIG9yZyBhbmQgaXRzIGFuY2VzdG9ycykuXG4gICAqIFByZXNlbnQg4oCUIGFuZCBhbHdheXMgYDJgIOKAlCBvbmx5IHdoZW4gdGhlIHBvbGljeSBpcyBvbi4gSXQgaXMgcmVzb2x2ZWQgd2hlblxuICAgKiB0aGUgdG9rZW4gaXMgSVNTVUVELCBzbyBzZXJ2aWNlcyB0aGF0IGNhbid0IHJlYWQgdGhlIG9yZyBkb2N1bWVudCBzdGlsbCBrbm93XG4gICAqIHRoZSBwb2xpY3k6IGByZXF1aXJlT3JnQWRtaW5Bc3N1cmFuY2VgIHJlZnVzZXMgYW4gYGFhbDogMWAgc2Vzc2lvbiBvbiBhblxuICAgKiBhZG1pbmlzdHJhdGl2ZSByb3V0ZSB3aGVuIHRoaXMgY2xhaW0gaXMgcHJlc2VudC4gQ2hhbmdpbmcgdGhlIHBvbGljeSBidW1wc1xuICAgKiBldmVyeSBhZmZlY3RlZCBtZW1iZXIncyBgdG9rZW5WZXJzaW9uYCwgc28gdGhlIGNsYWltIGNhbid0IGdvIHN0YWxlLlxuICAgKi9cbiAgb3JnX2FkbWluX2FhbD86IDI7XG4gIC8qKlxuICAgKiBCT09UU1RSQVAtQURNSU4gRVhDRVBUSU9OLiBTZXQgb25seSBvbiBhIHNlc3Npb24gb3BlbmVkIGJ5XG4gICAqIHRoZSBpbnN0YWxsJ3MgYm9vdHN0cmFwIGFkbWluIChgQk9PVFNUUkFQX1NVUEVSQURNSU5fRU1BSUxTYCwgc3lzdGVtIG9yZylcbiAgICogd2hpbGUgdGhleSBzdGlsbCBoYXZlIG5vIGVucm9sbGVkIGZhY3Rvci4gU3VjaCBhIHNlc3Npb24gaXMgYGFhbDogMWAgYW5kIG1heVxuICAgKiByZWFjaCBPTkxZIGVucm9sbWVudCwgc2lnbi1vdXQgYW5kIHRoZSByb3V0ZXMgYGluaXQtcGxhdGZvcm0uc2hgIGNhbGxzO1xuICAgKiBldmVyeSBvdGhlciBzZXJ2aWNlIHJlZnVzZXMgaXQgb3V0cmlnaHQgKHNlZSBgcmVxdWlyZUF1dGhgKS4gVGhlIGV4Y2VwdGlvblxuICAgKiBjbG9zZXMgcGVybWFuZW50bHkgYXQgdGhlIGZpcnN0IGVucm9sbWVudCBhbmQgbmV2ZXIgcmVvcGVucy5cbiAgICovXG4gIG1mYUVucm9sbG1lbnRQZW5kaW5nPzogYm9vbGVhbjtcbiAgLyoqIFBlci1vcmcgcm9sZSBpbiB0aGUgYWN0aXZlIG9yZ2FuaXphdGlvbiAoJ293bmVyJyB8ICdhZG1pbicgfCAnbWVtYmVyJykuIE5vdCBhIGdsb2JhbCByb2xlLiAqL1xuICByb2xlOiBPcmdSb2xlO1xuICAvKiogRGVyaXZlZDogdHJ1ZSB3aGVuIHJvbGUgaXMgJ2FkbWluJyBvciAnb3duZXInIGluIHRoZSBhY3RpdmUgb3JnYW5pemF0aW9uICovXG4gIGlzQWRtaW4/OiBib29sZWFuO1xuICAvKipcbiAgICogUmVzb2x2ZWQgZmluZS1ncmFpbmVkIHBlcm1pc3Npb25zIGZvciB0aGUgYWN0aXZlIG9yZy90ZWFtIOKAlCB0aGUgdW5pb24gb2ZcbiAgICogdGhlIHBlcm1pc3Npb25zIGNhcnJpZWQgYnkgZXZlcnkgUm9sZSB0aGUgdXNlciBpcyBhc3NpZ25lZCAoc2VlXG4gICAqIGByZXNvbHZlVXNlclBlcm1pc3Npb25zYCkuIEFic2VudCBvbiBtYWNoaW5lL3Njb3BlZCB0b2tlbnMuIFN1cGVyYWRtaW5zIGFyZVxuICAgKiBncmFudGVkIGFsbCBwZXJtaXNzaW9ucyBpbXBsaWNpdGx5IGFuZCBtYXkgb21pdCB0aGlzLiBFbmRwb2ludHMgZW5mb3JjZSB2aWFcbiAgICogYHJlcXVpcmVQZXJtaXNzaW9uKC4uLilgLlxuICAgKi9cbiAgcGVybWlzc2lvbnM/OiBQZXJtaXNzaW9uW107XG4gIC8qKlxuICAgKiBHbG9iYWwgc3VwZXItYWRtaW4gZmxhZyAoY3Jvc3Mtb3JnKS4gV2hlbiBgdHJ1ZWAsIHRoZSB1c2VyIGlzIHRyZWF0ZWRcbiAgICogYXMgYSBzeXN0ZW0gYWRtaW5pc3RyYXRvciByZWdhcmRsZXNzIG9mIHdoaWNoIG9yZyB0aGV5J3JlIGN1cnJlbnRseVxuICAgKiBhY3RpbmcgdW5kZXIuIFRoaXMgaXMgdGhlIFNPTEUgc2lnbmFsIGZvciBzeXNhZG1pbiBhdXRob3JpdHkg4oCUIG1lbWJlcnNoaXAgaW5cbiAgICogdGhlIHdlbGwta25vd24gXCJzeXN0ZW1cIiBvcmcgZ3JhbnRzIG5vdGhpbmcsIGJlY2F1c2UgdGhhdCB3b3VsZCBjb25mbGF0ZVxuICAgKiBcIlBpcGVsaW5lIEJ1aWxkZXIgb3BlcmF0b3JcIiB3aXRoIFwiY3VzdG9tZXIgdGVuYW50XCIgaW4gdGhlIGRhdGEgbW9kZWwuXG4gICAqL1xuICBpc1N1cGVyQWRtaW4/OiBib29sZWFuO1xuICAvKiogT3JnYW5pemF0aW9uJ3MgcXVvdGEgdGllci4gKi9cbiAgdGllcj86IFF1b3RhVGllcjtcbiAgLyoqIFJlc29sdmVkIGZlYXR1cmUgZmxhZ3MgZm9yIHRoaXMgdXNlci9vcmcgKi9cbiAgZmVhdHVyZXM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIE5hcnJvdyBjYXBhYmlsaXR5IHNjb3BlIGZvciBtYWNoaW5lL2F1dG9tYXRpb24gdG9rZW5zIChlLmcuXG4gICAqIGAncmVwb3J0aW5nOmluZ2VzdCdgKS4gQWJzZW50IG9uIG5vcm1hbCBpbnRlcmFjdGl2ZSB1c2VyIHRva2Vucy4gRW5kcG9pbnRzXG4gICAqIHRoYXQgYWNjZXB0IGEgc2NvcGVkIGlkZW50aXR5IGNoZWNrIHRoaXMgKHNlZSBgaGFzU2NvcGVgKSBpbnN0ZWFkIG9mIHJvbGU7XG4gICAqIGEgc2NvcGVkIHRva2VuIGlzIG1pbnRlZCB3aXRoIG1pbmltYWwgcm9sZSBmb3IgbGVhc3QtcHJpdmlsZWdlLlxuICAgKi9cbiAgc2NvcGU/OiBUb2tlblNjb3BlO1xuICAvKipcbiAgICogVGhlIHRva2VuJ3MgYHBlcm1pc3Npb25zYCB3ZXJlIE5BUlJPV0VEIHRvIGEgY2F0YWxvZyBzdWJzZXQgY2hvc2VuIHdoZW4gdGhlXG4gICAqIGNyZWRlbnRpYWwgd2FzIGNyZWF0ZWQgKGEgcGVybWlzc2lvbi1zY29wZWQgcGVyc29uYWwgYWNjZXNzIGtleSBvciBtYWNoaW5lXG4gICAqIHRva2VuKS4gVGhlIGNsYWltIGlzIHRoZSByZWNvcmQgdGhhdCBgcGVybWlzc2lvbnNgIGlzIHRoZSBJTlRFUlNFQ1RJT04gb2ZcbiAgICogdGhhdCBzdWJzZXQgd2l0aCB0aGUgaG9sZGVyJ3MgY3VycmVudCBSb2xlcyDigJQgbm90IHRoZWlyIGZ1bGwgYXV0aG9yaXR5IOKAlCBzb1xuICAgKiBhbnl0aGluZyB0aGUgdG9rZW4gbWludHMgY2FuIG9ubHkgYmUgbmFycm93ZXIgc3RpbGwsIGFuZCBpdCBuZXZlciBjYXJyaWVzXG4gICAqIGBpc1N1cGVyQWRtaW5gIG9yIGFuIGFkbWluIGByb2xlYCAoYm90aCB3b3VsZCBieXBhc3MgdGhlIHN1YnNldCkuIE9ubHkgZXZlclxuICAgKiBgdHJ1ZWA7IGFic2VudCBvbiB1bnJlc3RyaWN0ZWQgdG9rZW5zLlxuICAgKi9cbiAgcGVybWlzc2lvbnNSZXN0cmljdGVkPzogYm9vbGVhbjtcbiAgLyoqIEFjdGl2ZSBvcmdhbml6YXRpb24gSUQgKGZyb20gVXNlck9yZ2FuaXphdGlvbiBtZW1iZXJzaGlwKSAqL1xuICBvcmdhbml6YXRpb25JZD86IHN0cmluZztcbiAgLyoqIEFjdGl2ZSBvcmdhbml6YXRpb24gbmFtZSAqL1xuICBvcmdhbml6YXRpb25OYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogT3JnIOKGkiB0ZWFtIGhpZXJhcmNoeSAob3JnLXRlYW0taGllcmFyY2h5IHByb3Bvc2FsLCBwaGFzZSAxKS5cbiAgICogYHBhcmVudE9yZ2FuaXphdGlvbklkYCBpcyB0aGUgYWN0aXZlIG9yZydzIGRpcmVjdCBwYXJlbnQ7IGByb290T3JnYW5pemF0aW9uSWRgXG4gICAqIGlzIHRoZSB0b3Agb2YgaXRzIGFuY2VzdHJ5IGNoYWluLiBCb3RoIGFyZSAqKm9taXR0ZWQgZm9yIGZsYXQgKHJvb3QpIG9yZ3MqKiDigJRcbiAgICogY29uc3VtZXJzIHNob3VsZCB0cmVhdCB0aGUgZWZmZWN0aXZlIHJvb3QgYXMgYHJvb3RPcmdhbml6YXRpb25JZCA/PyBvcmdhbml6YXRpb25JZGBcbiAgICogKHVzZSB0aGUgc2hhcmVkIHtAbGluayBlZmZlY3RpdmVSb290T3JnSWR9IGFjY2Vzc29yIHJhdGhlciB0aGFuIGNvYWxlc2NpbmcgaW5saW5lKS5cbiAgICogQ3VycmVudGx5IGV2ZXJ5IG9yZyBpcyBmbGF0LCBzbyB0aGVzZSBhcmUgYWJzZW50IG9uIGFsbCB0b2tlbnMgdG9kYXkuXG4gICAqL1xuICBwYXJlbnRPcmdhbml6YXRpb25JZD86IHN0cmluZztcbiAgLyoqIFJvb3Qgb3JnYW5pemF0aW9uIElEIG9mIHRoZSBhY3RpdmUgb3JnJ3MgYW5jZXN0cnkgY2hhaW4gKHNlZSBgcGFyZW50T3JnYW5pemF0aW9uSWRgKS4gKi9cbiAgcm9vdE9yZ2FuaXphdGlvbklkPzogc3RyaW5nO1xuICAvKipcbiAgICogU2V0IG9uIHRva2VucyBpc3N1ZWQgYnkgdGhlIHN5c2FkbWluIGltcGVyc29uYXRpb24gZmxvd1xuICAgKiAoYFBPU1QgL2FkbWluL2ltcGVyc29uYXRlLzp1c2VySWRgKS4gQ2FycmllcyB0aGUgb3JpZ2luYWwgc3lzYWRtaW4nc1xuICAgKiB1c2VyIGlkIHNvIGF1ZGl0IGV2ZW50cyBzdGlsbCBhdHRyaWJ1dGUgYWN0aW9ucyBjb3JyZWN0bHkuXG4gICAqL1xuICBpbXBlcnNvbmF0b3JJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFVuaXF1ZSB0b2tlbiBpZC4gT24gYW4gaW1wZXJzb25hdGlvbiB0b2tlbiBpdCBpZGVudGlmaWVzIHRoZSBTRVNTSU9OLCBzbyBpdFxuICAgKiBjYW4gYmUgcmV2b2tlZCBvbiBpdHMgb3duIGFjcm9zcyBldmVyeSBzZXJ2aWNlIChzZWVcbiAgICogYFRva2VuUmV2b2NhdGlvblN0b3JlLmdldFNlc3Npb25SZXZvY2F0aW9uYCkuIFBlcnNvbmFsIEFjY2VzcyBUb2tlbnNcbiAgICogKGB0b2tlbl91c2U6ICdhcGlfa2V5J2ApIGNhcnJ5IG9uZSB0b28sIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZWlyIG93biByZWNvcmQuXG4gICAqIEEgYGp0aWAgYWxvbmUgbmV2ZXIgY2xhc3NpZmllcyBhIHRva2VuIOKAlCBgdG9rZW5fdXNlYCBhbmQgYGltcGVyc29uYXRvcklkYCBkby5cbiAgICovXG4gIGp0aT86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIHRva2VuIGlzIHJlYWQtb25seSDigJQgYW55IG5vbi1HRVQgcmVxdWVzdCBpcyByZWplY3RlZFxuICAgKiB1cHN0cmVhbSBieSB0aGUgcGxhdGZvcm0ncyByZWFkLW9ubHkgaW1wZXJzb25hdGlvbiBnYXRlLiBMZXRzXG4gICAqIHN5c2FkbWlucyBcInZpZXcgYXMgdXNlciBYXCIgd2l0aG91dCByaXNraW5nIGEgZGVzdHJ1Y3RpdmUgYWN0aW9uLlxuICAgKi9cbiAgaW1wZXJzb25hdGlvblJlYWRPbmx5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSByZWZyZXNoLXNlc3Npb24gc2xvdCAoaW50ZXJhY3RpdmUgb3IgbWFjaGluZSkgdGhpcyBhY2Nlc3MgdG9rZW4gd2FzXG4gICAqIG1pbnRlZCB3aXRoLiBSZXZva2luZyB0aGF0IE9ORSBzbG90IHB1Ymxpc2hlcyBgcmV2b2tlOnNpZDo8c2lkPmAgKHNlZVxuICAgKiBgY3JlZGVudGlhbFJldm9jYXRpb25LZXlgKSwgd2hpY2ggZXZlcnkgc2VydmljZSBjaGVja3MgaW4gYHJlcXVpcmVBdXRoYCwgc29cbiAgICogYSBzaW5nbGUgc2lnbmVkLW91dCBkZXZpY2UgLyBtYWNoaW5lIGNyZWRlbnRpYWwgc3RvcHMgd29ya2luZyBldmVyeXdoZXJlXG4gICAqIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgYXQgbmF0dXJhbCBleHBpcnkuIEFic2VudCBvbiBQQVRzIGFuZCBpbXBlcnNvbmF0aW9uLlxuICAgKi9cbiAgc2lkPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGFjY2VzcyBrZXkgKFBBVCAvIHNlcnZpY2UtYWNjb3VudCBrZXkgaWQpIHRoaXMgdG9rZW4gd2FzIERFUklWRUQgZnJvbSxcbiAgICogd2hlbiBpdCBpcyBub3QgaXRzZWxmIHRoZSBleGNoYW5nZWQga2V5IHRva2VuICh3aG9zZSBrZXkgaWQgaXMgaXRzIGBqdGlgKSDigJRcbiAgICogZS5nLiBhIHN3aXRjaC1vcmcgb3IgZ2VuZXJhdGUtdG9rZW4gbWludCBtYWRlIHdoaWxlIGhvbGRpbmcgYW4gZXhjaGFuZ2VkXG4gICAqIGtleSB0b2tlbi4gUmV2b2tpbmcgdGhlIGtleSBwdWJsaXNoZXMgYHJldm9rZTprZXk6PGtleUlkPmAsIHdoaWNoIHJlamVjdHNcbiAgICogZXZlcnkgdG9rZW4gdGhhdCBuYW1lcyBpdCBoZXJlIG9yIGFzIGl0cyBganRpYC5cbiAgICovXG4gIHBhcmVudEtleUlkPzogc3RyaW5nO1xuICAvKipcbiAgICogU0VSVklDRSB0b2tlbnMgb25seTogdGhpcyBhdWRpdCBkZWxpdmVyeSBtYXkgcmVjb3JkIGFuIGBhZmZlY3RlZE9yZ0lkYFxuICAgKiBvdXRzaWRlIHRoZSB0b2tlbidzIG9yZyAoc2VlIGBTZXJ2aWNlVG9rZW5PcHRpb25zLmF1ZGl0Q3Jvc3NPcmdgKS4gSG9ub3VyZWRcbiAgICogYnkgcGxhdGZvcm0ncyBgL2F1ZGl0L2V2ZW50c2AgaW5nZXN0IGFsb25lLlxuICAgKi9cbiAgYXVkaXRDcm9zc09yZz86IHRydWU7XG4gIC8qKlxuICAgKiBUaGUgdXNlcidzIEFDQ0VTUyB2ZXJzaW9uIGF0IHRoZSBtb21lbnQgdGhpcyB0b2tlbiB3YXMgaXNzdWVkOiB0aGUgaGFyZFxuICAgKiBgdG9rZW5WZXJzaW9uYCAoZGVhY3RpdmF0ZSAvIHBhc3N3b3JkIGNoYW5nZSAvIGxvZ291dC1hbGwg4oCUIGNsZWFycyBzbG90cylcbiAgICogcGx1cyBgY2xhaW1zVmVyc2lvbmAgKHJvbGUsIHRpZXIsIG1lbWJlcnNoaXAgb3Igb3duZXJzaGlwIGNoYW5nZXMg4oCUIHJlLW1pbnRlZFxuICAgKiBvbiByZWZyZXNoKS4gQm90aCBvbmx5IGdyb3csIHNvIGEgdG9rZW4gd2hvc2UgZW1iZWRkZWQgdmVyc2lvbiBpcyBiZWhpbmQgdGhlXG4gICAqIGN1cnJlbnQgb25lIGhhcyBiZWVuIFJFVk9LRUQuIFBsYXRmb3JtIHZhbGlkYXRlcyB0aGlzIGFnYWluc3QgTW9uZ287IHRoZVxuICAgKiBzdGF0ZWxlc3Mgc2VydmljZXMgdmFsaWRhdGUgaXQgYWdhaW5zdCBhIFJlZGlzLXB1Ymxpc2hlZCBjdXJyZW50LXZlcnNpb25cbiAgICogc3RvcmUgKHNlZSBgc2V0VG9rZW5SZXZvY2F0aW9uU3RvcmVgKS4gQWJzZW50IG9uIG1hY2hpbmUvc2VydmljZSB0b2tlbnMuXG4gICAqL1xuICB0b2tlblZlcnNpb24/OiBudW1iZXI7XG4gIC8qKiBUb2tlbiB0eXBlICovXG4gIHR5cGU6ICdhY2Nlc3MnIHwgJ3JlZnJlc2gnO1xuICAvKiogSXNzdWVkIGF0IHRpbWVzdGFtcCAqL1xuICBpYXQ/OiBudW1iZXI7XG4gIC8qKiBFeHBpcmF0aW9uIHRpbWVzdGFtcCAqL1xuICBleHA/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIGFjY291bnQgYm91bmRhcnkgKHJvb3Qgb3JnKSBmb3IgYSB0b2tlbidzIGFjdGl2ZSBvcmcuXG4gKlxuICogVGhlIGFjY291bnQgcm9vdCBpcyBgcm9vdE9yZ2FuaXphdGlvbklkID8/IG9yZ2FuaXphdGlvbklkYDogYSBmbGF0IChyb290KSBvcmdcbiAqIG9taXRzIGByb290T3JnYW5pemF0aW9uSWRgLCBzbyBpdCBJUyBpdHMgb3duIHJvb3Q7IGEgdGVhbSAoY2hpbGQpIG9yZyBjYXJyaWVzXG4gKiB0aGUgdG9wIG9mIGl0cyBhbmNlc3RyeSBjaGFpbi4gRXZlcnkgYWNjb3VudC1zY29wZWQgcmVhZCAocXVvdGEvc2VhdC9iaWxsaW5nXG4gKiBwb29saW5nKSBtdXN0IHJlc29sdmUgdGhyb3VnaCB0aGlzIGNvYWxlc2NlIHJhdGhlciB0aGFuIHJlYWRpbmdcbiAqIGBvcmdhbml6YXRpb25JZGAgZGlyZWN0bHkg4oCUIHRoZSBsYXR0ZXIgc2lsZW50bHkgd29ya3MgdG9kYXkgKGFsbCBvcmdzIGZsYXQpXG4gKiBidXQgd291bGQgYmluZCB0byB0aGUgdGVhbSBpbnN0ZWFkIG9mIHRoZSBhY2NvdW50IG9uY2UgdGVhbXMgZXhpc3QuXG4gKlxuICogQHJldHVybnMgdGhlIGVmZmVjdGl2ZSByb290IG9yZyBpZCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBuZWl0aGVyIGZpZWxkIGlzIHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVmZmVjdGl2ZVJvb3RPcmdJZChcbiAgcGF5bG9hZDogUGljazxKd3RQYXlsb2FkLCAnb3JnYW5pemF0aW9uSWQnIHwgJ3Jvb3RPcmdhbml6YXRpb25JZCc+LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHBheWxvYWQucm9vdE9yZ2FuaXphdGlvbklkID8/IHBheWxvYWQub3JnYW5pemF0aW9uSWQ7XG59XG5cbi8qKlxuICogRXh0ZW5kZWQgRXhwcmVzcyBSZXF1ZXN0IHdpdGggdXNlciBwcm9wZXJ0eS5cbiAqL1xuZGVjbGFyZSBnbG9iYWwge1xuICBuYW1lc3BhY2UgRXhwcmVzcyB7XG4gICAgaW50ZXJmYWNlIFJlcXVlc3Qge1xuICAgICAgdXNlcj86IEp3dFBheWxvYWQ7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU2VydmljZSBjb25maWd1cmF0aW9uIGZvciBpbnRlcm5hbCBIVFRQIGNsaWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29uZmlnIHtcbiAgLyoqIFNlcnZpY2UgaG9zdG5hbWUgKi9cbiAgaG9zdDogc3RyaW5nO1xuICAvKiogU2VydmljZSBwb3J0ICovXG4gIHBvcnQ6IG51bWJlcjtcbiAgLyoqIFJlcXVlc3QgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi9cbiAgdGltZW91dD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBIZWFsdGggY2hlY2sgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGVhbHRoQ2hlY2tSZXNwb25zZSB7XG4gIHN0YXR1czogJ2hlYWx0aHknIHwgJ3VuaGVhbHRoeSc7XG4gIHNlcnZpY2U6IHN0cmluZztcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHVwdGltZTogbnVtYmVyO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBkZXBlbmRlbmNpZXM/OiBSZWNvcmQ8c3RyaW5nLCAnY29ubmVjdGVkJyB8ICdkaXNjb25uZWN0ZWQnIHwgJ3Vua25vd24nPjtcbn1cbiJdfQ==
@@ -11,7 +11,7 @@
11
11
  * individually — no shared To: line).
12
12
  */
13
13
  /** A notification event number. */
14
- export type EcosystemNotificationEventId = 'N1' | 'N2' | 'N3' | 'N4' | 'N5' | 'N6' | 'N7' | 'N8' | 'N9' | 'N10' | 'N11' | 'N12' | 'N13' | 'N14' | 'N15' | 'N16' | 'N17' | 'N18' | 'N19' | 'N20' | 'N21' | 'N22' | 'N23' | 'N24' | 'N25' | 'N26' | 'N27' | 'N28' | 'N29' | 'N30' | 'N31';
14
+ export type EcosystemNotificationEventId = 'N1' | 'N2' | 'N3' | 'N4' | 'N5' | 'N6' | 'N7' | 'N8' | 'N9' | 'N10' | 'N11' | 'N12' | 'N13' | 'N14' | 'N15' | 'N16' | 'N17' | 'N18' | 'N19' | 'N20' | 'N21' | 'N22' | 'N23' | 'N24' | 'N25' | 'N26' | 'N27' | 'N28' | 'N29' | 'N30' | 'N31' | 'N32' | 'N33';
15
15
  /** A delivery channel. In-app is the source of truth; email is the courtesy copy. */
16
16
  export type EcosystemNotificationChannel = 'in_app' | 'email';
17
17
  /** A per-user EMAIL opt-out key. In-app is never optional. */
@@ -33,14 +33,14 @@ export interface EcosystemEventSpec {
33
33
  channels: readonly EcosystemNotificationChannel[];
34
34
  /**
35
35
  * Email opt-out key, or `null` when the email is TRANSACTIONAL / security
36
- * (N1, N3–N5, N7–N10, N18–N23, N25, N28–N31 can't be turned off).
36
+ * (N1, N3–N5, N7–N10, N18–N23, N25, N28–N33 can't be turned off).
37
37
  */
38
38
  preference: EcosystemEmailPreference | null;
39
39
  /** When the email is batched rather than immediate, its cadence. */
40
40
  digest?: EcosystemDigestCadence;
41
41
  /** Allowed to address a raw email: the anonymous SUBMITTER (the
42
42
  * transactional submission notices) and an org's VERIFIED external
43
- * security address (the plugin security notices N30/N31). */
43
+ * security address (the plugin security notices N30–N33). */
44
44
  allowsAddress?: boolean;
45
45
  }
46
46
  /** The notification event table, as data. */
@@ -48,7 +48,7 @@ export declare const ECOSYSTEM_NOTIFICATION_EVENTS: Readonly<Record<EcosystemNot
48
48
  /** Whether `value` is a notification event number. */
49
49
  export declare function isEcosystemNotificationEvent(value: unknown): value is EcosystemNotificationEventId;
50
50
  /** Org-local permissions an {@link EcosystemRecipientSpec} `org_permission` rule may name. */
51
- export type EcosystemOrgRecipientPermission = 'publishers:manage' | 'plugin_installs:manage' | 'plugins:write';
51
+ export type EcosystemOrgRecipientPermission = 'publishers:manage' | 'plugin_installs:manage' | 'plugins:write' | 'pipelines:write';
52
52
  /** System-org permissions a `moderators` rule may name. */
53
53
  export type EcosystemModeratorPermission = 'plugins:moderate' | 'publishers:verify';
54
54
  /**
@@ -70,7 +70,7 @@ export type EcosystemModeratorPermission = 'plugins:moderate' | 'publishers:veri
70
70
  * - `superadmins` — every platform superadmin.
71
71
  * - `address` — a raw address; only the anonymous SUBMITTER notices (N1, N3,
72
72
  * N4), whose recipient has no account, and an org's VERIFIED external
73
- * security address on the plugin security notices (N30, N31).
73
+ * security address on the plugin security notices (N30–N33).
74
74
  */
75
75
  export type EcosystemRecipientSpec = {
76
76
  kind: 'user';
@@ -47,6 +47,12 @@ export const ECOSYSTEM_NOTIFICATION_EVENTS = {
47
47
  // the org's digest setting (the sender batches it), N30 is always immediate.
48
48
  N30: { description: 'Plugin version blocked (unscanned or fixable Critical)', channels: ['in_app', 'email'], preference: null, allowsAddress: true },
49
49
  N31: { description: 'Rescan found new Critical/High in a plugin version', channels: ['in_app', 'email'], preference: null, allowsAddress: true },
50
+ // Pipeline-owner notices: a lookup / runtime check REFUSED a pipeline's plugin
51
+ // version (deduplicated per pipeline + version per day), and a time-boxed risk
52
+ // acceptance of a pipeline's findings LAPSED (the findings are live again).
53
+ // Routed to the org's pipeline writers under the same security settings.
54
+ N32: { description: 'Pipeline blocked by a plugin vulnerability policy', channels: ['in_app', 'email'], preference: null, allowsAddress: true },
55
+ N33: { description: 'Pipeline vulnerability risk acceptance lapsed', channels: ['in_app', 'email'], preference: null, allowsAddress: true },
50
56
  };
51
57
  /** Whether `value` is a notification event number. */
52
58
  export function isEcosystemNotificationEvent(value) {
@@ -56,7 +62,7 @@ export function isEcosystemNotificationEvent(value) {
56
62
  export const ECOSYSTEM_NOTIFY_SUBJECT_MAX = 500;
57
63
  export const ECOSYSTEM_NOTIFY_TEXT_MAX = 10000;
58
64
  const MAX_RECIPIENT_RULES = 50;
59
- const ORG_PERMISSIONS = ['publishers:manage', 'plugin_installs:manage', 'plugins:write'];
65
+ const ORG_PERMISSIONS = ['publishers:manage', 'plugin_installs:manage', 'plugins:write', 'pipelines:write'];
60
66
  /** At most this many users in one `org_members` rule. */
61
67
  export const ECOSYSTEM_ORG_MEMBERS_MAX = 100;
62
68
  const MODERATOR_PERMISSIONS = ['plugins:moderate', 'publishers:verify'];
@@ -133,7 +139,7 @@ export function parseEcosystemNotifyRequest(body) {
133
139
  return 'body must be an object';
134
140
  const b = body;
135
141
  if (!isEcosystemNotificationEvent(b.event))
136
- return 'event must be one of N1..N31';
142
+ return 'event must be one of N1..N33';
137
143
  const spec = ECOSYSTEM_NOTIFICATION_EVENTS[b.event];
138
144
  if (!nonEmptyString(b.subject, ECOSYSTEM_NOTIFY_SUBJECT_MAX))
139
145
  return `subject is required (max ${ECOSYSTEM_NOTIFY_SUBJECT_MAX})`;
@@ -225,4 +231,4 @@ export function renderEcosystemDigest(event, items) {
225
231
  text: items.map((i) => `• ${i.subject}`).join('\n').slice(0, ECOSYSTEM_NOTIFY_TEXT_MAX),
226
232
  };
227
233
  }
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLW5vdGlmaWNhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvZWNvc3lzdGVtLW5vdGlmaWNhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQWdDdEM7MEVBQzBFO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUE4RTtJQUMxSCx5QkFBeUIsRUFBRSxjQUFjO0lBQ3pDLDBCQUEwQixFQUFFLGVBQWU7SUFDM0MsMEJBQTBCLEVBQUUsZUFBZTtJQUMzQyxrQ0FBa0MsRUFBRSx1QkFBdUI7Q0FDNUQsQ0FBQztBQUtGLHFEQUFxRDtBQUNyRCxNQUFNLENBQUMsTUFBTSxzQ0FBc0MsR0FDakQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBd0JuRCw2Q0FBNkM7QUFDN0MsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQXVFO0lBQy9HLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSw0Q0FBNEMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7SUFDN0gsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLG1EQUFtRCxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtJQUN4SyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsbUNBQW1DLEVBQUUsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFO0lBQ3BILEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxpQ0FBaUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFB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QzFHLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixDQUFDO0tBQ3hGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIHBsdWdpbi1lY29zeXN0ZW0gbm90aWZpY2F0aW9uIGNvbnRyYWN0IChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKSxcbiAqIHNoYXJlZCBieSB0aGUgc2VuZGVyICh0aGUgcGx1Z2luIHNlcnZpY2UncyBlbnF1ZXVlIEFQSSBhbmQgZGlnZXN0XG4gKiBkaXNwYXRjaGVyKSBhbmQgdGhlIHJlbGF5IChwbGF0Zm9ybSBgUE9TVCAvaW50ZXJuYWwvbm90aWZ5LWVtYWlsYCkuXG4gKlxuICogUmVjaXBpZW50cyB0cmF2ZWwgYXMgUlVMRVMsIG5ldmVyIGFzIGxpc3RzOiBwbGF0Zm9ybSByZXNvbHZlcyBlYWNoXG4gKiB7QGxpbmsgRWNvc3lzdGVtUmVjaXBpZW50U3BlY30gYWdhaW5zdCBpdHMgdXNlci9Sb2xlIGRpcmVjdG9yeSBBVCBTRU5EIFRJTUUsXG4gKiBzbyBhIGRpZ2VzdCB0aGF0IGZsdXNoZXMgdG9tb3Jyb3cgcmVhY2hlcyB0b21vcnJvdydzIG1vZGVyYXRvcnMsIHRoZSBwbHVnaW5cbiAqIHNlcnZpY2UgbmV2ZXIgaGFuZGxlcyBhbiBlbWFpbCBhZGRyZXNzIG9yIGEgbWVtYmVyc2hpcCBsaXN0LCBhbmQgYSBwdWJsaXNoZXJcbiAqIGNhbiBuZXZlciBsZWFybiB3aG8gaW5zdGFsbGVkIHRoZWlyIHBsdWdpbiAodGhlIHJlbGF5IG1haWxzIGVhY2ggcmVjaXBpZW50XG4gKiBpbmRpdmlkdWFsbHkg4oCUIG5vIHNoYXJlZCBUbzogbGluZSkuXG4gKi9cblxuLyoqIEEgbm90aWZpY2F0aW9uIGV2ZW50IG51bWJlci4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkV2ZW50SWQgPVxuICB8ICdOMScgfCAnTjInIHwgJ04zJyB8ICdONCcgfCAnTjUnIHwgJ042JyB8ICdONycgfCAnTjgnIHwgJ045JyB8ICdOMTAnXG4gIHwgJ04xMScgfCAnTjEyJyB8ICdOMTMnIHwgJ04xNCcgfCAnTjE1JyB8ICdOMTYnIHwgJ04xNycgfCAnTjE4JyB8ICdOMTknIHwgJ04yMCdcbiAgfCAnTjIxJyB8ICdOMjInIHwgJ04yMycgfCAnTjI0JyB8ICdOMjUnIHwgJ04yNicgfCAnTjI3JyB8ICdOMjgnIHwgJ04yOSdcbiAgfCAnTjMwJyB8ICdOMzEnO1xuXG4vKiogQSBkZWxpdmVyeSBjaGFubmVsLiBJbi1hcHAgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aDsgZW1haWwgaXMgdGhlIGNvdXJ0ZXN5IGNvcHkuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1Ob3RpZmljYXRpb25DaGFubmVsID0gJ2luX2FwcCcgfCAnZW1haWwnO1xuXG4vKiogQSBwZXItdXNlciBFTUFJTCBvcHQtb3V0IGtleS4gSW4tYXBwIGlzIG5ldmVyIG9wdGlvbmFsLiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlID1cbiAgfCAnZWNvc3lzdGVtLnJldmlld3MuZW1haWwnXG4gIHwgJ2Vjb3N5c3RlbS51cGdyYWRlcy5lbWFpbCdcbiAgfCAnZWNvc3lzdGVtLmluc3RhbGxzLmVtYWlsJ1xuICB8ICdlY29zeXN0ZW0ubW9kZXJhdGlvbkRpZ2VzdC5lbWFpbCc7XG5cbi8qKiBUaGUgZmllbGQgZWFjaCBwcmVmZXJlbmNlIGtleSBpcyBzdG9yZWQgdW5kZXIgaW4gdGhlIHVzZXIncyBwZXItb3JnXG4gKiAgYG5vdGlmaWNhdGlvbnMuZWNvc3lzdGVtYCBwcmVmZXJlbmNlcyAocGxhdGZvcm0gYFVzZXJQcmVmZXJlbmNlc2ApLiAqL1xuZXhwb3J0IGNvbnN0IEVDT1NZU1RFTV9FTUFJTF9QUkVGRVJFTkNFX0ZJRUxEUzogUmVhZG9ubHk8UmVjb3JkPEVjb3N5c3RlbUVtYWlsUHJlZmVyZW5jZSwgRWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlRmllbGQ+PiA9IHtcbiAgJ2Vjb3N5c3RlbS5yZXZpZXdzLmVtYWlsJzogJ3Jldmlld3NFbWFpbCcsXG4gICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnOiAndXBncmFkZXNFbWFpbCcsXG4gICdlY29zeXN0ZW0uaW5zdGFsbHMuZW1haWwnOiAnaW5zdGFsbHNFbWFpbCcsXG4gICdlY29zeXN0ZW0ubW9kZXJhdGlvbkRpZ2VzdC5lbWFpbCc6ICdtb2RlcmF0aW9uRGlnZXN0RW1haWwnLFxufTtcblxuLyoqIFN0b3JlZCBmaWVsZCBuYW1lcyBvZiB0aGUgZWNvc3lzdGVtIGVtYWlsIHByZWZlcmVuY2VzIChhbGwgZGVmYXVsdCBgdHJ1ZWApLiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlRmllbGQgPSAncmV2aWV3c0VtYWlsJyB8ICd1cGdyYWRlc0VtYWlsJyB8ICdpbnN0YWxsc0VtYWlsJyB8ICdtb2RlcmF0aW9uRGlnZXN0RW1haWwnO1xuXG4vKiogRXZlcnkgc3RvcmVkIGVjb3N5c3RlbSBlbWFpbC1wcmVmZXJlbmNlIGZpZWxkLiAqL1xuZXhwb3J0IGNvbnN0IEVDT1NZU1RFTV9FTUFJTF9QUkVGRVJFTkNFX0ZJRUxEX05BTUVTOiByZWFkb25seSBFY29zeXN0ZW1FbWFpbFByZWZlcmVuY2VGaWVsZFtdID1cbiAgT2JqZWN0LnZhbHVlcyhFQ09TWVNURU1fRU1BSUxfUFJFRkVSRU5DRV9GSUVMRFMpO1xuXG4vKiogSG93IG9mdGVuIGEgYmF0Y2hlZCBlbWFpbCBpcyBmbHVzaGVkLiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtRGlnZXN0Q2FkZW5jZSA9ICdob3VybHknIHwgJ2RhaWx5JyB8ICd3ZWVrbHknO1xuXG4vKiogT25lIGV2ZW50J3MgZGVsaXZlcnkgcnVsZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjb3N5c3RlbUV2ZW50U3BlYyB7XG4gIC8qKiBPbmUtbGluZSBkZXNjcmlwdGlvbiAoZG9jcywgbG9ncykuICovXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBDaGFubmVscyB0aGUgZXZlbnQgaXMgZGVsaXZlcmVkIG9uLiAqL1xuICBjaGFubmVsczogcmVhZG9ubHkgRWNvc3lzdGVtTm90aWZpY2F0aW9uQ2hhbm5lbFtdO1xuICAvKipcbiAgICogRW1haWwgb3B0LW91dCBrZXksIG9yIGBudWxsYCB3aGVuIHRoZSBlbWFpbCBpcyBUUkFOU0FDVElPTkFMIC8gc2VjdXJpdHlcbiAgICogKE4xLCBOM+KAk041LCBON+KAk04xMCwgTjE44oCTTjIzLCBOMjUsIE4yOOKAk04zMSBjYW4ndCBiZSB0dXJuZWQgb2ZmKS5cbiAgICovXG4gIHByZWZlcmVuY2U6IEVjb3N5c3RlbUVtYWlsUHJlZmVyZW5jZSB8IG51bGw7XG4gIC8qKiBXaGVuIHRoZSBlbWFpbCBpcyBiYXRjaGVkIHJhdGhlciB0aGFuIGltbWVkaWF0ZSwgaXRzIGNhZGVuY2UuICovXG4gIGRpZ2VzdD86IEVjb3N5c3RlbURpZ2VzdENhZGVuY2U7XG4gIC8qKiBBbGxvd2VkIHRvIGFkZHJlc3MgYSByYXcgZW1haWw6IHRoZSBhbm9ueW1vdXMgU1VCTUlUVEVSICh0aGVcbiAgICogIHRyYW5zYWN0aW9uYWwgc3VibWlzc2lvbiBub3RpY2VzKSBhbmQgYW4gb3JnJ3MgVkVSSUZJRUQgZXh0ZXJuYWxcbiAgICogIHNlY3VyaXR5IGFkZHJlc3MgKHRoZSBwbHVnaW4gc2VjdXJpdHkgbm90aWNlcyBOMzAvTjMxKS4gKi9cbiAgYWxsb3dzQWRkcmVzcz86IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgbm90aWZpY2F0aW9uIGV2ZW50IHRhYmxlLCBhcyBkYXRhLiAqL1xuZXhwb3J0IGNvbnN0IEVDT1NZU1RFTV9OT1RJRklDQVRJT05fRVZFTlRTOiBSZWFkb25seTxSZWNvcmQ8RWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZCwgRWNvc3lzdGVtRXZlbnRTcGVjPj4gPSB7XG4gIE4xOiB7IGRlc2NyaXB0aW9uOiAnQW5vbnltb3VzIHN1Ym1pc3Npb24gcmVjZWl2ZWQgKG1hZ2ljIGxpbmspJywgY2hhbm5lbHM6IFsnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICBOMjogeyBkZXNjcmlwdGlvbjogJ1N1Ym1pc3Npb24gdmVyaWZpZWQsIGVudGVyZWQgdGhlIG1vZGVyYXRpb24gcXVldWUnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5tb2RlcmF0aW9uRGlnZXN0LmVtYWlsJywgZGlnZXN0OiAnZGFpbHknIH0sXG4gIE4zOiB7IGRlc2NyaXB0aW9uOiAnU3VibWlzc2lvbiBmYWlsZWQgYXV0b21hdGVkIGdhdGVzJywgY2hhbm5lbHM6IFsnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICBONDogeyBkZXNjcmlwdGlvbjogJ1N1Ym1pc3Npb24gYXBwcm92ZWQgb3IgcmVqZWN0ZWQnLCBjaGFubmVsczogWydlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsLCBhbGxvd3NBZGRyZXNzOiB0cnVlIH0sXG4gIE41OiB7IGRlc2NyaXB0aW9uOiAnU3VibWlzc2lvbiBjbGFpbWVkIGJ5IGFuIGFjY291bnQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBONjogeyBkZXNjcmlwdGlvbjogJ1ZlcmlmaWVkLXB1Ymxpc2hlciBhcHBsaWNhdGlvbiBzdWJtaXR0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5tb2RlcmF0aW9uRGlnZXN0LmVtYWlsJywgZGlnZXN0OiAnZGFpbHknIH0sXG4gIE43OiB7IGRlc2NyaXB0aW9uOiAnVmVyaWZpZWQgYXBwbGljYXRpb24gYXBwcm92ZWQgb3IgcmVqZWN0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOODogeyBkZXNjcmlwdGlvbjogJ01vZGVyYXRpb24gYWN0aW9uIG9uIGEgbGlzdGluZyAoc3VzcGVuZCwgeWFuaywgdGFrZWRvd24pJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjk6IHsgZGVzY3JpcHRpb246ICdPd25lcnNoaXAgdHJhbnNmZXIgcmVxdWVzdGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjEwOiB7IGRlc2NyaXB0aW9uOiAnT3duZXJzaGlwIHRyYW5zZmVyIGFjY2VwdGVkLCBkZWNsaW5lZCwgYXBwcm92ZWQgb3IgcmVqZWN0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMTE6IHsgZGVzY3JpcHRpb246ICdJbnN0YWxsIHJlcXVlc3RlZCAocG9saWN5IHJlcXVpcmVzIGFwcHJvdmFsKScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLmluc3RhbGxzLmVtYWlsJyB9LFxuICBOMTI6IHsgZGVzY3JpcHRpb246ICdJbnN0YWxsIGFwcHJvdmVkIG9yIGRlbmllZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLmluc3RhbGxzLmVtYWlsJyB9LFxuICBOMTM6IHsgZGVzY3JpcHRpb246ICdOZXcgdmVyc2lvbiBhdmFpbGFibGUgd2l0aGluIGFuIGluc3RhbGxcXCdzIHBvbGljeScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJywgZGlnZXN0OiAnd2Vla2x5JyB9LFxuICBOMTQ6IHsgZGVzY3JpcHRpb246ICdMaXN0aW5nIGRlcHJlY2F0ZWQgb3IgdW5tYWludGFpbmVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnIH0sXG4gIE4xNTogeyBkZXNjcmlwdGlvbjogJ05ldyBvciBlZGl0ZWQgcmV2aWV3IG9uIGEgbGlzdGluZycsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnJldmlld3MuZW1haWwnLCBkaWdlc3Q6ICdob3VybHknIH0sXG4gIE4xNjogeyBkZXNjcmlwdGlvbjogJ1B1Ymxpc2hlciByZXBsaWVkIHRvIHlvdXIgcmV2aWV3JywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0ucmV2aWV3cy5lbWFpbCcgfSxcbiAgTjE3OiB7IGRlc2NyaXB0aW9uOiAnUmV2aWV3IGhlbGQgKHJlcG9ydHMsIGJ1cnN0LCBmaWx0ZXIpJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0ubW9kZXJhdGlvbkRpZ2VzdC5lbWFpbCcsIGRpZ2VzdDogJ2RhaWx5JyB9LFxuICBOMTg6IHsgZGVzY3JpcHRpb246ICdZb3VyIHJldmlldyB3YXMgcmVtb3ZlZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4xOTogeyBkZXNjcmlwdGlvbjogJ1JldmlldyBmbGFnZ2VkIGFzIGEgc2VjdXJpdHkgaXNzdWUnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMjA6IHsgZGVzY3JpcHRpb246ICdBZHZpc29yeSBkcmFmdCBhdXRvLWNyZWF0ZWQgKENWRSByZXNjYW4pJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjIxOiB7IGRlc2NyaXB0aW9uOiAnQWR2aXNvcnkgcHVibGlzaGVkIG9yIHdpdGhkcmF3bicsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yMjogeyBkZXNjcmlwdGlvbjogJ01vZGVyYXRpb24gU0xBIGJyZWFjaCcsIGNoYW5uZWxzOiBbJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjIzOiB7IGRlc2NyaXB0aW9uOiAnQWRkZWQgdG8gb3IgcmVtb3ZlZCBmcm9tIHRoZSBFY29zeXN0ZW0gTWFuYWdlciByb2xlJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjI0OiB7IGRlc2NyaXB0aW9uOiAnUHVibGlzaCByZXF1ZXN0IHN1Ym1pdHRlZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLm1vZGVyYXRpb25EaWdlc3QuZW1haWwnLCBkaWdlc3Q6ICdkYWlseScgfSxcbiAgTjI1OiB7IGRlc2NyaXB0aW9uOiAnUHVibGlzaCByZXF1ZXN0IGFwcHJvdmVkIG9yIHJlamVjdGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjI2OiB7IGRlc2NyaXB0aW9uOiAnTGlzdGluZyBvciB2ZXJzaW9uIHBhdXNlZCBieSBpdHMgcHVibGlzaGVyJywgY2hhbm5lbHM6IFsnaW5fYXBwJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnIH0sXG4gIE4yNzogeyBkZXNjcmlwdGlvbjogJ0luc3RhbGxlZCBsaXN0aW5nIGF1dG8tdXBkYXRlZCB3aXRoaW4gaXRzIHJhbmdlJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnLCBkaWdlc3Q6ICd3ZWVrbHknIH0sXG4gIE4yODogeyBkZXNjcmlwdGlvbjogJ0EgcmVxdWVzdCBuZWVkcyBhIHNlY29uZCBhcHByb3ZhbCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yOTogeyBkZXNjcmlwdGlvbjogJ1BsYW4gY2hhbmdlIGFmZmVjdHMgcHVibGlzaGluZycsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIC8vIFBlci1vcmcgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXMgKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQgXCJTY2FuIGdhdGVzXCIpLlxuICAvLyBSZWNpcGllbnRzIGZvbGxvdyB0aGUgb3JnJ3MgcGx1Z2luIHNlY3VyaXR5IG5vdGlmaWNhdGlvbiBzZXR0aW5nczsgdGhlIG9yZydzXG4gIC8vIHdlYmhvb2sgKGlmIGFueSkgaXMgc2VudCBieSB0aGUgcGx1Z2luIHNlcnZpY2UgaXRzZWxmLiBOMzEncyBlbWFpbCBob25vcnNcbiAgLy8gdGhlIG9yZydzIGRpZ2VzdCBzZXR0aW5nICh0aGUgc2VuZGVyIGJhdGNoZXMgaXQpLCBOMzAgaXMgYWx3YXlzIGltbWVkaWF0ZS5cbiAgTjMwOiB7IGRlc2NyaXB0aW9uOiAnUGx1Z2luIHZlcnNpb24gYmxvY2tlZCAodW5zY2FubmVkIG9yIGZpeGFibGUgQ3JpdGljYWwpJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgTjMxOiB7IGRlc2NyaXB0aW9uOiAnUmVzY2FuIGZvdW5kIG5ldyBDcml0aWNhbC9IaWdoIGluIGEgcGx1Z2luIHZlcnNpb24nLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxufTtcblxuLyoqIFdoZXRoZXIgYHZhbHVlYCBpcyBhIG5vdGlmaWNhdGlvbiBldmVudCBudW1iZXIuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkV2ZW50SWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRUNPU1lTVEVNX05PVElGSUNBVElPTl9FVkVOVFMsIHZhbHVlKTtcbn1cblxuLyoqIE9yZy1sb2NhbCBwZXJtaXNzaW9ucyBhbiB7QGxpbmsgRWNvc3lzdGVtUmVjaXBpZW50U3BlY30gYG9yZ19wZXJtaXNzaW9uYCBydWxlIG1heSBuYW1lLiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtT3JnUmVjaXBpZW50UGVybWlzc2lvbiA9ICdwdWJsaXNoZXJzOm1hbmFnZScgfCAncGx1Z2luX2luc3RhbGxzOm1hbmFnZScgfCAncGx1Z2luczp3cml0ZSc7XG4vKiogU3lzdGVtLW9yZyBwZXJtaXNzaW9ucyBhIGBtb2RlcmF0b3JzYCBydWxlIG1heSBuYW1lLiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtTW9kZXJhdG9yUGVybWlzc2lvbiA9ICdwbHVnaW5zOm1vZGVyYXRlJyB8ICdwdWJsaXNoZXJzOnZlcmlmeSc7XG5cbi8qKlxuICogQSByZWNpcGllbnQgUlVMRSwgcmVzb2x2ZWQgYnkgcGxhdGZvcm0gYXQgc2VuZCB0aW1lOlxuICpcbiAqICAtIGB1c2VyYCDigJQgb25lIHVzZXIgKFJlcXVlc3RlciwgUmV2aWV3IGF1dGhvciwgdGhlIGFmZmVjdGVkIHVzZXIgb2YgTjIzKS5cbiAqICAgIGBvcmdJZGAgcGlja3MgdGhlIGluYm94OyBkZWZhdWx0cyB0byB0aGUgdXNlcidzIGxhc3QgYWN0aXZlIG9yZy5cbiAqICAtIGBvcmdfcGVybWlzc2lvbmAg4oCUIGFjdGl2ZSBtZW1iZXJzIG9mIGBvcmdJZGAgaG9sZGluZyBgcGVybWlzc2lvbmBcbiAqICAgIChQdWJsaXNoZXIgbWFuYWdlcnMgPSBgcHVibGlzaGVyczptYW5hZ2VgLCBPcmcgYXBwcm92ZXJzID1cbiAqICAgIGBwbHVnaW5faW5zdGFsbHM6bWFuYWdlYCwgcGx1Z2luIHdyaXRlcnMgPSBgcGx1Z2luczp3cml0ZWApLiBXaXRoXG4gKiAgICBgaW5oZXJpdEZyb21Sb290YCwgYSB0ZWFtIHdpdGggbm8gaG9sZGVycyBmYWxscyBiYWNrIHRvIGl0cyByb290IG9yZydzXG4gKiAgICBob2xkZXJzOyB3aXRoIG5vbmUgYW55d2hlcmUsIHRoZSBvcmcncyBvd25lcnMuXG4gKiAgLSBgb3JnX21lbWJlcnNgIOKAlCB0aGUgbmFtZWQgdXNlcnMsIGJ1dCBvbmx5IHRob3NlIHdobyBhcmUgQUNUSVZFIG1lbWJlcnMgb2ZcbiAqICAgIGBvcmdJZGAgYXQgc2VuZCB0aW1lIChhbiBvcmcncyBjaG9zZW4gc2VjdXJpdHkgcmVjaXBpZW50czogYSBzdGFsZSBpZCwgb3JcbiAqICAgIHNvbWVvbmUgd2hvIGxlZnQsIHJlY2VpdmVzIG5vdGhpbmcpLlxuICogIC0gYG1vZGVyYXRvcnNgIOKAlCB0aGUgc3lzdGVtIG9yZydzIGhvbGRlcnMgb2YgYHBlcm1pc3Npb25gICh0aGUgRWNvc3lzdGVtXG4gKiAgICBNYW5hZ2VyIHJvbGUpLCBtaW51cyBhbnlvbmUgd2l0aCBhIGNvbmZsaWN0IG9mIGludGVyZXN0IChtZW1iZXJzIG9mXG4gKiAgICBgZXhjbHVkZU1lbWJlcnNPZk9yZ0lkYCwgb3IgdGhlIGxpc3RlZCB1c2Vycyk7IHN1cGVyYWRtaW5zIHdoZW4gZW1wdHkuXG4gKiAgLSBgc3VwZXJhZG1pbnNgIOKAlCBldmVyeSBwbGF0Zm9ybSBzdXBlcmFkbWluLlxuICogIC0gYGFkZHJlc3NgIOKAlCBhIHJhdyBhZGRyZXNzOyBvbmx5IHRoZSBhbm9ueW1vdXMgU1VCTUlUVEVSIG5vdGljZXMgKE4xLCBOMyxcbiAqICAgIE40KSwgd2hvc2UgcmVjaXBpZW50IGhhcyBubyBhY2NvdW50LCBhbmQgYW4gb3JnJ3MgVkVSSUZJRUQgZXh0ZXJuYWxcbiAqICAgIHNlY3VyaXR5IGFkZHJlc3Mgb24gdGhlIHBsdWdpbiBzZWN1cml0eSBub3RpY2VzIChOMzAsIE4zMSkuXG4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbVJlY2lwaWVudFNwZWMgPVxuICB8IHsga2luZDogJ3VzZXInOyB1c2VySWQ6IHN0cmluZzsgb3JnSWQ/OiBzdHJpbmcgfVxuICB8IHsga2luZDogJ29yZ19wZXJtaXNzaW9uJzsgb3JnSWQ6IHN0cmluZzsgcGVybWlzc2lvbjogRWNvc3lzdGVtT3JnUmVjaXBpZW50UGVybWlzc2lvbjsgaW5oZXJpdEZyb21Sb290PzogYm9vbGVhbiB9XG4gIHwgeyBraW5kOiAnb3JnX21lbWJlcnMnOyBvcmdJZDogc3RyaW5nOyB1c2VySWRzOiBzdHJpbmdbXSB9XG4gIHwgeyBraW5kOiAnbW9kZXJhdG9ycyc7IHBlcm1pc3Npb246IEVjb3N5c3RlbU1vZGVyYXRvclBlcm1pc3Npb247IGV4Y2x1ZGVNZW1iZXJzT2ZPcmdJZD86IHN0cmluZzsgZXhjbHVkZVVzZXJJZHM/OiBzdHJpbmdbXSB9XG4gIHwgeyBraW5kOiAnc3VwZXJhZG1pbnMnIH1cbiAgfCB7IGtpbmQ6ICdhZGRyZXNzJzsgZW1haWw6IHN0cmluZyB9O1xuXG4vKiogVGhlIGJvZHkgb2YgYW4gZWNvc3lzdGVtIHNlbmQgdGhyb3VnaCBwbGF0Zm9ybSdzIG5vdGlmeSByZWxheS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNvc3lzdGVtTm90aWZ5UmVxdWVzdCB7XG4gIGV2ZW50OiBFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudElkO1xuICByZWNpcGllbnRzOiBFY29zeXN0ZW1SZWNpcGllbnRTcGVjW107XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgLyoqIFBsYWluLXRleHQgYm9keSAoZW1haWwgYm9keSBhbmQgaW4tYXBwIGNvbnRlbnQpLiAqL1xuICB0ZXh0OiBzdHJpbmc7XG4gIC8qKiBTdWJzZXQgb2YgdGhlIGV2ZW50J3MgY2hhbm5lbHMgdG8gZGVsaXZlciBvbiAoZGVmYXVsdDogYWxsIG9mIHRoZW0pLiBUaGVcbiAgICogIGRpZ2VzdCBkaXNwYXRjaGVyIHNlbmRzIGBbJ2VtYWlsJ11gIGJlY2F1c2UgaW4tYXBwIHdlbnQgb3V0IGF0IGVucXVldWUuICovXG4gIGNoYW5uZWxzPzogRWNvc3lzdGVtTm90aWZpY2F0aW9uQ2hhbm5lbFtdO1xuICAvKiogRGVsaXZlciB0aGUgZW1haWwgZXZlbiB0byB1c2VycyB3aG8gb3B0ZWQgb3V0IOKAlCBmb3IgYW4gZXZlbnQgd2hvc2VcbiAgICogIG5vcm1hbGx5LW9wdGlvbmFsIGVtYWlsIGlzIG1hbmRhdG9yeSBpbiB0aGlzIGluc3RhbmNlIChOMjQgeWFuaywgYWR2aXNvcnlcbiAgICogIGFuZCBzZWN1cml0eS1maXggcmVxdWVzdHMpLiAqL1xuICBtYW5kYXRvcnk/OiBib29sZWFuO1xufVxuXG4vKiogSGFyZCBjYXBzLCBtYXRjaGluZyB0aGUgbWVzc2FnZSBzZXJ2aWNlJ3Mgb3duIGxpbWl0cy4gKi9cbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fTk9USUZZX1NVQkpFQ1RfTUFYID0gNTAwO1xuZXhwb3J0IGNvbnN0IEVDT1NZU1RFTV9OT1RJRllfVEVYVF9NQVggPSAxMDAwMDtcbmNvbnN0IE1BWF9SRUNJUElFTlRfUlVMRVMgPSA1MDtcblxuY29uc3QgT1JHX1BFUk1JU1NJT05TOiByZWFkb25seSBzdHJpbmdbXSA9IFsncHVibGlzaGVyczptYW5hZ2UnLCAncGx1Z2luX2luc3RhbGxzOm1hbmFnZScsICdwbHVnaW5zOndyaXRlJ107XG4vKiogQXQgbW9zdCB0aGlzIG1hbnkgdXNlcnMgaW4gb25lIGBvcmdfbWVtYmVyc2AgcnVsZS4gKi9cbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fT1JHX01FTUJFUlNfTUFYID0gMTAwO1xuY29uc3QgTU9ERVJBVE9SX1BFUk1JU1NJT05TOiByZWFkb25seSBzdHJpbmdbXSA9IFsncGx1Z2luczptb2RlcmF0ZScsICdwdWJsaXNoZXJzOnZlcmlmeSddO1xuY29uc3QgRU1BSUxfU0hBUEUgPSAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLztcblxuZnVuY3Rpb24gbm9uRW1wdHlTdHJpbmcodjogdW5rbm93biwgbWF4ID0gMjU1KTogdiBpcyBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYudHJpbSgpLmxlbmd0aCA+IDAgJiYgdi5sZW5ndGggPD0gbWF4O1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlY2lwaWVudChyYXc6IHVua25vd24sIHNwZWM6IEVjb3N5c3RlbUV2ZW50U3BlYyk6IEVjb3N5c3RlbVJlY2lwaWVudFNwZWMgfCBzdHJpbmcge1xuICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSAnb2JqZWN0JykgcmV0dXJuICdlYWNoIHJlY2lwaWVudCBtdXN0IGJlIGFuIG9iamVjdCc7XG4gIGNvbnN0IHIgPSByYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHN3aXRjaCAoci5raW5kKSB7XG4gICAgY2FzZSAndXNlcic6XG4gICAgICBpZiAoIW5vbkVtcHR5U3RyaW5nKHIudXNlcklkKSkgcmV0dXJuICd1c2VyIHJlY2lwaWVudCBuZWVkcyB1c2VySWQnO1xuICAgICAgaWYgKHIub3JnSWQgIT09IHVuZGVmaW5lZCAmJiAhbm9uRW1wdHlTdHJpbmcoci5vcmdJZCkpIHJldHVybiAndXNlciByZWNpcGllbnQgb3JnSWQgbXVzdCBiZSBhIHN0cmluZyc7XG4gICAgICByZXR1cm4geyBraW5kOiAndXNlcicsIHVzZXJJZDogci51c2VySWQsIC4uLihyLm9yZ0lkID8geyBvcmdJZDogci5vcmdJZCBhcyBzdHJpbmcgfSA6IHt9KSB9O1xuICAgIGNhc2UgJ29yZ19wZXJtaXNzaW9uJzpcbiAgICAgIGlmICghbm9uRW1wdHlTdHJpbmcoci5vcmdJZCkpIHJldHVybiAnb3JnX3Blcm1pc3Npb24gcmVjaXBpZW50IG5lZWRzIG9yZ0lkJztcbiAgICAgIGlmICh0eXBlb2Ygci5wZXJtaXNzaW9uICE9PSAnc3RyaW5nJyB8fCAhT1JHX1BFUk1JU1NJT05TLmluY2x1ZGVzKHIucGVybWlzc2lvbikpIHJldHVybiAnb3JnX3Blcm1pc3Npb24gcmVjaXBpZW50IG5hbWVzIGFuIHVuc3VwcG9ydGVkIHBlcm1pc3Npb24nO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogJ29yZ19wZXJtaXNzaW9uJyxcbiAgICAgICAgb3JnSWQ6IHIub3JnSWQsXG4gICAgICAgIHBlcm1pc3Npb246IHIucGVybWlzc2lvbiBhcyBFY29zeXN0ZW1PcmdSZWNpcGllbnRQZXJtaXNzaW9uLFxuICAgICAgICAuLi4oci5pbmhlcml0RnJvbVJvb3QgPT09IHRydWUgPyB7IGluaGVyaXRGcm9tUm9vdDogdHJ1ZSB9IDoge30pLFxuICAgICAgfTtcbiAgICBjYXNlICdvcmdfbWVtYmVycyc6IHtcbiAgICAgIGlmICghbm9uRW1wdHlTdHJpbmcoci5vcmdJZCkpIHJldHVybiAnb3JnX21lbWJlcnMgcmVjaXBpZW50IG5lZWRzIG9yZ0lkJztcbiAgICAgIGNvbnN0IHVzZXJzID0gci51c2VySWRzO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHVzZXJzKSB8fCB1c2Vycy5sZW5ndGggPT09IDAgfHwgIXVzZXJzLmV2ZXJ5KCh1KSA9PiBub25FbXB0eVN0cmluZyh1KSkpIHJldHVybiAnb3JnX21lbWJlcnMgcmVjaXBpZW50IG5lZWRzIGEgbm9uLWVtcHR5IHVzZXJJZHMgYXJyYXknO1xuICAgICAgaWYgKHVzZXJzLmxlbmd0aCA+IEVDT1NZU1RFTV9PUkdfTUVNQkVSU19NQVgpIHJldHVybiBgb3JnX21lbWJlcnMgcmVjaXBpZW50IG5hbWVzIGF0IG1vc3QgJHtFQ09TWVNURU1fT1JHX01FTUJFUlNfTUFYfSB1c2Vyc2A7XG4gICAgICByZXR1cm4geyBraW5kOiAnb3JnX21lbWJlcnMnLCBvcmdJZDogci5vcmdJZCwgdXNlcklkczogWy4uLm5ldyBTZXQodXNlcnMgYXMgc3RyaW5nW10pXSB9O1xuICAgIH1cbiAgICBjYXNlICdtb2RlcmF0b3JzJzoge1xuICAgICAgaWYgKHR5cGVvZiByLnBlcm1pc3Npb24gIT09ICdzdHJpbmcnIHx8ICFNT0RFUkFUT1JfUEVSTUlTU0lPTlMuaW5jbHVkZXMoci5wZXJtaXNzaW9uKSkgcmV0dXJuICdtb2RlcmF0b3JzIHJlY2lwaWVudCBuYW1lcyBhbiB1bnN1cHBvcnRlZCBwZXJtaXNzaW9uJztcbiAgICAgIGlmIChyLmV4Y2x1ZGVNZW1iZXJzT2ZPcmdJZCAhPT0gdW5kZWZpbmVkICYmICFub25FbXB0eVN0cmluZyhyLmV4Y2x1ZGVNZW1iZXJzT2ZPcmdJZCkpIHJldHVybiAnZXhjbHVkZU1lbWJlcnNPZk9yZ0lkIG11c3QgYmUgYSBzdHJpbmcnO1xuICAgICAgY29uc3QgZXhjbHVkZSA9IHIuZXhjbHVkZVVzZXJJZHM7XG4gICAgICBpZiAoZXhjbHVkZSAhPT0gdW5kZWZpbmVkICYmICghQXJyYXkuaXNBcnJheShleGNsdWRlKSB8fCAhZXhjbHVkZS5ldmVyeSgodSkgPT4gbm9uRW1wdHlTdHJpbmcodSkpKSkgcmV0dXJuICdleGNsdWRlVXNlcklkcyBtdXN0IGJlIGFuIGFycmF5IG9mIGlkcyc7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiAnbW9kZXJhdG9ycycsXG4gICAgICAgIHBlcm1pc3Npb246IHIucGVybWlzc2lvbiBhcyBFY29zeXN0ZW1Nb2RlcmF0b3JQZXJtaXNzaW9uLFxuICAgICAgICAuLi4oci5leGNsdWRlTWVtYmVyc09mT3JnSWQgPyB7IGV4Y2x1ZGVNZW1iZXJzT2ZPcmdJZDogci5leGNsdWRlTWVtYmVyc09mT3JnSWQgYXMgc3RyaW5nIH0gOiB7fSksXG4gICAgICAgIC4uLihleGNsdWRlID8geyBleGNsdWRlVXNlcklkczogZXhjbHVkZSBhcyBzdHJpbmdbXSB9IDoge30pLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnc3VwZXJhZG1pbnMnOlxuICAgICAgcmV0dXJuIHsga2luZDogJ3N1cGVyYWRtaW5zJyB9O1xuICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgaWYgKCFzcGVjLmFsbG93c0FkZHJlc3MpIHJldHVybiAnYWRkcmVzcyByZWNpcGllbnRzIGFyZSBvbmx5IGFsbG93ZWQgZm9yIGFub255bW91cy1zdWJtaXNzaW9uIGFuZCBwbHVnaW4gc2VjdXJpdHkgbm90aWNlcyc7XG4gICAgICBpZiAoIW5vbkVtcHR5U3RyaW5nKHIuZW1haWwsIDMyMCkgfHwgIUVNQUlMX1NIQVBFLnRlc3Qoci5lbWFpbCkpIHJldHVybiAnYWRkcmVzcyByZWNpcGllbnQgbmVlZHMgYSB2YWxpZCBlbWFpbCc7XG4gICAgICByZXR1cm4geyBraW5kOiAnYWRkcmVzcycsIGVtYWlsOiByLmVtYWlsLnRyaW0oKS50b0xvd2VyQ2FzZSgpIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAndW5rbm93biByZWNpcGllbnQga2luZCc7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhbiB7QGxpbmsgRWNvc3lzdGVtTm90aWZ5UmVxdWVzdH0uIFJldHVybnMgdGhlIG5vcm1hbGl6ZWQgcmVxdWVzdCxcbiAqIG9yIGFuIGVycm9yIHN0cmluZyAodGhlIHJlbGF5J3MgNDAwKS4gUHVyZSwgc28gYm90aCB0aGUgc2VuZGVyIChmYWlsIGF0XG4gKiBlbnF1ZXVlLCBub3QgYXQgMDk6MDAgdG9tb3Jyb3cpIGFuZCB0aGUgcmVsYXkgdXNlIHRoZSBzYW1lIHJ1bGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFY29zeXN0ZW1Ob3RpZnlSZXF1ZXN0KGJvZHk6IHVua25vd24pOiBFY29zeXN0ZW1Ob3RpZnlSZXF1ZXN0IHwgc3RyaW5nIHtcbiAgaWYgKCFib2R5IHx8IHR5cGVvZiBib2R5ICE9PSAnb2JqZWN0JykgcmV0dXJuICdib2R5IG11c3QgYmUgYW4gb2JqZWN0JztcbiAgY29uc3QgYiA9IGJvZHkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmICghaXNFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudChiLmV2ZW50KSkgcmV0dXJuICdldmVudCBtdXN0IGJlIG9uZSBvZiBOMS4uTjMxJztcbiAgY29uc3Qgc3BlYyA9IEVDT1NZU1RFTV9OT1RJRklDQVRJT05fRVZFTlRTW2IuZXZlbnRdO1xuICBpZiAoIW5vbkVtcHR5U3RyaW5nKGIuc3ViamVjdCwgRUNPU1lTVEVNX05PVElGWV9TVUJKRUNUX01BWCkpIHJldHVybiBgc3ViamVjdCBpcyByZXF1aXJlZCAobWF4ICR7RUNPU1lTVEVNX05PVElGWV9TVUJKRUNUX01BWH0pYDtcbiAgaWYgKCFub25FbXB0eVN0cmluZyhiLnRleHQsIEVDT1NZU1RFTV9OT1RJRllfVEVYVF9NQVgpKSByZXR1cm4gYHRleHQgaXMgcmVxdWlyZWQgKG1heCAke0VDT1NZU1RFTV9OT1RJRllfVEVYVF9NQVh9KWA7XG4gIGlmICghQXJyYXkuaXNBcnJheShiLnJlY2lwaWVudHMpIHx8IGIucmVjaXBpZW50cy5sZW5ndGggPT09IDApIHJldHVybiAncmVjaXBpZW50cyBtdXN0IGJlIGEgbm9uLWVtcHR5IGFycmF5JztcbiAgaWYgKGIucmVjaXBpZW50cy5sZW5ndGggPiBNQVhfUkVDSVBJRU5UX1JVTEVTKSByZXR1cm4gYGF0IG1vc3QgJHtNQVhfUkVDSVBJRU5UX1JVTEVTfSByZWNpcGllbnQgcnVsZXNgO1xuICBjb25zdCByZWNpcGllbnRzOiBFY29zeXN0ZW1SZWNpcGllbnRTcGVjW10gPSBbXTtcbiAgZm9yIChjb25zdCByYXcgb2YgYi5yZWNpcGllbnRzKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VSZWNpcGllbnQocmF3LCBzcGVjKTtcbiAgICBpZiAodHlwZW9mIHBhcnNlZCA9PT0gJ3N0cmluZycpIHJldHVybiBwYXJzZWQ7XG4gICAgcmVjaXBpZW50cy5wdXNoKHBhcnNlZCk7XG4gIH1cbiAgbGV0IGNoYW5uZWxzOiBFY29zeXN0ZW1Ob3RpZmljYXRpb25DaGFubmVsW10gfCB1bmRlZmluZWQ7XG4gIGlmIChiLmNoYW5uZWxzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYi5jaGFubmVscykgfHwgYi5jaGFubmVscy5sZW5ndGggPT09IDApIHJldHVybiAnY2hhbm5lbHMgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheSc7XG4gICAgY29uc3QgYmFkID0gYi5jaGFubmVscy5maWx0ZXIoKGMpID0+ICFzcGVjLmNoYW5uZWxzLmluY2x1ZGVzKGMgYXMgRWNvc3lzdGVtTm90aWZpY2F0aW9uQ2hhbm5lbCkpO1xuICAgIGlmIChiYWQubGVuZ3RoID4gMCkgcmV0dXJuIGBldmVudCAke2IuZXZlbnR9IGlzIG5vdCBkZWxpdmVyZWQgb246ICR7YmFkLmpvaW4oJywgJyl9YDtcbiAgICBjaGFubmVscyA9IFsuLi5uZXcgU2V0KGIuY2hhbm5lbHMgYXMgRWNvc3lzdGVtTm90aWZpY2F0aW9uQ2hhbm5lbFtdKV07XG4gIH1cbiAgaWYgKGIubWFuZGF0b3J5ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGIubWFuZGF0b3J5ICE9PSAnYm9vbGVhbicpIHJldHVybiAnbWFuZGF0b3J5IG11c3QgYmUgYSBib29sZWFuJztcbiAgcmV0dXJuIHtcbiAgICBldmVudDogYi5ldmVudCxcbiAgICByZWNpcGllbnRzLFxuICAgIHN1YmplY3Q6IGIuc3ViamVjdC50cmltKCksXG4gICAgdGV4dDogYi50ZXh0LnRyaW0oKSxcbiAgICAuLi4oY2hhbm5lbHMgPyB7IGNoYW5uZWxzIH0gOiB7fSksXG4gICAgLi4uKGIubWFuZGF0b3J5ID09PSB0cnVlID8geyBtYW5kYXRvcnk6IHRydWUgfSA6IHt9KSxcbiAgfTtcbn1cblxuLyoqIFRoZSBVVEMgaG91ciBkaWdlc3RzIGZsdXNoIGF0IChcImRhaWx5IGRpZ2VzdCBlbWFpbCAoMDk6MDAgVVRDKVwiKS4gKi9cbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fRElHRVNUX0hPVVJfVVRDID0gOTtcblxuLyoqXG4gKiBUaGUgbmV4dCBmbHVzaCB0aW1lIGZvciBhIGRpZ2VzdCBjYWRlbmNlLCBzdHJpY3RseSBhZnRlciBgbm93YDpcbiAqIGBob3VybHlgIOKGkiB0aGUgbmV4dCB0b3Agb2YgdGhlIGhvdXI7IGBkYWlseWAg4oaSIHRoZSBuZXh0IDA5OjAwIFVUQztcbiAqIGB3ZWVrbHlgIOKGkiB0aGUgbmV4dCBNb25kYXkgMDk6MDAgVVRDLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dEVjb3N5c3RlbURpZ2VzdFRpbWUoY2FkZW5jZTogRWNvc3lzdGVtRGlnZXN0Q2FkZW5jZSwgbm93OiBEYXRlID0gbmV3IERhdGUoKSk6IERhdGUge1xuICBjb25zdCB0ID0gbmV3IERhdGUobm93LmdldFRpbWUoKSk7XG4gIGlmIChjYWRlbmNlID09PSAnaG91cmx5Jykge1xuICAgIHQuc2V0VVRDTWludXRlcygwLCAwLCAwKTtcbiAgICB0LnNldFVUQ0hvdXJzKHQuZ2V0VVRDSG91cnMoKSArIDEpO1xuICAgIHJldHVybiB0O1xuICB9XG4gIHQuc2V0VVRDSG91cnMoRUNPU1lTVEVNX0RJR0VTVF9IT1VSX1VUQywgMCwgMCwgMCk7XG4gIGlmICh0LmdldFRpbWUoKSA8PSBub3cuZ2V0VGltZSgpKSB0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkgKyAxKTtcbiAgaWYgKGNhZGVuY2UgPT09ICd3ZWVrbHknKSB7XG4gICAgLy8gZ2V0VVRDRGF5OiAwID0gU3VuZGF5IOKApiAxID0gTW9uZGF5LlxuICAgIHdoaWxlICh0LmdldFVUQ0RheSgpICE9PSAxKSB0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkgKyAxKTtcbiAgfVxuICByZXR1cm4gdDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUZW1wbGF0ZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQSByZW5kZXJlZCBub3RpY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNvbnRlbnQge1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBOMjMg4oCUIHNvbWVvbmUgd2FzIGFkZGVkIHRvIG9yIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtIG9yZydzIEVjb3N5c3RlbVxuICogTWFuYWdlciByb2xlLiBTZW50IHRvIGV2ZXJ5IHN1cGVyYWRtaW4gYW5kIHRvIHRoZSBhZmZlY3RlZCB1c2VyO1xuICogdHJhbnNhY3Rpb25hbCAobm8gb3B0LW91dCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJFY29zeXN0ZW1NYW5hZ2VyQ2hhbmdlKGlucHV0OiB7XG4gIC8qKiBUaGUgYWZmZWN0ZWQgdXNlcidzIGRpc3BsYXkgbmFtZSBvciBlbWFpbC4gKi9cbiAgdXNlcjogc3RyaW5nO1xuICBhZGRlZDogYm9vbGVhbjtcbiAgLyoqIFdobyBtYWRlIHRoZSBjaGFuZ2UgKHN1cGVyYWRtaW5zIG9ubHkgY2FuKSwgd2hlbiBrbm93bi4gKi9cbiAgYWN0b3I/OiBzdHJpbmc7XG59KTogRWNvc3lzdGVtTm90aWZpY2F0aW9uQ29udGVudCB7XG4gIGNvbnN0IHZlcmIgPSBpbnB1dC5hZGRlZCA/ICdhZGRlZCB0bycgOiAncmVtb3ZlZCBmcm9tJztcbiAgY29uc3QgYnkgPSBpbnB1dC5hY3RvciA/IGAgYnkgJHtpbnB1dC5hY3Rvcn1gIDogJyc7XG4gIHJldHVybiB7XG4gICAgc3ViamVjdDogYCR7aW5wdXQudXNlcn0gd2FzICR7dmVyYn0gdGhlIEVjb3N5c3RlbSBNYW5hZ2VyIHJvbGVgLFxuICAgIHRleHQ6IGlucHV0LmFkZGVkXG4gICAgICA/IGAke2lucHV0LnVzZXJ9IHdhcyAke3ZlcmJ9IHRoZSBFY29zeXN0ZW0gTWFuYWdlciByb2xlJHtieX0uIEVjb3N5c3RlbSBNYW5hZ2VycyBkZWNpZGUgcHVibGlzaCByZXF1ZXN0cywgYFxuICAgICAgICArICdtb2RlcmF0ZSBzdWJtaXNzaW9ucyBhbmQgcmV2aWV3cywgdmVyaWZ5IHB1Ymxpc2hlcnMgYW5kIHB1Ymxpc2ggYWR2aXNvcmllcyBmb3IgdGhlIHdob2xlIHBsdWdpbiBlY29zeXN0ZW0uICdcbiAgICAgICAgKyAnVGhlIHJvbGUgd29ya3Mgb25seSBmcm9tIHRoZSBzeXN0ZW0gb3JnYW5pemF0aW9uIGFuZCByZXF1aXJlcyBhIHR3by1mYWN0b3Igc2lnbi1pbi4nXG4gICAgICA6IGAke2lucHV0LnVzZXJ9IHdhcyAke3ZlcmJ9IHRoZSBFY29zeXN0ZW0gTWFuYWdlciByb2xlJHtieX0gYW5kIGNhbiBubyBsb25nZXIgbWFuYWdlIG9yIGFwcHJvdmUgYW55dGhpbmcgaW4gdGhlIHBsdWdpbiBlY29zeXN0ZW0uYCxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb2FsZXNjZSBzZXZlcmFsIHF1ZXVlZCBub3RpY2VzIGludG8gb25lIGRpZ2VzdCBlbWFpbDogYSBjb3VudC1iZWFyaW5nXG4gKiBzdWJqZWN0IGFuZCBvbmUgbGluZSBwZXIgaXRlbSAoZWFjaCBpdGVtJ3Mgc3ViamVjdCksIG9sZGVzdCBmaXJzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckVjb3N5c3RlbURpZ2VzdChcbiAgZXZlbnQ6IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkV2ZW50SWQsXG4gIGl0ZW1zOiByZWFkb25seSBFY29zeXN0ZW1Ob3RpZmljYXRpb25Db250ZW50W10sXG4pOiBFY29zeXN0ZW1Ob3RpZmljYXRpb25Db250ZW50IHtcbiAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGl0ZW1zWzBdITtcbiAgY29uc3Qgc3BlYyA9IEVDT1NZU1RFTV9OT1RJRklDQVRJT05fRVZFTlRTW2V2ZW50XTtcbiAgY29uc3QgY2FkZW5jZSA9IHNwZWMuZGlnZXN0ID09PSAnaG91cmx5JyA/ICdIb3VybHknIDogc3BlYy5kaWdlc3QgPT09ICd3ZWVrbHknID8gJ1dlZWtseScgOiAnRGFpbHknO1xuICByZXR1cm4ge1xuICAgIHN1YmplY3Q6IGAke2NhZGVuY2V9IGRpZ2VzdDogJHtpdGVtcy5sZW5ndGh9IMOXICR7c3BlYy5kZXNjcmlwdGlvbn1gLnNsaWNlKDAsIEVDT1NZU1RFTV9OT1RJRllfU1VCSkVDVF9NQVgpLFxuICAgIHRleHQ6IGl0ZW1zLm1hcCgoaSkgPT4gYOKAoiAke2kuc3ViamVjdH1gKS5qb2luKCdcXG4nKS5zbGljZSgwLCBFQ09TWVNURU1fTk9USUZZX1RFWFRfTUFYKSxcbiAgfTtcbn1cbiJdfQ==
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLW5vdGlmaWNhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvZWNvc3lzdGVtLW5vdGlmaWNhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQWdDdEM7MEVBQzBFO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUE4RTtJQUMxSCx5QkFBeUIsRUFBRSxjQUFjO0lBQ3pDLDBCQUEwQixFQUFFLGVBQWU7SUFDM0MsMEJBQTBCLEVBQUUsZUFBZTtJQUMzQyxrQ0FBa0MsRUFBRSx1QkFBdUI7Q0FDNUQsQ0FBQztBQUtGLHFEQUFxRDtBQUNyRCxNQUFNLENBQUMsTUFBTSxzQ0FBc0MsR0FDakQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBd0JuRCw2Q0FBNkM7QUFDN0MsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQXVFO0lBQy9HLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSw0Q0FBNEMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7SUFDN0gsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLG1EQUFtRCxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtJQUN4SyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsbUNBQW1DLEVBQUUsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFO0lBQ3BILEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxpQ0FBaUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFB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TSxJQUFJLEdBQUcsNkJBQTZCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3BHLE9BQU87UUFDTCxPQUFPLEVBQUUsR0FBRyxPQUFPLFlBQVksS0FBSyxDQUFDLE1BQU0sTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSw0QkFBNEIsQ0FBQztRQUMxRyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSx5QkFBeUIsQ0FBQztLQUN4RixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBwbHVnaW4tZWNvc3lzdGVtIG5vdGlmaWNhdGlvbiBjb250cmFjdCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCksXG4gKiBzaGFyZWQgYnkgdGhlIHNlbmRlciAodGhlIHBsdWdpbiBzZXJ2aWNlJ3MgZW5xdWV1ZSBBUEkgYW5kIGRpZ2VzdFxuICogZGlzcGF0Y2hlcikgYW5kIHRoZSByZWxheSAocGxhdGZvcm0gYFBPU1QgL2ludGVybmFsL25vdGlmeS1lbWFpbGApLlxuICpcbiAqIFJlY2lwaWVudHMgdHJhdmVsIGFzIFJVTEVTLCBuZXZlciBhcyBsaXN0czogcGxhdGZvcm0gcmVzb2x2ZXMgZWFjaFxuICoge0BsaW5rIEVjb3N5c3RlbVJlY2lwaWVudFNwZWN9IGFnYWluc3QgaXRzIHVzZXIvUm9sZSBkaXJlY3RvcnkgQVQgU0VORCBUSU1FLFxuICogc28gYSBkaWdlc3QgdGhhdCBmbHVzaGVzIHRvbW9ycm93IHJlYWNoZXMgdG9tb3Jyb3cncyBtb2RlcmF0b3JzLCB0aGUgcGx1Z2luXG4gKiBzZXJ2aWNlIG5ldmVyIGhhbmRsZXMgYW4gZW1haWwgYWRkcmVzcyBvciBhIG1lbWJlcnNoaXAgbGlzdCwgYW5kIGEgcHVibGlzaGVyXG4gKiBjYW4gbmV2ZXIgbGVhcm4gd2hvIGluc3RhbGxlZCB0aGVpciBwbHVnaW4gKHRoZSByZWxheSBtYWlscyBlYWNoIHJlY2lwaWVudFxuICogaW5kaXZpZHVhbGx5IOKAlCBubyBzaGFyZWQgVG86IGxpbmUpLlxuICovXG5cbi8qKiBBIG5vdGlmaWNhdGlvbiBldmVudCBudW1iZXIuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudElkID1cbiAgfCAnTjEnIHwgJ04yJyB8ICdOMycgfCAnTjQnIHwgJ041JyB8ICdONicgfCAnTjcnIHwgJ044JyB8ICdOOScgfCAnTjEwJ1xuICB8ICdOMTEnIHwgJ04xMicgfCAnTjEzJyB8ICdOMTQnIHwgJ04xNScgfCAnTjE2JyB8ICdOMTcnIHwgJ04xOCcgfCAnTjE5JyB8ICdOMjAnXG4gIHwgJ04yMScgfCAnTjIyJyB8ICdOMjMnIHwgJ04yNCcgfCAnTjI1JyB8ICdOMjYnIHwgJ04yNycgfCAnTjI4JyB8ICdOMjknXG4gIHwgJ04zMCcgfCAnTjMxJyB8ICdOMzInIHwgJ04zMyc7XG5cbi8qKiBBIGRlbGl2ZXJ5IGNoYW5uZWwuIEluLWFwcCBpcyB0aGUgc291cmNlIG9mIHRydXRoOyBlbWFpbCBpcyB0aGUgY291cnRlc3kgY29weS4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWwgPSAnaW5fYXBwJyB8ICdlbWFpbCc7XG5cbi8qKiBBIHBlci11c2VyIEVNQUlMIG9wdC1vdXQga2V5LiBJbi1hcHAgaXMgbmV2ZXIgb3B0aW9uYWwuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1FbWFpbFByZWZlcmVuY2UgPVxuICB8ICdlY29zeXN0ZW0ucmV2aWV3cy5lbWFpbCdcbiAgfCAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJ1xuICB8ICdlY29zeXN0ZW0uaW5zdGFsbHMuZW1haWwnXG4gIHwgJ2Vjb3N5c3RlbS5tb2RlcmF0aW9uRGlnZXN0LmVtYWlsJztcblxuLyoqIFRoZSBmaWVsZCBlYWNoIHByZWZlcmVuY2Uga2V5IGlzIHN0b3JlZCB1bmRlciBpbiB0aGUgdXNlcidzIHBlci1vcmdcbiAqICBgbm90aWZpY2F0aW9ucy5lY29zeXN0ZW1gIHByZWZlcmVuY2VzIChwbGF0Zm9ybSBgVXNlclByZWZlcmVuY2VzYCkuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX0VNQUlMX1BSRUZFUkVOQ0VfRklFTERTOiBSZWFkb25seTxSZWNvcmQ8RWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlLCBFY29zeXN0ZW1FbWFpbFByZWZlcmVuY2VGaWVsZD4+ID0ge1xuICAnZWNvc3lzdGVtLnJldmlld3MuZW1haWwnOiAncmV2aWV3c0VtYWlsJyxcbiAgJ2Vjb3N5c3RlbS51cGdyYWRlcy5lbWFpbCc6ICd1cGdyYWRlc0VtYWlsJyxcbiAgJ2Vjb3N5c3RlbS5pbnN0YWxscy5lbWFpbCc6ICdpbnN0YWxsc0VtYWlsJyxcbiAgJ2Vjb3N5c3RlbS5tb2RlcmF0aW9uRGlnZXN0LmVtYWlsJzogJ21vZGVyYXRpb25EaWdlc3RFbWFpbCcsXG59O1xuXG4vKiogU3RvcmVkIGZpZWxkIG5hbWVzIG9mIHRoZSBlY29zeXN0ZW0gZW1haWwgcHJlZmVyZW5jZXMgKGFsbCBkZWZhdWx0IGB0cnVlYCkuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1FbWFpbFByZWZlcmVuY2VGaWVsZCA9ICdyZXZpZXdzRW1haWwnIHwgJ3VwZ3JhZGVzRW1haWwnIHwgJ2luc3RhbGxzRW1haWwnIHwgJ21vZGVyYXRpb25EaWdlc3RFbWFpbCc7XG5cbi8qKiBFdmVyeSBzdG9yZWQgZWNvc3lzdGVtIGVtYWlsLXByZWZlcmVuY2UgZmllbGQuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX0VNQUlMX1BSRUZFUkVOQ0VfRklFTERfTkFNRVM6IHJlYWRvbmx5IEVjb3N5c3RlbUVtYWlsUHJlZmVyZW5jZUZpZWxkW10gPVxuICBPYmplY3QudmFsdWVzKEVDT1NZU1RFTV9FTUFJTF9QUkVGRVJFTkNFX0ZJRUxEUyk7XG5cbi8qKiBIb3cgb2Z0ZW4gYSBiYXRjaGVkIGVtYWlsIGlzIGZsdXNoZWQuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1EaWdlc3RDYWRlbmNlID0gJ2hvdXJseScgfCAnZGFpbHknIHwgJ3dlZWtseSc7XG5cbi8qKiBPbmUgZXZlbnQncyBkZWxpdmVyeSBydWxlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNvc3lzdGVtRXZlbnRTcGVjIHtcbiAgLyoqIE9uZS1saW5lIGRlc2NyaXB0aW9uIChkb2NzLCBsb2dzKS4gKi9cbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqIENoYW5uZWxzIHRoZSBldmVudCBpcyBkZWxpdmVyZWQgb24uICovXG4gIGNoYW5uZWxzOiByZWFkb25seSBFY29zeXN0ZW1Ob3RpZmljYXRpb25DaGFubmVsW107XG4gIC8qKlxuICAgKiBFbWFpbCBvcHQtb3V0IGtleSwgb3IgYG51bGxgIHdoZW4gdGhlIGVtYWlsIGlzIFRSQU5TQUNUSU9OQUwgLyBzZWN1cml0eVxuICAgKiAoTjEsIE4z4oCTTjUsIE434oCTTjEwLCBOMTjigJNOMjMsIE4yNSwgTjI44oCTTjMzIGNhbid0IGJlIHR1cm5lZCBvZmYpLlxuICAgKi9cbiAgcHJlZmVyZW5jZTogRWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlIHwgbnVsbDtcbiAgLyoqIFdoZW4gdGhlIGVtYWlsIGlzIGJhdGNoZWQgcmF0aGVyIHRoYW4gaW1tZWRpYXRlLCBpdHMgY2FkZW5jZS4gKi9cbiAgZGlnZXN0PzogRWNvc3lzdGVtRGlnZXN0Q2FkZW5jZTtcbiAgLyoqIEFsbG93ZWQgdG8gYWRkcmVzcyBhIHJhdyBlbWFpbDogdGhlIGFub255bW91cyBTVUJNSVRURVIgKHRoZVxuICAgKiAgdHJhbnNhY3Rpb25hbCBzdWJtaXNzaW9uIG5vdGljZXMpIGFuZCBhbiBvcmcncyBWRVJJRklFRCBleHRlcm5hbFxuICAgKiAgc2VjdXJpdHkgYWRkcmVzcyAodGhlIHBsdWdpbiBzZWN1cml0eSBub3RpY2VzIE4zMOKAk04zMykuICovXG4gIGFsbG93c0FkZHJlc3M/OiBib29sZWFuO1xufVxuXG4vKiogVGhlIG5vdGlmaWNhdGlvbiBldmVudCB0YWJsZSwgYXMgZGF0YS4gKi9cbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fTk9USUZJQ0FUSU9OX0VWRU5UUzogUmVhZG9ubHk8UmVjb3JkPEVjb3N5c3RlbU5vdGlmaWNhdGlvbkV2ZW50SWQsIEVjb3N5c3RlbUV2ZW50U3BlYz4+ID0ge1xuICBOMTogeyBkZXNjcmlwdGlvbjogJ0Fub255bW91cyBzdWJtaXNzaW9uIHJlY2VpdmVkIChtYWdpYyBsaW5rKScsIGNoYW5uZWxzOiBbJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgTjI6IHsgZGVzY3JpcHRpb246ICdTdWJtaXNzaW9uIHZlcmlmaWVkLCBlbnRlcmVkIHRoZSBtb2RlcmF0aW9uIHF1ZXVlJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0ubW9kZXJhdGlvbkRpZ2VzdC5lbWFpbCcsIGRpZ2VzdDogJ2RhaWx5JyB9LFxuICBOMzogeyBkZXNjcmlwdGlvbjogJ1N1Ym1pc3Npb24gZmFpbGVkIGF1dG9tYXRlZCBnYXRlcycsIGNoYW5uZWxzOiBbJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgTjQ6IHsgZGVzY3JpcHRpb246ICdTdWJtaXNzaW9uIGFwcHJvdmVkIG9yIHJlamVjdGVkJywgY2hhbm5lbHM6IFsnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICBONTogeyBkZXNjcmlwdGlvbjogJ1N1Ym1pc3Npb24gY2xhaW1lZCBieSBhbiBhY2NvdW50JywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjY6IHsgZGVzY3JpcHRpb246ICdWZXJpZmllZC1wdWJsaXNoZXIgYXBwbGljYXRpb24gc3VibWl0dGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0ubW9kZXJhdGlvbkRpZ2VzdC5lbWFpbCcsIGRpZ2VzdDogJ2RhaWx5JyB9LFxuICBONzogeyBkZXNjcmlwdGlvbjogJ1ZlcmlmaWVkIGFwcGxpY2F0aW9uIGFwcHJvdmVkIG9yIHJlamVjdGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjg6IHsgZGVzY3JpcHRpb246ICdNb2RlcmF0aW9uIGFjdGlvbiBvbiBhIGxpc3RpbmcgKHN1c3BlbmQsIHlhbmssIHRha2Vkb3duKScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE45OiB7IGRlc2NyaXB0aW9uOiAnT3duZXJzaGlwIHRyYW5zZmVyIHJlcXVlc3RlZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4xMDogeyBkZXNjcmlwdGlvbjogJ093bmVyc2hpcCB0cmFuc2ZlciBhY2NlcHRlZCwgZGVjbGluZWQsIGFwcHJvdmVkIG9yIHJlamVjdGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjExOiB7IGRlc2NyaXB0aW9uOiAnSW5zdGFsbCByZXF1ZXN0ZWQgKHBvbGljeSByZXF1aXJlcyBhcHByb3ZhbCknLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5pbnN0YWxscy5lbWFpbCcgfSxcbiAgTjEyOiB7IGRlc2NyaXB0aW9uOiAnSW5zdGFsbCBhcHByb3ZlZCBvciBkZW5pZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5pbnN0YWxscy5lbWFpbCcgfSxcbiAgTjEzOiB7IGRlc2NyaXB0aW9uOiAnTmV3IHZlcnNpb24gYXZhaWxhYmxlIHdpdGhpbiBhbiBpbnN0YWxsXFwncyBwb2xpY3knLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS51cGdyYWRlcy5lbWFpbCcsIGRpZ2VzdDogJ3dlZWtseScgfSxcbiAgTjE0OiB7IGRlc2NyaXB0aW9uOiAnTGlzdGluZyBkZXByZWNhdGVkIG9yIHVubWFpbnRhaW5lZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJyB9LFxuICBOMTU6IHsgZGVzY3JpcHRpb246ICdOZXcgb3IgZWRpdGVkIHJldmlldyBvbiBhIGxpc3RpbmcnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5yZXZpZXdzLmVtYWlsJywgZGlnZXN0OiAnaG91cmx5JyB9LFxuICBOMTY6IHsgZGVzY3JpcHRpb246ICdQdWJsaXNoZXIgcmVwbGllZCB0byB5b3VyIHJldmlldycsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnJldmlld3MuZW1haWwnIH0sXG4gIE4xNzogeyBkZXNjcmlwdGlvbjogJ1JldmlldyBoZWxkIChyZXBvcnRzLCBidXJzdCwgZmlsdGVyKScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLm1vZGVyYXRpb25EaWdlc3QuZW1haWwnLCBkaWdlc3Q6ICdkYWlseScgfSxcbiAgTjE4OiB7IGRlc2NyaXB0aW9uOiAnWW91ciByZXZpZXcgd2FzIHJlbW92ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMTk6IHsgZGVzY3JpcHRpb246ICdSZXZpZXcgZmxhZ2dlZCBhcyBhIHNlY3VyaXR5IGlzc3VlJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjIwOiB7IGRlc2NyaXB0aW9uOiAnQWR2aXNvcnkgZHJhZnQgYXV0by1jcmVhdGVkIChDVkUgcmVzY2FuKScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yMTogeyBkZXNjcmlwdGlvbjogJ0Fkdmlzb3J5IHB1Ymxpc2hlZCBvciB3aXRoZHJhd24nLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMjI6IHsgZGVzY3JpcHRpb246ICdNb2RlcmF0aW9uIFNMQSBicmVhY2gnLCBjaGFubmVsczogWydlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yMzogeyBkZXNjcmlwdGlvbjogJ0FkZGVkIHRvIG9yIHJlbW92ZWQgZnJvbSB0aGUgRWNvc3lzdGVtIE1hbmFnZXIgcm9sZScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yNDogeyBkZXNjcmlwdGlvbjogJ1B1Ymxpc2ggcmVxdWVzdCBzdWJtaXR0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5tb2RlcmF0aW9uRGlnZXN0LmVtYWlsJywgZGlnZXN0OiAnZGFpbHknIH0sXG4gIE4yNTogeyBkZXNjcmlwdGlvbjogJ1B1Ymxpc2ggcmVxdWVzdCBhcHByb3ZlZCBvciByZWplY3RlZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yNjogeyBkZXNjcmlwdGlvbjogJ0xpc3Rpbmcgb3IgdmVyc2lvbiBwYXVzZWQgYnkgaXRzIHB1Ymxpc2hlcicsIGNoYW5uZWxzOiBbJ2luX2FwcCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJyB9LFxuICBOMjc6IHsgZGVzY3JpcHRpb246ICdJbnN0YWxsZWQgbGlzdGluZyBhdXRvLXVwZGF0ZWQgd2l0aGluIGl0cyByYW5nZScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJywgZGlnZXN0OiAnd2Vla2x5JyB9LFxuICBOMjg6IHsgZGVzY3JpcHRpb246ICdBIHJlcXVlc3QgbmVlZHMgYSBzZWNvbmQgYXBwcm92YWwnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMjk6IHsgZGVzY3JpcHRpb246ICdQbGFuIGNoYW5nZSBhZmZlY3RzIHB1Ymxpc2hpbmcnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICAvLyBQZXItb3JnIHBsdWdpbiBzZWN1cml0eSBub3RpY2VzIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kIFwiU2NhbiBnYXRlc1wiKS5cbiAgLy8gUmVjaXBpZW50cyBmb2xsb3cgdGhlIG9yZydzIHBsdWdpbiBzZWN1cml0eSBub3RpZmljYXRpb24gc2V0dGluZ3M7IHRoZSBvcmcnc1xuICAvLyB3ZWJob29rIChpZiBhbnkpIGlzIHNlbnQgYnkgdGhlIHBsdWdpbiBzZXJ2aWNlIGl0c2VsZi4gTjMxJ3MgZW1haWwgaG9ub3JzXG4gIC8vIHRoZSBvcmcncyBkaWdlc3Qgc2V0dGluZyAodGhlIHNlbmRlciBiYXRjaGVzIGl0KSwgTjMwIGlzIGFsd2F5cyBpbW1lZGlhdGUuXG4gIE4zMDogeyBkZXNjcmlwdGlvbjogJ1BsdWdpbiB2ZXJzaW9uIGJsb2NrZWQgKHVuc2Nhbm5lZCBvciBmaXhhYmxlIENyaXRpY2FsKScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsLCBhbGxvd3NBZGRyZXNzOiB0cnVlIH0sXG4gIE4zMTogeyBkZXNjcmlwdGlvbjogJ1Jlc2NhbiBmb3VuZCBuZXcgQ3JpdGljYWwvSGlnaCBpbiBhIHBsdWdpbiB2ZXJzaW9uJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgLy8gUGlwZWxpbmUtb3duZXIgbm90aWNlczogYSBsb29rdXAgLyBydW50aW1lIGNoZWNrIFJFRlVTRUQgYSBwaXBlbGluZSdzIHBsdWdpblxuICAvLyB2ZXJzaW9uIChkZWR1cGxpY2F0ZWQgcGVyIHBpcGVsaW5lICsgdmVyc2lvbiBwZXIgZGF5KSwgYW5kIGEgdGltZS1ib3hlZCByaXNrXG4gIC8vIGFjY2VwdGFuY2Ugb2YgYSBwaXBlbGluZSdzIGZpbmRpbmdzIExBUFNFRCAodGhlIGZpbmRpbmdzIGFyZSBsaXZlIGFnYWluKS5cbiAgLy8gUm91dGVkIHRvIHRoZSBvcmcncyBwaXBlbGluZSB3cml0ZXJzIHVuZGVyIHRoZSBzYW1lIHNlY3VyaXR5IHNldHRpbmdzLlxuICBOMzI6IHsgZGVzY3JpcHRpb246ICdQaXBlbGluZSBibG9ja2VkIGJ5IGEgcGx1Z2luIHZ1bG5lcmFiaWxpdHkgcG9saWN5JywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgTjMzOiB7IGRlc2NyaXB0aW9uOiAnUGlwZWxpbmUgdnVsbmVyYWJpbGl0eSByaXNrIGFjY2VwdGFuY2UgbGFwc2VkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbn07XG5cbi8qKiBXaGV0aGVyIGB2YWx1ZWAgaXMgYSBub3RpZmljYXRpb24gZXZlbnQgbnVtYmVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudElkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEVDT1NZU1RFTV9OT1RJRklDQVRJT05fRVZFTlRTLCB2YWx1ZSk7XG59XG5cbi8qKiBPcmctbG9jYWwgcGVybWlzc2lvbnMgYW4ge0BsaW5rIEVjb3N5c3RlbVJlY2lwaWVudFNwZWN9IGBvcmdfcGVybWlzc2lvbmAgcnVsZSBtYXkgbmFtZS4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbU9yZ1JlY2lwaWVudFBlcm1pc3Npb24gPSAncHVibGlzaGVyczptYW5hZ2UnIHwgJ3BsdWdpbl9pbnN0YWxsczptYW5hZ2UnIHwgJ3BsdWdpbnM6d3JpdGUnIHwgJ3BpcGVsaW5lczp3cml0ZSc7XG4vKiogU3lzdGVtLW9yZyBwZXJtaXNzaW9ucyBhIGBtb2RlcmF0b3JzYCBydWxlIG1heSBuYW1lLiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtTW9kZXJhdG9yUGVybWlzc2lvbiA9ICdwbHVnaW5zOm1vZGVyYXRlJyB8ICdwdWJsaXNoZXJzOnZlcmlmeSc7XG5cbi8qKlxuICogQSByZWNpcGllbnQgUlVMRSwgcmVzb2x2ZWQgYnkgcGxhdGZvcm0gYXQgc2VuZCB0aW1lOlxuICpcbiAqICAtIGB1c2VyYCDigJQgb25lIHVzZXIgKFJlcXVlc3RlciwgUmV2aWV3IGF1dGhvciwgdGhlIGFmZmVjdGVkIHVzZXIgb2YgTjIzKS5cbiAqICAgIGBvcmdJZGAgcGlja3MgdGhlIGluYm94OyBkZWZhdWx0cyB0byB0aGUgdXNlcidzIGxhc3QgYWN0aXZlIG9yZy5cbiAqICAtIGBvcmdfcGVybWlzc2lvbmAg4oCUIGFjdGl2ZSBtZW1iZXJzIG9mIGBvcmdJZGAgaG9sZGluZyBgcGVybWlzc2lvbmBcbiAqICAgIChQdWJsaXNoZXIgbWFuYWdlcnMgPSBgcHVibGlzaGVyczptYW5hZ2VgLCBPcmcgYXBwcm92ZXJzID1cbiAqICAgIGBwbHVnaW5faW5zdGFsbHM6bWFuYWdlYCwgcGx1Z2luIHdyaXRlcnMgPSBgcGx1Z2luczp3cml0ZWApLiBXaXRoXG4gKiAgICBgaW5oZXJpdEZyb21Sb290YCwgYSB0ZWFtIHdpdGggbm8gaG9sZGVycyBmYWxscyBiYWNrIHRvIGl0cyByb290IG9yZydzXG4gKiAgICBob2xkZXJzOyB3aXRoIG5vbmUgYW55d2hlcmUsIHRoZSBvcmcncyBvd25lcnMuXG4gKiAgLSBgb3JnX21lbWJlcnNgIOKAlCB0aGUgbmFtZWQgdXNlcnMsIGJ1dCBvbmx5IHRob3NlIHdobyBhcmUgQUNUSVZFIG1lbWJlcnMgb2ZcbiAqICAgIGBvcmdJZGAgYXQgc2VuZCB0aW1lIChhbiBvcmcncyBjaG9zZW4gc2VjdXJpdHkgcmVjaXBpZW50czogYSBzdGFsZSBpZCwgb3JcbiAqICAgIHNvbWVvbmUgd2hvIGxlZnQsIHJlY2VpdmVzIG5vdGhpbmcpLlxuICogIC0gYG1vZGVyYXRvcnNgIOKAlCB0aGUgc3lzdGVtIG9yZydzIGhvbGRlcnMgb2YgYHBlcm1pc3Npb25gICh0aGUgRWNvc3lzdGVtXG4gKiAgICBNYW5hZ2VyIHJvbGUpLCBtaW51cyBhbnlvbmUgd2l0aCBhIGNvbmZsaWN0IG9mIGludGVyZXN0IChtZW1iZXJzIG9mXG4gKiAgICBgZXhjbHVkZU1lbWJlcnNPZk9yZ0lkYCwgb3IgdGhlIGxpc3RlZCB1c2Vycyk7IHN1cGVyYWRtaW5zIHdoZW4gZW1wdHkuXG4gKiAgLSBgc3VwZXJhZG1pbnNgIOKAlCBldmVyeSBwbGF0Zm9ybSBzdXBlcmFkbWluLlxuICogIC0gYGFkZHJlc3NgIOKAlCBhIHJhdyBhZGRyZXNzOyBvbmx5IHRoZSBhbm9ueW1vdXMgU1VCTUlUVEVSIG5vdGljZXMgKE4xLCBOMyxcbiAqICAgIE40KSwgd2hvc2UgcmVjaXBpZW50IGhhcyBubyBhY2NvdW50LCBhbmQgYW4gb3JnJ3MgVkVSSUZJRUQgZXh0ZXJuYWxcbiAqICAgIHNlY3VyaXR5IGFkZHJlc3Mgb24gdGhlIHBsdWdpbiBzZWN1cml0eSBub3RpY2VzIChOMzDigJNOMzMpLlxuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1SZWNpcGllbnRTcGVjID1cbiAgfCB7IGtpbmQ6ICd1c2VyJzsgdXNlcklkOiBzdHJpbmc7IG9yZ0lkPzogc3RyaW5nIH1cbiAgfCB7IGtpbmQ6ICdvcmdfcGVybWlzc2lvbic7IG9yZ0lkOiBzdHJpbmc7IHBlcm1pc3Npb246IEVjb3N5c3RlbU9yZ1JlY2lwaWVudFBlcm1pc3Npb247IGluaGVyaXRGcm9tUm9vdD86IGJvb2xlYW4gfVxuICB8IHsga2luZDogJ29yZ19tZW1iZXJzJzsgb3JnSWQ6IHN0cmluZzsgdXNlcklkczogc3RyaW5nW10gfVxuICB8IHsga2luZDogJ21vZGVyYXRvcnMnOyBwZXJtaXNzaW9uOiBFY29zeXN0ZW1Nb2RlcmF0b3JQZXJtaXNzaW9uOyBleGNsdWRlTWVtYmVyc09mT3JnSWQ/OiBzdHJpbmc7IGV4Y2x1ZGVVc2VySWRzPzogc3RyaW5nW10gfVxuICB8IHsga2luZDogJ3N1cGVyYWRtaW5zJyB9XG4gIHwgeyBraW5kOiAnYWRkcmVzcyc7IGVtYWlsOiBzdHJpbmcgfTtcblxuLyoqIFRoZSBib2R5IG9mIGFuIGVjb3N5c3RlbSBzZW5kIHRocm91Z2ggcGxhdGZvcm0ncyBub3RpZnkgcmVsYXkuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjb3N5c3RlbU5vdGlmeVJlcXVlc3Qge1xuICBldmVudDogRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZDtcbiAgcmVjaXBpZW50czogRWNvc3lzdGVtUmVjaXBpZW50U3BlY1tdO1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIC8qKiBQbGFpbi10ZXh0IGJvZHkgKGVtYWlsIGJvZHkgYW5kIGluLWFwcCBjb250ZW50KS4gKi9cbiAgdGV4dDogc3RyaW5nO1xuICAvKiogU3Vic2V0IG9mIHRoZSBldmVudCdzIGNoYW5uZWxzIHRvIGRlbGl2ZXIgb24gKGRlZmF1bHQ6IGFsbCBvZiB0aGVtKS4gVGhlXG4gICAqICBkaWdlc3QgZGlzcGF0Y2hlciBzZW5kcyBgWydlbWFpbCddYCBiZWNhdXNlIGluLWFwcCB3ZW50IG91dCBhdCBlbnF1ZXVlLiAqL1xuICBjaGFubmVscz86IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWxbXTtcbiAgLyoqIERlbGl2ZXIgdGhlIGVtYWlsIGV2ZW4gdG8gdXNlcnMgd2hvIG9wdGVkIG91dCDigJQgZm9yIGFuIGV2ZW50IHdob3NlXG4gICAqICBub3JtYWxseS1vcHRpb25hbCBlbWFpbCBpcyBtYW5kYXRvcnkgaW4gdGhpcyBpbnN0YW5jZSAoTjI0IHlhbmssIGFkdmlzb3J5XG4gICAqICBhbmQgc2VjdXJpdHktZml4IHJlcXVlc3RzKS4gKi9cbiAgbWFuZGF0b3J5PzogYm9vbGVhbjtcbn1cblxuLyoqIEhhcmQgY2FwcywgbWF0Y2hpbmcgdGhlIG1lc3NhZ2Ugc2VydmljZSdzIG93biBsaW1pdHMuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX05PVElGWV9TVUJKRUNUX01BWCA9IDUwMDtcbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fTk9USUZZX1RFWFRfTUFYID0gMTAwMDA7XG5jb25zdCBNQVhfUkVDSVBJRU5UX1JVTEVTID0gNTA7XG5cbmNvbnN0IE9SR19QRVJNSVNTSU9OUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbJ3B1Ymxpc2hlcnM6bWFuYWdlJywgJ3BsdWdpbl9pbnN0YWxsczptYW5hZ2UnLCAncGx1Z2luczp3cml0ZScsICdwaXBlbGluZXM6d3JpdGUnXTtcbi8qKiBBdCBtb3N0IHRoaXMgbWFueSB1c2VycyBpbiBvbmUgYG9yZ19tZW1iZXJzYCBydWxlLiAqL1xuZXhwb3J0IGNvbnN0IEVDT1NZU1RFTV9PUkdfTUVNQkVSU19NQVggPSAxMDA7XG5jb25zdCBNT0RFUkFUT1JfUEVSTUlTU0lPTlM6IHJlYWRvbmx5IHN0cmluZ1tdID0gWydwbHVnaW5zOm1vZGVyYXRlJywgJ3B1Ymxpc2hlcnM6dmVyaWZ5J107XG5jb25zdCBFTUFJTF9TSEFQRSA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvO1xuXG5mdW5jdGlvbiBub25FbXB0eVN0cmluZyh2OiB1bmtub3duLCBtYXggPSAyNTUpOiB2IGlzIHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgdi50cmltKCkubGVuZ3RoID4gMCAmJiB2Lmxlbmd0aCA8PSBtYXg7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVjaXBpZW50KHJhdzogdW5rbm93biwgc3BlYzogRWNvc3lzdGVtRXZlbnRTcGVjKTogRWNvc3lzdGVtUmVjaXBpZW50U3BlYyB8IHN0cmluZyB7XG4gIGlmICghcmF3IHx8IHR5cGVvZiByYXcgIT09ICdvYmplY3QnKSByZXR1cm4gJ2VhY2ggcmVjaXBpZW50IG11c3QgYmUgYW4gb2JqZWN0JztcbiAgY29uc3QgciA9IHJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgc3dpdGNoIChyLmtpbmQpIHtcbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIGlmICghbm9uRW1wdHlTdHJpbmcoci51c2VySWQpKSByZXR1cm4gJ3VzZXIgcmVjaXBpZW50IG5lZWRzIHVzZXJJZCc7XG4gICAgICBpZiAoci5vcmdJZCAhPT0gdW5kZWZpbmVkICYmICFub25FbXB0eVN0cmluZyhyLm9yZ0lkKSkgcmV0dXJuICd1c2VyIHJlY2lwaWVudCBvcmdJZCBtdXN0IGJlIGEgc3RyaW5nJztcbiAgICAgIHJldHVybiB7IGtpbmQ6ICd1c2VyJywgdXNlcklkOiByLnVzZXJJZCwgLi4uKHIub3JnSWQgPyB7IG9yZ0lkOiByLm9yZ0lkIGFzIHN0cmluZyB9IDoge30pIH07XG4gICAgY2FzZSAnb3JnX3Blcm1pc3Npb24nOlxuICAgICAgaWYgKCFub25FbXB0eVN0cmluZyhyLm9yZ0lkKSkgcmV0dXJuICdvcmdfcGVybWlzc2lvbiByZWNpcGllbnQgbmVlZHMgb3JnSWQnO1xuICAgICAgaWYgKHR5cGVvZiByLnBlcm1pc3Npb24gIT09ICdzdHJpbmcnIHx8ICFPUkdfUEVSTUlTU0lPTlMuaW5jbHVkZXMoci5wZXJtaXNzaW9uKSkgcmV0dXJuICdvcmdfcGVybWlzc2lvbiByZWNpcGllbnQgbmFtZXMgYW4gdW5zdXBwb3J0ZWQgcGVybWlzc2lvbic7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiAnb3JnX3Blcm1pc3Npb24nLFxuICAgICAgICBvcmdJZDogci5vcmdJZCxcbiAgICAgICAgcGVybWlzc2lvbjogci5wZXJtaXNzaW9uIGFzIEVjb3N5c3RlbU9yZ1JlY2lwaWVudFBlcm1pc3Npb24sXG4gICAgICAgIC4uLihyLmluaGVyaXRGcm9tUm9vdCA9PT0gdHJ1ZSA/IHsgaW5oZXJpdEZyb21Sb290OiB0cnVlIH0gOiB7fSksXG4gICAgICB9O1xuICAgIGNhc2UgJ29yZ19tZW1iZXJzJzoge1xuICAgICAgaWYgKCFub25FbXB0eVN0cmluZyhyLm9yZ0lkKSkgcmV0dXJuICdvcmdfbWVtYmVycyByZWNpcGllbnQgbmVlZHMgb3JnSWQnO1xuICAgICAgY29uc3QgdXNlcnMgPSByLnVzZXJJZHM7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodXNlcnMpIHx8IHVzZXJzLmxlbmd0aCA9PT0gMCB8fCAhdXNlcnMuZXZlcnkoKHUpID0+IG5vbkVtcHR5U3RyaW5nKHUpKSkgcmV0dXJuICdvcmdfbWVtYmVycyByZWNpcGllbnQgbmVlZHMgYSBub24tZW1wdHkgdXNlcklkcyBhcnJheSc7XG4gICAgICBpZiAodXNlcnMubGVuZ3RoID4gRUNPU1lTVEVNX09SR19NRU1CRVJTX01BWCkgcmV0dXJuIGBvcmdfbWVtYmVycyByZWNpcGllbnQgbmFtZXMgYXQgbW9zdCAke0VDT1NZU1RFTV9PUkdfTUVNQkVSU19NQVh9IHVzZXJzYDtcbiAgICAgIHJldHVybiB7IGtpbmQ6ICdvcmdfbWVtYmVycycsIG9yZ0lkOiByLm9yZ0lkLCB1c2VySWRzOiBbLi4ubmV3IFNldCh1c2VycyBhcyBzdHJpbmdbXSldIH07XG4gICAgfVxuICAgIGNhc2UgJ21vZGVyYXRvcnMnOiB7XG4gICAgICBpZiAodHlwZW9mIHIucGVybWlzc2lvbiAhPT0gJ3N0cmluZycgfHwgIU1PREVSQVRPUl9QRVJNSVNTSU9OUy5pbmNsdWRlcyhyLnBlcm1pc3Npb24pKSByZXR1cm4gJ21vZGVyYXRvcnMgcmVjaXBpZW50IG5hbWVzIGFuIHVuc3VwcG9ydGVkIHBlcm1pc3Npb24nO1xuICAgICAgaWYgKHIuZXhjbHVkZU1lbWJlcnNPZk9yZ0lkICE9PSB1bmRlZmluZWQgJiYgIW5vbkVtcHR5U3RyaW5nKHIuZXhjbHVkZU1lbWJlcnNPZk9yZ0lkKSkgcmV0dXJuICdleGNsdWRlTWVtYmVyc09mT3JnSWQgbXVzdCBiZSBhIHN0cmluZyc7XG4gICAgICBjb25zdCBleGNsdWRlID0gci5leGNsdWRlVXNlcklkcztcbiAgICAgIGlmIChleGNsdWRlICE9PSB1bmRlZmluZWQgJiYgKCFBcnJheS5pc0FycmF5KGV4Y2x1ZGUpIHx8ICFleGNsdWRlLmV2ZXJ5KCh1KSA9PiBub25FbXB0eVN0cmluZyh1KSkpKSByZXR1cm4gJ2V4Y2x1ZGVVc2VySWRzIG11c3QgYmUgYW4gYXJyYXkgb2YgaWRzJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdtb2RlcmF0b3JzJyxcbiAgICAgICAgcGVybWlzc2lvbjogci5wZXJtaXNzaW9uIGFzIEVjb3N5c3RlbU1vZGVyYXRvclBlcm1pc3Npb24sXG4gICAgICAgIC4uLihyLmV4Y2x1ZGVNZW1iZXJzT2ZPcmdJZCA/IHsgZXhjbHVkZU1lbWJlcnNPZk9yZ0lkOiByLmV4Y2x1ZGVNZW1iZXJzT2ZPcmdJZCBhcyBzdHJpbmcgfSA6IHt9KSxcbiAgICAgICAgLi4uKGV4Y2x1ZGUgPyB7IGV4Y2x1ZGVVc2VySWRzOiBleGNsdWRlIGFzIHN0cmluZ1tdIH0gOiB7fSksXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdzdXBlcmFkbWlucyc6XG4gICAgICByZXR1cm4geyBraW5kOiAnc3VwZXJhZG1pbnMnIH07XG4gICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBpZiAoIXNwZWMuYWxsb3dzQWRkcmVzcykgcmV0dXJuICdhZGRyZXNzIHJlY2lwaWVudHMgYXJlIG9ubHkgYWxsb3dlZCBmb3IgYW5vbnltb3VzLXN1Ym1pc3Npb24gYW5kIHBsdWdpbiBzZWN1cml0eSBub3RpY2VzJztcbiAgICAgIGlmICghbm9uRW1wdHlTdHJpbmcoci5lbWFpbCwgMzIwKSB8fCAhRU1BSUxfU0hBUEUudGVzdChyLmVtYWlsKSkgcmV0dXJuICdhZGRyZXNzIHJlY2lwaWVudCBuZWVkcyBhIHZhbGlkIGVtYWlsJztcbiAgICAgIHJldHVybiB7IGtpbmQ6ICdhZGRyZXNzJywgZW1haWw6IHIuZW1haWwudHJpbSgpLnRvTG93ZXJDYXNlKCkgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICd1bmtub3duIHJlY2lwaWVudCBraW5kJztcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIGFuIHtAbGluayBFY29zeXN0ZW1Ob3RpZnlSZXF1ZXN0fS4gUmV0dXJucyB0aGUgbm9ybWFsaXplZCByZXF1ZXN0LFxuICogb3IgYW4gZXJyb3Igc3RyaW5nICh0aGUgcmVsYXkncyA0MDApLiBQdXJlLCBzbyBib3RoIHRoZSBzZW5kZXIgKGZhaWwgYXRcbiAqIGVucXVldWUsIG5vdCBhdCAwOTowMCB0b21vcnJvdykgYW5kIHRoZSByZWxheSB1c2UgdGhlIHNhbWUgcnVsZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUVjb3N5c3RlbU5vdGlmeVJlcXVlc3QoYm9keTogdW5rbm93bik6IEVjb3N5c3RlbU5vdGlmeVJlcXVlc3QgfCBzdHJpbmcge1xuICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkgIT09ICdvYmplY3QnKSByZXR1cm4gJ2JvZHkgbXVzdCBiZSBhbiBvYmplY3QnO1xuICBjb25zdCBiID0gYm9keSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKCFpc0Vjb3N5c3RlbU5vdGlmaWNhdGlvbkV2ZW50KGIuZXZlbnQpKSByZXR1cm4gJ2V2ZW50IG11c3QgYmUgb25lIG9mIE4xLi5OMzMnO1xuICBjb25zdCBzcGVjID0gRUNPU1lTVEVNX05PVElGSUNBVElPTl9FVkVOVFNbYi5ldmVudF07XG4gIGlmICghbm9uRW1wdHlTdHJpbmcoYi5zdWJqZWN0LCBFQ09TWVNURU1fTk9USUZZX1NVQkpFQ1RfTUFYKSkgcmV0dXJuIGBzdWJqZWN0IGlzIHJlcXVpcmVkIChtYXggJHtFQ09TWVNURU1fTk9USUZZX1NVQkpFQ1RfTUFYfSlgO1xuICBpZiAoIW5vbkVtcHR5U3RyaW5nKGIudGV4dCwgRUNPU1lTVEVNX05PVElGWV9URVhUX01BWCkpIHJldHVybiBgdGV4dCBpcyByZXF1aXJlZCAobWF4ICR7RUNPU1lTVEVNX05PVElGWV9URVhUX01BWH0pYDtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGIucmVjaXBpZW50cykgfHwgYi5yZWNpcGllbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICdyZWNpcGllbnRzIG11c3QgYmUgYSBub24tZW1wdHkgYXJyYXknO1xuICBpZiAoYi5yZWNpcGllbnRzLmxlbmd0aCA+IE1BWF9SRUNJUElFTlRfUlVMRVMpIHJldHVybiBgYXQgbW9zdCAke01BWF9SRUNJUElFTlRfUlVMRVN9IHJlY2lwaWVudCBydWxlc2A7XG4gIGNvbnN0IHJlY2lwaWVudHM6IEVjb3N5c3RlbVJlY2lwaWVudFNwZWNbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJhdyBvZiBiLnJlY2lwaWVudHMpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVJlY2lwaWVudChyYXcsIHNwZWMpO1xuICAgIGlmICh0eXBlb2YgcGFyc2VkID09PSAnc3RyaW5nJykgcmV0dXJuIHBhcnNlZDtcbiAgICByZWNpcGllbnRzLnB1c2gocGFyc2VkKTtcbiAgfVxuICBsZXQgY2hhbm5lbHM6IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWxbXSB8IHVuZGVmaW5lZDtcbiAgaWYgKGIuY2hhbm5lbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShiLmNoYW5uZWxzKSB8fCBiLmNoYW5uZWxzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICdjaGFubmVscyBtdXN0IGJlIGEgbm9uLWVtcHR5IGFycmF5JztcbiAgICBjb25zdCBiYWQgPSBiLmNoYW5uZWxzLmZpbHRlcigoYykgPT4gIXNwZWMuY2hhbm5lbHMuaW5jbHVkZXMoYyBhcyBFY29zeXN0ZW1Ob3RpZmljYXRpb25DaGFubmVsKSk7XG4gICAgaWYgKGJhZC5sZW5ndGggPiAwKSByZXR1cm4gYGV2ZW50ICR7Yi5ldmVudH0gaXMgbm90IGRlbGl2ZXJlZCBvbjogJHtiYWQuam9pbignLCAnKX1gO1xuICAgIGNoYW5uZWxzID0gWy4uLm5ldyBTZXQoYi5jaGFubmVscyBhcyBFY29zeXN0ZW1Ob3RpZmljYXRpb25DaGFubmVsW10pXTtcbiAgfVxuICBpZiAoYi5tYW5kYXRvcnkgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgYi5tYW5kYXRvcnkgIT09ICdib29sZWFuJykgcmV0dXJuICdtYW5kYXRvcnkgbXVzdCBiZSBhIGJvb2xlYW4nO1xuICByZXR1cm4ge1xuICAgIGV2ZW50OiBiLmV2ZW50LFxuICAgIHJlY2lwaWVudHMsXG4gICAgc3ViamVjdDogYi5zdWJqZWN0LnRyaW0oKSxcbiAgICB0ZXh0OiBiLnRleHQudHJpbSgpLFxuICAgIC4uLihjaGFubmVscyA/IHsgY2hhbm5lbHMgfSA6IHt9KSxcbiAgICAuLi4oYi5tYW5kYXRvcnkgPT09IHRydWUgPyB7IG1hbmRhdG9yeTogdHJ1ZSB9IDoge30pLFxuICB9O1xufVxuXG4vKiogVGhlIFVUQyBob3VyIGRpZ2VzdHMgZmx1c2ggYXQgKFwiZGFpbHkgZGlnZXN0IGVtYWlsICgwOTowMCBVVEMpXCIpLiAqL1xuZXhwb3J0IGNvbnN0IEVDT1NZU1RFTV9ESUdFU1RfSE9VUl9VVEMgPSA5O1xuXG4vKipcbiAqIFRoZSBuZXh0IGZsdXNoIHRpbWUgZm9yIGEgZGlnZXN0IGNhZGVuY2UsIHN0cmljdGx5IGFmdGVyIGBub3dgOlxuICogYGhvdXJseWAg4oaSIHRoZSBuZXh0IHRvcCBvZiB0aGUgaG91cjsgYGRhaWx5YCDihpIgdGhlIG5leHQgMDk6MDAgVVRDO1xuICogYHdlZWtseWAg4oaSIHRoZSBuZXh0IE1vbmRheSAwOTowMCBVVEMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0RWNvc3lzdGVtRGlnZXN0VGltZShjYWRlbmNlOiBFY29zeXN0ZW1EaWdlc3RDYWRlbmNlLCBub3c6IERhdGUgPSBuZXcgRGF0ZSgpKTogRGF0ZSB7XG4gIGNvbnN0IHQgPSBuZXcgRGF0ZShub3cuZ2V0VGltZSgpKTtcbiAgaWYgKGNhZGVuY2UgPT09ICdob3VybHknKSB7XG4gICAgdC5zZXRVVENNaW51dGVzKDAsIDAsIDApO1xuICAgIHQuc2V0VVRDSG91cnModC5nZXRVVENIb3VycygpICsgMSk7XG4gICAgcmV0dXJuIHQ7XG4gIH1cbiAgdC5zZXRVVENIb3VycyhFQ09TWVNURU1fRElHRVNUX0hPVVJfVVRDLCAwLCAwLCAwKTtcbiAgaWYgKHQuZ2V0VGltZSgpIDw9IG5vdy5nZXRUaW1lKCkpIHQuc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSArIDEpO1xuICBpZiAoY2FkZW5jZSA9PT0gJ3dlZWtseScpIHtcbiAgICAvLyBnZXRVVENEYXk6IDAgPSBTdW5kYXkg4oCmIDEgPSBNb25kYXkuXG4gICAgd2hpbGUgKHQuZ2V0VVRDRGF5KCkgIT09IDEpIHQuc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSArIDEpO1xuICB9XG4gIHJldHVybiB0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRlbXBsYXRlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBBIHJlbmRlcmVkIG5vdGljZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNvc3lzdGVtTm90aWZpY2F0aW9uQ29udGVudCB7XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgdGV4dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE4yMyDigJQgc29tZW9uZSB3YXMgYWRkZWQgdG8gb3IgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0gb3JnJ3MgRWNvc3lzdGVtXG4gKiBNYW5hZ2VyIHJvbGUuIFNlbnQgdG8gZXZlcnkgc3VwZXJhZG1pbiBhbmQgdG8gdGhlIGFmZmVjdGVkIHVzZXI7XG4gKiB0cmFuc2FjdGlvbmFsIChubyBvcHQtb3V0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckVjb3N5c3RlbU1hbmFnZXJDaGFuZ2UoaW5wdXQ6IHtcbiAgLyoqIFRoZSBhZmZlY3RlZCB1c2VyJ3MgZGlzcGxheSBuYW1lIG9yIGVtYWlsLiAqL1xuICB1c2VyOiBzdHJpbmc7XG4gIGFkZGVkOiBib29sZWFuO1xuICAvKiogV2hvIG1hZGUgdGhlIGNoYW5nZSAoc3VwZXJhZG1pbnMgb25seSBjYW4pLCB3aGVuIGtub3duLiAqL1xuICBhY3Rvcj86IHN0cmluZztcbn0pOiBFY29zeXN0ZW1Ob3RpZmljYXRpb25Db250ZW50IHtcbiAgY29uc3QgdmVyYiA9IGlucHV0LmFkZGVkID8gJ2FkZGVkIHRvJyA6ICdyZW1vdmVkIGZyb20nO1xuICBjb25zdCBieSA9IGlucHV0LmFjdG9yID8gYCBieSAke2lucHV0LmFjdG9yfWAgOiAnJztcbiAgcmV0dXJuIHtcbiAgICBzdWJqZWN0OiBgJHtpbnB1dC51c2VyfSB3YXMgJHt2ZXJifSB0aGUgRWNvc3lzdGVtIE1hbmFnZXIgcm9sZWAsXG4gICAgdGV4dDogaW5wdXQuYWRkZWRcbiAgICAgID8gYCR7aW5wdXQudXNlcn0gd2FzICR7dmVyYn0gdGhlIEVjb3N5c3RlbSBNYW5hZ2VyIHJvbGUke2J5fS4gRWNvc3lzdGVtIE1hbmFnZXJzIGRlY2lkZSBwdWJsaXNoIHJlcXVlc3RzLCBgXG4gICAgICAgICsgJ21vZGVyYXRlIHN1Ym1pc3Npb25zIGFuZCByZXZpZXdzLCB2ZXJpZnkgcHVibGlzaGVycyBhbmQgcHVibGlzaCBhZHZpc29yaWVzIGZvciB0aGUgd2hvbGUgcGx1Z2luIGVjb3N5c3RlbS4gJ1xuICAgICAgICArICdUaGUgcm9sZSB3b3JrcyBvbmx5IGZyb20gdGhlIHN5c3RlbSBvcmdhbml6YXRpb24gYW5kIHJlcXVpcmVzIGEgdHdvLWZhY3RvciBzaWduLWluLidcbiAgICAgIDogYCR7aW5wdXQudXNlcn0gd2FzICR7dmVyYn0gdGhlIEVjb3N5c3RlbSBNYW5hZ2VyIHJvbGUke2J5fSBhbmQgY2FuIG5vIGxvbmdlciBtYW5hZ2Ugb3IgYXBwcm92ZSBhbnl0aGluZyBpbiB0aGUgcGx1Z2luIGVjb3N5c3RlbS5gLFxuICB9O1xufVxuXG4vKipcbiAqIENvYWxlc2NlIHNldmVyYWwgcXVldWVkIG5vdGljZXMgaW50byBvbmUgZGlnZXN0IGVtYWlsOiBhIGNvdW50LWJlYXJpbmdcbiAqIHN1YmplY3QgYW5kIG9uZSBsaW5lIHBlciBpdGVtIChlYWNoIGl0ZW0ncyBzdWJqZWN0KSwgb2xkZXN0IGZpcnN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRWNvc3lzdGVtRGlnZXN0KFxuICBldmVudDogRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZCxcbiAgaXRlbXM6IHJlYWRvbmx5IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNvbnRlbnRbXSxcbik6IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNvbnRlbnQge1xuICBpZiAoaXRlbXMubGVuZ3RoID09PSAxKSByZXR1cm4gaXRlbXNbMF0hO1xuICBjb25zdCBzcGVjID0gRUNPU1lTVEVNX05PVElGSUNBVElPTl9FVkVOVFNbZXZlbnRdO1xuICBjb25zdCBjYWRlbmNlID0gc3BlYy5kaWdlc3QgPT09ICdob3VybHknID8gJ0hvdXJseScgOiBzcGVjLmRpZ2VzdCA9PT0gJ3dlZWtseScgPyAnV2Vla2x5JyA6ICdEYWlseSc7XG4gIHJldHVybiB7XG4gICAgc3ViamVjdDogYCR7Y2FkZW5jZX0gZGlnZXN0OiAke2l0ZW1zLmxlbmd0aH0gw5cgJHtzcGVjLmRlc2NyaXB0aW9ufWAuc2xpY2UoMCwgRUNPU1lTVEVNX05PVElGWV9TVUJKRUNUX01BWCksXG4gICAgdGV4dDogaXRlbXMubWFwKChpKSA9PiBg4oCiICR7aS5zdWJqZWN0fWApLmpvaW4oJ1xcbicpLnNsaWNlKDAsIEVDT1NZU1RFTV9OT1RJRllfVEVYVF9NQVgpLFxuICB9O1xufVxuIl19
@@ -42,6 +42,9 @@ export declare enum ErrorCode {
42
42
  PUBLISHER_ROOT_ORG_REQUIRED = "PUBLISHER_ROOT_ORG_REQUIRED",
43
43
  /** The publisher is suspended by the system org. */
44
44
  PUBLISHER_SUSPENDED = "PUBLISHER_SUSPENDED",
45
+ /** The organization's administrators switched AI features off (`aiEnabled: false`
46
+ * on the org's AI configuration). Every AI entry point refuses with it. */
47
+ AI_DISABLED = "AI_DISABLED",
45
48
  /** Tenant publishing is switched off on this instance (`PLUGIN_PUBLISHING_ENABLED`). */
46
49
  PLUGIN_PUBLISHING_DISABLED = "PLUGIN_PUBLISHING_DISABLED",
47
50
  /** Review writes are switched off on this instance (`PLUGIN_REVIEWS_ENABLED`):
@@ -80,6 +83,11 @@ export declare enum ErrorCode {
80
83
  TEMPLATE_SIZE_EXCEEDED = "TEMPLATE_SIZE_EXCEEDED",
81
84
  TEMPLATE_VALIDATION_FAILED = "TEMPLATE_VALIDATION_FAILED",
82
85
  QUOTA_EXCEEDED = "QUOTA_EXCEEDED",
86
+ /** The caller's per-member share of the org's `aiCalls` (org setting
87
+ * `aiCallsPerMemberPct`) is spent for this period — the org itself may have headroom. */
88
+ AI_MEMBER_SHARE_EXCEEDED = "AI_MEMBER_SHARE_EXCEEDED",
89
+ /** The org's per-period AI token budget (org setting `aiTokenBudget`) is spent. */
90
+ AI_TOKEN_BUDGET_EXCEEDED = "AI_TOKEN_BUDGET_EXCEEDED",
83
91
  RATE_LIMIT_EXCEEDED = "RATE_LIMIT_EXCEEDED",
84
92
  /** An anonymous submitter (per verified email, or per client IP) is at the
85
93
  * rolling 24-hour submission cap. */
@@ -136,16 +144,15 @@ export declare enum ErrorCode {
136
144
  * a reserved name, an Official/Verified listing's name, or one confusable
137
145
  * with a top listing; `details.reason` says which. */
138
146
  NAME_TAKEN = "NAME_TAKEN",
139
- /** A flagged plugin version (a rescan found fixable Critical findings above
140
- * `PLUGIN_VULN_MAX_CRITICAL`) was pinned exactly while
141
- * `PLUGIN_BLOCK_ON_NEW_CRITICAL` is on; the message names the fix. Ranges
142
- * and the default skip flagged versions instead (docs/plugin-installing.md). */
143
- PLUGIN_VERSION_VULN_BLOCKED = "PLUGIN_VERSION_VULN_BLOCKED",
147
+ /** An UNQUALIFIED reference names a plugin the org DELETED: refused rather
148
+ * than silently falling through to a same-named listing, which would swap the
149
+ * image a pipeline runs without anyone choosing it (`details.state: 'deleted'`). */
150
+ PLUGIN_DELETED = "PLUGIN_DELETED",
144
151
  /** The built image could not be vulnerability-scanned after every retry, so
145
152
  * nothing was persisted (docs/plugin-publishing.md). */
146
153
  IMAGE_SCAN_UNAVAILABLE = "IMAGE_SCAN_UNAVAILABLE",
147
154
  /** The built image has more fixable Critical findings than the platform
148
- * floor `PLUGIN_VULN_MAX_CRITICAL`; the message lists them with their fixes. */
155
+ * floor `PLUGIN_VULN_MAX_FINDINGS`; the message lists them with their fixes. */
149
156
  PLUGIN_VULN_GATE = "PLUGIN_VULN_GATE",
150
157
  /** An upload whose NAME would override a listing or the parent org's plugin,
151
158
  * refused because the consumption policy says `shadowing: deny`. */