@pipeline-builder/pipeline-data 4.3.11 → 4.3.13

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 (42) hide show
  1. package/lib/api/managed-toolchain.d.ts +195 -0
  2. package/lib/api/managed-toolchain.js +443 -0
  3. package/lib/api/public-directory.d.ts +4 -15
  4. package/lib/api/public-directory.js +1 -31
  5. package/lib/api/reporting/ingest.js +52 -12
  6. package/lib/api/reporting/stakeholder/compose.d.ts +3 -2
  7. package/lib/api/reporting/stakeholder/compose.js +1 -1
  8. package/lib/api/reporting/stakeholder/period.d.ts +5 -4
  9. package/lib/api/reporting/stakeholder/period.js +1 -1
  10. package/lib/api/reporting/stakeholder/sections.d.ts +4 -4
  11. package/lib/api/reporting/stakeholder/sections.js +1 -1
  12. package/lib/api/reporting/stakeholder/store.d.ts +3 -2
  13. package/lib/api/reporting/stakeholder/store.js +1 -1
  14. package/lib/api/reporting/toolchain-runs.d.ts +156 -0
  15. package/lib/api/reporting/toolchain-runs.js +267 -0
  16. package/lib/api/reporting/types.d.ts +20 -3
  17. package/lib/api/reporting/types.js +1 -1
  18. package/lib/api/support-cases.d.ts +50 -24
  19. package/lib/api/support-cases.js +96 -37
  20. package/lib/api/version-references.d.ts +2 -24
  21. package/lib/api/version-references.js +46 -7
  22. package/lib/core/query-filters.d.ts +6 -6
  23. package/lib/core/query-filters.js +1 -1
  24. package/lib/database/drizzle-schema.d.ts +698 -41
  25. package/lib/database/drizzle-schema.js +11 -1
  26. package/lib/database/index.d.ts +1 -1
  27. package/lib/database/index.js +2 -2
  28. package/lib/database/schema/alert.js +4 -4
  29. package/lib/database/schema/compliance.d.ts +29 -40
  30. package/lib/database/schema/compliance.js +10 -14
  31. package/lib/database/schema/ecosystem.d.ts +72 -0
  32. package/lib/database/schema/ecosystem.js +18 -2
  33. package/lib/database/schema/pipeline.d.ts +19 -0
  34. package/lib/database/schema/pipeline.js +17 -1
  35. package/lib/database/schema/reporting-stakeholder.d.ts +2 -1
  36. package/lib/database/schema/reporting-stakeholder.js +2 -27
  37. package/lib/database/schema/toolchain.d.ts +643 -0
  38. package/lib/database/schema/toolchain.js +102 -0
  39. package/lib/index.d.ts +4 -2
  40. package/lib/index.js +7 -3
  41. package/lib/testing/exports.json +39 -2
  42. package/package.json +2 -2
@@ -22,10 +22,42 @@
22
22
  * Matched by image digest when the version has one (a team running its parent's
23
23
  * plugin, or another org's install, pins the same digest), else by name +
24
24
  * version within the owner org and its teams.
25
+ *
26
+ * A MANAGED TOOLCHAIN half (the system org's `pipeline-bootstrap` / `cdk-synth`,
27
+ * docs/plans/bootstrap-image-versioning.md §4/§5) is referenced whenever its
28
+ * RELEASE is: a pipeline deploying or declaring EITHER half of the same version
29
+ * references both. A pipeline that only runs the release's build image (the
30
+ * manifest's non-step `build-image` row) still holds its synth half, and the
31
+ * reverse — the release is one unit, created, deleted and purged together.
25
32
  */
33
+ import { BUILD_IMAGE_STEP_KEY, isManagedToolchainPlugin, isSystemOrgId, MANAGED_TOOLCHAIN_PLUGINS, SYSTEM_ORG_ID, } from '@pipeline-builder/api-core';
26
34
  import { sql } from 'drizzle-orm';
27
35
  import { executeRows } from '../database/pg-result.js';
28
36
  import { withTenantTx } from '../database/tenancy.js';
37
+ /** The managed toolchain names as an SQL list (constants, never input). */
38
+ const MANAGED_NAMES_SQL = sql.raw(MANAGED_TOOLCHAIN_PLUGINS.map((n) => `'${n}'`).join(', '));
39
+ const SYSTEM_ORG_ID_LOWER = SYSTEM_ORG_ID.toLowerCase();
40
+ /**
41
+ * "This row is a release half whose RELEASE some pipeline references": a
42
+ * system-org managed row, and a manifest / resolution / open deployed exposure
43
+ * naming either half at its version. Managed names are reserved to the system
44
+ * org, so a publisher-less row with one IS that release's.
45
+ */
46
+ function managedReleaseReferenced(cols) {
47
+ // COALESCE: a caller passing NULL columns (the listing image GC) must read
48
+ // FALSE here, never NULL — `NOT NULL` would silently keep every image.
49
+ return sql `COALESCE(lower(${cols.orgId}) = ${SYSTEM_ORG_ID_LOWER} AND ${cols.name} IN (${MANAGED_NAMES_SQL}) AND (
50
+ EXISTS (SELECT 1 FROM pipeline_step_manifests m WHERE m.plugin_name IN (${MANAGED_NAMES_SQL}) AND m.plugin_version = ${cols.version}
51
+ AND m.plugin_publisher IS NULL)
52
+ OR EXISTS (SELECT 1 FROM pipeline_plugin_resolution r JOIN pipelines lp ON lp.id::text = r.pipeline_id AND lp.deleted_at IS NULL
53
+ WHERE r.plugin_name IN (${MANAGED_NAMES_SQL}) AND r.resolved_version = ${cols.version} AND r.plugin_publisher IS NULL)
54
+ OR EXISTS (SELECT 1 FROM plugin_vuln_exposure e WHERE e.plugin_name IN (${MANAGED_NAMES_SQL}) AND e.plugin_version = ${cols.version}
55
+ AND e.plugin_publisher IS NULL AND e.source = 'deployed' AND e.fixed_at IS NULL)), false)`;
56
+ }
57
+ /** Whether `target` is a managed toolchain half (matched release-wide, see the module doc). */
58
+ function isManagedReleaseTarget(target) {
59
+ return isManagedToolchainPlugin(target.pluginName) && !target.publisher && isSystemOrgId(target.ownerOrgId ?? '');
60
+ }
29
61
  /**
30
62
  * The SQL predicate "some pipeline references this row's image / version", over
31
63
  * a `plugins`-shaped row's columns — the purge guard's form of
@@ -33,6 +65,7 @@ import { withTenantTx } from '../database/tenancy.js';
33
65
  */
34
66
  export function versionReferencedPredicate(cols) {
35
67
  return sql `(
68
+ ${managedReleaseReferenced(cols)} OR
36
69
  (${cols.digest} IS NOT NULL AND (
37
70
  EXISTS (SELECT 1 FROM pipeline_step_manifests m WHERE m.image_digest = ${cols.digest})
38
71
  OR EXISTS (SELECT 1 FROM pipeline_plugin_resolution r JOIN pipelines p ON p.id::text = r.pipeline_id AND p.deleted_at IS NULL
@@ -52,9 +85,14 @@ export function versionReferencedPredicate(cols) {
52
85
  * names other orgs' pipelines; callers show the OWNER only counts and its own
53
86
  * org's pipelines, and notify each referencing org about its own.
54
87
  */
55
- export async function findVersionReferences(target) {
88
+ export async function findVersionReferences(target, run = withTenantTx) {
56
89
  const digest = target.imageDigest ?? null;
57
90
  const owner = target.ownerOrgId?.toLowerCase() ?? null;
91
+ const managed = isManagedReleaseTarget(target);
92
+ // A managed half: either half of the release, at its version (module doc).
93
+ const release = (alias, versionCol) => (managed
94
+ ? sql ` OR (${sql.raw(`${alias}.plugin_name`)} IN (${MANAGED_NAMES_SQL}) AND ${sql.raw(`${alias}.${versionCol}`)} = ${target.pluginVersion} AND ${sql.raw(`${alias}.plugin_publisher`)} IS NULL)`
95
+ : sql ``);
58
96
  const declaredMatch = digest
59
97
  ? sql `r.resolved_digest = ${digest}`
60
98
  : sql `r.plugin_name = ${target.pluginName} AND r.resolved_version = ${target.pluginVersion}
@@ -67,7 +105,7 @@ export async function findVersionReferences(target) {
67
105
  ? sql `e.image_digest = ${digest}`
68
106
  : sql `e.plugin_name = ${target.pluginName} AND e.plugin_version = ${target.pluginVersion}
69
107
  AND ${target.publisher ? sql `e.plugin_publisher = ${target.publisher}` : sql `e.plugin_publisher IS NULL AND lower(e.org_id) = ${owner}`}`;
70
- const rows = await withTenantTx((tx) => executeRows(tx, sql `
108
+ const rows = await run((tx) => executeRows(tx, sql `
71
109
  SELECT x.pipeline_id, x.org_id, x.source, p.pipeline_name, (p.id IS NULL OR p.deleted_at IS NOT NULL) AS deleted,
72
110
  array_agg(DISTINCT x.step) FILTER (WHERE x.step IS NOT NULL) AS steps
73
111
  FROM (
@@ -75,13 +113,14 @@ export async function findVersionReferences(target) {
75
113
  CASE WHEN r.stage_name = 'synth' AND r.step_name = 'synth' THEN 'synth' ELSE r.stage_name || '/' || r.step_name END AS step
76
114
  FROM pipeline_plugin_resolution r
77
115
  JOIN pipelines lp ON lp.id::text = r.pipeline_id AND lp.deleted_at IS NULL
78
- WHERE ${declaredMatch}
116
+ WHERE (${declaredMatch}${release('r', 'resolved_version')})
79
117
  UNION ALL
80
- SELECT m.pipeline_id::text, m.org_id, 'deployed', m.stage_name || '/' || m.action_name
81
- FROM pipeline_step_manifests m WHERE ${deployedMatch}
118
+ SELECT m.pipeline_id::text, m.org_id, 'deployed',
119
+ CASE WHEN m.step_key = ${BUILD_IMAGE_STEP_KEY} THEN ${BUILD_IMAGE_STEP_KEY} ELSE m.stage_name || '/' || m.action_name END
120
+ FROM pipeline_step_manifests m WHERE (${deployedMatch}${release('m', 'plugin_version')})
82
121
  UNION ALL
83
122
  SELECT e.pipeline_id, e.org_id, 'exposure', NULL
84
- FROM plugin_vuln_exposure e WHERE ${exposureMatch} AND e.source = 'deployed' AND e.fixed_at IS NULL
123
+ FROM plugin_vuln_exposure e WHERE (${exposureMatch}${release('e', 'plugin_version')}) AND e.source = 'deployed' AND e.fixed_at IS NULL
85
124
  ) x
86
125
  LEFT JOIN pipelines p ON p.id::text = x.pipeline_id
87
126
  GROUP BY x.pipeline_id, x.org_id, x.source, p.pipeline_name, p.id, p.deleted_at
@@ -132,4 +171,4 @@ export async function orgImageDigestsInUse(orgId) {
132
171
  `));
133
172
  return rows.map((r) => r.d);
134
173
  }
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi1yZWZlcmVuY2VzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3ZlcnNpb24tcmVmZXJlbmNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBWSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBd0J0RDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUFDLElBQTBEO0lBQ25HLE9BQU8sR0FBRyxDQUFBO09BQ0wsSUFBSSxDQUFDLE1BQU07K0VBQzZELElBQUksQ0FBQyxNQUFNOzs4Q0FFNUMsSUFBSSxDQUFDLE1BQU07K0VBQ3NCLElBQUksQ0FBQyxNQUFNO1VBQ2hGLElBQUksQ0FBQyxNQUFNOzhFQUN5RCxJQUFJLENBQUMsSUFBSSwyQkFBMkIsSUFBSSxDQUFDLE9BQU87NkVBQ2pELElBQUksQ0FBQyxLQUFLOzswQ0FFN0MsSUFBSSxDQUFDLElBQUksNkJBQTZCLElBQUksQ0FBQyxPQUFPO21EQUN6QyxJQUFJLENBQUMsS0FBSyxxQ0FBcUMsSUFBSSxDQUFDLEtBQUs7SUFDeEcsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCLENBQUMsTUFBOEI7SUFDeEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUM7SUFDMUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUM7SUFDdkQsTUFBTSxhQUFhLEdBQUcsTUFBTTtRQUMxQixDQUFDLENBQUMsR0FBRyxDQUFBLHVCQUF1QixNQUFNLEVBQUU7UUFD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QyxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxLQUFhO0lBQ3RELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoQyxNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFnQixFQUFFLEVBQUUsR0FBRyxDQUFBOztvRUFFUixHQUFHOzsyRUFFSSxHQUFHLDhCQUE4QixHQUFHOzsrSEFFZ0IsR0FBRzswSEFDUixHQUFHOzt3SEFFTCxHQUFHOztHQUV4SCxDQUFDLENBQUMsQ0FBQztJQUNKLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBXaGljaCBwaXBlbGluZXMgc3RpbGwgUkVGRVJFTkNFIGEgcGx1Z2luIHZlcnNpb24gb3IgaW1hZ2Ug4oCUIHRoZSBvbmUgcnVsZSBldmVyeVxuICogcmVtb3ZhbCBwYXRoIGFza3MgYmVmb3JlIGl0IGRlbGV0ZXMgYW55dGhpbmc6IGFuIG9yZyBwbHVnaW4gZGVsZXRlIChmb3JjZWQgb3JcbiAqIG5vdCksIGEgYnVsayBkZWxldGUsIGEgdG9tYnN0b25lIHB1cmdlIChtYW51YWwgb3IgdGhlIHJldGVudGlvbiBzd2VlcCksIHRoZVxuICogaW1hZ2UgcmVnaXN0cnkncyBhZ2UgR0MsIHRoZSBsaXN0aW5nIGltYWdlIEdDLlxuICpcbiAqIFRIRSBSVUxFOiBhIHZlcnNpb24gKG9yIGl0cyBpbWFnZSkgdGhhdCBhbnkgcGlwZWxpbmUgcmVmZXJlbmNlcyBjYW5ub3QgYmVcbiAqIGRlbGV0ZWQgdW50aWwgbm8gcGlwZWxpbmUgZG9lcyDigJQgd2hhdGV2ZXIgaXRzIHZ1bG5lcmFiaWxpdHkgc3RhdGUuIEFcbiAqIHZ1bG5lcmFibGUgaW1hZ2UgaXMgdGhlIFdPUlNUIHRoaW5nIHRvIGRlbGV0ZSBvdXQgZnJvbSB1bmRlciBhIHBpcGVsaW5lOiB0aGVcbiAqIG5leHQgcnVuIGZhaWxzIHRvIHB1bGwsIGFuZCB0aGUgb3duZXJzIGxlYXJuIGFib3V0IHRoZSBDVkUgZnJvbSBhbiBvdXRhZ2UuXG4gKiBWdWxuZXJhYmlsaXR5IGNvbnNlcXVlbmNlcyBhcmUgZ3JhZGVkIHdhcm5pbmdzIGFuZCBub3RpZmljYXRpb25zLCBuZXZlciByZW1vdmFsLlxuICpcbiAqIEEgcmVmZXJlbmNlIGlzIGFueSBvZjpcbiAqICAtIGBkZWNsYXJlZGAg4oCUIGEgTElWRSBwaXBlbGluZSdzIGNvbmZpZyByZXNvbHZlcyB0byBpdCAoYHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uYCk7XG4gKiAgLSBgZGVwbG95ZWRgIOKAlCBhIHBpcGVsaW5lJ3MgbGFzdCBkZXBsb3kgcmVjb3JkZWQgaXQgKGBwaXBlbGluZV9zdGVwX21hbmlmZXN0c2ApLFxuICogICAgSU5DTFVESU5HIGEgc29mdC1kZWxldGVkIHBpcGVsaW5lOiBpdHMgQ29kZVBpcGVsaW5lIHN0aWxsIHJ1bnMgdGhlIGltYWdlO1xuICogIC0gYGV4cG9zdXJlYCDigJQgYW4gb3BlbiBERVBMT1lFRCBleHBvc3VyZSBzdGlsbCBuYW1lcyBpdCAodGhlIHNhbWUgXCJzdGlsbCBydW5zXG4gKiAgICBpdFwiIGZhY3QsIGtlcHQgd2hlbiBhIG1hbmlmZXN0IGlzIGdvbmUpLlxuICpcbiAqIE1hdGNoZWQgYnkgaW1hZ2UgZGlnZXN0IHdoZW4gdGhlIHZlcnNpb24gaGFzIG9uZSAoYSB0ZWFtIHJ1bm5pbmcgaXRzIHBhcmVudCdzXG4gKiBwbHVnaW4sIG9yIGFub3RoZXIgb3JnJ3MgaW5zdGFsbCwgcGlucyB0aGUgc2FtZSBkaWdlc3QpLCBlbHNlIGJ5IG5hbWUgK1xuICogdmVyc2lvbiB3aXRoaW4gdGhlIG93bmVyIG9yZyBhbmQgaXRzIHRlYW1zLlxuICovXG5cbmltcG9ydCB7IHNxbCwgdHlwZSBTUUwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBleGVjdXRlUm93cyB9IGZyb20gJy4uL2RhdGFiYXNlL3BnLXJlc3VsdC5qcyc7XG5pbXBvcnQgeyB3aXRoVGVuYW50VHggfSBmcm9tICcuLi9kYXRhYmFzZS90ZW5hbmN5LmpzJztcblxuLyoqIEEgdmVyc2lvbiAvIGltYWdlIHdob3NlIHJlZmVyZW5jZXMgYXJlIHdhbnRlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvblJlZmVyZW5jZVRhcmdldCB7XG4gIHBsdWdpbk5hbWU6IHN0cmluZztcbiAgcGx1Z2luVmVyc2lvbjogc3RyaW5nO1xuICBpbWFnZURpZ2VzdD86IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUaGUgb3duaW5nIG9yZyBvZiBhbiBvcmcgcGx1Z2luIChpdHMgdGVhbXMgY291bnQgdG9vKTsgb21pdHRlZCBmb3IgYSBsaXN0aW5nIHZlcnNpb24uICovXG4gIG93bmVyT3JnSWQ/OiBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIGxpc3RpbmcncyBwdWJsaXNoZXIgaGFuZGxlIChhIGxpc3RpbmcgdmVyc2lvbik7IG51bGwvb21pdHRlZCBmb3IgYW4gb3JnIHBsdWdpbi4gKi9cbiAgcHVibGlzaGVyPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqIE9uZSBwaXBlbGluZSByZWZlcmVuY2luZyBhIHZlcnNpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25SZWZlcmVuY2Uge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgb3JnSWQ6IHN0cmluZztcbiAgc291cmNlOiAnZGVjbGFyZWQnIHwgJ2RlcGxveWVkJyB8ICdleHBvc3VyZSc7XG4gIC8qKiBUaGUgcGlwZWxpbmUgaXMgc29mdC1kZWxldGVkIChzdGlsbCBkZXBsb3llZDogaXRzIG1hbmlmZXN0IG9yIGV4cG9zdXJlIHJlbWFpbnMpLiAqL1xuICBwaXBlbGluZURlbGV0ZWQ6IGJvb2xlYW47XG4gIHN0ZXBzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgU1FMIHByZWRpY2F0ZSBcInNvbWUgcGlwZWxpbmUgcmVmZXJlbmNlcyB0aGlzIHJvdydzIGltYWdlIC8gdmVyc2lvblwiLCBvdmVyXG4gKiBhIGBwbHVnaW5zYC1zaGFwZWQgcm93J3MgY29sdW1ucyDigJQgdGhlIHB1cmdlIGd1YXJkJ3MgZm9ybSBvZlxuICoge0BsaW5rIGZpbmRWZXJzaW9uUmVmZXJlbmNlc30gKHNhbWUgdGhyZWUgc291cmNlcywgc2FtZSBtYXRjaGluZykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJzaW9uUmVmZXJlbmNlZFByZWRpY2F0ZShjb2xzOiB7IGRpZ2VzdDogU1FMOyBuYW1lOiBTUUw7IHZlcnNpb246IFNRTDsgb3JnSWQ6IFNRTCB9KTogU1FMIHtcbiAgcmV0dXJuIHNxbGAoXG4gICAgKCR7Y29scy5kaWdlc3R9IElTIE5PVCBOVUxMIEFORCAoXG4gICAgICBFWElTVFMgKFNFTEVDVCAxIEZST00gcGlwZWxpbmVfc3RlcF9tYW5pZmVzdHMgbSBXSEVSRSBtLmltYWdlX2RpZ2VzdCA9ICR7Y29scy5kaWdlc3R9KVxuICAgICAgT1IgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uIHIgSk9JTiBwaXBlbGluZXMgcCBPTiBwLmlkOjp0ZXh0ID0gci5waXBlbGluZV9pZCBBTkQgcC5kZWxldGVkX2F0IElTIE5VTExcbiAgICAgICAgICAgICAgICAgIFdIRVJFIHIucmVzb2x2ZWRfZGlnZXN0ID0gJHtjb2xzLmRpZ2VzdH0pXG4gICAgICBPUiBFWElTVFMgKFNFTEVDVCAxIEZST00gcGx1Z2luX3Z1bG5fZXhwb3N1cmUgZSBXSEVSRSBlLmltYWdlX2RpZ2VzdCA9ICR7Y29scy5kaWdlc3R9IEFORCBlLnNvdXJjZSA9ICdkZXBsb3llZCcgQU5EIGUuZml4ZWRfYXQgSVMgTlVMTCkpKVxuICAgIE9SICgke2NvbHMuZGlnZXN0fSBJUyBOVUxMIEFORCAoXG4gICAgICBFWElTVFMgKFNFTEVDVCAxIEZST00gcGlwZWxpbmVfc3RlcF9tYW5pZmVzdHMgbSBXSEVSRSBtLnBsdWdpbl9uYW1lID0gJHtjb2xzLm5hbWV9IEFORCBtLnBsdWdpbl92ZXJzaW9uID0gJHtjb2xzLnZlcnNpb259XG4gICAgICAgICAgICAgICAgQU5EIG0ucGx1Z2luX3B1Ymxpc2hlciBJUyBOVUxMIEFORCBsb3dlcihtLm9yZ19pZCkgPSBsb3dlcigke2NvbHMub3JnSWR9KSlcbiAgICAgIE9SIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBwaXBlbGluZV9wbHVnaW5fcmVzb2x1dGlvbiByIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWQgQU5EIHAuZGVsZXRlZF9hdCBJUyBOVUxMXG4gICAgICAgICAgICAgICAgICBXSEVSRSByLnBsdWdpbl9uYW1lID0gJHtjb2xzLm5hbWV9IEFORCByLnJlc29sdmVkX3ZlcnNpb24gPSAke2NvbHMudmVyc2lvbn0gQU5EIHIucGx1Z2luX3B1Ymxpc2hlciBJUyBOVUxMXG4gICAgICAgICAgICAgICAgICAgIEFORCAobG93ZXIoci5vcmdfaWQpID0gbG93ZXIoJHtjb2xzLm9yZ0lkfSkgT1IgbG93ZXIoci5yb290X29yZ19pZCkgPSBsb3dlcigke2NvbHMub3JnSWR9KSkpKSlcbiAgKWA7XG59XG5cbi8qKlxuICogRXZlcnkgcGlwZWxpbmUgcmVmZXJlbmNpbmcgYHRhcmdldGAgKHNlZSB0aGUgbW9kdWxlIGRvYyksIGFjcm9zcyBvcmdzIOKAlCBzbyBpdFxuICogbXVzdCBydW4gd2l0aCBhIHNjb3BlIHRoYXQgY2FuIHJlYWQgZXZlcnkgb3JnJ3Mgcm93cyAoZWxldmF0ZWQpLiBUaGUgcmVzdWx0XG4gKiBuYW1lcyBvdGhlciBvcmdzJyBwaXBlbGluZXM7IGNhbGxlcnMgc2hvdyB0aGUgT1dORVIgb25seSBjb3VudHMgYW5kIGl0cyBvd25cbiAqIG9yZydzIHBpcGVsaW5lcywgYW5kIG5vdGlmeSBlYWNoIHJlZmVyZW5jaW5nIG9yZyBhYm91dCBpdHMgb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZFZlcnNpb25SZWZlcmVuY2VzKHRhcmdldDogVmVyc2lvblJlZmVyZW5jZVRhcmdldCk6IFByb21pc2U8VmVyc2lvblJlZmVyZW5jZVtdPiB7XG4gIGNvbnN0IGRpZ2VzdCA9IHRhcmdldC5pbWFnZURpZ2VzdCA/PyBudWxsO1xuICBjb25zdCBvd25lciA9IHRhcmdldC5vd25lck9yZ0lkPy50b0xvd2VyQ2FzZSgpID8/IG51bGw7XG4gIGNvbnN0IGRlY2xhcmVkTWF0Y2ggPSBkaWdlc3RcbiAgICA/IHNxbGByLnJlc29sdmVkX2RpZ2VzdCA9ICR7ZGlnZXN0fWBcbiAgICA6IHNxbGByLnBsdWdpbl9uYW1lID0gJHt0YXJnZXQucGx1Z2luTmFtZX0gQU5EIHIucmVzb2x2ZWRfdmVyc2lvbiA9ICR7dGFyZ2V0LnBsdWdpblZlcnNpb259XG4gICAgICAgICAgQU5EICR7dGFyZ2V0LnB1Ymxpc2hlciA/IHNxbGByLnBsdWdpbl9wdWJsaXNoZXIgPSAke3RhcmdldC5wdWJsaXNoZXJ9YCA6IHNxbGByLnBsdWdpbl9wdWJsaXNoZXIgSVMgTlVMTCBBTkQgKGxvd2VyKHIub3JnX2lkKSA9ICR7b3duZXJ9IE9SIGxvd2VyKHIucm9vdF9vcmdfaWQpID0gJHtvd25lcn0pYH1gO1xuICBjb25zdCBkZXBsb3llZE1hdGNoID0gZGlnZXN0XG4gICAgPyBzcWxgbS5pbWFnZV9kaWdlc3QgPSAke2RpZ2VzdH1gXG4gICAgOiBzcWxgbS5wbHVnaW5fbmFtZSA9ICR7dGFyZ2V0LnBsdWdpbk5hbWV9IEFORCBtLnBsdWdpbl92ZXJzaW9uID0gJHt0YXJnZXQucGx1Z2luVmVyc2lvbn1cbiAgICAgICAgICBBTkQgJHt0YXJnZXQucHVibGlzaGVyID8gc3FsYG0ucGx1Z2luX3B1Ymxpc2hlciA9ICR7dGFyZ2V0LnB1Ymxpc2hlcn1gIDogc3FsYG0ucGx1Z2luX3B1Ymxpc2hlciBJUyBOVUxMIEFORCBsb3dlcihtLm9yZ19pZCkgPSAke293bmVyfWB9YDtcbiAgY29uc3QgZXhwb3N1cmVNYXRjaCA9IGRpZ2VzdFxuICAgID8gc3FsYGUuaW1hZ2VfZGlnZXN0ID0gJHtkaWdlc3R9YFxuICAgIDogc3FsYGUucGx1Z2luX25hbWUgPSAke3RhcmdldC5wbHVnaW5OYW1lfSBBTkQgZS5wbHVnaW5fdmVyc2lvbiA9ICR7dGFyZ2V0LnBsdWdpblZlcnNpb259XG4gICAgICAgICAgQU5EICR7dGFyZ2V0LnB1Ymxpc2hlciA/IHNxbGBlLnBsdWdpbl9wdWJsaXNoZXIgPSAke3RhcmdldC5wdWJsaXNoZXJ9YCA6IHNxbGBlLnBsdWdpbl9wdWJsaXNoZXIgSVMgTlVMTCBBTkQgbG93ZXIoZS5vcmdfaWQpID0gJHtvd25lcn1gfWA7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiBleGVjdXRlUm93czx7IHBpcGVsaW5lX2lkOiBzdHJpbmc7IG9yZ19pZDogc3RyaW5nOyBzb3VyY2U6IFZlcnNpb25SZWZlcmVuY2VbJ3NvdXJjZSddOyBwaXBlbGluZV9uYW1lOiBzdHJpbmcgfCBudWxsOyBkZWxldGVkOiBib29sZWFuOyBzdGVwczogc3RyaW5nW10gfCBudWxsIH0+KHR4LCBzcWxgXG4gICAgU0VMRUNUIHgucGlwZWxpbmVfaWQsIHgub3JnX2lkLCB4LnNvdXJjZSwgcC5waXBlbGluZV9uYW1lLCAocC5pZCBJUyBOVUxMIE9SIHAuZGVsZXRlZF9hdCBJUyBOT1QgTlVMTCkgQVMgZGVsZXRlZCxcbiAgICAgICAgICAgYXJyYXlfYWdnKERJU1RJTkNUIHguc3RlcCkgRklMVEVSIChXSEVSRSB4LnN0ZXAgSVMgTk9UIE5VTEwpIEFTIHN0ZXBzXG4gICAgICBGUk9NIChcbiAgICAgICAgU0VMRUNUIHIucGlwZWxpbmVfaWQsIHIub3JnX2lkLCAnZGVjbGFyZWQnIEFTIHNvdXJjZSxcbiAgICAgICAgICAgICAgIENBU0UgV0hFTiByLnN0YWdlX25hbWUgPSAnc3ludGgnIEFORCByLnN0ZXBfbmFtZSA9ICdzeW50aCcgVEhFTiAnc3ludGgnIEVMU0Ugci5zdGFnZV9uYW1lIHx8ICcvJyB8fCByLnN0ZXBfbmFtZSBFTkQgQVMgc3RlcFxuICAgICAgICAgIEZST00gcGlwZWxpbmVfcGx1Z2luX3Jlc29sdXRpb24gclxuICAgICAgICAgIEpPSU4gcGlwZWxpbmVzIGxwIE9OIGxwLmlkOjp0ZXh0ID0gci5waXBlbGluZV9pZCBBTkQgbHAuZGVsZXRlZF9hdCBJUyBOVUxMXG4gICAgICAgICBXSEVSRSAke2RlY2xhcmVkTWF0Y2h9XG4gICAgICAgIFVOSU9OIEFMTFxuICAgICAgICBTRUxFQ1QgbS5waXBlbGluZV9pZDo6dGV4dCwgbS5vcmdfaWQsICdkZXBsb3llZCcsIG0uc3RhZ2VfbmFtZSB8fCAnLycgfHwgbS5hY3Rpb25fbmFtZVxuICAgICAgICAgIEZST00gcGlwZWxpbmVfc3RlcF9tYW5pZmVzdHMgbSBXSEVSRSAke2RlcGxveWVkTWF0Y2h9XG4gICAgICAgIFVOSU9OIEFMTFxuICAgICAgICBTRUxFQ1QgZS5waXBlbGluZV9pZCwgZS5vcmdfaWQsICdleHBvc3VyZScsIE5VTExcbiAgICAgICAgICBGUk9NIHBsdWdpbl92dWxuX2V4cG9zdXJlIGUgV0hFUkUgJHtleHBvc3VyZU1hdGNofSBBTkQgZS5zb3VyY2UgPSAnZGVwbG95ZWQnIEFORCBlLmZpeGVkX2F0IElTIE5VTExcbiAgICAgICkgeFxuICAgICAgTEVGVCBKT0lOIHBpcGVsaW5lcyBwIE9OIHAuaWQ6OnRleHQgPSB4LnBpcGVsaW5lX2lkXG4gICAgIEdST1VQIEJZIHgucGlwZWxpbmVfaWQsIHgub3JnX2lkLCB4LnNvdXJjZSwgcC5waXBlbGluZV9uYW1lLCBwLmlkLCBwLmRlbGV0ZWRfYXRcbiAgICAgT1JERVIgQlkgeC5vcmdfaWQsIHgucGlwZWxpbmVfaWQsIHguc291cmNlXG4gIGApKTtcbiAgcmV0dXJuIHJvd3MubWFwKChyKSA9PiAoe1xuICAgIHBpcGVsaW5lSWQ6IHIucGlwZWxpbmVfaWQsXG4gICAgcGlwZWxpbmVOYW1lOiByLnBpcGVsaW5lX25hbWUgPz8gbnVsbCxcbiAgICBvcmdJZDogci5vcmdfaWQsXG4gICAgc291cmNlOiByLnNvdXJjZSxcbiAgICBwaXBlbGluZURlbGV0ZWQ6IHIuZGVsZXRlZCA9PT0gdHJ1ZSxcbiAgICBzdGVwczogci5zdGVwcyA/PyBbXSxcbiAgfSkpO1xufVxuXG4vKiogRGlzdGluY3QgcGlwZWxpbmVzIGFtb25nIGByZWZzYCAoYSBwaXBlbGluZSBib3RoIGRlY2xhcmVkIGFuZCBkZXBsb3llZCBjb3VudHMgb25jZSkuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzdGluY3RQaXBlbGluZXMocmVmczogcmVhZG9ubHkgVmVyc2lvblJlZmVyZW5jZVtdKTogQXJyYXk8eyBwaXBlbGluZUlkOiBzdHJpbmc7IHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDsgb3JnSWQ6IHN0cmluZzsgc291cmNlczogc3RyaW5nW107IHBpcGVsaW5lRGVsZXRlZDogYm9vbGVhbjsgc3RlcHM6IHN0cmluZ1tdIH0+IHtcbiAgY29uc3QgYnlJZCA9IG5ldyBNYXA8c3RyaW5nLCB7IHBpcGVsaW5lSWQ6IHN0cmluZzsgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsOyBvcmdJZDogc3RyaW5nOyBzb3VyY2VzOiBzdHJpbmdbXTsgcGlwZWxpbmVEZWxldGVkOiBib29sZWFuOyBzdGVwczogc3RyaW5nW10gfT4oKTtcbiAgZm9yIChjb25zdCByIG9mIHJlZnMpIHtcbiAgICBjb25zdCBlID0gYnlJZC5nZXQoci5waXBlbGluZUlkKSA/PyB7IHBpcGVsaW5lSWQ6IHIucGlwZWxpbmVJZCwgcGlwZWxpbmVOYW1lOiByLnBpcGVsaW5lTmFtZSwgb3JnSWQ6IHIub3JnSWQsIHNvdXJjZXM6IFtdLCBwaXBlbGluZURlbGV0ZWQ6IHIucGlwZWxpbmVEZWxldGVkLCBzdGVwczogW10gfTtcbiAgICBpZiAoIWUuc291cmNlcy5pbmNsdWRlcyhyLnNvdXJjZSkpIGUuc291cmNlcy5wdXNoKHIuc291cmNlKTtcbiAgICBlLnN0ZXBzID0gWy4uLm5ldyBTZXQoWy4uLmUuc3RlcHMsIC4uLnIuc3RlcHNdKV07XG4gICAgYnlJZC5zZXQoci5waXBlbGluZUlkLCBlKTtcbiAgfVxuICByZXR1cm4gWy4uLmJ5SWQudmFsdWVzKCldO1xufVxuXG4vKipcbiAqIFRoZSBpbWFnZSBkaWdlc3RzIGFuIG9yZydzIG5hbWVzcGFjZSBzdGlsbCBuZWVkczogZXZlcnkgYHBsdWdpbnNgIHJvdydzXG4gKiBkaWdlc3QgKGFjdGl2ZSwgaW5hY3RpdmUgb3Igc29mdC1kZWxldGVkIOKAlCBhIHRvbWJzdG9uZSBpcyByZXN0b3JhYmxlIHVudGlsXG4gKiBwdXJnZWQsIGFuZCB0aGUgcHVyZ2UgaXRzZWxmIGlzIGd1YXJkZWQpIHBsdXMgZXZlcnkgZGlnZXN0IGEgcGlwZWxpbmUgb2YgdGhlXG4gKiBvcmcgb3IgaXRzIHRlYW1zIGRlY2xhcmVzLCBydW5zIG9yIGhhcyBhbiBvcGVuIGRlcGxveWVkIGV4cG9zdXJlIG9uLiBXaGF0IHRoZVxuICogaW1hZ2UgcmVnaXN0cnkncyBhZ2UgR0MgY29uc3VsdHMgYmVmb3JlIGRlbGV0aW5nIGFueXRoaW5nIGluIGBvcmctPGlkPi8qYC5cbiAqIEVsZXZhdGVkIHJlYWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcmdJbWFnZURpZ2VzdHNJblVzZShvcmdJZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBvcmcgPSBvcmdJZC50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gZXhlY3V0ZVJvd3M8eyBkOiBzdHJpbmcgfT4odHgsIHNxbGBcbiAgICBTRUxFQ1QgRElTVElOQ1QgZCBGUk9NIChcbiAgICAgIFNFTEVDVCBpbWFnZV9kaWdlc3QgQVMgZCBGUk9NIHBsdWdpbnMgV0hFUkUgbG93ZXIob3JnX2lkKSA9ICR7b3JnfSBBTkQgaW1hZ2VfZGlnZXN0IElTIE5PVCBOVUxMXG4gICAgICBVTklPTiBTRUxFQ1Qgci5yZXNvbHZlZF9kaWdlc3QgRlJPTSBwaXBlbGluZV9wbHVnaW5fcmVzb2x1dGlvbiByXG4gICAgICAgICAgICAgIFdIRVJFIHIucmVzb2x2ZWRfZGlnZXN0IElTIE5PVCBOVUxMIEFORCAobG93ZXIoci5vcmdfaWQpID0gJHtvcmd9IE9SIGxvd2VyKHIucm9vdF9vcmdfaWQpID0gJHtvcmd9KVxuICAgICAgVU5JT04gU0VMRUNUIG0uaW1hZ2VfZGlnZXN0IEZST00gcGlwZWxpbmVfc3RlcF9tYW5pZmVzdHMgbVxuICAgICAgICAgICAgICBXSEVSRSBtLmltYWdlX2RpZ2VzdCBJUyBOT1QgTlVMTCBBTkQgbS5pbWFnZV9kaWdlc3QgSU4gKFNFTEVDVCBpbWFnZV9kaWdlc3QgRlJPTSBwbHVnaW5zIFdIRVJFIGxvd2VyKG9yZ19pZCkgPSAke29yZ30gQU5EIGltYWdlX2RpZ2VzdCBJUyBOT1QgTlVMTClcbiAgICAgIFVOSU9OIFNFTEVDVCBtLmltYWdlX2RpZ2VzdCBGUk9NIHBpcGVsaW5lX3N0ZXBfbWFuaWZlc3RzIG0gV0hFUkUgbS5pbWFnZV9kaWdlc3QgSVMgTk9UIE5VTEwgQU5EIGxvd2VyKG0ub3JnX2lkKSA9ICR7b3JnfVxuICAgICAgVU5JT04gU0VMRUNUIGUuaW1hZ2VfZGlnZXN0IEZST00gcGx1Z2luX3Z1bG5fZXhwb3N1cmUgZVxuICAgICAgICAgICAgICBXSEVSRSBlLmltYWdlX2RpZ2VzdCBJUyBOT1QgTlVMTCBBTkQgZS5zb3VyY2UgPSAnZGVwbG95ZWQnIEFORCBlLmZpeGVkX2F0IElTIE5VTEwgQU5EIGxvd2VyKGUub3JnX2lkKSA9ICR7b3JnfVxuICAgICkgeCBXSEVSRSBkIElTIE5PVCBOVUxMXG4gIGApKTtcbiAgcmV0dXJuIHJvd3MubWFwKChyKSA9PiByLmQpO1xufVxuIl19
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi1yZWZlcmVuY2VzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3ZlcnNpb24tcmVmZXJlbmNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUVILE9BQU8sRUFDTCxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSxhQUFhLEVBQUUseUJBQXlCLEVBQUUsYUFBYSxHQUN4RyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxHQUFHLEVBQVksTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RCwyRUFBMkU7QUFDM0UsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdGLE1BQU0sbUJBQW1CLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBRXhEOzs7OztHQUtHO0FBQ0gsU0FBUyx3QkFBd0IsQ0FBQyxJQUE2QztJQUM3RSwyRUFBMkU7SUFDM0UsdUVBQXVFO0lBQ3ZFLE9BQU8sR0FBRyxDQUFBLGtCQUFrQixJQUFJLENBQUMsS0FBSyxPQUFPLG1CQUFtQixRQUFRLElBQUksQ0FBQyxJQUFJLFFBQVEsaUJBQWlCO2dGQUM1QixpQkFBaUIsNEJBQTRCLElBQUksQ0FBQyxPQUFPOzs7NENBRzdGLGlCQUFpQiw4QkFBOEIsSUFBSSxDQUFDLE9BQU87Z0ZBQ3ZCLGlCQUFpQiw0QkFBNEIsSUFBSSxDQUFDLE9BQU87NEdBQzdCLENBQUM7QUFDN0csQ0FBQztBQWFELCtG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QyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogV2hpY2ggcGlwZWxpbmVzIHN0aWxsIFJFRkVSRU5DRSBhIHBsdWdpbiB2ZXJzaW9uIG9yIGltYWdlIOKAlCB0aGUgb25lIHJ1bGUgZXZlcnlcbiAqIHJlbW92YWwgcGF0aCBhc2tzIGJlZm9yZSBpdCBkZWxldGVzIGFueXRoaW5nOiBhbiBvcmcgcGx1Z2luIGRlbGV0ZSAoZm9yY2VkIG9yXG4gKiBub3QpLCBhIGJ1bGsgZGVsZXRlLCBhIHRvbWJzdG9uZSBwdXJnZSAobWFudWFsIG9yIHRoZSByZXRlbnRpb24gc3dlZXApLCB0aGVcbiAqIGltYWdlIHJlZ2lzdHJ5J3MgYWdlIEdDLCB0aGUgbGlzdGluZyBpbWFnZSBHQy5cbiAqXG4gKiBUSEUgUlVMRTogYSB2ZXJzaW9uIChvciBpdHMgaW1hZ2UpIHRoYXQgYW55IHBpcGVsaW5lIHJlZmVyZW5jZXMgY2Fubm90IGJlXG4gKiBkZWxldGVkIHVudGlsIG5vIHBpcGVsaW5lIGRvZXMg4oCUIHdoYXRldmVyIGl0cyB2dWxuZXJhYmlsaXR5IHN0YXRlLiBBXG4gKiB2dWxuZXJhYmxlIGltYWdlIGlzIHRoZSBXT1JTVCB0aGluZyB0byBkZWxldGUgb3V0IGZyb20gdW5kZXIgYSBwaXBlbGluZTogdGhlXG4gKiBuZXh0IHJ1biBmYWlscyB0byBwdWxsLCBhbmQgdGhlIG93bmVycyBsZWFybiBhYm91dCB0aGUgQ1ZFIGZyb20gYW4gb3V0YWdlLlxuICogVnVsbmVyYWJpbGl0eSBjb25zZXF1ZW5jZXMgYXJlIGdyYWRlZCB3YXJuaW5ncyBhbmQgbm90aWZpY2F0aW9ucywgbmV2ZXIgcmVtb3ZhbC5cbiAqXG4gKiBBIHJlZmVyZW5jZSBpcyBhbnkgb2Y6XG4gKiAgLSBgZGVjbGFyZWRgIOKAlCBhIExJVkUgcGlwZWxpbmUncyBjb25maWcgcmVzb2x2ZXMgdG8gaXQgKGBwaXBlbGluZV9wbHVnaW5fcmVzb2x1dGlvbmApO1xuICogIC0gYGRlcGxveWVkYCDigJQgYSBwaXBlbGluZSdzIGxhc3QgZGVwbG95IHJlY29yZGVkIGl0IChgcGlwZWxpbmVfc3RlcF9tYW5pZmVzdHNgKSxcbiAqICAgIElOQ0xVRElORyBhIHNvZnQtZGVsZXRlZCBwaXBlbGluZTogaXRzIENvZGVQaXBlbGluZSBzdGlsbCBydW5zIHRoZSBpbWFnZTtcbiAqICAtIGBleHBvc3VyZWAg4oCUIGFuIG9wZW4gREVQTE9ZRUQgZXhwb3N1cmUgc3RpbGwgbmFtZXMgaXQgKHRoZSBzYW1lIFwic3RpbGwgcnVuc1xuICogICAgaXRcIiBmYWN0LCBrZXB0IHdoZW4gYSBtYW5pZmVzdCBpcyBnb25lKS5cbiAqXG4gKiBNYXRjaGVkIGJ5IGltYWdlIGRpZ2VzdCB3aGVuIHRoZSB2ZXJzaW9uIGhhcyBvbmUgKGEgdGVhbSBydW5uaW5nIGl0cyBwYXJlbnQnc1xuICogcGx1Z2luLCBvciBhbm90aGVyIG9yZydzIGluc3RhbGwsIHBpbnMgdGhlIHNhbWUgZGlnZXN0KSwgZWxzZSBieSBuYW1lICtcbiAqIHZlcnNpb24gd2l0aGluIHRoZSBvd25lciBvcmcgYW5kIGl0cyB0ZWFtcy5cbiAqXG4gKiBBIE1BTkFHRUQgVE9PTENIQUlOIGhhbGYgKHRoZSBzeXN0ZW0gb3JnJ3MgYHBpcGVsaW5lLWJvb3RzdHJhcGAgLyBgY2RrLXN5bnRoYCxcbiAqIGRvY3MvcGxhbnMvYm9vdHN0cmFwLWltYWdlLXZlcnNpb25pbmcubWQgwqc0L8KnNSkgaXMgcmVmZXJlbmNlZCB3aGVuZXZlciBpdHNcbiAqIFJFTEVBU0UgaXM6IGEgcGlwZWxpbmUgZGVwbG95aW5nIG9yIGRlY2xhcmluZyBFSVRIRVIgaGFsZiBvZiB0aGUgc2FtZSB2ZXJzaW9uXG4gKiByZWZlcmVuY2VzIGJvdGguIEEgcGlwZWxpbmUgdGhhdCBvbmx5IHJ1bnMgdGhlIHJlbGVhc2UncyBidWlsZCBpbWFnZSAodGhlXG4gKiBtYW5pZmVzdCdzIG5vbi1zdGVwIGBidWlsZC1pbWFnZWAgcm93KSBzdGlsbCBob2xkcyBpdHMgc3ludGggaGFsZiwgYW5kIHRoZVxuICogcmV2ZXJzZSDigJQgdGhlIHJlbGVhc2UgaXMgb25lIHVuaXQsIGNyZWF0ZWQsIGRlbGV0ZWQgYW5kIHB1cmdlZCB0b2dldGhlci5cbiAqL1xuXG5pbXBvcnQge1xuICBCVUlMRF9JTUFHRV9TVEVQX0tFWSwgaXNNYW5hZ2VkVG9vbGNoYWluUGx1Z2luLCBpc1N5c3RlbU9yZ0lkLCBNQU5BR0VEX1RPT0xDSEFJTl9QTFVHSU5TLCBTWVNURU1fT1JHX0lELFxufSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBzcWwsIHR5cGUgU1FMIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgZXhlY3V0ZVJvd3MgfSBmcm9tICcuLi9kYXRhYmFzZS9wZy1yZXN1bHQuanMnO1xuaW1wb3J0IHsgd2l0aFRlbmFudFR4IH0gZnJvbSAnLi4vZGF0YWJhc2UvdGVuYW5jeS5qcyc7XG5cbi8qKiBUaGUgbWFuYWdlZCB0b29sY2hhaW4gbmFtZXMgYXMgYW4gU1FMIGxpc3QgKGNvbnN0YW50cywgbmV2ZXIgaW5wdXQpLiAqL1xuY29uc3QgTUFOQUdFRF9OQU1FU19TUUwgPSBzcWwucmF3KE1BTkFHRURfVE9PTENIQUlOX1BMVUdJTlMubWFwKChuKSA9PiBgJyR7bn0nYCkuam9pbignLCAnKSk7XG5jb25zdCBTWVNURU1fT1JHX0lEX0xPV0VSID0gU1lTVEVNX09SR19JRC50b0xvd2VyQ2FzZSgpO1xuXG4vKipcbiAqIFwiVGhpcyByb3cgaXMgYSByZWxlYXNlIGhhbGYgd2hvc2UgUkVMRUFTRSBzb21lIHBpcGVsaW5lIHJlZmVyZW5jZXNcIjogYVxuICogc3lzdGVtLW9yZyBtYW5hZ2VkIHJvdywgYW5kIGEgbWFuaWZlc3QgLyByZXNvbHV0aW9uIC8gb3BlbiBkZXBsb3llZCBleHBvc3VyZVxuICogbmFtaW5nIGVpdGhlciBoYWxmIGF0IGl0cyB2ZXJzaW9uLiBNYW5hZ2VkIG5hbWVzIGFyZSByZXNlcnZlZCB0byB0aGUgc3lzdGVtXG4gKiBvcmcsIHNvIGEgcHVibGlzaGVyLWxlc3Mgcm93IHdpdGggb25lIElTIHRoYXQgcmVsZWFzZSdzLlxuICovXG5mdW5jdGlvbiBtYW5hZ2VkUmVsZWFzZVJlZmVyZW5jZWQoY29sczogeyBuYW1lOiBTUUw7IHZlcnNpb246IFNRTDsgb3JnSWQ6IFNRTCB9KTogU1FMIHtcbiAgLy8gQ09BTEVTQ0U6IGEgY2FsbGVyIHBhc3NpbmcgTlVMTCBjb2x1bW5zICh0aGUgbGlzdGluZyBpbWFnZSBHQykgbXVzdCByZWFkXG4gIC8vIEZBTFNFIGhlcmUsIG5ldmVyIE5VTEwg4oCUIGBOT1QgTlVMTGAgd291bGQgc2lsZW50bHkga2VlcCBldmVyeSBpbWFnZS5cbiAgcmV0dXJuIHNxbGBDT0FMRVNDRShsb3dlcigke2NvbHMub3JnSWR9KSA9ICR7U1lTVEVNX09SR19JRF9MT1dFUn0gQU5EICR7Y29scy5uYW1lfSBJTiAoJHtNQU5BR0VEX05BTUVTX1NRTH0pIEFORCAoXG4gICAgICBFWElTVFMgKFNFTEVDVCAxIEZST00gcGlwZWxpbmVfc3RlcF9tYW5pZmVzdHMgbSBXSEVSRSBtLnBsdWdpbl9uYW1lIElOICgke01BTkFHRURfTkFNRVNfU1FMfSkgQU5EIG0ucGx1Z2luX3ZlcnNpb24gPSAke2NvbHMudmVyc2lvbn1cbiAgICAgICAgICAgICAgICBBTkQgbS5wbHVnaW5fcHVibGlzaGVyIElTIE5VTEwpXG4gICAgICBPUiBFWElTVFMgKFNFTEVDVCAxIEZST00gcGlwZWxpbmVfcGx1Z2luX3Jlc29sdXRpb24gciBKT0lOIHBpcGVsaW5lcyBscCBPTiBscC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWQgQU5EIGxwLmRlbGV0ZWRfYXQgSVMgTlVMTFxuICAgICAgICAgICAgICAgICAgV0hFUkUgci5wbHVnaW5fbmFtZSBJTiAoJHtNQU5BR0VEX05BTUVTX1NRTH0pIEFORCByLnJlc29sdmVkX3ZlcnNpb24gPSAke2NvbHMudmVyc2lvbn0gQU5EIHIucGx1Z2luX3B1Ymxpc2hlciBJUyBOVUxMKVxuICAgICAgT1IgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIHBsdWdpbl92dWxuX2V4cG9zdXJlIGUgV0hFUkUgZS5wbHVnaW5fbmFtZSBJTiAoJHtNQU5BR0VEX05BTUVTX1NRTH0pIEFORCBlLnBsdWdpbl92ZXJzaW9uID0gJHtjb2xzLnZlcnNpb259XG4gICAgICAgICAgICAgICAgICBBTkQgZS5wbHVnaW5fcHVibGlzaGVyIElTIE5VTEwgQU5EIGUuc291cmNlID0gJ2RlcGxveWVkJyBBTkQgZS5maXhlZF9hdCBJUyBOVUxMKSksIGZhbHNlKWA7XG59XG5cbi8qKiBBIHZlcnNpb24gLyBpbWFnZSB3aG9zZSByZWZlcmVuY2VzIGFyZSB3YW50ZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25SZWZlcmVuY2VUYXJnZXQge1xuICBwbHVnaW5OYW1lOiBzdHJpbmc7XG4gIHBsdWdpblZlcnNpb246IHN0cmluZztcbiAgaW1hZ2VEaWdlc3Q/OiBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIG93bmluZyBvcmcgb2YgYW4gb3JnIHBsdWdpbiAoaXRzIHRlYW1zIGNvdW50IHRvbyk7IG9taXR0ZWQgZm9yIGEgbGlzdGluZyB2ZXJzaW9uLiAqL1xuICBvd25lck9yZ0lkPzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRoZSBsaXN0aW5nJ3MgcHVibGlzaGVyIGhhbmRsZSAoYSBsaXN0aW5nIHZlcnNpb24pOyBudWxsL29taXR0ZWQgZm9yIGFuIG9yZyBwbHVnaW4uICovXG4gIHB1Ymxpc2hlcj86IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKiBXaGV0aGVyIGB0YXJnZXRgIGlzIGEgbWFuYWdlZCB0b29sY2hhaW4gaGFsZiAobWF0Y2hlZCByZWxlYXNlLXdpZGUsIHNlZSB0aGUgbW9kdWxlIGRvYykuICovXG5mdW5jdGlvbiBpc01hbmFnZWRSZWxlYXNlVGFyZ2V0KHRhcmdldDogVmVyc2lvblJlZmVyZW5jZVRhcmdldCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNNYW5hZ2VkVG9vbGNoYWluUGx1Z2luKHRhcmdldC5wbHVnaW5OYW1lKSAmJiAhdGFyZ2V0LnB1Ymxpc2hlciAmJiBpc1N5c3RlbU9yZ0lkKHRhcmdldC5vd25lck9yZ0lkID8/ICcnKTtcbn1cblxuLyoqIE9uZSBwaXBlbGluZSByZWZlcmVuY2luZyBhIHZlcnNpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25SZWZlcmVuY2Uge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgb3JnSWQ6IHN0cmluZztcbiAgc291cmNlOiAnZGVjbGFyZWQnIHwgJ2RlcGxveWVkJyB8ICdleHBvc3VyZSc7XG4gIC8qKiBUaGUgcGlwZWxpbmUgaXMgc29mdC1kZWxldGVkIChzdGlsbCBkZXBsb3llZDogaXRzIG1hbmlmZXN0IG9yIGV4cG9zdXJlIHJlbWFpbnMpLiAqL1xuICBwaXBlbGluZURlbGV0ZWQ6IGJvb2xlYW47XG4gIHN0ZXBzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgU1FMIHByZWRpY2F0ZSBcInNvbWUgcGlwZWxpbmUgcmVmZXJlbmNlcyB0aGlzIHJvdydzIGltYWdlIC8gdmVyc2lvblwiLCBvdmVyXG4gKiBhIGBwbHVnaW5zYC1zaGFwZWQgcm93J3MgY29sdW1ucyDigJQgdGhlIHB1cmdlIGd1YXJkJ3MgZm9ybSBvZlxuICoge0BsaW5rIGZpbmRWZXJzaW9uUmVmZXJlbmNlc30gKHNhbWUgdGhyZWUgc291cmNlcywgc2FtZSBtYXRjaGluZykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJzaW9uUmVmZXJlbmNlZFByZWRpY2F0ZShjb2xzOiB7IGRpZ2VzdDogU1FMOyBuYW1lOiBTUUw7IHZlcnNpb246IFNRTDsgb3JnSWQ6IFNRTCB9KTogU1FMIHtcbiAgcmV0dXJuIHNxbGAoXG4gICAgJHttYW5hZ2VkUmVsZWFzZVJlZmVyZW5jZWQoY29scyl9IE9SXG4gICAgKCR7Y29scy5kaWdlc3R9IElTIE5PVCBOVUxMIEFORCAoXG4gICAgICBFWElTVFMgKFNFTEVDVCAxIEZST00gcGlwZWxpbmVfc3RlcF9tYW5pZmVzdHMgbSBXSEVSRSBtLmltYWdlX2RpZ2VzdCA9ICR7Y29scy5kaWdlc3R9KVxuICAgICAgT1IgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uIHIgSk9JTiBwaXBlbGluZXMgcCBPTiBwLmlkOjp0ZXh0ID0gci5waXBlbGluZV9pZCBBTkQgcC5kZWxldGVkX2F0IElTIE5VTExcbiAgICAgICAgICAgICAgICAgIFdIRVJFIHIucmVzb2x2ZWRfZGlnZXN0ID0gJHtjb2xzLmRpZ2VzdH0pXG4gICAgICBPUiBFWElTVFMgKFNFTEVDVCAxIEZST00gcGx1Z2luX3Z1bG5fZXhwb3N1cmUgZSBXSEVSRSBlLmltYWdlX2RpZ2VzdCA9ICR7Y29scy5kaWdlc3R9IEFORCBlLnNvdXJjZSA9ICdkZXBsb3llZCcgQU5EIGUuZml4ZWRfYXQgSVMgTlVMTCkpKVxuICAgIE9SICgke2NvbHMuZGlnZXN0fSBJUyBOVUxMIEFORCAoXG4gICAgICBFWElTVFMgKFNFTEVDVCAxIEZST00gcGlwZWxpbmVfc3RlcF9tYW5pZmVzdHMgbSBXSEVSRSBtLnBsdWdpbl9uYW1lID0gJHtjb2xzLm5hbWV9IEFORCBtLnBsdWdpbl92ZXJzaW9uID0gJHtjb2xzLnZlcnNpb259XG4gICAgICAgICAgICAgICAgQU5EIG0ucGx1Z2luX3B1Ymxpc2hlciBJUyBOVUxMIEFORCBsb3dlcihtLm9yZ19pZCkgPSBsb3dlcigke2NvbHMub3JnSWR9KSlcbiAgICAgIE9SIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBwaXBlbGluZV9wbHVnaW5fcmVzb2x1dGlvbiByIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWQgQU5EIHAuZGVsZXRlZF9hdCBJUyBOVUxMXG4gICAgICAgICAgICAgICAgICBXSEVSRSByLnBsdWdpbl9uYW1lID0gJHtjb2xzLm5hbWV9IEFORCByLnJlc29sdmVkX3ZlcnNpb24gPSAke2NvbHMudmVyc2lvbn0gQU5EIHIucGx1Z2luX3B1Ymxpc2hlciBJUyBOVUxMXG4gICAgICAgICAgICAgICAgICAgIEFORCAobG93ZXIoci5vcmdfaWQpID0gbG93ZXIoJHtjb2xzLm9yZ0lkfSkgT1IgbG93ZXIoci5yb290X29yZ19pZCkgPSBsb3dlcigke2NvbHMub3JnSWR9KSkpKSlcbiAgKWA7XG59XG5cbi8qKlxuICogRXZlcnkgcGlwZWxpbmUgcmVmZXJlbmNpbmcgYHRhcmdldGAgKHNlZSB0aGUgbW9kdWxlIGRvYyksIGFjcm9zcyBvcmdzIOKAlCBzbyBpdFxuICogbXVzdCBydW4gd2l0aCBhIHNjb3BlIHRoYXQgY2FuIHJlYWQgZXZlcnkgb3JnJ3Mgcm93cyAoZWxldmF0ZWQpLiBUaGUgcmVzdWx0XG4gKiBuYW1lcyBvdGhlciBvcmdzJyBwaXBlbGluZXM7IGNhbGxlcnMgc2hvdyB0aGUgT1dORVIgb25seSBjb3VudHMgYW5kIGl0cyBvd25cbiAqIG9yZydzIHBpcGVsaW5lcywgYW5kIG5vdGlmeSBlYWNoIHJlZmVyZW5jaW5nIG9yZyBhYm91dCBpdHMgb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZFZlcnNpb25SZWZlcmVuY2VzKFxuICB0YXJnZXQ6IFZlcnNpb25SZWZlcmVuY2VUYXJnZXQsXG4gIHJ1bjogPFQ+KGZuOiAodHg6IFBhcmFtZXRlcnM8UGFyYW1ldGVyczx0eXBlb2Ygd2l0aFRlbmFudFR4PlswXT5bMF0pID0+IFByb21pc2U8VD4pID0+IFByb21pc2U8VD4gPSB3aXRoVGVuYW50VHgsXG4pOiBQcm9taXNlPFZlcnNpb25SZWZlcmVuY2VbXT4ge1xuICBjb25zdCBkaWdlc3QgPSB0YXJnZXQuaW1hZ2VEaWdlc3QgPz8gbnVsbDtcbiAgY29uc3Qgb3duZXIgPSB0YXJnZXQub3duZXJPcmdJZD8udG9Mb3dlckNhc2UoKSA/PyBudWxsO1xuICBjb25zdCBtYW5hZ2VkID0gaXNNYW5hZ2VkUmVsZWFzZVRhcmdldCh0YXJnZXQpO1xuICAvLyBBIG1hbmFnZWQgaGFsZjogZWl0aGVyIGhhbGYgb2YgdGhlIHJlbGVhc2UsIGF0IGl0cyB2ZXJzaW9uIChtb2R1bGUgZG9jKS5cbiAgY29uc3QgcmVsZWFzZSA9IChhbGlhczogJ3InIHwgJ20nIHwgJ2UnLCB2ZXJzaW9uQ29sOiBzdHJpbmcpID0+IChtYW5hZ2VkXG4gICAgPyBzcWxgIE9SICgke3NxbC5yYXcoYCR7YWxpYXN9LnBsdWdpbl9uYW1lYCl9IElOICgke01BTkFHRURfTkFNRVNfU1FMfSkgQU5EICR7c3FsLnJhdyhgJHthbGlhc30uJHt2ZXJzaW9uQ29sfWApfSA9ICR7dGFyZ2V0LnBsdWdpblZlcnNpb259IEFORCAke3NxbC5yYXcoYCR7YWxpYXN9LnBsdWdpbl9wdWJsaXNoZXJgKX0gSVMgTlVMTClgXG4gICAgOiBzcWxgYCk7XG4gIGNvbnN0IGRlY2xhcmVkTWF0Y2ggPSBkaWdlc3RcbiAgICA/IHNxbGByLnJlc29sdmVkX2RpZ2VzdCA9ICR7ZGlnZXN0fWBcbiAgICA6IHNxbGByLnBsdWdpbl9uYW1lID0gJHt0YXJnZXQucGx1Z2luTmFtZX0gQU5EIHIucmVzb2x2ZWRfdmVyc2lvbiA9ICR7dGFyZ2V0LnBsdWdpblZlcnNpb259XG4gICAgICAgICAgQU5EICR7dGFyZ2V0LnB1Ymxpc2hlciA/IHNxbGByLnBsdWdpbl9wdWJsaXNoZXIgPSAke3RhcmdldC5wdWJsaXNoZXJ9YCA6IHNxbGByLnBsdWdpbl9wdWJsaXNoZXIgSVMgTlVMTCBBTkQgKGxvd2VyKHIub3JnX2lkKSA9ICR7b3duZXJ9IE9SIGxvd2VyKHIucm9vdF9vcmdfaWQpID0gJHtvd25lcn0pYH1gO1xuICBjb25zdCBkZXBsb3llZE1hdGNoID0gZGlnZXN0XG4gICAgPyBzcWxgbS5pbWFnZV9kaWdlc3QgPSAke2RpZ2VzdH1gXG4gICAgOiBzcWxgbS5wbHVnaW5fbmFtZSA9ICR7dGFyZ2V0LnBsdWdpbk5hbWV9IEFORCBtLnBsdWdpbl92ZXJzaW9uID0gJHt0YXJnZXQucGx1Z2luVmVyc2lvbn1cbiAgICAgICAgICBBTkQgJHt0YXJnZXQucHVibGlzaGVyID8gc3FsYG0ucGx1Z2luX3B1Ymxpc2hlciA9ICR7dGFyZ2V0LnB1Ymxpc2hlcn1gIDogc3FsYG0ucGx1Z2luX3B1Ymxpc2hlciBJUyBOVUxMIEFORCBsb3dlcihtLm9yZ19pZCkgPSAke293bmVyfWB9YDtcbiAgY29uc3QgZXhwb3N1cmVNYXRjaCA9IGRpZ2VzdFxuICAgID8gc3FsYGUuaW1hZ2VfZGlnZXN0ID0gJHtkaWdlc3R9YFxuICAgIDogc3FsYGUucGx1Z2luX25hbWUgPSAke3RhcmdldC5wbHVnaW5OYW1lfSBBTkQgZS5wbHVnaW5fdmVyc2lvbiA9ICR7dGFyZ2V0LnBsdWdpblZlcnNpb259XG4gICAgICAgICAgQU5EICR7dGFyZ2V0LnB1Ymxpc2hlciA/IHNxbGBlLnBsdWdpbl9wdWJsaXNoZXIgPSAke3RhcmdldC5wdWJsaXNoZXJ9YCA6IHNxbGBlLnBsdWdpbl9wdWJsaXNoZXIgSVMgTlVMTCBBTkQgbG93ZXIoZS5vcmdfaWQpID0gJHtvd25lcn1gfWA7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCBydW4oKHR4KSA9PiBleGVjdXRlUm93czx7IHBpcGVsaW5lX2lkOiBzdHJpbmc7IG9yZ19pZDogc3RyaW5nOyBzb3VyY2U6IFZlcnNpb25SZWZlcmVuY2VbJ3NvdXJjZSddOyBwaXBlbGluZV9uYW1lOiBzdHJpbmcgfCBudWxsOyBkZWxldGVkOiBib29sZWFuOyBzdGVwczogc3RyaW5nW10gfCBudWxsIH0+KHR4LCBzcWxgXG4gICAgU0VMRUNUIHgucGlwZWxpbmVfaWQsIHgub3JnX2lkLCB4LnNvdXJjZSwgcC5waXBlbGluZV9uYW1lLCAocC5pZCBJUyBOVUxMIE9SIHAuZGVsZXRlZF9hdCBJUyBOT1QgTlVMTCkgQVMgZGVsZXRlZCxcbiAgICAgICAgICAgYXJyYXlfYWdnKERJU1RJTkNUIHguc3RlcCkgRklMVEVSIChXSEVSRSB4LnN0ZXAgSVMgTk9UIE5VTEwpIEFTIHN0ZXBzXG4gICAgICBGUk9NIChcbiAgICAgICAgU0VMRUNUIHIucGlwZWxpbmVfaWQsIHIub3JnX2lkLCAnZGVjbGFyZWQnIEFTIHNvdXJjZSxcbiAgICAgICAgICAgICAgIENBU0UgV0hFTiByLnN0YWdlX25hbWUgPSAnc3ludGgnIEFORCByLnN0ZXBfbmFtZSA9ICdzeW50aCcgVEhFTiAnc3ludGgnIEVMU0Ugci5zdGFnZV9uYW1lIHx8ICcvJyB8fCByLnN0ZXBfbmFtZSBFTkQgQVMgc3RlcFxuICAgICAgICAgIEZST00gcGlwZWxpbmVfcGx1Z2luX3Jlc29sdXRpb24gclxuICAgICAgICAgIEpPSU4gcGlwZWxpbmVzIGxwIE9OIGxwLmlkOjp0ZXh0ID0gci5waXBlbGluZV9pZCBBTkQgbHAuZGVsZXRlZF9hdCBJUyBOVUxMXG4gICAgICAgICBXSEVSRSAoJHtkZWNsYXJlZE1hdGNofSR7cmVsZWFzZSgncicsICdyZXNvbHZlZF92ZXJzaW9uJyl9KVxuICAgICAgICBVTklPTiBBTExcbiAgICAgICAgU0VMRUNUIG0ucGlwZWxpbmVfaWQ6OnRleHQsIG0ub3JnX2lkLCAnZGVwbG95ZWQnLFxuICAgICAgICAgICAgICAgQ0FTRSBXSEVOIG0uc3RlcF9rZXkgPSAke0JVSUxEX0lNQUdFX1NURVBfS0VZfSBUSEVOICR7QlVJTERfSU1BR0VfU1RFUF9LRVl9IEVMU0UgbS5zdGFnZV9uYW1lIHx8ICcvJyB8fCBtLmFjdGlvbl9uYW1lIEVORFxuICAgICAgICAgIEZST00gcGlwZWxpbmVfc3RlcF9tYW5pZmVzdHMgbSBXSEVSRSAoJHtkZXBsb3llZE1hdGNofSR7cmVsZWFzZSgnbScsICdwbHVnaW5fdmVyc2lvbicpfSlcbiAgICAgICAgVU5JT04gQUxMXG4gICAgICAgIFNFTEVDVCBlLnBpcGVsaW5lX2lkLCBlLm9yZ19pZCwgJ2V4cG9zdXJlJywgTlVMTFxuICAgICAgICAgIEZST00gcGx1Z2luX3Z1bG5fZXhwb3N1cmUgZSBXSEVSRSAoJHtleHBvc3VyZU1hdGNofSR7cmVsZWFzZSgnZScsICdwbHVnaW5fdmVyc2lvbicpfSkgQU5EIGUuc291cmNlID0gJ2RlcGxveWVkJyBBTkQgZS5maXhlZF9hdCBJUyBOVUxMXG4gICAgICApIHhcbiAgICAgIExFRlQgSk9JTiBwaXBlbGluZXMgcCBPTiBwLmlkOjp0ZXh0ID0geC5waXBlbGluZV9pZFxuICAgICBHUk9VUCBCWSB4LnBpcGVsaW5lX2lkLCB4Lm9yZ19pZCwgeC5zb3VyY2UsIHAucGlwZWxpbmVfbmFtZSwgcC5pZCwgcC5kZWxldGVkX2F0XG4gICAgIE9SREVSIEJZIHgub3JnX2lkLCB4LnBpcGVsaW5lX2lkLCB4LnNvdXJjZVxuICBgKSk7XG4gIHJldHVybiByb3dzLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiByLnBpcGVsaW5lX2lkLFxuICAgIHBpcGVsaW5lTmFtZTogci5waXBlbGluZV9uYW1lID8/IG51bGwsXG4gICAgb3JnSWQ6IHIub3JnX2lkLFxuICAgIHNvdXJjZTogci5zb3VyY2UsXG4gICAgcGlwZWxpbmVEZWxldGVkOiByLmRlbGV0ZWQgPT09IHRydWUsXG4gICAgc3RlcHM6IHIuc3RlcHMgPz8gW10sXG4gIH0pKTtcbn1cblxuLyoqIERpc3RpbmN0IHBpcGVsaW5lcyBhbW9uZyBgcmVmc2AgKGEgcGlwZWxpbmUgYm90aCBkZWNsYXJlZCBhbmQgZGVwbG95ZWQgY291bnRzIG9uY2UpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3RpbmN0UGlwZWxpbmVzKHJlZnM6IHJlYWRvbmx5IFZlcnNpb25SZWZlcmVuY2VbXSk6IEFycmF5PHsgcGlwZWxpbmVJZDogc3RyaW5nOyBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7IG9yZ0lkOiBzdHJpbmc7IHNvdXJjZXM6IHN0cmluZ1tdOyBwaXBlbGluZURlbGV0ZWQ6IGJvb2xlYW47IHN0ZXBzOiBzdHJpbmdbXSB9PiB7XG4gIGNvbnN0IGJ5SWQgPSBuZXcgTWFwPHN0cmluZywgeyBwaXBlbGluZUlkOiBzdHJpbmc7IHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDsgb3JnSWQ6IHN0cmluZzsgc291cmNlczogc3RyaW5nW107IHBpcGVsaW5lRGVsZXRlZDogYm9vbGVhbjsgc3RlcHM6IHN0cmluZ1tdIH0+KCk7XG4gIGZvciAoY29uc3QgciBvZiByZWZzKSB7XG4gICAgY29uc3QgZSA9IGJ5SWQuZ2V0KHIucGlwZWxpbmVJZCkgPz8geyBwaXBlbGluZUlkOiByLnBpcGVsaW5lSWQsIHBpcGVsaW5lTmFtZTogci5waXBlbGluZU5hbWUsIG9yZ0lkOiByLm9yZ0lkLCBzb3VyY2VzOiBbXSwgcGlwZWxpbmVEZWxldGVkOiByLnBpcGVsaW5lRGVsZXRlZCwgc3RlcHM6IFtdIH07XG4gICAgaWYgKCFlLnNvdXJjZXMuaW5jbHVkZXMoci5zb3VyY2UpKSBlLnNvdXJjZXMucHVzaChyLnNvdXJjZSk7XG4gICAgZS5zdGVwcyA9IFsuLi5uZXcgU2V0KFsuLi5lLnN0ZXBzLCAuLi5yLnN0ZXBzXSldO1xuICAgIGJ5SWQuc2V0KHIucGlwZWxpbmVJZCwgZSk7XG4gIH1cbiAgcmV0dXJuIFsuLi5ieUlkLnZhbHVlcygpXTtcbn1cblxuLyoqXG4gKiBUaGUgaW1hZ2UgZGlnZXN0cyBhbiBvcmcncyBuYW1lc3BhY2Ugc3RpbGwgbmVlZHM6IGV2ZXJ5IGBwbHVnaW5zYCByb3cnc1xuICogZGlnZXN0IChhY3RpdmUsIGluYWN0aXZlIG9yIHNvZnQtZGVsZXRlZCDigJQgYSB0b21ic3RvbmUgaXMgcmVzdG9yYWJsZSB1bnRpbFxuICogcHVyZ2VkLCBhbmQgdGhlIHB1cmdlIGl0c2VsZiBpcyBndWFyZGVkKSBwbHVzIGV2ZXJ5IGRpZ2VzdCBhIHBpcGVsaW5lIG9mIHRoZVxuICogb3JnIG9yIGl0cyB0ZWFtcyBkZWNsYXJlcywgcnVucyBvciBoYXMgYW4gb3BlbiBkZXBsb3llZCBleHBvc3VyZSBvbi4gV2hhdCB0aGVcbiAqIGltYWdlIHJlZ2lzdHJ5J3MgYWdlIEdDIGNvbnN1bHRzIGJlZm9yZSBkZWxldGluZyBhbnl0aGluZyBpbiBgb3JnLTxpZD4vKmAuXG4gKiBFbGV2YXRlZCByZWFkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3JnSW1hZ2VEaWdlc3RzSW5Vc2Uob3JnSWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3Qgb3JnID0gb3JnSWQudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IGV4ZWN1dGVSb3dzPHsgZDogc3RyaW5nIH0+KHR4LCBzcWxgXG4gICAgU0VMRUNUIERJU1RJTkNUIGQgRlJPTSAoXG4gICAgICBTRUxFQ1QgaW1hZ2VfZGlnZXN0IEFTIGQgRlJPTSBwbHVnaW5zIFdIRVJFIGxvd2VyKG9yZ19pZCkgPSAke29yZ30gQU5EIGltYWdlX2RpZ2VzdCBJUyBOT1QgTlVMTFxuICAgICAgVU5JT04gU0VMRUNUIHIucmVzb2x2ZWRfZGlnZXN0IEZST00gcGlwZWxpbmVfcGx1Z2luX3Jlc29sdXRpb24gclxuICAgICAgICAgICAgICBXSEVSRSByLnJlc29sdmVkX2RpZ2VzdCBJUyBOT1QgTlVMTCBBTkQgKGxvd2VyKHIub3JnX2lkKSA9ICR7b3JnfSBPUiBsb3dlcihyLnJvb3Rfb3JnX2lkKSA9ICR7b3JnfSlcbiAgICAgIFVOSU9OIFNFTEVDVCBtLmltYWdlX2RpZ2VzdCBGUk9NIHBpcGVsaW5lX3N0ZXBfbWFuaWZlc3RzIG1cbiAgICAgICAgICAgICAgV0hFUkUgbS5pbWFnZV9kaWdlc3QgSVMgTk9UIE5VTEwgQU5EIG0uaW1hZ2VfZGlnZXN0IElOIChTRUxFQ1QgaW1hZ2VfZGlnZXN0IEZST00gcGx1Z2lucyBXSEVSRSBsb3dlcihvcmdfaWQpID0gJHtvcmd9IEFORCBpbWFnZV9kaWdlc3QgSVMgTk9UIE5VTEwpXG4gICAgICBVTklPTiBTRUxFQ1QgbS5pbWFnZV9kaWdlc3QgRlJPTSBwaXBlbGluZV9zdGVwX21hbmlmZXN0cyBtIFdIRVJFIG0uaW1hZ2VfZGlnZXN0IElTIE5PVCBOVUxMIEFORCBsb3dlcihtLm9yZ19pZCkgPSAke29yZ31cbiAgICAgIFVOSU9OIFNFTEVDVCBlLmltYWdlX2RpZ2VzdCBGUk9NIHBsdWdpbl92dWxuX2V4cG9zdXJlIGVcbiAgICAgICAgICAgICAgV0hFUkUgZS5pbWFnZV9kaWdlc3QgSVMgTk9UIE5VTEwgQU5EIGUuc291cmNlID0gJ2RlcGxveWVkJyBBTkQgZS5maXhlZF9hdCBJUyBOVUxMIEFORCBsb3dlcihlLm9yZ19pZCkgPSAke29yZ31cbiAgICApIHggV0hFUkUgZCBJUyBOT1QgTlVMTFxuICBgKSk7XG4gIHJldHVybiByb3dzLm1hcCgocikgPT4gci5kKTtcbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import type { Visibility } from '@pipeline-builder/api-core';
1
+ import type { ComplianceCheckVerdict, ComplianceScanStatus, ComplianceScanTarget, ComplianceScanTrigger, RuleTarget, Visibility } from '@pipeline-builder/api-core';
2
2
  /**
3
3
  * Base filter interface containing common filter properties shared across all entity types.
4
4
  *
@@ -287,9 +287,9 @@ export interface ComplianceExemptionFilter {
287
287
  */
288
288
  export interface ComplianceAuditFilter {
289
289
  readonly orgId?: string;
290
- readonly target?: 'plugin' | 'pipeline';
290
+ readonly target?: RuleTarget;
291
291
  readonly action?: string;
292
- readonly result?: 'pass' | 'warn' | 'block';
292
+ readonly result?: ComplianceCheckVerdict;
293
293
  readonly scanId?: string;
294
294
  readonly dateFrom?: string;
295
295
  readonly dateTo?: string;
@@ -301,9 +301,9 @@ export interface ComplianceAuditFilter {
301
301
  */
302
302
  export interface ComplianceScanFilter {
303
303
  readonly orgId?: string;
304
- readonly target?: 'plugin' | 'pipeline' | 'all';
305
- readonly status?: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
306
- readonly triggeredBy?: 'manual' | 'scheduled' | 'rule-change' | 'rule-dry-run';
304
+ readonly target?: ComplianceScanTarget;
305
+ readonly status?: ComplianceScanStatus;
306
+ readonly triggeredBy?: ComplianceScanTrigger;
307
307
  readonly limit?: number;
308
308
  readonly offset?: number;
309
309
  }
@@ -1,4 +1,4 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  export {};
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZmlsdGVycy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvcXVlcnktZmlsdGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgVmlzaWJpbGl0eSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcblxuLyoqXG4gKiBCYXNlIGZpbHRlciBpbnRlcmZhY2UgY29udGFpbmluZyBjb21tb24gZmlsdGVyIHByb3BlcnRpZXMgc2hhcmVkIGFjcm9zcyBhbGwgZW50aXR5IHR5cGVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBmaWx0ZXI6IENvbW1vbkZpbHRlciA9IHtcbiAqICAgaWQ6ICcxMjMnLFxuICogICBvcmdJZDogJ215LW9yZycsXG4gKiAgIHZpc2liaWxpdHk6ICdwdWJsaWMnLFxuICogICBpc0RlZmF1bHQ6IHRydWUsXG4gKiAgIGlzQWN0aXZlOiB0cnVlXG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uRmlsdGVyIHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZW50aXR5XG4gICAqIENhbiBiZSBhIHNpbmdsZSBJRCBvciBhcnJheSBvZiBJRHMgZm9yIGJhdGNoIGZpbHRlcmluZ1xuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvLyAtLS0gVmlld2VyIGNvbnRleHQgKHNlcnZlci1zZXQsIE5FVkVSIGNsaWVudC1zdXBwbGllZCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIE9ubHkgZW50aXRpZXMgd2hvc2UgdmlzaWJpbGl0eSBwcmVkaWNhdGUgaGFzIGEgUEVSLVVTRVIgcnVuZyByZWFkIHRoZXNlIOKAlFxuICAvLyBwaXBlbGluZSB0ZW1wbGF0ZXMgKGBwcml2YXRlYCBpcyBhdXRob3Itb25seSkgYW5kIG1lc3NhZ2VzIChhIHBlci11c2VyXG4gIC8vIHRhcmdldGVkIHJvdyBpcyB2aXNpYmxlIG9ubHkgdG8gaXRzIHRhcmdldCkuIFRoZWlyIHNlcnZpY2VzIHN0YW1wIHRoZW0gZnJvbVxuICAvLyB0aGUgcmVxdWVzdCdzIGBUZW5hbnRDb250ZXh0YCB2aWEgYHdpdGhWaWV3ZXJDb250ZXh0YCwgc28gbm8gcm91dGUgb3IgcXVlcnlcbiAgLy8gc3RyaW5nIGNhbiBpbmplY3QgdGhlbS4gRXZlcnl0aGluZyBlbHNlIGlnbm9yZXMgdGhlbS5cbiAgLy9cbiAgLy8gQm90aCBmYWlsIENMT1NFRCB3aGVuIGFic2VudDogbm8gdmlld2VyIG1lYW5zIHRoZSBwZXItdXNlciBydW5nIG1hdGNoZXNcbiAgLy8gTk9USElORywgbmV2ZXIgZXZlcnl0aGluZy5cblxuICAvKiogQ2FsbGVyJ3MgdXNlciBpZCwgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBlbnRpdHkncyBwZXItdXNlciBjb2x1bW4uICovXG4gIHJlYWRvbmx5IHZpZXdlclVzZXJJZD86IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgdGhlIGNhbGxlciBpcyBhIHBsYXRmb3JtIHN1cGVyLWFkbWluIChzZWVzIGV2ZXJ5IHJ1bmcpLiAqL1xuICByZWFkb25seSB2aWV3ZXJJc1N1cGVyQWRtaW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcmdhbml6YXRpb24gaWRlbnRpZmllciB0byBmaWx0ZXIgZW50aXRpZXMgYnkgb3JnYW5pemF0aW9uXG4gICAqIENhbiBiZSBhIHNpbmdsZSBvcmcgSUQgb3IgYXJyYXkgZm9yIG11bHRpLW9yZyBmaWx0ZXJpbmdcbiAgICovXG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE5hcnJvdyB0byBvbmUgcnVuZyBvZiB0aGUgc2hhcmVkIHRocmVlLXJ1bmcgc2hhcmluZyBsYWRkZXIuIEFwcGxpZWQgV0lUSElOXG4gICAqIHdoYXQgdGhlIGNhbGxlciBjYW4gYWxyZWFkeSBzZWUg4oCUIG5ldmVyIHdpZGVucyBpdC5cbiAgICogQHNlZSBWaXNpYmlsaXR5XG4gICAqL1xuICByZWFkb25seSB2aXNpYmlsaXR5PzogVmlzaWJpbGl0eSB8IHN0cmluZztcblxuICAvKipcbiAgICogRmlsdGVyIGJ5IGRlZmF1bHQgc3RhdHVzXG4gICAqIC0gdHJ1ZTogT25seSBkZWZhdWx0IGVudGl0aWVzXG4gICAqIC0gZmFsc2U6IE9ubHkgbm9uLWRlZmF1bHQgZW50aXRpZXNcbiAgICogLSB1bmRlZmluZWQ6IEFsbCBlbnRpdGllc1xuICAgKi9cbiAgcmVhZG9ubHkgaXNEZWZhdWx0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRmlsdGVyIGJ5IGFjdGl2ZS9pbmFjdGl2ZSBzdGF0dXNcbiAgICogLSB0cnVlOiBPbmx5IGFjdGl2ZSBlbnRpdGllc1xuICAgKiAtIGZhbHNlOiBPbmx5IGluYWN0aXZlIGVudGl0aWVzXG4gICAqIC0gdW5kZWZpbmVkOiBBbGwgZW50aXRpZXNcbiAgICovXG4gIHJlYWRvbmx5IGlzQWN0aXZlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHJlc3VsdHMgdG8gcmV0dXJuXG4gICAqIEBtaW5pbXVtIDFcbiAgICogQG1heGltdW0gMTAwMFxuICAgKi9cbiAgcmVhZG9ubHkgbGltaXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiByZXN1bHRzIHRvIHNraXAgKGZvciBwYWdpbmF0aW9uKVxuICAgKiBAbWluaW11bSAwXG4gICAqL1xuICByZWFkb25seSBvZmZzZXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNvcnQgZmllbGQgYW5kIGRpcmVjdGlvblxuICAgKiBAZXhhbXBsZSBcIm5hbWU6YXNjXCIsIFwiY3JlYXRlZEF0OmRlc2NcIlxuICAgKi9cbiAgcmVhZG9ubHkgc29ydD86IHN0cmluZztcblxuICAvKipcbiAgICogRmlsdGVyIGJ5IGNhdGFsb2cgb3duZXIgKGRldmVsb3Blci1wb3J0YWwgXCJteSBzZXJ2aWNlc1wiIHZpZXcpLlxuICAgKiBNYXRjaGVzIHRoZSBlbnRpdHkncyBgb3duZXJJZGAgZXhhY3RseSAoYSB1c2VyIGlkIG9yIHRlYW0gaWQpLlxuICAgKiBPbmx5IGFwcGxpZWQgYnkgYnVpbGRlcnMgZm9yIGVudGl0aWVzIHRoYXQgY2FycnkgYW4gb3duZXIgY29sdW1uXG4gICAqIChwaXBlbGluZXMsIHBsdWdpbnMpOyBpZ25vcmVkIGVsc2V3aGVyZS5cbiAgICovXG4gIHJlYWRvbmx5IG93bmVySWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBsaWZlY3ljbGUgc3RhZ2UgKGV4cGVyaW1lbnRhbCB8IHByb2R1Y3Rpb24gfCBkZXByZWNhdGVkKS5cbiAgICogT25seSBhcHBsaWVkIGJ5IGJ1aWxkZXJzIGZvciBlbnRpdGllcyB0aGF0IGNhcnJ5IGEgbGlmZWN5Y2xlIGNvbHVtbi5cbiAgICovXG4gIHJlYWRvbmx5IGxpZmVjeWNsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGaWx0ZXIgaW50ZXJmYWNlIGZvciBwbHVnaW4tc3BlY2lmaWMgcHJvcGVydGllcy5cbiAqIEV4dGVuZHMgQ29tbW9uRmlsdGVyIHRvIGluY2x1ZGUgcGx1Z2luLXJlbGF0ZWQgZmlsdGVyIG9wdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGZpbHRlcjogUGx1Z2luRmlsdGVyID0ge1xuICogICBuYW1lOiAnbm9kZWpzLWJ1aWxkJyxcbiAqICAgdmVyc2lvbjogJzEuMC4wJyxcbiAqICAgaXNBY3RpdmU6IHRydWVcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5GaWx0ZXIgZXh0ZW5kcyBDb21tb25GaWx0ZXIge1xuICAvKipcbiAgICogUGx1Z2luIG5hbWUgdG8gZmlsdGVyIGJ5XG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIb3cgYG5hbWVgIG1hdGNoZXM6IGBjb250YWluc2AgKGRlZmF1bHQg4oCUIGNhc2UtaW5zZW5zaXRpdmUgc3Vic3RyaW5nLCBmb3JcbiAgICogbGlzdC9zZWFyY2gpIG9yIGBleGFjdGAgKHJlc29sdXRpb24g4oCUIHRoZSBsb29rdXAgcGF0aCkuIEludGVybmFsOiBub3QgaW5cbiAgICogdGhlIHB1YmxpYyBmaWx0ZXIgc2NoZW1hLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZU1hdGNoPzogJ2V4YWN0JyB8ICdjb250YWlucyc7XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2hlciBoYW5kbGUgb2YgYW4gaW5zdGFsbGVkIGxpc3RpbmcgdG8gcmVzb2x2ZSB0aHJvdWdoLlxuICAgKiBMb29rdXAgb25seTogYSBgcGx1Z2luc2Agcm93IHF1ZXJ5IGlnbm9yZXMgaXQgKHRoZSByZXNvbHZlciByb3V0ZXMgYVxuICAgKiBxdWFsaWZpZWQgcmVmZXJlbmNlIHRvIHRoZSBsaXN0aW5nLCBuZXZlciB0byBhbiBvcmcncyBvd24gcm93cykuXG4gICAqL1xuICByZWFkb25seSBwdWJsaXNoZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBsdWdpbiB2ZXJzaW9uIHNwZWM6IGV4YWN0IChgMS4yLjNgKSwgY2FyZXQgKGBeMS4yLjNgKSwgdGlsZGUgKGB+MS4yLjNgKSxcbiAgICogcGFydGlhbCAoYDFgLCBgMS4yYCwgYDEueGApIG9yIGBsYXRlc3RgIOKAlCBzZWUgc2VtdmVyLXJhbmdlLnRzLiBBIHJhbmdlIG5ldmVyXG4gICAqIG1hdGNoZXMgYSB5YW5rZWQgdmVyc2lvbi5cbiAgICogQGV4YW1wbGUgXCIxLjAuMFwiLCBcIl4yLjAuMFwiLCBcIn4xLjIuM1wiLCBcImxhdGVzdFwiXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKiBFeGNsdWRlIHlhbmtlZCB2ZXJzaW9ucyAocmVzb2x1dGlvbiB3aXRob3V0IGEgdmVyc2lvbiBzcGVjKS4gSW50ZXJuYWwuICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVZYW5rZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFeGNsdWRlIHZlcnNpb25zIHRoZSBuaWdodGx5IHJlc2NhbiBmbGFnZ2VkIChgc2Nhbl9mbGFnZ2VkX2F0YCBzZXQpIOKAlCB0aGVcbiAgICogbG9va3VwJ3MgXCJuZXdlc3QgdW5mbGFnZ2VkIHZlcnNpb24gdG8gbW92ZSB0b1wiIHN1Z2dlc3Rpb24uIE5ldmVyIGFwcGxpZWQgdG9cbiAgICogd2hhdCBhIHJlZmVyZW5jZSBSRVNPTFZFUyB0bzogdnVsbmVyYWJpbGl0eSBzdGF0ZSBkb2VzIG5vdCBza2lwIHZlcnNpb25zLiBJbnRlcm5hbC5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVTY2FuRmxhZ2dlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEtleXdvcmQgdG8gc2VhcmNoIHdpdGhpbiB0aGUga2V5d29yZHMgSlNPTkIgYXJyYXkgKGNhc2UtaW5zZW5zaXRpdmUgY29udGFpbnMpXG4gICAqL1xuICByZWFkb25seSBrZXl3b3JkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQbHVnaW4gY2F0ZWdvcnkgdG8gZmlsdGVyIGJ5XG4gICAqIEBleGFtcGxlIFwibGFuZ3VhZ2VcIiwgXCJzZWN1cml0eVwiLCBcInRlc3RpbmdcIlxuICAgKi9cbiAgcmVhZG9ubHkgY2F0ZWdvcnk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmlsdGVyIGludGVyZmFjZSBmb3IgcGlwZWxpbmUtc3BlY2lmaWMgcHJvcGVydGllcy5cbiAqIEV4dGVuZHMgQ29tbW9uRmlsdGVyIHRvIGluY2x1ZGUgcGlwZWxpbmUtcmVsYXRlZCBmaWx0ZXIgb3B0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZmlsdGVyOiBQaXBlbGluZUZpbHRlciA9IHtcbiAqICAgcHJvamVjdDogJ215LWFwcCcsXG4gKiAgIG9yZ2FuaXphdGlvbjogJ215LW9yZycsXG4gKiAgIHBpcGVsaW5lTmFtZTogJ215LXBpcGVsaW5lJyxcbiAqICAgaXNBY3RpdmU6IHRydWVcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUZpbHRlciBleHRlbmRzIENvbW1vbkZpbHRlciB7XG4gIC8qKlxuICAgKiBQcm9qZWN0IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwaXBlbGluZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdD86IHN0cmluZztcblxuICAvKipcbiAgICogT3JnYW5pemF0aW9uIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwaXBlbGluZVxuICAgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQaXBlbGluZSBuYW1lIHRvIGZpbHRlciBieVxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBLZXl3b3JkIHRvIHNlYXJjaCB3aXRoaW4gdGhlIGtleXdvcmRzIEpTT05CIGFycmF5IChjYXNlLWluc2Vuc2l0aXZlIGNvbnRhaW5zKVxuICAgKi9cbiAgcmVhZG9ubHkga2V5d29yZD86IHN0cmluZztcbn1cblxuLyoqIEZpbHRlciBpbnRlcmZhY2UgZm9yIHBpcGVsaW5lLXRlbXBsYXRlIHF1ZXJpZXMgKGdvbGRlbi1wYXRoIGNhdGFsb2cpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVRlbXBsYXRlRmlsdGVyIGV4dGVuZHMgQ29tbW9uRmlsdGVyIHtcbiAgLyoqIFRlbXBsYXRlIG5hbWUgKGNhc2UtaW5zZW5zaXRpdmUgY29udGFpbnMpLiAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICAvKiogQ2F0ZWdvcnkgdG8gZmlsdGVyIGJ5IChlLmcuICdsYW5ndWFnZScsICdnZW5lcmFsJykuICovXG4gIHJlYWRvbmx5IGNhdGVnb3J5Pzogc3RyaW5nO1xuICAvKiogS2V5d29yZCBzZWFyY2ggd2l0aGluIHRoZSBrZXl3b3JkcyBKU09OQiBhcnJheS4gKi9cbiAgcmVhZG9ubHkga2V5d29yZD86IHN0cmluZztcbiAgLy8gU2hhcmluZyBydW5nICsgdmlld2VyIGNvbnRleHQgYXJlIGluaGVyaXRlZCBmcm9tIENvbW1vbkZpbHRlci5cbn1cblxuLyoqXG4gKiBGaWx0ZXIgaW50ZXJmYWNlIGZvciBtZXNzYWdlLXNwZWNpZmljIHByb3BlcnRpZXMuXG4gKiBFeHRlbmRzIENvbW1vbkZpbHRlciB0byBpbmNsdWRlIG1lc3NhZ2UtcmVsYXRlZCBmaWx0ZXIgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlRmlsdGVyIGV4dGVuZHMgQ29tbW9uRmlsdGVyIHtcbiAgLyoqXG4gICAqIFRocmVhZCBJRCB0byBmaWx0ZXIgYnkgKGZvciBmZXRjaGluZyB0aHJlYWQgcmVwbGllcykuXG4gICAqIFBhc3MgYG51bGxgIHRvIGZpbHRlciBmb3Igcm9vdCBtZXNzYWdlcyBvbmx5ICh0aHJlYWRJZCBJUyBOVUxMKS5cbiAgICovXG4gIHJlYWRvbmx5IHRocmVhZElkPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogUmVjaXBpZW50IG9yZ2FuaXphdGlvbiBJRCB0byBmaWx0ZXIgYnlcbiAgICogVXNlICcqJyBmb3IgYnJvYWRjYXN0IGFubm91bmNlbWVudHNcbiAgICovXG4gIHJlYWRvbmx5IHJlY2lwaWVudE9yZ0lkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWNpcGllbnQgdXNlciBJRCB0byBmaWx0ZXIgYnkgKHBlci11c2VyIHRhcmdldGluZyB3aXRoaW4gdGhlIHJlY2lwaWVudFxuICAgKiBvcmcpLiBQYXNzIGBudWxsYCB0byBtYXRjaCBvcmctd2lkZSBtZXNzYWdlcyBvbmx5IChyZWNpcGllbnRfdXNlcl9pZCBJU1xuICAgKiBOVUxMKS4gUmFyZWx5IHNldCBkaXJlY3RseSBieSBjYWxsZXJzIOKAlCBzZWUgYHZpZXdlclVzZXJJZGAgZm9yIHRoZVxuICAgKiB2aXNpYmlsaXR5LXNjb3BpbmcgdmFyaWFudC5cbiAgICovXG4gIHJlYWRvbmx5IHJlY2lwaWVudFVzZXJJZD86IHN0cmluZyB8IG51bGw7XG5cbiAgLy8gTk9URTogdGhlIFZJRVdFUidzIHVzZXIgaWQgKGB2aWV3ZXJVc2VySWRgKSBpcyBpbmhlcml0ZWQgZnJvbSBDb21tb25GaWx0ZXIuXG4gIC8vIEZvciBtZXNzYWdlcyBpdCBpcyBOT1QgYSBjb2x1bW4gZmlsdGVyOiB3aGVuIHByZXNlbnQsIHRoZSByZWNpcGllbnQtc2lkZVxuICAvLyBicmFuY2ggaW4gYGJ1aWxkTWVzc2FnZUNvbmRpdGlvbnNgIHdpZGVucyB0byBpbmNsdWRlIHJvd3MgdGFyZ2V0ZWQgYXQgdGhpc1xuICAvLyB1c2VyIChyZWNpcGllbnRfdXNlcl9pZCA9IHZpZXdlclVzZXJJZCkgQUxPTkdTSURFIG9yZy13aWRlIG9uZXNcbiAgLy8gKHJlY2lwaWVudF91c2VyX2lkIElTIE5VTEwpLiBXaGVuIGFic2VudCwgb25seSBvcmctd2lkZSByZWNpcGllbnQgcm93cyBhcmVcbiAgLy8gdmlzaWJsZSwgc28gYSB1c2VyLXRhcmdldGVkIG1lc3NhZ2Ugc3RheXMgcHJpdmF0ZSB0byBpdHMgdGFyZ2V0LCB0aGUgc2VuZGVyLFxuICAvLyBhbmQgdGhlIHN5c3RlbSBvcmcuIE1lc3NhZ2VTZXJ2aWNlIHN0YW1wcyBpdCBmcm9tIHRoZSB0ZW5hbnQgY29udGV4dC5cblxuICAvKipcbiAgICogTWVzc2FnZSB0eXBlIGZpbHRlclxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZVR5cGU/OiAnYW5ub3VuY2VtZW50JyB8ICdjb252ZXJzYXRpb24nO1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgcHJpb3JpdHkgbGV2ZWxcbiAgICovXG4gIHJlYWRvbmx5IHByaW9yaXR5PzogJ25vcm1hbCcgfCAnaGlnaCcgfCAndXJnZW50JztcblxuICAvKipcbiAgICogQ2hhbm5lbC9pbmJveC1idWNrZXQgZmlsdGVyIChlLmcuICdzdXBwb3J0JywgJ2hlbHAnKS4gTWF0Y2hlcyByb3dzXG4gICAqIGV4YWN0bHk7IHBhc3MgbnVsbCB0byBtYXRjaCBjaGFubmVsIElTIE5VTEwgKG9yZy10by1vcmcgbWVzc2FnZXMpLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbm5lbD86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSByZWFkIHN0YXRlIGZvciB0aGUgcmVxdWVzdGluZyBvcmcuXG4gICAqIEltcGxlbWVudGVkIGFzIGEgSlNPTkIga2V5LWV4aXN0ZW5jZSBjaGVjayBhZ2FpbnN0IGBtZXNzYWdlcy5yZWFkX2J5YFxuICAgKiAoYSBgeyBbb3JnSWRdOiBpc29UaW1lc3RhbXAgfWAgbWFwKSwgdXNpbmcgdGhlIG9yZ0lkIHBhc3NlZCB0b1xuICAgKiBgYnVpbGRNZXNzYWdlQ29uZGl0aW9uc2AuXG4gICAqIC0gdHJ1ZSAg4oaSIG9ubHkgbWVzc2FnZXMgdGhlIG9yZyBoYXMgcmVhZCAob3JnSWQga2V5IGV4aXN0cyBpbiByZWFkX2J5KVxuICAgKiAtIGZhbHNlIOKGkiBvbmx5IG1lc3NhZ2VzIHRoZSBvcmcgaGFzIE5PVCByZWFkXG4gICAqIC0gdW5kZWZpbmVkIOKGkiBubyByZWFkLXN0YXRlIGZpbHRlclxuICAgKi9cbiAgcmVhZG9ubHkgaXNSZWFkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2VuZGVyLCByZWxhdGl2ZSB0byB0aGUgdmlld2VyOlxuICAgKiAtIGAnbWUnYCAgICAg4oaSIHJvd3MgdGhlIHZpZXdpbmcgVVNFUiBhdXRob3JlZCAoYGNyZWF0ZWRfYnkgPSB2aWV3ZXJVc2VySWRgKTtcbiAgICogICAgICAgICAgICAgICAgd2l0aCBubyB2aWV3ZXIgaWQgaXQgbWF0Y2hlcyBub3RoaW5nIChmYWlsLWNsb3NlZCkuXG4gICAqIC0gYCdvcmcnYCAgICDihpIgcm93cyB0aGUgdmlld2luZyBPUkcgc2VudCAoYW55IG1lbWJlcikuXG4gICAqIC0gYCdvdGhlcnMnYCDihpIgcm93cyBhbm90aGVyIG9yZyBzZW50IChyZWNlaXZlZCBtYWlsICsgYW5ub3VuY2VtZW50cykuXG4gICAqL1xuICByZWFkb25seSBzZW50Qnk/OiAnbWUnIHwgJ29yZycgfCAnb3RoZXJzJztcblxuICAvKiogUm93cyBhIHNwZWNpZmljIHVzZXIgYXV0aG9yZWQgKGBjcmVhdGVkX2J5YCwgY29tcGFyZWQgY2FzZS1wcmVzZXJ2aW5nKS4gKi9cbiAgcmVhZG9ubHkgc2VuZGVyVXNlcklkPzogc3RyaW5nO1xuXG4gIC8qKiBSb3dzIGV4Y2hhbmdlZCB3aXRoIGEgc3BlY2lmaWMgb3JnOiBpdCBzZW50IHRoZW0sIG9yIGl0IHJlY2VpdmVkIHRoZW0uICovXG4gIHJlYWRvbmx5IGNvdW50ZXJwYXJ0eU9yZ0lkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGljaCBzaWRlIG9mIHRoZSByZXF1ZXN0aW5nIG9yZydzIG93biBgaGlkZGVuX2J5YCBzdGFtcCB0byByZXR1cm46XG4gICAqIGFic2VudC9mYWxzZSDihpIgdGhlIGluYm94IChyb3dzIHRoaXMgb3JnIGhhcyBOT1QgcmVtb3ZlZCDigJQgdGhlIGRlZmF1bHQpO1xuICAgKiB0cnVlIOKGkiBvbmx5IHJvd3MgdGhpcyBvcmcgcmVtb3ZlZCAodGhlIFwiUmVtb3ZlZFwiIHZpZXcsIGFuZCB0aGUgc2NvcGUgb2ZcbiAgICogYW4gdW5oaWRlKS4gTmV2ZXIgd2lkZW5zIHZpc2liaWxpdHkuXG4gICAqL1xuICByZWFkb25seSBoaWRkZW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFeHBsaWNpdCByb3cgc2VsZWN0aW9uIChgaWQgSU4gKC4uLilgKS4gTmFycm93cyBvbmx5IOKAlCBBTkQtZWQgd2l0aCB0aGVcbiAgICogdmlzaWJpbGl0eSBzY29wZSBsaWtlIGV2ZXJ5IG90aGVyIGZpZWxkLCBzbyBpdCBjYW4gbmV2ZXIgcmVhY2ggYSByb3cgdGhlXG4gICAqIGNhbGxlciBjb3VsZG4ndCBhbHJlYWR5IGxpc3QuXG4gICAqL1xuICByZWFkb25seSBpZHM/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRnJlZS10ZXh0IGluYm94IHNlYXJjaC4gQ2FzZS1pbnNlbnNpdGl2ZSBzdWJzdHJpbmcgbWF0Y2ggYWdhaW5zdCB0aGVcbiAgICogbWVzc2FnZSBgc3ViamVjdGAgT1IgYGNvbnRlbnRgIChMSUtFIHdpbGRjYXJkcyBpbiB0aGUgdGVybSBhcmUgZXNjYXBlZCwgc28gYVxuICAgKiBsaXRlcmFsIGAlYC9gX2AgbWF0Y2hlcyBpdHNlbGYpLiBBcHBsaWVkIG9uIHRvcCBvZiB0aGUgdmlzaWJpbGl0eSBzY29wZSwgc29cbiAgICogaXQgbmV2ZXIgd2lkZW5zIHdoYXQgdGhlIGNhbGxlciBjYW4gc2VlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VhcmNoPzogc3RyaW5nO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb21wbGlhbmNlIEZpbHRlcnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBGaWx0ZXIgZm9yIGNvbXBsaWFuY2UgcG9saWNpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxpYW5jZVBvbGljeUZpbHRlciBleHRlbmRzIENvbW1vbkZpbHRlciB7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlzVGVtcGxhdGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEZpbHRlciBmb3IgY29tcGxpYW5jZSBydWxlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wbGlhbmNlUnVsZUZpbHRlciBleHRlbmRzIENvbW1vbkZpbHRlciB7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBvbGljeUlkPzogc3RyaW5nO1xuICByZWFkb25seSB0YXJnZXQ/OiAncGx1Z2luJyB8ICdwaXBlbGluZSc7XG4gIHJlYWRvbmx5IGZpZWxkPzogc3RyaW5nO1xuICByZWFkb25seSBzZXZlcml0eT86ICd3YXJuaW5nJyB8ICdlcnJvcicgfCAnY3JpdGljYWwnO1xuICByZWFkb25seSBzY29wZT86ICdvcmcnIHwgJ3B1Ymxpc2hlZCc7XG4gIHJlYWRvbmx5IHRhZz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGaWx0ZXIgZm9yIGNvbXBsaWFuY2UgZXhlbXB0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wbGlhbmNlRXhlbXB0aW9uRmlsdGVyIHtcbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJ1bGVJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgZW50aXR5VHlwZT86ICdwbHVnaW4nIHwgJ3BpcGVsaW5lJztcbiAgcmVhZG9ubHkgZW50aXR5SWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXR1cz86ICdwZW5kaW5nJyB8ICdhcHByb3ZlZCcgfCAncmVqZWN0ZWQnIHwgJ2V4cGlyZWQnO1xuICByZWFkb25seSBsaW1pdD86IG51bWJlcjtcbiAgcmVhZG9ubHkgb2Zmc2V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEZpbHRlciBmb3IgY29tcGxpYW5jZSBhdWRpdCBsb2cgZW50cmllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wbGlhbmNlQXVkaXRGaWx0ZXIge1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgdGFyZ2V0PzogJ3BsdWdpbicgfCAncGlwZWxpbmUnO1xuICByZWFkb25seSBhY3Rpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc3VsdD86ICdwYXNzJyB8ICd3YXJuJyB8ICdibG9jayc7XG4gIHJlYWRvbmx5IHNjYW5JZD86IHN0cmluZztcbiAgcmVhZG9ubHkgZGF0ZUZyb20/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRhdGVUbz86IHN0cmluZztcbiAgcmVhZG9ubHkgbGltaXQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG9mZnNldD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBGaWx0ZXIgZm9yIGNvbXBsaWFuY2Ugc2NhbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxpYW5jZVNjYW5GaWx0ZXIge1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgdGFyZ2V0PzogJ3BsdWdpbicgfCAncGlwZWxpbmUnIHwgJ2FsbCc7XG4gIHJlYWRvbmx5IHN0YXR1cz86ICdwZW5kaW5nJyB8ICdydW5uaW5nJyB8ICdjb21wbGV0ZWQnIHwgJ2ZhaWxlZCcgfCAnY2FuY2VsbGVkJztcbiAgcmVhZG9ubHkgdHJpZ2dlcmVkQnk/OiAnbWFudWFsJyB8ICdzY2hlZHVsZWQnIHwgJ3J1bGUtY2hhbmdlJyB8ICdydWxlLWRyeS1ydW4nO1xuICByZWFkb25seSBsaW1pdD86IG51bWJlcjtcbiAgcmVhZG9ubHkgb2Zmc2V0PzogbnVtYmVyO1xufVxuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZmlsdGVycy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvcXVlcnktZmlsdGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tcGxpYW5jZUNoZWNrVmVyZGljdCwgQ29tcGxpYW5jZVNjYW5TdGF0dXMsIENvbXBsaWFuY2VTY2FuVGFyZ2V0LCBDb21wbGlhbmNlU2NhblRyaWdnZXIsIFJ1bGVUYXJnZXQsIFZpc2liaWxpdHksXG59IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcblxuLyoqXG4gKiBCYXNlIGZpbHRlciBpbnRlcmZhY2UgY29udGFpbmluZyBjb21tb24gZmlsdGVyIHByb3BlcnRpZXMgc2hhcmVkIGFjcm9zcyBhbGwgZW50aXR5IHR5cGVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBmaWx0ZXI6IENvbW1vbkZpbHRlciA9IHtcbiAqICAgaWQ6ICcxMjMnLFxuICogICBvcmdJZDogJ215LW9yZycsXG4gKiAgIHZpc2liaWxpdHk6ICdwdWJsaWMnLFxuICogICBpc0RlZmF1bHQ6IHRydWUsXG4gKiAgIGlzQWN0aXZlOiB0cnVlXG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uRmlsdGVyIHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZW50aXR5XG4gICAqIENhbiBiZSBhIHNpbmdsZSBJRCBvciBhcnJheSBvZiBJRHMgZm9yIGJhdGNoIGZpbHRlcmluZ1xuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvLyAtLS0gVmlld2VyIGNvbnRleHQgKHNlcnZlci1zZXQsIE5FVkVSIGNsaWVudC1zdXBwbGllZCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIE9ubHkgZW50aXRpZXMgd2hvc2UgdmlzaWJpbGl0eSBwcmVkaWNhdGUgaGFzIGEgUEVSLVVTRVIgcnVuZyByZWFkIHRoZXNlIOKAlFxuICAvLyBwaXBlbGluZSB0ZW1wbGF0ZXMgKGBwcml2YXRlYCBpcyBhdXRob3Itb25seSkgYW5kIG1lc3NhZ2VzIChhIHBlci11c2VyXG4gIC8vIHRhcmdldGVkIHJvdyBpcyB2aXNpYmxlIG9ubHkgdG8gaXRzIHRhcmdldCkuIFRoZWlyIHNlcnZpY2VzIHN0YW1wIHRoZW0gZnJvbVxuICAvLyB0aGUgcmVxdWVzdCdzIGBUZW5hbnRDb250ZXh0YCB2aWEgYHdpdGhWaWV3ZXJDb250ZXh0YCwgc28gbm8gcm91dGUgb3IgcXVlcnlcbiAgLy8gc3RyaW5nIGNhbiBpbmplY3QgdGhlbS4gRXZlcnl0aGluZyBlbHNlIGlnbm9yZXMgdGhlbS5cbiAgLy9cbiAgLy8gQm90aCBmYWlsIENMT1NFRCB3aGVuIGFic2VudDogbm8gdmlld2VyIG1lYW5zIHRoZSBwZXItdXNlciBydW5nIG1hdGNoZXNcbiAgLy8gTk9USElORywgbmV2ZXIgZXZlcnl0aGluZy5cblxuICAvKiogQ2FsbGVyJ3MgdXNlciBpZCwgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBlbnRpdHkncyBwZXItdXNlciBjb2x1bW4uICovXG4gIHJlYWRvbmx5IHZpZXdlclVzZXJJZD86IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgdGhlIGNhbGxlciBpcyBhIHBsYXRmb3JtIHN1cGVyLWFkbWluIChzZWVzIGV2ZXJ5IHJ1bmcpLiAqL1xuICByZWFkb25seSB2aWV3ZXJJc1N1cGVyQWRtaW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcmdhbml6YXRpb24gaWRlbnRpZmllciB0byBmaWx0ZXIgZW50aXRpZXMgYnkgb3JnYW5pemF0aW9uXG4gICAqIENhbiBiZSBhIHNpbmdsZSBvcmcgSUQgb3IgYXJyYXkgZm9yIG11bHRpLW9yZyBmaWx0ZXJpbmdcbiAgICovXG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE5hcnJvdyB0byBvbmUgcnVuZyBvZiB0aGUgc2hhcmVkIHRocmVlLXJ1bmcgc2hhcmluZyBsYWRkZXIuIEFwcGxpZWQgV0lUSElOXG4gICAqIHdoYXQgdGhlIGNhbGxlciBjYW4gYWxyZWFkeSBzZWUg4oCUIG5ldmVyIHdpZGVucyBpdC5cbiAgICogQHNlZSBWaXNpYmlsaXR5XG4gICAqL1xuICByZWFkb25seSB2aXNpYmlsaXR5PzogVmlzaWJpbGl0eSB8IHN0cmluZztcblxuICAvKipcbiAgICogRmlsdGVyIGJ5IGRlZmF1bHQgc3RhdHVzXG4gICAqIC0gdHJ1ZTogT25seSBkZWZhdWx0IGVudGl0aWVzXG4gICAqIC0gZmFsc2U6IE9ubHkgbm9uLWRlZmF1bHQgZW50aXRpZXNcbiAgICogLSB1bmRlZmluZWQ6IEFsbCBlbnRpdGllc1xuICAgKi9cbiAgcmVhZG9ubHkgaXNEZWZhdWx0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRmlsdGVyIGJ5IGFjdGl2ZS9pbmFjdGl2ZSBzdGF0dXNcbiAgICogLSB0cnVlOiBPbmx5IGFjdGl2ZSBlbnRpdGllc1xuICAgKiAtIGZhbHNlOiBPbmx5IGluYWN0aXZlIGVudGl0aWVzXG4gICAqIC0gdW5kZWZpbmVkOiBBbGwgZW50aXRpZXNcbiAgICovXG4gIHJlYWRvbmx5IGlzQWN0aXZlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHJlc3VsdHMgdG8gcmV0dXJuXG4gICAqIEBtaW5pbXVtIDFcbiAgICogQG1heGltdW0gMTAwMFxuICAgKi9cbiAgcmVhZG9ubHkgbGltaXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiByZXN1bHRzIHRvIHNraXAgKGZvciBwYWdpbmF0aW9uKVxuICAgKiBAbWluaW11bSAwXG4gICAqL1xuICByZWFkb25seSBvZmZzZXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNvcnQgZmllbGQgYW5kIGRpcmVjdGlvblxuICAgKiBAZXhhbXBsZSBcIm5hbWU6YXNjXCIsIFwiY3JlYXRlZEF0OmRlc2NcIlxuICAgKi9cbiAgcmVhZG9ubHkgc29ydD86IHN0cmluZztcblxuICAvKipcbiAgICogRmlsdGVyIGJ5IGNhdGFsb2cgb3duZXIgKGRldmVsb3Blci1wb3J0YWwgXCJteSBzZXJ2aWNlc1wiIHZpZXcpLlxuICAgKiBNYXRjaGVzIHRoZSBlbnRpdHkncyBgb3duZXJJZGAgZXhhY3RseSAoYSB1c2VyIGlkIG9yIHRlYW0gaWQpLlxuICAgKiBPbmx5IGFwcGxpZWQgYnkgYnVpbGRlcnMgZm9yIGVudGl0aWVzIHRoYXQgY2FycnkgYW4gb3duZXIgY29sdW1uXG4gICAqIChwaXBlbGluZXMsIHBsdWdpbnMpOyBpZ25vcmVkIGVsc2V3aGVyZS5cbiAgICovXG4gIHJlYWRvbmx5IG93bmVySWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBsaWZlY3ljbGUgc3RhZ2UgKGV4cGVyaW1lbnRhbCB8IHByb2R1Y3Rpb24gfCBkZXByZWNhdGVkKS5cbiAgICogT25seSBhcHBsaWVkIGJ5IGJ1aWxkZXJzIGZvciBlbnRpdGllcyB0aGF0IGNhcnJ5IGEgbGlmZWN5Y2xlIGNvbHVtbi5cbiAgICovXG4gIHJlYWRvbmx5IGxpZmVjeWNsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGaWx0ZXIgaW50ZXJmYWNlIGZvciBwbHVnaW4tc3BlY2lmaWMgcHJvcGVydGllcy5cbiAqIEV4dGVuZHMgQ29tbW9uRmlsdGVyIHRvIGluY2x1ZGUgcGx1Z2luLXJlbGF0ZWQgZmlsdGVyIG9wdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGZpbHRlcjogUGx1Z2luRmlsdGVyID0ge1xuICogICBuYW1lOiAnbm9kZWpzLWJ1aWxkJyxcbiAqICAgdmVyc2lvbjogJzEuMC4wJyxcbiAqICAgaXNBY3RpdmU6IHRydWVcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5GaWx0ZXIgZXh0ZW5kcyBDb21tb25GaWx0ZXIge1xuICAvKipcbiAgICogUGx1Z2luIG5hbWUgdG8gZmlsdGVyIGJ5XG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIb3cgYG5hbWVgIG1hdGNoZXM6IGBjb250YWluc2AgKGRlZmF1bHQg4oCUIGNhc2UtaW5zZW5zaXRpdmUgc3Vic3RyaW5nLCBmb3JcbiAgICogbGlzdC9zZWFyY2gpIG9yIGBleGFjdGAgKHJlc29sdXRpb24g4oCUIHRoZSBsb29rdXAgcGF0aCkuIEludGVybmFsOiBub3QgaW5cbiAgICogdGhlIHB1YmxpYyBmaWx0ZXIgc2NoZW1hLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZU1hdGNoPzogJ2V4YWN0JyB8ICdjb250YWlucyc7XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2hlciBoYW5kbGUgb2YgYW4gaW5zdGFsbGVkIGxpc3RpbmcgdG8gcmVzb2x2ZSB0aHJvdWdoLlxuICAgKiBMb29rdXAgb25seTogYSBgcGx1Z2luc2Agcm93IHF1ZXJ5IGlnbm9yZXMgaXQgKHRoZSByZXNvbHZlciByb3V0ZXMgYVxuICAgKiBxdWFsaWZpZWQgcmVmZXJlbmNlIHRvIHRoZSBsaXN0aW5nLCBuZXZlciB0byBhbiBvcmcncyBvd24gcm93cykuXG4gICAqL1xuICByZWFkb25seSBwdWJsaXNoZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBsdWdpbiB2ZXJzaW9uIHNwZWM6IGV4YWN0IChgMS4yLjNgKSwgY2FyZXQgKGBeMS4yLjNgKSwgdGlsZGUgKGB+MS4yLjNgKSxcbiAgICogcGFydGlhbCAoYDFgLCBgMS4yYCwgYDEueGApIG9yIGBsYXRlc3RgIOKAlCBzZWUgc2VtdmVyLXJhbmdlLnRzLiBBIHJhbmdlIG5ldmVyXG4gICAqIG1hdGNoZXMgYSB5YW5rZWQgdmVyc2lvbi5cbiAgICogQGV4YW1wbGUgXCIxLjAuMFwiLCBcIl4yLjAuMFwiLCBcIn4xLjIuM1wiLCBcImxhdGVzdFwiXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKiBFeGNsdWRlIHlhbmtlZCB2ZXJzaW9ucyAocmVzb2x1dGlvbiB3aXRob3V0IGEgdmVyc2lvbiBzcGVjKS4gSW50ZXJuYWwuICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVZYW5rZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFeGNsdWRlIHZlcnNpb25zIHRoZSBuaWdodGx5IHJlc2NhbiBmbGFnZ2VkIChgc2Nhbl9mbGFnZ2VkX2F0YCBzZXQpIOKAlCB0aGVcbiAgICogbG9va3VwJ3MgXCJuZXdlc3QgdW5mbGFnZ2VkIHZlcnNpb24gdG8gbW92ZSB0b1wiIHN1Z2dlc3Rpb24uIE5ldmVyIGFwcGxpZWQgdG9cbiAgICogd2hhdCBhIHJlZmVyZW5jZSBSRVNPTFZFUyB0bzogdnVsbmVyYWJpbGl0eSBzdGF0ZSBkb2VzIG5vdCBza2lwIHZlcnNpb25zLiBJbnRlcm5hbC5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVTY2FuRmxhZ2dlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEtleXdvcmQgdG8gc2VhcmNoIHdpdGhpbiB0aGUga2V5d29yZHMgSlNPTkIgYXJyYXkgKGNhc2UtaW5zZW5zaXRpdmUgY29udGFpbnMpXG4gICAqL1xuICByZWFkb25seSBrZXl3b3JkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQbHVnaW4gY2F0ZWdvcnkgdG8gZmlsdGVyIGJ5XG4gICAqIEBleGFtcGxlIFwibGFuZ3VhZ2VcIiwgXCJzZWN1cml0eVwiLCBcInRlc3RpbmdcIlxuICAgKi9cbiAgcmVhZG9ubHkgY2F0ZWdvcnk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmlsdGVyIGludGVyZmFjZSBmb3IgcGlwZWxpbmUtc3BlY2lmaWMgcHJvcGVydGllcy5cbiAqIEV4dGVuZHMgQ29tbW9uRmlsdGVyIHRvIGluY2x1ZGUgcGlwZWxpbmUtcmVsYXRlZCBmaWx0ZXIgb3B0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZmlsdGVyOiBQaXBlbGluZUZpbHRlciA9IHtcbiAqICAgcHJvamVjdDogJ215LWFwcCcsXG4gKiAgIG9yZ2FuaXphdGlvbjogJ215LW9yZycsXG4gKiAgIHBpcGVsaW5lTmFtZTogJ215LXBpcGVsaW5lJyxcbiAqICAgaXNBY3RpdmU6IHRydWVcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUZpbHRlciBleHRlbmRzIENvbW1vbkZpbHRlciB7XG4gIC8qKlxuICAgKiBQcm9qZWN0IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwaXBlbGluZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdD86IHN0cmluZztcblxuICAvKipcbiAgICogT3JnYW5pemF0aW9uIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwaXBlbGluZVxuICAgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQaXBlbGluZSBuYW1lIHRvIGZpbHRlciBieVxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBLZXl3b3JkIHRvIHNlYXJjaCB3aXRoaW4gdGhlIGtleXdvcmRzIEpTT05CIGFycmF5IChjYXNlLWluc2Vuc2l0aXZlIGNvbnRhaW5zKVxuICAgKi9cbiAgcmVhZG9ubHkga2V5d29yZD86IHN0cmluZztcbn1cblxuLyoqIEZpbHRlciBpbnRlcmZhY2UgZm9yIHBpcGVsaW5lLXRlbXBsYXRlIHF1ZXJpZXMgKGdvbGRlbi1wYXRoIGNhdGFsb2cpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVRlbXBsYXRlRmlsdGVyIGV4dGVuZHMgQ29tbW9uRmlsdGVyIHtcbiAgLyoqIFRlbXBsYXRlIG5hbWUgKGNhc2UtaW5zZW5zaXRpdmUgY29udGFpbnMpLiAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICAvKiogQ2F0ZWdvcnkgdG8gZmlsdGVyIGJ5IChlLmcuICdsYW5ndWFnZScsICdnZW5lcmFsJykuICovXG4gIHJlYWRvbmx5IGNhdGVnb3J5Pzogc3RyaW5nO1xuICAvKiogS2V5d29yZCBzZWFyY2ggd2l0aGluIHRoZSBrZXl3b3JkcyBKU09OQiBhcnJheS4gKi9cbiAgcmVhZG9ubHkga2V5d29yZD86IHN0cmluZztcbiAgLy8gU2hhcmluZyBydW5nICsgdmlld2VyIGNvbnRleHQgYXJlIGluaGVyaXRlZCBmcm9tIENvbW1vbkZpbHRlci5cbn1cblxuLyoqXG4gKiBGaWx0ZXIgaW50ZXJmYWNlIGZvciBtZXNzYWdlLXNwZWNpZmljIHByb3BlcnRpZXMuXG4gKiBFeHRlbmRzIENvbW1vbkZpbHRlciB0byBpbmNsdWRlIG1lc3NhZ2UtcmVsYXRlZCBmaWx0ZXIgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlRmlsdGVyIGV4dGVuZHMgQ29tbW9uRmlsdGVyIHtcbiAgLyoqXG4gICAqIFRocmVhZCBJRCB0byBmaWx0ZXIgYnkgKGZvciBmZXRjaGluZyB0aHJlYWQgcmVwbGllcykuXG4gICAqIFBhc3MgYG51bGxgIHRvIGZpbHRlciBmb3Igcm9vdCBtZXNzYWdlcyBvbmx5ICh0aHJlYWRJZCBJUyBOVUxMKS5cbiAgICovXG4gIHJlYWRvbmx5IHRocmVhZElkPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogUmVjaXBpZW50IG9yZ2FuaXphdGlvbiBJRCB0byBmaWx0ZXIgYnlcbiAgICogVXNlICcqJyBmb3IgYnJvYWRjYXN0IGFubm91bmNlbWVudHNcbiAgICovXG4gIHJlYWRvbmx5IHJlY2lwaWVudE9yZ0lkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWNpcGllbnQgdXNlciBJRCB0byBmaWx0ZXIgYnkgKHBlci11c2VyIHRhcmdldGluZyB3aXRoaW4gdGhlIHJlY2lwaWVudFxuICAgKiBvcmcpLiBQYXNzIGBudWxsYCB0byBtYXRjaCBvcmctd2lkZSBtZXNzYWdlcyBvbmx5IChyZWNpcGllbnRfdXNlcl9pZCBJU1xuICAgKiBOVUxMKS4gUmFyZWx5IHNldCBkaXJlY3RseSBieSBjYWxsZXJzIOKAlCBzZWUgYHZpZXdlclVzZXJJZGAgZm9yIHRoZVxuICAgKiB2aXNpYmlsaXR5LXNjb3BpbmcgdmFyaWFudC5cbiAgICovXG4gIHJlYWRvbmx5IHJlY2lwaWVudFVzZXJJZD86IHN0cmluZyB8IG51bGw7XG5cbiAgLy8gTk9URTogdGhlIFZJRVdFUidzIHVzZXIgaWQgKGB2aWV3ZXJVc2VySWRgKSBpcyBpbmhlcml0ZWQgZnJvbSBDb21tb25GaWx0ZXIuXG4gIC8vIEZvciBtZXNzYWdlcyBpdCBpcyBOT1QgYSBjb2x1bW4gZmlsdGVyOiB3aGVuIHByZXNlbnQsIHRoZSByZWNpcGllbnQtc2lkZVxuICAvLyBicmFuY2ggaW4gYGJ1aWxkTWVzc2FnZUNvbmRpdGlvbnNgIHdpZGVucyB0byBpbmNsdWRlIHJvd3MgdGFyZ2V0ZWQgYXQgdGhpc1xuICAvLyB1c2VyIChyZWNpcGllbnRfdXNlcl9pZCA9IHZpZXdlclVzZXJJZCkgQUxPTkdTSURFIG9yZy13aWRlIG9uZXNcbiAgLy8gKHJlY2lwaWVudF91c2VyX2lkIElTIE5VTEwpLiBXaGVuIGFic2VudCwgb25seSBvcmctd2lkZSByZWNpcGllbnQgcm93cyBhcmVcbiAgLy8gdmlzaWJsZSwgc28gYSB1c2VyLXRhcmdldGVkIG1lc3NhZ2Ugc3RheXMgcHJpdmF0ZSB0byBpdHMgdGFyZ2V0LCB0aGUgc2VuZGVyLFxuICAvLyBhbmQgdGhlIHN5c3RlbSBvcmcuIE1lc3NhZ2VTZXJ2aWNlIHN0YW1wcyBpdCBmcm9tIHRoZSB0ZW5hbnQgY29udGV4dC5cblxuICAvKipcbiAgICogTWVzc2FnZSB0eXBlIGZpbHRlclxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZVR5cGU/OiAnYW5ub3VuY2VtZW50JyB8ICdjb252ZXJzYXRpb24nO1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgcHJpb3JpdHkgbGV2ZWxcbiAgICovXG4gIHJlYWRvbmx5IHByaW9yaXR5PzogJ25vcm1hbCcgfCAnaGlnaCcgfCAndXJnZW50JztcblxuICAvKipcbiAgICogQ2hhbm5lbC9pbmJveC1idWNrZXQgZmlsdGVyIChlLmcuICdzdXBwb3J0JywgJ2hlbHAnKS4gTWF0Y2hlcyByb3dzXG4gICAqIGV4YWN0bHk7IHBhc3MgbnVsbCB0byBtYXRjaCBjaGFubmVsIElTIE5VTEwgKG9yZy10by1vcmcgbWVzc2FnZXMpLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbm5lbD86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSByZWFkIHN0YXRlIGZvciB0aGUgcmVxdWVzdGluZyBvcmcuXG4gICAqIEltcGxlbWVudGVkIGFzIGEgSlNPTkIga2V5LWV4aXN0ZW5jZSBjaGVjayBhZ2FpbnN0IGBtZXNzYWdlcy5yZWFkX2J5YFxuICAgKiAoYSBgeyBbb3JnSWRdOiBpc29UaW1lc3RhbXAgfWAgbWFwKSwgdXNpbmcgdGhlIG9yZ0lkIHBhc3NlZCB0b1xuICAgKiBgYnVpbGRNZXNzYWdlQ29uZGl0aW9uc2AuXG4gICAqIC0gdHJ1ZSAg4oaSIG9ubHkgbWVzc2FnZXMgdGhlIG9yZyBoYXMgcmVhZCAob3JnSWQga2V5IGV4aXN0cyBpbiByZWFkX2J5KVxuICAgKiAtIGZhbHNlIOKGkiBvbmx5IG1lc3NhZ2VzIHRoZSBvcmcgaGFzIE5PVCByZWFkXG4gICAqIC0gdW5kZWZpbmVkIOKGkiBubyByZWFkLXN0YXRlIGZpbHRlclxuICAgKi9cbiAgcmVhZG9ubHkgaXNSZWFkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2VuZGVyLCByZWxhdGl2ZSB0byB0aGUgdmlld2VyOlxuICAgKiAtIGAnbWUnYCAgICAg4oaSIHJvd3MgdGhlIHZpZXdpbmcgVVNFUiBhdXRob3JlZCAoYGNyZWF0ZWRfYnkgPSB2aWV3ZXJVc2VySWRgKTtcbiAgICogICAgICAgICAgICAgICAgd2l0aCBubyB2aWV3ZXIgaWQgaXQgbWF0Y2hlcyBub3RoaW5nIChmYWlsLWNsb3NlZCkuXG4gICAqIC0gYCdvcmcnYCAgICDihpIgcm93cyB0aGUgdmlld2luZyBPUkcgc2VudCAoYW55IG1lbWJlcikuXG4gICAqIC0gYCdvdGhlcnMnYCDihpIgcm93cyBhbm90aGVyIG9yZyBzZW50IChyZWNlaXZlZCBtYWlsICsgYW5ub3VuY2VtZW50cykuXG4gICAqL1xuICByZWFkb25seSBzZW50Qnk/OiAnbWUnIHwgJ29yZycgfCAnb3RoZXJzJztcblxuICAvKiogUm93cyBhIHNwZWNpZmljIHVzZXIgYXV0aG9yZWQgKGBjcmVhdGVkX2J5YCwgY29tcGFyZWQgY2FzZS1wcmVzZXJ2aW5nKS4gKi9cbiAgcmVhZG9ubHkgc2VuZGVyVXNlcklkPzogc3RyaW5nO1xuXG4gIC8qKiBSb3dzIGV4Y2hhbmdlZCB3aXRoIGEgc3BlY2lmaWMgb3JnOiBpdCBzZW50IHRoZW0sIG9yIGl0IHJlY2VpdmVkIHRoZW0uICovXG4gIHJlYWRvbmx5IGNvdW50ZXJwYXJ0eU9yZ0lkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGljaCBzaWRlIG9mIHRoZSByZXF1ZXN0aW5nIG9yZydzIG93biBgaGlkZGVuX2J5YCBzdGFtcCB0byByZXR1cm46XG4gICAqIGFic2VudC9mYWxzZSDihpIgdGhlIGluYm94IChyb3dzIHRoaXMgb3JnIGhhcyBOT1QgcmVtb3ZlZCDigJQgdGhlIGRlZmF1bHQpO1xuICAgKiB0cnVlIOKGkiBvbmx5IHJvd3MgdGhpcyBvcmcgcmVtb3ZlZCAodGhlIFwiUmVtb3ZlZFwiIHZpZXcsIGFuZCB0aGUgc2NvcGUgb2ZcbiAgICogYW4gdW5oaWRlKS4gTmV2ZXIgd2lkZW5zIHZpc2liaWxpdHkuXG4gICAqL1xuICByZWFkb25seSBoaWRkZW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFeHBsaWNpdCByb3cgc2VsZWN0aW9uIChgaWQgSU4gKC4uLilgKS4gTmFycm93cyBvbmx5IOKAlCBBTkQtZWQgd2l0aCB0aGVcbiAgICogdmlzaWJpbGl0eSBzY29wZSBsaWtlIGV2ZXJ5IG90aGVyIGZpZWxkLCBzbyBpdCBjYW4gbmV2ZXIgcmVhY2ggYSByb3cgdGhlXG4gICAqIGNhbGxlciBjb3VsZG4ndCBhbHJlYWR5IGxpc3QuXG4gICAqL1xuICByZWFkb25seSBpZHM/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRnJlZS10ZXh0IGluYm94IHNlYXJjaC4gQ2FzZS1pbnNlbnNpdGl2ZSBzdWJzdHJpbmcgbWF0Y2ggYWdhaW5zdCB0aGVcbiAgICogbWVzc2FnZSBgc3ViamVjdGAgT1IgYGNvbnRlbnRgIChMSUtFIHdpbGRjYXJkcyBpbiB0aGUgdGVybSBhcmUgZXNjYXBlZCwgc28gYVxuICAgKiBsaXRlcmFsIGAlYC9gX2AgbWF0Y2hlcyBpdHNlbGYpLiBBcHBsaWVkIG9uIHRvcCBvZiB0aGUgdmlzaWJpbGl0eSBzY29wZSwgc29cbiAgICogaXQgbmV2ZXIgd2lkZW5zIHdoYXQgdGhlIGNhbGxlciBjYW4gc2VlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VhcmNoPzogc3RyaW5nO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb21wbGlhbmNlIEZpbHRlcnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBGaWx0ZXIgZm9yIGNvbXBsaWFuY2UgcG9saWNpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxpYW5jZVBvbGljeUZpbHRlciBleHRlbmRzIENvbW1vbkZpbHRlciB7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlzVGVtcGxhdGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEZpbHRlciBmb3IgY29tcGxpYW5jZSBydWxlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wbGlhbmNlUnVsZUZpbHRlciBleHRlbmRzIENvbW1vbkZpbHRlciB7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBvbGljeUlkPzogc3RyaW5nO1xuICByZWFkb25seSB0YXJnZXQ/OiAncGx1Z2luJyB8ICdwaXBlbGluZSc7XG4gIHJlYWRvbmx5IGZpZWxkPzogc3RyaW5nO1xuICByZWFkb25seSBzZXZlcml0eT86ICd3YXJuaW5nJyB8ICdlcnJvcicgfCAnY3JpdGljYWwnO1xuICByZWFkb25seSBzY29wZT86ICdvcmcnIHwgJ3B1Ymxpc2hlZCc7XG4gIHJlYWRvbmx5IHRhZz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGaWx0ZXIgZm9yIGNvbXBsaWFuY2UgZXhlbXB0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wbGlhbmNlRXhlbXB0aW9uRmlsdGVyIHtcbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJ1bGVJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgZW50aXR5VHlwZT86ICdwbHVnaW4nIHwgJ3BpcGVsaW5lJztcbiAgcmVhZG9ubHkgZW50aXR5SWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXR1cz86ICdwZW5kaW5nJyB8ICdhcHByb3ZlZCcgfCAncmVqZWN0ZWQnIHwgJ2V4cGlyZWQnO1xuICByZWFkb25seSBsaW1pdD86IG51bWJlcjtcbiAgcmVhZG9ubHkgb2Zmc2V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEZpbHRlciBmb3IgY29tcGxpYW5jZSBhdWRpdCBsb2cgZW50cmllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wbGlhbmNlQXVkaXRGaWx0ZXIge1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgdGFyZ2V0PzogUnVsZVRhcmdldDtcbiAgcmVhZG9ubHkgYWN0aW9uPzogc3RyaW5nO1xuICByZWFkb25seSByZXN1bHQ/OiBDb21wbGlhbmNlQ2hlY2tWZXJkaWN0O1xuICByZWFkb25seSBzY2FuSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRhdGVGcm9tPzogc3RyaW5nO1xuICByZWFkb25seSBkYXRlVG8/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxpbWl0PzogbnVtYmVyO1xuICByZWFkb25seSBvZmZzZXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRmlsdGVyIGZvciBjb21wbGlhbmNlIHNjYW5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsaWFuY2VTY2FuRmlsdGVyIHtcbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhcmdldD86IENvbXBsaWFuY2VTY2FuVGFyZ2V0O1xuICByZWFkb25seSBzdGF0dXM/OiBDb21wbGlhbmNlU2NhblN0YXR1cztcbiAgcmVhZG9ubHkgdHJpZ2dlcmVkQnk/OiBDb21wbGlhbmNlU2NhblRyaWdnZXI7XG4gIHJlYWRvbmx5IGxpbWl0PzogbnVtYmVyO1xuICByZWFkb25seSBvZmZzZXQ/OiBudW1iZXI7XG59XG4iXX0=