@pipeline-builder/pipeline-data 4.3.3 → 4.3.5

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/api/crud-service.d.ts +7 -0
  2. package/lib/api/crud-service.js +14 -3
  3. package/lib/api/pipeline-step-resolution.d.ts +111 -0
  4. package/lib/api/pipeline-step-resolution.js +163 -0
  5. package/lib/api/plugin-consumption-policy.d.ts +8 -2
  6. package/lib/api/plugin-consumption-policy.js +20 -3
  7. package/lib/api/plugin-resolution.d.ts +26 -9
  8. package/lib/api/plugin-resolution.js +51 -33
  9. package/lib/api/reporting/analytics-queries.d.ts +6 -4
  10. package/lib/api/reporting/analytics-queries.js +11 -11
  11. package/lib/api/reporting/deploy-rollup.d.ts +2 -0
  12. package/lib/api/reporting/deploy-rollup.js +5 -1
  13. package/lib/api/reporting/failure-classifier.d.ts +2 -6
  14. package/lib/api/reporting/failure-classifier.js +22 -1
  15. package/lib/api/reporting/ingest.js +73 -16
  16. package/lib/api/reporting/plugin-exposure.d.ts +261 -15
  17. package/lib/api/reporting/plugin-exposure.js +423 -38
  18. package/lib/api/reporting/stakeholder/compose.d.ts +1 -1
  19. package/lib/api/reporting/stakeholder/compose.js +30 -1
  20. package/lib/api/reporting/stakeholder/store.d.ts +16 -2
  21. package/lib/api/reporting/stakeholder/store.js +17 -6
  22. package/lib/api/reporting/types.d.ts +80 -1
  23. package/lib/api/reporting/types.js +1 -1
  24. package/lib/api/reporting-service.d.ts +11 -4
  25. package/lib/api/reporting-service.js +106 -43
  26. package/lib/api/soft-delete-sweep.d.ts +8 -18
  27. package/lib/api/soft-delete-sweep.js +35 -5
  28. package/lib/api/version-references.d.ts +80 -0
  29. package/lib/api/version-references.js +135 -0
  30. package/lib/core/query-filters.d.ts +3 -3
  31. package/lib/core/query-filters.js +1 -1
  32. package/lib/database/drizzle-schema.d.ts +1238 -143
  33. package/lib/database/drizzle-schema.js +6 -3
  34. package/lib/database/index.d.ts +1 -1
  35. package/lib/database/index.js +2 -2
  36. package/lib/database/schema/ecosystem.d.ts +53 -0
  37. package/lib/database/schema/ecosystem.js +14 -3
  38. package/lib/database/schema/pipeline.d.ts +38 -0
  39. package/lib/database/schema/pipeline.js +20 -2
  40. package/lib/database/schema/plugin.d.ts +265 -0
  41. package/lib/database/schema/plugin.js +34 -3
  42. package/lib/database/schema/reporting-analytics.d.ts +786 -4
  43. package/lib/database/schema/reporting-analytics.js +111 -5
  44. package/lib/index.d.ts +5 -3
  45. package/lib/index.js +5 -3
  46. package/lib/testing/exports.json +24 -0
  47. package/package.json +4 -3
@@ -27,18 +27,29 @@
27
27
  * version spec. Yanked versions never resolve for a listing; a paused
28
28
  * version is skipped unless the install already resolved to it or the
29
29
  * reference pins it exactly; advisory-blocked versions are skipped.
30
- * - Scan flags: a version the nightly rescan FLAGGED (fixable Criticals
31
- * over `PLUGIN_VULN_MAX_CRITICAL`) resolves with a `VULN_FLAGGED` warning —
32
- * or, with `PLUGIN_BLOCK_ON_NEW_CRITICAL` on, is skipped like an
33
- * advisory-blocked one, and an exact pin to it is refused
34
- * `PLUGIN_VERSION_VULN_BLOCKED`.
30
+ * - Scan flags: a version the nightly rescan FLAGGED (gated Criticals over
31
+ * `PLUGIN_VULN_MAX_FINDINGS`) resolves like any other, with a `VULN_FLAGGED`
32
+ * warning (severity `error`, `critical` with a KEV finding). Vulnerability
33
+ * state NEVER skips or refuses a version — it is graded, and the pipeline's
34
+ * owners are told. When the reference's pin keeps it OFF a newer unflagged
35
+ * version the install allows, `VULN_UPGRADE_AVAILABLE` (info) names it.
35
36
  */
36
- import { asScanFlag, blockOnNewCritical, vulnBlockedMessage, vulnFlaggedWarning, } from '@pipeline-builder/api-core';
37
+ import { asScanFlag, vulnFlaggedWarning, } from '@pipeline-builder/api-core';
37
38
  import { and, eq, inArray } from 'drizzle-orm';
38
39
  import { advisoriesCovering, blockingAdvisories } from './plugin-advisories.js';
39
40
  import { effectiveConsumptionPolicy } from './plugin-consumption-policy.js';
40
41
  import { compareSemver, isVersionRange, parseSemver, satisfiesVersionSpec, } from './semver-range.js';
41
42
  import { OFFICIAL_PUBLISHER_HANDLE, schema, } from '../database/drizzle-schema.js';
43
+ /** The `VULN_UPGRADE_AVAILABLE` warning for `ref` resolving to `resolved` with `suggested` outside the pin. */
44
+ export function vulnUpgradeAvailableWarning(ref, resolved, suggested) {
45
+ return {
46
+ code: 'VULN_UPGRADE_AVAILABLE',
47
+ severity: 'info',
48
+ message: `${ref}@${resolved} is flagged and your pin keeps the pipeline on it; ${ref}@${suggested} is not flagged and your install allows it. Move the pin to pick it up.`,
49
+ resolved,
50
+ suggestedVersion: suggested,
51
+ };
52
+ }
42
53
  /** Whether `policy` (or the listing's own state) refuses the listing outright. */
43
54
  export function listingBlock(policy, publisher, listing) {
44
55
  const ref = `${publisher.handle}/${listing.name}`;
@@ -59,17 +70,6 @@ export function blockRefusal(block) {
59
70
  ? { code: 'PLUGIN_UNAVAILABLE', reason: 'suspended', message: block.message }
60
71
  : { code: 'PLUGIN_BLOCKED_BY_POLICY', reason: block.reason, message: block.message };
61
72
  }
62
- /** The refusal an exact pin to a flagged version gets while blocking (409). */
63
- function vulnRefusal(ref, v) {
64
- const flag = asScanFlag(v.scanFlag) ?? { critical: 0, high: 0, maxCritical: 0, findings: [] };
65
- const fixed = [...new Set(flag.findings.flatMap((f) => f.fixedIn))];
66
- return {
67
- code: 'PLUGIN_VERSION_VULN_BLOCKED',
68
- reason: 'vuln_flagged',
69
- message: vulnBlockedMessage(ref, v.version, flag),
70
- details: { version: v.version, critical: flag.critical, high: flag.high, findings: flag.findings, ...(fixed.length ? { fixedVersions: fixed } : {}) },
71
- };
72
- }
73
73
  const isStable = (v) => (parseSemver(v)?.prerelease.length ?? 1) === 0;
74
74
  /**
75
75
  * The implicit Official install's range: every version of the LOWEST live
@@ -115,14 +115,32 @@ export function modeAdmits(mode, version, versions) {
115
115
  const range = implicitInstallRange(versions);
116
116
  return range !== null && satisfiesVersionSpec(version, range);
117
117
  }
118
+ /** The newest version (by semver) of `versions`, or null. */
119
+ function newestOf(versions) {
120
+ const best = highest(versions.map((v) => v.version));
121
+ return best === null ? null : versions.find((v) => v.version === best);
122
+ }
118
123
  /**
119
124
  * Pick the listed version a reference resolves to (see the module doc), or
120
125
  * the refusal that explains why none can.
121
126
  */
122
127
  export function selectListingVersion(input) {
123
128
  const { ref, versions, mode, requested, advisories, policy } = input;
124
- const blockFlagged = input.blockFlagged ?? blockOnNewCritical();
125
129
  const exact = requested !== undefined && !isVersionRange(requested) ? requested.trim() : null;
130
+ const resolvedBefore = mode.kind === 'explicit' ? mode.install.resolvedVersion : null;
131
+ // For a FLAGGED answer: the newest UNFLAGGED version above it that the
132
+ // INSTALL allows and no blocking advisory covers — the version a pipeline
133
+ // owner is told to move to. Null for an unflagged answer, or when none exists.
134
+ const suggestion = (resolved) => {
135
+ if (!resolved.scanFlaggedAt)
136
+ return null;
137
+ const pool = versions.filter((v) => !v.yankedAt && !v.scanFlaggedAt
138
+ && compareSemver(v.version, resolved.version) > 0
139
+ && modeAdmits(mode, v.version, versions)
140
+ && (!v.pausedAt || v.version === resolvedBefore)
141
+ && blockingAdvisories(advisories, v.version, policy).length === 0);
142
+ return newestOf(pool)?.version ?? null;
143
+ };
126
144
  if (exact !== null) {
127
145
  const v = versions.find((x) => x.version === exact);
128
146
  if (!v)
@@ -150,11 +168,8 @@ export function selectListingVersion(input) {
150
168
  const blocking = blockingAdvisories(advisories, exact, policy);
151
169
  if (blocking.length)
152
170
  return { refusal: advisoryRefusal(ref, exact, blocking) };
153
- if (blockFlagged && v.scanFlaggedAt)
154
- return { refusal: vulnRefusal(ref, v) };
155
- return { version: v };
171
+ return { version: v, suggestedVersion: suggestion(v) };
156
172
  }
157
- const resolvedBefore = mode.kind === 'explicit' ? mode.install.resolvedVersion : null;
158
173
  // The range the INSTALL allows. For the implicit install an explicit spec on
159
174
  // the reference replaces the implicit range (it is a deliberate choice).
160
175
  const admitted = versions.filter((v) => !v.yankedAt
@@ -162,19 +177,17 @@ export function selectListingVersion(input) {
162
177
  : requested !== undefined || modeAdmits(mode, v.version, versions))
163
178
  && (requested === undefined || satisfiesVersionSpec(v.version, requested))
164
179
  && (!v.pausedAt || v.version === resolvedBefore));
165
- const allowed = admitted.filter((v) => blockingAdvisories(advisories, v.version, policy).length === 0
166
- && !(blockFlagged && v.scanFlaggedAt));
180
+ // A blocking ADVISORY (the org's install policy) skips a version; a scan
181
+ // flag never does.
182
+ const allowed = admitted.filter((v) => blockingAdvisories(advisories, v.version, policy).length === 0);
167
183
  // Ranges only admit prereleases they name (npm semantics), so the highest
168
184
  // admitted version is the answer.
169
- const best = highest(allowed.map((v) => v.version));
185
+ const best = newestOf(allowed);
170
186
  if (best)
171
- return { version: allowed.find((v) => v.version === best) };
187
+ return { version: best, suggestedVersion: suggestion(best) };
172
188
  if (admitted.length > 0) {
173
- const newest = highest(admitted.map((v) => v.version));
174
- const blocking = blockingAdvisories(advisories, newest, policy);
175
- if (blocking.length === 0)
176
- return { refusal: vulnRefusal(ref, admitted.find((v) => v.version === newest)) };
177
- return { refusal: advisoryRefusal(ref, newest, blocking) };
189
+ const newest = newestOf(admitted);
190
+ return { refusal: advisoryRefusal(ref, newest.version, blockingAdvisories(advisories, newest.version, policy)) };
178
191
  }
179
192
  if (mode.kind === 'explicit' && requested !== undefined
180
193
  && versions.some((v) => !v.yankedAt && satisfiesVersionSpec(v.version, requested))) {
@@ -313,7 +326,11 @@ export async function resolveListingReference(source, ref, scope) {
313
326
  return { ok: false, refusal: choice.refusal, publisher, listing };
314
327
  const version = choice.version;
315
328
  const { warnings, secretsWithheld } = listedVersionWarnings({ publisher, listing, version, advisories, policy });
316
- return { ok: true, publisher, listing, version, mode, policy, secretsWithheld, warnings };
329
+ // The pin keeps the pipeline on a flagged version while a clean one is allowed.
330
+ if (choice.suggestedVersion && ref.version !== undefined) {
331
+ warnings.push(vulnUpgradeAvailableWarning(ref_, version.version, choice.suggestedVersion));
332
+ }
333
+ return { ok: true, publisher, listing, version, mode, policy, secretsWithheld, warnings, suggestedVersion: choice.suggestedVersion };
317
334
  }
318
335
  /**
319
336
  * The non-fatal notes a resolved listed version carries (lookup answers,
@@ -408,6 +425,7 @@ export function listedPluginRecord(res) {
408
425
  scannedAt: version.scannedAt,
409
426
  scanFlaggedAt: version.scanFlaggedAt,
410
427
  scanFlag: version.scanFlag,
428
+ scanSummary: version.scanSummary,
411
429
  lifecycle: version.deprecatedAt ? 'deprecated' : 'production',
412
430
  deprecatedAt: version.deprecatedAt,
413
431
  deprecationMessage: version.deprecationMessage,
@@ -471,4 +489,4 @@ export async function resolvableListings(source, scope, filter = {}) {
471
489
  return (await orgListingStates(source, scope, filter))
472
490
  .filter((s) => s.resolved !== null);
473
491
  }
474
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJlc29sdXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3BsdWdpbi1yZXNvbHV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBRUgsT0FBTyxFQUNMLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsR0FDdkUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEYsT0FBTyxFQUFFLDBCQUEwQixFQUEwQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3BHLE9BQU8sRUFDTCxhQUFhLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsR0FDakUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLE1BQU0sR0FRUCxNQUFNLCtCQUErQixDQUFDO0FBeUJ2QyxrRkFBa0Y7QUFDbEYsTUFBTSxVQUFVLFlBQVksQ0FDMUIsTUFBeUIsRUFDekIsU0FBNkQsRUFDN0QsT0FBOEM7SUFFOUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsRCxJQUFJLFNBQVMsQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxXQUFXLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxhQUFhLEVBQUUsQ0FBQztRQUM5RixPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsR0FBRyxHQUFHLE9BQU8sT0FBTyxDQUFDLEtBQUssS0FBSyxhQUFhLENB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bnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogUmVzb2x2aW5nIGEgcGx1Z2luIHJlZmVyZW5jZSB0byBhbiBlY29zeXN0ZW0gTElTVElORyB2ZXJzaW9uIHRocm91Z2ggdGhlXG4gKiBvcmcncyBpbnN0YWxsIChkb2NzL3BsdWdpbi1pbnN0YWxsaW5nLm1kKS5cbiAqXG4gKiBPbmUgaW1wbGVtZW50YXRpb24gc2hhcmVkIGJ5IGV2ZXJ5IHBsYWNlIHRoYXQgYW5zd2VycyBcIndoaWNoIGxpc3RlZCB2ZXJzaW9uXG4gKiBkb2VzIHRoaXMgb3JnJ3MgcmVmZXJlbmNlIHJ1bj9cIjogdGhlIHBsdWdpbiBzZXJ2aWNlJ3MgYC9wbHVnaW5zL2xvb2t1cGAgKHdoYXRcbiAqIHN5bnRoIHBpbnMpLCB0aGUgcGlwZWxpbmUgc2VydmljZSdzIGNvbnRyYWN0IGNoZWNrIGF0IHBpcGVsaW5lIGNyZWF0ZSwgdGhlIEFJXG4gKiBnZW5lcmF0b3IncyBwbHVnaW4gbGlzdCBhbmQgdGhlIHBsYWNlaG9sZGVyIGd1YXJkLiBUaGUgZGVjaXNpb25zIGFyZSBQVVJFXG4gKiBmdW5jdGlvbnMgb3ZlciBsb2FkZWQgcm93czsgdGhlIHJvd3MgY29tZSB0aHJvdWdoIGEge0BsaW5rIExpc3RpbmdEYXRhU291cmNlfVxuICogc28gZWFjaCBzZXJ2aWNlIGNhbiBsb2FkIHRoZW0gaXRzIG93biB3YXkgKHtAbGluayBkcml6emxlTGlzdGluZ1NvdXJjZX0gaXMgdGhlXG4gKiBwbGFpbiBkcml6emxlIG9uZSkuXG4gKlxuICogVGhlIG1vZGVsOlxuICogIC0gQW4gb3JnIHJlc29sdmVzIGEgbGlzdGluZyBvbmx5IHRocm91Z2ggYW4gSU5TVEFMTDogYW4gZXhwbGljaXRcbiAqICAgIGBwbHVnaW5faW5zdGFsbHNgIHJvdyAoaXRzIG93biwgb3Ig4oCUIGZvciBhIHRlYW0g4oCUIGl0cyByb290IG9yZydzKSwgb3JcbiAqICAgIGZvciB0aGUgT2ZmaWNpYWwgcHVibGlzaGVyIHRoZSBJTVBMSUNJVCBpbnN0YWxsIGV2ZXJ5IG9yZyBoYXMgdW5sZXNzIGl0c1xuICogICAgY29uc3VtcHRpb24gcG9saWN5IHNheXMgYG9mZmljaWFsSW5zdGFsbHM6IGV4cGxpY2l0YC4gQW4gZXhwbGljaXRcbiAqICAgIGluc3RhbGwgb3ZlcnJpZGVzIHRoZSBpbXBsaWNpdCBvbmUuXG4gKiAgLSBUaGUgb3JnJ3MgQ09OU1VNUFRJT04gUE9MSUNZIGlzIGFwcGxpZWQgYXQgZXZlcnkgcmVzb2x1dGlvbjogYWxsb3dlZFxuICogICAgdGllcnMsIGJsb2NrZWQgbGlzdGluZ3MsIGFkdmlzb3J5IGJsb2NraW5nOyBzZWNyZXRzIGFyZSB3aXRoaGVsZCBmcm9tIHRpZXJzXG4gKiAgICB0aGUgcG9saWN5IGRvZXNuJ3QgdHJ1c3Qgd2l0aCB0aGVtLiBBIHRlYW0ncyBwb2xpY3kgaXMgbWVyZ2VkIHdpdGggaXRzIHJvb3RcbiAqICAgIG9yZydzIGFuZCBjYW4gb25seSBiZSBzdHJpY3Rlci5cbiAqICAtIFZlcnNpb24gY2hvaWNlOiB0aGUgaW5zdGFsbCdzIHJhbmdlIChwaW5uZWQgLyBgfmAgLyBgXmAgLyBub24tYnJlYWtpbmdcbiAqICAgIGxhdGVzdDsgaW1wbGljaXQgPSB0aGUgbG93ZXN0IGxpdmUgbWFqb3IpLCBuYXJyb3dlZCBieSB0aGUgcmVmZXJlbmNlJ3Mgb3duXG4gKiAgICB2ZXJzaW9uIHNwZWMuIFlhbmtlZCB2ZXJzaW9ucyBuZXZlciByZXNvbHZlIGZvciBhIGxpc3Rpbmc7IGEgcGF1c2VkXG4gKiAgICB2ZXJzaW9uIGlzIHNraXBwZWQgdW5sZXNzIHRoZSBpbnN0YWxsIGFscmVhZHkgcmVzb2x2ZWQgdG8gaXQgb3IgdGhlXG4gKiAgICByZWZlcmVuY2UgcGlucyBpdCBleGFjdGx5OyBhZHZpc29yeS1ibG9ja2VkIHZlcnNpb25zIGFyZSBza2lwcGVkLlxuICogIC0gU2NhbiBmbGFnczogYSB2ZXJzaW9uIHRoZSBuaWdodGx5IHJlc2NhbiBGTEFHR0VEIChmaXhhYmxlIENyaXRpY2Fsc1xuICogICAgb3ZlciBgUExVR0lOX1ZVTE5fTUFYX0NSSVRJQ0FMYCkgcmVzb2x2ZXMgd2l0aCBhIGBWVUxOX0ZMQUdHRURgIHdhcm5pbmcg4oCUXG4gKiAgICBvciwgd2l0aCBgUExVR0lOX0JMT0NLX09OX05FV19DUklUSUNBTGAgb24sIGlzIHNraXBwZWQgbGlrZSBhblxuICogICAgYWR2aXNvcnktYmxvY2tlZCBvbmUsIGFuZCBhbiBleGFjdCBwaW4gdG8gaXQgaXMgcmVmdXNlZFxuICogICAgYFBMVUdJTl9WRVJTSU9OX1ZVTE5fQkxPQ0tFRGAuXG4gKi9cblxuaW1wb3J0IHtcbiAgYXNTY2FuRmxhZywgYmxvY2tPbk5ld0NyaXRpY2FsLCB2dWxuQmxvY2tlZE1lc3NhZ2UsIHZ1bG5GbGFnZ2VkV2FybmluZywgdHlwZSBWdWxuRmxhZ2dlZFdhcm5pbmcsXG59IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IGFuZCwgZXEsIGluQXJyYXkgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgdHlwZSB7IENydWRUeCB9IGZyb20gJy4vY3J1ZC1zZXJ2aWNlLmpzJztcbmltcG9ydCB7IGFkdmlzb3JpZXNDb3ZlcmluZywgYmxvY2tpbmdBZHZpc29yaWVzIH0gZnJvbSAnLi9wbHVnaW4tYWR2aXNvcmllcy5qcyc7XG5pbXBvcnQgeyBlZmZlY3RpdmVDb25zdW1wdGlvblBvbGljeSwgdHlwZSBDb25zdW1wdGlvblBvbGljeSB9IGZyb20gJy4vcGx1Z2luLWNvbnN1bXB0aW9uLXBvbGljeS5qcyc7XG5pbXBvcnQge1xuICBjb21wYXJlU2VtdmVyLCBpc1ZlcnNpb25SYW5nZSwgcGFyc2VTZW12ZXIsIHNhdGlzZmllc1ZlcnNpb25TcGVjLFxufSBmcm9tICcuL3NlbXZlci1yYW5nZS5qcyc7XG5pbXBvcnQge1xuICBPRkZJQ0lBTF9QVUJMSVNIRVJfSEFORExFLFxuICBzY2hlbWEsXG4gIHR5cGUgSW5zdGFsbFZlcnNpb25Qb2xpY3ksXG4gIHR5cGUgUGx1Z2luQWR2aXNvcnksXG4gIHR5cGUgUGx1Z2luSW5zdGFsbCxcbiAgdHlwZSBQbHVnaW5JbnN0YWxsUG9saWN5LFxuICB0eXBlIFBsdWdpbkxpc3RpbmcsXG4gIHR5cGUgUGx1Z2luTGlzdGluZ1ZlcnNpb24sXG4gIHR5cGUgUHVibGlzaGVyLFxufSBmcm9tICcuLi9kYXRhYmFzZS9kcml6emxlLXNjaGVtYS5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZWZ1c2FscyBhbmQgd2FybmluZ3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBXaHkgYSByZWZlcmVuY2UgY2FuJ3QgcmVzb2x2ZTsgYGNvZGVgIGlzIGFuIGFwaS1jb3JlIGBFcnJvckNvZGVgIG5hbWUuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdXRpb25SZWZ1c2FsIHtcbiAgY29kZTogJ05PVF9GT1VORCcgfCAnUExVR0lOX05PVF9JTlNUQUxMRUQnIHwgJ1BMVUdJTl9CTE9DS0VEX0JZX1BPTElDWScgfCAnUExVR0lOX1VOQVZBSUxBQkxFJyB8ICdQTFVHSU5fVkVSU0lPTl9WVUxOX0JMT0NLRUQnO1xuICByZWFzb246IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKiBBIG5vbi1mYXRhbCBub3RlIGEgcmVzb2x1dGlvbiBjYXJyaWVzIChzeW50aCBwcmludHMgaXRzIGBtZXNzYWdlYCkuICovXG5leHBvcnQgdHlwZSBSZXNvbHV0aW9uV2FybmluZyA9XG4gIHwgeyBjb2RlOiAnUExVR0lOX0FEVklTT1JZJyB8ICdQTFVHSU5fREVQUkVDQVRFRCcgfCAnUExVR0lOX1NFQ1JFVFNfV0lUSEhFTEQnIHwgJ0xJU1RJTkdfVU5NQUlOVEFJTkVEJzsgbWVzc2FnZTogc3RyaW5nIH1cbiAgfCBWdWxuRmxhZ2dlZFdhcm5pbmc7XG5cbi8qKiBXaHkgdGhlIG9yZydzIHBvbGljeSAob3IgdGhlIGxpc3RpbmcncyBzdGF0ZSkga2VlcHMgYSBsaXN0aW5nIG91dCwgb3IgbnVsbC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdGluZ0Jsb2NrIHtcbiAgcmVhc29uOiAndGllcicgfCAnYmxvY2tlZF9saXN0aW5nJyB8ICdzdXNwZW5kZWQnO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKiBXaGV0aGVyIGBwb2xpY3lgIChvciB0aGUgbGlzdGluZydzIG93biBzdGF0ZSkgcmVmdXNlcyB0aGUgbGlzdGluZyBvdXRyaWdodC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0aW5nQmxvY2soXG4gIHBvbGljeTogQ29uc3VtcHRpb25Qb2xpY3ksXG4gIHB1Ymxpc2hlcjogUGljazxQdWJsaXNoZXIsICdoYW5kbGUnIHwgJ3RpZXInIHwgJ3N1c3BlbmRlZEF0Jz4sXG4gIGxpc3Rpbmc6IFBpY2s8UGx1Z2luTGlzdGluZywgJ25hbWUnIHwgJ3N0YXRlJz4sXG4pOiBMaXN0aW5nQmxvY2sgfCBudWxsIHtcbiAgY29uc3QgcmVmID0gYCR7cHVibGlzaGVyLmhhbmRsZX0vJHtsaXN0aW5nLm5hbWV9YDtcbiAgaWYgKHB1Ymxpc2hlci5zdXNwZW5kZWRBdCB8fCBsaXN0aW5nLnN0YXRlID09PSAnc3VzcGVuZGVkJyB8fCBsaXN0aW5nLnN0YXRlID09PSAndHJhbnNmZXJyZWQnKSB7XG4gICAgcmV0dXJuIHsgcmVhc29uOiAnc3VzcGVuZGVkJywgbWVzc2FnZTogYCR7cmVmfSBpcyAke2xpc3Rpbmcuc3RhdGUgPT09ICd0cmFuc2ZlcnJlZCcgPyAndHJhbnNmZXJyZWQnIDogJ3N1c3BlbmRlZCd9IGFuZCBubyBsb25nZXIgcmVzb2x2ZXMuYCB9O1xuICB9XG4gIGlmIChwb2xpY3kuYmxvY2tlZExpc3RpbmdzLnNvbWUoKGIpID0+IGIucHVibGlzaGVyID09PSBwdWJsaXNoZXIuaGFuZGxlICYmIGIubmFtZSA9PT0gbGlzdGluZy5uYW1lKSkge1xuICAgIHJldHVybiB7IHJlYXNvbjogJ2Jsb2NrZWRfbGlzdGluZycsIG1lc3NhZ2U6IGBZb3VyIG9yZ2FuaXphdGlvbidzIHBsdWdpbiBwb2xpY3kgYmxvY2tzICR7cmVmfS5gIH07XG4gIH1cbiAgaWYgKCFwb2xpY3kuYWxsb3dlZFRpZXJzLmluY2x1ZGVzKHB1Ymxpc2hlci50aWVyKSkge1xuICAgIHJldHVybiB7IHJlYXNvbjogJ3RpZXInLCBtZXNzYWdlOiBgWW91ciBvcmdhbml6YXRpb24ncyBwbHVnaW4gcG9saWN5IGRvZXNuJ3QgYWxsb3cgJHtwdWJsaXNoZXIudGllcn0gcGx1Z2lucyAoJHtyZWZ9KS5gIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBUaGUgcmVmdXNhbCBhIHtAbGluayBMaXN0aW5nQmxvY2t9IGJlY29tZXMuICovXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tSZWZ1c2FsKGJsb2NrOiBMaXN0aW5nQmxvY2spOiBSZXNvbHV0aW9uUmVmdXNhbCB7XG4gIHJldHVybiBibG9jay5yZWFzb24gPT09ICdzdXNwZW5kZWQnXG4gICAgPyB7IGNvZGU6ICdQTFVHSU5fVU5BVkFJTEFCTEUnLCByZWFzb246ICdzdXNwZW5kZWQnLCBtZXNzYWdlOiBibG9jay5tZXNzYWdlIH1cbiAgICA6IHsgY29kZTogJ1BMVUdJTl9CTE9DS0VEX0JZX1BPTElDWScsIHJlYXNvbjogYmxvY2sucmVhc29uLCBtZXNzYWdlOiBibG9jay5tZXNzYWdlIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBJbnN0YWxscyBhbmQgdmVyc2lvbiBjaG9pY2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBIb3cgdGhlIG9yZyByZWFjaGVzIGEgbGlzdGluZzogYW4gZXhwbGljaXQgaW5zdGFsbCByb3csIG9yIHRoZSBpbXBsaWNpdCBPZmZpY2lhbCBvbmUuICovXG5leHBvcnQgdHlwZSBJbnN0YWxsTW9kZSA9XG4gIHwgeyBraW5kOiAnZXhwbGljaXQnOyBpbnN0YWxsOiBQbHVnaW5JbnN0YWxsOyBpbmhlcml0ZWQ6IGJvb2xlYW4gfVxuICB8IHsga2luZDogJ2ltcGxpY2l0JyB9O1xuXG50eXBlIFZlcnNpb25Sb3cgPSBQaWNrPFBsdWdpbkxpc3RpbmdWZXJzaW9uLCAndmVyc2lvbicgfCAneWFua2VkQXQnIHwgJ3BhdXNlZEF0JyB8ICdicmVha2luZyc+O1xuXG4vKiogVGhlIHJlZnVzYWwgYW4gZXhhY3QgcGluIHRvIGEgZmxhZ2dlZCB2ZXJzaW9uIGdldHMgd2hpbGUgYmxvY2tpbmcgKDQwOSkuICovXG5mdW5jdGlvbiB2dWxuUmVmdXNhbChyZWY6IHN0cmluZywgdjogUGljazxQbHVnaW5MaXN0aW5nVmVyc2lvbiwgJ3ZlcnNpb24nIHwgJ3NjYW5GbGFnJz4pOiBSZXNvbHV0aW9uUmVmdXNhbCB7XG4gIGNvbnN0IGZsYWcgPSBhc1NjYW5GbGFnKHYuc2NhbkZsYWcpID8/IHsgY3JpdGljYWw6IDAsIGhpZ2g6IDAsIG1heENyaXRpY2FsOiAwLCBmaW5kaW5nczogW10gfTtcbiAgY29uc3QgZml4ZWQgPSBbLi4ubmV3IFNldChmbGFnLmZpbmRpbmdzLmZsYXRNYXAoKGYpID0+IGYuZml4ZWRJbikpXTtcbiAgcmV0dXJuIHtcbiAgICBjb2RlOiAnUExVR0lOX1ZFUlNJT05fVlVMTl9CTE9DS0VEJyxcbiAgICByZWFzb246ICd2dWxuX2ZsYWdnZWQnLFxuICAgIG1lc3NhZ2U6IHZ1bG5CbG9ja2VkTWVzc2FnZShyZWYsIHYudmVyc2lvbiwgZmxhZyksXG4gICAgZGV0YWlsczogeyB2ZXJzaW9uOiB2LnZlcnNpb24sIGNyaXRpY2FsOiBmbGFnLmNyaXRpY2FsLCBoaWdoOiBmbGFnLmhpZ2gsIGZpbmRpbmdzOiBmbGFnLmZpbmRpbmdzLCAuLi4oZml4ZWQubGVuZ3RoID8geyBmaXhlZFZlcnNpb25zOiBmaXhlZCB9IDoge30pIH0sXG4gIH07XG59XG5cbmNvbnN0IGlzU3RhYmxlID0gKHY6IHN0cmluZyk6IGJvb2xlYW4gPT4gKHBhcnNlU2VtdmVyKHYpPy5wcmVyZWxlYXNlLmxlbmd0aCA/PyAxKSA9PT0gMDtcblxuLyoqXG4gKiBUaGUgaW1wbGljaXQgT2ZmaWNpYWwgaW5zdGFsbCdzIHJhbmdlOiBldmVyeSB2ZXJzaW9uIG9mIHRoZSBMT1dFU1QgbGl2ZVxuICogbWFqb3IgKGA8bWFqb3I+LnhgKSDigJQgcGF0Y2ggYW5kIG1pbm9yIHZlcnNpb25zIGZsb3csIGEgbmV3IG1ham9yIG5ldmVyIGRvZXNcbiAqICh0aGUgb3JnIG1vdmVzIHRvIGl0IHdpdGggYW4gZXhwbGljaXQgaW5zdGFsbCkuIE51bGwgd2hlbiBub3RoaW5nIGlzIGxpdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbXBsaWNpdEluc3RhbGxSYW5nZSh2ZXJzaW9uczogcmVhZG9ubHkgVmVyc2lvblJvd1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IG1ham9ycyA9IHZlcnNpb25zXG4gICAgLmZpbHRlcigodikgPT4gIXYueWFua2VkQXQgJiYgaXNTdGFibGUodi52ZXJzaW9uKSlcbiAgICAubWFwKCh2KSA9PiBwYXJzZVNlbXZlcih2LnZlcnNpb24pIS5tYWpvcik7XG4gIGlmIChtYWpvcnMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGAke01hdGgubWluKC4uLm1ham9ycyl9LnhgO1xufVxuXG4vKiogV2hldGhlciBhbiBpbnN0YWxsJ3MgdmVyc2lvbiBwb2xpY3kgYWRtaXRzIGB2ZXJzaW9uYCAodGhlIGJhc2VsaW5lIGlzIGBwaW5uZWRWZXJzaW9uYCkuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbEFkbWl0cyhcbiAgaW5zdGFsbDogUGljazxQbHVnaW5JbnN0YWxsLCAndmVyc2lvblBvbGljeScgfCAncGlubmVkVmVyc2lvbic+LFxuICB2ZXJzaW9uOiBzdHJpbmcsXG4gIHZlcnNpb25zOiByZWFkb25seSBWZXJzaW9uUm93W10sXG4pOiBib29sZWFuIHtcbiAgY29uc3QgYmFzZSA9IGluc3RhbGwucGlubmVkVmVyc2lvbjtcbiAgc3dpdGNoIChpbnN0YWxsLnZlcnNpb25Qb2xpY3kgYXMgSW5zdGFsbFZlcnNpb25Qb2xpY3kpIHtcbiAgICBjYXNlICdwaW5uZWQnOlxuICAgICAgcmV0dXJuIHZlcnNpb24gPT09IGJhc2U7XG4gICAgY2FzZSAncGF0Y2gnOlxuICAgICAgcmV0dXJuIGJhc2UgIT09IG51bGwgJiYgc2F0aXNmaWVzVmVyc2lvblNwZWModmVyc2lvbiwgYH4ke2Jhc2V9YCk7XG4gICAgY2FzZSAnbWlub3InOlxuICAgICAgcmV0dXJuIGJhc2UgIT09IG51bGwgJiYgc2F0aXNmaWVzVmVyc2lvblNwZWModmVyc2lvbiwgYF4ke2Jhc2V9YCk7XG4gICAgY2FzZSAnbGF0ZXN0Jzoge1xuICAgICAgaWYgKCFpc1N0YWJsZSh2ZXJzaW9uKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGJhc2UgPT09IG51bGwpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKGNvbXBhcmVTZW12ZXIodmVyc2lvbiwgYmFzZSkgPCAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBOZXZlciBjcm9zcyBhIHZlcnNpb24gdGhlIHB1Ymxpc2hlciBtYXJrZWQgYnJlYWtpbmcuXG4gICAgICByZXR1cm4gIXZlcnNpb25zLnNvbWUoKHYpID0+IHYuYnJlYWtpbmcgJiYgY29tcGFyZVNlbXZlcih2LnZlcnNpb24sIGJhc2UpID4gMCAmJiBjb21wYXJlU2VtdmVyKHYudmVyc2lvbiwgdmVyc2lvbikgPD0gMCk7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqIFdoZXRoZXIgYG1vZGVgIGFkbWl0cyBgdmVyc2lvbmAgKHRoZSBpbXBsaWNpdCByYW5nZSBmb3IgYW4gaW1wbGljaXQgaW5zdGFsbCkuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZUFkbWl0cyhtb2RlOiBJbnN0YWxsTW9kZSwgdmVyc2lvbjogc3RyaW5nLCB2ZXJzaW9uczogcmVhZG9ubHkgVmVyc2lvblJvd1tdKTogYm9vbGVhbiB7XG4gIGlmIChtb2RlLmtpbmQgPT09ICdleHBsaWNpdCcpIHJldHVybiBpbnN0YWxsQWRtaXRzKG1vZGUuaW5zdGFsbCwgdmVyc2lvbiwgdmVyc2lvbnMpO1xuICBjb25zdCByYW5nZSA9IGltcGxpY2l0SW5zdGFsbFJhbmdlKHZlcnNpb25zKTtcbiAgcmV0dXJuIHJhbmdlICE9PSBudWxsICYmIHNhdGlzZmllc1ZlcnNpb25TcGVjKHZlcnNpb24sIHJhbmdlKTtcbn1cblxuLyoqIElucHV0IHRvIHtAbGluayBzZWxlY3RMaXN0aW5nVmVyc2lvbn0uICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25DaG9pY2VJbnB1dDxWIGV4dGVuZHMgUGx1Z2luTGlzdGluZ1ZlcnNpb24gPSBQbHVnaW5MaXN0aW5nVmVyc2lvbj4ge1xuICByZWY6IHN0cmluZztcbiAgdmVyc2lvbnM6IHJlYWRvbmx5IFZbXTtcbiAgbW9kZTogSW5zdGFsbE1vZGU7XG4gIC8qKiBUaGUgcmVmZXJlbmNlJ3Mgb3duIHZlcnNpb24gc3BlYyAoYGZpbHRlci52ZXJzaW9uYCkuICovXG4gIHJlcXVlc3RlZD86IHN0cmluZztcbiAgYWR2aXNvcmllczogcmVhZG9ubHkgUGx1Z2luQWR2aXNvcnlbXTtcbiAgcG9saWN5OiBDb25zdW1wdGlvblBvbGljeTtcbiAgLyoqIFNraXAgLyByZWZ1c2UgcmVzY2FuLWZsYWdnZWQgdmVyc2lvbnMgKGRlZmF1bHQ6IGBQTFVHSU5fQkxPQ0tfT05fTkVXX0NSSVRJQ0FMYCkuICovXG4gIGJsb2NrRmxhZ2dlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGljayB0aGUgbGlzdGVkIHZlcnNpb24gYSByZWZlcmVuY2UgcmVzb2x2ZXMgdG8gKHNlZSB0aGUgbW9kdWxlIGRvYyksIG9yXG4gKiB0aGUgcmVmdXNhbCB0aGF0IGV4cGxhaW5zIHdoeSBub25lIGNhbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdExpc3RpbmdWZXJzaW9uPFYgZXh0ZW5kcyBQbHVnaW5MaXN0aW5nVmVyc2lvbj4oaW5wdXQ6IFZlcnNpb25DaG9pY2VJbnB1dDxWPik6IHsgdmVyc2lvbjogViB9IHwgeyByZWZ1c2FsOiBSZXNvbHV0aW9uUmVmdXNhbCB9IHtcbiAgY29uc3QgeyByZWYsIHZlcnNpb25zLCBtb2RlLCByZXF1ZXN0ZWQsIGFkdmlzb3JpZXMsIHBvbGljeSB9ID0gaW5wdXQ7XG4gIGNvbnN0IGJsb2NrRmxhZ2dlZCA9IGlucHV0LmJsb2NrRmxhZ2dlZCA/PyBibG9ja09uTmV3Q3JpdGljYWwoKTtcbiAgY29uc3QgZXhhY3QgPSByZXF1ZXN0ZWQgIT09IHVuZGVmaW5lZCAmJiAhaXNWZXJzaW9uUmFuZ2UocmVxdWVzdGVkKSA/IHJlcXVlc3RlZC50cmltKCkgOiBudWxsO1xuXG4gIGlmIChleGFjdCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHYgPSB2ZXJzaW9ucy5maW5kKCh4KSA9PiB4LnZlcnNpb24gPT09IGV4YWN0KTtcbiAgICBpZiAoIXYpIHJldHVybiB7IHJlZnVzYWw6IHsgY29kZTogJ05PVF9GT1VORCcsIHJlYXNvbjogJ3ZlcnNpb25fbm90X2ZvdW5kJywgbWVzc2FnZTogYCR7cmVmfSBoYXMgbm8gcHVibGlzaGVkIHZlcnNpb24gJHtleGFjdH0uYCB9IH07XG4gICAgaWYgKHYueWFua2VkQXQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlZnVzYWw6IHtcbiAgICAgICAgICBjb2RlOiAnUExVR0lOX1VOQVZBSUxBQkxFJyxcbiAgICAgICAgICByZWFzb246ICd5YW5rZWQnLFxuICAgICAgICAgIG1lc3NhZ2U6IGAke3JlZn1AJHtleGFjdH0gaXMgeWFua2VkJHt2LnlhbmtSZWFzb24gPyBgOiAke3YueWFua1JlYXNvbn1gIDogJyd9LiBNb3ZlIHRvIGEgc3VwcG9ydGVkIHZlcnNpb24uYCxcbiAgICAgICAgICBkZXRhaWxzOiB7IHZlcnNpb246IGV4YWN0IH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAobW9kZS5raW5kID09PSAnZXhwbGljaXQnICYmICFpbnN0YWxsQWRtaXRzKG1vZGUuaW5zdGFsbCwgZXhhY3QsIHZlcnNpb25zKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVmdXNhbDoge1xuICAgICAgICAgIGNvZGU6ICdQTFVHSU5fTk9UX0lOU1RBTExFRCcsXG4gICAgICAgICAgcmVhc29uOiAndmVyc2lvbl9vdXRzaWRlX2luc3RhbGwnLFxuICAgICAgICAgIG1lc3NhZ2U6IGAke3JlZn1AJHtleGFjdH0gaXMgb3V0c2lkZSB5b3VyIGluc3RhbGwgKCR7bW9kZS5pbnN0YWxsLnZlcnNpb25Qb2xpY3l9IGZyb20gJHttb2RlLmluc3RhbGwucGlubmVkVmVyc2lvbn0pLiBVcGdyYWRlIHRoZSBpbnN0YWxsIGZpcnN0LmAsXG4gICAgICAgICAgZGV0YWlsczogeyB2ZXJzaW9uOiBleGFjdCwgdmVyc2lvblBvbGljeTogbW9kZS5pbnN0YWxsLnZlcnNpb25Qb2xpY3ksIHBpbm5lZFZlcnNpb246IG1vZGUuaW5zdGFsbC5waW5uZWRWZXJzaW9uIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBibG9ja2luZyA9IGJsb2NraW5nQWR2aXNvcmllcyhhZHZpc29yaWVzLCBleGFjdCwgcG9saWN5KTtcbiAgICBpZiAoYmxvY2tpbmcubGVuZ3RoKSByZXR1cm4geyByZWZ1c2FsOiBhZHZpc29yeVJlZnVzYWwocmVmLCBleGFjdCwgYmxvY2tpbmcpIH07XG4gICAgaWYgKGJsb2NrRmxhZ2dlZCAmJiB2LnNjYW5GbGFnZ2VkQXQpIHJldHVybiB7IHJlZnVzYWw6IHZ1bG5SZWZ1c2FsKHJlZiwgdikgfTtcbiAgICByZXR1cm4geyB2ZXJzaW9uOiB2IH07XG4gIH1cblxuICBjb25zdCByZXNvbHZlZEJlZm9yZSA9IG1vZGUua2luZCA9PT0gJ2V4cGxpY2l0JyA/IG1vZGUuaW5zdGFsbC5yZXNvbHZlZFZlcnNpb24gOiBudWxsO1xuICAvLyBUaGUgcmFuZ2UgdGhlIElOU1RBTEwgYWxsb3dzLiBGb3IgdGhlIGltcGxpY2l0IGluc3RhbGwgYW4gZXhwbGljaXQgc3BlYyBvblxuICAvLyB0aGUgcmVmZXJlbmNlIHJlcGxhY2VzIHRoZSBpbXBsaWNpdCByYW5nZSAoaXQgaXMgYSBkZWxpYmVyYXRlIGNob2ljZSkuXG4gIGNvbnN0IGFkbWl0dGVkID0gdmVyc2lvbnMuZmlsdGVyKCh2KSA9PiAhdi55YW5rZWRBdFxuICAgICYmIChtb2RlLmtpbmQgPT09ICdleHBsaWNpdCcgPyBpbnN0YWxsQWRtaXRzKG1vZGUuaW5zdGFsbCwgdi52ZXJzaW9uLCB2ZXJzaW9ucylcbiAgICAgIDogcmVxdWVzdGVkICE9PSB1bmRlZmluZWQgfHwgbW9kZUFkbWl0cyhtb2RlLCB2LnZlcnNpb24sIHZlcnNpb25zKSlcbiAgICAmJiAocmVxdWVzdGVkID09PSB1bmRlZmluZWQgfHwgc2F0aXNmaWVzVmVyc2lvblNwZWModi52ZXJzaW9uLCByZXF1ZXN0ZWQpKVxuICAgICYmICghdi5wYXVzZWRBdCB8fCB2LnZlcnNpb24gPT09IHJlc29sdmVkQmVmb3JlKSk7XG4gIGNvbnN0IGFsbG93ZWQgPSBhZG1pdHRlZC5maWx0ZXIoKHYpID0+IGJsb2NraW5nQWR2aXNvcmllcyhhZHZpc29yaWVzLCB2LnZlcnNpb24sIHBvbGljeSkubGVuZ3RoID09PSAwXG4gICAgJiYgIShibG9ja0ZsYWdnZWQgJiYgdi5zY2FuRmxhZ2dlZEF0KSk7XG4gIC8vIFJhbmdlcyBvbmx5IGFkbWl0IHByZXJlbGVhc2VzIHRoZXkgbmFtZSAobnBtIHNlbWFudGljcyksIHNvIHRoZSBoaWdoZXN0XG4gIC8vIGFkbWl0dGVkIHZlcnNpb24gaXMgdGhlIGFuc3dlci5cbiAgY29uc3QgYmVzdCA9IGhpZ2hlc3QoYWxsb3dlZC5tYXAoKHYpID0+IHYudmVyc2lvbikpO1xuICBpZiAoYmVzdCkgcmV0dXJuIHsgdmVyc2lvbjogYWxsb3dlZC5maW5kKCh2KSA9PiB2LnZlcnNpb24gPT09IGJlc3QpISB9O1xuXG4gIGlmIChhZG1pdHRlZC5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbmV3ZXN0ID0gaGlnaGVzdChhZG1pdHRlZC5tYXAoKHYpID0+IHYudmVyc2lvbikpITtcbiAgICBjb25zdCBibG9ja2luZyA9IGJsb2NraW5nQWR2aXNvcmllcyhhZHZpc29yaWVzLCBuZXdlc3QsIHBvbGljeSk7XG4gICAgaWYgKGJsb2NraW5nLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHsgcmVmdXNhbDogdnVsblJlZnVzYWwocmVmLCBhZG1pdHRlZC5maW5kKCh2KSA9PiB2LnZlcnNpb24gPT09IG5ld2VzdCkhKSB9O1xuICAgIHJldHVybiB7IHJlZnVzYWw6IGFkdmlzb3J5UmVmdXNhbChyZWYsIG5ld2VzdCwgYmxvY2tpbmcpIH07XG4gIH1cbiAgaWYgKG1vZGUua2luZCA9PT0gJ2V4cGxpY2l0JyAmJiByZXF1ZXN0ZWQgIT09IHVuZGVmaW5lZFxuICAgICYmIHZlcnNpb25zLnNvbWUoKHYpID0+ICF2LnlhbmtlZEF0ICYmIHNhdGlzZmllc1ZlcnNpb25TcGVjKHYudmVyc2lvbiwgcmVxdWVzdGVkKSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVmdXNhbDoge1xuICAgICAgICBjb2RlOiAnUExVR0lOX05PVF9JTlNUQUxMRUQnLFxuICAgICAgICByZWFzb246ICd2ZXJzaW9uX291dHNpZGVfaW5zdGFsbCcsXG4gICAgICAgIG1lc3NhZ2U6IGBObyB2ZXJzaW9uIG9mICR7cmVmfSBtYXRjaGluZyAke3JlcXVlc3RlZH0gaXMgaW5zaWRlIHlvdXIgaW5zdGFsbCAoJHttb2RlLmluc3RhbGwudmVyc2lvblBvbGljeX0gZnJvbSAke21vZGUuaW5zdGFsbC5waW5uZWRWZXJzaW9ufSkuIFVwZ3JhZGUgdGhlIGluc3RhbGwgZmlyc3QuYCxcbiAgICAgICAgZGV0YWlsczogeyByZXF1ZXN0ZWQsIHZlcnNpb25Qb2xpY3k6IG1vZGUuaW5zdGFsbC52ZXJzaW9uUG9saWN5LCBwaW5uZWRWZXJzaW9uOiBtb2RlLmluc3RhbGwucGlubmVkVmVyc2lvbiB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgcmVmdXNhbDoge1xuICAgICAgY29kZTogJ05PVF9GT1VORCcsXG4gICAgICByZWFzb246ICdub19tYXRjaGluZ192ZXJzaW9uJyxcbiAgICAgIG1lc3NhZ2U6IGBObyByZXNvbHZhYmxlIHZlcnNpb24gb2YgJHtyZWZ9JHtyZXF1ZXN0ZWQgPyBgIG1hdGNoZXMgJHtyZXF1ZXN0ZWR9YCA6ICcnfS5gLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKiBUaGUgaGlnaGVzdCBvZiBgdmVyc2lvbnNgIGJ5IHNlbXZlciAocHJlcmVsZWFzZXMgaW5jbHVkZWQpLiAqL1xuZnVuY3Rpb24gaGlnaGVzdCh2ZXJzaW9uczogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgcmV0dXJuIHZlcnNpb25zLnJlZHVjZTxzdHJpbmcgfCBudWxsPigoYmVzdCwgdikgPT4gKGJlc3QgPT09IG51bGwgfHwgY29tcGFyZVNlbXZlcih2LCBiZXN0KSA+IDAgPyB2IDogYmVzdCksIG51bGwpO1xufVxuXG5mdW5jdGlvbiBhZHZpc29yeVJlZnVzYWwocmVmOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgYmxvY2tpbmc6IFJlYWRvbmx5QXJyYXk8UGljazxQbHVnaW5BZHZpc29yeSwgJ2lkJyB8ICdzZXZlcml0eScgfCAnZml4ZWRWZXJzaW9uJyB8ICdzdW1tYXJ5Jz4+KTogUmVzb2x1dGlvblJlZnVzYWwge1xuICBjb25zdCBmaXhlZCA9IGJsb2NraW5nLm1hcCgoYSkgPT4gYS5maXhlZFZlcnNpb24pLmZpbHRlcigodik6IHYgaXMgc3RyaW5nID0+ICEhdik7XG4gIHJldHVybiB7XG4gICAgY29kZTogJ1BMVUdJTl9CTE9DS0VEX0JZX1BPTElDWScsXG4gICAgcmVhc29uOiAnYWR2aXNvcnknLFxuICAgIG1lc3NhZ2U6IGAke3JlZn1AJHt2ZXJzaW9ufSBpcyBibG9ja2VkIGJ5IHlvdXIgb3JnYW5pemF0aW9uJ3MgYWR2aXNvcnkgcG9saWN5OiAke2Jsb2NraW5nLm1hcCgoYSkgPT4gYCR7YS5zZXZlcml0eX0g4oCUICR7YS5zdW1tYXJ5fWApLmpvaW4oJzsgJyl9LmBcbiAgICAgICsgKGZpeGVkLmxlbmd0aCA/IGAgRml4ZWQgaW4gJHtmaXhlZC5qb2luKCcsICcpfS5gIDogJycpLFxuICAgIGRldGFpbHM6IHsgdmVyc2lvbiwgYWR2aXNvcmllczogYmxvY2tpbmcubWFwKChhKSA9PiBhLmlkKSwgLi4uKGZpeGVkLmxlbmd0aCA/IHsgZml4ZWRWZXJzaW9uczogZml4ZWQgfSA6IHt9KSB9LFxuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhlIG9yZydzIGluc3RhbGwgc3RhdGUgZm9yIG9uZSBsaXN0aW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogVGhlIG9yZyAoYW5kLCBmb3IgYSB0ZWFtLCBpdHMgcm9vdCBvcmcpIGEgcmVzb2x1dGlvbiBydW5zIGZvci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x1dGlvblNjb3BlIHtcbiAgb3JnSWQ6IHN0cmluZztcbiAgLyoqIFRoZSByb290IG9yZyB3aGVuIHRoZSBjYWxsZXIgaXMgYSB0ZWFtLiAqL1xuICByb290T3JnSWQ/OiBzdHJpbmc7XG59XG5cbi8qKiBUaGUgb3JnIGlkcyB3aG9zZSBpbnN0YWxscyBhbmQgcG9saWNpZXMgYXBwbHksIG93biBmaXJzdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY29wZU9yZ0lkcyhzY29wZTogUmVzb2x1dGlvblNjb3BlKTogc3RyaW5nW10ge1xuICBjb25zdCBvd24gPSBzY29wZS5vcmdJZC50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCByb290ID0gc2NvcGUucm9vdE9yZ0lkPy50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gcm9vdCAmJiByb290ICE9PSBvd24gPyBbb3duLCByb290XSA6IFtvd25dO1xufVxuXG4vKipcbiAqIEhvdyB0aGUgb3JnIHJlYWNoZXMgYGxpc3RpbmdgIOKAlCBvciB0aGUgcmVmdXNhbC4gQW4gQUNUSVZFIG93bi1vcmcgcm93IHdpbnMsXG4gKiB0aGVuIHRoZSByb290IG9yZydzIChhIHRlYW0gaW5oZXJpdHMgaXQpOyBmYWlsaW5nIGJvdGgsIHRoZSBpbXBsaWNpdFxuICogT2ZmaWNpYWwgaW5zdGFsbCAodW5sZXNzIHRoZSBwb2xpY3kgaXMgYGV4cGxpY2l0YCk7IG90aGVyd2lzZSB0aGUgb3JnJ3Mgb3duXG4gKiBwZW5kaW5nIC8gZGVuaWVkIHJvdyBleHBsYWlucyB0aGUgcmVmdXNhbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxNb2RlRm9yKFxuICBwdWJsaXNoZXI6IFBpY2s8UHVibGlzaGVyLCAnaGFuZGxlJz4sXG4gIGxpc3Rpbmc6IFBpY2s8UGx1Z2luTGlzdGluZywgJ2lkJyB8ICduYW1lJz4sXG4gIGluc3RhbGxzOiByZWFkb25seSBQbHVnaW5JbnN0YWxsW10sXG4gIHBvbGljeTogQ29uc3VtcHRpb25Qb2xpY3ksXG4gIHNjb3BlOiBSZXNvbHV0aW9uU2NvcGUsXG4pOiBJbnN0YWxsTW9kZSB8IFJlc29sdXRpb25SZWZ1c2FsIHtcbiAgY29uc3QgW293biwgcm9vdF0gPSBzY29wZU9yZ0lkcyhzY29wZSk7XG4gIGNvbnN0IGZvckxpc3RpbmcgPSBpbnN0YWxscy5maWx0ZXIoKGkpID0+IGkubGlzdGluZ0lkID09PSBsaXN0aW5nLmlkKTtcbiAgY29uc3Qgb3duUm93ID0gZm9yTGlzdGluZy5maW5kKChpKSA9PiBpLm9yZ0lkLnRvTG93ZXJDYXNlKCkgPT09IG93bik7XG4gIGNvbnN0IHJvb3RSb3cgPSByb290ID8gZm9yTGlzdGluZy5maW5kKChpKSA9PiBpLm9yZ0lkLnRvTG93ZXJDYXNlKCkgPT09IHJvb3QpIDogdW5kZWZpbmVkO1xuICBpZiAob3duUm93Py5zdGF0dXMgPT09ICdhY3RpdmUnKSByZXR1cm4geyBraW5kOiAnZXhwbGljaXQnLCBpbnN0YWxsOiBvd25Sb3csIGluaGVyaXRlZDogZmFsc2UgfTtcbiAgaWYgKHJvb3RSb3c/LnN0YXR1cyA9PT0gJ2FjdGl2ZScpIHJldHVybiB7IGtpbmQ6ICdleHBsaWNpdCcsIGluc3RhbGw6IHJvb3RSb3csIGluaGVyaXRlZDogdHJ1ZSB9O1xuICBjb25zdCByZWYgPSBgJHtwdWJsaXNoZXIuaGFuZGxlfS8ke2xpc3RpbmcubmFtZX1gO1xuICBpZiAocHVibGlzaGVyLmhhbmRsZSA9PT0gT0ZGSUNJQUxfUFVCTElTSEVSX0hBTkRMRSkge1xuICAgIGlmIChwb2xpY3kub2ZmaWNpYWxJbnN0YWxscyA9PT0gJ2ltcGxpY2l0JykgcmV0dXJuIHsga2luZDogJ2ltcGxpY2l0JyB9O1xuICAgIGlmICghb3duUm93KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2RlOiAnUExVR0lOX05PVF9JTlNUQUxMRUQnLFxuICAgICAgICByZWFzb246ICdvZmZpY2lhbF9leHBsaWNpdCcsXG4gICAgICAgIG1lc3NhZ2U6IGBZb3VyIG9yZ2FuaXphdGlvbiBpbnN0YWxscyBPZmZpY2lhbCBwbHVnaW5zIGV4cGxpY2l0bHk7IGluc3RhbGwgJHtyZWZ9IGZpcnN0LmAsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBpZiAob3duUm93Py5zdGF0dXMgPT09ICdwZW5kaW5nX2FwcHJvdmFsJykge1xuICAgIHJldHVybiB7IGNvZGU6ICdQTFVHSU5fTk9UX0lOU1RBTExFRCcsIHJlYXNvbjogJ3BlbmRpbmdfYXBwcm92YWwnLCBtZXNzYWdlOiBgVGhlIGluc3RhbGwgb2YgJHtyZWZ9IGlzIHdhaXRpbmcgZm9yIGFwcHJvdmFsLmAgfTtcbiAgfVxuICBpZiAob3duUm93Py5zdGF0dXMgPT09ICdkZW5pZWQnKSB7XG4gICAgcmV0dXJuIHsgY29kZTogJ1BMVUdJTl9OT1RfSU5TVEFMTEVEJywgcmVhc29uOiAnZGVuaWVkJywgbWVzc2FnZTogYFRoZSBpbnN0YWxsIG9mICR7cmVmfSB3YXMgZGVuaWVkLmAgfTtcbiAgfVxuICByZXR1cm4geyBjb2RlOiAnUExVR0lOX05PVF9JTlNUQUxMRUQnLCByZWFzb246ICdub3RfaW5zdGFsbGVkJywgbWVzc2FnZTogYCR7cmVmfSBpcyBub3QgaW5zdGFsbGVkIGluIHlvdXIgb3JnYW5pemF0aW9uLmAgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIERhdGEgc291cmNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogVGhlIHJvd3MgdGhlIHJlc29sdmVyIHJlYWRzLiBJbXBsZW1lbnRhdGlvbnMgbXVzdCBydW4gd2l0aCBhIHNjb3BlIHRoYXQgY2FuXG4gKiAgcmVhZCB0aGUgZWNvc3lzdGVtIHRhYmxlcyBhbmQgdGhlIG9yZydzIChhbmQgcm9vdCBvcmcncykgaW5zdGFsbCByb3dzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXN0aW5nRGF0YVNvdXJjZSB7XG4gIHB1Ymxpc2hlckJ5SGFuZGxlKGhhbmRsZTogc3RyaW5nKTogUHJvbWlzZTxQdWJsaXNoZXIgfCBudWxsPjtcbiAgcHVibGlzaGVyc0J5SWRzKGlkczogc3RyaW5nW10pOiBQcm9taXNlPFB1Ymxpc2hlcltdPjtcbiAgbGlzdGluZ0J5TmFtZShwdWJsaXNoZXJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFBsdWdpbkxpc3RpbmcgfCBudWxsPjtcbiAgLyoqIExpc3RlZCAvIHVubWFpbnRhaW5lZCBsaXN0aW5ncyAob3B0aW9uYWxseSBvbmx5IHRoZXNlIGlkcyBvciBuYW1lcykuICovXG4gIGxpdmVMaXN0aW5ncyhmaWx0ZXI/OiB7IGlkcz86IHN0cmluZ1tdOyBuYW1lcz86IHN0cmluZ1tdIH0pOiBQcm9taXNlPFBsdWdpbkxpc3RpbmdbXT47XG4gIHZlcnNpb25zRm9yTGlzdGluZ3MobGlzdGluZ0lkczogc3RyaW5nW10pOiBQcm9taXNlPFBsdWdpbkxpc3RpbmdWZXJzaW9uW10+O1xuICAvKiogUFVCTElTSEVEIGFkdmlzb3JpZXMuICovXG4gIGFkdmlzb3JpZXNGb3JMaXN0aW5ncyhsaXN0aW5nSWRzOiBzdHJpbmdbXSk6IFByb21pc2U8UGx1Z2luQWR2aXNvcnlbXT47XG4gIGluc3RhbGxzRm9yT3JncyhvcmdJZHM6IHN0cmluZ1tdKTogUHJvbWlzZTxQbHVnaW5JbnN0YWxsW10+O1xuICBwb2xpY2llc0Zvck9yZ3Mob3JnSWRzOiBzdHJpbmdbXSk6IFByb21pc2U8UGx1Z2luSW5zdGFsbFBvbGljeVtdPjtcbn1cblxuLyoqXG4gKiBBIHtAbGluayBMaXN0aW5nRGF0YVNvdXJjZX0gb3ZlciBhIGRyaXp6bGUgdHJhbnNhY3Rpb24uIFRoZSBjYWxsZXIgb3ducyB0aGVcbiAqIHRyYW5zYWN0aW9uJ3Mgc2NvcGU6IGl0IG11c3QgYmUgYWJsZSB0byByZWFkIHRoZSBlY29zeXN0ZW0gdGFibGVzIChhcHAtcm9sZVxuICogUkxTKSBhbmQgdGhlIGluc3RhbGwgcm93cyBvZiB0aGUgb3JnIEFORCBpdHMgcm9vdCBvcmcgKGEgdGVhbSdzIHJlYWRzIG9mIGl0c1xuICogcm9vdCdzIHJvd3MgbmVlZCBhbiBlbGV2YXRlZCBzY29wZSwgbGlrZSBwYXJlbnQtb3JnIHBsdWdpbiByZWFkcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcml6emxlTGlzdGluZ1NvdXJjZSh0eDogQ3J1ZFR4KTogTGlzdGluZ0RhdGFTb3VyY2Uge1xuICBjb25zdCBkYiA9IHR4O1xuICBjb25zdCBQID0gc2NoZW1hLnB1Ymxpc2hlcjtcbiAgY29uc3QgTCA9IHNjaGVtYS5wbHVnaW5MaXN0aW5nO1xuICBjb25zdCBWID0gc2NoZW1hLnBsdWdpbkxpc3RpbmdWZXJzaW9uO1xuICBjb25zdCBBID0gc2NoZW1hLnBsdWdpbkFkdmlzb3J5O1xuICBjb25zdCBJID0gc2NoZW1hLnBsdWdpbkluc3RhbGw7XG4gIGNvbnN0IElQID0gc2NoZW1hLnBsdWdpbkluc3RhbGxQb2xpY3k7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyQnlIYW5kbGU6IGFzeW5jIChoYW5kbGUpID0+ICgoYXdhaXQgZGIuc2VsZWN0KCkuZnJvbShQKS53aGVyZShlcShQLmhhbmRsZSwgaGFuZGxlKSkpIGFzIFB1Ymxpc2hlcltdKVswXSA/PyBudWxsLFxuICAgIHB1Ymxpc2hlcnNCeUlkczogYXN5bmMgKGlkcykgPT4gKGlkcy5sZW5ndGggPyBkYi5zZWxlY3QoKS5mcm9tKFApLndoZXJlKGluQXJyYXkoUC5pZCwgaWRzKSkgOiBbXSksXG4gICAgbGlzdGluZ0J5TmFtZTogYXN5bmMgKHB1Ymxpc2hlcklkLCBuYW1lKSA9PlxuICAgICAgKChhd2FpdCBkYi5zZWxlY3QoKS5mcm9tKEwpLndoZXJlKGFuZChlcShMLnB1Ymxpc2hlcklkLCBwdWJsaXNoZXJJZCksIGVxKEwubmFtZSwgbmFtZSkpKSkgYXMgUGx1Z2luTGlzdGluZ1tdKVswXSA/PyBudWxsLFxuICAgIGxpdmVMaXN0aW5nczogYXN5bmMgKGZpbHRlciA9IHt9KSA9PiB7XG4gICAgICBpZiAoZmlsdGVyLmlkcyAmJiBmaWx0ZXIuaWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKGZpbHRlci5uYW1lcyAmJiBmaWx0ZXIubmFtZXMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG4gICAgICByZXR1cm4gZGIuc2VsZWN0KCkuZnJvbShMKS53aGVyZShhbmQoXG4gICAgICAgIGluQXJyYXkoTC5zdGF0ZSwgWydsaXN0ZWQnLCAndW5tYWludGFpbmVkJ10pLFxuICAgICAgICAuLi4oZmlsdGVyLmlkcyA/IFtpbkFycmF5KEwuaWQsIGZpbHRlci5pZHMpXSA6IFtdKSxcbiAgICAgICAgLi4uKGZpbHRlci5uYW1lcyA/IFtpbkFycmF5KEwubmFtZSwgZmlsdGVyLm5hbWVzKV0gOiBbXSksXG4gICAgICApKTtcbiAgICB9LFxuICAgIHZlcnNpb25zRm9yTGlzdGluZ3M6IGFzeW5jIChpZHMpID0+IChpZHMubGVuZ3RoID8gZGIuc2VsZWN0KCkuZnJvbShWKS53aGVyZShpbkFycmF5KFYubGlzdGluZ0lkLCBpZHMpKSA6IFtdKSxcbiAgICBhZHZpc29yaWVzRm9yTGlzdGluZ3M6IGFzeW5jIChpZHMpID0+IChpZHMubGVuZ3RoID8gZGIuc2VsZWN0KCkuZnJvbShBKS53aGVyZShhbmQoaW5BcnJheShBLmxpc3RpbmdJZCwgaWRzKSwgZXEoQS5zdGF0ZSwgJ3B1Ymxpc2hlZCcpKSkgOiBbXSksXG4gICAgaW5zdGFsbHNGb3JPcmdzOiBhc3luYyAob3JnSWRzKSA9PiAob3JnSWRzLmxlbmd0aCA/IGRiLnNlbGVjdCgpLmZyb20oSSkud2hlcmUoaW5BcnJheShJLm9yZ0lkLCBvcmdJZHMpKSA6IFtdKSxcbiAgICBwb2xpY2llc0Zvck9yZ3M6IGFzeW5jIChvcmdJZHMpID0+IChvcmdJZHMubGVuZ3RoID8gZGIuc2VsZWN0KCkuZnJvbShJUCkud2hlcmUoaW5BcnJheShJUC5vcmdJZCwgb3JnSWRzKSkgOiBbXSksXG4gIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXNvbHV0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQSBwbHVnaW4gcmVmZXJlbmNlIGFzIHRoZSByZXNvbHZlciByZWFkcyBpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdGluZ1JlZmVyZW5jZSB7XG4gIC8qKiBQdWJsaXNoZXIgaGFuZGxlOyBhYnNlbnQgPSB0aGUgT2ZmaWNpYWwgbGlzdGluZyAodGhlIHVucXVhbGlmaWVkIGZhbGxiYWNrKS4gKi9cbiAgcHVibGlzaGVyPzogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBUaGUgcmVmZXJlbmNlJ3MgYGZpbHRlci52ZXJzaW9uYC4gKi9cbiAgdmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqIEEgcmVmZXJlbmNlIHRoYXQgcmVzb2x2ZWQgdG8gYSBsaXN0ZWQgdmVyc2lvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdGluZ1Jlc29sdmVkIHtcbiAgb2s6IHRydWU7XG4gIHB1Ymxpc2hlcjogUHVibGlzaGVyO1xuICBsaXN0aW5nOiBQbHVnaW5MaXN0aW5nO1xuICB2ZXJzaW9uOiBQbHVnaW5MaXN0aW5nVmVyc2lvbjtcbiAgbW9kZTogSW5zdGFsbE1vZGU7XG4gIHBvbGljeTogQ29uc3VtcHRpb25Qb2xpY3k7XG4gIC8qKiBUaGUgc3BlYyBkZWNsYXJlcyBzZWNyZXRzIHRoZSBwb2xpY3kgd2l0aGhvbGRzIGZyb20gdGhpcyB0aWVyLiAqL1xuICBzZWNyZXRzV2l0aGhlbGQ6IGJvb2xlYW47XG4gIHdhcm5pbmdzOiBSZXNvbHV0aW9uV2FybmluZ1tdO1xufVxuXG4vKiogQSByZWZlcmVuY2UgdGhhdCBuYW1lZCBhIGxpc3RpbmcgYnV0IGNhbid0IHJlc29sdmUuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RpbmdSZWZ1c2VkIHtcbiAgb2s6IGZhbHNlO1xuICByZWZ1c2FsOiBSZXNvbHV0aW9uUmVmdXNhbDtcbiAgcHVibGlzaGVyPzogUHVibGlzaGVyO1xuICBsaXN0aW5nPzogUGx1Z2luTGlzdGluZztcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGByZWZgIHRvIGEgbGlzdGVkIHZlcnNpb24gZm9yIGBzY29wZWAsIG9yIHJlZnVzZS4gTnVsbCB3aGVuIHRoZVxuICogbGlzdGluZyBkb2Vzbid0IGV4aXN0IGF0IGFsbCAoYW4gdW5xdWFsaWZpZWQgcmVmZXJlbmNlIHRoZW4gc2ltcGx5IGhhcyBub1xuICogT2ZmaWNpYWwgZmFsbGJhY2spLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUxpc3RpbmdSZWZlcmVuY2UoXG4gIHNvdXJjZTogTGlzdGluZ0RhdGFTb3VyY2UsXG4gIHJlZjogTGlzdGluZ1JlZmVyZW5jZSxcbiAgc2NvcGU6IFJlc29sdXRpb25TY29wZSxcbik6IFByb21pc2U8TGlzdGluZ1Jlc29sdmVkIHwgTGlzdGluZ1JlZnVzZWQgfCBudWxsPiB7XG4gIGNvbnN0IGhhbmRsZSA9IHJlZi5wdWJsaXNoZXIgPz8gT0ZGSUNJQUxfUFVCTElTSEVSX0hBTkRMRTtcbiAgY29uc3QgcHVibGlzaGVyID0gYXdhaXQgc291cmNlLnB1Ymxpc2hlckJ5SGFuZGxlKGhhbmRsZSk7XG4gIGlmICghcHVibGlzaGVyKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgbGlzdGluZyA9IGF3YWl0IHNvdXJjZS5saXN0aW5nQnlOYW1lKHB1Ymxpc2hlci5pZCwgcmVmLm5hbWUpO1xuICBpZiAoIWxpc3RpbmcpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IG9yZ0lkcyA9IHNjb3BlT3JnSWRzKHNjb3BlKTtcbiAgY29uc3QgW3BvbGljaWVzLCBpbnN0YWxsc10gPSBhd2FpdCBQcm9taXNlLmFsbChbc291cmNlLnBvbGljaWVzRm9yT3JncyhvcmdJZHMpLCBzb3VyY2UuaW5zdGFsbHNGb3JPcmdzKG9yZ0lkcyldKTtcbiAgY29uc3QgcG9saWN5ID0gZWZmZWN0aXZlQ29uc3VtcHRpb25Qb2xpY3kocG9saWNpZXMsIG9yZ0lkc1swXSEsIG9yZ0lkc1sxXSk7XG4gIGNvbnN0IGJsb2NrID0gbGlzdGluZ0Jsb2NrKHBvbGljeSwgcHVibGlzaGVyLCBsaXN0aW5nKTtcbiAgaWYgKGJsb2NrKSByZXR1cm4geyBvazogZmFsc2UsIHJlZnVzYWw6IGJsb2NrUmVmdXNhbChibG9jayksIHB1Ymxpc2hlciwgbGlzdGluZyB9O1xuXG4gIGNvbnN0IG1vZGUgPSBpbnN0YWxsTW9kZUZvcihwdWJsaXNoZXIsIGxpc3RpbmcsIGluc3RhbGxzLCBwb2xpY3ksIHNjb3BlKTtcbiAgaWYgKCdjb2RlJyBpbiBtb2RlKSByZXR1cm4geyBvazogZmFsc2UsIHJlZnVzYWw6IG1vZGUsIHB1Ymxpc2hlciwgbGlzdGluZyB9O1xuXG4gIGNvbnN0IFt2ZXJzaW9ucywgYWR2aXNvcmllc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgc291cmNlLnZlcnNpb25zRm9yTGlzdGluZ3MoW2xpc3RpbmcuaWRdKSxcbiAgICBzb3VyY2UuYWR2aXNvcmllc0Zvckxpc3RpbmdzKFtsaXN0aW5nLmlkXSksXG4gIF0pO1xuICBjb25zdCByZWZfID0gYCR7cHVibGlzaGVyLmhhbmRsZX0vJHtsaXN0aW5nLm5hbWV9YDtcbiAgY29uc3QgY2hvaWNlID0gc2VsZWN0TGlzdGluZ1ZlcnNpb24oeyByZWY6IHJlZl8sIHZlcnNpb25zLCBtb2RlLCByZXF1ZXN0ZWQ6IHJlZi52ZXJzaW9uLCBhZHZpc29yaWVzLCBwb2xpY3kgfSk7XG4gIGlmICgncmVmdXNhbCcgaW4gY2hvaWNlKSByZXR1cm4geyBvazogZmFsc2UsIHJlZnVzYWw6IGNob2ljZS5yZWZ1c2FsLCBwdWJsaXNoZXIsIGxpc3RpbmcgfTtcblxuICBjb25zdCB2ZXJzaW9uID0gY2hvaWNlLnZlcnNpb247XG4gIGNvbnN0IHsgd2FybmluZ3MsIHNlY3JldHNXaXRoaGVsZCB9ID0gbGlzdGVkVmVyc2lvbldhcm5pbmdzKHsgcHVibGlzaGVyLCBsaXN0aW5nLCB2ZXJzaW9uLCBhZHZpc29yaWVzLCBwb2xpY3kgfSk7XG4gIHJldHVybiB7IG9rOiB0cnVlLCBwdWJsaXNoZXIsIGxpc3RpbmcsIHZlcnNpb24sIG1vZGUsIHBvbGljeSwgc2VjcmV0c1dpdGhoZWxkLCB3YXJuaW5ncyB9O1xufVxuXG4vKipcbiAqIFRoZSBub24tZmF0YWwgbm90ZXMgYSByZXNvbHZlZCBsaXN0ZWQgdmVyc2lvbiBjYXJyaWVzIChsb29rdXAgYW5zd2VycyxcbiAqIHN5bnRoIHByaW50cyB0aGVtLCB0aGUgaW5zdGFsbHMgdmlldyBzaG93cyB0aGVtKTogYW4gdW5tYWludGFpbmVkIGxpc3RpbmcsIGFcbiAqIGRlcHJlY2F0ZWQgdmVyc2lvbiwgYSBQVUJMSVNIRUQgYWR2aXNvcnkgY292ZXJpbmcgdGhlIHZlcnNpb24gdGhhdCB0aGUgb3JnJ3NcbiAqIGBibG9ja09uQWR2aXNvcnlgIGRvZXNuJ3QgYmxvY2sgKGEgYmxvY2tpbmcgb25lIHJlZnVzZXMgcmVzb2x1dGlvbiBpbnN0ZWFkKSxcbiAqIGFuZCB3aXRoaGVsZCBzZWNyZXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdGVkVmVyc2lvbldhcm5pbmdzKGlucHV0OiB7XG4gIHB1Ymxpc2hlcjogUGljazxQdWJsaXNoZXIsICdoYW5kbGUnIHwgJ3RpZXInPjtcbiAgbGlzdGluZzogUGljazxQbHVnaW5MaXN0aW5nLCAnbmFtZScgfCAnc3RhdGUnPjtcbiAgdmVyc2lvbjogUGljazxQbHVnaW5MaXN0aW5nVmVyc2lvbiwgJ3ZlcnNpb24nIHwgJ2RlcHJlY2F0ZWRBdCcgfCAnZGVwcmVjYXRpb25NZXNzYWdlJyB8ICdzcGVjU25hcHNob3QnPlxuICAgICYgUGFydGlhbDxQaWNrPFBsdWdpbkxpc3RpbmdWZXJzaW9uLCAnc2NhbkZsYWdnZWRBdCcgfCAnc2NhbkZsYWcnPj47XG4gIGFkdmlzb3JpZXM6IHJlYWRvbmx5IFBpY2s8UGx1Z2luQWR2aXNvcnksICdzZXZlcml0eScgfCAnc3RhdGUnIHwgJ2FmZmVjdGVkUmFuZ2UnIHwgJ2ZpeGVkVmVyc2lvbicgfCAnc3VtbWFyeSc+W107XG4gIHBvbGljeTogUGljazxDb25zdW1wdGlvblBvbGljeSwgJ3NlY3JldHNBbGxvd2VkVGllcnMnPjtcbn0pOiB7IHdhcm5pbmdzOiBSZXNvbHV0aW9uV2FybmluZ1tdOyBzZWNyZXRzV2l0aGhlbGQ6IGJvb2xlYW4gfSB7XG4gIGNvbnN0IHsgcHVibGlzaGVyLCBsaXN0aW5nLCB2ZXJzaW9uLCBhZHZpc29yaWVzLCBwb2xpY3kgfSA9IGlucHV0O1xuICBjb25zdCByZWYgPSBgJHtwdWJsaXNoZXIuaGFuZGxlfS8ke2xpc3RpbmcubmFtZX1gO1xuICBjb25zdCBkZWNsYXJlc1NlY3JldHMgPSAodmVyc2lvbi5zcGVjU25hcHNob3Q/LnNlY3JldHMgPz8gW10pLmxlbmd0aCA+IDA7XG4gIGNvbnN0IHNlY3JldHNXaXRoaGVsZCA9IGRlY2xhcmVzU2VjcmV0cyAmJiAhcG9saWN5LnNlY3JldHNBbGxvd2VkVGllcnMuaW5jbHVkZXMocHVibGlzaGVyLnRpZXIpO1xuICBjb25zdCB3YXJuaW5nczogUmVzb2x1dGlvbldhcm5pbmdbXSA9IFtdO1xuICBpZiAobGlzdGluZy5zdGF0ZSA9PT0gJ3VubWFpbnRhaW5lZCcpIHtcbiAgICB3YXJuaW5ncy5wdXNoKHsgY29kZTogJ0xJU1RJTkdfVU5NQUlOVEFJTkVEJywgbWVzc2FnZTogYCR7cmVmfSBpcyB1bm1haW50YWluZWQ6IGl0IHJlY2VpdmVzIG5vIHVwZGF0ZXMuIFBsYW4gYSByZXBsYWNlbWVudC5gIH0pO1xuICB9XG4gIGlmICh2ZXJzaW9uLmRlcHJlY2F0ZWRBdCkge1xuICAgIHdhcm5pbmdzLnB1c2goeyBjb2RlOiAnUExVR0lOX0RFUFJFQ0FURUQnLCBtZXNzYWdlOiBgJHtyZWZ9QCR7dmVyc2lvbi52ZXJzaW9ufSBpcyBkZXByZWNhdGVkJHt2ZXJzaW9uLmRlcHJlY2F0aW9uTWVzc2FnZSA/IGA6ICR7dmVyc2lvbi5kZXByZWNhdGlvbk1lc3NhZ2V9YCA6ICcnfS5gIH0pO1xuICB9XG4gIGZvciAoY29uc3QgYSBvZiBhZHZpc29yaWVzQ292ZXJpbmcoYWR2aXNvcmllcywgdmVyc2lvbi52ZXJzaW9uKSkge1xuICAgIHdhcm5pbmdzLnB1c2goe1xuICAgICAgY29kZTogJ1BMVUdJTl9BRFZJU09SWScsXG4gICAgICBtZXNzYWdlOiBgJHtyZWZ9QCR7dmVyc2lvbi52ZXJzaW9ufSBpcyBhZmZlY3RlZCBieSBhICR7YS5zZXZlcml0eX0gc2VjdXJpdHkgYWR2aXNvcnk6ICR7YS5zdW1tYXJ5fWBcbiAgICAgICAgKyBgJHthLmZpeGVkVmVyc2lvbiA/IGAgRml4ZWQgaW4gJHthLmZpeGVkVmVyc2lvbn0uYCA6ICcnfWAsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgZmxhZyA9IHZlcnNpb24uc2NhbkZsYWdnZWRBdCA/IGFzU2NhbkZsYWcodmVyc2lvbi5zY2FuRmxhZykgOiBudWxsO1xuICBpZiAoZmxhZykgd2FybmluZ3MucHVzaCh2dWxuRmxhZ2dlZFdhcm5pbmcocmVmLCB2ZXJzaW9uLnZlcnNpb24sIGZsYWcpKTtcbiAgaWYgKHNlY3JldHNXaXRoaGVsZCkge1xuICAgIHdhcm5pbmdzLnB1c2goeyBjb2RlOiAnUExVR0lOX1NFQ1JFVFNfV0lUSEhFTEQnLCBtZXNzYWdlOiBgJHtyZWZ9IGlzIGEgJHtwdWJsaXNoZXIudGllcn0gcGx1Z2luOyB5b3VyIG9yZ2FuaXphdGlvbidzIHBvbGljeSBnaXZlcyBpdCBubyBzZWNyZXRzLCBzbyBpdHMgZGVjbGFyZWQgc2VjcmV0cyBhcmUgbm90IGluamVjdGVkLmAgfSk7XG4gIH1cbiAgcmV0dXJuIHsgd2FybmluZ3MsIHNlY3JldHNXaXRoaGVsZCB9O1xufVxuXG4vKipcbiAqIFRoZSBwbHVnaW4gcmVjb3JkIGEgcmVzb2x2ZWQgbGlzdGluZyB2ZXJzaW9uIHJ1bnMgYXMg4oCUIHRoZSBzaGFwZSBzeW50aCBhbmRcbiAqIHRoZSBjb250cmFjdCBjaGVjayByZWFkIChhIGBwbHVnaW5zYCByb3cncyBydW4gZmllbGRzKSwgYnVpbHQgZnJvbSB0aGVcbiAqIHZlcnNpb24ncyBmcm96ZW4gc3BlYyBzbmFwc2hvdC4gYGlkYCBpcyB0aGUgTElTVElORyBWRVJTSU9OJ3MgaWQgKHRoZSBzdGVwXG4gKiBtYW5pZmVzdCByZXNvbHZlcyBpdCBiYWNrKSwgYGltYWdlUmVwb3NpdG9yeWAgaXRzIGBwdWJsaWMvKmAgY29weS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RlZFBsdWdpblJlY29yZChyZXM6IExpc3RpbmdSZXNvbHZlZCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgeyBwdWJsaXNoZXIsIGxpc3RpbmcsIHZlcnNpb24sIG1vZGUgfSA9IHJlcztcbiAgY29uc3QgcyA9ICh2ZXJzaW9uLnNwZWNTbmFwc2hvdCA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGFyciA9IDxUPih2OiB1bmtub3duKTogVFtdID0+IChBcnJheS5pc0FycmF5KHYpID8gdiBhcyBUW10gOiBbXSk7XG4gIGNvbnN0IG9iaiA9ICh2OiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4gKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHYpID8gdiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA6IHt9KTtcbiAgcmV0dXJuIHtcbiAgICBpZDogdmVyc2lvbi5pZCxcbiAgICBzb3VyY2U6ICdsaXN0aW5nJyxcbiAgICBwdWJsaXNoZXI6IHB1Ymxpc2hlci5oYW5kbGUsXG4gICAgcHVibGlzaGVyVGllcjogcHVibGlzaGVyLnRpZXIsXG4gICAgbGlzdGluZ0lkOiBsaXN0aW5nLmlkLFxuICAgIGluc3RhbGw6IG1vZGUua2luZCxcbiAgICBuYW1lOiBsaXN0aW5nLm5hbWUsXG4gICAgdmVyc2lvbjogdmVyc2lvbi52ZXJzaW9uLFxuICAgIGltYWdlUmVwb3NpdG9yeTogdmVyc2lvbi5pbWFnZVJlcG9zaXRvcnksXG4gICAgaW1hZ2VEaWdlc3Q6IHZlcnNpb24uaW1hZ2VEaWdlc3QsXG4gICAgYnVpbGRUeXBlOiB0eXBlb2Ygcy5idWlsZFR5cGUgPT09ICdzdHJpbmcnID8gcy5idWlsZFR5cGUgOiAodmVyc2lvbi5pbWFnZURpZ2VzdCA/ICdidWlsZF9pbWFnZScgOiAnbWV0YWRhdGFfb25seScpLFxuICAgIHBsdWdpblR5cGU6IHMucGx1Z2luVHlwZSA/PyAnQ29kZUJ1aWxkU3RlcCcsXG4gICAgY29tcHV0ZVR5cGU6IHMuY29tcHV0ZVR5cGUgPz8gJ1NNQUxMJyxcbiAgICBkZXNjcmlwdGlvbjogcy5kZXNjcmlwdGlvbiA/PyBsaXN0aW5nLmRlc2NyaXB0aW9uID8/IG51bGwsXG4gICAgc3VtbWFyeTogcy5zdW1tYXJ5ID8/IGxpc3Rpbmcuc3VtbWFyeSA/PyBudWxsLFxuICAgIGRpc3BsYXlOYW1lOiBzLmRpc3BsYXlOYW1lID8/IG51bGwsXG4gICAga2V5d29yZHM6IGFycjxzdHJpbmc+KHMua2V5d29yZHMpLFxuICAgIGNhdGVnb3J5OiBzLmNhdGVnb3J5ID8/IGxpc3RpbmcuY2F0ZWdvcnksXG4gICAgbWV0YWRhdGE6IG9iaihzLm1ldGFkYXRhKSxcbiAgICBlbnY6IG9iaihzLmVudiksXG4gICAgYnVpbGRBcmdzOiB7fSxcbiAgICBpbnN0YWxsQ29tbWFuZHM6IGFycjxzdHJpbmc+KHMuaW5zdGFsbENvbW1hbmRzKSxcbiAgICBjb21tYW5kczogYXJyPHN0cmluZz4ocy5jb21tYW5kcyksXG4gICAgdGltZW91dDogcy50aW1lb3V0ID8/IG51bGwsXG4gICAgZmFpbHVyZUJlaGF2aW9yOiBzLmZhaWx1cmVCZWhhdmlvciA/PyAnZmFpbCcsXG4gICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogcy5wcmltYXJ5T3V0cHV0RGlyZWN0b3J5ID8/IG51bGwsXG4gICAgc2VjcmV0czogcmVzLnNlY3JldHNXaXRoaGVsZCA/IFtdIDogYXJyKHMuc2VjcmV0cyksXG4gICAgcmVxdWlyZWRNZXRhZGF0YTogYXJyPHN0cmluZz4ocy5yZXF1aXJlZE1ldGFkYXRhKSxcbiAgICByZXF1aXJlZFZhcnM6IGFycjxzdHJpbmc+KHMucmVxdWlyZWRWYXJzKSxcbiAgICBtZXRhZGF0YVR5cGVzOiBvYmoocy5tZXRhZGF0YVR5cGVzKSxcbiAgICB2YXJzVHlwZXM6IG9iaihzLnZhcnNUeXBlcyksXG4gICAgbmV0d29ya0VncmVzczogYXJyPHN0cmluZz4ocy5uZXR3b3JrRWdyZXNzKSxcbiAgICBydW5Bc1Jvb3Q6IHMucnVuQXNSb290ID8/IG51bGwsXG4gICAgbGljZW5zZTogcy5saWNlbnNlID8/IGxpc3RpbmcubGljZW5zZSA/PyBudWxsLFxuICAgIGhvbWVwYWdlVXJsOiBzLmhvbWVwYWdlVXJsID8/IGxpc3RpbmcuaG9tZXBhZ2VVcmwgPz8gbnVsbCxcbiAgICBzb3VyY2VVcmw6IHMuc291cmNlVXJsID8/IGxpc3Rpbmcuc291cmNlVXJsID8/IG51bGwsXG4gICAgZG9jdW1lbnRhdGlvblVybDogcy5kb2N1bWVudGF0aW9uVXJsID8/IG51bGwsXG4gICAgaWNvbjogcy5pY29uID8/IGxpc3RpbmcuaWNvbiA/PyBudWxsLFxuICAgIGNoYW5nZWxvZzogdmVyc2lvbi5jaGFuZ2Vsb2csXG4gICAgYnJlYWtpbmc6IHZlcnNpb24uYnJlYWtpbmcsXG4gICAgdnVsbkNyaXRpY2FsOiB2ZXJzaW9uLnZ1bG5Dcml0aWNhbCxcbiAgICB2dWxuSGlnaDogdmVyc2lvbi52dWxuSGlnaCxcbiAgICB2dWxuQ3JpdGljYWxGaXhhYmxlOiB2ZXJzaW9uLnZ1bG5Dcml0aWNhbEZpeGFibGUsXG4gICAgdnVsbkhpZ2hGaXhhYmxlOiB2ZXJzaW9uLnZ1bG5IaWdoRml4YWJsZSxcbiAgICBzY2FubmVkQXQ6IHZlcnNpb24uc2Nhbm5lZEF0LFxuICAgIHNjYW5GbGFnZ2VkQXQ6IHZlcnNpb24uc2NhbkZsYWdnZWRBdCxcbiAgICBzY2FuRmxhZzogdmVyc2lvbi5zY2FuRmxhZyxcbiAgICBsaWZlY3ljbGU6IHZlcnNpb24uZGVwcmVjYXRlZEF0ID8gJ2RlcHJlY2F0ZWQnIDogJ3Byb2R1Y3Rpb24nLFxuICAgIGRlcHJlY2F0ZWRBdDogdmVyc2lvbi5kZXByZWNhdGVkQXQsXG4gICAgZGVwcmVjYXRpb25NZXNzYWdlOiB2ZXJzaW9uLmRlcHJlY2F0aW9uTWVzc2FnZSxcbiAgICB5YW5rZWRBdDogbnVsbCxcbiAgICB5YW5rUmVhc29uOiBudWxsLFxuICAgIHZpc2liaWxpdHk6ICdwdWJsaWMnLFxuICAgIGlzRGVmYXVsdDogdHJ1ZSxcbiAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV2ZXJ5dGhpbmcgYW4gb3JnIGNhbiByZXNvbHZlIChjYXRhbG9nLCBBSSBzZWxlY3Rpb24sIHBsYWNlaG9sZGVyIGd1YXJkKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIE9uZSBsaXN0aW5nIHdpdGggdGhlIG9yZydzIHN0YW5kaW5nIG9uIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmdMaXN0aW5nU3RhdGUge1xuICBwdWJsaXNoZXI6IFB1Ymxpc2hlcjtcbiAgbGlzdGluZzogUGx1Z2luTGlzdGluZztcbiAgdmVyc2lvbnM6IFBsdWdpbkxpc3RpbmdWZXJzaW9uW107XG4gIC8qKiBIb3cgdGhlIG9yZyByZWFjaGVzIGl0LCBvciB3aHkgaXQgY2FuJ3QgKG5vdCBpbnN0YWxsZWQsIHBlbmRpbmcsIOKApikuICovXG4gIG1vZGU6IEluc3RhbGxNb2RlIHwgUmVzb2x1dGlvblJlZnVzYWw7XG4gIC8qKiBBIHBvbGljeSAvIHN0YXRlIGJsb2NrICh0aWVyLCBibG9ja2VkIGxpc3RpbmcsIHN1c3BlbmRlZCksIG9yIG51bGwuICovXG4gIGJsb2NrOiBMaXN0aW5nQmxvY2sgfCBudWxsO1xuICAvKiogV2hhdCBhbiBVTlZFUlNJT05FRCByZWZlcmVuY2UgcmVzb2x2ZXMgdG8gcmlnaHQgbm93LCBvciBudWxsLiAqL1xuICByZXNvbHZlZDogUGx1Z2luTGlzdGluZ1ZlcnNpb24gfCBudWxsO1xuICAvKiogV2h5IG5vdGhpbmcgcmVzb2x2ZXMsIHdoZW4gdGhlIG9yZyBkb2VzIHJlYWNoIHRoZSBsaXN0aW5nIChlLmcuIGFuIGFkdmlzb3J5IGJsb2NrKS4gKi9cbiAgcmVmdXNhbDogUmVzb2x1dGlvblJlZnVzYWwgfCBudWxsO1xuICAvKiogVGhlIGxpc3RpbmcncyBQVUJMSVNIRUQgYWR2aXNvcmllcy4gKi9cbiAgYWR2aXNvcmllczogUGx1Z2luQWR2aXNvcnlbXTtcbiAgLyoqIFRoZSBvcmcncyBvd24gaW5zdGFsbCByb3cgZm9yIGl0IChleHBsaWNpdCwgcG9zc2libHkgcGVuZGluZy9kZW5pZWQpLiAqL1xuICBvd25JbnN0YWxsOiBQbHVnaW5JbnN0YWxsIHwgbnVsbDtcbiAgLyoqIFRoZSBvcmcncyBlZmZlY3RpdmUgY29uc3VtcHRpb24gcG9saWN5ICh0aGUgc2FtZSBmb3IgZXZlcnkgbGlzdGluZykuICovXG4gIHBvbGljeTogQ29uc3VtcHRpb25Qb2xpY3k7XG59XG5cbi8qKiBUaGUgb3JnJ3MgcG9saWN5ICsgaW5zdGFsbCByb3dzIChvd24gYW5kIHJvb3QpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmdJbnN0YWxsQ29udGV4dCB7XG4gIHBvbGljeTogQ29uc3VtcHRpb25Qb2xpY3k7XG4gIGluc3RhbGxzOiBQbHVnaW5JbnN0YWxsW107XG4gIHNjb3BlOiBSZXNvbHV0aW9uU2NvcGU7XG59XG5cbi8qKiBMb2FkIHRoZSBvcmcncyBwb2xpY3kgYW5kIGluc3RhbGwgcm93cy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkT3JnSW5zdGFsbENvbnRleHQoc291cmNlOiBMaXN0aW5nRGF0YVNvdXJjZSwgc2NvcGU6IFJlc29sdXRpb25TY29wZSk6IFByb21pc2U8T3JnSW5zdGFsbENvbnRleHQ+IHtcbiAgY29uc3Qgb3JnSWRzID0gc2NvcGVPcmdJZHMoc2NvcGUpO1xuICBjb25zdCBbcG9saWNpZXMsIGluc3RhbGxzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtzb3VyY2UucG9saWNpZXNGb3JPcmdzKG9yZ0lkcyksIHNvdXJjZS5pbnN0YWxsc0Zvck9yZ3Mob3JnSWRzKV0pO1xuICByZXR1cm4geyBwb2xpY3k6IGVmZmVjdGl2ZUNvbnN1bXB0aW9uUG9saWN5KHBvbGljaWVzLCBvcmdJZHNbMF0hLCBvcmdJZHNbMV0pLCBpbnN0YWxscywgc2NvcGUgfTtcbn1cblxuLyoqXG4gKiBUaGUgb3JnJ3Mgc3RhbmRpbmcgb24gZXZlcnkgbGl2ZSBsaXN0aW5nIChvciBvbmx5IGBmaWx0ZXJgJ3MpLiBVc2VkIGJ5IHRoZVxuICogaW4tYXBwIGNhdGFsb2c7IHtAbGluayByZXNvbHZhYmxlTGlzdGluZ3N9IG5hcnJvd3MgaXQgdG8gd2hhdCByZXNvbHZlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9yZ0xpc3RpbmdTdGF0ZXMoXG4gIHNvdXJjZTogTGlzdGluZ0RhdGFTb3VyY2UsXG4gIHNjb3BlOiBSZXNvbHV0aW9uU2NvcGUsXG4gIGZpbHRlcjogeyBpZHM/OiBzdHJpbmdbXTsgbmFtZXM/OiBzdHJpbmdbXSB9ID0ge30sXG4gIGN0eD86IE9yZ0luc3RhbGxDb250ZXh0LFxuKTogUHJvbWlzZTxPcmdMaXN0aW5nU3RhdGVbXT4ge1xuICBjb25zdCBjb250ZXh0ID0gY3R4ID8/IGF3YWl0IGxvYWRPcmdJbnN0YWxsQ29udGV4dChzb3VyY2UsIHNjb3BlKTtcbiAgY29uc3QgbGl2ZSA9IGF3YWl0IHNvdXJjZS5saXZlTGlzdGluZ3MoZmlsdGVyKTtcbiAgaWYgKGxpdmUubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG4gIGNvbnN0IGlkcyA9IGxpdmUubWFwKChsKSA9PiBsLmlkKTtcbiAgY29uc3QgW3B1YnMsIHZlcnNpb25zLCBhZHZpc29yaWVzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBzb3VyY2UucHVibGlzaGVyc0J5SWRzKFsuLi5uZXcgU2V0KGxpdmUubWFwKChsKSA9PiBsLnB1Ymxpc2hlcklkKSldKSxcbiAgICBzb3VyY2UudmVyc2lvbnNGb3JMaXN0aW5ncyhpZHMpLFxuICAgIHNvdXJjZS5hZHZpc29yaWVzRm9yTGlzdGluZ3MoaWRzKSxcbiAgXSk7XG4gIGNvbnN0IGJ5UHVibGlzaGVyID0gbmV3IE1hcChwdWJzLm1hcCgocCkgPT4gW3AuaWQsIHBdKSk7XG4gIGNvbnN0IG93biA9IHNjb3BlT3JnSWRzKHNjb3BlKVswXSE7XG4gIGNvbnN0IG91dDogT3JnTGlzdGluZ1N0YXRlW10gPSBbXTtcbiAgZm9yIChjb25zdCBsaXN0aW5nIG9mIGxpdmUpIHtcbiAgICBjb25zdCBwdWJsaXNoZXIgPSBieVB1Ymxpc2hlci5nZXQobGlzdGluZy5wdWJsaXNoZXJJZCk7XG4gICAgaWYgKCFwdWJsaXNoZXIpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHZzID0gdmVyc2lvbnMuZmlsdGVyKCh2KSA9PiB2Lmxpc3RpbmdJZCA9PT0gbGlzdGluZy5pZCk7XG4gICAgY29uc3QgYmxvY2sgPSBsaXN0aW5nQmxvY2soY29udGV4dC5wb2xpY3ksIHB1Ymxpc2hlciwgbGlzdGluZyk7XG4gICAgY29uc3QgbW9kZSA9IGluc3RhbGxNb2RlRm9yKHB1Ymxpc2hlciwgbGlzdGluZywgY29udGV4dC5pbnN0YWxscywgY29udGV4dC5wb2xpY3ksIHNjb3BlKTtcbiAgICBjb25zdCBsaXN0aW5nQWR2aXNvcmllcyA9IGFkdmlzb3JpZXMuZmlsdGVyKChhKSA9PiBhLmxpc3RpbmdJZCA9PT0gbGlzdGluZy5pZCk7XG4gICAgbGV0IHJlc29sdmVkOiBQbHVnaW5MaXN0aW5nVmVyc2lvbiB8IG51bGwgPSBudWxsO1xuICAgIGxldCByZWZ1c2FsOiBSZXNvbHV0aW9uUmVmdXNhbCB8IG51bGwgPSBudWxsO1xuICAgIGlmICghYmxvY2sgJiYgISgnY29kZScgaW4gbW9kZSkpIHtcbiAgICAgIGNvbnN0IGNob2ljZSA9IHNlbGVjdExpc3RpbmdWZXJzaW9uKHtcbiAgICAgICAgcmVmOiBgJHtwdWJsaXNoZXIuaGFuZGxlfS8ke2xpc3RpbmcubmFtZX1gLCB2ZXJzaW9uczogdnMsIG1vZGUsIGFkdmlzb3JpZXM6IGxpc3RpbmdBZHZpc29yaWVzLCBwb2xpY3k6IGNvbnRleHQucG9saWN5LFxuICAgICAgfSk7XG4gICAgICBpZiAoJ3ZlcnNpb24nIGluIGNob2ljZSkgcmVzb2x2ZWQgPSBjaG9pY2UudmVyc2lvbjtcbiAgICAgIGVsc2UgcmVmdXNhbCA9IGNob2ljZS5yZWZ1c2FsO1xuICAgIH1cbiAgICBjb25zdCBvd25JbnN0YWxsID0gY29udGV4dC5pbnN0YWxscy5maW5kKChpKSA9PiBpLmxpc3RpbmdJZCA9PT0gbGlzdGluZy5pZCAmJiBpLm9yZ0lkLnRvTG93ZXJDYXNlKCkgPT09IG93bikgPz8gbnVsbDtcbiAgICBvdXQucHVzaCh7IHB1Ymxpc2hlciwgbGlzdGluZywgdmVyc2lvbnM6IHZzLCBtb2RlLCBibG9jaywgcmVzb2x2ZWQsIHJlZnVzYWwsIGFkdmlzb3JpZXM6IGxpc3RpbmdBZHZpc29yaWVzLCBvd25JbnN0YWxsLCBwb2xpY3k6IGNvbnRleHQucG9saWN5IH0pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBUaGUgbGlzdGluZ3MgYW4gb3JnJ3MgcmVmZXJlbmNlcyByZXNvbHZlIHRvIG5vdyAoaW5zdGFsbGVkIG9yIGltcGxpY2l0LCBub3QgYmxvY2tlZCkuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2YWJsZUxpc3RpbmdzKFxuICBzb3VyY2U6IExpc3RpbmdEYXRhU291cmNlLFxuICBzY29wZTogUmVzb2x1dGlvblNjb3BlLFxuICBmaWx0ZXI6IHsgbmFtZXM/OiBzdHJpbmdbXSB9ID0ge30sXG4pOiBQcm9taXNlPEFycmF5PE9yZ0xpc3RpbmdTdGF0ZSAmIHsgcmVzb2x2ZWQ6IFBsdWdpbkxpc3RpbmdWZXJzaW9uIH0+PiB7XG4gIHJldHVybiAoYXdhaXQgb3JnTGlzdGluZ1N0YXRlcyhzb3VyY2UsIHNjb3BlLCBmaWx0ZXIpKVxuICAgIC5maWx0ZXIoKHMpOiBzIGlzIE9yZ0xpc3RpbmdTdGF0ZSAmIHsgcmVzb2x2ZWQ6IFBsdWdpbkxpc3RpbmdWZXJzaW9uIH0gPT4gcy5yZXNvbHZlZCAhPT0gbnVsbCk7XG59XG4iXX0=
492
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXJlc29sdXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3BsdWdpbi1yZXNvbHV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUVILE9BQU8sRUFDTCxVQUFVLEVBQUUsa0JBQWtCLEdBQy9CLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRS9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSwwQkFBMEIsRUFBMEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRyxPQUFPLEVBQ0wsYUFBYSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEdBQ2pFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixNQUFNLEdBUVAsTUFBTSwrQkFBK0IsQ0FBQztBQWtDdkMsK0dBQStHO0FBQy9HLE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxHQUFXLEVBQUUsUUFBZ0IsRUFBRSxTQUFpQjtJQUMxRixPQUFPO1FBQ0wsSUFBSSxFQUFFLHdCQUF3QjtRQUM5QixRQUFRLEVBQUUsTUFBTTtRQUNoQixPQUFPLEVBQUUsR0FBRyxHQUFHLElBQUksUUFBUSxzREFBc0QsR0FBRyxJQUFJLFNBQVMseUVBQXlFO1FBQzFLLFFBQVE7UUFDUixnQkFBZ0IsRUFBRSxTQUFTO0tBQzVCLENBQUM7QUFDSixDQUFDO0FBUUQsa0ZBQWtGO0FBQ2xGLE1BQU0sVUFBVSxZQUFZLENBQzFCLE1BQXlCLEVBQ3pCLFNBQTZELEVBQzdELE9BQThDO0lBRTlDLE1BQU0sR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDLE1B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RyxFQUFFLEVBQUUsRUFBRTtZQUNsQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFBRSxPQUFPLEVBQUUsQ0FBQztZQUNyRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFBRSxPQUFPLEVBQUUsQ0FBQztZQUN6RCxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FDbEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFDNUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUNsRCxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ3pELENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1RyxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM3SSxlQUFlLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDN0csZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ2hILENBQUM7QUFDSixDQUFDO0FBc0NEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHVCQUF1QixDQUMzQyxNQUF5QixFQUN6QixHQUFxQixFQUNyQixLQUFzQjtJQUV0QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsU0FBUyxJQUFJLHlCQUF5QixDQUFDO0lBQzFELE1BQU0sU0FBUyxHQUFHLE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDNUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFMUIsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqSCxNQUFNLE1BQU0sR0FBRywwQkFBMEIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELElBQUksS0FBSztRQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBRWxGLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekUsSUFBSSxNQUFNLElBQUksSUFBSTtRQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBRTVFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDM0MsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuRCxNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMvRyxJQUFJLFNBQVMsSUFBSSxNQUFNO1FBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBRTNGLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDL0IsTUFBTSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2pILGdGQUFnRjtJQUNoRixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxHQUFHLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3pELFFBQVEsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBQ0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3ZJLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsS0FPckM7SUFDQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztJQUNsRSxNQUFNLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xELE1BQU0sZUFBZSxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN6RSxNQUFNLGVBQWUsR0FBRyxlQUFlLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRyxNQUFNLFFBQVEsR0FBd0IsRUFBRSxDQUFDO0lBQ3pDLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxjQUFjLEVBQUUsQ0FBQztRQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLE9BQU8sRUFBRSxHQUFHLEdBQUcsK0RBQStELEVBQUUsQ0FBQyxDQUFDO0lBQ2xJLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QixRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxHQUFHLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxpQkFBaUIsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDMUssQ0FBQztJQUNELEtBQUssTUFBTSxDQUFDLElBQUksa0JBQWtCLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ2hFLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDWixJQUFJLEVBQUUsaUJBQWlCO1lBQ3ZCLE9BQU8sRUFBRSxHQUFHLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsdUJBQXVCLENBQUMsQ0FBQyxPQUFPLEVBQUU7a0JBQy9GLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtTQUM5RCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pFLElBQUksSUFBSTtRQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RSxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsT0FBTyxFQUFFLEdBQUcsR0FBRyxTQUFTLFNBQVMsQ0FBQyxJQUFJLG9HQUFvRyxFQUFFLENBQUMsQ0FBQztJQUNqTSxDQUFDO0lBQ0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsQ0FBQztBQUN2QyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsR0FBb0I7SUFDckQsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNsRCxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUE0QixDQUFDO0lBQ2xFLE1BQU0sR0FBRyxHQUFHLENBQUksQ0FBVSxFQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFVLEVBQTJCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUE0QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzSSxPQUFPO1FBQ0wsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQ2QsTUFBTSxFQUFFLFNBQVM7UUFDakIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNO1FBQzNCLGFBQWEsRUFBRSxTQUFTLENBQUMsSUFBSTtRQUM3QixTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUU7UUFDckIsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJO1FBQ2xCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlO1FBQ3hDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztRQUNoQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUNsSCxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBSSxlQUFlO1FBQzNDLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVyxJQUFJLE9BQU87UUFDckMsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxJQUFJO1FBQ3pELE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSTtRQUM3QyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVcsSUFBSSxJQUFJO1FBQ2xDLFFBQVEsRUFBRSxHQUFHLENBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUTtRQUN4QyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDekIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2YsU0FBUyxFQUFFLEVBQUU7UUFDYixlQUFlLEVBQUUsR0FBRyxDQUFTLENBQUMsQ0FBQyxlQUFlLENBQUM7UUFDL0MsUUFBUSxFQUFFLEdBQUcsQ0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ2pDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUk7UUFDMUIsZUFBZSxFQUFFLENBQUMsQ0FBQyxlQUFlLElBQUksTUFBTTtRQUM1QyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsc0JBQXNCLElBQUksSUFBSTtRQUN4RCxPQUFPLEVBQUUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNsRCxnQkFBZ0IsRUFBRSxHQUFHLENBQVMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO1FBQ2pELFlBQVksRUFBRSxHQUFHLENBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUN6QyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFDbkMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzNCLGFBQWEsRUFBRSxHQUFHLENBQVMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUMzQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJO1FBQzlCLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSTtRQUM3QyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUk7UUFDekQsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJO1FBQ25ELGdCQUFnQixFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJO1FBQzVDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSTtRQUNwQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7UUFDNUIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtRQUNsQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLG1CQUFtQjtRQUNoRCxlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7UUFDeEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1FBQzVCLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYTtRQUNwQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLFNBQVMsRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVk7UUFDN0QsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO1FBQ2xDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxrQkFBa0I7UUFDOUMsUUFBUSxFQUFFLElBQUk7UUFDZCxVQUFVLEVBQUUsSUFBSTtRQUNoQixVQUFVLEVBQUUsUUFBUTtRQUNwQixTQUFTLEVBQUUsSUFBSTtRQUNmLFFBQVEsRUFBRSxJQUFJO0tBQ2YsQ0FBQztBQUNKLENBQUM7QUFrQ0QsOENBQThDO0FBQzlDLE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCLENBQUMsTUFBeUIsRUFBRSxLQUFzQjtJQUMzRixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsTUFBTSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pILE9BQU8sRUFBRSxNQUFNLEVBQUUsMEJBQTBCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDbEcsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLE1BQXlCLEVBQ3pCLEtBQXNCLEVBQ3RCLE1BQU0sR0FBeUMsRUFBRSxFQUNqRCxHQUF1QjtJQUV2QixNQUFNLE9BQU8sR0FBRyxHQUFHLElBQUksTUFBTSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDakMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNyRCxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUM7UUFDL0IsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQztLQUNsQyxDQUFDLENBQUM7SUFDSCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQztJQUNuQyxNQUFNLEdBQUcsR0FBc0IsRUFBRSxDQUFDO0lBQ2xDLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7UUFDM0IsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFNBQVM7WUFBRSxTQUFTO1FBQ3pCLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvRCxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekYsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvRSxJQUFJLFFBQVEsR0FBZ0MsSUFBSSxDQUFDO1FBQ2pELElBQUksT0FBTyxHQUE2QixJQUFJLENBQUM7UUFDN0MsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEMsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUM7Z0JBQ2xDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07YUFDdEgsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxTQUFTLElBQUksTUFBTTtnQkFBRSxRQUFRLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQzs7Z0JBQzlDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ3JILEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3BKLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCw0RkFBNEY7QUFDNUYsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FDdEMsTUFBeUIsRUFDekIsS0FBc0IsRUFDdEIsTUFBTSxHQUF5QixFQUFFO0lBRWpDLE9BQU8sQ0FBQyxNQUFNLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDbkQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUE2RCxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNuRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogUmVzb2x2aW5nIGEgcGx1Z2luIHJlZmVyZW5jZSB0byBhbiBlY29zeXN0ZW0gTElTVElORyB2ZXJzaW9uIHRocm91Z2ggdGhlXG4gKiBvcmcncyBpbnN0YWxsIChkb2NzL3BsdWdpbi1pbnN0YWxsaW5nLm1kKS5cbiAqXG4gKiBPbmUgaW1wbGVtZW50YXRpb24gc2hhcmVkIGJ5IGV2ZXJ5IHBsYWNlIHRoYXQgYW5zd2VycyBcIndoaWNoIGxpc3RlZCB2ZXJzaW9uXG4gKiBkb2VzIHRoaXMgb3JnJ3MgcmVmZXJlbmNlIHJ1bj9cIjogdGhlIHBsdWdpbiBzZXJ2aWNlJ3MgYC9wbHVnaW5zL2xvb2t1cGAgKHdoYXRcbiAqIHN5bnRoIHBpbnMpLCB0aGUgcGlwZWxpbmUgc2VydmljZSdzIGNvbnRyYWN0IGNoZWNrIGF0IHBpcGVsaW5lIGNyZWF0ZSwgdGhlIEFJXG4gKiBnZW5lcmF0b3IncyBwbHVnaW4gbGlzdCBhbmQgdGhlIHBsYWNlaG9sZGVyIGd1YXJkLiBUaGUgZGVjaXNpb25zIGFyZSBQVVJFXG4gKiBmdW5jdGlvbnMgb3ZlciBsb2FkZWQgcm93czsgdGhlIHJvd3MgY29tZSB0aHJvdWdoIGEge0BsaW5rIExpc3RpbmdEYXRhU291cmNlfVxuICogc28gZWFjaCBzZXJ2aWNlIGNhbiBsb2FkIHRoZW0gaXRzIG93biB3YXkgKHtAbGluayBkcml6emxlTGlzdGluZ1NvdXJjZX0gaXMgdGhlXG4gKiBwbGFpbiBkcml6emxlIG9uZSkuXG4gKlxuICogVGhlIG1vZGVsOlxuICogIC0gQW4gb3JnIHJlc29sdmVzIGEgbGlzdGluZyBvbmx5IHRocm91Z2ggYW4gSU5TVEFMTDogYW4gZXhwbGljaXRcbiAqICAgIGBwbHVnaW5faW5zdGFsbHNgIHJvdyAoaXRzIG93biwgb3Ig4oCUIGZvciBhIHRlYW0g4oCUIGl0cyByb290IG9yZydzKSwgb3JcbiAqICAgIGZvciB0aGUgT2ZmaWNpYWwgcHVibGlzaGVyIHRoZSBJTVBMSUNJVCBpbnN0YWxsIGV2ZXJ5IG9yZyBoYXMgdW5sZXNzIGl0c1xuICogICAgY29uc3VtcHRpb24gcG9saWN5IHNheXMgYG9mZmljaWFsSW5zdGFsbHM6IGV4cGxpY2l0YC4gQW4gZXhwbGljaXRcbiAqICAgIGluc3RhbGwgb3ZlcnJpZGVzIHRoZSBpbXBsaWNpdCBvbmUuXG4gKiAgLSBUaGUgb3JnJ3MgQ09OU1VNUFRJT04gUE9MSUNZIGlzIGFwcGxpZWQgYXQgZXZlcnkgcmVzb2x1dGlvbjogYWxsb3dlZFxuICogICAgdGllcnMsIGJsb2NrZWQgbGlzdGluZ3MsIGFkdmlzb3J5IGJsb2NraW5nOyBzZWNyZXRzIGFyZSB3aXRoaGVsZCBmcm9tIHRpZXJzXG4gKiAgICB0aGUgcG9saWN5IGRvZXNuJ3QgdHJ1c3Qgd2l0aCB0aGVtLiBBIHRlYW0ncyBwb2xpY3kgaXMgbWVyZ2VkIHdpdGggaXRzIHJvb3RcbiAqICAgIG9yZydzIGFuZCBjYW4gb25seSBiZSBzdHJpY3Rlci5cbiAqICAtIFZlcnNpb24gY2hvaWNlOiB0aGUgaW5zdGFsbCdzIHJhbmdlIChwaW5uZWQgLyBgfmAgLyBgXmAgLyBub24tYnJlYWtpbmdcbiAqICAgIGxhdGVzdDsgaW1wbGljaXQgPSB0aGUgbG93ZXN0IGxpdmUgbWFqb3IpLCBuYXJyb3dlZCBieSB0aGUgcmVmZXJlbmNlJ3Mgb3duXG4gKiAgICB2ZXJzaW9uIHNwZWMuIFlhbmtlZCB2ZXJzaW9ucyBuZXZlciByZXNvbHZlIGZvciBhIGxpc3Rpbmc7IGEgcGF1c2VkXG4gKiAgICB2ZXJzaW9uIGlzIHNraXBwZWQgdW5sZXNzIHRoZSBpbnN0YWxsIGFscmVhZHkgcmVzb2x2ZWQgdG8gaXQgb3IgdGhlXG4gKiAgICByZWZlcmVuY2UgcGlucyBpdCBleGFjdGx5OyBhZHZpc29yeS1ibG9ja2VkIHZlcnNpb25zIGFyZSBza2lwcGVkLlxuICogIC0gU2NhbiBmbGFnczogYSB2ZXJzaW9uIHRoZSBuaWdodGx5IHJlc2NhbiBGTEFHR0VEIChnYXRlZCBDcml0aWNhbHMgb3ZlclxuICogICAgYFBMVUdJTl9WVUxOX01BWF9GSU5ESU5HU2ApIHJlc29sdmVzIGxpa2UgYW55IG90aGVyLCB3aXRoIGEgYFZVTE5fRkxBR0dFRGBcbiAqICAgIHdhcm5pbmcgKHNldmVyaXR5IGBlcnJvcmAsIGBjcml0aWNhbGAgd2l0aCBhIEtFViBmaW5kaW5nKS4gVnVsbmVyYWJpbGl0eVxuICogICAgc3RhdGUgTkVWRVIgc2tpcHMgb3IgcmVmdXNlcyBhIHZlcnNpb24g4oCUIGl0IGlzIGdyYWRlZCwgYW5kIHRoZSBwaXBlbGluZSdzXG4gKiAgICBvd25lcnMgYXJlIHRvbGQuIFdoZW4gdGhlIHJlZmVyZW5jZSdzIHBpbiBrZWVwcyBpdCBPRkYgYSBuZXdlciB1bmZsYWdnZWRcbiAqICAgIHZlcnNpb24gdGhlIGluc3RhbGwgYWxsb3dzLCBgVlVMTl9VUEdSQURFX0FWQUlMQUJMRWAgKGluZm8pIG5hbWVzIGl0LlxuICovXG5cbmltcG9ydCB7XG4gIGFzU2NhbkZsYWcsIHZ1bG5GbGFnZ2VkV2FybmluZywgdHlwZSBWdWxuRmxhZ2dlZFdhcm5pbmcsXG59IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IGFuZCwgZXEsIGluQXJyYXkgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgdHlwZSB7IENydWRUeCB9IGZyb20gJy4vY3J1ZC1zZXJ2aWNlLmpzJztcbmltcG9ydCB7IGFkdmlzb3JpZXNDb3ZlcmluZywgYmxvY2tpbmdBZHZpc29yaWVzIH0gZnJvbSAnLi9wbHVnaW4tYWR2aXNvcmllcy5qcyc7XG5pbXBvcnQgeyBlZmZlY3RpdmVDb25zdW1wdGlvblBvbGljeSwgdHlwZSBDb25zdW1wdGlvblBvbGljeSB9IGZyb20gJy4vcGx1Z2luLWNvbnN1bXB0aW9uLXBvbGljeS5qcyc7XG5pbXBvcnQge1xuICBjb21wYXJlU2VtdmVyLCBpc1ZlcnNpb25SYW5nZSwgcGFyc2VTZW12ZXIsIHNhdGlzZmllc1ZlcnNpb25TcGVjLFxufSBmcm9tICcuL3NlbXZlci1yYW5nZS5qcyc7XG5pbXBvcnQge1xuICBPRkZJQ0lBTF9QVUJMSVNIRVJfSEFORExFLFxuICBzY2hlbWEsXG4gIHR5cGUgSW5zdGFsbFZlcnNpb25Qb2xpY3ksXG4gIHR5cGUgUGx1Z2luQWR2aXNvcnksXG4gIHR5cGUgUGx1Z2luSW5zdGFsbCxcbiAgdHlwZSBQbHVnaW5JbnN0YWxsUG9saWN5LFxuICB0eXBlIFBsdWdpbkxpc3RpbmcsXG4gIHR5cGUgUGx1Z2luTGlzdGluZ1ZlcnNpb24sXG4gIHR5cGUgUHVibGlzaGVyLFxufSBmcm9tICcuLi9kYXRhYmFzZS9kcml6emxlLXNjaGVtYS5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZWZ1c2FscyBhbmQgd2FybmluZ3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBXaHkgYSByZWZlcmVuY2UgY2FuJ3QgcmVzb2x2ZTsgYGNvZGVgIGlzIGFuIGFwaS1jb3JlIGBFcnJvckNvZGVgIG5hbWUuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdXRpb25SZWZ1c2FsIHtcbiAgY29kZTogJ05PVF9GT1VORCcgfCAnUExVR0lOX05PVF9JTlNUQUxMRUQnIHwgJ1BMVUdJTl9CTE9DS0VEX0JZX1BPTElDWScgfCAnUExVR0lOX1VOQVZBSUxBQkxFJztcbiAgcmVhc29uOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIGBWVUxOX1VQR1JBREVfQVZBSUxBQkxFYCAoc2V2ZXJpdHkgYGluZm9gKTogdGhlIHJlc29sdmVkIHZlcnNpb24gaXMgRkxBR0dFRCxcbiAqIGFuZCBhIG5ld2VyIFVORkxBR0dFRCB2ZXJzaW9uIGV4aXN0cyB0aGF0IHRoZSBpbnN0YWxsIGFsbG93cyBidXQgdGhlXG4gKiByZWZlcmVuY2UncyBvd24gcGluIGV4Y2x1ZGVzIOKAlCBzbyB0aGUgcGlwZWxpbmUga2VlcHMgcnVubmluZyB0aGUgdnVsbmVyYWJsZVxuICogcmVsZWFzZSB1bnRpbCBzb21lb25lIG1vdmVzIHRoZSBwaW4uIGBzdWdnZXN0ZWRWZXJzaW9uYCBpcyB0aGUgd2F5IG91dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWdWxuVXBncmFkZUF2YWlsYWJsZVdhcm5pbmcge1xuICBjb2RlOiAnVlVMTl9VUEdSQURFX0FWQUlMQUJMRSc7XG4gIHNldmVyaXR5OiAnaW5mbyc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgcmVzb2x2ZWQ6IHN0cmluZztcbiAgc3VnZ2VzdGVkVmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKiogQSBub24tZmF0YWwgbm90ZSBhIHJlc29sdXRpb24gY2FycmllcyAoc3ludGggcHJpbnRzIGl0cyBgbWVzc2FnZWApLiAqL1xuZXhwb3J0IHR5cGUgUmVzb2x1dGlvbldhcm5pbmcgPVxuICB8IHsgY29kZTogJ1BMVUdJTl9BRFZJU09SWScgfCAnUExVR0lOX0RFUFJFQ0FURUQnIHwgJ1BMVUdJTl9TRUNSRVRTX1dJVEhIRUxEJyB8ICdMSVNUSU5HX1VOTUFJTlRBSU5FRCc7IG1lc3NhZ2U6IHN0cmluZyB9XG4gIHwgVnVsbkZsYWdnZWRXYXJuaW5nXG4gIHwgVnVsblVwZ3JhZGVBdmFpbGFibGVXYXJuaW5nO1xuXG4vKiogVGhlIGBWVUxOX1VQR1JBREVfQVZBSUxBQkxFYCB3YXJuaW5nIGZvciBgcmVmYCByZXNvbHZpbmcgdG8gYHJlc29sdmVkYCB3aXRoIGBzdWdnZXN0ZWRgIG91dHNpZGUgdGhlIHBpbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2dWxuVXBncmFkZUF2YWlsYWJsZVdhcm5pbmcocmVmOiBzdHJpbmcsIHJlc29sdmVkOiBzdHJpbmcsIHN1Z2dlc3RlZDogc3RyaW5nKTogVnVsblVwZ3JhZGVBdmFpbGFibGVXYXJuaW5nIHtcbiAgcmV0dXJuIHtcbiAgICBjb2RlOiAnVlVMTl9VUEdSQURFX0FWQUlMQUJMRScsXG4gICAgc2V2ZXJpdHk6ICdpbmZvJyxcbiAgICBtZXNzYWdlOiBgJHtyZWZ9QCR7cmVzb2x2ZWR9IGlzIGZsYWdnZWQgYW5kIHlvdXIgcGluIGtlZXBzIHRoZSBwaXBlbGluZSBvbiBpdDsgJHtyZWZ9QCR7c3VnZ2VzdGVkfSBpcyBub3QgZmxhZ2dlZCBhbmQgeW91ciBpbnN0YWxsIGFsbG93cyBpdC4gTW92ZSB0aGUgcGluIHRvIHBpY2sgaXQgdXAuYCxcbiAgICByZXNvbHZlZCxcbiAgICBzdWdnZXN0ZWRWZXJzaW9uOiBzdWdnZXN0ZWQsXG4gIH07XG59XG5cbi8qKiBXaHkgdGhlIG9yZydzIHBvbGljeSAob3IgdGhlIGxpc3RpbmcncyBzdGF0ZSkga2VlcHMgYSBsaXN0aW5nIG91dCwgb3IgbnVsbC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdGluZ0Jsb2NrIHtcbiAgcmVhc29uOiAndGllcicgfCAnYmxvY2tlZF9saXN0aW5nJyB8ICdzdXNwZW5kZWQnO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKiBXaGV0aGVyIGBwb2xpY3lgIChvciB0aGUgbGlzdGluZydzIG93biBzdGF0ZSkgcmVmdXNlcyB0aGUgbGlzdGluZyBvdXRyaWdodC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0aW5nQmxvY2soXG4gIHBvbGljeTogQ29uc3VtcHRpb25Qb2xpY3ksXG4gIHB1Ymxpc2hlcjogUGljazxQdWJsaXNoZXIsICdoYW5kbGUnIHwgJ3RpZXInIHwgJ3N1c3BlbmRlZEF0Jz4sXG4gIGxpc3Rpbmc6IFBpY2s8UGx1Z2luTGlzdGluZywgJ25hbWUnIHwgJ3N0YXRlJz4sXG4pOiBMaXN0aW5nQmxvY2sgfCBudWxsIHtcbiAgY29uc3QgcmVmID0gYCR7cHVibGlzaGVyLmhhbmRsZX0vJHtsaXN0aW5nLm5hbWV9YDtcbiAgaWYgKHB1Ymxpc2hlci5zdXNwZW5kZWRBdCB8fCBsaXN0aW5nLnN0YXRlID09PSAnc3VzcGVuZGVkJyB8fCBsaXN0aW5nLnN0YXRlID09PSAndHJhbnNmZXJyZWQnKSB7XG4gICAgcmV0dXJuIHsgcmVhc29uOiAnc3VzcGVuZGVkJywgbWVzc2FnZTogYCR7cmVmfSBpcyAke2xpc3Rpbmcuc3RhdGUgPT09ICd0cmFuc2ZlcnJlZCcgPyAndHJhbnNmZXJyZWQnIDogJ3N1c3BlbmRlZCd9IGFuZCBubyBsb25nZXIgcmVzb2x2ZXMuYCB9O1xuICB9XG4gIGlmIChwb2xpY3kuYmxvY2tlZExpc3RpbmdzLnNvbWUoKGIpID0+IGIucHVibGlzaGVyID09PSBwdWJsaXNoZXIuaGFuZGxlICYmIGIubmFtZSA9PT0gbGlzdGluZy5uYW1lKSkge1xuICAgIHJldHVybiB7IHJlYXNvbjogJ2Jsb2NrZWRfbGlzdGluZycsIG1lc3NhZ2U6IGBZb3VyIG9yZ2FuaXphdGlvbidzIHBsdWdpbiBwb2xpY3kgYmxvY2tzICR7cmVmfS5gIH07XG4gIH1cbiAgaWYgKCFwb2xpY3kuYWxsb3dlZFRpZXJzLmluY2x1ZGVzKHB1Ymxpc2hlci50aWVyKSkge1xuICAgIHJldHVybiB7IHJlYXNvbjogJ3RpZXInLCBtZXNzYWdlOiBgWW91ciBvcmdhbml6YXRpb24ncyBwbHVnaW4gcG9saWN5IGRvZXNuJ3QgYWxsb3cgJHtwdWJsaXNoZXIudGllcn0gcGx1Z2lucyAoJHtyZWZ9KS5gIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBUaGUgcmVmdXNhbCBhIHtAbGluayBMaXN0aW5nQmxvY2t9IGJlY29tZXMuICovXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tSZWZ1c2FsKGJsb2NrOiBMaXN0aW5nQmxvY2spOiBSZXNvbHV0aW9uUmVmdXNhbCB7XG4gIHJldHVybiBibG9jay5yZWFzb24gPT09ICdzdXNwZW5kZWQnXG4gICAgPyB7IGNvZGU6ICdQTFVHSU5fVU5BVkFJTEFCTEUnLCByZWFzb246ICdzdXNwZW5kZWQnLCBtZXNzYWdlOiBibG9jay5tZXNzYWdlIH1cbiAgICA6IHsgY29kZTogJ1BMVUdJTl9CTE9DS0VEX0JZX1BPTElDWScsIHJlYXNvbjogYmxvY2sucmVhc29uLCBtZXNzYWdlOiBibG9jay5tZXNzYWdlIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBJbnN0YWxscyBhbmQgdmVyc2lvbiBjaG9pY2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBIb3cgdGhlIG9yZyByZWFjaGVzIGEgbGlzdGluZzogYW4gZXhwbGljaXQgaW5zdGFsbCByb3csIG9yIHRoZSBpbXBsaWNpdCBPZmZpY2lhbCBvbmUuICovXG5leHBvcnQgdHlwZSBJbnN0YWxsTW9kZSA9XG4gIHwgeyBraW5kOiAnZXhwbGljaXQnOyBpbnN0YWxsOiBQbHVnaW5JbnN0YWxsOyBpbmhlcml0ZWQ6IGJvb2xlYW4gfVxuICB8IHsga2luZDogJ2ltcGxpY2l0JyB9O1xuXG50eXBlIFZlcnNpb25Sb3cgPSBQaWNrPFBsdWdpbkxpc3RpbmdWZXJzaW9uLCAndmVyc2lvbicgfCAneWFua2VkQXQnIHwgJ3BhdXNlZEF0JyB8ICdicmVha2luZyc+O1xuXG5jb25zdCBpc1N0YWJsZSA9ICh2OiBzdHJpbmcpOiBib29sZWFuID0+IChwYXJzZVNlbXZlcih2KT8ucHJlcmVsZWFzZS5sZW5ndGggPz8gMSkgPT09IDA7XG5cbi8qKlxuICogVGhlIGltcGxpY2l0IE9mZmljaWFsIGluc3RhbGwncyByYW5nZTogZXZlcnkgdmVyc2lvbiBvZiB0aGUgTE9XRVNUIGxpdmVcbiAqIG1ham9yIChgPG1ham9yPi54YCkg4oCUIHBhdGNoIGFuZCBtaW5vciB2ZXJzaW9ucyBmbG93LCBhIG5ldyBtYWpvciBuZXZlciBkb2VzXG4gKiAodGhlIG9yZyBtb3ZlcyB0byBpdCB3aXRoIGFuIGV4cGxpY2l0IGluc3RhbGwpLiBOdWxsIHdoZW4gbm90aGluZyBpcyBsaXZlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW1wbGljaXRJbnN0YWxsUmFuZ2UodmVyc2lvbnM6IHJlYWRvbmx5IFZlcnNpb25Sb3dbXSk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBtYWpvcnMgPSB2ZXJzaW9uc1xuICAgIC5maWx0ZXIoKHYpID0+ICF2LnlhbmtlZEF0ICYmIGlzU3RhYmxlKHYudmVyc2lvbikpXG4gICAgLm1hcCgodikgPT4gcGFyc2VTZW12ZXIodi52ZXJzaW9uKSEubWFqb3IpO1xuICBpZiAobWFqb3JzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBgJHtNYXRoLm1pbiguLi5tYWpvcnMpfS54YDtcbn1cblxuLyoqIFdoZXRoZXIgYW4gaW5zdGFsbCdzIHZlcnNpb24gcG9saWN5IGFkbWl0cyBgdmVyc2lvbmAgKHRoZSBiYXNlbGluZSBpcyBgcGlubmVkVmVyc2lvbmApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxBZG1pdHMoXG4gIGluc3RhbGw6IFBpY2s8UGx1Z2luSW5zdGFsbCwgJ3ZlcnNpb25Qb2xpY3knIHwgJ3Bpbm5lZFZlcnNpb24nPixcbiAgdmVyc2lvbjogc3RyaW5nLFxuICB2ZXJzaW9uczogcmVhZG9ubHkgVmVyc2lvblJvd1tdLFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGJhc2UgPSBpbnN0YWxsLnBpbm5lZFZlcnNpb247XG4gIHN3aXRjaCAoaW5zdGFsbC52ZXJzaW9uUG9saWN5IGFzIEluc3RhbGxWZXJzaW9uUG9saWN5KSB7XG4gICAgY2FzZSAncGlubmVkJzpcbiAgICAgIHJldHVybiB2ZXJzaW9uID09PSBiYXNlO1xuICAgIGNhc2UgJ3BhdGNoJzpcbiAgICAgIHJldHVybiBiYXNlICE9PSBudWxsICYmIHNhdGlzZmllc1ZlcnNpb25TcGVjKHZlcnNpb24sIGB+JHtiYXNlfWApO1xuICAgIGNhc2UgJ21pbm9yJzpcbiAgICAgIHJldHVybiBiYXNlICE9PSBudWxsICYmIHNhdGlzZmllc1ZlcnNpb25TcGVjKHZlcnNpb24sIGBeJHtiYXNlfWApO1xuICAgIGNhc2UgJ2xhdGVzdCc6IHtcbiAgICAgIGlmICghaXNTdGFibGUodmVyc2lvbikpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChiYXNlID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChjb21wYXJlU2VtdmVyKHZlcnNpb24sIGJhc2UpIDwgMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gTmV2ZXIgY3Jvc3MgYSB2ZXJzaW9uIHRoZSBwdWJsaXNoZXIgbWFya2VkIGJyZWFraW5nLlxuICAgICAgcmV0dXJuICF2ZXJzaW9ucy5zb21lKCh2KSA9PiB2LmJyZWFraW5nICYmIGNvbXBhcmVTZW12ZXIodi52ZXJzaW9uLCBiYXNlKSA+IDAgJiYgY29tcGFyZVNlbXZlcih2LnZlcnNpb24sIHZlcnNpb24pIDw9IDApO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKiBXaGV0aGVyIGBtb2RlYCBhZG1pdHMgYHZlcnNpb25gICh0aGUgaW1wbGljaXQgcmFuZ2UgZm9yIGFuIGltcGxpY2l0IGluc3RhbGwpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVBZG1pdHMobW9kZTogSW5zdGFsbE1vZGUsIHZlcnNpb246IHN0cmluZywgdmVyc2lvbnM6IHJlYWRvbmx5IFZlcnNpb25Sb3dbXSk6IGJvb2xlYW4ge1xuICBpZiAobW9kZS5raW5kID09PSAnZXhwbGljaXQnKSByZXR1cm4gaW5zdGFsbEFkbWl0cyhtb2RlLmluc3RhbGwsIHZlcnNpb24sIHZlcnNpb25zKTtcbiAgY29uc3QgcmFuZ2UgPSBpbXBsaWNpdEluc3RhbGxSYW5nZSh2ZXJzaW9ucyk7XG4gIHJldHVybiByYW5nZSAhPT0gbnVsbCAmJiBzYXRpc2ZpZXNWZXJzaW9uU3BlYyh2ZXJzaW9uLCByYW5nZSk7XG59XG5cbi8qKiBJbnB1dCB0byB7QGxpbmsgc2VsZWN0TGlzdGluZ1ZlcnNpb259LiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uQ2hvaWNlSW5wdXQ8ViBleHRlbmRzIFBsdWdpbkxpc3RpbmdWZXJzaW9uID0gUGx1Z2luTGlzdGluZ1ZlcnNpb24+IHtcbiAgcmVmOiBzdHJpbmc7XG4gIHZlcnNpb25zOiByZWFkb25seSBWW107XG4gIG1vZGU6IEluc3RhbGxNb2RlO1xuICAvKiogVGhlIHJlZmVyZW5jZSdzIG93biB2ZXJzaW9uIHNwZWMgKGBmaWx0ZXIudmVyc2lvbmApLiAqL1xuICByZXF1ZXN0ZWQ/OiBzdHJpbmc7XG4gIGFkdmlzb3JpZXM6IHJlYWRvbmx5IFBsdWdpbkFkdmlzb3J5W107XG4gIHBvbGljeTogQ29uc3VtcHRpb25Qb2xpY3k7XG59XG5cbi8qKiBUaGUgbmV3ZXN0IHZlcnNpb24gKGJ5IHNlbXZlcikgb2YgYHZlcnNpb25zYCwgb3IgbnVsbC4gKi9cbmZ1bmN0aW9uIG5ld2VzdE9mPFYgZXh0ZW5kcyB7IHZlcnNpb246IHN0cmluZyB9Pih2ZXJzaW9uczogcmVhZG9ubHkgVltdKTogViB8IG51bGwge1xuICBjb25zdCBiZXN0ID0gaGlnaGVzdCh2ZXJzaW9ucy5tYXAoKHYpID0+IHYudmVyc2lvbikpO1xuICByZXR1cm4gYmVzdCA9PT0gbnVsbCA/IG51bGwgOiB2ZXJzaW9ucy5maW5kKCh2KSA9PiB2LnZlcnNpb24gPT09IGJlc3QpITtcbn1cblxuLyoqXG4gKiBQaWNrIHRoZSBsaXN0ZWQgdmVyc2lvbiBhIHJlZmVyZW5jZSByZXNvbHZlcyB0byAoc2VlIHRoZSBtb2R1bGUgZG9jKSwgb3JcbiAqIHRoZSByZWZ1c2FsIHRoYXQgZXhwbGFpbnMgd2h5IG5vbmUgY2FuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0TGlzdGluZ1ZlcnNpb248ViBleHRlbmRzIFBsdWdpbkxpc3RpbmdWZXJzaW9uPihpbnB1dDogVmVyc2lvbkNob2ljZUlucHV0PFY+KTogeyB2ZXJzaW9uOiBWOyBzdWdnZXN0ZWRWZXJzaW9uOiBzdHJpbmcgfCBudWxsIH0gfCB7IHJlZnVzYWw6IFJlc29sdXRpb25SZWZ1c2FsIH0ge1xuICBjb25zdCB7IHJlZiwgdmVyc2lvbnMsIG1vZGUsIHJlcXVlc3RlZCwgYWR2aXNvcmllcywgcG9saWN5IH0gPSBpbnB1dDtcbiAgY29uc3QgZXhhY3QgPSByZXF1ZXN0ZWQgIT09IHVuZGVmaW5lZCAmJiAhaXNWZXJzaW9uUmFuZ2UocmVxdWVzdGVkKSA/IHJlcXVlc3RlZC50cmltKCkgOiBudWxsO1xuICBjb25zdCByZXNvbHZlZEJlZm9yZSA9IG1vZGUua2luZCA9PT0gJ2V4cGxpY2l0JyA/IG1vZGUuaW5zdGFsbC5yZXNvbHZlZFZlcnNpb24gOiBudWxsO1xuICAvLyBGb3IgYSBGTEFHR0VEIGFuc3dlcjogdGhlIG5ld2VzdCBVTkZMQUdHRUQgdmVyc2lvbiBhYm92ZSBpdCB0aGF0IHRoZVxuICAvLyBJTlNUQUxMIGFsbG93cyBhbmQgbm8gYmxvY2tpbmcgYWR2aXNvcnkgY292ZXJzIOKAlCB0aGUgdmVyc2lvbiBhIHBpcGVsaW5lXG4gIC8vIG93bmVyIGlzIHRvbGQgdG8gbW92ZSB0by4gTnVsbCBmb3IgYW4gdW5mbGFnZ2VkIGFuc3dlciwgb3Igd2hlbiBub25lIGV4aXN0cy5cbiAgY29uc3Qgc3VnZ2VzdGlvbiA9IChyZXNvbHZlZDogVik6IHN0cmluZyB8IG51bGwgPT4ge1xuICAgIGlmICghcmVzb2x2ZWQuc2NhbkZsYWdnZWRBdCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcG9vbCA9IHZlcnNpb25zLmZpbHRlcigodikgPT4gIXYueWFua2VkQXQgJiYgIXYuc2NhbkZsYWdnZWRBdFxuICAgICAgJiYgY29tcGFyZVNlbXZlcih2LnZlcnNpb24sIHJlc29sdmVkLnZlcnNpb24pID4gMFxuICAgICAgJiYgbW9kZUFkbWl0cyhtb2RlLCB2LnZlcnNpb24sIHZlcnNpb25zKVxuICAgICAgJiYgKCF2LnBhdXNlZEF0IHx8IHYudmVyc2lvbiA9PT0gcmVzb2x2ZWRCZWZvcmUpXG4gICAgICAmJiBibG9ja2luZ0Fkdmlzb3JpZXMoYWR2aXNvcmllcywgdi52ZXJzaW9uLCBwb2xpY3kpLmxlbmd0aCA9PT0gMCk7XG4gICAgcmV0dXJuIG5ld2VzdE9mKHBvb2wpPy52ZXJzaW9uID8/IG51bGw7XG4gIH07XG5cbiAgaWYgKGV4YWN0ICE9PSBudWxsKSB7XG4gICAgY29uc3QgdiA9IHZlcnNpb25zLmZpbmQoKHgpID0+IHgudmVyc2lvbiA9PT0gZXhhY3QpO1xuICAgIGlmICghdikgcmV0dXJuIHsgcmVmdXNhbDogeyBjb2RlOiAnTk9UX0ZPVU5EJywgcmVhc29uOiAndmVyc2lvbl9ub3RfZm91bmQnLCBtZXNzYWdlOiBgJHtyZWZ9IGhhcyBubyBwdWJsaXNoZWQgdmVyc2lvbiAke2V4YWN0fS5gIH0gfTtcbiAgICBpZiAodi55YW5rZWRBdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVmdXNhbDoge1xuICAgICAgICAgIGNvZGU6ICdQTFVHSU5fVU5BVkFJTEFCTEUnLFxuICAgICAgICAgIHJlYXNvbjogJ3lhbmtlZCcsXG4gICAgICAgICAgbWVzc2FnZTogYCR7cmVmfUAke2V4YWN0fSBpcyB5YW5rZWQke3YueWFua1JlYXNvbiA/IGA6ICR7di55YW5rUmVhc29ufWAgOiAnJ30uIE1vdmUgdG8gYSBzdXBwb3J0ZWQgdmVyc2lvbi5gLFxuICAgICAgICAgIGRldGFpbHM6IHsgdmVyc2lvbjogZXhhY3QgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChtb2RlLmtpbmQgPT09ICdleHBsaWNpdCcgJiYgIWluc3RhbGxBZG1pdHMobW9kZS5pbnN0YWxsLCBleGFjdCwgdmVyc2lvbnMpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWZ1c2FsOiB7XG4gICAgICAgICAgY29kZTogJ1BMVUdJTl9OT1RfSU5TVEFMTEVEJyxcbiAgICAgICAgICByZWFzb246ICd2ZXJzaW9uX291dHNpZGVfaW5zdGFsbCcsXG4gICAgICAgICAgbWVzc2FnZTogYCR7cmVmfUAke2V4YWN0fSBpcyBvdXRzaWRlIHlvdXIgaW5zdGFsbCAoJHttb2RlLmluc3RhbGwudmVyc2lvblBvbGljeX0gZnJvbSAke21vZGUuaW5zdGFsbC5waW5uZWRWZXJzaW9ufSkuIFVwZ3JhZGUgdGhlIGluc3RhbGwgZmlyc3QuYCxcbiAgICAgICAgICBkZXRhaWxzOiB7IHZlcnNpb246IGV4YWN0LCB2ZXJzaW9uUG9saWN5OiBtb2RlLmluc3RhbGwudmVyc2lvblBvbGljeSwgcGlubmVkVmVyc2lvbjogbW9kZS5pbnN0YWxsLnBpbm5lZFZlcnNpb24gfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGJsb2NraW5nID0gYmxvY2tpbmdBZHZpc29yaWVzKGFkdmlzb3JpZXMsIGV4YWN0LCBwb2xpY3kpO1xuICAgIGlmIChibG9ja2luZy5sZW5ndGgpIHJldHVybiB7IHJlZnVzYWw6IGFkdmlzb3J5UmVmdXNhbChyZWYsIGV4YWN0LCBibG9ja2luZykgfTtcbiAgICByZXR1cm4geyB2ZXJzaW9uOiB2LCBzdWdnZXN0ZWRWZXJzaW9uOiBzdWdnZXN0aW9uKHYpIH07XG4gIH1cblxuICAvLyBUaGUgcmFuZ2UgdGhlIElOU1RBTEwgYWxsb3dzLiBGb3IgdGhlIGltcGxpY2l0IGluc3RhbGwgYW4gZXhwbGljaXQgc3BlYyBvblxuICAvLyB0aGUgcmVmZXJlbmNlIHJlcGxhY2VzIHRoZSBpbXBsaWNpdCByYW5nZSAoaXQgaXMgYSBkZWxpYmVyYXRlIGNob2ljZSkuXG4gIGNvbnN0IGFkbWl0dGVkID0gdmVyc2lvbnMuZmlsdGVyKCh2KSA9PiAhdi55YW5rZWRBdFxuICAgICYmIChtb2RlLmtpbmQgPT09ICdleHBsaWNpdCcgPyBpbnN0YWxsQWRtaXRzKG1vZGUuaW5zdGFsbCwgdi52ZXJzaW9uLCB2ZXJzaW9ucylcbiAgICAgIDogcmVxdWVzdGVkICE9PSB1bmRlZmluZWQgfHwgbW9kZUFkbWl0cyhtb2RlLCB2LnZlcnNpb24sIHZlcnNpb25zKSlcbiAgICAmJiAocmVxdWVzdGVkID09PSB1bmRlZmluZWQgfHwgc2F0aXNmaWVzVmVyc2lvblNwZWModi52ZXJzaW9uLCByZXF1ZXN0ZWQpKVxuICAgICYmICghdi5wYXVzZWRBdCB8fCB2LnZlcnNpb24gPT09IHJlc29sdmVkQmVmb3JlKSk7XG4gIC8vIEEgYmxvY2tpbmcgQURWSVNPUlkgKHRoZSBvcmcncyBpbnN0YWxsIHBvbGljeSkgc2tpcHMgYSB2ZXJzaW9uOyBhIHNjYW5cbiAgLy8gZmxhZyBuZXZlciBkb2VzLlxuICBjb25zdCBhbGxvd2VkID0gYWRtaXR0ZWQuZmlsdGVyKCh2KSA9PiBibG9ja2luZ0Fkdmlzb3JpZXMoYWR2aXNvcmllcywgdi52ZXJzaW9uLCBwb2xpY3kpLmxlbmd0aCA9PT0gMCk7XG4gIC8vIFJhbmdlcyBvbmx5IGFkbWl0IHByZXJlbGVhc2VzIHRoZXkgbmFtZSAobnBtIHNlbWFudGljcyksIHNvIHRoZSBoaWdoZXN0XG4gIC8vIGFkbWl0dGVkIHZlcnNpb24gaXMgdGhlIGFuc3dlci5cbiAgY29uc3QgYmVzdCA9IG5ld2VzdE9mKGFsbG93ZWQpO1xuICBpZiAoYmVzdCkgcmV0dXJuIHsgdmVyc2lvbjogYmVzdCwgc3VnZ2VzdGVkVmVyc2lvbjogc3VnZ2VzdGlvbihiZXN0KSB9O1xuXG4gIGlmIChhZG1pdHRlZC5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbmV3ZXN0ID0gbmV3ZXN0T2YoYWRtaXR0ZWQpITtcbiAgICByZXR1cm4geyByZWZ1c2FsOiBhZHZpc29yeVJlZnVzYWwocmVmLCBuZXdlc3QudmVyc2lvbiwgYmxvY2tpbmdBZHZpc29yaWVzKGFkdmlzb3JpZXMsIG5ld2VzdC52ZXJzaW9uLCBwb2xpY3kpKSB9O1xuICB9XG4gIGlmIChtb2RlLmtpbmQgPT09ICdleHBsaWNpdCcgJiYgcmVxdWVzdGVkICE9PSB1bmRlZmluZWRcbiAgICAmJiB2ZXJzaW9ucy5zb21lKCh2KSA9PiAhdi55YW5rZWRBdCAmJiBzYXRpc2ZpZXNWZXJzaW9uU3BlYyh2LnZlcnNpb24sIHJlcXVlc3RlZCkpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZnVzYWw6IHtcbiAgICAgICAgY29kZTogJ1BMVUdJTl9OT1RfSU5TVEFMTEVEJyxcbiAgICAgICAgcmVhc29uOiAndmVyc2lvbl9vdXRzaWRlX2luc3RhbGwnLFxuICAgICAgICBtZXNzYWdlOiBgTm8gdmVyc2lvbiBvZiAke3JlZn0gbWF0Y2hpbmcgJHtyZXF1ZXN0ZWR9IGlzIGluc2lkZSB5b3VyIGluc3RhbGwgKCR7bW9kZS5pbnN0YWxsLnZlcnNpb25Qb2xpY3l9IGZyb20gJHttb2RlLmluc3RhbGwucGlubmVkVmVyc2lvbn0pLiBVcGdyYWRlIHRoZSBpbnN0YWxsIGZpcnN0LmAsXG4gICAgICAgIGRldGFpbHM6IHsgcmVxdWVzdGVkLCB2ZXJzaW9uUG9saWN5OiBtb2RlLmluc3RhbGwudmVyc2lvblBvbGljeSwgcGlubmVkVmVyc2lvbjogbW9kZS5pbnN0YWxsLnBpbm5lZFZlcnNpb24gfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlZnVzYWw6IHtcbiAgICAgIGNvZGU6ICdOT1RfRk9VTkQnLFxuICAgICAgcmVhc29uOiAnbm9fbWF0Y2hpbmdfdmVyc2lvbicsXG4gICAgICBtZXNzYWdlOiBgTm8gcmVzb2x2YWJsZSB2ZXJzaW9uIG9mICR7cmVmfSR7cmVxdWVzdGVkID8gYCBtYXRjaGVzICR7cmVxdWVzdGVkfWAgOiAnJ30uYCxcbiAgICB9LFxuICB9O1xufVxuXG4vKiogVGhlIGhpZ2hlc3Qgb2YgYHZlcnNpb25zYCBieSBzZW12ZXIgKHByZXJlbGVhc2VzIGluY2x1ZGVkKS4gKi9cbmZ1bmN0aW9uIGhpZ2hlc3QodmVyc2lvbnM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIHJldHVybiB2ZXJzaW9ucy5yZWR1Y2U8c3RyaW5nIHwgbnVsbD4oKGJlc3QsIHYpID0+IChiZXN0ID09PSBudWxsIHx8IGNvbXBhcmVTZW12ZXIodiwgYmVzdCkgPiAwID8gdiA6IGJlc3QpLCBudWxsKTtcbn1cblxuZnVuY3Rpb24gYWR2aXNvcnlSZWZ1c2FsKHJlZjogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIGJsb2NraW5nOiBSZWFkb25seUFycmF5PFBpY2s8UGx1Z2luQWR2aXNvcnksICdpZCcgfCAnc2V2ZXJpdHknIHwgJ2ZpeGVkVmVyc2lvbicgfCAnc3VtbWFyeSc+Pik6IFJlc29sdXRpb25SZWZ1c2FsIHtcbiAgY29uc3QgZml4ZWQgPSBibG9ja2luZy5tYXAoKGEpID0+IGEuZml4ZWRWZXJzaW9uKS5maWx0ZXIoKHYpOiB2IGlzIHN0cmluZyA9PiAhIXYpO1xuICByZXR1cm4ge1xuICAgIGNvZGU6ICdQTFVHSU5fQkxPQ0tFRF9CWV9QT0xJQ1knLFxuICAgIHJlYXNvbjogJ2Fkdmlzb3J5JyxcbiAgICBtZXNzYWdlOiBgJHtyZWZ9QCR7dmVyc2lvbn0gaXMgYmxvY2tlZCBieSB5b3VyIG9yZ2FuaXphdGlvbidzIGFkdmlzb3J5IHBvbGljeTogJHtibG9ja2luZy5tYXAoKGEpID0+IGAke2Euc2V2ZXJpdHl9IOKAlCAke2Euc3VtbWFyeX1gKS5qb2luKCc7ICcpfS5gXG4gICAgICArIChmaXhlZC5sZW5ndGggPyBgIEZpeGVkIGluICR7Zml4ZWQuam9pbignLCAnKX0uYCA6ICcnKSxcbiAgICBkZXRhaWxzOiB7IHZlcnNpb24sIGFkdmlzb3JpZXM6IGJsb2NraW5nLm1hcCgoYSkgPT4gYS5pZCksIC4uLihmaXhlZC5sZW5ndGggPyB7IGZpeGVkVmVyc2lvbnM6IGZpeGVkIH0gOiB7fSkgfSxcbiAgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoZSBvcmcncyBpbnN0YWxsIHN0YXRlIGZvciBvbmUgbGlzdGluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFRoZSBvcmcgKGFuZCwgZm9yIGEgdGVhbSwgaXRzIHJvb3Qgb3JnKSBhIHJlc29sdXRpb24gcnVucyBmb3IuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdXRpb25TY29wZSB7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIC8qKiBUaGUgcm9vdCBvcmcgd2hlbiB0aGUgY2FsbGVyIGlzIGEgdGVhbS4gKi9cbiAgcm9vdE9yZ0lkPzogc3RyaW5nO1xufVxuXG4vKiogVGhlIG9yZyBpZHMgd2hvc2UgaW5zdGFsbHMgYW5kIHBvbGljaWVzIGFwcGx5LCBvd24gZmlyc3QuICovXG5leHBvcnQgZnVuY3Rpb24gc2NvcGVPcmdJZHMoc2NvcGU6IFJlc29sdXRpb25TY29wZSk6IHN0cmluZ1tdIHtcbiAgY29uc3Qgb3duID0gc2NvcGUub3JnSWQudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgcm9vdCA9IHNjb3BlLnJvb3RPcmdJZD8udG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHJvb3QgJiYgcm9vdCAhPT0gb3duID8gW293biwgcm9vdF0gOiBbb3duXTtcbn1cblxuLyoqXG4gKiBIb3cgdGhlIG9yZyByZWFjaGVzIGBsaXN0aW5nYCDigJQgb3IgdGhlIHJlZnVzYWwuIEFuIEFDVElWRSBvd24tb3JnIHJvdyB3aW5zLFxuICogdGhlbiB0aGUgcm9vdCBvcmcncyAoYSB0ZWFtIGluaGVyaXRzIGl0KTsgZmFpbGluZyBib3RoLCB0aGUgaW1wbGljaXRcbiAqIE9mZmljaWFsIGluc3RhbGwgKHVubGVzcyB0aGUgcG9saWN5IGlzIGBleHBsaWNpdGApOyBvdGhlcndpc2UgdGhlIG9yZydzIG93blxuICogcGVuZGluZyAvIGRlbmllZCByb3cgZXhwbGFpbnMgdGhlIHJlZnVzYWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsTW9kZUZvcihcbiAgcHVibGlzaGVyOiBQaWNrPFB1Ymxpc2hlciwgJ2hhbmRsZSc+LFxuICBsaXN0aW5nOiBQaWNrPFBsdWdpbkxpc3RpbmcsICdpZCcgfCAnbmFtZSc+LFxuICBpbnN0YWxsczogcmVhZG9ubHkgUGx1Z2luSW5zdGFsbFtdLFxuICBwb2xpY3k6IENvbnN1bXB0aW9uUG9saWN5LFxuICBzY29wZTogUmVzb2x1dGlvblNjb3BlLFxuKTogSW5zdGFsbE1vZGUgfCBSZXNvbHV0aW9uUmVmdXNhbCB7XG4gIGNvbnN0IFtvd24sIHJvb3RdID0gc2NvcGVPcmdJZHMoc2NvcGUpO1xuICBjb25zdCBmb3JMaXN0aW5nID0gaW5zdGFsbHMuZmlsdGVyKChpKSA9PiBpLmxpc3RpbmdJZCA9PT0gbGlzdGluZy5pZCk7XG4gIGNvbnN0IG93blJvdyA9IGZvckxpc3RpbmcuZmluZCgoaSkgPT4gaS5vcmdJZC50b0xvd2VyQ2FzZSgpID09PSBvd24pO1xuICBjb25zdCByb290Um93ID0gcm9vdCA/IGZvckxpc3RpbmcuZmluZCgoaSkgPT4gaS5vcmdJZC50b0xvd2VyQ2FzZSgpID09PSByb290KSA6IHVuZGVmaW5lZDtcbiAgaWYgKG93blJvdz8uc3RhdHVzID09PSAnYWN0aXZlJykgcmV0dXJuIHsga2luZDogJ2V4cGxpY2l0JywgaW5zdGFsbDogb3duUm93LCBpbmhlcml0ZWQ6IGZhbHNlIH07XG4gIGlmIChyb290Um93Py5zdGF0dXMgPT09ICdhY3RpdmUnKSByZXR1cm4geyBraW5kOiAnZXhwbGljaXQnLCBpbnN0YWxsOiByb290Um93LCBpbmhlcml0ZWQ6IHRydWUgfTtcbiAgY29uc3QgcmVmID0gYCR7cHVibGlzaGVyLmhhbmRsZX0vJHtsaXN0aW5nLm5hbWV9YDtcbiAgaWYgKHB1Ymxpc2hlci5oYW5kbGUgPT09IE9GRklDSUFMX1BVQkxJU0hFUl9IQU5ETEUpIHtcbiAgICBpZiAocG9saWN5Lm9mZmljaWFsSW5zdGFsbHMgPT09ICdpbXBsaWNpdCcpIHJldHVybiB7IGtpbmQ6ICdpbXBsaWNpdCcgfTtcbiAgICBpZiAoIW93blJvdykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZTogJ1BMVUdJTl9OT1RfSU5TVEFMTEVEJyxcbiAgICAgICAgcmVhc29uOiAnb2ZmaWNpYWxfZXhwbGljaXQnLFxuICAgICAgICBtZXNzYWdlOiBgWW91ciBvcmdhbml6YXRpb24gaW5zdGFsbHMgT2ZmaWNpYWwgcGx1Z2lucyBleHBsaWNpdGx5OyBpbnN0YWxsICR7cmVmfSBmaXJzdC5gLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgaWYgKG93blJvdz8uc3RhdHVzID09PSAncGVuZGluZ19hcHByb3ZhbCcpIHtcbiAgICByZXR1cm4geyBjb2RlOiAnUExVR0lOX05PVF9JTlNUQUxMRUQnLCByZWFzb246ICdwZW5kaW5nX2FwcHJvdmFsJywgbWVzc2FnZTogYFRoZSBpbnN0YWxsIG9mICR7cmVmfSBpcyB3YWl0aW5nIGZvciBhcHByb3ZhbC5gIH07XG4gIH1cbiAgaWYgKG93blJvdz8uc3RhdHVzID09PSAnZGVuaWVkJykge1xuICAgIHJldHVybiB7IGNvZGU6ICdQTFVHSU5fTk9UX0lOU1RBTExFRCcsIHJlYXNvbjogJ2RlbmllZCcsIG1lc3NhZ2U6IGBUaGUgaW5zdGFsbCBvZiAke3JlZn0gd2FzIGRlbmllZC5gIH07XG4gIH1cbiAgcmV0dXJuIHsgY29kZTogJ1BMVUdJTl9OT1RfSU5TVEFMTEVEJywgcmVhc29uOiAnbm90X2luc3RhbGxlZCcsIG1lc3NhZ2U6IGAke3JlZn0gaXMgbm90IGluc3RhbGxlZCBpbiB5b3VyIG9yZ2FuaXphdGlvbi5gIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBEYXRhIHNvdXJjZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFRoZSByb3dzIHRoZSByZXNvbHZlciByZWFkcy4gSW1wbGVtZW50YXRpb25zIG11c3QgcnVuIHdpdGggYSBzY29wZSB0aGF0IGNhblxuICogIHJlYWQgdGhlIGVjb3N5c3RlbSB0YWJsZXMgYW5kIHRoZSBvcmcncyAoYW5kIHJvb3Qgb3JnJ3MpIGluc3RhbGwgcm93cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdGluZ0RhdGFTb3VyY2Uge1xuICBwdWJsaXNoZXJCeUhhbmRsZShoYW5kbGU6IHN0cmluZyk6IFByb21pc2U8UHVibGlzaGVyIHwgbnVsbD47XG4gIHB1Ymxpc2hlcnNCeUlkcyhpZHM6IHN0cmluZ1tdKTogUHJvbWlzZTxQdWJsaXNoZXJbXT47XG4gIGxpc3RpbmdCeU5hbWUocHVibGlzaGVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTxQbHVnaW5MaXN0aW5nIHwgbnVsbD47XG4gIC8qKiBMaXN0ZWQgLyB1bm1haW50YWluZWQgbGlzdGluZ3MgKG9wdGlvbmFsbHkgb25seSB0aGVzZSBpZHMgb3IgbmFtZXMpLiAqL1xuICBsaXZlTGlzdGluZ3MoZmlsdGVyPzogeyBpZHM/OiBzdHJpbmdbXTsgbmFtZXM/OiBzdHJpbmdbXSB9KTogUHJvbWlzZTxQbHVnaW5MaXN0aW5nW10+O1xuICB2ZXJzaW9uc0Zvckxpc3RpbmdzKGxpc3RpbmdJZHM6IHN0cmluZ1tdKTogUHJvbWlzZTxQbHVnaW5MaXN0aW5nVmVyc2lvbltdPjtcbiAgLyoqIFBVQkxJU0hFRCBhZHZpc29yaWVzLiAqL1xuICBhZHZpc29yaWVzRm9yTGlzdGluZ3MobGlzdGluZ0lkczogc3RyaW5nW10pOiBQcm9taXNlPFBsdWdpbkFkdmlzb3J5W10+O1xuICBpbnN0YWxsc0Zvck9yZ3Mob3JnSWRzOiBzdHJpbmdbXSk6IFByb21pc2U8UGx1Z2luSW5zdGFsbFtdPjtcbiAgcG9saWNpZXNGb3JPcmdzKG9yZ0lkczogc3RyaW5nW10pOiBQcm9taXNlPFBsdWdpbkluc3RhbGxQb2xpY3lbXT47XG59XG5cbi8qKlxuICogQSB7QGxpbmsgTGlzdGluZ0RhdGFTb3VyY2V9IG92ZXIgYSBkcml6emxlIHRyYW5zYWN0aW9uLiBUaGUgY2FsbGVyIG93bnMgdGhlXG4gKiB0cmFuc2FjdGlvbidzIHNjb3BlOiBpdCBtdXN0IGJlIGFibGUgdG8gcmVhZCB0aGUgZWNvc3lzdGVtIHRhYmxlcyAoYXBwLXJvbGVcbiAqIFJMUykgYW5kIHRoZSBpbnN0YWxsIHJvd3Mgb2YgdGhlIG9yZyBBTkQgaXRzIHJvb3Qgb3JnIChhIHRlYW0ncyByZWFkcyBvZiBpdHNcbiAqIHJvb3QncyByb3dzIG5lZWQgYW4gZWxldmF0ZWQgc2NvcGUsIGxpa2UgcGFyZW50LW9yZyBwbHVnaW4gcmVhZHMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJpenpsZUxpc3RpbmdTb3VyY2UodHg6IENydWRUeCk6IExpc3RpbmdEYXRhU291cmNlIHtcbiAgY29uc3QgZGIgPSB0eDtcbiAgY29uc3QgUCA9IHNjaGVtYS5wdWJsaXNoZXI7XG4gIGNvbnN0IEwgPSBzY2hlbWEucGx1Z2luTGlzdGluZztcbiAgY29uc3QgViA9IHNjaGVtYS5wbHVnaW5MaXN0aW5nVmVyc2lvbjtcbiAgY29uc3QgQSA9IHNjaGVtYS5wbHVnaW5BZHZpc29yeTtcbiAgY29uc3QgSSA9IHNjaGVtYS5wbHVnaW5JbnN0YWxsO1xuICBjb25zdCBJUCA9IHNjaGVtYS5wbHVnaW5JbnN0YWxsUG9saWN5O1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlckJ5SGFuZGxlOiBhc3luYyAoaGFuZGxlKSA9PiAoKGF3YWl0IGRiLnNlbGVjdCgpLmZyb20oUCkud2hlcmUoZXEoUC5oYW5kbGUsIGhhbmRsZSkpKSBhcyBQdWJsaXNoZXJbXSlbMF0gPz8gbnVsbCxcbiAgICBwdWJsaXNoZXJzQnlJZHM6IGFzeW5jIChpZHMpID0+IChpZHMubGVuZ3RoID8gZGIuc2VsZWN0KCkuZnJvbShQKS53aGVyZShpbkFycmF5KFAuaWQsIGlkcykpIDogW10pLFxuICAgIGxpc3RpbmdCeU5hbWU6IGFzeW5jIChwdWJsaXNoZXJJZCwgbmFtZSkgPT5cbiAgICAgICgoYXdhaXQgZGIuc2VsZWN0KCkuZnJvbShMKS53aGVyZShhbmQoZXEoTC5wdWJsaXNoZXJJZCwgcHVibGlzaGVySWQpLCBlcShMLm5hbWUsIG5hbWUpKSkpIGFzIFBsdWdpbkxpc3RpbmdbXSlbMF0gPz8gbnVsbCxcbiAgICBsaXZlTGlzdGluZ3M6IGFzeW5jIChmaWx0ZXIgPSB7fSkgPT4ge1xuICAgICAgaWYgKGZpbHRlci5pZHMgJiYgZmlsdGVyLmlkcy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChmaWx0ZXIubmFtZXMgJiYgZmlsdGVyLm5hbWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgcmV0dXJuIGRiLnNlbGVjdCgpLmZyb20oTCkud2hlcmUoYW5kKFxuICAgICAgICBpbkFycmF5KEwuc3RhdGUsIFsnbGlzdGVkJywgJ3VubWFpbnRhaW5lZCddKSxcbiAgICAgICAgLi4uKGZpbHRlci5pZHMgPyBbaW5BcnJheShMLmlkLCBmaWx0ZXIuaWRzKV0gOiBbXSksXG4gICAgICAgIC4uLihmaWx0ZXIubmFtZXMgPyBbaW5BcnJheShMLm5hbWUsIGZpbHRlci5uYW1lcyldIDogW10pLFxuICAgICAgKSk7XG4gICAgfSxcbiAgICB2ZXJzaW9uc0Zvckxpc3RpbmdzOiBhc3luYyAoaWRzKSA9PiAoaWRzLmxlbmd0aCA/IGRiLnNlbGVjdCgpLmZyb20oVikud2hlcmUoaW5BcnJheShWLmxpc3RpbmdJZCwgaWRzKSkgOiBbXSksXG4gICAgYWR2aXNvcmllc0Zvckxpc3RpbmdzOiBhc3luYyAoaWRzKSA9PiAoaWRzLmxlbmd0aCA/IGRiLnNlbGVjdCgpLmZyb20oQSkud2hlcmUoYW5kKGluQXJyYXkoQS5saXN0aW5nSWQsIGlkcyksIGVxKEEuc3RhdGUsICdwdWJsaXNoZWQnKSkpIDogW10pLFxuICAgIGluc3RhbGxzRm9yT3JnczogYXN5bmMgKG9yZ0lkcykgPT4gKG9yZ0lkcy5sZW5ndGggPyBkYi5zZWxlY3QoKS5mcm9tKEkpLndoZXJlKGluQXJyYXkoSS5vcmdJZCwgb3JnSWRzKSkgOiBbXSksXG4gICAgcG9saWNpZXNGb3JPcmdzOiBhc3luYyAob3JnSWRzKSA9PiAob3JnSWRzLmxlbmd0aCA/IGRiLnNlbGVjdCgpLmZyb20oSVApLndoZXJlKGluQXJyYXkoSVAub3JnSWQsIG9yZ0lkcykpIDogW10pLFxuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVzb2x1dGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEEgcGx1Z2luIHJlZmVyZW5jZSBhcyB0aGUgcmVzb2x2ZXIgcmVhZHMgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RpbmdSZWZlcmVuY2Uge1xuICAvKiogUHVibGlzaGVyIGhhbmRsZTsgYWJzZW50ID0gdGhlIE9mZmljaWFsIGxpc3RpbmcgKHRoZSB1bnF1YWxpZmllZCBmYWxsYmFjaykuICovXG4gIHB1Ymxpc2hlcj86IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICAvKiogVGhlIHJlZmVyZW5jZSdzIGBmaWx0ZXIudmVyc2lvbmAuICovXG4gIHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKiBBIHJlZmVyZW5jZSB0aGF0IHJlc29sdmVkIHRvIGEgbGlzdGVkIHZlcnNpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RpbmdSZXNvbHZlZCB7XG4gIG9rOiB0cnVlO1xuICAvKiogRm9yIGEgRkxBR0dFRCB2ZXJzaW9uOiB0aGUgbmV3ZXN0IHVuZmxhZ2dlZCBvbmUgYWJvdmUgaXQgdGhlIGluc3RhbGwgYWxsb3dzIChudWxsIG90aGVyd2lzZSkuICovXG4gIHN1Z2dlc3RlZFZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gIHB1Ymxpc2hlcjogUHVibGlzaGVyO1xuICBsaXN0aW5nOiBQbHVnaW5MaXN0aW5nO1xuICB2ZXJzaW9uOiBQbHVnaW5MaXN0aW5nVmVyc2lvbjtcbiAgbW9kZTogSW5zdGFsbE1vZGU7XG4gIHBvbGljeTogQ29uc3VtcHRpb25Qb2xpY3k7XG4gIC8qKiBUaGUgc3BlYyBkZWNsYXJlcyBzZWNyZXRzIHRoZSBwb2xpY3kgd2l0aGhvbGRzIGZyb20gdGhpcyB0aWVyLiAqL1xuICBzZWNyZXRzV2l0aGhlbGQ6IGJvb2xlYW47XG4gIHdhcm5pbmdzOiBSZXNvbHV0aW9uV2FybmluZ1tdO1xufVxuXG4vKiogQSByZWZlcmVuY2UgdGhhdCBuYW1lZCBhIGxpc3RpbmcgYnV0IGNhbid0IHJlc29sdmUuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RpbmdSZWZ1c2VkIHtcbiAgb2s6IGZhbHNlO1xuICByZWZ1c2FsOiBSZXNvbHV0aW9uUmVmdXNhbDtcbiAgcHVibGlzaGVyPzogUHVibGlzaGVyO1xuICBsaXN0aW5nPzogUGx1Z2luTGlzdGluZztcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGByZWZgIHRvIGEgbGlzdGVkIHZlcnNpb24gZm9yIGBzY29wZWAsIG9yIHJlZnVzZS4gTnVsbCB3aGVuIHRoZVxuICogbGlzdGluZyBkb2Vzbid0IGV4aXN0IGF0IGFsbCAoYW4gdW5xdWFsaWZpZWQgcmVmZXJlbmNlIHRoZW4gc2ltcGx5IGhhcyBub1xuICogT2ZmaWNpYWwgZmFsbGJhY2spLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUxpc3RpbmdSZWZlcmVuY2UoXG4gIHNvdXJjZTogTGlzdGluZ0RhdGFTb3VyY2UsXG4gIHJlZjogTGlzdGluZ1JlZmVyZW5jZSxcbiAgc2NvcGU6IFJlc29sdXRpb25TY29wZSxcbik6IFByb21pc2U8TGlzdGluZ1Jlc29sdmVkIHwgTGlzdGluZ1JlZnVzZWQgfCBudWxsPiB7XG4gIGNvbnN0IGhhbmRsZSA9IHJlZi5wdWJsaXNoZXIgPz8gT0ZGSUNJQUxfUFVCTElTSEVSX0hBTkRMRTtcbiAgY29uc3QgcHVibGlzaGVyID0gYXdhaXQgc291cmNlLnB1Ymxpc2hlckJ5SGFuZGxlKGhhbmRsZSk7XG4gIGlmICghcHVibGlzaGVyKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgbGlzdGluZyA9IGF3YWl0IHNvdXJjZS5saXN0aW5nQnlOYW1lKHB1Ymxpc2hlci5pZCwgcmVmLm5hbWUpO1xuICBpZiAoIWxpc3RpbmcpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IG9yZ0lkcyA9IHNjb3BlT3JnSWRzKHNjb3BlKTtcbiAgY29uc3QgW3BvbGljaWVzLCBpbnN0YWxsc10gPSBhd2FpdCBQcm9taXNlLmFsbChbc291cmNlLnBvbGljaWVzRm9yT3JncyhvcmdJZHMpLCBzb3VyY2UuaW5zdGFsbHNGb3JPcmdzKG9yZ0lkcyldKTtcbiAgY29uc3QgcG9saWN5ID0gZWZmZWN0aXZlQ29uc3VtcHRpb25Qb2xpY3kocG9saWNpZXMsIG9yZ0lkc1swXSEsIG9yZ0lkc1sxXSk7XG4gIGNvbnN0IGJsb2NrID0gbGlzdGluZ0Jsb2NrKHBvbGljeSwgcHVibGlzaGVyLCBsaXN0aW5nKTtcbiAgaWYgKGJsb2NrKSByZXR1cm4geyBvazogZmFsc2UsIHJlZnVzYWw6IGJsb2NrUmVmdXNhbChibG9jayksIHB1Ymxpc2hlciwgbGlzdGluZyB9O1xuXG4gIGNvbnN0IG1vZGUgPSBpbnN0YWxsTW9kZUZvcihwdWJsaXNoZXIsIGxpc3RpbmcsIGluc3RhbGxzLCBwb2xpY3ksIHNjb3BlKTtcbiAgaWYgKCdjb2RlJyBpbiBtb2RlKSByZXR1cm4geyBvazogZmFsc2UsIHJlZnVzYWw6IG1vZGUsIHB1Ymxpc2hlciwgbGlzdGluZyB9O1xuXG4gIGNvbnN0IFt2ZXJzaW9ucywgYWR2aXNvcmllc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgc291cmNlLnZlcnNpb25zRm9yTGlzdGluZ3MoW2xpc3RpbmcuaWRdKSxcbiAgICBzb3VyY2UuYWR2aXNvcmllc0Zvckxpc3RpbmdzKFtsaXN0aW5nLmlkXSksXG4gIF0pO1xuICBjb25zdCByZWZfID0gYCR7cHVibGlzaGVyLmhhbmRsZX0vJHtsaXN0aW5nLm5hbWV9YDtcbiAgY29uc3QgY2hvaWNlID0gc2VsZWN0TGlzdGluZ1ZlcnNpb24oeyByZWY6IHJlZl8sIHZlcnNpb25zLCBtb2RlLCByZXF1ZXN0ZWQ6IHJlZi52ZXJzaW9uLCBhZHZpc29yaWVzLCBwb2xpY3kgfSk7XG4gIGlmICgncmVmdXNhbCcgaW4gY2hvaWNlKSByZXR1cm4geyBvazogZmFsc2UsIHJlZnVzYWw6IGNob2ljZS5yZWZ1c2FsLCBwdWJsaXNoZXIsIGxpc3RpbmcgfTtcblxuICBjb25zdCB2ZXJzaW9uID0gY2hvaWNlLnZlcnNpb247XG4gIGNvbnN0IHsgd2FybmluZ3MsIHNlY3JldHNXaXRoaGVsZCB9ID0gbGlzdGVkVmVyc2lvbldhcm5pbmdzKHsgcHVibGlzaGVyLCBsaXN0aW5nLCB2ZXJzaW9uLCBhZHZpc29yaWVzLCBwb2xpY3kgfSk7XG4gIC8vIFRoZSBwaW4ga2VlcHMgdGhlIHBpcGVsaW5lIG9uIGEgZmxhZ2dlZCB2ZXJzaW9uIHdoaWxlIGEgY2xlYW4gb25lIGlzIGFsbG93ZWQuXG4gIGlmIChjaG9pY2Uuc3VnZ2VzdGVkVmVyc2lvbiAmJiByZWYudmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgd2FybmluZ3MucHVzaCh2dWxuVXBncmFkZUF2YWlsYWJsZVdhcm5pbmcocmVmXywgdmVyc2lvbi52ZXJzaW9uLCBjaG9pY2Uuc3VnZ2VzdGVkVmVyc2lvbikpO1xuICB9XG4gIHJldHVybiB7IG9rOiB0cnVlLCBwdWJsaXNoZXIsIGxpc3RpbmcsIHZlcnNpb24sIG1vZGUsIHBvbGljeSwgc2VjcmV0c1dpdGhoZWxkLCB3YXJuaW5ncywgc3VnZ2VzdGVkVmVyc2lvbjogY2hvaWNlLnN1Z2dlc3RlZFZlcnNpb24gfTtcbn1cblxuLyoqXG4gKiBUaGUgbm9uLWZhdGFsIG5vdGVzIGEgcmVzb2x2ZWQgbGlzdGVkIHZlcnNpb24gY2FycmllcyAobG9va3VwIGFuc3dlcnMsXG4gKiBzeW50aCBwcmludHMgdGhlbSwgdGhlIGluc3RhbGxzIHZpZXcgc2hvd3MgdGhlbSk6IGFuIHVubWFpbnRhaW5lZCBsaXN0aW5nLCBhXG4gKiBkZXByZWNhdGVkIHZlcnNpb24sIGEgUFVCTElTSEVEIGFkdmlzb3J5IGNvdmVyaW5nIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIG9yZydzXG4gKiBgYmxvY2tPbkFkdmlzb3J5YCBkb2Vzbid0IGJsb2NrIChhIGJsb2NraW5nIG9uZSByZWZ1c2VzIHJlc29sdXRpb24gaW5zdGVhZCksXG4gKiBhbmQgd2l0aGhlbGQgc2VjcmV0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RlZFZlcnNpb25XYXJuaW5ncyhpbnB1dDoge1xuICBwdWJsaXNoZXI6IFBpY2s8UHVibGlzaGVyLCAnaGFuZGxlJyB8ICd0aWVyJz47XG4gIGxpc3Rpbmc6IFBpY2s8UGx1Z2luTGlzdGluZywgJ25hbWUnIHwgJ3N0YXRlJz47XG4gIHZlcnNpb246IFBpY2s8UGx1Z2luTGlzdGluZ1ZlcnNpb24sICd2ZXJzaW9uJyB8ICdkZXByZWNhdGVkQXQnIHwgJ2RlcHJlY2F0aW9uTWVzc2FnZScgfCAnc3BlY1NuYXBzaG90Jz5cbiAgICAmIFBhcnRpYWw8UGljazxQbHVnaW5MaXN0aW5nVmVyc2lvbiwgJ3NjYW5GbGFnZ2VkQXQnIHwgJ3NjYW5GbGFnJz4+O1xuICBhZHZpc29yaWVzOiByZWFkb25seSBQaWNrPFBsdWdpbkFkdmlzb3J5LCAnc2V2ZXJpdHknIHwgJ3N0YXRlJyB8ICdhZmZlY3RlZFJhbmdlJyB8ICdmaXhlZFZlcnNpb24nIHwgJ3N1bW1hcnknPltdO1xuICBwb2xpY3k6IFBpY2s8Q29uc3VtcHRpb25Qb2xpY3ksICdzZWNyZXRzQWxsb3dlZFRpZXJzJz47XG59KTogeyB3YXJuaW5nczogUmVzb2x1dGlvbldhcm5pbmdbXTsgc2VjcmV0c1dpdGhoZWxkOiBib29sZWFuIH0ge1xuICBjb25zdCB7IHB1Ymxpc2hlciwgbGlzdGluZywgdmVyc2lvbiwgYWR2aXNvcmllcywgcG9saWN5IH0gPSBpbnB1dDtcbiAgY29uc3QgcmVmID0gYCR7cHVibGlzaGVyLmhhbmRsZX0vJHtsaXN0aW5nLm5hbWV9YDtcbiAgY29uc3QgZGVjbGFyZXNTZWNyZXRzID0gKHZlcnNpb24uc3BlY1NuYXBzaG90Py5zZWNyZXRzID8/IFtdKS5sZW5ndGggPiAwO1xuICBjb25zdCBzZWNyZXRzV2l0aGhlbGQgPSBkZWNsYXJlc1NlY3JldHMgJiYgIXBvbGljeS5zZWNyZXRzQWxsb3dlZFRpZXJzLmluY2x1ZGVzKHB1Ymxpc2hlci50aWVyKTtcbiAgY29uc3Qgd2FybmluZ3M6IFJlc29sdXRpb25XYXJuaW5nW10gPSBbXTtcbiAgaWYgKGxpc3Rpbmcuc3RhdGUgPT09ICd1bm1haW50YWluZWQnKSB7XG4gICAgd2FybmluZ3MucHVzaCh7IGNvZGU6ICdMSVNUSU5HX1VOTUFJTlRBSU5FRCcsIG1lc3NhZ2U6IGAke3JlZn0gaXMgdW5tYWludGFpbmVkOiBpdCByZWNlaXZlcyBubyB1cGRhdGVzLiBQbGFuIGEgcmVwbGFjZW1lbnQuYCB9KTtcbiAgfVxuICBpZiAodmVyc2lvbi5kZXByZWNhdGVkQXQpIHtcbiAgICB3YXJuaW5ncy5wdXNoKHsgY29kZTogJ1BMVUdJTl9ERVBSRUNBVEVEJywgbWVzc2FnZTogYCR7cmVmfUAke3ZlcnNpb24udmVyc2lvbn0gaXMgZGVwcmVjYXRlZCR7dmVyc2lvbi5kZXByZWNhdGlvbk1lc3NhZ2UgPyBgOiAke3ZlcnNpb24uZGVwcmVjYXRpb25NZXNzYWdlfWAgOiAnJ30uYCB9KTtcbiAgfVxuICBmb3IgKGNvbnN0IGEgb2YgYWR2aXNvcmllc0NvdmVyaW5nKGFkdmlzb3JpZXMsIHZlcnNpb24udmVyc2lvbikpIHtcbiAgICB3YXJuaW5ncy5wdXNoKHtcbiAgICAgIGNvZGU6ICdQTFVHSU5fQURWSVNPUlknLFxuICAgICAgbWVzc2FnZTogYCR7cmVmfUAke3ZlcnNpb24udmVyc2lvbn0gaXMgYWZmZWN0ZWQgYnkgYSAke2Euc2V2ZXJpdHl9IHNlY3VyaXR5IGFkdmlzb3J5OiAke2Euc3VtbWFyeX1gXG4gICAgICAgICsgYCR7YS5maXhlZFZlcnNpb24gPyBgIEZpeGVkIGluICR7YS5maXhlZFZlcnNpb259LmAgOiAnJ31gLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IGZsYWcgPSB2ZXJzaW9uLnNjYW5GbGFnZ2VkQXQgPyBhc1NjYW5GbGFnKHZlcnNpb24uc2NhbkZsYWcpIDogbnVsbDtcbiAgaWYgKGZsYWcpIHdhcm5pbmdzLnB1c2godnVsbkZsYWdnZWRXYXJuaW5nKHJlZiwgdmVyc2lvbi52ZXJzaW9uLCBmbGFnKSk7XG4gIGlmIChzZWNyZXRzV2l0aGhlbGQpIHtcbiAgICB3YXJuaW5ncy5wdXNoKHsgY29kZTogJ1BMVUdJTl9TRUNSRVRTX1dJVEhIRUxEJywgbWVzc2FnZTogYCR7cmVmfSBpcyBhICR7cHVibGlzaGVyLnRpZXJ9IHBsdWdpbjsgeW91ciBvcmdhbml6YXRpb24ncyBwb2xpY3kgZ2l2ZXMgaXQgbm8gc2VjcmV0cywgc28gaXRzIGRlY2xhcmVkIHNlY3JldHMgYXJlIG5vdCBpbmplY3RlZC5gIH0pO1xuICB9XG4gIHJldHVybiB7IHdhcm5pbmdzLCBzZWNyZXRzV2l0aGhlbGQgfTtcbn1cblxuLyoqXG4gKiBUaGUgcGx1Z2luIHJlY29yZCBhIHJlc29sdmVkIGxpc3RpbmcgdmVyc2lvbiBydW5zIGFzIOKAlCB0aGUgc2hhcGUgc3ludGggYW5kXG4gKiB0aGUgY29udHJhY3QgY2hlY2sgcmVhZCAoYSBgcGx1Z2luc2Agcm93J3MgcnVuIGZpZWxkcyksIGJ1aWx0IGZyb20gdGhlXG4gKiB2ZXJzaW9uJ3MgZnJvemVuIHNwZWMgc25hcHNob3QuIGBpZGAgaXMgdGhlIExJU1RJTkcgVkVSU0lPTidzIGlkICh0aGUgc3RlcFxuICogbWFuaWZlc3QgcmVzb2x2ZXMgaXQgYmFjayksIGBpbWFnZVJlcG9zaXRvcnlgIGl0cyBgcHVibGljLypgIGNvcHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0ZWRQbHVnaW5SZWNvcmQocmVzOiBMaXN0aW5nUmVzb2x2ZWQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IHsgcHVibGlzaGVyLCBsaXN0aW5nLCB2ZXJzaW9uLCBtb2RlIH0gPSByZXM7XG4gIGNvbnN0IHMgPSAodmVyc2lvbi5zcGVjU25hcHNob3QgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBhcnIgPSA8VD4odjogdW5rbm93bik6IFRbXSA9PiAoQXJyYXkuaXNBcnJheSh2KSA/IHYgYXMgVFtdIDogW10pO1xuICBjb25zdCBvYmogPSAodjogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+ICh2ICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2KSA/IHYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gOiB7fSk7XG4gIHJldHVybiB7XG4gICAgaWQ6IHZlcnNpb24uaWQsXG4gICAgc291cmNlOiAnbGlzdGluZycsXG4gICAgcHVibGlzaGVyOiBwdWJsaXNoZXIuaGFuZGxlLFxuICAgIHB1Ymxpc2hlclRpZXI6IHB1Ymxpc2hlci50aWVyLFxuICAgIGxpc3RpbmdJZDogbGlzdGluZy5pZCxcbiAgICBpbnN0YWxsOiBtb2RlLmtpbmQsXG4gICAgbmFtZTogbGlzdGluZy5uYW1lLFxuICAgIHZlcnNpb246IHZlcnNpb24udmVyc2lvbixcbiAgICBpbWFnZVJlcG9zaXRvcnk6IHZlcnNpb24uaW1hZ2VSZXBvc2l0b3J5LFxuICAgIGltYWdlRGlnZXN0OiB2ZXJzaW9uLmltYWdlRGlnZXN0LFxuICAgIGJ1aWxkVHlwZTogdHlwZW9mIHMuYnVpbGRUeXBlID09PSAnc3RyaW5nJyA/IHMuYnVpbGRUeXBlIDogKHZlcnNpb24uaW1hZ2VEaWdlc3QgPyAnYnVpbGRfaW1hZ2UnIDogJ21ldGFkYXRhX29ubHknKSxcbiAgICBwbHVnaW5UeXBlOiBzLnBsdWdpblR5cGUgPz8gJ0NvZGVCdWlsZFN0ZXAnLFxuICAgIGNvbXB1dGVUeXBlOiBzLmNvbXB1dGVUeXBlID8/ICdTTUFMTCcsXG4gICAgZGVzY3JpcHRpb246IHMuZGVzY3JpcHRpb24gPz8gbGlzdGluZy5kZXNjcmlwdGlvbiA/PyBudWxsLFxuICAgIHN1bW1hcnk6IHMuc3VtbWFyeSA/PyBsaXN0aW5nLnN1bW1hcnkgPz8gbnVsbCxcbiAgICBkaXNwbGF5TmFtZTogcy5kaXNwbGF5TmFtZSA/PyBudWxsLFxuICAgIGtleXdvcmRzOiBhcnI8c3RyaW5nPihzLmtleXdvcmRzKSxcbiAgICBjYXRlZ29yeTogcy5jYXRlZ29yeSA/PyBsaXN0aW5nLmNhdGVnb3J5LFxuICAgIG1ldGFkYXRhOiBvYmoocy5tZXRhZGF0YSksXG4gICAgZW52OiBvYmoocy5lbnYpLFxuICAgIGJ1aWxkQXJnczoge30sXG4gICAgaW5zdGFsbENvbW1hbmRzOiBhcnI8c3RyaW5nPihzLmluc3RhbGxDb21tYW5kcyksXG4gICAgY29tbWFuZHM6IGFycjxzdHJpbmc+KHMuY29tbWFuZHMpLFxuICAgIHRpbWVvdXQ6IHMudGltZW91dCA/PyBudWxsLFxuICAgIGZhaWx1cmVCZWhhdmlvcjogcy5mYWlsdXJlQmVoYXZpb3IgPz8gJ2ZhaWwnLFxuICAgIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6IHMucHJpbWFyeU91dHB1dERpcmVjdG9yeSA/PyBudWxsLFxuICAgIHNlY3JldHM6IHJlcy5zZWNyZXRzV2l0aGhlbGQgPyBbXSA6IGFycihzLnNlY3JldHMpLFxuICAgIHJlcXVpcmVkTWV0YWRhdGE6IGFycjxzdHJpbmc+KHMucmVxdWlyZWRNZXRhZGF0YSksXG4gICAgcmVxdWlyZWRWYXJzOiBhcnI8c3RyaW5nPihzLnJlcXVpcmVkVmFycyksXG4gICAgbWV0YWRhdGFUeXBlczogb2JqKHMubWV0YWRhdGFUeXBlcyksXG4gICAgdmFyc1R5cGVzOiBvYmoocy52YXJzVHlwZXMpLFxuICAgIG5ldHdvcmtFZ3Jlc3M6IGFycjxzdHJpbmc+KHMubmV0d29ya0VncmVzcyksXG4gICAgcnVuQXNSb290OiBzLnJ1bkFzUm9vdCA/PyBudWxsLFxuICAgIGxpY2Vuc2U6IHMubGljZW5zZSA/PyBsaXN0aW5nLmxpY2Vuc2UgPz8gbnVsbCxcbiAgICBob21lcGFnZVVybDogcy5ob21lcGFnZVVybCA/PyBsaXN0aW5nLmhvbWVwYWdlVXJsID8/IG51bGwsXG4gICAgc291cmNlVXJsOiBzLnNvdXJjZVVybCA/PyBsaXN0aW5nLnNvdXJjZVVybCA/PyBudWxsLFxuICAgIGRvY3VtZW50YXRpb25Vcmw6IHMuZG9jdW1lbnRhdGlvblVybCA/PyBudWxsLFxuICAgIGljb246IHMuaWNvbiA/PyBsaXN0aW5nLmljb24gPz8gbnVsbCxcbiAgICBjaGFuZ2Vsb2c6IHZlcnNpb24uY2hhbmdlbG9nLFxuICAgIGJyZWFraW5nOiB2ZXJzaW9uLmJyZWFraW5nLFxuICAgIHZ1bG5Dcml0aWNhbDogdmVyc2lvbi52dWxuQ3JpdGljYWwsXG4gICAgdnVsbkhpZ2g6IHZlcnNpb24udnVsbkhpZ2gsXG4gICAgdnVsbkNyaXRpY2FsRml4YWJsZTogdmVyc2lvbi52dWxuQ3JpdGljYWxGaXhhYmxlLFxuICAgIHZ1bG5IaWdoRml4YWJsZTogdmVyc2lvbi52dWxuSGlnaEZpeGFibGUsXG4gICAgc2Nhbm5lZEF0OiB2ZXJzaW9uLnNjYW5uZWRBdCxcbiAgICBzY2FuRmxhZ2dlZEF0OiB2ZXJzaW9uLnNjYW5GbGFnZ2VkQXQsXG4gICAgc2NhbkZsYWc6IHZlcnNpb24uc2NhbkZsYWcsXG4gICAgc2NhblN1bW1hcnk6IHZlcnNpb24uc2NhblN1bW1hcnksXG4gICAgbGlmZWN5Y2xlOiB2ZXJzaW9uLmRlcHJlY2F0ZWRBdCA/ICdkZXByZWNhdGVkJyA6ICdwcm9kdWN0aW9uJyxcbiAgICBkZXByZWNhdGVkQXQ6IHZlcnNpb24uZGVwcmVjYXRlZEF0LFxuICAgIGRlcHJlY2F0aW9uTWVzc2FnZTogdmVyc2lvbi5kZXByZWNhdGlvbk1lc3NhZ2UsXG4gICAgeWFua2VkQXQ6IG51bGwsXG4gICAgeWFua1JlYXNvbjogbnVsbCxcbiAgICB2aXNpYmlsaXR5OiAncHVibGljJyxcbiAgICBpc0RlZmF1bHQ6IHRydWUsXG4gICAgaXNBY3RpdmU6IHRydWUsXG4gIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFdmVyeXRoaW5nIGFuIG9yZyBjYW4gcmVzb2x2ZSAoY2F0YWxvZywgQUkgc2VsZWN0aW9uLCBwbGFjZWhvbGRlciBndWFyZClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBPbmUgbGlzdGluZyB3aXRoIHRoZSBvcmcncyBzdGFuZGluZyBvbiBpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JnTGlzdGluZ1N0YXRlIHtcbiAgcHVibGlzaGVyOiBQdWJsaXNoZXI7XG4gIGxpc3Rpbmc6IFBsdWdpbkxpc3Rpbmc7XG4gIHZlcnNpb25zOiBQbHVnaW5MaXN0aW5nVmVyc2lvbltdO1xuICAvKiogSG93IHRoZSBvcmcgcmVhY2hlcyBpdCwgb3Igd2h5IGl0IGNhbid0IChub3QgaW5zdGFsbGVkLCBwZW5kaW5nLCDigKYpLiAqL1xuICBtb2RlOiBJbnN0YWxsTW9kZSB8IFJlc29sdXRpb25SZWZ1c2FsO1xuICAvKiogQSBwb2xpY3kgLyBzdGF0ZSBibG9jayAodGllciwgYmxvY2tlZCBsaXN0aW5nLCBzdXNwZW5kZWQpLCBvciBudWxsLiAqL1xuICBibG9jazogTGlzdGluZ0Jsb2NrIHwgbnVsbDtcbiAgLyoqIFdoYXQgYW4gVU5WRVJTSU9ORUQgcmVmZXJlbmNlIHJlc29sdmVzIHRvIHJpZ2h0IG5vdywgb3IgbnVsbC4gKi9cbiAgcmVzb2x2ZWQ6IFBsdWdpbkxpc3RpbmdWZXJzaW9uIHwgbnVsbDtcbiAgLyoqIFdoeSBub3RoaW5nIHJlc29sdmVzLCB3aGVuIHRoZSBvcmcgZG9lcyByZWFjaCB0aGUgbGlzdGluZyAoZS5nLiBhbiBhZHZpc29yeSBibG9jaykuICovXG4gIHJlZnVzYWw6IFJlc29sdXRpb25SZWZ1c2FsIHwgbnVsbDtcbiAgLyoqIFRoZSBsaXN0aW5nJ3MgUFVCTElTSEVEIGFkdmlzb3JpZXMuICovXG4gIGFkdmlzb3JpZXM6IFBsdWdpbkFkdmlzb3J5W107XG4gIC8qKiBUaGUgb3JnJ3Mgb3duIGluc3RhbGwgcm93IGZvciBpdCAoZXhwbGljaXQsIHBvc3NpYmx5IHBlbmRpbmcvZGVuaWVkKS4gKi9cbiAgb3duSW5zdGFsbDogUGx1Z2luSW5zdGFsbCB8IG51bGw7XG4gIC8qKiBUaGUgb3JnJ3MgZWZmZWN0aXZlIGNvbnN1bXB0aW9uIHBvbGljeSAodGhlIHNhbWUgZm9yIGV2ZXJ5IGxpc3RpbmcpLiAqL1xuICBwb2xpY3k6IENvbnN1bXB0aW9uUG9saWN5O1xufVxuXG4vKiogVGhlIG9yZydzIHBvbGljeSArIGluc3RhbGwgcm93cyAob3duIGFuZCByb290KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JnSW5zdGFsbENvbnRleHQge1xuICBwb2xpY3k6IENvbnN1bXB0aW9uUG9saWN5O1xuICBpbnN0YWxsczogUGx1Z2luSW5zdGFsbFtdO1xuICBzY29wZTogUmVzb2x1dGlvblNjb3BlO1xufVxuXG4vKiogTG9hZCB0aGUgb3JnJ3MgcG9saWN5IGFuZCBpbnN0YWxsIHJvd3MuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZE9yZ0luc3RhbGxDb250ZXh0KHNvdXJjZTogTGlzdGluZ0RhdGFTb3VyY2UsIHNjb3BlOiBSZXNvbHV0aW9uU2NvcGUpOiBQcm9taXNlPE9yZ0luc3RhbGxDb250ZXh0PiB7XG4gIGNvbnN0IG9yZ0lkcyA9IHNjb3BlT3JnSWRzKHNjb3BlKTtcbiAgY29uc3QgW3BvbGljaWVzLCBpbnN0YWxsc10gPSBhd2FpdCBQcm9taXNlLmFsbChbc291cmNlLnBvbGljaWVzRm9yT3JncyhvcmdJZHMpLCBzb3VyY2UuaW5zdGFsbHNGb3JPcmdzKG9yZ0lkcyldKTtcbiAgcmV0dXJuIHsgcG9saWN5OiBlZmZlY3RpdmVDb25zdW1wdGlvblBvbGljeShwb2xpY2llcywgb3JnSWRzWzBdISwgb3JnSWRzWzFdKSwgaW5zdGFsbHMsIHNjb3BlIH07XG59XG5cbi8qKlxuICogVGhlIG9yZydzIHN0YW5kaW5nIG9uIGV2ZXJ5IGxpdmUgbGlzdGluZyAob3Igb25seSBgZmlsdGVyYCdzKS4gVXNlZCBieSB0aGVcbiAqIGluLWFwcCBjYXRhbG9nOyB7QGxpbmsgcmVzb2x2YWJsZUxpc3RpbmdzfSBuYXJyb3dzIGl0IHRvIHdoYXQgcmVzb2x2ZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcmdMaXN0aW5nU3RhdGVzKFxuICBzb3VyY2U6IExpc3RpbmdEYXRhU291cmNlLFxuICBzY29wZTogUmVzb2x1dGlvblNjb3BlLFxuICBmaWx0ZXI6IHsgaWRzPzogc3RyaW5nW107IG5hbWVzPzogc3RyaW5nW10gfSA9IHt9LFxuICBjdHg/OiBPcmdJbnN0YWxsQ29udGV4dCxcbik6IFByb21pc2U8T3JnTGlzdGluZ1N0YXRlW10+IHtcbiAgY29uc3QgY29udGV4dCA9IGN0eCA/PyBhd2FpdCBsb2FkT3JnSW5zdGFsbENvbnRleHQoc291cmNlLCBzY29wZSk7XG4gIGNvbnN0IGxpdmUgPSBhd2FpdCBzb3VyY2UubGl2ZUxpc3RpbmdzKGZpbHRlcik7XG4gIGlmIChsaXZlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICBjb25zdCBpZHMgPSBsaXZlLm1hcCgobCkgPT4gbC5pZCk7XG4gIGNvbnN0IFtwdWJzLCB2ZXJzaW9ucywgYWR2aXNvcmllc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgc291cmNlLnB1Ymxpc2hlcnNCeUlkcyhbLi4ubmV3IFNldChsaXZlLm1hcCgobCkgPT4gbC5wdWJsaXNoZXJJZCkpXSksXG4gICAgc291cmNlLnZlcnNpb25zRm9yTGlzdGluZ3MoaWRzKSxcbiAgICBzb3VyY2UuYWR2aXNvcmllc0Zvckxpc3RpbmdzKGlkcyksXG4gIF0pO1xuICBjb25zdCBieVB1Ymxpc2hlciA9IG5ldyBNYXAocHVicy5tYXAoKHApID0+IFtwLmlkLCBwXSkpO1xuICBjb25zdCBvd24gPSBzY29wZU9yZ0lkcyhzY29wZSlbMF0hO1xuICBjb25zdCBvdXQ6IE9yZ0xpc3RpbmdTdGF0ZVtdID0gW107XG4gIGZvciAoY29uc3QgbGlzdGluZyBvZiBsaXZlKSB7XG4gICAgY29uc3QgcHVibGlzaGVyID0gYnlQdWJsaXNoZXIuZ2V0KGxpc3RpbmcucHVibGlzaGVySWQpO1xuICAgIGlmICghcHVibGlzaGVyKSBjb250aW51ZTtcbiAgICBjb25zdCB2cyA9IHZlcnNpb25zLmZpbHRlcigodikgPT4gdi5saXN0aW5nSWQgPT09IGxpc3RpbmcuaWQpO1xuICAgIGNvbnN0IGJsb2NrID0gbGlzdGluZ0Jsb2NrKGNvbnRleHQucG9saWN5LCBwdWJsaXNoZXIsIGxpc3RpbmcpO1xuICAgIGNvbnN0IG1vZGUgPSBpbnN0YWxsTW9kZUZvcihwdWJsaXNoZXIsIGxpc3RpbmcsIGNvbnRleHQuaW5zdGFsbHMsIGNvbnRleHQucG9saWN5LCBzY29wZSk7XG4gICAgY29uc3QgbGlzdGluZ0Fkdmlzb3JpZXMgPSBhZHZpc29yaWVzLmZpbHRlcigoYSkgPT4gYS5saXN0aW5nSWQgPT09IGxpc3RpbmcuaWQpO1xuICAgIGxldCByZXNvbHZlZDogUGx1Z2luTGlzdGluZ1ZlcnNpb24gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgcmVmdXNhbDogUmVzb2x1dGlvblJlZnVzYWwgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoIWJsb2NrICYmICEoJ2NvZGUnIGluIG1vZGUpKSB7XG4gICAgICBjb25zdCBjaG9pY2UgPSBzZWxlY3RMaXN0aW5nVmVyc2lvbih7XG4gICAgICAgIHJlZjogYCR7cHVibGlzaGVyLmhhbmRsZX0vJHtsaXN0aW5nLm5hbWV9YCwgdmVyc2lvbnM6IHZzLCBtb2RlLCBhZHZpc29yaWVzOiBsaXN0aW5nQWR2aXNvcmllcywgcG9saWN5OiBjb250ZXh0LnBvbGljeSxcbiAgICAgIH0pO1xuICAgICAgaWYgKCd2ZXJzaW9uJyBpbiBjaG9pY2UpIHJlc29sdmVkID0gY2hvaWNlLnZlcnNpb247XG4gICAgICBlbHNlIHJlZnVzYWwgPSBjaG9pY2UucmVmdXNhbDtcbiAgICB9XG4gICAgY29uc3Qgb3duSW5zdGFsbCA9IGNvbnRleHQuaW5zdGFsbHMuZmluZCgoaSkgPT4gaS5saXN0aW5nSWQgPT09IGxpc3RpbmcuaWQgJiYgaS5vcmdJZC50b0xvd2VyQ2FzZSgpID09PSBvd24pID8/IG51bGw7XG4gICAgb3V0LnB1c2goeyBwdWJsaXNoZXIsIGxpc3RpbmcsIHZlcnNpb25zOiB2cywgbW9kZSwgYmxvY2ssIHJlc29sdmVkLCByZWZ1c2FsLCBhZHZpc29yaWVzOiBsaXN0aW5nQWR2aXNvcmllcywgb3duSW5zdGFsbCwgcG9saWN5OiBjb250ZXh0LnBvbGljeSB9KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKiogVGhlIGxpc3RpbmdzIGFuIG9yZydzIHJlZmVyZW5jZXMgcmVzb2x2ZSB0byBub3cgKGluc3RhbGxlZCBvciBpbXBsaWNpdCwgbm90IGJsb2NrZWQpLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmFibGVMaXN0aW5ncyhcbiAgc291cmNlOiBMaXN0aW5nRGF0YVNvdXJjZSxcbiAgc2NvcGU6IFJlc29sdXRpb25TY29wZSxcbiAgZmlsdGVyOiB7IG5hbWVzPzogc3RyaW5nW10gfSA9IHt9LFxuKTogUHJvbWlzZTxBcnJheTxPcmdMaXN0aW5nU3RhdGUgJiB7IHJlc29sdmVkOiBQbHVnaW5MaXN0aW5nVmVyc2lvbiB9Pj4ge1xuICByZXR1cm4gKGF3YWl0IG9yZ0xpc3RpbmdTdGF0ZXMoc291cmNlLCBzY29wZSwgZmlsdGVyKSlcbiAgICAuZmlsdGVyKChzKTogcyBpcyBPcmdMaXN0aW5nU3RhdGUgJiB7IHJlc29sdmVkOiBQbHVnaW5MaXN0aW5nVmVyc2lvbiB9ID0+IHMucmVzb2x2ZWQgIT09IG51bGwpO1xufVxuIl19
@@ -253,10 +253,12 @@ export declare function getUntrackedPipelines(scope: AnalyticsScope): Promise<st
253
253
  * NOW. A Critical that was open last Tuesday and is fixed today is not something to
254
254
  * put in front of a manager, and `fixed_at` is what says so.
255
255
  *
256
- * An ACCEPTED exposure is excluded. Someone with the authority to accept a risk has
257
- * already decided about it in writing, with a reason and a deadline; re-raising it
258
- * weekly is how a report teaches its reader to skip a section. The lapse of that
259
- * acceptance is a separate finding (`lapsedAcceptances`).
256
+ * The SAME live predicate as the vulnerability section (`liveExposurePredicate`):
257
+ * an acceptance still in force and a false positive are excluded — someone with
258
+ * the authority to decide has done so in writing — while an acceptance PAST its
259
+ * deadline counts again, because that is what the deadline was for. The two
260
+ * readers once disagreed (this one kept false positives and dropped expired
261
+ * acceptances), so the panel and the needs-attention list contradicted each other.
260
262
  */
261
263
  export declare function getVulnerablePipelines(scope: AnalyticsScope): Promise<string[]>;
262
264
  /**