@pipeline-builder/api-core 5.2.10 → 5.2.12

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 (47) hide show
  1. package/lib/helpers/org-hierarchy-http.d.ts +3 -2
  2. package/lib/helpers/org-hierarchy-http.js +11 -5
  3. package/lib/middleware/index.d.ts +1 -1
  4. package/lib/middleware/index.js +2 -2
  5. package/lib/middleware/step-up.d.ts +4 -3
  6. package/lib/middleware/step-up.js +1 -1
  7. package/lib/services/index.d.ts +2 -2
  8. package/lib/services/index.js +2 -2
  9. package/lib/services/quota.d.ts +1 -2
  10. package/lib/services/quota.js +1 -1
  11. package/lib/services/version-vuln-policy.d.ts +1 -3
  12. package/lib/services/version-vuln-policy.js +2 -3
  13. package/lib/types/common.d.ts +13 -22
  14. package/lib/types/common.js +44 -5
  15. package/lib/types/ecosystem-notifications.d.ts +218 -26
  16. package/lib/types/ecosystem-notifications.js +26 -10
  17. package/lib/types/ecosystem.d.ts +1 -0
  18. package/lib/types/ecosystem.js +33 -23
  19. package/lib/types/error-codes.d.ts +41 -0
  20. package/lib/types/error-codes.js +62 -1
  21. package/lib/types/feature-flags.d.ts +11 -4
  22. package/lib/types/feature-flags.js +51 -11
  23. package/lib/types/index.d.ts +1 -1
  24. package/lib/types/index.js +2 -2
  25. package/lib/types/permissions.d.ts +353 -22
  26. package/lib/types/permissions.js +263 -125
  27. package/lib/types/pipeline.d.ts +2 -0
  28. package/lib/types/pipeline.js +3 -1
  29. package/lib/types/plugin-catalog.d.ts +68 -0
  30. package/lib/types/plugin-catalog.js +82 -1
  31. package/lib/types/quota-tiers.d.ts +6 -24
  32. package/lib/types/quota-tiers.js +6 -28
  33. package/lib/types/remote-audit-actions.d.ts +1 -1
  34. package/lib/types/remote-audit-actions.js +22 -1
  35. package/lib/types/tier-limits.d.ts +19 -0
  36. package/lib/types/tier-limits.js +27 -1
  37. package/lib/types/usage-projection.d.ts +0 -16
  38. package/lib/types/usage-projection.js +1 -20
  39. package/lib/types/wire-vocabulary.d.ts +81 -2
  40. package/lib/types/wire-vocabulary.js +89 -3
  41. package/lib/validation/index.d.ts +1 -1
  42. package/lib/validation/index.js +2 -2
  43. package/lib/validation/pipeline-schemas.d.ts +22 -0
  44. package/lib/validation/pipeline-schemas.js +19 -1
  45. package/lib/validation/plugin-spec-schema.d.ts +45 -2
  46. package/lib/validation/plugin-spec-schema.js +85 -7
  47. package/package.json +8 -1
@@ -12,11 +12,19 @@
12
12
  */
13
13
  import { z } from 'zod';
14
14
  import { IconKeySchema, PLUGIN_CATALOG_FIELD_SCHEMAS, ProjectUrlSchema, isAllowedSpdxId, } from './plugin-catalog-metadata.js';
15
- import { PLUGIN_CHANGELOG_MAX_BYTES } from '../types/plugin-catalog.js';
15
+ import { PLUGIN_CHANGELOG_MAX_BYTES, TOOLCHAIN_METADATA_PREFIX, isManagedToolchainPlugin } from '../types/plugin-catalog.js';
16
16
  // -----------------------------------------------------------------------------
17
17
  // Vocabularies
18
18
  // -----------------------------------------------------------------------------
19
- export const PLUGIN_TYPES = ['CodeBuildStep', 'ShellStep', 'ManualApprovalStep'];
19
+ /**
20
+ * `BuildImage` is the managed toolchain's build image (`pipeline-bootstrap`,
21
+ * docs/plans/bootstrap-image-versioning.md §1): a prebuilt image with no
22
+ * commands, never a pipeline step. {@link STEP_PLUGIN_TYPES} is the subset a
23
+ * step (or a generator) may use.
24
+ */
25
+ export const PLUGIN_TYPES = ['CodeBuildStep', 'ShellStep', 'ManualApprovalStep', 'BuildImage'];
26
+ /** The plugin types a pipeline step can use — every type except `BuildImage`. */
27
+ export const STEP_PLUGIN_TYPES = ['CodeBuildStep', 'ShellStep', 'ManualApprovalStep'];
20
28
  export const PLUGIN_COMPUTE_TYPES = ['SMALL', 'MEDIUM', 'LARGE', 'X2_LARGE'];
21
29
  export const PLUGIN_FAILURE_BEHAVIORS = ['fail', 'warn', 'ignore'];
22
30
  export const PLUGIN_BUILD_TYPES = ['build_image', 'prebuilt', 'metadata_only'];
@@ -40,6 +48,47 @@ export function isValidEgressHost(host) {
40
48
  return host.length <= 253 && EGRESS_HOST_PATTERN.test(host);
41
49
  }
42
50
  // -----------------------------------------------------------------------------
51
+ // Managed toolchain metadata (BuildImage specs)
52
+ // -----------------------------------------------------------------------------
53
+ /** An EXACT semver (no range): `1.2.3`, optionally `-pre` / `+build`. */
54
+ const EXACT_SEMVER_PATTERN = /^\d+\.\d+\.\d+(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$/;
55
+ const exactSemver = z.string().regex(EXACT_SEMVER_PATTERN, { message: 'must be an exact semver version (e.g. 1.2.3)' });
56
+ /**
57
+ * The tool versions a managed build image carries, written by
58
+ * `sync-image-tags.sh` from the Dockerfile `ARG`s. Every field is required and
59
+ * exact: this is what the release IS, not what it accepts.
60
+ */
61
+ export const PluginToolchainSchema = z.object({
62
+ pipelineManager: exactSemver,
63
+ awsCdk: exactSemver,
64
+ cdkAssets: exactSemver,
65
+ esbuild: exactSemver,
66
+ pnpm: exactSemver,
67
+ node: exactSemver,
68
+ }).strict();
69
+ /** The flat `metadata` entries that persist `toolchain` on a build image's row. */
70
+ export function toolchainMetadata(toolchain) {
71
+ return Object.fromEntries(Object.entries(toolchain).map(([k, v]) => [`${TOOLCHAIN_METADATA_PREFIX}${k}`, v]));
72
+ }
73
+ /**
74
+ * The `toolchain` a build image's row carries, or `null` when its `metadata`
75
+ * holds no complete, valid one (every field required and exact — the same
76
+ * schema the upload validated).
77
+ */
78
+ export function toolchainFromMetadata(metadata) {
79
+ if (!metadata || typeof metadata !== 'object')
80
+ return null;
81
+ const fields = {};
82
+ for (const [k, v] of Object.entries(metadata)) {
83
+ if (k.startsWith(TOOLCHAIN_METADATA_PREFIX))
84
+ fields[k.slice(TOOLCHAIN_METADATA_PREFIX.length)] = v;
85
+ }
86
+ const parsed = PluginToolchainSchema.safeParse(fields);
87
+ return parsed.success ? parsed.data : null;
88
+ }
89
+ /** A build-input hash: 64 lowercase hex characters (sha256), optionally `sha256:`-prefixed. */
90
+ export const PLUGIN_SOURCE_DIGEST_PATTERN = /^(sha256:)?[a-f0-9]{64}$/;
91
+ // -----------------------------------------------------------------------------
43
92
  // config.yaml
44
93
  // -----------------------------------------------------------------------------
45
94
  export const PluginConfigSchema = z.object({
@@ -128,7 +177,35 @@ export const PluginSpecSchema = z.object({
128
177
  message: 'must be a bare hostname (no scheme, port or path; one leading *. allowed)',
129
178
  })).max(EGRESS_MAX_HOSTS).optional(),
130
179
  }).strict().optional(),
131
- }).strict();
180
+ // Managed toolchain metadata — `BuildImage` specs only (see the check below).
181
+ toolchain: PluginToolchainSchema.optional(),
182
+ sourceDigest: z.string().regex(PLUGIN_SOURCE_DIGEST_PATTERN, { message: 'must be a sha256 hex digest' }).optional(),
183
+ }).strict().superRefine((spec, ctx) => {
184
+ for (const issue of buildImageSpecProblems(spec))
185
+ ctx.addIssue({ code: 'custom', path: [issue.path], message: issue.message });
186
+ });
187
+ function buildImageSpecProblems(spec) {
188
+ const out = [];
189
+ if (spec.pluginType !== 'BuildImage') {
190
+ if (spec.toolchain !== undefined)
191
+ out.push({ path: 'toolchain', message: 'is only allowed on a BuildImage plugin' });
192
+ if (spec.sourceDigest !== undefined)
193
+ out.push({ path: 'sourceDigest', message: 'is only allowed on a BuildImage plugin' });
194
+ return out;
195
+ }
196
+ if (spec.name !== undefined && !isManagedToolchainPlugin(spec.name)) {
197
+ out.push({ path: 'pluginType', message: 'BuildImage is reserved for the managed toolchain plugins' });
198
+ }
199
+ if (spec.toolchain === undefined)
200
+ out.push({ path: 'toolchain', message: 'is required on a BuildImage plugin' });
201
+ if (spec.sourceDigest === undefined)
202
+ out.push({ path: 'sourceDigest', message: 'is required on a BuildImage plugin' });
203
+ for (const field of ['commands', 'installCommands', 'metadata']) {
204
+ if (spec[field] !== undefined)
205
+ out.push({ path: field, message: 'is not allowed on a BuildImage plugin' });
206
+ }
207
+ return out;
208
+ }
132
209
  const isMapping = (raw) => typeof raw === 'object' && raw !== null && !Array.isArray(raw);
133
210
  function checkAgainst(file, raw, schema, withPath) {
134
211
  if (!isMapping(raw)) {
@@ -151,13 +228,14 @@ export function checkPluginConfig(raw) {
151
228
  }
152
229
  /**
153
230
  * The required-field contract: `name` and `version` always, `commands` for
154
- * every type except `ManualApprovalStep`. Returns the upload's message, or null.
231
+ * every type except `ManualApprovalStep` and `BuildImage` (neither runs
232
+ * commands). Returns the upload's message, or null.
155
233
  */
156
234
  export function pluginSpecRequiredFieldsProblem(spec) {
157
- const isApprovalStep = spec.pluginType === 'ManualApprovalStep';
158
- if (!spec.name || !spec.version || (!isApprovalStep && !spec.commands)) {
235
+ const runsNoCommands = spec.pluginType === 'ManualApprovalStep' || spec.pluginType === 'BuildImage';
236
+ if (!spec.name || !spec.version || (!runsNoCommands && !spec.commands)) {
159
237
  return 'Invalid spec: name, version, and commands are required';
160
238
  }
161
239
  return null;
162
240
  }
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXNwZWMtc2NoZW1hLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9wbHVnaW4tc3BlYy1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE9BQU8sRUFDTCxhQUFhLEVBQUUsNEJBQTRCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxHQUMvRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXhFLGdGQUFnRjtBQUNoRixlQUFlO0FBQ2YsZ0ZBQWdGO0FBRWhGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLENBQVUsQ0FBQztBQUMxRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBQ3RGLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQVUsQ0FBQztBQUM1RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFVLENBQUM7QUFHeEYsMERBQTBEO0FBQzFELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztBQUNsRCxpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsc0RBQXNELENBQUM7QUFFN0YsZ0ZBQWdGO0FBQ2hGLDRDQUE0QztBQUM1QyxnRkFBZ0Y7QUFFaEYsK0NBQStDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUVuQzs7OztHQUlHO0FBQ0gsTUFB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QUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgcGx1Z2luIFBBQ0tBR0Ugc2NoZW1hczogYHBsdWdpbi1zcGVjLnlhbWxgIGFuZCBgY29uZmlnLnlhbWxgLCBleGFjdGx5IGFzXG4gKiB0aGUgcGx1Z2luIHNlcnZpY2UgdmFsaWRhdGVzIGFuIHVwbG9hZC4gU2hhcmVkIGZyb20gYXBpLWNvcmUgc28gdGhlIHVwbG9hZFxuICogcGF0aCAoYXBpL3BsdWdpbikgYW5kIHRoZSBDTEkgKGBwaXBlbGluZS1tYW5hZ2VyIHBsdWdpbiB2YWxpZGF0ZWAgL1xuICogYHBsdWdpbiBwdWJsaXNoYCkgYXBwbHkgT05FIHNjaGVtYSBhbmQgY2FuJ3QgZHJpZnQuXG4gKlxuICogUHVyZTogbm8gWUFNTCBwYXJzaW5nLCBubyBmaWxlc3lzdGVtLiBDYWxsZXJzIHBhcnNlICh3aXRoIHRoZWlyIG93biBzaXplIGFuZFxuICogYWxpYXMgYm91bmRzKSBhbmQgaGFuZCB0aGUgcmVzdWx0aW5nIG9iamVjdCB0byB7QGxpbmsgY2hlY2tQbHVnaW5TcGVjfSAvXG4gKiB7QGxpbmsgY2hlY2tQbHVnaW5Db25maWd9LlxuICovXG5cbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuXG5pbXBvcnQge1xuICBJY29uS2V5U2NoZW1hLCBQTFVHSU5fQ0FUQUxPR19GSUVMRF9TQ0hFTUFTLCBQcm9qZWN0VXJsU2NoZW1hLCBpc0FsbG93ZWRTcGR4SWQsXG59IGZyb20gJy4vcGx1Z2luLWNhdGFsb2ctbWV0YWRhdGEuanMnO1xuaW1wb3J0IHsgUExVR0lOX0NIQU5HRUxPR19NQVhfQllURVMgfSBmcm9tICcuLi90eXBlcy9wbHVnaW4tY2F0YWxvZy5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWb2NhYnVsYXJpZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBQTFVHSU5fVFlQRVMgPSBbJ0NvZGVCdWlsZFN0ZXAnLCAnU2hlbGxTdGVwJywgJ01hbnVhbEFwcHJvdmFsU3RlcCddIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9DT01QVVRFX1RZUEVTID0gWydTTUFMTCcsICdNRURJVU0nLCAnTEFSR0UnLCAnWDJfTEFSR0UnXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBQTFVHSU5fRkFJTFVSRV9CRUhBVklPUlMgPSBbJ2ZhaWwnLCAnd2FybicsICdpZ25vcmUnXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBQTFVHSU5fQlVJTERfVFlQRVMgPSBbJ2J1aWxkX2ltYWdlJywgJ3ByZWJ1aWx0JywgJ21ldGFkYXRhX29ubHknXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFBsdWdpbkJ1aWxkVHlwZSA9IHR5cGVvZiBQTFVHSU5fQlVJTERfVFlQRVNbbnVtYmVyXTtcblxuLyoqIFBsdWdpbiBuYW1lOiBsb3dlcmNhc2UgbGV0dGVycywgZGlnaXRzIGFuZCBoeXBoZW5zLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9OQU1FX1BBVFRFUk4gPSAvXlthLXowLTktXSskLztcbi8qKiBQbHVnaW4gdmVyc2lvbjogc2VtdmVyLCB3aXRoIG9wdGlvbmFsIGAtcHJlcmVsZWFzZWAgYW5kIGArYnVpbGRgIG1ldGFkYXRhLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9WRVJTSU9OX1BBVFRFUk4gPSAvXlxcZCtcXC5cXGQrXFwuXFxkKygtW2EtekEtWjAtOS4tXSspPyhcXCtbYS16QS1aMC05Li1dKyk/JC87XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBuZXR3b3JrLmVncmVzcyAoc3BlYy1vbmx5IHRydXN0IG1ldGFkYXRhKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIE1heCBkZWNsYXJlZCBgbmV0d29yay5lZ3Jlc3NgIGhvc3RuYW1lcy4gKi9cbmV4cG9ydCBjb25zdCBFR1JFU1NfTUFYX0hPU1RTID0gNTA7XG5cbi8qKlxuICogQSBiYXJlIEROUyBob3N0bmFtZSwgb3B0aW9uYWxseSB3aXRoIE9ORSBsZWFkaW5nIGAqLmAgd2lsZGNhcmQgbGFiZWwuIE5vXG4gKiBzY2hlbWUsIHBvcnQsIHBhdGgsIHVzZXJpbmZvIG9yIElQIGxpdGVyYWwg4oCUIGEgZGVjbGFyZWQgZWdyZXNzIHRhcmdldCBpcyBhXG4gKiBuYW1lIHRoZSByZXZpZXdlciBjYW4gcmVhZC5cbiAqL1xuY29uc3QgRUdSRVNTX0hPU1RfUEFUVEVSTiA9IC9eKD86XFwqXFwuKT8oPzpbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT9cXC4pK1thLXpdW2EtejAtOS1dezAsNjF9W2EtejAtOV0kLztcblxuLyoqIFRydWUgd2hlbiBgaG9zdGAgaXMgYW4gYWNjZXB0YWJsZSBgbmV0d29yay5lZ3Jlc3NgIGVudHJ5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRFZ3Jlc3NIb3N0KGhvc3Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaG9zdC5sZW5ndGggPD0gMjUzICYmIEVHUkVTU19IT1NUX1BBVFRFUk4udGVzdChob3N0KTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGNvbmZpZy55YW1sXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgUGx1Z2luQ29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICBwbHVnaW5TcGVjOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvY2tlcmZpbGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgYnVpbGRUeXBlOiB6LmVudW0oUExVR0lOX0JVSUxEX1RZUEVTKS5vcHRpb25hbCgpLFxuICAvLyBEZXRlcm1pbmlzdGljIGJ1aWxkIHRhZyB3cml0dGVuIGJ5IGJ1aWxkLXBsdWdpbi1pbWFnZXMuc2hcbiAgLy8gKGBwLTxuYW1lPi08c2hhMjU2OjEyPmApLiBJbmZvcm1hdGlvbmFsIG9ubHkgb24gdGhlIHVwbG9hZCBwYXRoIOKAlFxuICAvLyB0aGUgcGxhdGZvcm0gZG9lc24ndCBhY3Qgb24gaXQsIGJ1dCBpdCBsaXZlcyBpbiB0aGUgc2FtZSBjb25maWdcbiAgLy8gZmlsZSBhcyB0aGUgcmVzdCBvZiB0aGUgYnVpbGQgbWV0YWRhdGEgc28gcmUtcnVucyBjYW4gc2hvcnQtY2lyY3VpdFxuICAvLyB1bmNoYW5nZWQgcGx1Z2lucyB3aXRob3V0IG5lZWRpbmcgYSBzZXBhcmF0ZSAuaW1hZ2UtaGFzaCBzaWRlY2FyLlxuICBpbWFnZVRhZzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSkuc3RyaWN0KClcbiAgLnJlZmluZShkID0+ICEoZC5idWlsZFR5cGUgPT09ICdwcmVidWlsdCcgJiYgZC5kb2NrZXJmaWxlKSwge1xuICAgIG1lc3NhZ2U6ICdkb2NrZXJmaWxlIGlzIG5vdCBhbGxvd2VkIHdoZW4gYnVpbGRUeXBlIGlzIHByZWJ1aWx0JyxcbiAgfSlcbiAgLnJlZmluZShkID0+ICEoZC5idWlsZFR5cGUgPT09ICdtZXRhZGF0YV9vbmx5JyAmJiBkLmRvY2tlcmZpbGUpLCB7XG4gICAgbWVzc2FnZTogJ2RvY2tlcmZpbGUgaXMgbm90IGFsbG93ZWQgd2hlbiBidWlsZFR5cGUgaXMgbWV0YWRhdGFfb25seScsXG4gIH0pO1xuZXhwb3J0IHR5cGUgUGx1Z2luQ29uZmlnSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBQbHVnaW5Db25maWdTY2hlbWE+O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gcGx1Z2luLXNwZWMueWFtbFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gbmFtZS92ZXJzaW9uL2NvbW1hbmRzIGFyZSB0aGUgcmVxdWlyZWQtZmllbGQgY29udHJhY3QsIGJ1dCB0aGV5J3JlIGNoZWNrZWQgYnlcbi8vIHtAbGluayBwbHVnaW5TcGVjUmVxdWlyZWRGaWVsZHNQcm9ibGVtfSAodGhlIHN0YWJsZSBcIm5hbWUsIHZlcnNpb24sIGFuZFxuLy8gY29tbWFuZHMgYXJlIHJlcXVpcmVkXCIgbWVzc2FnZSBhbmQgdGhlIE1hbnVhbEFwcHJvdmFsU3RlcCBjYXJ2ZS1vdXQpLiBIZXJlXG4vLyB0aGV5J3JlIG9wdGlvbmFsIHN0cmluZ3M7IHRoZSBzY2hlbWEncyBqb2IgaXMgdG8gcmVqZWN0IG1hbGZvcm1lZCAqdHlwZXMqIG9uXG4vLyB0aGUgZmllbGRzIHRoYXQgZmxvdyBkb3duc3RyZWFtIHVuY2hlY2tlZC5cbmV4cG9ydCBjb25zdCBQbHVnaW5TcGVjU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGtleXdvcmRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGNhdGVnb3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHZlcnNpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcGx1Z2luVHlwZTogei5lbnVtKFBMVUdJTl9UWVBFUykub3B0aW9uYWwoKSxcbiAgY29tcHV0ZVR5cGU6IHouZW51bShQTFVHSU5fQ09NUFVURV9UWVBFUykub3B0aW9uYWwoKSxcbiAgLy8gPj0gMCBtaW51dGVzOiBNYW51YWxBcHByb3ZhbFN0ZXAgc3BlY3MgbGVnaXRpbWF0ZWx5IGRlY2xhcmUgYHRpbWVvdXQ6IDBgLlxuICB0aW1lb3V0OiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCkub3B0aW9uYWwoKSxcbiAgZmFpbHVyZUJlaGF2aW9yOiB6LmVudW0oUExVR0lOX0ZBSUxVUkVfQkVIQVZJT1JTKS5vcHRpb25hbCgpLFxuICBzZWNyZXRzOiB6LmFycmF5KHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICByZXF1aXJlZDogei5ib29sZWFuKCksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSkpLm9wdGlvbmFsKCksXG4gIC8vIEFjY2VwdCBhbiBleHBsaWNpdCBgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogbnVsbGAgKGEgTWFudWFsQXBwcm92YWxTdGVwIC9cbiAgLy8gb3V0cHV0LWxlc3Mgc3RlcCBsZWdpdGltYXRlbHkgZGVjbGFyZXMgaXQpIGFuZCBub3JtYWxpemUgaXQgdG8gYHVuZGVmaW5lZGAuXG4gIC8vIFdpdGhvdXQgYC5udWxsaXNoKClgIGEgcHJlc2VudCBZQU1MIGBudWxsYCBmYWlscyB0aGUgYmFyZSBzdHJpbmcgY2hlY2sgYW5kXG4gIC8vIDQwMHMgdGhlIHdob2xlIHVwbG9hZC5cbiAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogei5zdHJpbmcoKS5udWxsaXNoKCkudHJhbnNmb3JtKCh2KSA9PiB2ID8/IHVuZGVmaW5lZCksXG4gIG1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVuaW9uKFt6LnN0cmluZygpLCB6Lm51bWJlcigpLCB6LmJvb2xlYW4oKV0pKS5vcHRpb25hbCgpLFxuICBkb2NrZXJmaWxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGluc3RhbGxDb21tYW5kczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBjb21tYW5kczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBlbnY6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGJ1aWxkQXJnczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgcmVxdWlyZWRNZXRhZGF0YTogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICByZXF1aXJlZFZhcnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgLy8gS2VwdCBhcyBmcmVlLXN0cmluZyBtYXBzIHJhdGhlciB0aGFuIGEgdmFsdWUgZW51bTogc2hpcHBlZCBzcGVjcyB1c2UgYm90aFxuICAvLyBgYm9vbGAgYW5kIGBib29sZWFuYCwgYW5kIHRoZSBjb2VyY2lvbi12cy1kZWNsYXJlZC10eXBlIGNvbnNpc3RlbmN5IGlzXG4gIC8vIGVuZm9yY2VkIHNlcGFyYXRlbHkgYnkgdGhlIHRlbXBsYXRlIGNvbnRyYWN0IGNoZWNrLiBUaGUgc2NoZW1hIG9ubHlcbiAgLy8gZ3VhcmFudGVlcyB0aGV5J3JlIHN0cmluZy12YWx1ZWQgcmVjb3JkcyBoZXJlLlxuICBtZXRhZGF0YVR5cGVzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICB2YXJzVHlwZXM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIC8vIEEgY29tbWFuZCB0aGUgYnVpbGQgdG9vbGluZyBydW5zIGFnYWluc3QgdGhlIGJ1aWx0IGltYWdlXG4gIC8vIChidWlsZC1wbHVnaW4taW1hZ2VzLnNoLCB0ZXN0LXBsdWdpbnMuc2ggLS1idWlsZCwgYHBsdWdpbiB0ZXN0YCkuXG4gIHNtb2tlVGVzdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvLyBEb2N1bWVudGF0aW9uICsgdHJ1c3QgbWV0YWRhdGEuIFRoZSBSRUFETUUgaXMgTk9UIGEgc3BlYyBmaWVsZCDigJQgaXRcbiAgLy8gaXMgUkVBRE1FLm1kIGF0IHRoZSB6aXAgcm9vdC5cbiAgbGljZW5zZTogei5zdHJpbmcoKS5yZWZpbmUoaXNBbGxvd2VkU3BkeElkLCB7XG4gICAgbWVzc2FnZTogJ211c3QgYmUgYSBzdXBwb3J0ZWQgU1BEWCBsaWNlbnNlIGlkZW50aWZpZXIgKGUuZy4gQXBhY2hlLTIuMCwgTUlUKScsXG4gIH0pLm9wdGlvbmFsKCksXG4gIGNoYW5nZWxvZzogei5zdHJpbmcoKS5yZWZpbmUoKHYpID0+IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh2KS5sZW5ndGggPD0gUExVR0lOX0NIQU5HRUxPR19NQVhfQllURVMsIHtcbiAgICBtZXNzYWdlOiBgbXVzdCBiZSBhdCBtb3N0ICR7UExVR0lOX0NIQU5HRUxPR19NQVhfQllURVN9IGJ5dGVzYCxcbiAgfSkub3B0aW9uYWwoKSxcbiAgaG9tZXBhZ2VVcmw6IFByb2plY3RVcmxTY2hlbWEub3B0aW9uYWwoKSxcbiAgc291cmNlVXJsOiBQcm9qZWN0VXJsU2NoZW1hLm9wdGlvbmFsKCksXG4gIC8vIENhdGFsb2cgbWV0YWRhdGE6IHRoZSBjYXJkIG9uZS1saW5lciBhbmQgdGhlIGRvY3MgbGluay4gU2FtZVxuICAvLyB2YWxpZGF0b3JzIGFzIGEgdmFsdWUgdHlwZWQgaW50byB0aGUgdXBsb2FkIGZvcm0uXG4gIHN1bW1hcnk6IFBMVUdJTl9DQVRBTE9HX0ZJRUxEX1NDSEVNQVMuc3VtbWFyeS5vcHRpb25hbCgpLFxuICBkb2N1bWVudGF0aW9uVXJsOiBQcm9qZWN0VXJsU2NoZW1hLm9wdGlvbmFsKCksXG4gIGljb246IHoudW5pb24oW1xuICAgIEljb25LZXlTY2hlbWEsXG4gICAgei5vYmplY3QoeyBrZXk6IEljb25LZXlTY2hlbWEsIGJhZGdlOiBJY29uS2V5U2NoZW1hLm9wdGlvbmFsKCkgfSkuc3RyaWN0KCksXG4gIF0pLm9wdGlvbmFsKCksXG4gIG5ldHdvcms6IHoub2JqZWN0KHtcbiAgICBlZ3Jlc3M6IHouYXJyYXkoei5zdHJpbmcoKS5yZWZpbmUoaXNWYWxpZEVncmVzc0hvc3QsIHtcbiAgICAgIG1lc3NhZ2U6ICdtdXN0IGJlIGEgYmFyZSBob3N0bmFtZSAobm8gc2NoZW1lLCBwb3J0IG9yIHBhdGg7IG9uZSBsZWFkaW5nICouIGFsbG93ZWQpJyxcbiAgICB9KSkubWF4KEVHUkVTU19NQVhfSE9TVFMpLm9wdGlvbmFsKCksXG4gIH0pLnN0cmljdCgpLm9wdGlvbmFsKCksXG59KS5zdHJpY3QoKTtcbmV4cG9ydCB0eXBlIFBsdWdpblNwZWNJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFBsdWdpblNwZWNTY2hlbWE+O1xuXG4vKipcbiAqIFJlc3VsdCBvZiBjaGVja2luZyBhIHBhcnNlZCBZQU1MIGRvY3VtZW50IGFnYWluc3QgYSBwYWNrYWdlIHNjaGVtYTpcbiAqIGBpc3N1ZXNgIGFyZSB0aGUgaW5kaXZpZHVhbCBwcm9ibGVtcywgYG1lc3NhZ2VgIHRoZSBvbmUtbGluZSBmb3JtIHRoZSB1cGxvYWRcbiAqIEFQSSByZXBvcnRzIChgcGx1Z2luLXNwZWMueWFtbDogPHBhdGg+OiA8cHJvYmxlbT47IOKApmApLlxuICovXG5leHBvcnQgdHlwZSBQYWNrYWdlQ2hlY2s8VD4gPSB7IG9rOiB0cnVlOyB2YWx1ZTogVCB9IHwgeyBvazogZmFsc2U7IGlzc3Vlczogc3RyaW5nW107IG1lc3NhZ2U6IHN0cmluZyB9O1xuXG5jb25zdCBpc01hcHBpbmcgPSAocmF3OiB1bmtub3duKTogcmF3IGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+XG4gIHR5cGVvZiByYXcgPT09ICdvYmplY3QnICYmIHJhdyAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShyYXcpO1xuXG5mdW5jdGlvbiBjaGVja0FnYWluc3Q8VD4oZmlsZTogc3RyaW5nLCByYXc6IHVua25vd24sIHNjaGVtYTogei5ab2RUeXBlPFQ+LCB3aXRoUGF0aDogYm9vbGVhbik6IFBhY2thZ2VDaGVjazxUPiB7XG4gIGlmICghaXNNYXBwaW5nKHJhdykpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYCR7ZmlsZX0gbXVzdCBiZSBhIFlBTUwgbWFwcGluZ2A7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBpc3N1ZXM6IFttZXNzYWdlXSwgbWVzc2FnZSB9O1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHNjaGVtYS5zYWZlUGFyc2UocmF3KTtcbiAgaWYgKHJlc3VsdC5zdWNjZXNzKSByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IHJlc3VsdC5kYXRhIH07XG4gIGNvbnN0IGlzc3VlcyA9IHJlc3VsdC5lcnJvci5pc3N1ZXMubWFwKGkgPT4gKHdpdGhQYXRoID8gYCR7aS5wYXRoLmpvaW4oJy4nKSB8fCAnKHJvb3QpJ306ICR7aS5tZXNzYWdlfWAgOiBpLm1lc3NhZ2UpKTtcbiAgcmV0dXJuIHsgb2s6IGZhbHNlLCBpc3N1ZXMsIG1lc3NhZ2U6IGAke2ZpbGV9OiAke2lzc3Vlcy5qb2luKCc7ICcpfWAgfTtcbn1cblxuLyoqIENoZWNrIGEgcGFyc2VkIGBwbHVnaW4tc3BlYy55YW1sYCBkb2N1bWVudCBhZ2FpbnN0IHtAbGluayBQbHVnaW5TcGVjU2NoZW1hfS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1BsdWdpblNwZWMocmF3OiB1bmtub3duKTogUGFja2FnZUNoZWNrPFBsdWdpblNwZWNJbnB1dD4ge1xuICByZXR1cm4gY2hlY2tBZ2FpbnN0KCdwbHVnaW4tc3BlYy55YW1sJywgcmF3LCBQbHVnaW5TcGVjU2NoZW1hLCB0cnVlKTtcbn1cblxuLyoqIENoZWNrIGEgcGFyc2VkIGBjb25maWcueWFtbGAgZG9jdW1lbnQgYWdhaW5zdCB7QGxpbmsgUGx1Z2luQ29uZmlnU2NoZW1hfS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1BsdWdpbkNvbmZpZyhyYXc6IHVua25vd24pOiBQYWNrYWdlQ2hlY2s8UGx1Z2luQ29uZmlnSW5wdXQ+IHtcbiAgcmV0dXJuIGNoZWNrQWdhaW5zdCgnY29uZmlnLnlhbWwnLCByYXcsIFBsdWdpbkNvbmZpZ1NjaGVtYSwgZmFsc2UpO1xufVxuXG4vKipcbiAqIFRoZSByZXF1aXJlZC1maWVsZCBjb250cmFjdDogYG5hbWVgIGFuZCBgdmVyc2lvbmAgYWx3YXlzLCBgY29tbWFuZHNgIGZvclxuICogZXZlcnkgdHlwZSBleGNlcHQgYE1hbnVhbEFwcHJvdmFsU3RlcGAuIFJldHVybnMgdGhlIHVwbG9hZCdzIG1lc3NhZ2UsIG9yIG51bGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbHVnaW5TcGVjUmVxdWlyZWRGaWVsZHNQcm9ibGVtKHNwZWM6IFBpY2s8UGx1Z2luU3BlY0lucHV0LCAnbmFtZScgfCAndmVyc2lvbicgfCAnY29tbWFuZHMnIHwgJ3BsdWdpblR5cGUnPik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBpc0FwcHJvdmFsU3RlcCA9IHNwZWMucGx1Z2luVHlwZSA9PT0gJ01hbnVhbEFwcHJvdmFsU3RlcCc7XG4gIGlmICghc3BlYy5uYW1lIHx8ICFzcGVjLnZlcnNpb24gfHwgKCFpc0FwcHJvdmFsU3RlcCAmJiAhc3BlYy5jb21tYW5kcykpIHtcbiAgICByZXR1cm4gJ0ludmFsaWQgc3BlYzogbmFtZSwgdmVyc2lvbiwgYW5kIGNvbW1hbmRzIGFyZSByZXF1aXJlZCc7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iXX0=
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXNwZWMtc2NoZW1hLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9wbHVnaW4tc3BlYy1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE9BQU8sRUFDTCxhQUFhLEVBQUUsNEJBQTRCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxHQUMvRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSx5QkFBeUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTdILGdGQUFnRjtBQUNoRixlQUFlO0FBQ2YsZ0ZBQWdGO0FBRWhGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLENBQVUsQ0FBQztBQUN4RyxpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixDQUFVLENBQUM7QUFDL0YsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQVUsQ0FBQztBQUN0RixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFVLENBQUM7QUFDNUUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBVSxDQUFDO0FBR3hGLDBEQUEwRDtBQUMxRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUM7QUFDbEQsaUZBQWlGO0FBQ2pGLE1BQU0sQ0FBQyxNQUFNLHNCQUFz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LENBQUMsQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN2RSxPQUFPLHdEQUF3RCxDQUFDO0lBQ2xFLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgcGx1Z2luIFBBQ0tBR0Ugc2NoZW1hczogYHBsdWdpbi1zcGVjLnlhbWxgIGFuZCBgY29uZmlnLnlhbWxgLCBleGFjdGx5IGFzXG4gKiB0aGUgcGx1Z2luIHNlcnZpY2UgdmFsaWRhdGVzIGFuIHVwbG9hZC4gU2hhcmVkIGZyb20gYXBpLWNvcmUgc28gdGhlIHVwbG9hZFxuICogcGF0aCAoYXBpL3BsdWdpbikgYW5kIHRoZSBDTEkgKGBwaXBlbGluZS1tYW5hZ2VyIHBsdWdpbiB2YWxpZGF0ZWAgL1xuICogYHBsdWdpbiBwdWJsaXNoYCkgYXBwbHkgT05FIHNjaGVtYSBhbmQgY2FuJ3QgZHJpZnQuXG4gKlxuICogUHVyZTogbm8gWUFNTCBwYXJzaW5nLCBubyBmaWxlc3lzdGVtLiBDYWxsZXJzIHBhcnNlICh3aXRoIHRoZWlyIG93biBzaXplIGFuZFxuICogYWxpYXMgYm91bmRzKSBhbmQgaGFuZCB0aGUgcmVzdWx0aW5nIG9iamVjdCB0byB7QGxpbmsgY2hlY2tQbHVnaW5TcGVjfSAvXG4gKiB7QGxpbmsgY2hlY2tQbHVnaW5Db25maWd9LlxuICovXG5cbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuXG5pbXBvcnQge1xuICBJY29uS2V5U2NoZW1hLCBQTFVHSU5fQ0FUQUxPR19GSUVMRF9TQ0hFTUFTLCBQcm9qZWN0VXJsU2NoZW1hLCBpc0FsbG93ZWRTcGR4SWQsXG59IGZyb20gJy4vcGx1Z2luLWNhdGFsb2ctbWV0YWRhdGEuanMnO1xuaW1wb3J0IHsgUExVR0lOX0NIQU5HRUxPR19NQVhfQllURVMsIFRPT0xDSEFJTl9NRVRBREFUQV9QUkVGSVgsIGlzTWFuYWdlZFRvb2xjaGFpblBsdWdpbiB9IGZyb20gJy4uL3R5cGVzL3BsdWdpbi1jYXRhbG9nLmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFZvY2FidWxhcmllc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBgQnVpbGRJbWFnZWAgaXMgdGhlIG1hbmFnZWQgdG9vbGNoYWluJ3MgYnVpbGQgaW1hZ2UgKGBwaXBlbGluZS1ib290c3RyYXBgLFxuICogZG9jcy9wbGFucy9ib290c3RyYXAtaW1hZ2UtdmVyc2lvbmluZy5tZCDCpzEpOiBhIHByZWJ1aWx0IGltYWdlIHdpdGggbm9cbiAqIGNvbW1hbmRzLCBuZXZlciBhIHBpcGVsaW5lIHN0ZXAuIHtAbGluayBTVEVQX1BMVUdJTl9UWVBFU30gaXMgdGhlIHN1YnNldCBhXG4gKiBzdGVwIChvciBhIGdlbmVyYXRvcikgbWF5IHVzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9UWVBFUyA9IFsnQ29kZUJ1aWxkU3RlcCcsICdTaGVsbFN0ZXAnLCAnTWFudWFsQXBwcm92YWxTdGVwJywgJ0J1aWxkSW1hZ2UnXSBhcyBjb25zdDtcbi8qKiBUaGUgcGx1Z2luIHR5cGVzIGEgcGlwZWxpbmUgc3RlcCBjYW4gdXNlIOKAlCBldmVyeSB0eXBlIGV4Y2VwdCBgQnVpbGRJbWFnZWAuICovXG5leHBvcnQgY29uc3QgU1RFUF9QTFVHSU5fVFlQRVMgPSBbJ0NvZGVCdWlsZFN0ZXAnLCAnU2hlbGxTdGVwJywgJ01hbnVhbEFwcHJvdmFsU3RlcCddIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9DT01QVVRFX1RZUEVTID0gWydTTUFMTCcsICdNRURJVU0nLCAnTEFSR0UnLCAnWDJfTEFSR0UnXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBQTFVHSU5fRkFJTFVSRV9CRUhBVklPUlMgPSBbJ2ZhaWwnLCAnd2FybicsICdpZ25vcmUnXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBQTFVHSU5fQlVJTERfVFlQRVMgPSBbJ2J1aWxkX2ltYWdlJywgJ3ByZWJ1aWx0JywgJ21ldGFkYXRhX29ubHknXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFBsdWdpbkJ1aWxkVHlwZSA9IHR5cGVvZiBQTFVHSU5fQlVJTERfVFlQRVNbbnVtYmVyXTtcblxuLyoqIFBsdWdpbiBuYW1lOiBsb3dlcmNhc2UgbGV0dGVycywgZGlnaXRzIGFuZCBoeXBoZW5zLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9OQU1FX1BBVFRFUk4gPSAvXlthLXowLTktXSskLztcbi8qKiBQbHVnaW4gdmVyc2lvbjogc2VtdmVyLCB3aXRoIG9wdGlvbmFsIGAtcHJlcmVsZWFzZWAgYW5kIGArYnVpbGRgIG1ldGFkYXRhLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9WRVJTSU9OX1BBVFRFUk4gPSAvXlxcZCtcXC5cXGQrXFwuXFxkKygtW2EtekEtWjAtOS4tXSspPyhcXCtbYS16QS1aMC05Li1dKyk/JC87XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBuZXR3b3JrLmVncmVzcyAoc3BlYy1vbmx5IHRydXN0IG1ldGFkYXRhKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIE1heCBkZWNsYXJlZCBgbmV0d29yay5lZ3Jlc3NgIGhvc3RuYW1lcy4gKi9cbmV4cG9ydCBjb25zdCBFR1JFU1NfTUFYX0hPU1RTID0gNTA7XG5cbi8qKlxuICogQSBiYXJlIEROUyBob3N0bmFtZSwgb3B0aW9uYWxseSB3aXRoIE9ORSBsZWFkaW5nIGAqLmAgd2lsZGNhcmQgbGFiZWwuIE5vXG4gKiBzY2hlbWUsIHBvcnQsIHBhdGgsIHVzZXJpbmZvIG9yIElQIGxpdGVyYWwg4oCUIGEgZGVjbGFyZWQgZWdyZXNzIHRhcmdldCBpcyBhXG4gKiBuYW1lIHRoZSByZXZpZXdlciBjYW4gcmVhZC5cbiAqL1xuY29uc3QgRUdSRVNTX0hPU1RfUEFUVEVSTiA9IC9eKD86XFwqXFwuKT8oPzpbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT9cXC4pK1thLXpdW2EtejAtOS1dezAsNjF9W2EtejAtOV0kLztcblxuLyoqIFRydWUgd2hlbiBgaG9zdGAgaXMgYW4gYWNjZXB0YWJsZSBgbmV0d29yay5lZ3Jlc3NgIGVudHJ5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRFZ3Jlc3NIb3N0KGhvc3Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaG9zdC5sZW5ndGggPD0gMjUzICYmIEVHUkVTU19IT1NUX1BBVFRFUk4udGVzdChob3N0KTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1hbmFnZWQgdG9vbGNoYWluIG1ldGFkYXRhIChCdWlsZEltYWdlIHNwZWNzKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEFuIEVYQUNUIHNlbXZlciAobm8gcmFuZ2UpOiBgMS4yLjNgLCBvcHRpb25hbGx5IGAtcHJlYCAvIGArYnVpbGRgLiAqL1xuY29uc3QgRVhBQ1RfU0VNVkVSX1BBVFRFUk4gPSAvXlxcZCtcXC5cXGQrXFwuXFxkKygtWzAtOUEtWmEtei4tXSspPyhcXCtbMC05QS1aYS16Li1dKyk/JC87XG5jb25zdCBleGFjdFNlbXZlciA9IHouc3RyaW5nKCkucmVnZXgoRVhBQ1RfU0VNVkVSX1BBVFRFUk4sIHsgbWVzc2FnZTogJ211c3QgYmUgYW4gZXhhY3Qgc2VtdmVyIHZlcnNpb24gKGUuZy4gMS4yLjMpJyB9KTtcblxuLyoqXG4gKiBUaGUgdG9vbCB2ZXJzaW9ucyBhIG1hbmFnZWQgYnVpbGQgaW1hZ2UgY2Fycmllcywgd3JpdHRlbiBieVxuICogYHN5bmMtaW1hZ2UtdGFncy5zaGAgZnJvbSB0aGUgRG9ja2VyZmlsZSBgQVJHYHMuIEV2ZXJ5IGZpZWxkIGlzIHJlcXVpcmVkIGFuZFxuICogZXhhY3Q6IHRoaXMgaXMgd2hhdCB0aGUgcmVsZWFzZSBJUywgbm90IHdoYXQgaXQgYWNjZXB0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IFBsdWdpblRvb2xjaGFpblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgcGlwZWxpbmVNYW5hZ2VyOiBleGFjdFNlbXZlcixcbiAgYXdzQ2RrOiBleGFjdFNlbXZlcixcbiAgY2RrQXNzZXRzOiBleGFjdFNlbXZlcixcbiAgZXNidWlsZDogZXhhY3RTZW12ZXIsXG4gIHBucG06IGV4YWN0U2VtdmVyLFxuICBub2RlOiBleGFjdFNlbXZlcixcbn0pLnN0cmljdCgpO1xuZXhwb3J0IHR5cGUgUGx1Z2luVG9vbGNoYWluID0gei5pbmZlcjx0eXBlb2YgUGx1Z2luVG9vbGNoYWluU2NoZW1hPjtcblxuLyoqIFRoZSBmbGF0IGBtZXRhZGF0YWAgZW50cmllcyB0aGF0IHBlcnNpc3QgYHRvb2xjaGFpbmAgb24gYSBidWlsZCBpbWFnZSdzIHJvdy4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b29sY2hhaW5NZXRhZGF0YSh0b29sY2hhaW46IFBsdWdpblRvb2xjaGFpbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHRvb2xjaGFpbikubWFwKChbaywgdl0pID0+IFtgJHtUT09MQ0hBSU5fTUVUQURBVEFfUFJFRklYfSR7a31gLCB2XSkpO1xufVxuXG4vKipcbiAqIFRoZSBgdG9vbGNoYWluYCBhIGJ1aWxkIGltYWdlJ3Mgcm93IGNhcnJpZXMsIG9yIGBudWxsYCB3aGVuIGl0cyBgbWV0YWRhdGFgXG4gKiBob2xkcyBubyBjb21wbGV0ZSwgdmFsaWQgb25lIChldmVyeSBmaWVsZCByZXF1aXJlZCBhbmQgZXhhY3Qg4oCUIHRoZSBzYW1lXG4gKiBzY2hlbWEgdGhlIHVwbG9hZCB2YWxpZGF0ZWQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9vbGNoYWluRnJvbU1ldGFkYXRhKG1ldGFkYXRhOiB1bmtub3duKTogUGx1Z2luVG9vbGNoYWluIHwgbnVsbCB7XG4gIGlmICghbWV0YWRhdGEgfHwgdHlwZW9mIG1ldGFkYXRhICE9PSAnb2JqZWN0JykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGZpZWxkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgaWYgKGsuc3RhcnRzV2l0aChUT09MQ0hBSU5fTUVUQURBVEFfUFJFRklYKSkgZmllbGRzW2suc2xpY2UoVE9PTENIQUlOX01FVEFEQVRBX1BSRUZJWC5sZW5ndGgpXSA9IHY7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gUGx1Z2luVG9vbGNoYWluU2NoZW1hLnNhZmVQYXJzZShmaWVsZHMpO1xuICByZXR1cm4gcGFyc2VkLnN1Y2Nlc3MgPyBwYXJzZWQuZGF0YSA6IG51bGw7XG59XG5cbi8qKiBBIGJ1aWxkLWlucHV0IGhhc2g6IDY0IGxvd2VyY2FzZSBoZXggY2hhcmFjdGVycyAoc2hhMjU2KSwgb3B0aW9uYWxseSBgc2hhMjU2OmAtcHJlZml4ZWQuICovXG5leHBvcnQgY29uc3QgUExVR0lOX1NPVVJDRV9ESUdFU1RfUEFUVEVSTiA9IC9eKHNoYTI1NjopP1thLWYwLTldezY0fSQvO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gY29uZmlnLnlhbWxcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBQbHVnaW5Db25maWdTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHBsdWdpblNwZWM6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9ja2VyZmlsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBidWlsZFR5cGU6IHouZW51bShQTFVHSU5fQlVJTERfVFlQRVMpLm9wdGlvbmFsKCksXG4gIC8vIERldGVybWluaXN0aWMgYnVpbGQgdGFnIHdyaXR0ZW4gYnkgYnVpbGQtcGx1Z2luLWltYWdlcy5zaFxuICAvLyAoYHAtPG5hbWU+LTxzaGEyNTY6MTI+YCkuIEluZm9ybWF0aW9uYWwgb25seSBvbiB0aGUgdXBsb2FkIHBhdGgg4oCUXG4gIC8vIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IGFjdCBvbiBpdCwgYnV0IGl0IGxpdmVzIGluIHRoZSBzYW1lIGNvbmZpZ1xuICAvLyBmaWxlIGFzIHRoZSByZXN0IG9mIHRoZSBidWlsZCBtZXRhZGF0YSBzbyByZS1ydW5zIGNhbiBzaG9ydC1jaXJjdWl0XG4gIC8vIHVuY2hhbmdlZCBwbHVnaW5zIHdpdGhvdXQgbmVlZGluZyBhIHNlcGFyYXRlIC5pbWFnZS1oYXNoIHNpZGVjYXIuXG4gIGltYWdlVGFnOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KS5zdHJpY3QoKVxuICAucmVmaW5lKGQgPT4gIShkLmJ1aWxkVHlwZSA9PT0gJ3ByZWJ1aWx0JyAmJiBkLmRvY2tlcmZpbGUpLCB7XG4gICAgbWVzc2FnZTogJ2RvY2tlcmZpbGUgaXMgbm90IGFsbG93ZWQgd2hlbiBidWlsZFR5cGUgaXMgcHJlYnVpbHQnLFxuICB9KVxuICAucmVmaW5lKGQgPT4gIShkLmJ1aWxkVHlwZSA9PT0gJ21ldGFkYXRhX29ubHknICYmIGQuZG9ja2VyZmlsZSksIHtcbiAgICBtZXNzYWdlOiAnZG9ja2VyZmlsZSBpcyBub3QgYWxsb3dlZCB3aGVuIGJ1aWxkVHlwZSBpcyBtZXRhZGF0YV9vbmx5JyxcbiAgfSk7XG5leHBvcnQgdHlwZSBQbHVnaW5Db25maWdJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFBsdWdpbkNvbmZpZ1NjaGVtYT47XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBwbHVnaW4tc3BlYy55YW1sXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBuYW1lL3ZlcnNpb24vY29tbWFuZHMgYXJlIHRoZSByZXF1aXJlZC1maWVsZCBjb250cmFjdCwgYnV0IHRoZXkncmUgY2hlY2tlZCBieVxuLy8ge0BsaW5rIHBsdWdpblNwZWNSZXF1aXJlZEZpZWxkc1Byb2JsZW19ICh0aGUgc3RhYmxlIFwibmFtZSwgdmVyc2lvbiwgYW5kXG4vLyBjb21tYW5kcyBhcmUgcmVxdWlyZWRcIiBtZXNzYWdlIGFuZCB0aGUgTWFudWFsQXBwcm92YWxTdGVwIGNhcnZlLW91dCkuIEhlcmVcbi8vIHRoZXkncmUgb3B0aW9uYWwgc3RyaW5nczsgdGhlIHNjaGVtYSdzIGpvYiBpcyB0byByZWplY3QgbWFsZm9ybWVkICp0eXBlcyogb25cbi8vIHRoZSBmaWVsZHMgdGhhdCBmbG93IGRvd25zdHJlYW0gdW5jaGVja2VkLlxuZXhwb3J0IGNvbnN0IFBsdWdpblNwZWNTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAga2V5d29yZHM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgY2F0ZWdvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdmVyc2lvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwbHVnaW5UeXBlOiB6LmVudW0oUExVR0lOX1RZUEVTKS5vcHRpb25hbCgpLFxuICBjb21wdXRlVHlwZTogei5lbnVtKFBMVUdJTl9DT01QVVRFX1RZUEVTKS5vcHRpb25hbCgpLFxuICAvLyA+PSAwIG1pbnV0ZXM6IE1hbnVhbEFwcHJvdmFsU3RlcCBzcGVjcyBsZWdpdGltYXRlbHkgZGVjbGFyZSBgdGltZW91dDogMGAuXG4gIHRpbWVvdXQ6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKS5vcHRpb25hbCgpLFxuICBmYWlsdXJlQmVoYXZpb3I6IHouZW51bShQTFVHSU5fRkFJTFVSRV9CRUhBVklPUlMpLm9wdGlvbmFsKCksXG4gIHNlY3JldHM6IHouYXJyYXkoei5vYmplY3Qoe1xuICAgIG5hbWU6IHouc3RyaW5nKCkubWluKDEpLFxuICAgIHJlcXVpcmVkOiB6LmJvb2xlYW4oKSxcbiAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KSkub3B0aW9uYWwoKSxcbiAgLy8gQWNjZXB0IGFuIGV4cGxpY2l0IGBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiBudWxsYCAoYSBNYW51YWxBcHByb3ZhbFN0ZXAgL1xuICAvLyBvdXRwdXQtbGVzcyBzdGVwIGxlZ2l0aW1hdGVseSBkZWNsYXJlcyBpdCkgYW5kIG5vcm1hbGl6ZSBpdCB0byBgdW5kZWZpbmVkYC5cbiAgLy8gV2l0aG91dCBgLm51bGxpc2goKWAgYSBwcmVzZW50IFlBTUwgYG51bGxgIGZhaWxzIHRoZSBiYXJlIHN0cmluZyBjaGVjayBhbmRcbiAgLy8gNDAwcyB0aGUgd2hvbGUgdXBsb2FkLlxuICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiB6LnN0cmluZygpLm51bGxpc2goKS50cmFuc2Zvcm0oKHYpID0+IHYgPz8gdW5kZWZpbmVkKSxcbiAgbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5pb24oW3ouc3RyaW5nKCksIHoubnVtYmVyKCksIHouYm9vbGVhbigpXSkpLm9wdGlvbmFsKCksXG4gIGRvY2tlcmZpbGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgaW5zdGFsbENvbW1hbmRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGNvbW1hbmRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGVudjogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgYnVpbGRBcmdzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICByZXF1aXJlZE1ldGFkYXRhOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIHJlcXVpcmVkVmFyczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAvLyBLZXB0IGFzIGZyZWUtc3RyaW5nIG1hcHMgcmF0aGVyIHRoYW4gYSB2YWx1ZSBlbnVtOiBzaGlwcGVkIHNwZWNzIHVzZSBib3RoXG4gIC8vIGBib29sYCBhbmQgYGJvb2xlYW5gLCBhbmQgdGhlIGNvZXJjaW9uLXZzLWRlY2xhcmVkLXR5cGUgY29uc2lzdGVuY3kgaXNcbiAgLy8gZW5mb3JjZWQgc2VwYXJhdGVseSBieSB0aGUgdGVtcGxhdGUgY29udHJhY3QgY2hlY2suIFRoZSBzY2hlbWEgb25seVxuICAvLyBndWFyYW50ZWVzIHRoZXkncmUgc3RyaW5nLXZhbHVlZCByZWNvcmRzIGhlcmUuXG4gIG1ldGFkYXRhVHlwZXM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIHZhcnNUeXBlczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgLy8gQSBjb21tYW5kIHRoZSBidWlsZCB0b29saW5nIHJ1bnMgYWdhaW5zdCB0aGUgYnVpbHQgaW1hZ2VcbiAgLy8gKGJ1aWxkLXBsdWdpbi1pbWFnZXMuc2gsIHRlc3QtcGx1Z2lucy5zaCAtLWJ1aWxkLCBgcGx1Z2luIHRlc3RgKS5cbiAgc21va2VUZXN0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8vIERvY3VtZW50YXRpb24gKyB0cnVzdCBtZXRhZGF0YS4gVGhlIFJFQURNRSBpcyBOT1QgYSBzcGVjIGZpZWxkIOKAlCBpdFxuICAvLyBpcyBSRUFETUUubWQgYXQgdGhlIHppcCByb290LlxuICBsaWNlbnNlOiB6LnN0cmluZygpLnJlZmluZShpc0FsbG93ZWRTcGR4SWQsIHtcbiAgICBtZXNzYWdlOiAnbXVzdCBiZSBhIHN1cHBvcnRlZCBTUERYIGxpY2Vuc2UgaWRlbnRpZmllciAoZS5nLiBBcGFjaGUtMi4wLCBNSVQpJyxcbiAgfSkub3B0aW9uYWwoKSxcbiAgY2hhbmdlbG9nOiB6LnN0cmluZygpLnJlZmluZSgodikgPT4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHYpLmxlbmd0aCA8PSBQTFVHSU5fQ0hBTkdFTE9HX01BWF9CWVRFUywge1xuICAgIG1lc3NhZ2U6IGBtdXN0IGJlIGF0IG1vc3QgJHtQTFVHSU5fQ0hBTkdFTE9HX01BWF9CWVRFU30gYnl0ZXNgLFxuICB9KS5vcHRpb25hbCgpLFxuICBob21lcGFnZVVybDogUHJvamVjdFVybFNjaGVtYS5vcHRpb25hbCgpLFxuICBzb3VyY2VVcmw6IFByb2plY3RVcmxTY2hlbWEub3B0aW9uYWwoKSxcbiAgLy8gQ2F0YWxvZyBtZXRhZGF0YTogdGhlIGNhcmQgb25lLWxpbmVyIGFuZCB0aGUgZG9jcyBsaW5rLiBTYW1lXG4gIC8vIHZhbGlkYXRvcnMgYXMgYSB2YWx1ZSB0eXBlZCBpbnRvIHRoZSB1cGxvYWQgZm9ybS5cbiAgc3VtbWFyeTogUExVR0lOX0NBVEFMT0dfRklFTERfU0NIRU1BUy5zdW1tYXJ5Lm9wdGlvbmFsKCksXG4gIGRvY3VtZW50YXRpb25Vcmw6IFByb2plY3RVcmxTY2hlbWEub3B0aW9uYWwoKSxcbiAgaWNvbjogei51bmlvbihbXG4gICAgSWNvbktleVNjaGVtYSxcbiAgICB6Lm9iamVjdCh7IGtleTogSWNvbktleVNjaGVtYSwgYmFkZ2U6IEljb25LZXlTY2hlbWEub3B0aW9uYWwoKSB9KS5zdHJpY3QoKSxcbiAgXSkub3B0aW9uYWwoKSxcbiAgbmV0d29yazogei5vYmplY3Qoe1xuICAgIGVncmVzczogei5hcnJheSh6LnN0cmluZygpLnJlZmluZShpc1ZhbGlkRWdyZXNzSG9zdCwge1xuICAgICAgbWVzc2FnZTogJ211c3QgYmUgYSBiYXJlIGhvc3RuYW1lIChubyBzY2hlbWUsIHBvcnQgb3IgcGF0aDsgb25lIGxlYWRpbmcgKi4gYWxsb3dlZCknLFxuICAgIH0pKS5tYXgoRUdSRVNTX01BWF9IT1NUUykub3B0aW9uYWwoKSxcbiAgfSkuc3RyaWN0KCkub3B0aW9uYWwoKSxcbiAgLy8gTWFuYWdlZCB0b29sY2hhaW4gbWV0YWRhdGEg4oCUIGBCdWlsZEltYWdlYCBzcGVjcyBvbmx5IChzZWUgdGhlIGNoZWNrIGJlbG93KS5cbiAgdG9vbGNoYWluOiBQbHVnaW5Ub29sY2hhaW5TY2hlbWEub3B0aW9uYWwoKSxcbiAgc291cmNlRGlnZXN0OiB6LnN0cmluZygpLnJlZ2V4KFBMVUdJTl9TT1VSQ0VfRElHRVNUX1BBVFRFUk4sIHsgbWVzc2FnZTogJ211c3QgYmUgYSBzaGEyNTYgaGV4IGRpZ2VzdCcgfSkub3B0aW9uYWwoKSxcbn0pLnN0cmljdCgpLnN1cGVyUmVmaW5lKChzcGVjLCBjdHgpID0+IHtcbiAgZm9yIChjb25zdCBpc3N1ZSBvZiBidWlsZEltYWdlU3BlY1Byb2JsZW1zKHNwZWMpKSBjdHguYWRkSXNzdWUoeyBjb2RlOiAnY3VzdG9tJywgcGF0aDogW2lzc3VlLnBhdGhdLCBtZXNzYWdlOiBpc3N1ZS5tZXNzYWdlIH0pO1xufSk7XG5leHBvcnQgdHlwZSBQbHVnaW5TcGVjSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBQbHVnaW5TcGVjU2NoZW1hPjtcblxuLyoqXG4gKiBUaGUgYEJ1aWxkSW1hZ2VgIHJ1bGVzIChkb2NzL3BsYW5zL2Jvb3RzdHJhcC1pbWFnZS12ZXJzaW9uaW5nLm1kIMKnMSk6IGFcbiAqIG1hbmFnZWQgYnVpbGQgaW1hZ2UgdXNlcyBhIG1hbmFnZWQgdG9vbGNoYWluIG5hbWUsIGNhcnJpZXMgYHRvb2xjaGFpbmAgYW5kXG4gKiBgc291cmNlRGlnZXN0YCwgYW5kIGRlY2xhcmVzIG5vdGhpbmcgYSBzdGVwIHdvdWxkIHJ1biAoYGNvbW1hbmRzYCxcbiAqIGBpbnN0YWxsQ29tbWFuZHNgLCBgbWV0YWRhdGFgKS4gQ29udmVyc2VseSBgdG9vbGNoYWluYCAvIGBzb3VyY2VEaWdlc3RgIGFyZVxuICogcmVmdXNlZCBvbiBldmVyeSBvdGhlciB0eXBlLiBUaGF0IGl0IGlzIGBwcmVidWlsdGAgaXMgdGhlIHVwbG9hZCBwYXRoJ3NcbiAqIGNoZWNrOiB0aGUgY2hlY2tlZC1pbiBgY29uZmlnLnlhbWxgIHNheXMgYGJ1aWxkX2ltYWdlYCB1bnRpbCB0aGUgYnVpbGRcbiAqIHNjcmlwdCBmbGlwcyBpdC5cbiAqL1xuaW50ZXJmYWNlIEJ1aWxkSW1hZ2VDaGVja0lucHV0IHtcbiAgbmFtZT86IHN0cmluZztcbiAgcGx1Z2luVHlwZT86IHN0cmluZztcbiAgdG9vbGNoYWluPzogdW5rbm93bjtcbiAgc291cmNlRGlnZXN0PzogdW5rbm93bjtcbiAgY29tbWFuZHM/OiB1bmtub3duO1xuICBpbnN0YWxsQ29tbWFuZHM/OiB1bmtub3duO1xuICBtZXRhZGF0YT86IHVua25vd247XG59XG5cbmZ1bmN0aW9uIGJ1aWxkSW1hZ2VTcGVjUHJvYmxlbXMoc3BlYzogQnVpbGRJbWFnZUNoZWNrSW5wdXQpOiBBcnJheTx7IHBhdGg6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH0+IHtcbiAgY29uc3Qgb3V0OiBBcnJheTx7IHBhdGg6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH0+ID0gW107XG4gIGlmIChzcGVjLnBsdWdpblR5cGUgIT09ICdCdWlsZEltYWdlJykge1xuICAgIGlmIChzcGVjLnRvb2xjaGFpbiAhPT0gdW5kZWZpbmVkKSBvdXQucHVzaCh7IHBhdGg6ICd0b29sY2hhaW4nLCBtZXNzYWdlOiAnaXMgb25seSBhbGxvd2VkIG9uIGEgQnVpbGRJbWFnZSBwbHVnaW4nIH0pO1xuICAgIGlmIChzcGVjLnNvdXJjZURpZ2VzdCAhPT0gdW5kZWZpbmVkKSBvdXQucHVzaCh7IHBhdGg6ICdzb3VyY2VEaWdlc3QnLCBtZXNzYWdlOiAnaXMgb25seSBhbGxvd2VkIG9uIGEgQnVpbGRJbWFnZSBwbHVnaW4nIH0pO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cbiAgaWYgKHNwZWMubmFtZSAhPT0gdW5kZWZpbmVkICYmICFpc01hbmFnZWRUb29sY2hhaW5QbHVnaW4oc3BlYy5uYW1lKSkge1xuICAgIG91dC5wdXNoKHsgcGF0aDogJ3BsdWdpblR5cGUnLCBtZXNzYWdlOiAnQnVpbGRJbWFnZSBpcyByZXNlcnZlZCBmb3IgdGhlIG1hbmFnZWQgdG9vbGNoYWluIHBsdWdpbnMnIH0pO1xuICB9XG4gIGlmIChzcGVjLnRvb2xjaGFpbiA9PT0gdW5kZWZpbmVkKSBvdXQucHVzaCh7IHBhdGg6ICd0b29sY2hhaW4nLCBtZXNzYWdlOiAnaXMgcmVxdWlyZWQgb24gYSBCdWlsZEltYWdlIHBsdWdpbicgfSk7XG4gIGlmIChzcGVjLnNvdXJjZURpZ2VzdCA9PT0gdW5kZWZpbmVkKSBvdXQucHVzaCh7IHBhdGg6ICdzb3VyY2VEaWdlc3QnLCBtZXNzYWdlOiAnaXMgcmVxdWlyZWQgb24gYSBCdWlsZEltYWdlIHBsdWdpbicgfSk7XG4gIGZvciAoY29uc3QgZmllbGQgb2YgWydjb21tYW5kcycsICdpbnN0YWxsQ29tbWFuZHMnLCAnbWV0YWRhdGEnXSBhcyBjb25zdCkge1xuICAgIGlmIChzcGVjW2ZpZWxkXSAhPT0gdW5kZWZpbmVkKSBvdXQucHVzaCh7IHBhdGg6IGZpZWxkLCBtZXNzYWdlOiAnaXMgbm90IGFsbG93ZWQgb24gYSBCdWlsZEltYWdlIHBsdWdpbicgfSk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgY2hlY2tpbmcgYSBwYXJzZWQgWUFNTCBkb2N1bWVudCBhZ2FpbnN0IGEgcGFja2FnZSBzY2hlbWE6XG4gKiBgaXNzdWVzYCBhcmUgdGhlIGluZGl2aWR1YWwgcHJvYmxlbXMsIGBtZXNzYWdlYCB0aGUgb25lLWxpbmUgZm9ybSB0aGUgdXBsb2FkXG4gKiBBUEkgcmVwb3J0cyAoYHBsdWdpbi1zcGVjLnlhbWw6IDxwYXRoPjogPHByb2JsZW0+OyDigKZgKS5cbiAqL1xuZXhwb3J0IHR5cGUgUGFja2FnZUNoZWNrPFQ+ID0geyBvazogdHJ1ZTsgdmFsdWU6IFQgfSB8IHsgb2s6IGZhbHNlOyBpc3N1ZXM6IHN0cmluZ1tdOyBtZXNzYWdlOiBzdHJpbmcgfTtcblxuY29uc3QgaXNNYXBwaW5nID0gKHJhdzogdW5rbm93bik6IHJhdyBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PlxuICB0eXBlb2YgcmF3ID09PSAnb2JqZWN0JyAmJiByYXcgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkocmF3KTtcblxuZnVuY3Rpb24gY2hlY2tBZ2FpbnN0PFQ+KGZpbGU6IHN0cmluZywgcmF3OiB1bmtub3duLCBzY2hlbWE6IHouWm9kVHlwZTxUPiwgd2l0aFBhdGg6IGJvb2xlYW4pOiBQYWNrYWdlQ2hlY2s8VD4ge1xuICBpZiAoIWlzTWFwcGluZyhyYXcpKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGAke2ZpbGV9IG11c3QgYmUgYSBZQU1MIG1hcHBpbmdgO1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgaXNzdWVzOiBbbWVzc2FnZV0sIG1lc3NhZ2UgfTtcbiAgfVxuICBjb25zdCByZXN1bHQgPSBzY2hlbWEuc2FmZVBhcnNlKHJhdyk7XG4gIGlmIChyZXN1bHQuc3VjY2VzcykgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiByZXN1bHQuZGF0YSB9O1xuICBjb25zdCBpc3N1ZXMgPSByZXN1bHQuZXJyb3IuaXNzdWVzLm1hcChpID0+ICh3aXRoUGF0aCA/IGAke2kucGF0aC5qb2luKCcuJykgfHwgJyhyb290KSd9OiAke2kubWVzc2FnZX1gIDogaS5tZXNzYWdlKSk7XG4gIHJldHVybiB7IG9rOiBmYWxzZSwgaXNzdWVzLCBtZXNzYWdlOiBgJHtmaWxlfTogJHtpc3N1ZXMuam9pbignOyAnKX1gIH07XG59XG5cbi8qKiBDaGVjayBhIHBhcnNlZCBgcGx1Z2luLXNwZWMueWFtbGAgZG9jdW1lbnQgYWdhaW5zdCB7QGxpbmsgUGx1Z2luU3BlY1NjaGVtYX0uICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQbHVnaW5TcGVjKHJhdzogdW5rbm93bik6IFBhY2thZ2VDaGVjazxQbHVnaW5TcGVjSW5wdXQ+IHtcbiAgcmV0dXJuIGNoZWNrQWdhaW5zdCgncGx1Z2luLXNwZWMueWFtbCcsIHJhdywgUGx1Z2luU3BlY1NjaGVtYSwgdHJ1ZSk7XG59XG5cbi8qKiBDaGVjayBhIHBhcnNlZCBgY29uZmlnLnlhbWxgIGRvY3VtZW50IGFnYWluc3Qge0BsaW5rIFBsdWdpbkNvbmZpZ1NjaGVtYX0uICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tQbHVnaW5Db25maWcocmF3OiB1bmtub3duKTogUGFja2FnZUNoZWNrPFBsdWdpbkNvbmZpZ0lucHV0PiB7XG4gIHJldHVybiBjaGVja0FnYWluc3QoJ2NvbmZpZy55YW1sJywgcmF3LCBQbHVnaW5Db25maWdTY2hlbWEsIGZhbHNlKTtcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWlyZWQtZmllbGQgY29udHJhY3Q6IGBuYW1lYCBhbmQgYHZlcnNpb25gIGFsd2F5cywgYGNvbW1hbmRzYCBmb3JcbiAqIGV2ZXJ5IHR5cGUgZXhjZXB0IGBNYW51YWxBcHByb3ZhbFN0ZXBgIGFuZCBgQnVpbGRJbWFnZWAgKG5laXRoZXIgcnVuc1xuICogY29tbWFuZHMpLiBSZXR1cm5zIHRoZSB1cGxvYWQncyBtZXNzYWdlLCBvciBudWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGx1Z2luU3BlY1JlcXVpcmVkRmllbGRzUHJvYmxlbShzcGVjOiBQaWNrPFBsdWdpblNwZWNJbnB1dCwgJ25hbWUnIHwgJ3ZlcnNpb24nIHwgJ2NvbW1hbmRzJyB8ICdwbHVnaW5UeXBlJz4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgcnVuc05vQ29tbWFuZHMgPSBzcGVjLnBsdWdpblR5cGUgPT09ICdNYW51YWxBcHByb3ZhbFN0ZXAnIHx8IHNwZWMucGx1Z2luVHlwZSA9PT0gJ0J1aWxkSW1hZ2UnO1xuICBpZiAoIXNwZWMubmFtZSB8fCAhc3BlYy52ZXJzaW9uIHx8ICghcnVuc05vQ29tbWFuZHMgJiYgIXNwZWMuY29tbWFuZHMpKSB7XG4gICAgcmV0dXJuICdJbnZhbGlkIHNwZWM6IG5hbWUsIHZlcnNpb24sIGFuZCBjb21tYW5kcyBhcmUgcmVxdWlyZWQnO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19
package/package.json CHANGED
@@ -124,10 +124,13 @@
124
124
  ],
125
125
  "tier-limits": [
126
126
  "lib/types/tier-limits.d.ts"
127
+ ],
128
+ "wire-vocabulary": [
129
+ "lib/types/wire-vocabulary.d.ts"
127
130
  ]
128
131
  }
129
132
  },
130
- "version": "5.2.10",
133
+ "version": "5.2.12",
131
134
  "bugs": {
132
135
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
133
136
  },
@@ -278,6 +281,10 @@
278
281
  "types": "./lib/types/tier-limits.d.ts",
279
282
  "default": "./lib/types/tier-limits.js"
280
283
  },
284
+ "./wire-vocabulary": {
285
+ "types": "./lib/types/wire-vocabulary.d.ts",
286
+ "default": "./lib/types/wire-vocabulary.js"
287
+ },
281
288
  "./testing": {
282
289
  "types": "./lib/testing/index.d.ts",
283
290
  "default": "./lib/testing/index.js"