@dollhousemcp/mcp-server 2.0.27-rc.7 → 2.0.27-rc.8

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.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Changelog
2
2
 
3
- ## [2.0.27-rc.7] - 2026-04-19
3
+ ## [2.0.27-rc.8] - 2026-04-20
4
4
 
5
5
  - Version bump
6
6
 
@@ -84,6 +84,7 @@ declare const envSchema: z.ZodObject<{
84
84
  DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_JITTER_MS: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
85
85
  DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_FAILURE_THRESHOLD: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
86
86
  DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_FAILURE_COOLDOWN_MS: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
87
+ DOLLHOUSE_CONSOLE_LEADER_DISCOVERY_TIMEOUT_MS: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
87
88
  DOLLHOUSE_CONSOLE_ROTATION_REQUIRE_CONFIRMATION: z.ZodDefault<z.ZodCoercedBoolean<unknown>>;
88
89
  DOLLHOUSE_GATEKEEPER_ENABLED: z.ZodDefault<z.ZodCoercedBoolean<unknown>>;
89
90
  DOLLHOUSE_GATEKEEPER_ELEMENT_POLICY_OVERRIDES: z.ZodDefault<z.ZodCoercedBoolean<unknown>>;
@@ -149,6 +150,7 @@ export declare const env: {
149
150
  DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_JITTER_MS: number;
150
151
  DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_FAILURE_THRESHOLD: number;
151
152
  DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_FAILURE_COOLDOWN_MS: number;
153
+ DOLLHOUSE_CONSOLE_LEADER_DISCOVERY_TIMEOUT_MS: number;
152
154
  DOLLHOUSE_CONSOLE_ROTATION_REQUIRE_CONFIRMATION: boolean;
153
155
  DOLLHOUSE_GATEKEEPER_ENABLED: boolean;
154
156
  DOLLHOUSE_GATEKEEPER_ELEMENT_POLICY_OVERRIDES: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuBxB;;GAEG;AACH,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmSb,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAA+B,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAE5C;;GAEG;AACH,eAAO,MAAM,MAAM,SAA0B,CAAC;AAC9C,eAAO,MAAM,aAAa,SAAiC,CAAC;AAC5D,eAAO,MAAM,YAAY,SAAgC,CAAC"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAuBxB;;GAEG;AACH,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA0Sb,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAA+B,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAE5C;;GAEG;AACH,eAAO,MAAM,MAAM,SAA0B,CAAC;AAC9C,eAAO,MAAM,aAAa,SAAiC,CAAC;AAC5D,eAAO,MAAM,YAAY,SAAgC,CAAC"}
@@ -220,6 +220,12 @@ const envSchema = z.object({
220
220
  * Default: 60000ms.
221
221
  */
222
222
  DOLLHOUSE_CONSOLE_AUTHORITY_RECHECK_FAILURE_COOLDOWN_MS: z.coerce.number().int().min(1_000).max(900_000).default(60_000),
223
+ /**
224
+ * Timeout for leader-discovery HTTP probes against /api/sessions before the
225
+ * caller falls back to lock-file or synthetic-owner heuristics.
226
+ * Default: 2000ms.
227
+ */
228
+ DOLLHOUSE_CONSOLE_LEADER_DISCOVERY_TIMEOUT_MS: z.coerce.number().int().min(250).max(30_000).default(2_000),
223
229
  /**
224
230
  * Issue #1780: Phase 2 — require a confirmation code (OS dialog or TOTP)
225
231
  * for privileged actions like token rotation. Default is true for safety;
@@ -318,4 +324,4 @@ if (isDevelopment || isTest) {
318
324
  HAS_GITHUB_TEST_TOKEN: !!env.GITHUB_TEST_TOKEN,
319
325
  });
320
326
  }
321
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9lbnYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBRUgsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDLGdGQUFnRjtBQUNoRiw2REFBNkQ7QUFDN0QsRUFBRTtBQUNGLDJEQUEyRDtBQUMzRCxzRUFBc0U7QUFDdEUsb0ZBQW9GO0FBQ3BGLGdGQUFnRjtBQUNoRiwyRUFBMkU7QUFDM0UsaUZBQWlGO0FBQ2pGLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztPQUM3QyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7QUFDL0QsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBUSxDQUFDO0FBQ3ZHLElBQUksV0FBVztJQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMs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LENBQUMsUUFBUSxFQUFFO0NBQ3RELENBQUMsQ0FBQztBQUVIOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQU9oRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQztBQUM5QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLFFBQVEsS0FBSyxhQUFhLENBQUM7QUFDNUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDO0FBRTFEOztHQUVHO0FBQ0gsSUFBSSxhQUFhLElBQUksTUFBTSxFQUFFLENBQUM7SUFDNUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRTtRQUNoRCxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7UUFDdEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO1FBQ2QsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1FBQ3hCLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWTtRQUNwQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLGlCQUFpQjtLQUMvQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDZW50cmFsaXplZCBFbnZpcm9ubWVudCBDb25maWd1cmF0aW9uXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdHlwZS1zYWZlIGFjY2VzcyB0byBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCB2YWxpZGF0aW9uLlxuICogQWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyBzaG91bGQgYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGlzIG1vZHVsZSByYXRoZXIgdGhhblxuICogZGlyZWN0bHkgdmlhIHByb2Nlc3MuZW52IHRvIGVuc3VyZSB0eXBlIHNhZmV0eSBhbmQgdmFsaWRhdGlvbi5cbiAqXG4gKiBVc2FnZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGVudiB9IGZyb20gJy4vY29uZmlnL2Vudic7XG4gKiBjb25zdCB0b2tlbiA9IGVudi5HSVRIVUJfVE9LRU47ICAvLyBUeXBlOiBzdHJpbmdcbiAqIGBgYFxuICovXG5cbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGRvdGVudiBmcm9tICdkb3RlbnYnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuLy8gTG9hZCAuZW52IGZpbGVzIHdpdGggcHJpb3JpdHk6IC5lbnYubG9jYWwgKHBlcnNvbmFsKSA+IC5lbnYgKHNoYXJlZCBkZWZhdWx0cylcbi8vIEJvdGggZmlsZXMgYXJlIG9wdGlvbmFsIC0gbm8gZXJyb3IgaWYgZWl0aGVyIGRvZXNuJ3QgZXhpc3Rcbi8vXG4vLyBNQ1AgUHJvdG9jb2wgQ29tcGxpYW5jZTogU3VwcHJlc3MgZG90ZW52J3Mgc3Rkb3V0IG91dHB1dFxuLy8gVGhlIE1DUCBwcm90b2NvbCByZXF1aXJlcyB0aGF0IE9OTFkgSlNPTi1SUEMgbWVzc2FnZXMgZ28gdG8gc3Rkb3V0LlxuLy8gZG90ZW52IG1heSBvdXRwdXQgdmVyc2lvbiBpbmZvIHRvIHN0ZG91dCwgd2hpY2ggYnJlYWtzIENsYXVkZSBEZXNrdG9wIGNvbm5lY3Rpb24uXG4vLyBTb2x1dGlvbjogVGVtcG9yYXJpbHkgcmVkaXJlY3Qgc3Rkb3V0IHRvIHN0ZGVyciBkdXJpbmcgZG90ZW52IGluaXRpYWxpemF0aW9uLlxuLy8gSW4gLS13ZWIgbW9kZSwgc3VwcHJlc3MgYm90aCBzdGRvdXQgQU5EIHN0ZGVyciDigJQgdGhlIHVzZXIgb25seSBuZWVkcyB0aGVcbi8vIGNvbnNvbGUgVVJMIGJhbm5lciwgbm90IGRvdGVudidzIGluamVjdGlvbiBzdW1tYXJ5LiBMb2dzIGdvIHRvIHRoZSB3ZWIgdmlld2VyLlxuY29uc3QgaXNXZWJTaWxlbnQgPSBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0td2ViJylcbiAgJiYgIXByb2Nlc3MuZW52LkRPTExIT1VTRV9ERUJVRyAmJiAhcHJvY2Vzcy5lbnYuRU5BQkxFX0RFQlVHO1xuY29uc3Qgb3JpZ2luYWxTdGRvdXRXcml0ZSA9IHByb2Nlc3Muc3Rkb3V0LndyaXRlLmJpbmQocHJvY2Vzcy5zdGRvdXQpO1xuY29uc3Qgb3JpZ2luYWxTdGRlcnJXcml0ZSA9IHByb2Nlc3Muc3RkZXJyLndyaXRlLmJpbmQocHJvY2Vzcy5zdGRlcnIpO1xucHJvY2Vzcy5zdGRvdXQud3JpdGUgPSAoaXNXZWJTaWxlbnQgPyAoKCkgPT4gdHJ1ZSkgOiBwcm9jZXNzLnN0ZGVyci53cml0ZS5iaW5kKHByb2Nlc3Muc3RkZXJyKSkgYXMgYW55O1xuaWYgKGlzV2ViU2lsZW50KSBwcm9jZXNzLnN0ZGVyci53cml0ZSA9ICgoKSA9PiB0cnVlKSBhcyBhbnk7XG5kb3RlbnYuY29uZmlnKHsgcGF0aDogWycuZW52LmxvY2FsJywgJy5lbnYnXSB9KTtcbnByb2Nlc3Muc3Rkb3V0LndyaXRlID0gb3JpZ2luYWxTdGRvdXRXcml0ZTtcbmlmIChpc1dlYlNpbGVudCkgcHJvY2Vzcy5zdGRlcnIud3JpdGUgPSBvcmlnaW5hbFN0ZGVycldyaXRlO1xuXG4vKipcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlIHNjaGVtYSB3aXRoIHZhbGlkYXRpb25cbiAqL1xuY29uc3QgZW52U2NoZW1hID0gei5vYmplY3Qoe1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVudmlyb25tZW50XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgTk9ERV9FTlY6IHouZW51bShbJ2RldmVsb3BtZW50JywgJ3Rlc3QnLCAncHJvZHVjdGlvbiddKS5kZWZhdWx0KCdkZXZlbG9wbWVudCcpLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUHJvZHVjdGlvbiBHaXRIdWIgQ3JlZGVudGlhbHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVc2VkIGJ5IHByb2R1Y3Rpb24gY29kZSAoc3JjLykgZm9yIHJlYWwgR2l0SHViIG9wZXJhdGlvbnNcbiAgLy8gT3B0aW9uYWw6IEZlYXR1cmVzIHJlcXVpcmluZyBHaXRIdWIgd2lsbCBmYWlsIGdyYWNlZnVsbHkgaWYgbm90IHNldFxuICBHSVRIVUJfVE9LRU46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgR0lUSFVCX1VTRVJOQU1FOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIEdJVEhVQl9SRVBPU0lUT1JZOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBUZXN0IEdpdEh1YiBDcmVkZW50aWFscyAoU0VQQVJBVEUgYWNjb3VudCEpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVXNlZCBieSB0ZXN0IGNvZGUgKHRlc3RzLykgLSB0ZXN0cyB3aWxsIHNraXAgaWYgbm90IHByb3ZpZGVkXG4gIC8vIElNUE9SVEFOVDogVXNlIGEgZGlmZmVyZW50IEdpdEh1YiBhY2NvdW50IGZvciB0ZXN0aW5nIVxuICBHSVRIVUJfVEVTVF9UT0tFTjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBHSVRIVUJfVEVTVF9VU0VSTkFNRTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBHSVRIVUJfVEVTVF9SRVBPU0lUT1JZOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTZXJ2ZXIgQ29uZmlndXJhdGlvblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIFBPUlQ6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMzAwMCksXG4gIExPR19MRVZFTDogei5lbnVtKFsnZXJyb3InLCAnd2FybicsICdpbmZvJywgJ2RlYnVnJ10pLmRlZmF1bHQoJ2luZm8nKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFRlc3QgQ29uZmlndXJhdGlvblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIFRFU1RfQkFTRV9ESVI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgVEVTVF9QRVJTT05BU19ESVI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgVEVTVF9DQUNIRV9ESVI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgVEVTVF9DT05GSUdfRElSOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGZWF0dXJlIEZsYWdzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgRE9MTEhPVVNFX0FVVE9fU1VCTUlUX1RPX0NPTExFQ1RJT046IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgRU5BQkxFX0RFQlVHOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIFRFU1RfVkVSQk9TRV9MT0dHSU5HOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNQ1AgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24gKElzc3VlICMyMzcpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLyoqXG4gICAqIE1DUCBpbnRlcmZhY2UgbW9kZSAtIGNvbnRyb2xzIHdoaWNoIHRvb2wgaW50ZXJmYWNlIGlzIGV4cG9zZWQgdG8gTExNczpcbiAgICogLSAnZGlzY3JldGUnOiB+NDAgaW5kaXZpZHVhbCB0b29scyAobGlzdF9lbGVtZW50cywgY3JlYXRlX2VsZW1lbnQsIGV0Yy4pIC0gfjMsMDAwIHRva2Vuc1xuICAgKiAtICdtY3BhcWwnOiBDb25zb2xpZGF0ZWQgTUNQLUFRTCBpbnRlcmZhY2UgLSB1c2VzIE1DUF9BUUxfRU5EUE9JTlRfTU9ERSBmb3Igc3R5bGVcbiAgICpcbiAgICogRGVmYXVsdDogJ21jcGFxbCcgLSByZWNvbW1lbmRlZCBmb3IgdG9rZW4gZWZmaWNpZW5jeSBhbmQgY2xlYW5lciB0b29sIGRpc2NvdmVyeVxuICAgKi9cbiAgTUNQX0lOVEVSRkFDRV9NT0RFOiB6LmVudW0oWydkaXNjcmV0ZScsICdtY3BhcWwnXSkuZGVmYXVsdCgnbWNwYXFsJyksXG5cbiAgLyoqXG4gICAqIE1DUC1BUUwgZW5kcG9pbnQgbW9kZSAob25seSBhcHBsaWVzIHdoZW4gTUNQX0lOVEVSRkFDRV9NT0RFPSdtY3BhcWwnKTpcbiAgICogLSAnY3J1ZGUnOiA1IENSVURFIHRvb2xzIChDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlLCBFeGVjdXRlKSAtIH40LDMwMCB0b2tlbnNcbiAgICogLSAnc2luZ2xlJzogMSB0b29sIChtY3BfYXFsKSAtIH4zNTAgdG9rZW5zLCBpZGVhbCBmb3IgbXVsdGktc2VydmVyIGRlcGxveW1lbnRzXG4gICAqL1xuICBNQ1BfQVFMX0VORFBPSU5UX01PREU6IHouZW51bShbJ2NydWRlJywgJ3NpbmdsZSddKS5kZWZhdWx0KCdjcnVkZScpLFxuXG4gIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYWxpYXMgZm9yIE1DUF9BUUxfTU9ERSAoZGVwcmVjYXRlZCwgdXNlIE1DUF9BUUxfRU5EUE9JTlRfTU9ERSlcbiAgTUNQX0FRTF9NT0RFOiB6LmVudW0oWydjcnVkZScsICdzaW5nbGUnXSkub3B0aW9uYWwoKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVuaWZpZWQgTG9nZ2luZyBDb25maWd1cmF0aW9uIChkb2NzL0xPR0dJTkctREVTSUdOLm1kKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIERPTExIT1VTRV9MT0dfRElSOiB6LnN0cmluZygpLmRlZmF1bHQoJ34vLmRvbGxob3VzZS9sb2dzLycpLFxuICBET0xMSE9VU0VfTE9HX0ZPUk1BVDogei5lbnVtKFsndGV4dCcsICdqc29ubCddKS5kZWZhdWx0KCd0ZXh0JyksXG4gIERPTExIT1VTRV9MT0dfUkVURU5USU9OX0RBWVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMzApLFxuICBET0xMSE9VU0VfTE9HX1NFQ1VSSVRZX1JFVEVOVElPTl9EQVlTOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDcpLFxuICBET0xMSE9VU0VfTE9HX0ZMVVNIX0lOVEVSVkFMX01TOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDUwMDApLFxuICAvLyBCdWZmZXIgcmFpc2VkIHRvIDIwMDAgdG8gc3VwcG9ydCB0aGUgd2ViIGNvbnNvbGUgbG9nIHZpZXdlciDigJQgdGhlIGhpZ2hlciBjYXBhY2l0eVxuICAvLyByZWR1Y2VzIGZsdXNoIGZyZXF1ZW5jeSBhbmQga2VlcHMgbW9yZSBlbnRyaWVzIGF2YWlsYWJsZSBmb3IgU1NFIGJhY2tmaWxsIG9uIGNvbm5lY3QuXG4gIERPTExIT1VTRV9MT0dfQlVGRkVSX1NJWkU6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMjAwMCksXG4gIERPTExIT1VTRV9MT0dfTUVNT1JZX0NBUEFDSVRZOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDUwMDApLFxuICBET0xMSE9VU0VfTE9HX01FTU9SWV9BUFBfQ0FQQUNJVFk6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTAwMDApLFxuICBET0xMSE9VU0VfTE9HX01FTU9SWV9TRUNVUklUWV9DQVBBQ0lUWTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCg1MDAwKSxcbiAgRE9MTEhPVVNFX0xPR19NRU1PUllfUEVSRl9DQVBBQ0lUWTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgyMDAwKSxcbiAgRE9MTEhPVVNFX0xPR19NRU1PUllfVEVMRU1FVFJZX0NBUEFDSVRZOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDEwMDApLFxuICBET0xMSE9VU0VfTE9HX01BWF9FTlRSWV9TSVpFOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDE2Mzg0KSxcbiAgRE9MTEhPVVNFX0xPR19JTU1FRElBVEVfRkxVU0hfUkFURTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCg1MCksXG4gIERPTExIT1VTRV9MT0dfRklMRV9NQVhfU0laRTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgxMDQ4NTc2MDApLFxuICBET0xMSE9VU0VfTE9HX01BWF9ESVJfU0laRV9CWVRFUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgwKSxcbiAgRE9MTEhPVVNFX0xPR19NQVhfRklMRVNfUEVSX0NBVEVHT1JZOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDEwMCksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQZXJtaXNzaW9uIFNlcnZlciBDb25maWd1cmF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLyoqXG4gICAqIEVuYWJsZSB0aGUgSFRUUCBwZXJtaXNzaW9uIGV2YWx1YXRpb24gc2VydmVyIGZvciBQcmVUb29sVXNlIGhvb2tzLlxuICAgKiBXaGVuIHRydWUsIHN0YXJ0cyBhbiBIVFRQIGVuZHBvaW50IG9uIGEgZHluYW1pYyBwb3J0IGFmdGVyIGRlZmVycmVkXG4gICAqIHNldHVwIGNvbXBsZXRlcy4gV3JpdGVzIHBvcnQgdG8gfi8uZG9sbGhvdXNlL3J1bi9wZXJtaXNzaW9uLXNlcnZlci5wb3J0XG4gICAqIGZvciBob29rIHNjcmlwdCBkaXNjb3ZlcnkuIFJlcXVpcmVkIGZvciBhdXRvbm9tb3VzIGFnZW50IHBlcm1pc3Npb25cbiAgICogbWFuYWdlbWVudCB2aWEgQ2xhdWRlIENvZGUgaG9va3MuXG4gICAqL1xuICBET0xMSE9VU0VfUEVSTUlTU0lPTl9TRVJWRVI6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuXG4gIC8vIFdlYiBDb25zb2xlIENvbmZpZ3VyYXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKiogRW5hYmxlIHRoZSB1bmlmaWVkIHdlYiBjb25zb2xlIChsb2dzICsgbWV0cmljcyB0YWJzKSAqL1xuICBET0xMSE9VU0VfV0VCX0NPTlNPTEU6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuXG4gIC8qKlxuICAgKiBQb3J0IHRoZSB3ZWIgY29uc29sZSBsZWFkZXIgYmluZHMgdG8gKCMxNzk0LCAjMTc5OCkuXG4gICAqXG4gICAqIERlZmF1bHQ6IDQxNzE1IOKAlCBcIkFJTElTXCIgb24gYSBwaG9uZSBrZXlwYWQsIGFmdGVyIHRoZSBBSSBMYXllclxuICAgKiBJbnRlcmZhY2UgU3BlY2lmaWNhdGlvbiB0aGF0IERvbGxob3VzZU1DUCBpbXBsZW1lbnRzLiBBbHNvIFwiQWxpY2VcIlxuICAgKiBpbiBHYWVsaWMuXG4gICAqXG4gICAqIFBvcnQgc2VsZWN0aW9uIGNyaXRlcmlhICh2ZXJpZmllZCAyMDI2LTA0LTA2KTpcbiAgICogICAtIE5vdCByZWdpc3RlcmVkIHdpdGggSUFOQSAobm8gZW50cnkgaW4gdGhlIHNlcnZpY2UgbmFtZSByZWdpc3RyeSlcbiAgICogICAtIE5vdCBpbiBubWFwIHNlcnZpY2VzIGRhdGFiYXNlIChuZXZlciBvYnNlcnZlZCBpbiB0aGUgd2lsZClcbiAgICogICAtIE5vIGtub3duIGFwcGxpY2F0aW9uLCBzZWN1cml0eSB0b29sLCBvciBtYWx3YXJlIGFzc29jaWF0aW9uc1xuICAgKiAgIC0gQmVsb3cgdGhlIG1hY09TIGVwaGVtZXJhbCByYW5nZSAoNDkxNTItNjU1MzUpLCBzbyBgYmluZCgpYFxuICAgKiAgICAgZG9lcyBub3QgcmFjZSB3aXRoIGtlcm5lbC1hbGxvY2F0ZWQgc291cmNlIHBvcnRzXG4gICAqICAgLSBJbiB0aGUgSUFOQSB1c2VyIHBvcnQgcmFuZ2UgKDEwMjQtNDkxNTEpXG4gICAqICAgLSBOb3QgYWRqYWNlbnQgdG8gdGhlIHByZS1hdXRoZW50aWNhdGlvbiBkZWZhdWx0ICgzOTM5KVxuICAgKlxuICAgKiBQcmV2aW91cyBkZWZhdWx0IHdhcyA1OTA3IChcIkxPR1NcIiB1cHNpZGUgZG93biBvbiBhIGNhbGN1bGF0b3IpLFxuICAgKiB3aGljaCBjb25mbGljdGVkIHdpdGggU3RlbGxhciBDeWJlcidzIEhUVFAgR0tFIGxvZyBwYXJzZXIuXG4gICAqXG4gICAqIE92ZXJyaWRlIHZpYSBlbnYgdmFyIGlmIDQxNzE1IGNvbGxpZGVzIHdpdGggc29tZXRoaW5nIGluIHlvdXJcbiAgICogZW52aXJvbm1lbnQg4oCUIGV2ZXJ5IHJ1bnRpbWUgcmVmZXJlbmNlIHJlYWRzIGZyb20gdGhpcyBzaW5nbGUgdmFsdWUuXG4gICAqL1xuICBET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVDogei5jb2VyY2UubnVtYmVyKCkuaW50KCkubWluKDEwMjQpLm1heCg2NTUzNSkuZGVmYXVsdCg0MTcxNSksXG5cbiAgLyoqXG4gICAqIElzc3VlICMxNzgwOiBFbmZvcmNlIEJlYXJlciB0b2tlbiBhdXRoZW50aWNhdGlvbiBvbiB0aGUgd2ViIGNvbnNvbGUgQVBJLlxuICAgKiBXaGVuIHRydWUsIGFsbCBwcm90ZWN0ZWQgZW5kcG9pbnRzIHJlcXVpcmUgYSB2YWxpZCB0b2tlbiBmcm9tIHRoZVxuICAgKiBjb25zb2xlIHRva2VuIGZpbGUuIFdoZW4gZmFsc2UgKHRoZSBwcmUtUGhhc2UtMiBkZWZhdWx0KSwgdGhlIHRva2VuXG4gICAqIGZpbGUgaXMgc3RpbGwgZ2VuZXJhdGVkIGJ1dCB0aGUgbWlkZGxld2FyZSBkb2VzIG5vdCBlbmZvcmNlIOKAlCB0aGlzXG4gICAqIGxldHMgdGhlIGluZnJhc3RydWN0dXJlIGxhbmQgd2l0aG91dCBicmVha2luZyBleGlzdGluZyBjb25zdW1lcnMuXG4gICAqIFdpbGwgZmxpcCB0byBkZWZhdWx0IGB0cnVlYCBpbiBhIGZvbGxvdy11cCBQUiBvbmNlIGFsbCBjb25zdW1lcnNcbiAgICogKGJyb3dzZXIsIGZvbGxvd2VycywgYnJpZGdlKSBoYXZlIGJlZW4gdXBkYXRlZCB0byBhdHRhY2ggdG9rZW5zLlxuICAgKi9cbiAgRE9MTEhPVVNFX1dFQl9BVVRIX0VOQUJMRUQ6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcblxuICAvKipcbiAgICogSXNzdWUgIzE3ODA6IE9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgY29uc29sZSB0b2tlbiBmaWxlIGxvY2F0aW9uLlxuICAgKiBXaGVuIHVuc2V0LCBgQ29uc29sZVRva2VuU3RvcmVgIGZhbGxzIGJhY2sgdG8gaXRzIGJ1aWx0LWluIGRlZmF1bHRcbiAgICogdW5kZXIgYH4vLmRvbGxob3VzZS9ydW4vYC4gTWFpbmx5IHVzZWZ1bCBmb3IgdGVzdHMgYW5kIGZvciBlbnRlcnByaXNlXG4gICAqIGRlcGxveW1lbnRzIHRoYXQgbW91bnQgYSBzaGFyZWQgdG9rZW4gZmlsZSBmcm9tIGEgc2VjcmV0cyB2b2x1bWUuXG4gICAqL1xuICBET0xMSE9VU0VfQ09OU09MRV9UT0tFTl9GSUxFOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgY29uc29sZSBsZWFkZXIgbG9jayBmaWxlIGxvY2F0aW9uICgjMTc5NCkuXG4gICAqIFdoZW4gdW5zZXQsIGBMZWFkZXJFbGVjdGlvbmAgZmFsbHMgYmFjayB0byBpdHMgYnVpbHQtaW4gZGVmYXVsdCB1bmRlclxuICAgKiBgfi8uZG9sbGhvdXNlL3J1bi9gLiBQcmltYXJpbHkgdXNlZnVsIGZvciB0ZXN0cyB0aGF0IG5lZWQgaXNvbGF0aW9uXG4gICAqIGJldHdlZW4gcnVucyBhbmQgZm9yIGRlcGxveW1lbnRzIHRoYXQgc3BsaXQgcnVudGltZSBzdGF0ZSBhY3Jvc3NcbiAgICogbXVsdGlwbGUgaW5zdGFsbGF0aW9ucyBvbiB0aGUgc2FtZSBtYWNoaW5lLlxuICAgKi9cbiAgRE9MTEhPVVNFX0NPTlNPTEVfTEVBREVSX0xPQ0tfRklMRTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuXG4gIC8vIExlYWRlci9Gb2xsb3dlciBSZWNvdmVyeSAoIzE4NTApXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogSXNzdWUgIzE4NTA6IFJldHJ5IGRlbGF5cyAoaW4gbXMpIHdoZW4gdGhlIGxlYWRlciBmYWlscyB0byBiaW5kIHRoZSBjb25zb2xlXG4gICAqIHBvcnQgZHVlIHRvIEVBRERSSU5VU0UuIEVhY2ggdmFsdWUgaXMgYSBzdWNjZXNzaXZlIGJhY2tvZmYgZGVsYXkuXG4gICAqIERlZmF1bHQ6IDFzLCAycywgNHMgKDdzIHRvdGFsKS4gSW5jcmVhc2UgZm9yIHNsb3cgb3IgcmVtb3RlIGVudmlyb25tZW50cy5cbiAgICovXG4gIERPTExIT1VTRV9DT05TT0xFX0JJTkRfUkVUUllfREVMQVlTOiB6LnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAudHJhbnNmb3JtKHYgPT4gdiA/IHYuc3BsaXQoJywnKS5tYXAoTnVtYmVyKS5maWx0ZXIobiA9PiAhTnVtYmVyLmlzTmFOKG4pICYmIG4gPiAwKSA6IHVuZGVmaW5lZCksXG5cbiAgLyoqXG4gICAqIElzc3VlICMxODUwOiBOdW1iZXIgb2YgY29uc2VjdXRpdmUgZm9yd2FyZGluZyBmYWlsdXJlcyBiZWZvcmUgYSBmb2xsb3dlclxuICAgKiBkZWNsYXJlcyB0aGUgbGVhZGVyIGRlYWQgYW5kIGF0dGVtcHRzIHNlbGYtcHJvbW90aW9uLiBIaWdoZXIgdmFsdWVzIHJlZHVjZVxuICAgKiBmYWxzZSBwb3NpdGl2ZXMgaW4gaGlnaC1sYXRlbmN5IGVudmlyb25tZW50cyBidXQgZGVsYXkgcmVjb3ZlcnkuXG4gICAqIERlZmF1bHQ6IDEwLlxuICAgKi9cbiAgRE9MTEhPVVNFX0NPTlNPTEVfTUFYX0ZPUldBUkRfRkFJTFVSRVM6IHouY29lcmNlLm51bWJlcigpLmludCgpLm1pbigxKS5tYXgoMTAwKS5kZWZhdWx0KDEwKSxcblxuICAvKipcbiAgICogSG93IG9mdGVuIGEgZm9sbG93ZXIgcmUtZXZhbHVhdGVzIHdoZXRoZXIgaXQgc2hvdWxkIHRha2Ugb3ZlciBjb25zb2xlXG4gICAqIGxlYWRlcnNoaXAgaW4gYSBoZXRlcm9nZW5lb3VzIG1peGVkLXZlcnNpb24gZW52aXJvbm1lbnQuXG4gICAqIERlZmF1bHQ6IDE1MDAwbXMuXG4gICAqL1xuICBET0xMSE9VU0VfQ09OU09MRV9BVVRIT1JJVFlfUkVDSEVDS19NUzogei5jb2VyY2UubnVtYmVyKCkuaW50KCkubWluKDFfMDAwKS5tYXgoMzAwXzAwMCkuZGVmYXVsdCgxNV8wMDApLFxuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHBlci1zZXNzaW9uIGppdHRlciBhZGRlZCB0byBhdXRob3JpdHkgcmVjaGVja3Mgc28gbGFyZ2UgbWl4ZWRcbiAgICogZmxlZXRzIGRvIG5vdCBhbGwgd2FrZSB1cCBpbiB0aGUgc2FtZSBpbnN0YW50LlxuICAgKiBEZWZhdWx0OiA1MDAwbXMuXG4gICAqL1xuICBET0xMSE9VU0VfQ09OU09MRV9BVVRIT1JJVFlfUkVDSEVDS19KSVRURVJfTVM6IHouY29lcmNlLm51bWJlcigpLmludCgpLm1pbigwKS5tYXgoNjBfMDAwKS5kZWZhdWx0KDVfMDAwKSxcblxuICAvKipcbiAgICogTnVtYmVyIG9mIGNvbnNlY3V0aXZlIGF1dGhvcml0eSByZWNoZWNrIGZhaWx1cmVzIGJlZm9yZSB0aGUgZm9sbG93ZXIgb3BlbnNcbiAgICogaXRzIGxvY2FsIGNpcmN1aXQgYnJlYWtlciBhbmQgc3RvcHMgcmV0cnlpbmcgdW50aWwgdGhlIGNvb2xkb3duIGV4cGlyZXMuXG4gICAqIERlZmF1bHQ6IDMuXG4gICAqL1xuICBET0xMSE9VU0VfQ09OU09MRV9BVVRIT1JJVFlfUkVDSEVDS19GQUlMVVJFX1RIUkVTSE9MRDogei5jb2VyY2UubnVtYmVyKCkuaW50KCkubWluKDEpLm1heCgxMDApLmRlZmF1bHQoMyksXG5cbiAgLyoqXG4gICAqIENvb2xkb3duIHBlcmlvZCBhZnRlciB0aGUgZm9sbG93ZXIgYXV0aG9yaXR5IG1vbml0b3Igb3BlbnMgaXRzIGNpcmN1aXRcbiAgICogYnJlYWtlciBkdWUgdG8gcmVwZWF0ZWQgZmFpbHVyZXMuXG4gICAqIERlZmF1bHQ6IDYwMDAwbXMuXG4gICAqL1xuICBET0xMSE9VU0VfQ09OU09MRV9BVVRIT1JJVFlfUkVDSEVDS19GQUlMVVJFX0NPT0xET1dOX01TOiB6LmNvZXJjZS5udW1iZXIoKS5pbnQoKS5taW4oMV8wMDApLm1heCg5MDBfMDAwKS5kZWZhdWx0KDYwXzAwMCksXG5cbiAgLyoqXG4gICAqIElzc3VlICMxNzgwOiBQaGFzZSAyIOKAlCByZXF1aXJlIGEgY29uZmlybWF0aW9uIGNvZGUgKE9TIGRpYWxvZyBvciBUT1RQKVxuICAgKiBmb3IgcHJpdmlsZWdlZCBhY3Rpb25zIGxpa2UgdG9rZW4gcm90YXRpb24uIERlZmF1bHQgaXMgdHJ1ZSBmb3Igc2FmZXR5O1xuICAgKiBzZXQgdG8gZmFsc2UgZm9yIGhlYWRsZXNzIENJIGFuZCBzY3JpcHRlZCBkZXBsb3ltZW50cyB0aGF0IG5lZWQgdG8gcm90YXRlXG4gICAqIHdpdGhvdXQgaHVtYW4gaW50ZXJhY3Rpb24uXG4gICAqL1xuICBET0xMSE9VU0VfQ09OU09MRV9ST1RBVElPTl9SRVFVSVJFX0NPTkZJUk1BVElPTjogei5jb2VyY2UuYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTZWN1cml0eSBDb25maWd1cmF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLyoqXG4gICAqIElzc3VlICM0NTI6IEdhdGVrZWVwZXIgcG9saWN5IGVuZm9yY2VtZW50LlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhbGwgTUNQLUFRTCBvcGVyYXRpb25zIGdvIHRocm91Z2ggdGhlIDQtbGF5ZXIgR2F0ZWtlZXBlclxuICAgKiBlbmZvcmNlKCkgcGlwZWxpbmUuIFdoZW4gZmFsc2UsIGZhbGxzIGJhY2sgdG8gcm91dGUgdmFsaWRhdGlvbiBvbmx5LlxuICAgKiBUaGlzIGlzIGEgdXNlci9vcGVyYXRvciBzZXR0aW5nIOKAlCB0aGUgTExNIGNhbm5vdCBieXBhc3MgaXQuXG4gICAqL1xuICBET0xMSE9VU0VfR0FURUtFRVBFUl9FTkFCTEVEOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcbiAgLyoqXG4gICAqIElzc3VlICM2Nzk6IEVsZW1lbnQgcG9saWN5IGxheWVyIGtpbGwgc3dpdGNoLlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBhY3RpdmUgZWxlbWVudCBnYXRla2VlcGVyIHBvbGljaWVzIChhbGxvdy9jb25maXJtL2Rlbnkvc2NvcGVSZXN0cmljdGlvbnMpXG4gICAqIGNhbiBvdmVycmlkZSBkZWZhdWx0IG9wZXJhdGlvbiBwZXJtaXNzaW9uIGxldmVscy4gV2hlbiBmYWxzZSwgTGF5ZXIgMiBvZiBHYXRla2VlcGVyLmVuZm9yY2UoKVxuICAgKiBpcyBieXBhc3NlZCBlbnRpcmVseSDigJQgb25seSByb3V0ZSB2YWxpZGF0aW9uIGFuZCBkZWZhdWx0IHBlcm1pc3Npb24gbGV2ZWxzIGFwcGx5LlxuICAgKiBVc2UgZm9yIGVtZXJnZW5jeSBsb2NrZG93biwgaGFyZGVuZWQgZGVwbG95bWVudHMsIG9yIHBvbGljeSBkZWJ1Z2dpbmcuXG4gICAqIFRoaXMgaXMgYW4gb3BlcmF0b3IvaW5mcmFzdHJ1Y3R1cmUgc2V0dGluZyDigJQgdGhlIExMTSBjYW5ub3QgYnlwYXNzIGl0LlxuICAgKi9cbiAgRE9MTEhPVVNFX0dBVEVLRUVQRVJfRUxFTUVOVF9QT0xJQ1lfT1ZFUlJJREVTOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcbiAgLyoqXG4gICAqIElzc3VlICM3OTk6IFBvbGljeSBleHBvcnQgb3B0LWluIGZsYWcuXG4gICAqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIFBvbGljeUV4cG9ydFNlcnZpY2Ugd3JpdGVzIHRoZSBzZWN1cml0eSBwb2xpY3kgYmx1ZXByaW50IHRvXG4gICAqIH4vLmRvbGxob3VzZS9icmlkZ2UvaW1wb3J0cy9wb2xpY2llcy8gb24gYWN0aXZhdGlvbiBjaGFuZ2VzLiBUaGUgRG9sbGhvdXNlQnJpZGdlXG4gICAqIHBlcm1pc3Npb24tcHJvbXB0IHNlcnZlciB3YXRjaGVzIHRoaXMgZmlsZSB0byBldmFsdWF0ZSBwZXJtaXNzaW9ucyBsb2NhbGx5LlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBwb2xpY3kgZmlsZSBleHBvcnQgZW50aXJlbHkuXG4gICAqL1xuICBET0xMSE9VU0VfUE9MSUNZX0VYUE9SVF9FTkFCTEVEOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFN0b3JhZ2UgTGF5ZXIgQ29uZmlndXJhdGlvblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIERPTExIT1VTRV9TQ0FOX0NPT0xET1dOX01TOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDEwMDApLFxuICBET0xMSE9VU0VfSU5ERVhfREVCT1VOQ0VfTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMjAwMCksXG4gIERPTExIT1VTRV9FTEVNRU5UX0NBQ0hFX1RUTF9NUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgzNjAwMDAwKSxcbiAgRE9MTEhPVVNFX1BBVEhfQ0FDSEVfVFRMX01TOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDM2MDAwMDApLFxuICBET0xMSE9VU0VfVE9PTF9DQUNIRV9UVExfTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoNjAwMDApLFxuICBET0xMSE9VU0VfR0xPQkFMX0NBQ0hFX01FTU9SWV9NQjogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgxNTApLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUGVybWlzc2lvbiBQcm9tcHQgQ29uZmlndXJhdGlvbiAoSXNzdWUgIzYyNSlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKiBNYXhpbXVtIENMSSBhcHByb3ZhbCByZWNvcmRzIGJlZm9yZSBMUlUgZXZpY3Rpb24gKGRlZmF1bHQ6IDUwKSAqL1xuICBET0xMSE9VU0VfQ0xJX0FQUFJPVkFMX01BWDogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCg1MCksXG5cbiAgLyoqIERlZmF1bHQgVFRMIGZvciBDTEkgYXBwcm92YWwgcmVjb3JkcyBpbiBtcyAoZGVmYXVsdDogMzAwMDAwID0gNSBtaW4pICovXG4gIERPTExIT1VTRV9DTElfQVBQUk9WQUxfVFRMX01TOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDMwMF8wMDApLFxuXG4gIC8qKiBQZXJtaXNzaW9uIHByb21wdCByYXRlIGxpbWl0OiBtYXggcmVxdWVzdHMgcGVyIHdpbmRvdyAoZGVmYXVsdDogMTAwKSAqL1xuICBET0xMSE9VU0VfUEVSTUlTU0lPTl9QUk9NUFRfUkFURV9MSU1JVDogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgxMDApLFxuXG4gIC8qKiBDTEkgYXBwcm92YWwgY3JlYXRpb24gcmF0ZSBsaW1pdDogbWF4IHJlcXVlc3RzIHBlciB3aW5kb3cgKGRlZmF1bHQ6IDIwKSAqL1xuICBET0xMSE9VU0VfQ0xJX0FQUFJPVkFMX1JBVEVfTElNSVQ6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMjApLFxuXG4gIC8qKiBSYXRlIGxpbWl0IHdpbmRvdyBpbiBtcyBmb3IgcGVybWlzc2lvbiBwcm9tcHQgYW5kIENMSSBhcHByb3ZhbHMgKGRlZmF1bHQ6IDYwMDAwID0gNjBzKSAqL1xuICBET0xMSE9VU0VfUEVSTUlTU0lPTl9SQVRFX1dJTkRPV19NUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCg2MF8wMDApLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTWV0cmljcyBDb2xsZWN0aW9uIENvbmZpZ3VyYXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBET0xMSE9VU0VfTUVUUklDU19FTkFCTEVEOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcbiAgRE9MTEhPVVNFX01FVFJJQ1NfQ09MTEVDVElPTl9JTlRFUlZBTF9NUzogei5jb2VyY2UubnVtYmVyKCkubWluKDEwMDApLm1heCgzMDAwMDApLmRlZmF1bHQoMTUwMDApLFxuICBET0xMSE9VU0VfTUVUUklDU19NQVhfU05BUFNIT1RfU0laRTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgxMDI0MDApLFxuICBET0xMSE9VU0VfTUVUUklDU19DT0xMRUNUT1JfRkFJTFVSRV9USFJFU0hPTEQ6IHouY29lcmNlLm51bWJlcigpLm1pbigxKS5tYXgoMTAwKS5kZWZhdWx0KDEwKSxcbiAgRE9MTEhPVVNFX01FVFJJQ1NfQ09MTEVDVElPTl9EVVJBVElPTl9XQVJOX01TOiB6LmNvZXJjZS5udW1iZXIoKS5taW4oMTAwKS5tYXgoNjAwMDApLmRlZmF1bHQoNTAwMCksXG4gIERPTExIT1VTRV9NRVRSSUNTX01FTU9SWV9TTkFQU0hPVF9DQVBBQ0lUWTogei5jb2VyY2UubnVtYmVyKCkubWluKDEwKS5tYXgoMTAwMDApLmRlZmF1bHQoMjQwKSxcblxuICAvLyBQYXR0ZXJuIGVuY3J5cHRpb24gc2V0dGluZ3MgZm9yIE1lbW9yeSBTZWN1cml0eSAoSXNzdWUgIzEzMjEpXG4gIERPTExIT1VTRV9ESVNBQkxFX0VOQ1JZUFRJT046IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgRE9MTEhPVVNFX0VOQ1JZUFRJT05fU0VDUkVUOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIERPTExIT1VTRV9FTkNSWVBUSU9OX1NBTFQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblxuICAvLyBUb2tlbiBlbmNyeXB0aW9uIHNlY3JldCAoU0VDLTAxLCAjMTczNSlcbiAgLy8gV2hlbiBzZXQsIHJlcGxhY2VzIHRoZSBwcmVkaWN0YWJsZSBtYWNoaW5lLWRlcml2ZWQgcGFzc3BocmFzZSBmb3IgdG9rZW4gZW5jcnlwdGlvbi5cbiAgLy8gU3Ryb25nbHkgcmVjb21tZW5kZWQgZm9yIGFueSBzaGFyZWQgb3IgbXVsdGktdXNlciBlbnZpcm9ubWVudC5cbiAgLy8gTWluaW11bSAzMiBjaGFyYWN0ZXJzIGVuZm9yY2VkIHRvIHByZXZlbnQgd2VhayBwYXNzcGhyYXNlcy5cbiAgRE9MTEhPVVNFX1RPS0VOX1NFQ1JFVDogei5zdHJpbmcoKS5taW4oMzIpLm9wdGlvbmFsKCksXG59KTtcblxuLyoqXG4gKiBWYWxpZGF0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gKiBUeXBlIGlzIGF1dG9tYXRpY2FsbHkgaW5mZXJyZWQgZnJvbSB0aGUgc2NoZW1hXG4gKi9cbmV4cG9ydCBjb25zdCBlbnYgPSBlbnZTY2hlbWEucGFyc2UocHJvY2Vzcy5lbnYpO1xuXG4vKipcbiAqIEVudmlyb25tZW50IHR5cGUgKGluZmVycmVkIGZyb20gc2NoZW1hKVxuICovXG5leHBvcnQgdHlwZSBFbnYgPSB6LmluZmVyPHR5cGVvZiBlbnZTY2hlbWE+O1xuXG4vKipcbiAqIENvbnZlbmllbmNlIGhlbHBlcnMgZm9yIGVudmlyb25tZW50IGRldGVjdGlvblxuICovXG5leHBvcnQgY29uc3QgaXNUZXN0ID0gZW52Lk5PREVfRU5WID09PSAndGVzdCc7XG5leHBvcnQgY29uc3QgaXNEZXZlbG9wbWVudCA9IGVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JztcbmV4cG9ydCBjb25zdCBpc1Byb2R1Y3Rpb24gPSBlbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJztcblxuLyoqXG4gKiBMb2cgZW52aXJvbm1lbnQgY29uZmlndXJhdGlvbiAod2l0aG91dCBzZWNyZXRzKVxuICovXG5pZiAoaXNEZXZlbG9wbWVudCB8fCBpc1Rlc3QpIHtcbiAgbG9nZ2VyLmRlYnVnKCdFbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGxvYWRlZDonLCB7XG4gICAgTk9ERV9FTlY6IGVudi5OT0RFX0VOVixcbiAgICBQT1JUOiBlbnYuUE9SVCxcbiAgICBMT0dfTEVWRUw6IGVudi5MT0dfTEVWRUwsXG4gICAgSEFTX0dJVEhVQl9UT0tFTjogISFlbnYuR0lUSFVCX1RPS0VOLFxuICAgIEhBU19HSVRIVUJfVEVTVF9UT0tFTjogISFlbnYuR0lUSFVCX1RFU1RfVE9LRU4sXG4gIH0pO1xufVxuIl19
327
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9lbnYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBRUgsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDLGdGQUFnRjtBQUNoRiw2REFBNkQ7QUFDN0QsRUFBRTtBQUNGLDJEQUEyRDtBQUMzRCxzRUFBc0U7QUFDdEUsb0ZBQW9GO0FBQ3BGLGdGQUFnRjtBQUNoRiwyRUFBMkU7QUFDM0UsaUZBQWlGO0FBQ2pGLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztPQUM3QyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7QUFDL0QsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBUSxDQUFDO0FBQ3ZHLElBQUksV0FBVztJQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMs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RSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRWhELDBDQUEwQztJQUMxQyxzRkFBc0Y7SUFDdEYsaUVBQWlFO0lBQ2pFLDhEQUE4RDtJQUM5RCxzQkFBc0IsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUN0RCxDQUFDLENBQUM7QUFFSDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFPaEQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUM7QUFDOUMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEtBQUssYUFBYSxDQUFDO0FBQzVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQztBQUUxRDs7R0FFRztBQUNILElBQUksYUFBYSxJQUFJLE1BQU0sRUFBRSxDQUFDO0lBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUU7UUFDaEQsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1FBQ3RCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNkLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztRQUN4QixnQkFBZ0IsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVk7UUFDcEMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUI7S0FDL0MsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2VudHJhbGl6ZWQgRW52aXJvbm1lbnQgQ29uZmlndXJhdGlvblxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHR5cGUtc2FmZSBhY2Nlc3MgdG8gZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggdmFsaWRhdGlvbi5cbiAqIEFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggdGhpcyBtb2R1bGUgcmF0aGVyIHRoYW5cbiAqIGRpcmVjdGx5IHZpYSBwcm9jZXNzLmVudiB0byBlbnN1cmUgdHlwZSBzYWZldHkgYW5kIHZhbGlkYXRpb24uXG4gKlxuICogVXNhZ2U6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBlbnYgfSBmcm9tICcuL2NvbmZpZy9lbnYnO1xuICogY29uc3QgdG9rZW4gPSBlbnYuR0lUSFVCX1RPS0VOOyAgLy8gVHlwZTogc3RyaW5nXG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCBkb3RlbnYgZnJvbSAnZG90ZW52JztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5cbi8vIExvYWQgLmVudiBmaWxlcyB3aXRoIHByaW9yaXR5OiAuZW52LmxvY2FsIChwZXJzb25hbCkgPiAuZW52IChzaGFyZWQgZGVmYXVsdHMpXG4vLyBCb3RoIGZpbGVzIGFyZSBvcHRpb25hbCAtIG5vIGVycm9yIGlmIGVpdGhlciBkb2Vzbid0IGV4aXN0XG4vL1xuLy8gTUNQIFByb3RvY29sIENvbXBsaWFuY2U6IFN1cHByZXNzIGRvdGVudidzIHN0ZG91dCBvdXRwdXRcbi8vIFRoZSBNQ1AgcHJvdG9jb2wgcmVxdWlyZXMgdGhhdCBPTkxZIEpTT04tUlBDIG1lc3NhZ2VzIGdvIHRvIHN0ZG91dC5cbi8vIGRvdGVudiBtYXkgb3V0cHV0IHZlcnNpb24gaW5mbyB0byBzdGRvdXQsIHdoaWNoIGJyZWFrcyBDbGF1ZGUgRGVza3RvcCBjb25uZWN0aW9uLlxuLy8gU29sdXRpb246IFRlbXBvcmFyaWx5IHJlZGlyZWN0IHN0ZG91dCB0byBzdGRlcnIgZHVyaW5nIGRvdGVudiBpbml0aWFsaXphdGlvbi5cbi8vIEluIC0td2ViIG1vZGUsIHN1cHByZXNzIGJvdGggc3Rkb3V0IEFORCBzdGRlcnIg4oCUIHRoZSB1c2VyIG9ubHkgbmVlZHMgdGhlXG4vLyBjb25zb2xlIFVSTCBiYW5uZXIsIG5vdCBkb3RlbnYncyBpbmplY3Rpb24gc3VtbWFyeS4gTG9ncyBnbyB0byB0aGUgd2ViIHZpZXdlci5cbmNvbnN0IGlzV2ViU2lsZW50ID0gcHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLXdlYicpXG4gICYmICFwcm9jZXNzLmVudi5ET0xMSE9VU0VfREVCVUcgJiYgIXByb2Nlc3MuZW52LkVOQUJMRV9ERUJVRztcbmNvbnN0IG9yaWdpbmFsU3Rkb3V0V3JpdGUgPSBwcm9jZXNzLnN0ZG91dC53cml0ZS5iaW5kKHByb2Nlc3Muc3Rkb3V0KTtcbmNvbnN0IG9yaWdpbmFsU3RkZXJyV3JpdGUgPSBwcm9jZXNzLnN0ZGVyci53cml0ZS5iaW5kKHByb2Nlc3Muc3RkZXJyKTtcbnByb2Nlc3Muc3Rkb3V0LndyaXRlID0gKGlzV2ViU2lsZW50ID8gKCgpID0+IHRydWUpIDogcHJvY2Vzcy5zdGRlcnIud3JpdGUuYmluZChwcm9jZXNzLnN0ZGVycikpIGFzIGFueTtcbmlmIChpc1dlYlNpbGVudCkgcHJvY2Vzcy5zdGRlcnIud3JpdGUgPSAoKCkgPT4gdHJ1ZSkgYXMgYW55O1xuZG90ZW52LmNvbmZpZyh7IHBhdGg6IFsnLmVudi5sb2NhbCcsICcuZW52J10gfSk7XG5wcm9jZXNzLnN0ZG91dC53cml0ZSA9IG9yaWdpbmFsU3Rkb3V0V3JpdGU7XG5pZiAoaXNXZWJTaWxlbnQpIHByb2Nlc3Muc3RkZXJyLndyaXRlID0gb3JpZ2luYWxTdGRlcnJXcml0ZTtcblxuLyoqXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZSBzY2hlbWEgd2l0aCB2YWxpZGF0aW9uXG4gKi9cbmNvbnN0IGVudlNjaGVtYSA9IHoub2JqZWN0KHtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFbnZpcm9ubWVudFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIE5PREVfRU5WOiB6LmVudW0oWydkZXZlbG9wbWVudCcsICd0ZXN0JywgJ3Byb2R1Y3Rpb24nXSkuZGVmYXVsdCgnZGV2ZWxvcG1lbnQnKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFByb2R1Y3Rpb24gR2l0SHViIENyZWRlbnRpYWxzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVXNlZCBieSBwcm9kdWN0aW9uIGNvZGUgKHNyYy8pIGZvciByZWFsIEdpdEh1YiBvcGVyYXRpb25zXG4gIC8vIE9wdGlvbmFsOiBGZWF0dXJlcyByZXF1aXJpbmcgR2l0SHViIHdpbGwgZmFpbCBncmFjZWZ1bGx5IGlmIG5vdCBzZXRcbiAgR0lUSFVCX1RPS0VOOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIEdJVEhVQl9VU0VSTkFNRTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBHSVRIVUJfUkVQT1NJVE9SWTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVGVzdCBHaXRIdWIgQ3JlZGVudGlhbHMgKFNFUEFSQVRFIGFjY291bnQhKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVzZWQgYnkgdGVzdCBjb2RlICh0ZXN0cy8pIC0gdGVzdHMgd2lsbCBza2lwIGlmIG5vdCBwcm92aWRlZFxuICAvLyBJTVBPUlRBTlQ6IFVzZSBhIGRpZmZlcmVudCBHaXRIdWIgYWNjb3VudCBmb3IgdGVzdGluZyFcbiAgR0lUSFVCX1RFU1RfVE9LRU46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgR0lUSFVCX1RFU1RfVVNFUk5BTUU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgR0lUSFVCX1RFU1RfUkVQT1NJVE9SWTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU2VydmVyIENvbmZpZ3VyYXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBQT1JUOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDMwMDApLFxuICBMT0dfTEVWRUw6IHouZW51bShbJ2Vycm9yJywgJ3dhcm4nLCAnaW5mbycsICdkZWJ1ZyddKS5kZWZhdWx0KCdpbmZvJyksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBUZXN0IENvbmZpZ3VyYXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBURVNUX0JBU0VfRElSOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIFRFU1RfUEVSU09OQVNfRElSOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIFRFU1RfQ0FDSEVfRElSOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIFRFU1RfQ09ORklHX0RJUjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRmVhdHVyZSBGbGFnc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIERPTExIT1VTRV9BVVRPX1NVQk1JVF9UT19DT0xMRUNUSU9OOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIEVOQUJMRV9ERUJVRzogei5jb2VyY2UuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBURVNUX1ZFUkJPU0VfTE9HR0lORzogei5jb2VyY2UuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTUNQIEludGVyZmFjZSBDb25maWd1cmF0aW9uIChJc3N1ZSAjMjM3KVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBNQ1AgaW50ZXJmYWNlIG1vZGUgLSBjb250cm9scyB3aGljaCB0b29sIGludGVyZmFjZSBpcyBleHBvc2VkIHRvIExMTXM6XG4gICAqIC0gJ2Rpc2NyZXRlJzogfjQwIGluZGl2aWR1YWwgdG9vbHMgKGxpc3RfZWxlbWVudHMsIGNyZWF0ZV9lbGVtZW50LCBldGMuKSAtIH4zLDAwMCB0b2tlbnNcbiAgICogLSAnbWNwYXFsJzogQ29uc29saWRhdGVkIE1DUC1BUUwgaW50ZXJmYWNlIC0gdXNlcyBNQ1BfQVFMX0VORFBPSU5UX01PREUgZm9yIHN0eWxlXG4gICAqXG4gICAqIERlZmF1bHQ6ICdtY3BhcWwnIC0gcmVjb21tZW5kZWQgZm9yIHRva2VuIGVmZmljaWVuY3kgYW5kIGNsZWFuZXIgdG9vbCBkaXNjb3ZlcnlcbiAgICovXG4gIE1DUF9JTlRFUkZBQ0VfTU9ERTogei5lbnVtKFsnZGlzY3JldGUnLCAnbWNwYXFsJ10pLmRlZmF1bHQoJ21jcGFxbCcpLFxuXG4gIC8qKlxuICAgKiBNQ1AtQVFMIGVuZHBvaW50IG1vZGUgKG9ubHkgYXBwbGllcyB3aGVuIE1DUF9JTlRFUkZBQ0VfTU9ERT0nbWNwYXFsJyk6XG4gICAqIC0gJ2NydWRlJzogNSBDUlVERSB0b29scyAoQ3JlYXRlLCBSZWFkLCBVcGRhdGUsIERlbGV0ZSwgRXhlY3V0ZSkgLSB+NCwzMDAgdG9rZW5zXG4gICAqIC0gJ3NpbmdsZSc6IDEgdG9vbCAobWNwX2FxbCkgLSB+MzUwIHRva2VucywgaWRlYWwgZm9yIG11bHRpLXNlcnZlciBkZXBsb3ltZW50c1xuICAgKi9cbiAgTUNQX0FRTF9FTkRQT0lOVF9NT0RFOiB6LmVudW0oWydjcnVkZScsICdzaW5nbGUnXSkuZGVmYXVsdCgnY3J1ZGUnKSxcblxuICAvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFsaWFzIGZvciBNQ1BfQVFMX01PREUgKGRlcHJlY2F0ZWQsIHVzZSBNQ1BfQVFMX0VORFBPSU5UX01PREUpXG4gIE1DUF9BUUxfTU9ERTogei5lbnVtKFsnY3J1ZGUnLCAnc2luZ2xlJ10pLm9wdGlvbmFsKCksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVbmlmaWVkIExvZ2dpbmcgQ29uZmlndXJhdGlvbiAoZG9jcy9MT0dHSU5HLURFU0lHTi5tZClcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBET0xMSE9VU0VfTE9HX0RJUjogei5zdHJpbmcoKS5kZWZhdWx0KCd+Ly5kb2xsaG91c2UvbG9ncy8nKSxcbiAgRE9MTEhPVVNFX0xPR19GT1JNQVQ6IHouZW51bShbJ3RleHQnLCAnanNvbmwnXSkuZGVmYXVsdCgndGV4dCcpLFxuICBET0xMSE9VU0VfTE9HX1JFVEVOVElPTl9EQVlTOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDMwKSxcbiAgRE9MTEhPVVNFX0xPR19TRUNVUklUWV9SRVRFTlRJT05fREFZUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCg3KSxcbiAgRE9MTEhPVVNFX0xPR19GTFVTSF9JTlRFUlZBTF9NUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCg1MDAwKSxcbiAgLy8gQnVmZmVyIHJhaXNlZCB0byAyMDAwIHRvIHN1cHBvcnQgdGhlIHdlYiBjb25zb2xlIGxvZyB2aWV3ZXIg4oCUIHRoZSBoaWdoZXIgY2FwYWNpdHlcbiAgLy8gcmVkdWNlcyBmbHVzaCBmcmVxdWVuY3kgYW5kIGtlZXBzIG1vcmUgZW50cmllcyBhdmFpbGFibGUgZm9yIFNTRSBiYWNrZmlsbCBvbiBjb25uZWN0LlxuICBET0xMSE9VU0VfTE9HX0JVRkZFUl9TSVpFOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDIwMDApLFxuICBET0xMSE9VU0VfTE9HX01FTU9SWV9DQVBBQ0lUWTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCg1MDAwKSxcbiAgRE9MTEhPVVNFX0xPR19NRU1PUllfQVBQX0NBUEFDSVRZOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDEwMDAwKSxcbiAgRE9MTEhPVVNFX0xPR19NRU1PUllfU0VDVVJJVFlfQ0FQQUNJVFk6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoNTAwMCksXG4gIERPTExIT1VTRV9MT0dfTUVNT1JZX1BFUkZfQ0FQQUNJVFk6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMjAwMCksXG4gIERPTExIT1VTRV9MT0dfTUVNT1JZX1RFTEVNRVRSWV9DQVBBQ0lUWTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgxMDAwKSxcbiAgRE9MTEhPVVNFX0xPR19NQVhfRU5UUllfU0laRTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgxNjM4NCksXG4gIERPTExIT1VTRV9MT0dfSU1NRURJQVRFX0ZMVVNIX1JBVEU6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoNTApLFxuICBET0xMSE9VU0VfTE9HX0ZJTEVfTUFYX1NJWkU6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTA0ODU3NjAwKSxcbiAgRE9MTEhPVVNFX0xPR19NQVhfRElSX1NJWkVfQllURVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMCksXG4gIERPTExIT1VTRV9MT0dfTUFYX0ZJTEVTX1BFUl9DQVRFR09SWTogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgxMDApLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUGVybWlzc2lvbiBTZXJ2ZXIgQ29uZmlndXJhdGlvblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBFbmFibGUgdGhlIEhUVFAgcGVybWlzc2lvbiBldmFsdWF0aW9uIHNlcnZlciBmb3IgUHJlVG9vbFVzZSBob29rcy5cbiAgICogV2hlbiB0cnVlLCBzdGFydHMgYW4gSFRUUCBlbmRwb2ludCBvbiBhIGR5bmFtaWMgcG9ydCBhZnRlciBkZWZlcnJlZFxuICAgKiBzZXR1cCBjb21wbGV0ZXMuIFdyaXRlcyBwb3J0IHRvIH4vLmRvbGxob3VzZS9ydW4vcGVybWlzc2lvbi1zZXJ2ZXIucG9ydFxuICAgKiBmb3IgaG9vayBzY3JpcHQgZGlzY292ZXJ5LiBSZXF1aXJlZCBmb3IgYXV0b25vbW91cyBhZ2VudCBwZXJtaXNzaW9uXG4gICAqIG1hbmFnZW1lbnQgdmlhIENsYXVkZSBDb2RlIGhvb2tzLlxuICAgKi9cbiAgRE9MTEhPVVNFX1BFUk1JU1NJT05fU0VSVkVSOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcblxuICAvLyBXZWIgQ29uc29sZSBDb25maWd1cmF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLyoqIEVuYWJsZSB0aGUgdW5pZmllZCB3ZWIgY29uc29sZSAobG9ncyArIG1ldHJpY3MgdGFicykgKi9cbiAgRE9MTEhPVVNFX1dFQl9DT05TT0xFOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcblxuICAvKipcbiAgICogUG9ydCB0aGUgd2ViIGNvbnNvbGUgbGVhZGVyIGJpbmRzIHRvICgjMTc5NCwgIzE3OTgpLlxuICAgKlxuICAgKiBEZWZhdWx0OiA0MTcxNSDigJQgXCJBSUxJU1wiIG9uIGEgcGhvbmUga2V5cGFkLCBhZnRlciB0aGUgQUkgTGF5ZXJcbiAgICogSW50ZXJmYWNlIFNwZWNpZmljYXRpb24gdGhhdCBEb2xsaG91c2VNQ1AgaW1wbGVtZW50cy4gQWxzbyBcIkFsaWNlXCJcbiAgICogaW4gR2FlbGljLlxuICAgKlxuICAgKiBQb3J0IHNlbGVjdGlvbiBjcml0ZXJpYSAodmVyaWZpZWQgMjAyNi0wNC0wNik6XG4gICAqICAgLSBOb3QgcmVnaXN0ZXJlZCB3aXRoIElBTkEgKG5vIGVudHJ5IGluIHRoZSBzZXJ2aWNlIG5hbWUgcmVnaXN0cnkpXG4gICAqICAgLSBOb3QgaW4gbm1hcCBzZXJ2aWNlcyBkYXRhYmFzZSAobmV2ZXIgb2JzZXJ2ZWQgaW4gdGhlIHdpbGQpXG4gICAqICAgLSBObyBrbm93biBhcHBsaWNhdGlvbiwgc2VjdXJpdHkgdG9vbCwgb3IgbWFsd2FyZSBhc3NvY2lhdGlvbnNcbiAgICogICAtIEJlbG93IHRoZSBtYWNPUyBlcGhlbWVyYWwgcmFuZ2UgKDQ5MTUyLTY1NTM1KSwgc28gYGJpbmQoKWBcbiAgICogICAgIGRvZXMgbm90IHJhY2Ugd2l0aCBrZXJuZWwtYWxsb2NhdGVkIHNvdXJjZSBwb3J0c1xuICAgKiAgIC0gSW4gdGhlIElBTkEgdXNlciBwb3J0IHJhbmdlICgxMDI0LTQ5MTUxKVxuICAgKiAgIC0gTm90IGFkamFjZW50IHRvIHRoZSBwcmUtYXV0aGVudGljYXRpb24gZGVmYXVsdCAoMzkzOSlcbiAgICpcbiAgICogUHJldmlvdXMgZGVmYXVsdCB3YXMgNTkwNyAoXCJMT0dTXCIgdXBzaWRlIGRvd24gb24gYSBjYWxjdWxhdG9yKSxcbiAgICogd2hpY2ggY29uZmxpY3RlZCB3aXRoIFN0ZWxsYXIgQ3liZXIncyBIVFRQIEdLRSBsb2cgcGFyc2VyLlxuICAgKlxuICAgKiBPdmVycmlkZSB2aWEgZW52IHZhciBpZiA0MTcxNSBjb2xsaWRlcyB3aXRoIHNvbWV0aGluZyBpbiB5b3VyXG4gICAqIGVudmlyb25tZW50IOKAlCBldmVyeSBydW50aW1lIHJlZmVyZW5jZSByZWFkcyBmcm9tIHRoaXMgc2luZ2xlIHZhbHVlLlxuICAgKi9cbiAgRE9MTEhPVVNFX1dFQl9DT05TT0xFX1BPUlQ6IHouY29lcmNlLm51bWJlcigpLmludCgpLm1pbigxMDI0KS5tYXgoNjU1MzUpLmRlZmF1bHQoNDE3MTUpLFxuXG4gIC8qKlxuICAgKiBJc3N1ZSAjMTc4MDogRW5mb3JjZSBCZWFyZXIgdG9rZW4gYXV0aGVudGljYXRpb24gb24gdGhlIHdlYiBjb25zb2xlIEFQSS5cbiAgICogV2hlbiB0cnVlLCBhbGwgcHJvdGVjdGVkIGVuZHBvaW50cyByZXF1aXJlIGEgdmFsaWQgdG9rZW4gZnJvbSB0aGVcbiAgICogY29uc29sZSB0b2tlbiBmaWxlLiBXaGVuIGZhbHNlICh0aGUgcHJlLVBoYXNlLTIgZGVmYXVsdCksIHRoZSB0b2tlblxuICAgKiBmaWxlIGlzIHN0aWxsIGdlbmVyYXRlZCBidXQgdGhlIG1pZGRsZXdhcmUgZG9lcyBub3QgZW5mb3JjZSDigJQgdGhpc1xuICAgKiBsZXRzIHRoZSBpbmZyYXN0cnVjdHVyZSBsYW5kIHdpdGhvdXQgYnJlYWtpbmcgZXhpc3RpbmcgY29uc3VtZXJzLlxuICAgKiBXaWxsIGZsaXAgdG8gZGVmYXVsdCBgdHJ1ZWAgaW4gYSBmb2xsb3ctdXAgUFIgb25jZSBhbGwgY29uc3VtZXJzXG4gICAqIChicm93c2VyLCBmb2xsb3dlcnMsIGJyaWRnZSkgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gYXR0YWNoIHRva2Vucy5cbiAgICovXG4gIERPTExIT1VTRV9XRUJfQVVUSF9FTkFCTEVEOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG5cbiAgLyoqXG4gICAqIElzc3VlICMxNzgwOiBPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIGNvbnNvbGUgdG9rZW4gZmlsZSBsb2NhdGlvbi5cbiAgICogV2hlbiB1bnNldCwgYENvbnNvbGVUb2tlblN0b3JlYCBmYWxscyBiYWNrIHRvIGl0cyBidWlsdC1pbiBkZWZhdWx0XG4gICAqIHVuZGVyIGB+Ly5kb2xsaG91c2UvcnVuL2AuIE1haW5seSB1c2VmdWwgZm9yIHRlc3RzIGFuZCBmb3IgZW50ZXJwcmlzZVxuICAgKiBkZXBsb3ltZW50cyB0aGF0IG1vdW50IGEgc2hhcmVkIHRva2VuIGZpbGUgZnJvbSBhIHNlY3JldHMgdm9sdW1lLlxuICAgKi9cbiAgRE9MTEhPVVNFX0NPTlNPTEVfVE9LRU5fRklMRTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIGNvbnNvbGUgbGVhZGVyIGxvY2sgZmlsZSBsb2NhdGlvbiAoIzE3OTQpLlxuICAgKiBXaGVuIHVuc2V0LCBgTGVhZGVyRWxlY3Rpb25gIGZhbGxzIGJhY2sgdG8gaXRzIGJ1aWx0LWluIGRlZmF1bHQgdW5kZXJcbiAgICogYH4vLmRvbGxob3VzZS9ydW4vYC4gUHJpbWFyaWx5IHVzZWZ1bCBmb3IgdGVzdHMgdGhhdCBuZWVkIGlzb2xhdGlvblxuICAgKiBiZXR3ZWVuIHJ1bnMgYW5kIGZvciBkZXBsb3ltZW50cyB0aGF0IHNwbGl0IHJ1bnRpbWUgc3RhdGUgYWNyb3NzXG4gICAqIG11bHRpcGxlIGluc3RhbGxhdGlvbnMgb24gdGhlIHNhbWUgbWFjaGluZS5cbiAgICovXG4gIERPTExIT1VTRV9DT05TT0xFX0xFQURFUl9MT0NLX0ZJTEU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblxuICAvLyBMZWFkZXIvRm9sbG93ZXIgUmVjb3ZlcnkgKCMxODUwKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIElzc3VlICMxODUwOiBSZXRyeSBkZWxheXMgKGluIG1zKSB3aGVuIHRoZSBsZWFkZXIgZmFpbHMgdG8gYmluZCB0aGUgY29uc29sZVxuICAgKiBwb3J0IGR1ZSB0byBFQUREUklOVVNFLiBFYWNoIHZhbHVlIGlzIGEgc3VjY2Vzc2l2ZSBiYWNrb2ZmIGRlbGF5LlxuICAgKiBEZWZhdWx0OiAxcywgMnMsIDRzICg3cyB0b3RhbCkuIEluY3JlYXNlIGZvciBzbG93IG9yIHJlbW90ZSBlbnZpcm9ubWVudHMuXG4gICAqL1xuICBET0xMSE9VU0VfQ09OU09MRV9CSU5EX1JFVFJZX0RFTEFZUzogei5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLnRyYW5zZm9ybSh2ID0+IHYgPyB2LnNwbGl0KCcsJykubWFwKE51bWJlcikuZmlsdGVyKG4gPT4gIU51bWJlci5pc05hTihuKSAmJiBuID4gMCkgOiB1bmRlZmluZWQpLFxuXG4gIC8qKlxuICAgKiBJc3N1ZSAjMTg1MDogTnVtYmVyIG9mIGNvbnNlY3V0aXZlIGZvcndhcmRpbmcgZmFpbHVyZXMgYmVmb3JlIGEgZm9sbG93ZXJcbiAgICogZGVjbGFyZXMgdGhlIGxlYWRlciBkZWFkIGFuZCBhdHRlbXB0cyBzZWxmLXByb21vdGlvbi4gSGlnaGVyIHZhbHVlcyByZWR1Y2VcbiAgICogZmFsc2UgcG9zaXRpdmVzIGluIGhpZ2gtbGF0ZW5jeSBlbnZpcm9ubWVudHMgYnV0IGRlbGF5IHJlY292ZXJ5LlxuICAgKiBEZWZhdWx0OiAxMC5cbiAgICovXG4gIERPTExIT1VTRV9DT05TT0xFX01BWF9GT1JXQVJEX0ZBSUxVUkVTOiB6LmNvZXJjZS5udW1iZXIoKS5pbnQoKS5taW4oMSkubWF4KDEwMCkuZGVmYXVsdCgxMCksXG5cbiAgLyoqXG4gICAqIEhvdyBvZnRlbiBhIGZvbGxvd2VyIHJlLWV2YWx1YXRlcyB3aGV0aGVyIGl0IHNob3VsZCB0YWtlIG92ZXIgY29uc29sZVxuICAgKiBsZWFkZXJzaGlwIGluIGEgaGV0ZXJvZ2VuZW91cyBtaXhlZC12ZXJzaW9uIGVudmlyb25tZW50LlxuICAgKiBEZWZhdWx0OiAxNTAwMG1zLlxuICAgKi9cbiAgRE9MTEhPVVNFX0NPTlNPTEVfQVVUSE9SSVRZX1JFQ0hFQ0tfTVM6IHouY29lcmNlLm51bWJlcigpLmludCgpLm1pbigxXzAwMCkubWF4KDMwMF8wMDApLmRlZmF1bHQoMTVfMDAwKSxcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBwZXItc2Vzc2lvbiBqaXR0ZXIgYWRkZWQgdG8gYXV0aG9yaXR5IHJlY2hlY2tzIHNvIGxhcmdlIG1peGVkXG4gICAqIGZsZWV0cyBkbyBub3QgYWxsIHdha2UgdXAgaW4gdGhlIHNhbWUgaW5zdGFudC5cbiAgICogRGVmYXVsdDogNTAwMG1zLlxuICAgKi9cbiAgRE9MTEhPVVNFX0NPTlNPTEVfQVVUSE9SSVRZX1JFQ0hFQ0tfSklUVEVSX01TOiB6LmNvZXJjZS5udW1iZXIoKS5pbnQoKS5taW4oMCkubWF4KDYwXzAwMCkuZGVmYXVsdCg1XzAwMCksXG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBjb25zZWN1dGl2ZSBhdXRob3JpdHkgcmVjaGVjayBmYWlsdXJlcyBiZWZvcmUgdGhlIGZvbGxvd2VyIG9wZW5zXG4gICAqIGl0cyBsb2NhbCBjaXJjdWl0IGJyZWFrZXIgYW5kIHN0b3BzIHJldHJ5aW5nIHVudGlsIHRoZSBjb29sZG93biBleHBpcmVzLlxuICAgKiBEZWZhdWx0OiAzLlxuICAgKi9cbiAgRE9MTEhPVVNFX0NPTlNPTEVfQVVUSE9SSVRZX1JFQ0hFQ0tfRkFJTFVSRV9USFJFU0hPTEQ6IHouY29lcmNlLm51bWJlcigpLmludCgpLm1pbigxKS5tYXgoMTAwKS5kZWZhdWx0KDMpLFxuXG4gIC8qKlxuICAgKiBDb29sZG93biBwZXJpb2QgYWZ0ZXIgdGhlIGZvbGxvd2VyIGF1dGhvcml0eSBtb25pdG9yIG9wZW5zIGl0cyBjaXJjdWl0XG4gICAqIGJyZWFrZXIgZHVlIHRvIHJlcGVhdGVkIGZhaWx1cmVzLlxuICAgKiBEZWZhdWx0OiA2MDAwMG1zLlxuICAgKi9cbiAgRE9MTEhPVVNFX0NPTlNPTEVfQVVUSE9SSVRZX1JFQ0hFQ0tfRkFJTFVSRV9DT09MRE9XTl9NUzogei5jb2VyY2UubnVtYmVyKCkuaW50KCkubWluKDFfMDAwKS5tYXgoOTAwXzAwMCkuZGVmYXVsdCg2MF8wMDApLFxuXG4gIC8qKlxuICAgKiBUaW1lb3V0IGZvciBsZWFkZXItZGlzY292ZXJ5IEhUVFAgcHJvYmVzIGFnYWluc3QgL2FwaS9zZXNzaW9ucyBiZWZvcmUgdGhlXG4gICAqIGNhbGxlciBmYWxscyBiYWNrIHRvIGxvY2stZmlsZSBvciBzeW50aGV0aWMtb3duZXIgaGV1cmlzdGljcy5cbiAgICogRGVmYXVsdDogMjAwMG1zLlxuICAgKi9cbiAgRE9MTEhPVVNFX0NPTlNPTEVfTEVBREVSX0RJU0NPVkVSWV9USU1FT1VUX01TOiB6LmNvZXJjZS5udW1iZXIoKS5pbnQoKS5taW4oMjUwKS5tYXgoMzBfMDAwKS5kZWZhdWx0KDJfMDAwKSxcblxuICAvKipcbiAgICogSXNzdWUgIzE3ODA6IFBoYXNlIDIg4oCUIHJlcXVpcmUgYSBjb25maXJtYXRpb24gY29kZSAoT1MgZGlhbG9nIG9yIFRPVFApXG4gICAqIGZvciBwcml2aWxlZ2VkIGFjdGlvbnMgbGlrZSB0b2tlbiByb3RhdGlvbi4gRGVmYXVsdCBpcyB0cnVlIGZvciBzYWZldHk7XG4gICAqIHNldCB0byBmYWxzZSBmb3IgaGVhZGxlc3MgQ0kgYW5kIHNjcmlwdGVkIGRlcGxveW1lbnRzIHRoYXQgbmVlZCB0byByb3RhdGVcbiAgICogd2l0aG91dCBodW1hbiBpbnRlcmFjdGlvbi5cbiAgICovXG4gIERPTExIT1VTRV9DT05TT0xFX1JPVEFUSU9OX1JFUVVJUkVfQ09ORklSTUFUSU9OOiB6LmNvZXJjZS5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNlY3VyaXR5IENvbmZpZ3VyYXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogSXNzdWUgIzQ1MjogR2F0ZWtlZXBlciBwb2xpY3kgZW5mb3JjZW1lbnQuXG4gICAqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIGFsbCBNQ1AtQVFMIG9wZXJhdGlvbnMgZ28gdGhyb3VnaCB0aGUgNC1sYXllciBHYXRla2VlcGVyXG4gICAqIGVuZm9yY2UoKSBwaXBlbGluZS4gV2hlbiBmYWxzZSwgZmFsbHMgYmFjayB0byByb3V0ZSB2YWxpZGF0aW9uIG9ubHkuXG4gICAqIFRoaXMgaXMgYSB1c2VyL29wZXJhdG9yIHNldHRpbmcg4oCUIHRoZSBMTE0gY2Fubm90IGJ5cGFzcyBpdC5cbiAgICovXG4gIERPTExIT1VTRV9HQVRFS0VFUEVSX0VOQUJMRUQ6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICAvKipcbiAgICogSXNzdWUgIzY3OTogRWxlbWVudCBwb2xpY3kgbGF5ZXIga2lsbCBzd2l0Y2guXG4gICAqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIGFjdGl2ZSBlbGVtZW50IGdhdGVrZWVwZXIgcG9saWNpZXMgKGFsbG93L2NvbmZpcm0vZGVueS9zY29wZVJlc3RyaWN0aW9ucylcbiAgICogY2FuIG92ZXJyaWRlIGRlZmF1bHQgb3BlcmF0aW9uIHBlcm1pc3Npb24gbGV2ZWxzLiBXaGVuIGZhbHNlLCBMYXllciAyIG9mIEdhdGVrZWVwZXIuZW5mb3JjZSgpXG4gICAqIGlzIGJ5cGFzc2VkIGVudGlyZWx5IOKAlCBvbmx5IHJvdXRlIHZhbGlkYXRpb24gYW5kIGRlZmF1bHQgcGVybWlzc2lvbiBsZXZlbHMgYXBwbHkuXG4gICAqIFVzZSBmb3IgZW1lcmdlbmN5IGxvY2tkb3duLCBoYXJkZW5lZCBkZXBsb3ltZW50cywgb3IgcG9saWN5IGRlYnVnZ2luZy5cbiAgICogVGhpcyBpcyBhbiBvcGVyYXRvci9pbmZyYXN0cnVjdHVyZSBzZXR0aW5nIOKAlCB0aGUgTExNIGNhbm5vdCBieXBhc3MgaXQuXG4gICAqL1xuICBET0xMSE9VU0VfR0FURUtFRVBFUl9FTEVNRU5UX1BPTElDWV9PVkVSUklERVM6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICAvKipcbiAgICogSXNzdWUgIzc5OTogUG9saWN5IGV4cG9ydCBvcHQtaW4gZmxhZy5cbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgUG9saWN5RXhwb3J0U2VydmljZSB3cml0ZXMgdGhlIHNlY3VyaXR5IHBvbGljeSBibHVlcHJpbnQgdG9cbiAgICogfi8uZG9sbGhvdXNlL2JyaWRnZS9pbXBvcnRzL3BvbGljaWVzLyBvbiBhY3RpdmF0aW9uIGNoYW5nZXMuIFRoZSBEb2xsaG91c2VCcmlkZ2VcbiAgICogcGVybWlzc2lvbi1wcm9tcHQgc2VydmVyIHdhdGNoZXMgdGhpcyBmaWxlIHRvIGV2YWx1YXRlIHBlcm1pc3Npb25zIGxvY2FsbHkuXG4gICAqIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHBvbGljeSBmaWxlIGV4cG9ydCBlbnRpcmVseS5cbiAgICovXG4gIERPTExIT1VTRV9QT0xJQ1lfRVhQT1JUX0VOQUJMRUQ6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU3RvcmFnZSBMYXllciBDb25maWd1cmF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgRE9MTEhPVVNFX1NDQU5fQ09PTERPV05fTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMTAwMCksXG4gIERPTExIT1VTRV9JTkRFWF9ERUJPVU5DRV9NUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgyMDAwKSxcbiAgRE9MTEhPVVNFX0VMRU1FTlRfQ0FDSEVfVFRMX01TOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDM2MDAwMDApLFxuICBET0xMSE9VU0VfUEFUSF9DQUNIRV9UVExfTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMzYwMDAwMCksXG4gIERPTExIT1VTRV9UT09MX0NBQ0hFX1RUTF9NUzogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCg2MDAwMCksXG4gIERPTExIT1VTRV9HTE9CQUxfQ0FDSEVfTUVNT1JZX01COiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDE1MCksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQZXJtaXNzaW9uIFByb21wdCBDb25maWd1cmF0aW9uIChJc3N1ZSAjNjI1KVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqIE1heGltdW0gQ0xJIGFwcHJvdmFsIHJlY29yZHMgYmVmb3JlIExSVSBldmljdGlvbiAoZGVmYXVsdDogNTApICovXG4gIERPTExIT1VTRV9DTElfQVBQUk9WQUxfTUFYOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDUwKSxcblxuICAvKiogRGVmYXVsdCBUVEwgZm9yIENMSSBhcHByb3ZhbCByZWNvcmRzIGluIG1zIChkZWZhdWx0OiAzMDAwMDAgPSA1IG1pbikgKi9cbiAgRE9MTEhPVVNFX0NMSV9BUFBST1ZBTF9UVExfTVM6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMzAwXzAwMCksXG5cbiAgLyoqIFBlcm1pc3Npb24gcHJvbXB0IHJhdGUgbGltaXQ6IG1heCByZXF1ZXN0cyBwZXIgd2luZG93IChkZWZhdWx0OiAxMDApICovXG4gIERPTExIT1VTRV9QRVJNSVNTSU9OX1BST01QVF9SQVRFX0xJTUlUOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDEwMCksXG5cbiAgLyoqIENMSSBhcHByb3ZhbCBjcmVhdGlvbiByYXRlIGxpbWl0OiBtYXggcmVxdWVzdHMgcGVyIHdpbmRvdyAoZGVmYXVsdDogMjApICovXG4gIERPTExIT1VTRV9DTElfQVBQUk9WQUxfUkFURV9MSU1JVDogei5jb2VyY2UubnVtYmVyKCkuZGVmYXVsdCgyMCksXG5cbiAgLyoqIFJhdGUgbGltaXQgd2luZG93IGluIG1zIGZvciBwZXJtaXNzaW9uIHByb21wdCBhbmQgQ0xJIGFwcHJvdmFscyAoZGVmYXVsdDogNjAwMDAgPSA2MHMpICovXG4gIERPTExIT1VTRV9QRVJNSVNTSU9OX1JBVEVfV0lORE9XX01TOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDYwXzAwMCksXG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNZXRyaWNzIENvbGxlY3Rpb24gQ29uZmlndXJhdGlvblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIERPTExIT1VTRV9NRVRSSUNTX0VOQUJMRUQ6IHouY29lcmNlLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICBET0xMSE9VU0VfTUVUUklDU19DT0xMRUNUSU9OX0lOVEVSVkFMX01TOiB6LmNvZXJjZS5udW1iZXIoKS5taW4oMTAwMCkubWF4KDMwMDAwMCkuZGVmYXVsdCgxNTAwMCksXG4gIERPTExIT1VTRV9NRVRSSUNTX01BWF9TTkFQU0hPVF9TSVpFOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDEwMjQwMCksXG4gIERPTExIT1VTRV9NRVRSSUNTX0NPTExFQ1RPUl9GQUlMVVJFX1RIUkVTSE9MRDogei5jb2VyY2UubnVtYmVyKCkubWluKDEpLm1heCgxMDApLmRlZmF1bHQoMTApLFxuICBET0xMSE9VU0VfTUVUUklDU19DT0xMRUNUSU9OX0RVUkFUSU9OX1dBUk5fTVM6IHouY29lcmNlLm51bWJlcigpLm1pbigxMDApLm1heCg2MDAwMCkuZGVmYXVsdCg1MDAwKSxcbiAgRE9MTEhPVVNFX01FVFJJQ1NfTUVNT1JZX1NOQVBTSE9UX0NBUEFDSVRZOiB6LmNvZXJjZS5udW1iZXIoKS5taW4oMTApLm1heCgxMDAwMCkuZGVmYXVsdCgyNDApLFxuXG4gIC8vIFBhdHRlcm4gZW5jcnlwdGlvbiBzZXR0aW5ncyBmb3IgTWVtb3J5IFNlY3VyaXR5IChJc3N1ZSAjMTMyMSlcbiAgRE9MTEhPVVNFX0RJU0FCTEVfRU5DUllQVElPTjogei5jb2VyY2UuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBET0xMSE9VU0VfRU5DUllQVElPTl9TRUNSRVQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgRE9MTEhPVVNFX0VOQ1JZUFRJT05fU0FMVDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuXG4gIC8vIFRva2VuIGVuY3J5cHRpb24gc2VjcmV0IChTRUMtMDEsICMxNzM1KVxuICAvLyBXaGVuIHNldCwgcmVwbGFjZXMgdGhlIHByZWRpY3RhYmxlIG1hY2hpbmUtZGVyaXZlZCBwYXNzcGhyYXNlIGZvciB0b2tlbiBlbmNyeXB0aW9uLlxuICAvLyBTdHJvbmdseSByZWNvbW1lbmRlZCBmb3IgYW55IHNoYXJlZCBvciBtdWx0aS11c2VyIGVudmlyb25tZW50LlxuICAvLyBNaW5pbXVtIDMyIGNoYXJhY3RlcnMgZW5mb3JjZWQgdG8gcHJldmVudCB3ZWFrIHBhc3NwaHJhc2VzLlxuICBET0xMSE9VU0VfVE9LRU5fU0VDUkVUOiB6LnN0cmluZygpLm1pbigzMikub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIFZhbGlkYXRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAqIFR5cGUgaXMgYXV0b21hdGljYWxseSBpbmZlcnJlZCBmcm9tIHRoZSBzY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IGVudiA9IGVudlNjaGVtYS5wYXJzZShwcm9jZXNzLmVudik7XG5cbi8qKlxuICogRW52aXJvbm1lbnQgdHlwZSAoaW5mZXJyZWQgZnJvbSBzY2hlbWEpXG4gKi9cbmV4cG9ydCB0eXBlIEVudiA9IHouaW5mZXI8dHlwZW9mIGVudlNjaGVtYT47XG5cbi8qKlxuICogQ29udmVuaWVuY2UgaGVscGVycyBmb3IgZW52aXJvbm1lbnQgZGV0ZWN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBpc1Rlc3QgPSBlbnYuTk9ERV9FTlYgPT09ICd0ZXN0JztcbmV4cG9ydCBjb25zdCBpc0RldmVsb3BtZW50ID0gZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnO1xuZXhwb3J0IGNvbnN0IGlzUHJvZHVjdGlvbiA9IGVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nO1xuXG4vKipcbiAqIExvZyBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uICh3aXRob3V0IHNlY3JldHMpXG4gKi9cbmlmIChpc0RldmVsb3BtZW50IHx8IGlzVGVzdCkge1xuICBsb2dnZXIuZGVidWcoJ0Vudmlyb25tZW50IGNvbmZpZ3VyYXRpb24gbG9hZGVkOicsIHtcbiAgICBOT0RFX0VOVjogZW52Lk5PREVfRU5WLFxuICAgIFBPUlQ6IGVudi5QT1JULFxuICAgIExPR19MRVZFTDogZW52LkxPR19MRVZFTCxcbiAgICBIQVNfR0lUSFVCX1RPS0VOOiAhIWVudi5HSVRIVUJfVE9LRU4sXG4gICAgSEFTX0dJVEhVQl9URVNUX1RPS0VOOiAhIWVudi5HSVRIVUJfVEVTVF9UT0tFTixcbiAgfSk7XG59XG4iXX0=
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export declare const PACKAGE_VERSION = "2.0.27-rc.7";
6
- export declare const BUILD_TIMESTAMP = "2026-04-19T22:30:56.353Z";
5
+ export declare const PACKAGE_VERSION = "2.0.27-rc.8";
6
+ export declare const BUILD_TIMESTAMP = "2026-04-20T02:27:35.072Z";
7
7
  export declare const BUILD_TYPE: 'npm' | 'git';
8
8
  export declare const PACKAGE_NAME = "@dollhousemcp/mcp-server";
9
9
  //# sourceMappingURL=version.d.ts.map
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export const PACKAGE_VERSION = '2.0.27-rc.7';
6
- export const BUILD_TIMESTAMP = '2026-04-19T22:30:56.353Z';
5
+ export const PACKAGE_VERSION = '2.0.27-rc.8';
6
+ export const BUILD_TIMESTAMP = '2026-04-20T02:27:35.072Z';
7
7
  export const BUILD_TYPE = 'npm';
8
8
  export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMjctcmMuNyc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjYtMDQtMTlUMjI6MzA6NTYuMzUzWic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMjctcmMuOCc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjYtMDQtMjBUMDI6Mjc6MzUuMDcyWic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
@@ -105,12 +105,23 @@ interface FollowerAuthorityResolution {
105
105
  replacement: PortOwnerReplacementDecision | null;
106
106
  forcedClaim: boolean;
107
107
  }
108
+ interface LeaderPreflightResolution {
109
+ election: ElectionResult;
110
+ discovery: PortLeaderDiscovery | null;
111
+ replacement: PortOwnerReplacementDecision | null;
112
+ demotedToFollower: boolean;
113
+ }
108
114
  interface FollowerAuthorityDependencies {
109
115
  isLeaderWebConsoleReachableImpl?: typeof isLeaderWebConsoleReachable;
110
116
  discoverLeaderServingPortImpl?: typeof discoverLeaderServingPort;
111
117
  forceClaimLeadershipImpl?: typeof forceClaimLeadership;
112
118
  deleteLeaderLockImpl?: typeof deleteLeaderLock;
113
119
  }
120
+ interface LeaderPreflightDependencies extends DiscoveryDependencies {
121
+ discoverLeaderServingPortImpl?: typeof discoverLeaderServingPort;
122
+ readLeaderLockImpl?: typeof readLeaderLock;
123
+ deleteLeaderLockImpl?: typeof deleteLeaderLock;
124
+ }
114
125
  interface FollowerAuthorityMonitorDependencies extends FollowerAuthorityDependencies {
115
126
  resolveFollowerAuthorityImpl?: typeof resolveFollowerAuthority;
116
127
  setTimeoutImpl?: typeof setTimeout;
@@ -138,7 +149,9 @@ interface BindFailureRecoveryDependencies extends DiscoveryDependencies {
138
149
  }
139
150
  export declare function recoverLeaderBindFailure(provisionalLeader: ConsoleLeaderInfo, port: number, authToken: string | null, deps?: BindFailureRecoveryDependencies): Promise<BindFailureRecoveryResult>;
140
151
  export declare function evaluatePortOwnerReplacement(candidateLeader: ConsoleLeaderInfo, fallback: PortLeaderDiscovery): PortOwnerReplacementDecision;
152
+ export declare function shouldEvictDiscoveredOwner(discovery: PortLeaderDiscovery, replacement: PortOwnerReplacementDecision): boolean;
141
153
  export declare function resolveFollowerAuthority(sessionId: string, consolePort: number, election: ElectionResult, deps?: FollowerAuthorityDependencies): Promise<FollowerAuthorityResolution>;
154
+ export declare function resolveLeaderPreflightAuthority(sessionId: string, consolePort: number, election: ElectionResult, authToken: string | null, deps?: LeaderPreflightDependencies): Promise<LeaderPreflightResolution>;
142
155
  export declare function startFollowerAuthorityMonitor(options: UnifiedConsoleOptions, consolePort: number, election: ElectionResult, promotionMgr: PromotionManager, forwardingSink: LeaderForwardingLogSink, sessionHeartbeat: SessionHeartbeat, deps?: FollowerAuthorityMonitorDependencies): () => void;
143
156
  export declare function reconcileLeaderLease(sessionId: string, consolePort: number, deps?: LeaderLeaseReconciliationDependencies): Promise<'not-port-owner' | 'already-owned' | 'reconciled' | 'reclaim-failed'>;
144
157
  export declare function startLeaderLeaseMonitor(sessionId: string, consolePort: number, deps?: LeaderLeaseReconciliationDependencies): () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"UnifiedConsole.d.ts","sourceRoot":"","sources":["../../../src/web/console/UnifiedConsole.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAGlF,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAEL,2BAA2B,EAC3B,oBAAoB,EAGpB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,eAAe,EAMf,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EACL,aAAa,EACb,wBAAwB,EAEzB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAuCrD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,eAAe,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,UAAU,EAAE,aAAa,CAAC;IAC1B,0BAA0B;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,qFAAqF;IACrF,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,0DAA0D;IAC1D,eAAe,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;QAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;IACzH,8DAA8D;IAC9D,iBAAiB,EAAE,CAAC,SAAS,EAAE;QAAE,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;QAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAA;KAAE,EAAE,WAAW,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACrL,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,OAAO,kBAAuC,EACtD,GAAG,GAAE,OAAO,MAAe,GAC1B,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,GAAG,IAAI,CAAC,CAsBhE;AAcD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;CAC/C;AAED,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE,oBAAoB,EAAE,OAAO,CAAC;IAC9B,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,wBAAwB,GAAG,IAAI,CAAC;CAC7C;AAaD,UAAU,2BAA2B;IACnC,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACtC,WAAW,EAAE,4BAA4B,GAAG,IAAI,CAAC;IACjD,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,6BAA6B;IACrC,+BAA+B,CAAC,EAAE,OAAO,2BAA2B,CAAC;IACrE,6BAA6B,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACjE,wBAAwB,CAAC,EAAE,OAAO,oBAAoB,CAAC;IACvD,oBAAoB,CAAC,EAAE,OAAO,gBAAgB,CAAC;CAChD;AAED,UAAU,oCAAqC,SAAQ,6BAA6B;IAClF,4BAA4B,CAAC,EAAE,OAAO,wBAAwB,CAAC;IAC/D,cAAc,CAAC,EAAE,OAAO,UAAU,CAAC;IACnC,gBAAgB,CAAC,EAAE,OAAO,YAAY,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC;CACxB;AAED,UAAU,qCAAqC;IAC7C,kBAAkB,CAAC,EAAE,OAAO,cAAc,CAAC;IAC3C,iBAAiB,CAAC,EAAE,OAAO,aAAa,CAAC;IACzC,mBAAmB,CAAC,EAAE,OAAO,eAAe,CAAC;IAC7C,oBAAoB,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC/C,4BAA4B,CAAC,EAAE,OAAO,wBAAwB,CAAC;IAC/D,cAAc,CAAC,EAAE,OAAO,UAAU,CAAC;IACnC,gBAAgB,CAAC,EAAE,OAAO,YAAY,CAAC;CACxC;AAED,UAAU,qBAAqB;IAC7B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,aAAa,CAAC;IACzC,kBAAkB,CAAC,EAAE,OAAO,cAAc,CAAC;CAC5C;AAMD,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,WAAW,EAAE,CAAC,CAmBxB;AA6DD,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,mBAAmB,CAAC,CA0C9B;AAED,UAAU,+BAAgC,SAAQ,qBAAqB;IACrE,oBAAoB,CAAC,EAAE,OAAO,gBAAgB,CAAC;CAChD;AAED,wBAAsB,wBAAwB,CAC5C,iBAAiB,EAAE,iBAAiB,EACpC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,IAAI,GAAE,+BAAoC,GACzC,OAAO,CAAC,yBAAyB,CAAC,CAqDpC;AAED,wBAAgB,4BAA4B,CAC1C,eAAe,EAAE,iBAAiB,EAClC,QAAQ,EAAE,mBAAmB,GAC5B,4BAA4B,CAe9B;AAuDD,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,cAAc,EACxB,IAAI,GAAE,6BAAkC,GACvC,OAAO,CAAC,2BAA2B,CAAC,CA2EtC;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,qBAAqB,EAC9B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,cAAc,EACxB,YAAY,EAAE,gBAAgB,EAC9B,cAAc,EAAE,uBAAuB,EACvC,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,GAAE,oCAAyC,GAC9C,MAAM,IAAI,CAwHZ;AAED,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,qCAA0C,GAC/C,OAAO,CAAC,gBAAgB,GAAG,eAAe,GAAG,YAAY,GAAG,gBAAgB,CAAC,CA0F/E;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,qCAA0C,GAC/C,MAAM,IAAI,CA6CZ;AAqID;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAyBvG"}
1
+ {"version":3,"file":"UnifiedConsole.d.ts","sourceRoot":"","sources":["../../../src/web/console/UnifiedConsole.ts"],"names":[],"mappings":"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"}
@@ -31,7 +31,7 @@ import { env } from '../../config/env.js';
31
31
  const DEFAULT_CONSOLE_PORT = env.DOLLHOUSE_WEB_CONSOLE_PORT;
32
32
  const LEGACY_CONSOLE_FALLBACK_PORT = 3939;
33
33
  const SYNTHETIC_PORT_OWNER_SESSION_PREFIX = 'port-owner-';
34
- const LEADER_DISCOVERY_TIMEOUT_MS = 2_000;
34
+ const LEADER_DISCOVERY_TIMEOUT_MS = env.DOLLHOUSE_CONSOLE_LEADER_DISCOVERY_TIMEOUT_MS;
35
35
  const LEADER_LEASE_RECONCILE_INTERVAL_MS = 2_000;
36
36
  const LEADER_LEASE_RECONCILE_MAX_INTERVAL_MS = 30_000;
37
37
  const FOLLOWER_AUTHORITY_MONITOR_CONFIG = {
@@ -115,7 +115,11 @@ export async function fetchLeaderSessionsSnapshot(port, authToken, fetchImpl = f
115
115
  const data = await response.json();
116
116
  return Array.isArray(data.sessions) ? data.sessions : [];
117
117
  }
118
- catch {
118
+ catch (err) {
119
+ logger.debug('[UnifiedConsole] Failed to fetch leader session snapshot', {
120
+ port,
121
+ error: err instanceof Error ? err.message : String(err),
122
+ });
119
123
  return [];
120
124
  }
121
125
  finally {
@@ -271,6 +275,9 @@ export function evaluatePortOwnerReplacement(candidateLeader, fallback) {
271
275
  preference,
272
276
  };
273
277
  }
278
+ export function shouldEvictDiscoveredOwner(discovery, replacement) {
279
+ return discovery.source !== 'synthetic' && replacement.shouldEvict && replacement.ownerPid !== null;
280
+ }
274
281
  function buildBindFailureLogContext(consolePort, provisionalLeader, bindResult, fallback, replacement, forcedKill) {
275
282
  return {
276
283
  port: consolePort,
@@ -340,7 +347,7 @@ export async function resolveFollowerAuthority(sessionId, consolePort, election,
340
347
  };
341
348
  }
342
349
  const replacement = evaluatePortOwnerReplacement(candidateLeader, discovery);
343
- if (replacement.shouldEvict) {
350
+ if (shouldEvictDiscoveredOwner(discovery, replacement)) {
344
351
  await deleteLeaderLockImpl();
345
352
  logger.warn(discovery.ownerPid === election.leaderInfo.pid
346
353
  ? '[UnifiedConsole] Older console leader detected on the console port; newer session will take over'
@@ -368,6 +375,48 @@ export async function resolveFollowerAuthority(sessionId, consolePort, election,
368
375
  forcedClaim: false,
369
376
  };
370
377
  }
378
+ export async function resolveLeaderPreflightAuthority(sessionId, consolePort, election, authToken, deps = {}) {
379
+ const discoverLeaderServingPortImpl = deps.discoverLeaderServingPortImpl ?? discoverLeaderServingPort;
380
+ const readLeaderLockImpl = deps.readLeaderLockImpl ?? readLeaderLock;
381
+ const deleteLeaderLockImpl = deps.deleteLeaderLockImpl ?? deleteLeaderLock;
382
+ const discovery = await discoverLeaderServingPortImpl(consolePort, authToken, deps);
383
+ if (!discovery.leaderInfo || discovery.ownerPid === null || discovery.ownerPid === election.leaderInfo.pid) {
384
+ return {
385
+ election,
386
+ discovery,
387
+ replacement: discovery.leaderInfo ? evaluatePortOwnerReplacement(election.leaderInfo, discovery) : null,
388
+ demotedToFollower: false,
389
+ };
390
+ }
391
+ const replacement = evaluatePortOwnerReplacement(election.leaderInfo, discovery);
392
+ if (shouldEvictDiscoveredOwner(discovery, replacement)) {
393
+ return {
394
+ election,
395
+ discovery,
396
+ replacement,
397
+ demotedToFollower: false,
398
+ };
399
+ }
400
+ const provisionalLock = await readLeaderLockImpl();
401
+ const provisionalLockMatches = (provisionalLock?.pid === election.leaderInfo.pid &&
402
+ provisionalLock.port === election.leaderInfo.port &&
403
+ provisionalLock.sessionId === election.leaderInfo.sessionId);
404
+ if (provisionalLockMatches) {
405
+ await deleteLeaderLockImpl();
406
+ }
407
+ logger.warn(discovery.source === 'synthetic'
408
+ ? '[UnifiedConsole] Provisional leader detected an unknown active console owner before bind; following the existing port owner instead of forcing eviction'
409
+ : '[UnifiedConsole] Provisional leader detected a healthy console owner before bind; following the existing leader instead of forcing takeover', {
410
+ ...buildAuthorityResolutionLogContext(consolePort, election.leaderInfo, discovery, replacement),
411
+ provisionalLockCleared: provisionalLockMatches,
412
+ });
413
+ return {
414
+ election: { role: 'follower', leaderInfo: discovery.leaderInfo },
415
+ discovery,
416
+ replacement,
417
+ demotedToFollower: true,
418
+ };
419
+ }
371
420
  export function startFollowerAuthorityMonitor(options, consolePort, election, promotionMgr, forwardingSink, sessionHeartbeat, deps = {}) {
372
421
  const resolveFollowerAuthorityImpl = deps.resolveFollowerAuthorityImpl ?? resolveFollowerAuthority;
373
422
  const setTimeoutImpl = deps.setTimeoutImpl ?? setTimeout;
@@ -601,7 +650,7 @@ export function startLeaderLeaseMonitor(sessionId, consolePort, deps = {}) {
601
650
  async function attemptForceTakeover(options, currentElection, consolePort, primaryToken, serverOpts, startWebServerImpl) {
602
651
  const initialFallback = await recoverLeaderBindFailure(currentElection.leaderInfo, consolePort, primaryToken);
603
652
  const initialReplacement = evaluatePortOwnerReplacement(currentElection.leaderInfo, initialFallback);
604
- if (!initialReplacement.shouldEvict || initialReplacement.ownerPid === null) {
653
+ if (!shouldEvictDiscoveredOwner(initialFallback, initialReplacement)) {
605
654
  return {
606
655
  webResult: { bindResult: { success: false, error: 'EADDRINUSE', detail: `Port ${consolePort} already in use` } },
607
656
  election: currentElection,
@@ -616,7 +665,7 @@ async function attemptForceTakeover(options, currentElection, consolePort, prima
616
665
  const latestFallback = await discoverLeaderServingPort(consolePort, primaryToken);
617
666
  const recoveredSessions = await fetchLeaderSessionsSnapshot(consolePort, primaryToken);
618
667
  const latestReplacement = evaluatePortOwnerReplacement(currentElection.leaderInfo, latestFallback);
619
- if (!latestReplacement.shouldEvict || latestReplacement.ownerPid === null) {
668
+ if (!shouldEvictDiscoveredOwner(latestFallback, latestReplacement)) {
620
669
  logger.warn('[UnifiedConsole] Forced takeover target changed before eviction; skipping forced kill', {
621
670
  ...buildBindFailureLogContext(consolePort, currentElection.leaderInfo, { success: false, error: 'EADDRINUSE', detail: `Port ${consolePort} already in use` }, latestFallback, latestReplacement),
622
671
  previousOwnerPid: initialReplacement.ownerPid,
@@ -635,7 +684,20 @@ async function attemptForceTakeover(options, currentElection, consolePort, prima
635
684
  logger.warn('[UnifiedConsole] Attempting forced takeover from older or incompatible active leader', {
636
685
  ...buildBindFailureLogContext(consolePort, currentElection.leaderInfo, { success: false, error: 'EADDRINUSE', detail: `Port ${consolePort} already in use` }, latestFallback, latestReplacement),
637
686
  });
638
- const forcedKill = await killStaleProcessDetailed(latestReplacement.ownerPid, consolePort, {
687
+ const ownerPid = latestReplacement.ownerPid;
688
+ if (ownerPid === null) {
689
+ return {
690
+ webResult: { bindResult: { success: false, error: 'EADDRINUSE', detail: `Port ${consolePort} already in use` } },
691
+ election: currentElection,
692
+ fallback: latestFallback,
693
+ replacement: latestReplacement,
694
+ recoveredSessions,
695
+ forcedKill: null,
696
+ takeoverAttempted: false,
697
+ reboundLockClaimed: false,
698
+ };
699
+ }
700
+ const forcedKill = await killStaleProcessDetailed(ownerPid, consolePort, {
639
701
  allowActiveHostParent: true,
640
702
  });
641
703
  if (!forcedKill.killed) {
@@ -704,6 +766,12 @@ export async function startUnifiedConsole(options) {
704
766
  const resolved = await resolveFollowerAuthority(options.sessionId, consolePort, election);
705
767
  election = resolved.election;
706
768
  }
769
+ else {
770
+ const { getPrimaryTokenFromFile } = await import('./consoleToken.js');
771
+ const authToken = await getPrimaryTokenFromFile(env.DOLLHOUSE_CONSOLE_TOKEN_FILE);
772
+ const resolved = await resolveLeaderPreflightAuthority(options.sessionId, consolePort, election, authToken);
773
+ election = resolved.election;
774
+ }
707
775
  if (election.role === 'leader') {
708
776
  return startAsLeader(options, election, consolePort);
709
777
  }
@@ -878,4 +946,4 @@ async function startAsFollower(options, election, consolePort = DEFAULT_CONSOLE_
878
946
  },
879
947
  };
880
948
  }
881
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pZmllZENvbnNvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQU9ILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWix3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLHdCQUF3QixHQUl6QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUNMLGFBQWEsRUFDYix3QkFBd0IsR0FFekIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHMUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUMsMEJBQTBCLENBQUM7QUFDNUQsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSxtQ0FBbUMsR0FBRyxhQUFhLENBQUM7QUFDMUQsTUFBTSwyQkFBMkIsR0FBRyxLQUFLLENBQUM7QUFD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QixHQUFHLElBQUksZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5RixNQUFNLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBRS9CLE1BQU0sb0JBQW9CLEdBQUcsNkJBQTZCLENBQ3hELE9BQU8sRUFDUCxXQUFXLEVBQ1gsUUFBUSxFQUNSLFlBQVksRUFDWixjQUFjLEVBQ2QsZ0JBQWdCLENBQ2pCLENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxFQUFFO1FBQy9DLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVO1FBQ2hFLGFBQWEsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHO1FBQ2hGLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTO0tBQ2hELENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxJQUFJLEVBQUUsVUFBVTtRQUNoQixRQUFRO1FBQ1IsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2xCLG9CQUFvQixFQUFFLENBQUM7WUFDdkIsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5QixNQUFNLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVuaWZpZWQgd2ViIGNvbnNvbGUgb3JjaGVzdHJhdG9yLlxuICpcbiAqIFRpZXMgdG9nZXRoZXIgbGVhZGVyIGVsZWN0aW9uLCBjb25zb2xlIHN0YXJ0dXAsIGZvbGxvd2VyIHdpcmluZyxcbiAqIGFuZCBzZXNzaW9uIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50XG4gKiBjYWxsZWQgYnkgdGhlIERJIGNvbnRhaW5lciBkdXJpbmcgZGVmZXJyZWQgc2V0dXAuXG4gKlxuICogRmxvdzpcbiAqIDEuIFJ1biBsZWFkZXIgZWxlY3Rpb24gKHJlYWQgbG9jayBmaWxlLCBjbGFpbSBvciBmb2xsb3cpXG4gKiAyLiBJZiBsZWFkZXI6IHN0YXJ0IHdlYiBzZXJ2ZXIgb24gZml4ZWQgcG9ydCwgbW91bnQgaW5nZXN0IHJvdXRlcywgc3RhcnQgaGVhcnRiZWF0XG4gKiAzLiBJZiBmb2xsb3dlcjogcmVnaXN0ZXIgZm9yd2FyZGluZyBzaW5rcyB3aXRoIExvZ01hbmFnZXIsIHN0YXJ0IHNlc3Npb24gaGVhcnRiZWF0XG4gKlxuICogQHNpbmNlIHYyLjEuMCDigJQgSXNzdWUgIzE3MDBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFVuaWZpZWRMb2dFbnRyeSB9IGZyb20gJy4uLy4uL2xvZ2dpbmcvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRyaWNTbmFwc2hvdCB9IGZyb20gJy4uLy4uL21ldHJpY3MvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlMb2dTaW5rIH0gZnJvbSAnLi4vLi4vbG9nZ2luZy9zaW5rcy9NZW1vcnlMb2dTaW5rLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5TWV0cmljc1NpbmsgfSBmcm9tICcuLi8uLi9tZXRyaWNzL3NpbmtzL01lbW9yeU1ldHJpY3NTaW5rLmpzJztcbmltcG9ydCB0eXBlIHsgV2ViU2VydmVyT3B0aW9ucywgV2ViU2VydmVyUmVzdWx0IH0gZnJvbSAnLi4vc2VydmVyLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7XG4gIGVsZWN0TGVhZGVyLFxuICBpc0xlYWRlcldlYkNvbnNvbGVSZWFjaGFibGUsXG4gIGZvcmNlQ2xhaW1MZWFkZXJzaGlwLFxuICBzdGFydEhlYXJ0YmVhdCxcbiAgcmVnaXN0ZXJMZWFkZXJDbGVhbnVwLFxuICBkZXRlY3RMZWdhY3lMZWFkZXIsXG4gIHJlYWRMZWFkZXJMb2NrLFxuICBkZWxldGVMZWFkZXJMb2NrLFxuICBjbGFpbUxlYWRlcnNoaXAsXG4gIGNyZWF0ZUxlYWRlckluZm8sXG4gIExPQ0tfVkVSU0lPTixcbiAgQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04sXG4gIGV2YWx1YXRlTGVhZGVyUHJlZmVyZW5jZSxcbiAgdHlwZSBFbGVjdGlvblJlc3VsdCxcbiAgdHlwZSBDb25zb2xlTGVhZGVySW5mbyxcbiAgdHlwZSBMZWFkZXJQcmVmZXJlbmNlRGVjaXNpb24sXG59IGZyb20gJy4vTGVhZGVyRWxlY3Rpb24uanMnO1xuaW1wb3J0IHsgY3JlYXRlSW5nZXN0Um91dGVzIH0gZnJvbSAnLi9Jbmdlc3RSb3V0ZXMuanMnO1xuaW1wb3J0IHtcbiAgTGVhZGVyRm9yd2FyZGluZ0xvZ1NpbmssXG4gIFNlc3Npb25IZWFydGJlYXQsXG59IGZyb20gJy4vTGVhZGVyRm9yd2FyZGluZ1NpbmsuanMnO1xuaW1wb3J0IHsgUHJvbW90aW9uTWFuYWdlciB9IGZyb20gJy4vUHJvbW90aW9uTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBDb25zb2xlVG9rZW5TdG9yZSB9IGZyb20gJy4vY29uc29sZVRva2VuLmpzJztcbmltcG9ydCB7XG4gIGZpbmRQaWRPblBvcnQsXG4gIGtpbGxTdGFsZVByb2Nlc3NEZXRhaWxlZCxcbiAgdHlwZSBLaWxsU3RhbGVQcm9jZXNzT3V0Y29tZSxcbn0gZnJvbSAnLi9TdGFsZVByb2Nlc3NSZWNvdmVyeS5qcyc7XG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuLi8uLi9jb25maWcvZW52LmpzJztcbmltcG9ydCB0eXBlIHsgU2Vzc2lvbkluZm8gfSBmcm9tICcuL0luZ2VzdFJvdXRlcy5qcyc7XG5cbi8qKlxuICogRGVmYXVsdCBjb25zb2xlIHBvcnQgZnJvbSB0aGUgZW52IHZhci4gVXNlZCBhcyBmYWxsYmFjayB3aGVuIG5vIHBvcnRcbiAqIGlzIHByb3ZpZGVkIHZpYSBjb25maWcgZmlsZSBvciBvcHRpb25zLiBUaGUgcmVzb2x1dGlvbiBoaWVyYXJjaHkgaXM6XG4gKiAgIDEuIG9wdGlvbnMucG9ydCAoZnJvbSBjb25maWcgZmlsZSwgcmVzb2x2ZWQgYnkgdGhlIERJIGNvbnRhaW5lcilcbiAqICAgMi4gRE9MTEhPVVNFX1dFQl9DT05TT0xFX1BPUlQgZW52IHZhclxuICogICAzLiA0MTcxNSAoaGFyZGNvZGVkIGRlZmF1bHQgaW4gZW52LnRzKVxuICovXG5jb25zdCBERUZBVUxUX0NPTlNPTEVfUE9SVCA9IGVudi5ET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVDtcbmNvbnN0IExFR0FDWV9DT05TT0xFX0ZBTExCQUNLX1BPUlQgPSAzOTM5O1xuY29uc3QgU1lOVEhFVElDX1BPUlRfT1dORVJfU0VTU0lPTl9QUkVGSVggPSAncG9ydC1vd25lci0nO1xuY29uc3QgTEVBREVSX0RJU0NPVkVSWV9USU1FT1VUX01TID0gMl8wMDA7XG5jb25zdCBMRUFERVJfTEVBU0VfUkVDT05DSUxFX0lOVEVSVkFMX01TID0gMl8wMDA7XG5jb25zdCBMRUFERVJfTEVBU0VfUkVDT05DSUxFX01BWF9JTlRFUlZBTF9NUyA9IDMwXzAwMDtcbmNvbnN0IEZPTExPV0VSX0FVVEhPUklUWV9NT05JVE9SX0NPTkZJRyA9IHtcbiAgaW50ZXJ2YWxNczogZW52LkRPTExIT1VTRV9DT05TT0xFX0FVVEhPUklUWV9SRUNIRUNLX01TLFxuICBqaXR0ZXJNczogZW52LkRPTExIT1VTRV9DT05TT0xFX0FVVEhPUklUWV9SRUNIRUNLX0pJVFRFUl9NUyxcbiAgZmFpbHVyZVRocmVzaG9sZDogZW52LkRPTExIT1VTRV9DT05TT0xFX0FVVEhPUklUWV9SRUNIRUNLX0ZBSUxVUkVfVEhSRVNIT0xELFxuICBmYWlsdXJlQ29vbGRvd25NczogZW52LkRPTExIT1VTRV9DT05TT0xFX0FVVEhPUklUWV9SRUNIRUNLX0ZBSUxVUkVfQ09PTERPV05fTVMsXG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBjdXJyZW50VGltZXN0YW1wKCk6IHN0cmluZyB7XG4gIHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVGb2xsb3dlckF1dGhvcml0eVJlY2hlY2tJbnRlcnZhbChzZXNzaW9uSWQ6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRTZXNzaW9uSWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShzZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50O1xuICBsZXQgaGFzaCA9IDA7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBub3JtYWxpemVkU2Vzc2lvbklkLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGNvZGVQb2ludCA9IG5vcm1hbGl6ZWRTZXNzaW9uSWQuY29kZVBvaW50QXQoaW5kZXgpID8/IDA7XG4gICAgaGFzaCA9IChoYXNoICogMzEgKyBjb2RlUG9pbnQpID4+PiAwO1xuICAgIGlmIChjb2RlUG9pbnQgPiAweGZmZmYpIHtcbiAgICAgIGluZGV4ICs9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBGT0xMT1dFUl9BVVRIT1JJVFlfTU9OSVRPUl9DT05GSUcuaW50ZXJ2YWxNcyArIChoYXNoICUgKEZPTExPV0VSX0FVVEhPUklUWV9NT05JVE9SX0NPTkZJRy5qaXR0ZXJNcyArIDEpKTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBzdGFydGluZyB0aGUgdW5pZmllZCBjb25zb2xlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRDb25zb2xlT3B0aW9ucyB7XG4gIC8qKiBUaGlzIHByb2Nlc3MncyB1bmlxdWUgc2Vzc2lvbiBJRCAqL1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBEb2xsaG91c2Ugc2Vzc2lvbiBpZGVudGl0eSBzaG93biB0byBodW1hbnMgYW5kIHVzZWQgZm9yIHBlcnNpc3RlbmNlLiAqL1xuICBzdGFibGVTZXNzaW9uSWQ6IHN0cmluZztcbiAgLyoqIFBvcnRmb2xpbyBiYXNlIGRpcmVjdG9yeSAoZm9yIHN0YXJ0V2ViU2VydmVyKSAqL1xuICBwb3J0Zm9saW9EaXI6IHN0cmluZztcbiAgLyoqIExvZyBtZW1vcnkgc2luayAoZm9yIGNvbnNvbGUgaGlzdG9yeSkgKi9cbiAgbWVtb3J5U2luazogTWVtb3J5TG9nU2luaztcbiAgLyoqIE1ldHJpY3MgbWVtb3J5IHNpbmsgKi9cbiAgbWV0cmljc1Npbms/OiBNZW1vcnlNZXRyaWNzU2luaztcbiAgLyoqIE1DUC1BUUwgaGFuZGxlciBmb3IgcGVybWlzc2lvbiByb3V0ZXMgKHR5cGVkIGFzIGFueSB0byBhdm9pZCBjaXJjdWxhciBpbXBvcnRzKSAqL1xuICBtY3BBcWxIYW5kbGVyPzogYW55O1xuICAvKiogQ2FsbGJhY2sgdG8gcmVnaXN0ZXIgYSBsb2cgc2luayB3aXRoIHRoZSBMb2dNYW5hZ2VyICovXG4gIHJlZ2lzdGVyTG9nU2luazogKHNpbms6IHsgd3JpdGUoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSk6IHZvaWQ7IGZsdXNoKCk6IFByb21pc2U8dm9pZD47IGNsb3NlKCk6IFByb21pc2U8dm9pZD4gfSkgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHRvIHdpcmUgU1NFIGJyb2FkY2FzdHMgYWZ0ZXIgd2ViIHNlcnZlciBzdGFydHMgKi9cbiAgd2lyZVNTRUJyb2FkY2FzdHM6ICh3ZWJSZXN1bHQ6IHsgbG9nQnJvYWRjYXN0PzogKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHZvaWQ7IG1ldHJpY3NPblNuYXBzaG90PzogKHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdCkgPT4gdm9pZCB9LCBtZXRyaWNzU2luaz86IE1lbW9yeU1ldHJpY3NTaW5rKSA9PiB2b2lkO1xuICAvKiogQ29uc29sZSBwb3J0IG92ZXJyaWRlIGZyb20gY29uZmlnIGZpbGUuIEZhbGxzIGJhY2sgdG8gZW52IHZhciBpZiBub3QgcHJvdmlkZWQuICovXG4gIHBvcnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHN0YXJ0aW5nIHRoZSB1bmlmaWVkIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZENvbnNvbGVSZXN1bHQge1xuICByb2xlOiAnbGVhZGVyJyB8ICdmb2xsb3dlcic7XG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdDtcbiAgLyoqIFBvcnQgdGhlIGNvbnNvbGUgaXMgcnVubmluZyBvbiAobGVhZGVyIG9ubHkpICovXG4gIHBvcnQ/OiBudW1iZXI7XG4gIC8qKiBDbGVhbnVwIGZ1bmN0aW9uIHRvIGNhbGwgb24gc2h1dGRvd24gKi9cbiAgY2xlYW51cDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBDaGVjayBmb3IgYSBydW5uaW5nIGxlZ2FjeSAocHJlLWF1dGhlbnRpY2F0aW9uKSBEb2xsaG91c2VNQ1AgY29uc29sZSBhbmRcbiAqIGxvZyBhIFdBUk4tbGV2ZWwgbWVzc2FnZSBpZiBvbmUgaXMgZm91bmQgKCMxNzk0KS5cbiAqXG4gKiBFeHRyYWN0ZWQgZnJvbSBgc3RhcnRVbmlmaWVkQ29uc29sZWAgc28gdGhlIHdpcmluZyBjYW4gYmUgaW50ZWdyYXRpb24tXG4gKiB0ZXN0ZWQgaW4gaXNvbGF0aW9uIHdpdGhvdXQgc3Bpbm5pbmcgdXAgYSBmdWxsIHdlYiBzZXJ2ZXIgYW5kIGxlYWRlclxuICogZWxlY3Rpb24uIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBmaXJlLWFuZC1mb3JnZXQ6IGRldGVjdGlvbiBmYWlsdXJlc1xuICogYXJlIGxvZ2dlZCBhdCBERUJVRyBhbmQgbmV2ZXIgcHJvcGFnYXRlLCBiZWNhdXNlIGEgZmFpbHVyZSBoZXJlIG11c3RcbiAqIG5vdCBibG9jayBsZWFkZXIgZWxlY3Rpb24gb2YgdGhlIGF1dGhlbnRpY2F0ZWQgY29uc29sZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudFBvcnQgLSBUaGUgcG9ydCB0aGUgYXV0aGVudGljYXRlZCBjb25zb2xlIGludGVuZHMgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgIGJpbmQgdG8uIFVzZWQgaW4gdGhlIHdhcm5pbmcgbWVzc2FnZSB0byBoZWxwIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgdXNlciB0ZWxsIHRoZSB0d28gY29uc29sZXMgYXBhcnQuXG4gKiBAcGFyYW0gZGV0ZWN0ICAgICAgLSBPcHRpb25hbCBpbmplY3Rpb24gcG9pbnQgZm9yIHRoZSBkZXRlY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byBgZGV0ZWN0TGVnYWN5TGVhZGVyYC4gVGVzdHNcbiAqICAgICAgICAgICAgICAgICAgICAgIHBhc3MgYSBzdHViLlxuICogQHBhcmFtIGxvZyAgICAgICAgIC0gT3B0aW9uYWwgaW5qZWN0aW9uIHBvaW50IGZvciB0aGUgbG9nZ2VyLiBEZWZhdWx0c1xuICogICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIG1vZHVsZSBsb2dnZXIuIFRlc3RzIHBhc3MgYSBzcHkuXG4gKiBAcmV0dXJucyBUaGUgbGVnYWN5IGxlYWRlciBpbmZvIGZyb20gYGRldGVjdCgpYCwgb3IgbnVsbCBpZiBkZXRlY3Rpb25cbiAqICAgICAgICAgIHRocmV3LiBFeHBvc2VkIHNvIHRlc3RzIGNhbiBhc3NlcnQgdGhlIGZ1bGwgcmVzdWx0IHNoYXBlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FybklmTGVnYWN5Q29uc29sZVByZXNlbnQoXG4gIGN1cnJlbnRQb3J0OiBudW1iZXIsXG4gIGRldGVjdDogdHlwZW9mIGRldGVjdExlZ2FjeUxlYWRlciA9IGRldGVjdExlZ2FjeUxlYWRlcixcbiAgbG9nOiB0eXBlb2YgbG9nZ2VyID0gbG9nZ2VyLFxuKTogUHJvbWlzZTxBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGRldGVjdExlZ2FjeUxlYWRlcj4+IHwgbnVsbD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGxlZ2FjeSA9IGF3YWl0IGRldGVjdCgpO1xuICAgIGlmIChsZWdhY3kubGVnYWN5UnVubmluZykge1xuICAgICAgbG9nLndhcm4oXG4gICAgICAgIGBbVW5pZmllZENvbnNvbGVdIExlZ2FjeSAocHJlLWF1dGhlbnRpY2F0aW9uKSBEb2xsaG91c2VNQ1AgY29uc29sZSBkZXRlY3RlZCBgICtcbiAgICAgICAgYChwaWQ9JHtsZWdhY3kucGlkfSwgcG9ydD0ke2xlZ2FjeS5wb3J0fSkuIEJvdGggY29uc29sZXMgd2lsbCBydW4gYCArXG4gICAgICAgIGBpbmRlcGVuZGVudGx5IG9uIGRpZmZlcmVudCBwb3J0cyB3aXRoIGRpZmZlcmVudCBzZWN1cml0eSBwb3N0dXJlLiBgICtcbiAgICAgICAgYFRoZSBhdXRoZW50aWNhdGVkIGNvbnNvbGUgKHRoaXMgcHJvY2VzcykgdXNlcyBwb3J0ICR7Y3VycmVudFBvcnR9OyBgICtcbiAgICAgICAgYHRoZSBsZWdhY3kgY29uc29sZSB1c2VzIHBvcnQgJHtsZWdhY3kucG9ydCA/PyBMRUdBQ1lfQ09OU09MRV9GQUxMQkFDS19QT1JUfS4gYCArXG4gICAgICAgIGBGb3IgY29uc2lzdGVudCBzZWN1cml0eSwgdXBkYXRlIHRoZSBsZWdhY3kgaW5zdGFsbGF0aW9uIHRvIGEgYCArXG4gICAgICAgIGB2ZXJzaW9uIHdpdGggdGhlIGF1dGhlbnRpY2F0ZWQgY29uc29sZS5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGxlZ2FjeTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gQmVzdC1lZmZvcnQg4oCUIG5ldmVyIGJsb2NrIGVsZWN0aW9uIG9uIGEgZGV0ZWN0aW9uIGZhaWx1cmVcbiAgICBsb2cuZGVidWcoJ1tVbmlmaWVkQ29uc29sZV0gTGVnYWN5IGxlYWRlciBkZXRlY3Rpb24gZmFpbGVkJywge1xuICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICB9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgU2Vzc2lvbkFwaVJlY29yZCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBwaWQ6IG51bWJlcjtcbiAgc3RhcnRlZEF0Pzogc3RyaW5nO1xuICBsYXN0SGVhcnRiZWF0Pzogc3RyaW5nO1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIGlzTGVhZGVyPzogYm9vbGVhbjtcbiAga2luZD86IHN0cmluZztcbiAgc2VydmVyVmVyc2lvbj86IHN0cmluZztcbiAgY29uc29sZVByb3RvY29sVmVyc2lvbj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb3J0TGVhZGVyRGlzY292ZXJ5IHtcbiAgbGVhZGVySW5mbzogQ29uc29sZUxlYWRlckluZm8gfCBudWxsO1xuICBvd25lclBpZDogbnVtYmVyIHwgbnVsbDtcbiAgc291cmNlOiAnYXBpJyB8ICdsb2NrJyB8ICdzeW50aGV0aWMnIHwgJ25vbmUnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJpbmRGYWlsdXJlUmVjb3ZlcnlSZXN1bHQgZXh0ZW5kcyBQb3J0TGVhZGVyRGlzY292ZXJ5IHtcbiAgbG9ja0NsZWFudXBBdHRlbXB0ZWQ6IGJvb2xlYW47XG4gIGxvY2tDbGVhbnVwUGVyZm9ybWVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvcnRPd25lclJlcGxhY2VtZW50RGVjaXNpb24ge1xuICBzaG91bGRFdmljdDogYm9vbGVhbjtcbiAgb3duZXJQaWQ6IG51bWJlciB8IG51bGw7XG4gIHByZWZlcmVuY2U6IExlYWRlclByZWZlcmVuY2VEZWNpc2lvbiB8IG51bGw7XG59XG5cbmludGVyZmFjZSBGb3JjZVRha2VvdmVyQXR0ZW1wdFJlc3VsdCB7XG4gIHdlYlJlc3VsdDogV2ViU2VydmVyUmVzdWx0O1xuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQ7XG4gIGZhbGxiYWNrOiBQb3J0TGVhZGVyRGlzY292ZXJ5O1xuICByZXBsYWNlbWVudDogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbjtcbiAgcmVjb3ZlcmVkU2Vzc2lvbnM6IFNlc3Npb25JbmZvW107XG4gIGZvcmNlZEtpbGw6IEtpbGxTdGFsZVByb2Nlc3NPdXRjb21lIHwgbnVsbDtcbiAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGJvb2xlYW47XG4gIHJlYm91bmRMb2NrQ2xhaW1lZDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEZvbGxvd2VyQXV0aG9yaXR5UmVzb2x1dGlvbiB7XG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdDtcbiAgZGlzY292ZXJ5OiBQb3J0TGVhZGVyRGlzY292ZXJ5IHwgbnVsbDtcbiAgcmVwbGFjZW1lbnQ6IFBvcnRPd25lclJlcGxhY2VtZW50RGVjaXNpb24gfCBudWxsO1xuICBmb3JjZWRDbGFpbTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEZvbGxvd2VyQXV0aG9yaXR5RGVwZW5kZW5jaWVzIHtcbiAgaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlSW1wbD86IHR5cGVvZiBpc0xlYWRlcldlYkNvbnNvbGVSZWFjaGFibGU7XG4gIGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnRJbXBsPzogdHlwZW9mIGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnQ7XG4gIGZvcmNlQ2xhaW1MZWFkZXJzaGlwSW1wbD86IHR5cGVvZiBmb3JjZUNsYWltTGVhZGVyc2hpcDtcbiAgZGVsZXRlTGVhZGVyTG9ja0ltcGw/OiB0eXBlb2YgZGVsZXRlTGVhZGVyTG9jaztcbn1cblxuaW50ZXJmYWNlIEZvbGxvd2VyQXV0aG9yaXR5TW9uaXRvckRlcGVuZGVuY2llcyBleHRlbmRzIEZvbGxvd2VyQXV0aG9yaXR5RGVwZW5kZW5jaWVzIHtcbiAgcmVzb2x2ZUZvbGxvd2VyQXV0aG9yaXR5SW1wbD86IHR5cGVvZiByZXNvbHZlRm9sbG93ZXJBdXRob3JpdHk7XG4gIHNldFRpbWVvdXRJbXBsPzogdHlwZW9mIHNldFRpbWVvdXQ7XG4gIGNsZWFyVGltZW91dEltcGw/OiB0eXBlb2YgY2xlYXJUaW1lb3V0O1xuICBub3dJbXBsPzogKCkgPT4gbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgTGVhZGVyTGVhc2VSZWNvbmNpbGlhdGlvbkRlcGVuZGVuY2llcyB7XG4gIHJlYWRMZWFkZXJMb2NrSW1wbD86IHR5cGVvZiByZWFkTGVhZGVyTG9jaztcbiAgZmluZFBpZE9uUG9ydEltcGw/OiB0eXBlb2YgZmluZFBpZE9uUG9ydDtcbiAgY2xhaW1MZWFkZXJzaGlwSW1wbD86IHR5cGVvZiBjbGFpbUxlYWRlcnNoaXA7XG4gIGRlbGV0ZUxlYWRlckxvY2tJbXBsPzogdHlwZW9mIGRlbGV0ZUxlYWRlckxvY2s7XG4gIGtpbGxTdGFsZVByb2Nlc3NEZXRhaWxlZEltcGw/OiB0eXBlb2Yga2lsbFN0YWxlUHJvY2Vzc0RldGFpbGVkO1xuICBzZXRUaW1lb3V0SW1wbD86IHR5cGVvZiBzZXRUaW1lb3V0O1xuICBjbGVhclRpbWVvdXRJbXBsPzogdHlwZW9mIGNsZWFyVGltZW91dDtcbn1cblxuaW50ZXJmYWNlIERpc2NvdmVyeURlcGVuZGVuY2llcyB7XG4gIGZldGNoSW1wbD86IHR5cGVvZiBmZXRjaDtcbiAgZmluZFBpZE9uUG9ydEltcGw/OiB0eXBlb2YgZmluZFBpZE9uUG9ydDtcbiAgcmVhZExlYWRlckxvY2tJbXBsPzogdHlwZW9mIHJlYWRMZWFkZXJMb2NrO1xufVxuXG5mdW5jdGlvbiBidWlsZERpc2NvdmVyeUhlYWRlcnMoYXV0aFRva2VuOiBzdHJpbmcgfCBudWxsKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiBhdXRoVG9rZW4gPyB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthdXRoVG9rZW59YCB9IDoge307XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaExlYWRlclNlc3Npb25zU25hcHNob3QoXG4gIHBvcnQ6IG51bWJlcixcbiAgYXV0aFRva2VuOiBzdHJpbmcgfCBudWxsLFxuICBmZXRjaEltcGw6IHR5cGVvZiBmZXRjaCA9IGZldGNoLFxuKTogUHJvbWlzZTxTZXNzaW9uSW5mb1tdPiB7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgTEVBREVSX0RJU0NPVkVSWV9USU1FT1VUX01TKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoSW1wbChgaHR0cDovLzEyNy4wLjAuMToke3BvcnR9L2FwaS9zZXNzaW9uc2AsIHtcbiAgICAgIGhlYWRlcnM6IGJ1aWxkRGlzY292ZXJ5SGVhZGVycyhhdXRoVG9rZW4pLFxuICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyB7IHNlc3Npb25zPzogU2Vzc2lvbkluZm9bXSB9O1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEuc2Vzc2lvbnMpID8gZGF0YS5zZXNzaW9ucyA6IFtdO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTGVhZGVySW5mb0Zyb21TZXNzaW9uKHBvcnQ6IG51bWJlciwgb3duZXJQaWQ6IG51bWJlciwgbGVhZGVyU2Vzc2lvbjogU2Vzc2lvbkFwaVJlY29yZCk6IENvbnNvbGVMZWFkZXJJbmZvIHtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBMT0NLX1ZFUlNJT04sXG4gICAgcGlkOiBvd25lclBpZCxcbiAgICBwb3J0LFxuICAgIHNlc3Npb25JZDogVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobGVhZGVyU2Vzc2lvbi5zZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgIHN0YXJ0ZWRBdDogbGVhZGVyU2Vzc2lvbi5zdGFydGVkQXQgPz8gY3VycmVudFRpbWVzdGFtcCgpLFxuICAgIGhlYXJ0YmVhdDogbGVhZGVyU2Vzc2lvbi5sYXN0SGVhcnRiZWF0ID8/IGN1cnJlbnRUaW1lc3RhbXAoKSxcbiAgICBzZXJ2ZXJWZXJzaW9uOiBsZWFkZXJTZXNzaW9uLnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IGxlYWRlclNlc3Npb24uY29uc29sZVByb3RvY29sVmVyc2lvbiA/PyBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU3ludGhldGljTGVhZGVySW5mbyhwb3J0OiBudW1iZXIsIG93bmVyUGlkOiBudW1iZXIpOiBDb25zb2xlTGVhZGVySW5mbyB7XG4gIGNvbnN0IG5vdyA9IGN1cnJlbnRUaW1lc3RhbXAoKTtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBMT0NLX1ZFUlNJT04sXG4gICAgcGlkOiBvd25lclBpZCxcbiAgICBwb3J0LFxuICAgIHNlc3Npb25JZDogYCR7U1lOVEhFVElDX1BPUlRfT1dORVJfU0VTU0lPTl9QUkVGSVh9JHtvd25lclBpZH1gLFxuICAgIHN0YXJ0ZWRBdDogbm93LFxuICAgIGhlYXJ0YmVhdDogbm93LFxuICAgIHNlcnZlclZlcnNpb246IExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uOiBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRpc2NvdmVyTGVhZGVyVmlhU2Vzc2lvbnNBcGkoXG4gIHBvcnQ6IG51bWJlcixcbiAgb3duZXJQaWQ6IG51bWJlcixcbiAgYXV0aFRva2VuOiBzdHJpbmcgfCBudWxsLFxuICBmZXRjaEltcGw6IHR5cGVvZiBmZXRjaCxcbik6IFByb21pc2U8Q29uc29sZUxlYWRlckluZm8gfCBudWxsPiB7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgTEVBREVSX0RJU0NPVkVSWV9USU1FT1VUX01TKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hJbXBsKGBodHRwOi8vMTI3LjAuMC4xOiR7cG9ydH0vYXBpL3Nlc3Npb25zYCwge1xuICAgICAgaGVhZGVyczogYnVpbGREaXNjb3ZlcnlIZWFkZXJzKGF1dGhUb2tlbiksXG4gICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgeyBzZXNzaW9ucz86IFNlc3Npb25BcGlSZWNvcmRbXSB9O1xuICAgIGNvbnN0IHNlc3Npb25zID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLnNlc3Npb25zKSA/IHBheWxvYWQuc2Vzc2lvbnMgOiBbXTtcbiAgICBjb25zdCBsZWFkZXJTZXNzaW9uID0gc2Vzc2lvbnMuZmluZCgoc2Vzc2lvbikgPT5cbiAgICAgIHNlc3Npb24ucGlkID09PSBvd25lclBpZCAmJlxuICAgICAgc2Vzc2lvbi5pc0xlYWRlciA9PT0gdHJ1ZSAmJlxuICAgICAgc2Vzc2lvbi5raW5kID09PSAnbWNwJyAmJlxuICAgICAgc2Vzc2lvbi5zdGF0dXMgIT09ICdzdG9wcGVkJ1xuICAgICk7XG4gICAgcmV0dXJuIGxlYWRlclNlc3Npb24gPyBidWlsZExlYWRlckluZm9Gcm9tU2Vzc2lvbihwb3J0LCBvd25lclBpZCwgbGVhZGVyU2Vzc2lvbikgOiBudWxsO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydChcbiAgcG9ydDogbnVtYmVyLFxuICBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwsXG4gIGRlcHM6IERpc2NvdmVyeURlcGVuZGVuY2llcyA9IHt9LFxuKTogUHJvbWlzZTxQb3J0TGVhZGVyRGlzY292ZXJ5PiB7XG4gIGNvbnN0IGZldGNoSW1wbCA9IGRlcHMuZmV0Y2hJbXBsID8/IGZldGNoO1xuICBjb25zdCBmaW5kUGlkT25Qb3J0SW1wbCA9IGRlcHMuZmluZFBpZE9uUG9ydEltcGwgPz8gZmluZFBpZE9uUG9ydDtcbiAgY29uc3QgcmVhZExlYWRlckxvY2tJbXBsID0gZGVwcy5yZWFkTGVhZGVyTG9ja0ltcGwgPz8gcmVhZExlYWRlckxvY2s7XG4gIGNvbnN0IG93bmVyUGlkID0gYXdhaXQgZmluZFBpZE9uUG9ydEltcGwocG9ydCk7XG5cbiAgaWYgKG93bmVyUGlkICE9PSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxlYWRlckluZm8gPSBhd2FpdCBkaXNjb3ZlckxlYWRlclZpYVNlc3Npb25zQXBpKHBvcnQsIG93bmVyUGlkLCBhdXRoVG9rZW4sIGZldGNoSW1wbCk7XG4gICAgICBpZiAobGVhZGVySW5mbykge1xuICAgICAgICByZXR1cm4geyBvd25lclBpZCwgc291cmNlOiAnYXBpJywgbGVhZGVySW5mbyB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIEZhaWxlZCB0byBxdWVyeSBhY3RpdmUgbGVhZGVyIHNlc3Npb25zJywge1xuICAgICAgICBwb3J0LFxuICAgICAgICBvd25lclBpZCxcbiAgICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGxvY2sgPSBhd2FpdCByZWFkTGVhZGVyTG9ja0ltcGwoKTtcbiAgaWYgKGxvY2s/LnBvcnQgPT09IHBvcnQgJiYgKG93bmVyUGlkID09PSBudWxsIHx8IGxvY2sucGlkID09PSBvd25lclBpZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duZXJQaWQ6IG93bmVyUGlkID8/IGxvY2sucGlkLFxuICAgICAgc291cmNlOiAnbG9jaycsXG4gICAgICBsZWFkZXJJbmZvOiB7XG4gICAgICAgIC4uLmxvY2ssXG4gICAgICAgIHNlc3Npb25JZDogVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobG9jay5zZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKG93bmVyUGlkICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bmVyUGlkLFxuICAgICAgc291cmNlOiAnc3ludGhldGljJyxcbiAgICAgIGxlYWRlckluZm86IGJ1aWxkU3ludGhldGljTGVhZGVySW5mbyhwb3J0LCBvd25lclBpZCksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7IGxlYWRlckluZm86IG51bGwsIG93bmVyUGlkOiBudWxsLCBzb3VyY2U6ICdub25lJyB9O1xufVxuXG5pbnRlcmZhY2UgQmluZEZhaWx1cmVSZWNvdmVyeURlcGVuZGVuY2llcyBleHRlbmRzIERpc2NvdmVyeURlcGVuZGVuY2llcyB7XG4gIGRlbGV0ZUxlYWRlckxvY2tJbXBsPzogdHlwZW9mIGRlbGV0ZUxlYWRlckxvY2s7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvdmVyTGVhZGVyQmluZEZhaWx1cmUoXG4gIHByb3Zpc2lvbmFsTGVhZGVyOiBDb25zb2xlTGVhZGVySW5mbyxcbiAgcG9ydDogbnVtYmVyLFxuICBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwsXG4gIGRlcHM6IEJpbmRGYWlsdXJlUmVjb3ZlcnlEZXBlbmRlbmNpZXMgPSB7fSxcbik6IFByb21pc2U8QmluZEZhaWx1cmVSZWNvdmVyeVJlc3VsdD4ge1xuICBjb25zdCByZWFkTGVhZGVyTG9ja0ltcGwgPSBkZXBzLnJlYWRMZWFkZXJMb2NrSW1wbCA/PyByZWFkTGVhZGVyTG9jaztcbiAgY29uc3QgZGVsZXRlTGVhZGVyTG9ja0ltcGwgPSBkZXBzLmRlbGV0ZUxlYWRlckxvY2tJbXBsID8/IGRlbGV0ZUxlYWRlckxvY2s7XG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciBiaW5kIHJlY292ZXJ5IGluaXRpYXRlZCcsIHtcbiAgICBwcm92aXNpb25hbFNlc3Npb25JZDogcHJvdmlzaW9uYWxMZWFkZXIuc2Vzc2lvbklkLFxuICAgIHByb3Zpc2lvbmFsUGlkOiBwcm92aXNpb25hbExlYWRlci5waWQsXG4gICAgcG9ydCxcbiAgfSk7XG5cbiAgbGV0IGZhbGxiYWNrID0gYXdhaXQgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydChwb3J0LCBhdXRoVG9rZW4sIGRlcHMpO1xuICBsZXQgbG9ja0NsZWFudXBBdHRlbXB0ZWQgPSBmYWxzZTtcbiAgbGV0IGxvY2tDbGVhbnVwUGVyZm9ybWVkID0gZmFsc2U7XG4gIGNvbnN0IGN1cnJlbnRMb2NrID0gYXdhaXQgcmVhZExlYWRlckxvY2tJbXBsKCk7XG4gIGNvbnN0IHByb3Zpc2lvbmFsTG9ja01hdGNoZXMgPSAoXG4gICAgY3VycmVudExvY2s/LnBpZCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucGlkICYmXG4gICAgY3VycmVudExvY2sucG9ydCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucG9ydCAmJlxuICAgIGN1cnJlbnRMb2NrLnNlc3Npb25JZCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIuc2Vzc2lvbklkXG4gICk7XG4gIGNvbnN0IGZhbGxiYWNrUG9pbnRzVG9Qcm92aXNpb25hbExlYWRlciA9IChcbiAgICBmYWxsYmFjay5sZWFkZXJJbmZvPy5waWQgPT09IHByb3Zpc2lvbmFsTGVhZGVyLnBpZCAmJlxuICAgIGZhbGxiYWNrLmxlYWRlckluZm8ucG9ydCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucG9ydCAmJlxuICAgIGZhbGxiYWNrLmxlYWRlckluZm8uc2Vzc2lvbklkID09PSBwcm92aXNpb25hbExlYWRlci5zZXNzaW9uSWRcbiAgKTtcblxuICBpZiAocHJvdmlzaW9uYWxMb2NrTWF0Y2hlcykge1xuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICBhd2FpdCBkZWxldGVMZWFkZXJMb2NrSW1wbCgpO1xuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkID0gdHJ1ZTtcbiAgICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBSZW1vdmVkIHByb3Zpc2lvbmFsIGxlYWRlciBsb2NrIGFmdGVyIGJpbmQgZmFpbHVyZScsIHtcbiAgICAgIHByb3Zpc2lvbmFsU2Vzc2lvbklkOiBwcm92aXNpb25hbExlYWRlci5zZXNzaW9uSWQsXG4gICAgICBwcm92aXNpb25hbFBpZDogcHJvdmlzaW9uYWxMZWFkZXIucGlkLFxuICAgICAgcG9ydCxcbiAgICB9KTtcbiAgICBpZiAoZmFsbGJhY2tQb2ludHNUb1Byb3Zpc2lvbmFsTGVhZGVyKSB7XG4gICAgICBmYWxsYmFjayA9IGF3YWl0IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnQocG9ydCwgYXV0aFRva2VuLCBkZXBzKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBMZWFkZXIgYmluZCByZWNvdmVyeSBjb21wbGV0ZWQnLCB7XG4gICAgcHJvdmlzaW9uYWxTZXNzaW9uSWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnNlc3Npb25JZCxcbiAgICBwcm92aXNpb25hbFBpZDogcHJvdmlzaW9uYWxMZWFkZXIucGlkLFxuICAgIHBvcnQsXG4gICAgZGlzY292ZXJ5U291cmNlOiBmYWxsYmFjay5zb3VyY2UsXG4gICAgb3duZXJQaWQ6IGZhbGxiYWNrLm93bmVyUGlkLFxuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkLFxuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLmZhbGxiYWNrLFxuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkLFxuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVQb3J0T3duZXJSZXBsYWNlbWVudChcbiAgY2FuZGlkYXRlTGVhZGVyOiBDb25zb2xlTGVhZGVySW5mbyxcbiAgZmFsbGJhY2s6IFBvcnRMZWFkZXJEaXNjb3ZlcnksXG4pOiBQb3J0T3duZXJSZXBsYWNlbWVudERlY2lzaW9uIHtcbiAgaWYgKCFmYWxsYmFjay5sZWFkZXJJbmZvIHx8IGZhbGxiYWNrLm93bmVyUGlkID09PSBudWxsIHx8IGZhbGxiYWNrLm93bmVyUGlkID09PSBjYW5kaWRhdGVMZWFkZXIucGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3VsZEV2aWN0OiBmYWxzZSxcbiAgICAgIG93bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICAgIHByZWZlcmVuY2U6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHByZWZlcmVuY2UgPSBldmFsdWF0ZUxlYWRlclByZWZlcmVuY2UoY2FuZGlkYXRlTGVhZGVyLCBmYWxsYmFjay5sZWFkZXJJbmZvKTtcbiAgcmV0dXJuIHtcbiAgICBzaG91bGRFdmljdDogcHJlZmVyZW5jZS5zaG91bGRSZXBsYWNlLFxuICAgIG93bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICBwcmVmZXJlbmNlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgcHJvdmlzaW9uYWxMZWFkZXI6IENvbnNvbGVMZWFkZXJJbmZvLFxuICBiaW5kUmVzdWx0OiBXZWJTZXJ2ZXJSZXN1bHRbJ2JpbmRSZXN1bHQnXSxcbiAgZmFsbGJhY2s6IFBvcnRMZWFkZXJEaXNjb3ZlcnksXG4gIHJlcGxhY2VtZW50PzogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbixcbiAgZm9yY2VkS2lsbD86IEtpbGxTdGFsZVByb2Nlc3NPdXRjb21lIHwgbnVsbCxcbikge1xuICByZXR1cm4ge1xuICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgIGJpbmRFcnJvcjogYmluZFJlc3VsdD8uZXJyb3IsXG4gICAgYmluZERldGFpbDogYmluZFJlc3VsdD8uZGV0YWlsLFxuICAgIHByb3Zpc2lvbmFsTGVhZGVyUGlkOiBwcm92aXNpb25hbExlYWRlci5waWQsXG4gICAgcHJvdmlzaW9uYWxMZWFkZXJTZXNzaW9uSWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnNlc3Npb25JZCxcbiAgICBwcm92aXNpb25hbExlYWRlclZlcnNpb246IHByb3Zpc2lvbmFsTGVhZGVyLnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIHByb3Zpc2lvbmFsTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBwcm92aXNpb25hbExlYWRlci5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICBmYWxsYmFja093bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICBmYWxsYmFja1NvdXJjZTogZmFsbGJhY2suc291cmNlLFxuICAgIGZhbGxiYWNrTGVhZGVyUGlkOiBmYWxsYmFjay5sZWFkZXJJbmZvPy5waWQsXG4gICAgZmFsbGJhY2tMZWFkZXJTZXNzaW9uSWQ6IGZhbGxiYWNrLmxlYWRlckluZm8/LnNlc3Npb25JZCxcbiAgICBmYWxsYmFja0xlYWRlclZlcnNpb246IGZhbGxiYWNrLmxlYWRlckluZm8/LnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIGZhbGxiYWNrTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBmYWxsYmFjay5sZWFkZXJJbmZvPy5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICByZXBsYWNlbWVudFNob3VsZEV2aWN0OiByZXBsYWNlbWVudD8uc2hvdWxkRXZpY3QgPz8gZmFsc2UsXG4gICAgcmVwbGFjZW1lbnRSZWFzb246IHJlcGxhY2VtZW50Py5wcmVmZXJlbmNlPy5yZWFzb24sXG4gICAgZm9yY2VkS2lsbFJlYXNvbjogZm9yY2VkS2lsbD8ucmVhc29uLFxuICAgIGZvcmNlZEtpbGxQaWQ6IGZvcmNlZEtpbGw/LnBpZCxcbiAgICBmb3JjZWRLaWxsRGV0YWlsOiBmb3JjZWRLaWxsPy5kZXRhaWwsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQXV0aG9yaXR5UmVzb2x1dGlvbkxvZ0NvbnRleHQoXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIGVsZWN0ZWRMZWFkZXI6IENvbnNvbGVMZWFkZXJJbmZvLFxuICBkaXNjb3Zlcnk6IFBvcnRMZWFkZXJEaXNjb3ZlcnkgfCBudWxsLFxuICByZXBsYWNlbWVudDogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbiB8IG51bGwsXG4pIHtcbiAgcmV0dXJuIHtcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBlbGVjdGVkTGVhZGVyUGlkOiBlbGVjdGVkTGVhZGVyLnBpZCxcbiAgICBlbGVjdGVkTGVhZGVyU2Vzc2lvbklkOiBlbGVjdGVkTGVhZGVyLnNlc3Npb25JZCxcbiAgICBlbGVjdGVkTGVhZGVyVmVyc2lvbjogZWxlY3RlZExlYWRlci5zZXJ2ZXJWZXJzaW9uID8/IExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgICBlbGVjdGVkTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBlbGVjdGVkTGVhZGVyLmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPz8gQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICAgIHNlcnZpbmdPd25lclBpZDogZGlzY292ZXJ5Py5vd25lclBpZCA/PyBudWxsLFxuICAgIHNlcnZpbmdTb3VyY2U6IGRpc2NvdmVyeT8uc291cmNlID8/ICdub25lJyxcbiAgICBzZXJ2aW5nTGVhZGVyUGlkOiBkaXNjb3Zlcnk/LmxlYWRlckluZm8/LnBpZCA/PyBudWxsLFxuICAgIHNlcnZpbmdMZWFkZXJTZXNzaW9uSWQ6IGRpc2NvdmVyeT8ubGVhZGVySW5mbz8uc2Vzc2lvbklkID8/IG51bGwsXG4gICAgc2VydmluZ0xlYWRlclZlcnNpb246IGRpc2NvdmVyeT8ubGVhZGVySW5mbz8uc2VydmVyVmVyc2lvbiA/PyBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04sXG4gICAgc2VydmluZ0xlYWRlclByb3RvY29sVmVyc2lvbjogZGlzY292ZXJ5Py5sZWFkZXJJbmZvPy5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICByZXBsYWNlbWVudFNob3VsZEV2aWN0OiByZXBsYWNlbWVudD8uc2hvdWxkRXZpY3QgPz8gZmFsc2UsXG4gICAgcmVwbGFjZW1lbnRSZWFzb246IHJlcGxhY2VtZW50Py5wcmVmZXJlbmNlPy5yZWFzb24gPz8gbnVsbCxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVGb2xsb3dlckF1dGhvcml0eShcbiAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgZGVwczogRm9sbG93ZXJBdXRob3JpdHlEZXBlbmRlbmNpZXMgPSB7fSxcbik6IFByb21pc2U8Rm9sbG93ZXJBdXRob3JpdHlSZXNvbHV0aW9uPiB7XG4gIGNvbnN0IGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwgPSBkZXBzLmlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwgPz8gaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlO1xuICBjb25zdCBkaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0SW1wbCA9IGRlcHMuZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydEltcGwgPz8gZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydDtcbiAgY29uc3QgZm9yY2VDbGFpbUxlYWRlcnNoaXBJbXBsID0gZGVwcy5mb3JjZUNsYWltTGVhZGVyc2hpcEltcGwgPz8gZm9yY2VDbGFpbUxlYWRlcnNoaXA7XG4gIGNvbnN0IGRlbGV0ZUxlYWRlckxvY2tJbXBsID0gZGVwcy5kZWxldGVMZWFkZXJMb2NrSW1wbCA/PyBkZWxldGVMZWFkZXJMb2NrO1xuXG4gIGNvbnN0IHJlYWNoYWJsZSA9IGF3YWl0IGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwoZWxlY3Rpb24ubGVhZGVySW5mbyk7XG4gIGlmICghcmVhY2hhYmxlKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gRWxlY3RlZCBsZWFkZXIgaXMgbm90IHNlcnZpbmcgdGhlIGNvbnNvbGUgcG9ydDsgZm9yY2luZyB0YWtlb3ZlcicsIHtcbiAgICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgICAgZWxlY3RlZExlYWRlclBpZDogZWxlY3Rpb24ubGVhZGVySW5mby5waWQsXG4gICAgICBlbGVjdGVkTGVhZGVyU2Vzc2lvbklkOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnNlc3Npb25JZCxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlY3Rpb246IGF3YWl0IGZvcmNlQ2xhaW1MZWFkZXJzaGlwSW1wbChzZXNzaW9uSWQsIGNvbnNvbGVQb3J0KSxcbiAgICAgIGRpc2NvdmVyeTogbnVsbCxcbiAgICAgIHJlcGxhY2VtZW50OiBudWxsLFxuICAgICAgZm9yY2VkQ2xhaW06IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGNhbmRpZGF0ZUxlYWRlciA9IGNyZWF0ZUxlYWRlckluZm8oc2Vzc2lvbklkLCBjb25zb2xlUG9ydCk7XG4gIGNvbnN0IGRpc2NvdmVyeSA9IGF3YWl0IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnRJbXBsKGNvbnNvbGVQb3J0LCBudWxsKTtcbiAgaWYgKCFkaXNjb3ZlcnkubGVhZGVySW5mbyB8fCBkaXNjb3Zlcnkub3duZXJQaWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlY3Rpb24sXG4gICAgICBkaXNjb3ZlcnksXG4gICAgICByZXBsYWNlbWVudDogbnVsbCxcbiAgICAgIGZvcmNlZENsYWltOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcmVwbGFjZW1lbnQgPSBldmFsdWF0ZVBvcnRPd25lclJlcGxhY2VtZW50KGNhbmRpZGF0ZUxlYWRlciwgZGlzY292ZXJ5KTtcbiAgaWYgKHJlcGxhY2VtZW50LnNob3VsZEV2aWN0KSB7XG4gICAgYXdhaXQgZGVsZXRlTGVhZGVyTG9ja0ltcGwoKTtcbiAgICBsb2dnZXIud2FybihcbiAgICAgIGRpc2NvdmVyeS5vd25lclBpZCA9PT0gZWxlY3Rpb24ubGVhZGVySW5mby5waWRcbiAgICAgICAgPyAnW1VuaWZpZWRDb25zb2xlXSBPbGRlciBjb25zb2xlIGxlYWRlciBkZXRlY3RlZCBvbiB0aGUgY29uc29sZSBwb3J0OyBuZXdlciBzZXNzaW9uIHdpbGwgdGFrZSBvdmVyJ1xuICAgICAgICA6ICdbVW5pZmllZENvbnNvbGVdIFNwbGl0LWJyYWluIGNvbnNvbGUgYXV0aG9yaXR5IGRldGVjdGVkOyBuZXdlciBzZXNzaW9uIHdpbGwgcmVwbGFjZSB0aGUgYWN0dWFsIHBvcnQgb3duZXInLFxuICAgICAgYnVpbGRBdXRob3JpdHlSZXNvbHV0aW9uTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgIGRpc2NvdmVyeSxcbiAgICAgICAgcmVwbGFjZW1lbnQsXG4gICAgICApLFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZWN0aW9uOiB7IHJvbGU6ICdsZWFkZXInLCBsZWFkZXJJbmZvOiBjYW5kaWRhdGVMZWFkZXIgfSxcbiAgICAgIGRpc2NvdmVyeSxcbiAgICAgIHJlcGxhY2VtZW50LFxuICAgICAgZm9yY2VkQ2xhaW06IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBpZiAoZGlzY292ZXJ5Lm93bmVyUGlkICE9PSBlbGVjdGlvbi5sZWFkZXJJbmZvLnBpZCkge1xuICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIFNwbGl0LWJyYWluIGNvbnNvbGUgYXV0aG9yaXR5IGRldGVjdGVkOyBmb2xsb3dpbmcgdGhlIGFjdHVhbCBwb3J0IG93bmVyJywgYnVpbGRBdXRob3JpdHlSZXNvbHV0aW9uTG9nQ29udGV4dChcbiAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgZWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgIGRpc2NvdmVyeSxcbiAgICAgIHJlcGxhY2VtZW50LFxuICAgICkpO1xuICAgIHJldHVybiB7XG4gICAgICBlbGVjdGlvbjogeyByb2xlOiAnZm9sbG93ZXInLCBsZWFkZXJJbmZvOiBkaXNjb3ZlcnkubGVhZGVySW5mbyB9LFxuICAgICAgZGlzY292ZXJ5LFxuICAgICAgcmVwbGFjZW1lbnQsXG4gICAgICBmb3JjZWRDbGFpbTogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZWxlY3Rpb24sXG4gICAgZGlzY292ZXJ5LFxuICAgIHJlcGxhY2VtZW50LFxuICAgIGZvcmNlZENsYWltOiBmYWxzZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0Rm9sbG93ZXJBdXRob3JpdHlNb25pdG9yKFxuICBvcHRpb25zOiBVbmlmaWVkQ29uc29sZU9wdGlvbnMsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgcHJvbW90aW9uTWdyOiBQcm9tb3Rpb25NYW5hZ2VyLFxuICBmb3J3YXJkaW5nU2luazogTGVhZGVyRm9yd2FyZGluZ0xvZ1NpbmssXG4gIHNlc3Npb25IZWFydGJlYXQ6IFNlc3Npb25IZWFydGJlYXQsXG4gIGRlcHM6IEZvbGxvd2VyQXV0aG9yaXR5TW9uaXRvckRlcGVuZGVuY2llcyA9IHt9LFxuKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IHJlc29sdmVGb2xsb3dlckF1dGhvcml0eUltcGwgPSBkZXBzLnJlc29sdmVGb2xsb3dlckF1dGhvcml0eUltcGwgPz8gcmVzb2x2ZUZvbGxvd2VyQXV0aG9yaXR5O1xuICBjb25zdCBzZXRUaW1lb3V0SW1wbCA9IGRlcHMuc2V0VGltZW91dEltcGwgPz8gc2V0VGltZW91dDtcbiAgY29uc3QgY2xlYXJUaW1lb3V0SW1wbCA9IGRlcHMuY2xlYXJUaW1lb3V0SW1wbCA/PyBjbGVhclRpbWVvdXQ7XG4gIGNvbnN0IG5vd0ltcGwgPSBkZXBzLm5vd0ltcGwgPz8gRGF0ZS5ub3c7XG4gIGxldCBjdXJyZW50RWxlY3Rpb24gPSBlbGVjdGlvbjtcbiAgbGV0IHByb21vdGlvblF1ZXVlZCA9IGZhbHNlO1xuICBsZXQgY29uc2VjdXRpdmVGYWlsdXJlcyA9IDA7XG4gIGxldCBjaXJjdWl0T3BlblVudGlsTXMgPSAwO1xuICBsZXQgYXV0aG9yaXR5VGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIGxldCBzdG9wcGVkID0gZmFsc2U7XG4gIGNvbnN0IHJlY2hlY2tJbnRlcnZhbE1zID0gY29tcHV0ZUZvbGxvd2VyQXV0aG9yaXR5UmVjaGVja0ludGVydmFsKG9wdGlvbnMuc2Vzc2lvbklkKTtcblxuICBjb25zdCBxdWV1ZUF1dGhvcml0eVByb21vdGlvbiA9ICgpID0+IHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICBwcm9tb3Rpb25NZ3IucHJvbW90ZShmb3J3YXJkaW5nU2luaywgc2Vzc2lvbkhlYXJ0YmVhdClcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IGxvZ2dlci5lcnJvcignW1VuaWZpZWRDb25zb2xlXSBBdXRob3JpdHktYmFzZWQgcHJvbW90aW9uIGNyYXNoZWQnLCB7XG4gICAgICAgICAgZXJyb3I6IFN0cmluZyhlcnIpLFxuICAgICAgICB9KSk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVzb2x2ZWRBdXRob3JpdHkgPSAocmVzb2x2ZWQ6IEZvbGxvd2VyQXV0aG9yaXR5UmVzb2x1dGlvbikgPT4ge1xuICAgIGN1cnJlbnRFbGVjdGlvbiA9IHJlc29sdmVkLmVsZWN0aW9uO1xuICAgIGNvbnNlY3V0aXZlRmFpbHVyZXMgPSAwO1xuICAgIGNpcmN1aXRPcGVuVW50aWxNcyA9IDA7XG5cbiAgICBpZiAocmVzb2x2ZWQuZWxlY3Rpb24ucm9sZSAhPT0gJ2xlYWRlcicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9tb3Rpb25RdWV1ZWQgPSB0cnVlO1xuICAgIGlmIChhdXRob3JpdHlUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0SW1wbChhdXRob3JpdHlUaW1lcik7XG4gICAgICBhdXRob3JpdHlUaW1lciA9IG51bGw7XG4gICAgfVxuXG4gICAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gRm9sbG93ZXIgYXV0aG9yaXR5IHJlLWV2YWx1YXRpb24gcXVldWVkIGEgbGVhZGVyIHRha2VvdmVyJywge1xuICAgICAgc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCxcbiAgICAgIHN0YWJsZVNlc3Npb25JZDogb3B0aW9ucy5zdGFibGVTZXNzaW9uSWQsXG4gICAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICAgIHJlY2hlY2tJbnRlcnZhbE1zLFxuICAgICAgZWxlY3RlZExlYWRlclBpZDogZWxlY3Rpb24ubGVhZGVySW5mby5waWQsXG4gICAgICBlbGVjdGVkTGVhZGVyU2Vzc2lvbklkOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnNlc3Npb25JZCxcbiAgICAgIHJlc29sdmVkTGVhZGVyUGlkOiByZXNvbHZlZC5lbGVjdGlvbi5sZWFkZXJJbmZvLnBpZCxcbiAgICAgIHJlc29sdmVkTGVhZGVyU2Vzc2lvbklkOiByZXNvbHZlZC5lbGVjdGlvbi5sZWFkZXJJbmZvLnNlc3Npb25JZCxcbiAgICAgIHJlcGxhY2VtZW50UmVhc29uOiByZXNvbHZlZC5yZXBsYWNlbWVudD8ucHJlZmVyZW5jZT8ucmVhc29uID8/IG51bGwsXG4gICAgICBmb3JjZWRDbGFpbTogcmVzb2x2ZWQuZm9yY2VkQ2xhaW0sXG4gICAgfSk7XG5cbiAgICBxdWV1ZUF1dGhvcml0eVByb21vdGlvbigpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUF1dGhvcml0eUZhaWx1cmUgPSAoZXJyOiB1bmtub3duKSA9PiB7XG4gICAgY29uc2VjdXRpdmVGYWlsdXJlcyArPSAxO1xuICAgIGlmIChjb25zZWN1dGl2ZUZhaWx1cmVzID49IEZPTExPV0VSX0FVVEhPUklUWV9NT05JVE9SX0NPTkZJRy5mYWlsdXJlVGhyZXNob2xkKSB7XG4gICAgICBjaXJjdWl0T3BlblVudGlsTXMgPSBub3dJbXBsKCkgKyBGT0xMT1dFUl9BVVRIT1JJVFlfTU9OSVRPUl9DT05GSUcuZmFpbHVyZUNvb2xkb3duTXM7XG4gICAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBGb2xsb3dlciBhdXRob3JpdHkgcmUtZXZhbHVhdGlvbiBjaXJjdWl0IG9wZW5lZCBhZnRlciByZXBlYXRlZCBmYWlsdXJlcycsIHtcbiAgICAgICAgc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCxcbiAgICAgICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgICAgIHJlY2hlY2tJbnRlcnZhbE1zLFxuICAgICAgICBjb25zZWN1dGl2ZUZhaWx1cmVzLFxuICAgICAgICBjaXJjdWl0T3BlblVudGlsTXM6IG5ldyBEYXRlKGNpcmN1aXRPcGVuVW50aWxNcykudG9JU09TdHJpbmcoKSxcbiAgICAgIH0pO1xuICAgICAgY29uc2VjdXRpdmVGYWlsdXJlcyA9IDA7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIEZvbGxvd2VyIGF1dGhvcml0eSByZS1ldmFsdWF0aW9uIGZhaWxlZCcsIHtcbiAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLFxuICAgICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgICByZWNoZWNrSW50ZXJ2YWxNcyxcbiAgICAgIGNpcmN1aXRPcGVuVW50aWxNczogY2lyY3VpdE9wZW5VbnRpbE1zID8gbmV3IERhdGUoY2lyY3VpdE9wZW5VbnRpbE1zKS50b0lTT1N0cmluZygpIDogbnVsbCxcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBzY2hlZHVsZU5leHRDaGVjayA9IChkZWxheU1zOiBudW1iZXIpID0+IHtcbiAgICBpZiAoc3RvcHBlZCB8fCBwcm9tb3Rpb25RdWV1ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXV0aG9yaXR5VGltZXIgPSBzZXRUaW1lb3V0SW1wbChydW5BdXRob3JpdHlDaGVjaywgZGVsYXlNcyk7XG4gICAgYXV0aG9yaXR5VGltZXIudW5yZWYoKTtcbiAgfTtcblxuICBjb25zdCBydW5BdXRob3JpdHlDaGVjayA9ICgpID0+IHtcbiAgICBhdXRob3JpdHlUaW1lciA9IG51bGw7XG4gICAgaWYgKHN0b3BwZWQgfHwgcHJvbW90aW9uUXVldWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjaXJjdWl0T3BlblVudGlsTXMgPiBub3dJbXBsKCkpIHtcbiAgICAgIHNjaGVkdWxlTmV4dENoZWNrKHJlY2hlY2tJbnRlcnZhbE1zKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2lyY3VpdE9wZW5VbnRpbE1zICE9PSAwKSB7XG4gICAgICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBGb2xsb3dlciBhdXRob3JpdHkgcmUtZXZhbHVhdGlvbiBjaXJjdWl0IGNsb3NlZDsgcmVzdW1pbmcgY2hlY2tzJywge1xuICAgICAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLFxuICAgICAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICAgICAgcmVjaGVja0ludGVydmFsTXMsXG4gICAgICB9KTtcbiAgICAgIGNpcmN1aXRPcGVuVW50aWxNcyA9IDA7XG4gICAgfVxuXG4gICAgcmVzb2x2ZUZvbGxvd2VyQXV0aG9yaXR5SW1wbChvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQsIGN1cnJlbnRFbGVjdGlvbilcbiAgICAgIC50aGVuKGhhbmRsZVJlc29sdmVkQXV0aG9yaXR5KVxuICAgICAgLmNhdGNoKGhhbmRsZUF1dGhvcml0eUZhaWx1cmUpXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHNjaGVkdWxlTmV4dENoZWNrKHJlY2hlY2tJbnRlcnZhbE1zKTtcbiAgICAgIH0pO1xuICB9O1xuXG4gIHNjaGVkdWxlTmV4dENoZWNrKHJlY2hlY2tJbnRlcnZhbE1zKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmIChhdXRob3JpdHlUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0SW1wbChhdXRob3JpdHlUaW1lcik7XG4gICAgICBhdXRob3JpdHlUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIHN0b3BwZWQgPSB0cnVlO1xuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVjb25jaWxlTGVhZGVyTGVhc2UoXG4gIHNlc3Npb25JZDogc3RyaW5nLFxuICBjb25zb2xlUG9ydDogbnVtYmVyLFxuICBkZXBzOiBMZWFkZXJMZWFzZVJlY29uY2lsaWF0aW9uRGVwZW5kZW5jaWVzID0ge30sXG4pOiBQcm9taXNlPCdub3QtcG9ydC1vd25lcicgfCAnYWxyZWFkeS1vd25lZCcgfCAncmVjb25jaWxlZCcgfCAncmVjbGFpbS1mYWlsZWQnPiB7XG4gIGNvbnN0IHJlYWRMZWFkZXJMb2NrSW1wbCA9IGRlcHMucmVhZExlYWRlckxvY2tJbXBsID8/IHJlYWRMZWFkZXJMb2NrO1xuICBjb25zdCBmaW5kUGlkT25Qb3J0SW1wbCA9IGRlcHMuZmluZFBpZE9uUG9ydEltcGwgPz8gZmluZFBpZE9uUG9ydDtcbiAgY29uc3QgY2xhaW1MZWFkZXJzaGlwSW1wbCA9IGRlcHMuY2xhaW1MZWFkZXJzaGlwSW1wbCA/PyBjbGFpbUxlYWRlcnNoaXA7XG4gIGNvbnN0IGRlbGV0ZUxlYWRlckxvY2tJbXBsID0gZGVwcy5kZWxldGVMZWFkZXJMb2NrSW1wbCA/PyBkZWxldGVMZWFkZXJMb2NrO1xuICBjb25zdCBraWxsU3RhbGVQcm9jZXNzRGV0YWlsZWRJbXBsID0gZGVwcy5raWxsU3RhbGVQcm9jZXNzRGV0YWlsZWRJbXBsID8/IGtpbGxTdGFsZVByb2Nlc3NEZXRhaWxlZDtcblxuICBjb25zdCBwb3J0T3duZXJQaWQgPSBhd2FpdCBmaW5kUGlkT25Qb3J0SW1wbChjb25zb2xlUG9ydCk7XG4gIGlmIChwb3J0T3duZXJQaWQgIT09IHByb2Nlc3MucGlkKSB7XG4gICAgcmV0dXJuICdub3QtcG9ydC1vd25lcic7XG4gIH1cblxuICBjb25zdCBjdXJyZW50TG9jayA9IGF3YWl0IHJlYWRMZWFkZXJMb2NrSW1wbCgpO1xuICBpZiAoIWN1cnJlbnRMb2NrIHx8IGN1cnJlbnRMb2NrLnBpZCA9PT0gcHJvY2Vzcy5waWQpIHtcbiAgICByZXR1cm4gJ2FscmVhZHktb3duZWQnO1xuICB9XG5cbiAgY29uc3QgZXhwZWN0ZWRMZWFkZXIgPSBjcmVhdGVMZWFkZXJJbmZvKHNlc3Npb25JZCwgY29uc29sZVBvcnQpO1xuICBjb25zdCByZXBsYWNlbWVudCA9IGV2YWx1YXRlUG9ydE93bmVyUmVwbGFjZW1lbnQoZXhwZWN0ZWRMZWFkZXIsIHtcbiAgICBvd25lclBpZDogY3VycmVudExvY2sucGlkLFxuICAgIHNvdXJjZTogJ2xvY2snLFxuICAgIGxlYWRlckluZm86IGN1cnJlbnRMb2NrLFxuICB9KTtcblxuICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBQb3J0LW93bmluZyBsZWFkZXIgZGV0ZWN0ZWQgYSBkaXNwbGFjZWQgbG9jayB3cml0ZXI7IHJlY29uY2lsaW5nIGxlYWRlciBsZWFzZScsIHtcbiAgICBzZXNzaW9uSWQsXG4gICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgbG9ja093bmVyUGlkOiBjdXJyZW50TG9jay5waWQsXG4gICAgbG9ja093bmVyU2Vzc2lvbklkOiBjdXJyZW50TG9jay5zZXNzaW9uSWQsXG4gICAgbG9ja093bmVyVmVyc2lvbjogY3VycmVudExvY2suc2VydmVyVmVyc2lvbiA/PyBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04sXG4gICAgYWN0dWFsUG9ydE93bmVyUGlkOiBwb3J0T3duZXJQaWQsXG4gICAgcmVwbGFjZW1lbnRSZWFzb246IHJlcGxhY2VtZW50LnByZWZlcmVuY2U/LnJlYXNvbiA/PyBudWxsLFxuICB9KTtcblxuICBjb25zdCBraWxsT3V0Y29tZSA9IGF3YWl0IGtpbGxTdGFsZVByb2Nlc3NEZXRhaWxlZEltcGwoY3VycmVudExvY2sucGlkLCBjb25zb2xlUG9ydCwge1xuICAgIGFsbG93QWN0aXZlSG9zdFBhcmVudDogdHJ1ZSxcbiAgfSk7XG4gIGNvbnN0IGxvY2tBZnRlcktpbGwgPSBhd2FpdCByZWFkTGVhZGVyTG9ja0ltcGwoKTtcbiAgbGV0IGxvY2tEZWxldGVkID0gZmFsc2U7XG4gIGxldCBsb2NrQ2xhaW1BdHRlbXB0ZWQgPSBmYWxzZTtcbiAgbGV0IGxvY2tDbGFpbWVkID0gZmFsc2U7XG5cbiAgaWYgKGxvY2tBZnRlcktpbGw/LnBpZCAhPT0gcHJvY2Vzcy5waWQpIHtcbiAgICBpZiAobG9ja0FmdGVyS2lsbCkge1xuICAgICAgYXdhaXQgZGVsZXRlTGVhZGVyTG9ja0ltcGwoKTtcbiAgICAgIGxvY2tEZWxldGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgbG9ja0NsYWltQXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICBsb2NrQ2xhaW1lZCA9IGF3YWl0IGNsYWltTGVhZGVyc2hpcEltcGwoZXhwZWN0ZWRMZWFkZXIpO1xuICB9XG5cbiAgY29uc3QgZmluYWxMb2NrID0gYXdhaXQgcmVhZExlYWRlckxvY2tJbXBsKCk7XG4gIGNvbnN0IHJlY29uY2lsZWQgPSBmaW5hbExvY2s/LnBpZCA9PT0gcHJvY2Vzcy5waWQ7XG5cbiAgbG9nZ2VyLmluZm8oJ1tVbmlmaWVkQ29uc29sZV0gTGVhZGVyIGxlYXNlIHJlY29uY2lsaWF0aW9uIGNvbXBsZXRlZCcsIHtcbiAgICBzZXNzaW9uSWQsXG4gICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgZGlzcGxhY2VkUGlkOiBjdXJyZW50TG9jay5waWQsXG4gICAgZGlzcGxhY2VkU2Vzc2lvbklkOiBjdXJyZW50TG9jay5zZXNzaW9uSWQsXG4gICAgZGlzcGxhY2VkVmVyc2lvbjogY3VycmVudExvY2suc2VydmVyVmVyc2lvbiA/PyBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04sXG4gICAga2lsbEF0dGVtcHRlZDogdHJ1ZSxcbiAgICBraWxsUmVzdWx0OiBraWxsT3V0Y29tZS5yZWFzb24sXG4gICAga2lsbGVkOiBraWxsT3V0Y29tZS5raWxsZWQsXG4gICAgbG9ja0RlbGV0ZWQsXG4gICAgbG9ja0NsYWltQXR0ZW1wdGVkLFxuICAgIGxvY2tDbGFpbWVkLFxuICAgIGZpbmFsTG9ja093bmVyUGlkOiBmaW5hbExvY2s/LnBpZCA/PyBudWxsLFxuICAgIGZpbmFsTG9ja093bmVyU2Vzc2lvbklkOiBmaW5hbExvY2s/LnNlc3Npb25JZCA/PyBudWxsLFxuICAgIGZpbmFsTG9ja093bmVyVmVyc2lvbjogZmluYWxMb2NrPy5zZXJ2ZXJWZXJzaW9uID8/IG51bGwsXG4gICAgcmVjb25jaWxlZCxcbiAgfSk7XG5cbiAgaWYgKCFyZWNvbmNpbGVkKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gUG9ydC1vd25pbmcgbGVhZGVyIGNvdWxkIG5vdCByZWNsYWltIHRoZSBkaXNwbGFjZWQgbGVhZGVyIGxvY2snLCB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICAgIGRpc3BsYWNlZFBpZDogY3VycmVudExvY2sucGlkLFxuICAgICAgZGlzcGxhY2VkU2Vzc2lvbklkOiBjdXJyZW50TG9jay5zZXNzaW9uSWQsXG4gICAgICBmaW5hbExvY2tPd25lclBpZDogZmluYWxMb2NrPy5waWQgPz8gbnVsbCxcbiAgICAgIGZpbmFsTG9ja093bmVyU2Vzc2lvbklkOiBmaW5hbExvY2s/LnNlc3Npb25JZCA/PyBudWxsLFxuICAgICAgZmluYWxMb2NrT3duZXJWZXJzaW9uOiBmaW5hbExvY2s/LnNlcnZlclZlcnNpb24gPz8gbnVsbCxcbiAgICAgIGtpbGxSZXN1bHQ6IGtpbGxPdXRjb21lLnJlYXNvbixcbiAgICAgIGxvY2tEZWxldGVkLFxuICAgICAgbG9ja0NsYWltQXR0ZW1wdGVkLFxuICAgICAgbG9ja0NsYWltZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuICdyZWNsYWltLWZhaWxlZCc7XG4gIH1cblxuICByZXR1cm4gJ3JlY29uY2lsZWQnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRMZWFkZXJMZWFzZU1vbml0b3IoXG4gIHNlc3Npb25JZDogc3RyaW5nLFxuICBjb25zb2xlUG9ydDogbnVtYmVyLFxuICBkZXBzOiBMZWFkZXJMZWFzZVJlY29uY2lsaWF0aW9uRGVwZW5kZW5jaWVzID0ge30sXG4pOiAoKSA9PiB2b2lkIHtcbiAgY29uc3Qgc2V0VGltZW91dEltcGwgPSBkZXBzLnNldFRpbWVvdXRJbXBsID8/IHNldFRpbWVvdXQ7XG4gIGNvbnN0IGNsZWFyVGltZW91dEltcGwgPSBkZXBzLmNsZWFyVGltZW91dEltcGwgPz8gY2xlYXJUaW1lb3V0O1xuICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIGxldCBzdG9wcGVkID0gZmFsc2U7XG4gIGxldCBkZWxheU1zID0gTEVBREVSX0xFQVNFX1JFQ09OQ0lMRV9JTlRFUlZBTF9NUztcblxuICBjb25zdCBzY2hlZHVsZU5leHQgPSAoKSA9PiB7XG4gICAgaWYgKHN0b3BwZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGltZXIgPSBzZXRUaW1lb3V0SW1wbChydW5DaGVjaywgZGVsYXlNcyk7XG4gICAgdGltZXIudW5yZWYoKTtcbiAgfTtcblxuICBjb25zdCBydW5DaGVjayA9ICgpID0+IHtcbiAgICB0aW1lciA9IG51bGw7XG4gICAgaWYgKHN0b3BwZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVjb25jaWxlTGVhZGVyTGVhc2Uoc2Vzc2lvbklkLCBjb25zb2xlUG9ydCwgZGVwcylcbiAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgZGVsYXlNcyA9IHJlc3VsdCA9PT0gJ3JlY29uY2lsZWQnXG4gICAgICAgICAgPyBMRUFERVJfTEVBU0VfUkVDT05DSUxFX0lOVEVSVkFMX01TXG4gICAgICAgICAgOiBNYXRoLm1pbihkZWxheU1zICogMiwgTEVBREVSX0xFQVNFX1JFQ09OQ0lMRV9NQVhfSU5URVJWQUxfTVMpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiBsb2dnZXIuZGVidWcoJ1tVbmlmaWVkQ29uc29sZV0gTGVhZGVyIGxlYXNlIHJlY29uY2lsaWF0aW9uIGZhaWxlZCcsIHtcbiAgICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICAgIH0pKVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBzY2hlZHVsZU5leHQoKTtcbiAgICAgIH0pO1xuICB9O1xuXG4gIHNjaGVkdWxlTmV4dCgpO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgc3RvcHBlZCA9IHRydWU7XG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXRJbXBsKHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGF0dGVtcHRGb3JjZVRha2VvdmVyKFxuICBvcHRpb25zOiBVbmlmaWVkQ29uc29sZU9wdGlvbnMsXG4gIGN1cnJlbnRFbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIHByaW1hcnlUb2tlbjogc3RyaW5nLFxuICBzZXJ2ZXJPcHRzOiBXZWJTZXJ2ZXJPcHRpb25zLFxuICBzdGFydFdlYlNlcnZlckltcGw6IChvcHRpb25zOiBXZWJTZXJ2ZXJPcHRpb25zKSA9PiBQcm9taXNlPFdlYlNlcnZlclJlc3VsdD4sXG4pOiBQcm9taXNlPEZvcmNlVGFrZW92ZXJBdHRlbXB0UmVzdWx0PiB7XG4gIGNvbnN0IGluaXRpYWxGYWxsYmFjayA9IGF3YWl0IHJlY292ZXJMZWFkZXJCaW5kRmFpbHVyZShjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbywgY29uc29sZVBvcnQsIHByaW1hcnlUb2tlbik7XG4gIGNvbnN0IGluaXRpYWxSZXBsYWNlbWVudCA9IGV2YWx1YXRlUG9ydE93bmVyUmVwbGFjZW1lbnQoY3VycmVudEVsZWN0aW9uLmxlYWRlckluZm8sIGluaXRpYWxGYWxsYmFjayk7XG5cbiAgaWYgKCFpbml0aWFsUmVwbGFjZW1lbnQuc2hvdWxkRXZpY3QgfHwgaW5pdGlhbFJlcGxhY2VtZW50Lm93bmVyUGlkID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdlYlJlc3VsdDogeyBiaW5kUmVzdWx0OiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9IH0sXG4gICAgICBlbGVjdGlvbjogY3VycmVudEVsZWN0aW9uLFxuICAgICAgZmFsbGJhY2s6IGluaXRpYWxGYWxsYmFjayxcbiAgICAgIHJlcGxhY2VtZW50OiBpbml0aWFsUmVwbGFjZW1lbnQsXG4gICAgICByZWNvdmVyZWRTZXNzaW9uczogW10sXG4gICAgICBmb3JjZWRLaWxsOiBudWxsLFxuICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZhbHNlLFxuICAgICAgcmVib3VuZExvY2tDbGFpbWVkOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGF0ZXN0RmFsbGJhY2sgPSBhd2FpdCBkaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0KGNvbnNvbGVQb3J0LCBwcmltYXJ5VG9rZW4pO1xuICBjb25zdCByZWNvdmVyZWRTZXNzaW9ucyA9IGF3YWl0IGZldGNoTGVhZGVyU2Vzc2lvbnNTbmFwc2hvdChjb25zb2xlUG9ydCwgcHJpbWFyeVRva2VuKTtcbiAgY29uc3QgbGF0ZXN0UmVwbGFjZW1lbnQgPSBldmFsdWF0ZVBvcnRPd25lclJlcGxhY2VtZW50KGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLCBsYXRlc3RGYWxsYmFjayk7XG4gIGlmICghbGF0ZXN0UmVwbGFjZW1lbnQuc2hvdWxkRXZpY3QgfHwgbGF0ZXN0UmVwbGFjZW1lbnQub3duZXJQaWQgPT09IG51bGwpIHtcbiAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBGb3JjZWQgdGFrZW92ZXIgdGFyZ2V0IGNoYW5nZWQgYmVmb3JlIGV2aWN0aW9uOyBza2lwcGluZyBmb3JjZWQga2lsbCcsIHtcbiAgICAgIC4uLmJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICAgICAgICBjb25zb2xlUG9ydCxcbiAgICAgICAgY3VycmVudEVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRUFERFJJTlVTRScsIGRldGFpbDogYFBvcnQgJHtjb25zb2xlUG9ydH0gYWxyZWFkeSBpbiB1c2VgIH0sXG4gICAgICAgIGxhdGVzdEZhbGxiYWNrLFxuICAgICAgICBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICAgICksXG4gICAgICBwcmV2aW91c093bmVyUGlkOiBpbml0aWFsUmVwbGFjZW1lbnQub3duZXJQaWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdlYlJlc3VsdDogeyBiaW5kUmVzdWx0OiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9IH0sXG4gICAgICBlbGVjdGlvbjogY3VycmVudEVsZWN0aW9uLFxuICAgICAgZmFsbGJhY2s6IGxhdGVzdEZhbGxiYWNrLFxuICAgICAgcmVwbGFjZW1lbnQ6IGxhdGVzdFJlcGxhY2VtZW50LFxuICAgICAgcmVjb3ZlcmVkU2Vzc2lvbnMsXG4gICAgICBmb3JjZWRLaWxsOiBudWxsLFxuICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZhbHNlLFxuICAgICAgcmVib3VuZExvY2tDbGFpbWVkOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gQXR0ZW1wdGluZyBmb3JjZWQgdGFrZW92ZXIgZnJvbSBvbGRlciBvciBpbmNvbXBhdGlibGUgYWN0aXZlIGxlYWRlcicsIHtcbiAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgY3VycmVudEVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9LFxuICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICApLFxuICB9KTtcblxuICBjb25zdCBmb3JjZWRLaWxsID0gYXdhaXQga2lsbFN0YWxlUHJvY2Vzc0RldGFpbGVkKGxhdGVzdFJlcGxhY2VtZW50Lm93bmVyUGlkLCBjb25zb2xlUG9ydCwge1xuICAgIGFsbG93QWN0aXZlSG9zdFBhcmVudDogdHJ1ZSxcbiAgfSk7XG4gIGlmICghZm9yY2VkS2lsbC5raWxsZWQpIHtcbiAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBGb3JjZWQgdGFrZW92ZXIgc2tpcHBlZCBvciBmYWlsZWQgYWZ0ZXIgaWRlbnRpZnlpbmcgcmVwbGFjZWFibGUgbGVhZGVyJywge1xuICAgICAgLi4uYnVpbGRCaW5kRmFpbHVyZUxvZ0NvbnRleHQoXG4gICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICBjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgICAgeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdFQUREUklOVVNFJywgZGV0YWlsOiBgUG9ydCAke2NvbnNvbGVQb3J0fSBhbHJlYWR5IGluIHVzZWAgfSxcbiAgICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICAgIGxhdGVzdFJlcGxhY2VtZW50LFxuICAgICAgICBmb3JjZWRLaWxsLFxuICAgICAgKSxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgd2ViUmVzdWx0OiB7IGJpbmRSZXN1bHQ6IHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRUFERFJJTlVTRScsIGRldGFpbDogYFBvcnQgJHtjb25zb2xlUG9ydH0gYWxyZWFkeSBpbiB1c2VgIH0gfSxcbiAgICAgIGVsZWN0aW9uOiBjdXJyZW50RWxlY3Rpb24sXG4gICAgICBmYWxsYmFjazogbGF0ZXN0RmFsbGJhY2ssXG4gICAgICByZXBsYWNlbWVudDogbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICByZWNvdmVyZWRTZXNzaW9ucyxcbiAgICAgIGZvcmNlZEtpbGwsXG4gICAgICB0YWtlb3ZlckF0dGVtcHRlZDogdHJ1ZSxcbiAgICAgIHJlYm91bmRMb2NrQ2xhaW1lZDogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHJlYm91bmRXZWJSZXN1bHQgPSBhd2FpdCBzdGFydFdlYlNlcnZlckltcGwoc2VydmVyT3B0cyk7XG4gIGxldCByZWJvdW5kRWxlY3Rpb24gPSBjdXJyZW50RWxlY3Rpb247XG4gIGxldCByZWJvdW5kTG9ja0NsYWltZWQgPSBmYWxzZTtcblxuICBpZiAoIXJlYm91bmRXZWJSZXN1bHQuYmluZFJlc3VsdCB8fCByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHJlYm91bmRMZWFkZXJJbmZvID0gY3JlYXRlTGVhZGVySW5mbyhvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQpO1xuICAgIHJlYm91bmRMb2NrQ2xhaW1lZCA9IGF3YWl0IGNsYWltTGVhZGVyc2hpcChyZWJvdW5kTGVhZGVySW5mbyk7XG4gICAgaWYgKCFyZWJvdW5kTG9ja0NsYWltZWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIFJlYm91bmQgbGVhZGVyIGJvdW5kIHBvcnQgYnV0IGNvdWxkIG5vdCBpbW1lZGlhdGVseSByZS1jbGFpbSBsb2NrJywge1xuICAgICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgICBjb25zb2xlUG9ydCxcbiAgICAgICAgICByZWJvdW5kTGVhZGVySW5mbyxcbiAgICAgICAgICByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICAgICAgbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICAgICAgZm9yY2VkS2lsbCxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZWJvdW5kRWxlY3Rpb24gPSB7IHJvbGU6ICdsZWFkZXInLCBsZWFkZXJJbmZvOiByZWJvdW5kTGVhZGVySW5mbyB9O1xuICB9IGVsc2Uge1xuICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIEZvcmNlZCB0YWtlb3ZlciBraWxsZWQgb2xkIGxlYWRlciBidXQgYmluZCByZXRyeSBzdGlsbCBmYWlsZWQnLCB7XG4gICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgIGxhdGVzdEZhbGxiYWNrLFxuICAgICAgICBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICAgICAgZm9yY2VkS2lsbCxcbiAgICAgICksXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdlYlJlc3VsdDogcmVib3VuZFdlYlJlc3VsdCxcbiAgICBlbGVjdGlvbjogcmVib3VuZEVsZWN0aW9uLFxuICAgIGZhbGxiYWNrOiBsYXRlc3RGYWxsYmFjayxcbiAgICByZXBsYWNlbWVudDogbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgcmVjb3ZlcmVkU2Vzc2lvbnMsXG4gICAgZm9yY2VkS2lsbCxcbiAgICB0YWtlb3ZlckF0dGVtcHRlZDogdHJ1ZSxcbiAgICByZWJvdW5kTG9ja0NsYWltZWQsXG4gIH07XG59XG5cbi8qKlxuICogU3RhcnQgdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUuXG4gKlxuICogUnVucyBsZWFkZXIgZWxlY3Rpb24sIHRoZW4gZWl0aGVyIHN0YXJ0cyB0aGUgZnVsbCBjb25zb2xlIChsZWFkZXIpXG4gKiBvciBzZXRzIHVwIGV2ZW50IGZvcndhcmRpbmcgKGZvbGxvd2VyKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0VW5pZmllZENvbnNvbGUob3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICAvLyBSZXNvbHZlIHBvcnQ6IG9wdGlvbnMgKGNvbmZpZyBmaWxlKSDihpIgZW52IHZhciDihpIgZGVmYXVsdFxuICBjb25zdCBjb25zb2xlUG9ydCA9IG9wdGlvbnMucG9ydCB8fCBERUZBVUxUX0NPTlNPTEVfUE9SVDtcbiAgbG9nZ2VyLmRlYnVnKGBbVW5pZmllZENvbnNvbGVdIFBvcnQgcmVzb2x2ZWQ6ICR7Y29uc29sZVBvcnR9YCArXG4gICAgKG9wdGlvbnMucG9ydCA/ICcgKGZyb20gY29uZmlnIGZpbGUpJyA6IGAgKGZyb20gZW52L2RlZmF1bHQpYCkpO1xuXG4gIC8vIExlZ2FjeS1sZWFkZXIgZGV0ZWN0aW9uICgjMTc5NCkg4oCUIHdhcm4gdGhlIHVzZXIgaWYgYSBwcmUtYXV0aFxuICAvLyBEb2xsaG91c2VNQ1AgY29uc29sZSBpcyBydW5uaW5nIGFsb25nc2lkZSB0aGlzIGF1dGhlbnRpY2F0ZWQgb25lLlxuICAvLyBUaGV5IHdpbGwgY29leGlzdCBmaW5lIGJlY2F1c2Ugb2YgcG9ydCArIGxvY2sgKyB0b2tlbiBmaWxlIGlzb2xhdGlvbixcbiAgLy8gYnV0IHRoZSB1c2VyIHNob3VsZCBrbm93IGJvdGggZXhpc3Qgc28gdGhlIGRpZmZlcmluZyBzZWN1cml0eSBwb3N0dXJlXG4gIC8vIGJldHdlZW4gdGhlbSBkb2Vzbid0IGxvb2sgbGlrZSBhIGJ1Zy5cbiAgYXdhaXQgd2FybklmTGVnYWN5Q29uc29sZVByZXNlbnQoY29uc29sZVBvcnQpO1xuXG4gIGxldCBlbGVjdGlvbiA9IGF3YWl0IGVsZWN0TGVhZGVyKG9wdGlvbnMuc2Vzc2lvbklkLCBjb25zb2xlUG9ydCk7XG5cbiAgaWYgKGVsZWN0aW9uLnJvbGUgPT09ICdmb2xsb3dlcicpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVGb2xsb3dlckF1dGhvcml0eShvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQsIGVsZWN0aW9uKTtcbiAgICBlbGVjdGlvbiA9IHJlc29sdmVkLmVsZWN0aW9uO1xuICB9XG5cbiAgaWYgKGVsZWN0aW9uLnJvbGUgPT09ICdsZWFkZXInKSB7XG4gICAgcmV0dXJuIHN0YXJ0QXNMZWFkZXIob3B0aW9ucywgZWxlY3Rpb24sIGNvbnNvbGVQb3J0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RhcnRBc0ZvbGxvd2VyKG9wdGlvbnMsIGVsZWN0aW9uLCBjb25zb2xlUG9ydCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTdGFydCBhcyB0aGUgY29uc29sZSBsZWFkZXIuXG4gKiBCaW5kcyB0aGUgcmVzb2x2ZWQgY29uc29sZSBwb3J0IChjb25maWcgZmlsZSDihpIgZW52IHZhciDihpIgZGVmYXVsdCksXG4gKiBtb3VudHMgYWxsIHJvdXRlcyBpbmNsdWRpbmcgaW5nZXN0aW9uLCBzdGFydHMgaGVhcnRiZWF0LlxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFydEFzTGVhZGVyKFxuICBvcHRpb25zOiBVbmlmaWVkQ29uc29sZU9wdGlvbnMsXG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgY29uc29sZVBvcnQ6IG51bWJlciA9IERFRkFVTFRfQ09OU09MRV9QT1JULFxuKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICBjb25zdCB7IHN0YXJ0V2ViU2VydmVyIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZlci5qcycpO1xuICBjb25zdCB7IHBpY2tSYW5kb21Ub2tlbk5hbWUgfSA9IGF3YWl0IGltcG9ydCgnLi9TZXNzaW9uTmFtZXMuanMnKTtcblxuICAvLyBJbml0aWFsaXplIHRoZSBjb25zb2xlIHRva2VuIHN0b3JlICgjMTc4MCkuIENyZWF0ZXMgdGhlIHRva2VuIGZpbGUgb25cbiAgLy8gZmlyc3QgcnVuLCByZWFkcyB0aGUgZXhpc3RpbmcgdG9rZW5zIG9uIHN1YnNlcXVlbnQgcnVucy4gVGhlIHRva2VuIGlzXG4gIC8vIHBlcnNpc3RlbnQgYWNyb3NzIHJlc3RhcnRzIOKAlCBvbmx5IHJvdGF0ZWQgb24gZXhwbGljaXQgcmVxdWVzdCAoUGhhc2UgMikuXG4gIC8vIEZlYXR1cmUgZmxhZyBET0xMSE9VU0VfV0VCX0FVVEhfRU5BQkxFRCBjb250cm9scyBlbmZvcmNlbWVudDsgdGhlIGZpbGVcbiAgLy8gaXMgZ2VuZXJhdGVkIHJlZ2FyZGxlc3Mgc28gY29uc3VtZXJzIGNhbiBhdHRhY2ggdG9rZW5zIHByZWVtcHRpdmVseS5cbiAgY29uc3QgdG9rZW5TdG9yZSA9IG5ldyBDb25zb2xlVG9rZW5TdG9yZShlbnYuRE9MTEhPVVNFX0NPTlNPTEVfVE9LRU5fRklMRSk7XG4gIGNvbnN0IHByaW1hcnlUb2tlbiA9IGF3YWl0IHRva2VuU3RvcmUuZW5zdXJlSW5pdGlhbGl6ZWQocGlja1JhbmRvbVRva2VuTmFtZSgpKTtcbiAgbG9nZ2VyLmluZm8oJ1tVbmlmaWVkQ29uc29sZV0gQ29uc29sZSB0b2tlbiBzdG9yZSBpbml0aWFsaXplZCcsIHtcbiAgICB0b2tlbklkOiBwcmltYXJ5VG9rZW4uaWQsXG4gICAgdG9rZW5OYW1lOiBwcmltYXJ5VG9rZW4ubmFtZSxcbiAgICBmaWxlOiB0b2tlblN0b3JlLmdldEZpbGVQYXRoKCksXG4gICAgYXV0aEVuZm9yY2VkOiBlbnYuRE9MTEhPVVNFX1dFQl9BVVRIX0VOQUJMRUQsXG4gIH0pO1xuXG4gIC8vIFByZS1jcmVhdGUgYSBwbGFjZWhvbGRlciBicm9hZGNhc3QgdGhhdCB3ZSdsbCB3aXJlIHVwIGFmdGVyIHRoZSBzZXJ2ZXIgc3RhcnRzXG4gIGxldCBsaXZlQnJvYWRjYXN0OiAoKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgbGl2ZU1ldHJpY3NPblNuYXBzaG90OiAoKHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cbiAgLy8gQ3JlYXRlIGluZ2VzdGlvbiByb3V0ZXMgd2l0aCBhIGRlZmVycmVkIGJyb2FkY2FzdCAod2lyZWQgYWZ0ZXIgc2VydmVyIHN0YXJ0cylcbiAgY29uc3QgaW5nZXN0UmVzdWx0ID0gY3JlYXRlSW5nZXN0Um91dGVzKHtcbiAgICBsb2dCcm9hZGNhc3Q6IChlbnRyeSkgPT4gbGl2ZUJyb2FkY2FzdD8uKGVudHJ5KSxcbiAgICBtZXRyaWNzT25TbmFwc2hvdDogKHNuYXBzaG90KSA9PiBsaXZlTWV0cmljc09uU25hcHNob3Q/LihzbmFwc2hvdCksXG4gICAgc3RvcmVNZXRyaWNzU25hcHNob3Q6IChzbmFwc2hvdCkgPT4gb3B0aW9ucy5tZXRyaWNzU2luaz8ub25TbmFwc2hvdChzbmFwc2hvdCksXG4gIH0pO1xuXG4gIC8vIFN0YXJ0IHRoZSB3ZWIgc2VydmVyIHdpdGggaW5nZXN0IHJvdXRlcyBtb3VudGVkIGJlZm9yZSB0aGUgU1BBIGZhbGxiYWNrLlxuICAvLyBJZiB0aGUgcG9ydCBpcyBvY2N1cGllZCBieSBhIHN0YWxlIHByb2Nlc3MsIHJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi5cbiAgY29uc3Qgc2VydmVyT3B0cyA9IHtcbiAgICBwb3J0Zm9saW9EaXI6IG9wdGlvbnMucG9ydGZvbGlvRGlyLFxuICAgIG1lbW9yeVNpbms6IG9wdGlvbnMubWVtb3J5U2luayxcbiAgICBtZXRyaWNzU2luazogb3B0aW9ucy5tZXRyaWNzU2luayxcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc3RhYmxlU2Vzc2lvbklkLFxuICAgIHJ1bnRpbWVTZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLFxuICAgIGFkZGl0aW9uYWxSb3V0ZXJzOiBbaW5nZXN0UmVzdWx0LnJvdXRlcl0sXG4gICAgdG9rZW5TdG9yZSxcbiAgICAuLi4ob3B0aW9ucy5tY3BBcWxIYW5kbGVyID8geyBtY3BBcWxIYW5kbGVyOiBvcHRpb25zLm1jcEFxbEhhbmRsZXIgfSA6IHt9KSxcbiAgfTtcbiAgLy8gYmluZEFuZExpc3RlbiBub3cgaGFuZGxlcyBFQUREUklOVVNFIGJ5IGZpbmRpbmcgYW5kIGtpbGxpbmcgdGhlIHN0YWxlXG4gIC8vIHByb2Nlc3Mgb24gdGhlIHBvcnQsIHRoZW4gcmV0cnlpbmcuIE5vIGV4dGVybmFsIHJldHJ5IGxvb3AgbmVlZGVkLlxuICBsZXQgd2ViUmVzdWx0ID0gYXdhaXQgc3RhcnRXZWJTZXJ2ZXIoc2VydmVyT3B0cyk7XG4gIGxldCByZWNvdmVyZWRGb2xsb3dlclNlc3Npb25zOiBTZXNzaW9uSW5mb1tdID0gW107XG5cbiAgaWYgKHdlYlJlc3VsdC5iaW5kUmVzdWx0ICYmICF3ZWJSZXN1bHQuYmluZFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZm9yY2VUYWtlb3ZlciA9IGF3YWl0IGF0dGVtcHRGb3JjZVRha2VvdmVyKFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGVsZWN0aW9uLFxuICAgICAgY29uc29sZVBvcnQsXG4gICAgICBwcmltYXJ5VG9rZW4udG9rZW4sXG4gICAgICBzZXJ2ZXJPcHRzLFxuICAgICAgc3RhcnRXZWJTZXJ2ZXIsXG4gICAgKTtcbiAgICB3ZWJSZXN1bHQgPSBmb3JjZVRha2VvdmVyLndlYlJlc3VsdDtcbiAgICBlbGVjdGlvbiA9IGZvcmNlVGFrZW92ZXIuZWxlY3Rpb247XG4gICAgcmVjb3ZlcmVkRm9sbG93ZXJTZXNzaW9ucyA9IGZvcmNlVGFrZW92ZXIucmVjb3ZlcmVkU2Vzc2lvbnM7XG5cbiAgICBpZiAod2ViUmVzdWx0LmJpbmRSZXN1bHQgJiYgIXdlYlJlc3VsdC5iaW5kUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIGlmIChmb3JjZVRha2VvdmVyLmZhbGxiYWNrLmxlYWRlckluZm8pIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciByb2xlIGFib3J0ZWQ6IGJpbmQgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gZm9sbG93ZXInLCB7XG4gICAgICAgIC4uLmJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICAgICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgICAgd2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgICAgZm9yY2VUYWtlb3Zlci5mYWxsYmFjayxcbiAgICAgICAgICBmb3JjZVRha2VvdmVyLnJlcGxhY2VtZW50LFxuICAgICAgICAgIGZvcmNlVGFrZW92ZXIuZm9yY2VkS2lsbCxcbiAgICAgICAgKSxcbiAgICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZvcmNlVGFrZW92ZXIudGFrZW92ZXJBdHRlbXB0ZWQsXG4gICAgICAgIHJlYm91bmRMb2NrQ2xhaW1lZDogZm9yY2VUYWtlb3Zlci5yZWJvdW5kTG9ja0NsYWltZWQsXG4gICAgICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkOiBmb3JjZVRha2VvdmVyLmZhbGxiYWNrLnNvdXJjZSAhPT0gJ25vbmUnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmb2xsb3dlckVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCA9IHsgcm9sZTogJ2ZvbGxvd2VyJywgbGVhZGVySW5mbzogZm9yY2VUYWtlb3Zlci5mYWxsYmFjay5sZWFkZXJJbmZvIH07XG4gICAgICByZXR1cm4gc3RhcnRBc0ZvbGxvd2VyKG9wdGlvbnMsIGZvbGxvd2VyRWxlY3Rpb24sIGNvbnNvbGVQb3J0LCBwcmltYXJ5VG9rZW4udG9rZW4pO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuZXJyb3IoJ1tVbmlmaWVkQ29uc29sZV0gTGVhZGVyIGZhaWxlZCB0byBiaW5kIGFuZCBubyBhY3RpdmUgbGVhZGVyIGNvdWxkIGJlIGlkZW50aWZpZWQnLCB7XG4gICAgICAgIC4uLmJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICAgICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgICAgd2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgICAgZm9yY2VUYWtlb3Zlci5mYWxsYmFjayxcbiAgICAgICAgICBmb3JjZVRha2VvdmVyLnJlcGxhY2VtZW50LFxuICAgICAgICAgIGZvcmNlVGFrZW92ZXIuZm9yY2VkS2lsbCxcbiAgICAgICAgKSxcbiAgICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZvcmNlVGFrZW92ZXIudGFrZW92ZXJBdHRlbXB0ZWQsXG4gICAgICAgIHJlYm91bmRMb2NrQ2xhaW1lZDogZm9yY2VUYWtlb3Zlci5yZWJvdW5kTG9ja0NsYWltZWQsXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGVhZGVyIGZhaWxlZCB0byBiaW5kIHBvcnQgJHtjb25zb2xlUG9ydH0gYW5kIG5vIGFjdGl2ZSBsZWFkZXIgd2FzIGRpc2NvdmVyYWJsZWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlZ2lzdGVyIHRoZSBsZWFkZXIgb25seSBhZnRlciB0aGUgSFRUUCBsaXN0ZW5lciBpcyBhY3R1YWxseSBzZXJ2aW5nIHRoZSBwb3J0LlxuICBpbmdlc3RSZXN1bHQucmVnaXN0ZXJMZWFkZXJTZXNzaW9uKG9wdGlvbnMuc2Vzc2lvbklkLCBwcm9jZXNzLnBpZCk7XG5cbiAgLy8gUmVnaXN0ZXIgdGhlIHdlYiBjb25zb2xlIGl0c2VsZiBzbyB0aGUgc2Vzc2lvbiBpbmRpY2F0b3IgaXMgbmV2ZXIgZW1wdHkgKCMxODA1KVxuICBpbmdlc3RSZXN1bHQucmVnaXN0ZXJDb25zb2xlU2Vzc2lvbigpO1xuXG4gIGlmIChyZWNvdmVyZWRGb2xsb3dlclNlc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICBpbmdlc3RSZXN1bHQuaW1wb3J0U2Vzc2lvbnMocmVjb3ZlcmVkRm9sbG93ZXJTZXNzaW9ucyk7XG4gICAgbG9nZ2VyLmluZm8oJ1tVbmlmaWVkQ29uc29sZV0gUmVjb3ZlcmVkIGZvbGxvd2VyIHNlc3Npb24gc25hcHNob3QgZnJvbSBkaXNwbGFjZWQgbGVhZGVyJywge1xuICAgICAgc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCxcbiAgICAgIHJlY292ZXJlZFNlc3Npb25zOiByZWNvdmVyZWRGb2xsb3dlclNlc3Npb25zLmxlbmd0aCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFdpcmUgU1NFIGJyb2FkY2FzdHMgZm9yIHRoaXMgbGVhZGVyJ3Mgb3duIGV2ZW50c1xuICBvcHRpb25zLndpcmVTU0VCcm9hZGNhc3RzKHdlYlJlc3VsdCwgb3B0aW9ucy5tZXRyaWNzU2luayk7XG5cbiAgLy8gTm93IHdpcmUgdGhlIGxpdmUgYnJvYWRjYXN0IGZ1bmN0aW9ucyBpbnRvIHRoZSBpbmdlc3Qgcm91dGVzXG4gIGlmICh3ZWJSZXN1bHQubG9nQnJvYWRjYXN0KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxCcm9hZGNhc3QgPSB3ZWJSZXN1bHQubG9nQnJvYWRjYXN0O1xuICAgIC8vIFN0YW1wIGxlYWRlcidzIG93biBlbnRyaWVzIHdpdGggc2Vzc2lvbiBJRFxuICAgIGxpdmVCcm9hZGNhc3QgPSAoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSkgPT4ge1xuICAgICAgY29uc3Qgc3RhbXBlZDogVW5pZmllZExvZ0VudHJ5ID0ge1xuICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgZGF0YTogeyAuLi5lbnRyeS5kYXRhLCBfc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCB9LFxuICAgICAgfTtcbiAgICAgIG9yaWdpbmFsQnJvYWRjYXN0KHN0YW1wZWQpO1xuICAgIH07XG4gIH1cbiAgbGl2ZU1ldHJpY3NPblNuYXBzaG90ID0gd2ViUmVzdWx0Lm1ldHJpY3NPblNuYXBzaG90O1xuXG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIEluZ2VzdGlvbiByb3V0ZXMgbW91bnRlZCcpO1xuXG4gIC8vIFN0YXJ0IGhlYXJ0YmVhdCBhbmQgcmVnaXN0ZXIgY2xlYW51cFxuICBjb25zdCBzdG9wSGVhcnRiZWF0ID0gc3RhcnRIZWFydGJlYXQoZWxlY3Rpb24ubGVhZGVySW5mbyk7XG4gIGNvbnN0IHN0b3BMZWFzZU1vbml0b3IgPSBzdGFydExlYWRlckxlYXNlTW9uaXRvcihvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQpO1xuICByZWdpc3RlckxlYWRlckNsZWFudXAoKTtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBMZWFkZXIgc3RhcnRlZCcsIHtcbiAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLCBwb3J0OiBjb25zb2xlUG9ydCwgcGlkOiBwcm9jZXNzLnBpZCxcbiAgICByb2xlOiAnbGVhZGVyJywgaW5nZXN0Um91dGVzOiBbJy9hcGkvaW5nZXN0L2xvZ3MnLCAnL2FwaS9pbmdlc3QvbWV0cmljcycsICcvYXBpL2luZ2VzdC9zZXNzaW9uJywgJy9hcGkvc2Vzc2lvbnMnXSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICByb2xlOiAnbGVhZGVyJyxcbiAgICBlbGVjdGlvbixcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBjbGVhbnVwOiBhc3luYyAoKSA9PiB7XG4gICAgICBzdG9wSGVhcnRiZWF0KCk7XG4gICAgICBzdG9wTGVhc2VNb25pdG9yKCk7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBTdGFydCBhcyBhIGZvbGxvd2VyLlxuICogUmVnaXN0ZXJzIGZvcndhcmRpbmcgc2lua3Mgd2l0aCB0aGUgTG9nTWFuYWdlciwgc3RhcnRzIHNlc3Npb24gaGVhcnRiZWF0LlxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFydEFzRm9sbG93ZXIoXG4gIG9wdGlvbnM6IFVuaWZpZWRDb25zb2xlT3B0aW9ucyxcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0LFxuICBjb25zb2xlUG9ydDogbnVtYmVyID0gREVGQVVMVF9DT05TT0xFX1BPUlQsXG4gIGluaXRpYWxBdXRoVG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsLFxuKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICBjb25zdCBsZWFkZXJVcmwgPSBgaHR0cDovLzEyNy4wLjAuMToke2VsZWN0aW9uLmxlYWRlckluZm8ucG9ydH1gO1xuXG4gIC8vIFJlYWQgdGhlIGNvbnNvbGUgYXV0aCB0b2tlbiAoIzE3ODApIHdyaXR0ZW4gYnkgdGhlIGxlYWRlci4gTWF5IGJlIG51bGxcbiAgLy8gaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCB5ZXQg4oCUIHRoZSBzaW5rcyBoYW5kbGUgdGhhdCBncmFjZWZ1bGx5IGFuZFxuICAvLyBzaW1wbHkgb21pdCB0aGUgQmVhcmVyIGhlYWRlciwgd2hpY2ggaXMgZmluZSB3aGVuIGF1dGggaXMgbm90IGVuZm9yY2VkLlxuICBsZXQgYXV0aFRva2VuID0gaW5pdGlhbEF1dGhUb2tlbjtcbiAgaWYgKGF1dGhUb2tlbiA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHsgZ2V0UHJpbWFyeVRva2VuRnJvbUZpbGUgfSA9IGF3YWl0IGltcG9ydCgnLi9jb25zb2xlVG9rZW4uanMnKTtcbiAgICBhdXRoVG9rZW4gPSBhd2FpdCBnZXRQcmltYXJ5VG9rZW5Gcm9tRmlsZShlbnYuRE9MTEhPVVNFX0NPTlNPTEVfVE9LRU5fRklMRSk7XG4gIH1cbiAgaWYgKGF1dGhUb2tlbikge1xuICAgIGxvZ2dlci5kZWJ1ZygnW1VuaWZpZWRDb25zb2xlXSBGb2xsb3dlciBsb2FkZWQgY29uc29sZSBhdXRoIHRva2VuJyk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIE5vIGNvbnNvbGUgYXV0aCB0b2tlbiBmaWxlIGZvdW5kOyBmb2xsb3dlciB3aWxsIFBPU1Qgd2l0aG91dCBCZWFyZXIgaGVhZGVyJyk7XG4gIH1cblxuICAvLyBQZXItaW5zdGFuY2UgcHJvbW90aW9uIG1hbmFnZXIg4oCUIHRyYWNrcyBpdHMgb3duIGF0dGVtcHQgY291bnRlciBzb1xuICAvLyBtdWx0aXBsZSBmb2xsb3dlcnMgZG9uJ3QgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlcidzIHByb21vdGlvbiBidWRnZXRzLlxuICBjb25zdCBwcm9tb3Rpb25NZ3IgPSBuZXcgUHJvbW90aW9uTWFuYWdlcihvcHRpb25zLCBjb25zb2xlUG9ydCwgc3RhcnRBc0xlYWRlciwgc3RhcnRBc0ZvbGxvd2VyKTtcblxuICAvLyBEZWNsYXJlIHNlc3Npb25IZWFydGJlYXQgYmVmb3JlIHRoZSBzaW5rIHNvIHRoZSBjbG9zdXJlIGNhbiBjYXB0dXJlIGl0LlxuICAvLyBCb3RoIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGNhbGxiYWNrIGNvdWxkIHBvc3NpYmx5IGZpcmUgKG5lZWRzIDUrIGZhaWxlZCBmbHVzaGVzKS5cbiAgbGV0IHNlc3Npb25IZWFydGJlYXQ6IFNlc3Npb25IZWFydGJlYXQ7XG5cbiAgLy8gUmVnaXN0ZXIgYSBmb3J3YXJkaW5nIGxvZyBzaW5rIHdpdGggbGVhZGVyLWRlYXRoIGNhbGxiYWNrICgjMTg1MCkuXG4gIGNvbnN0IGZvcndhcmRpbmdTaW5rID0gbmV3IExlYWRlckZvcndhcmRpbmdMb2dTaW5rKGxlYWRlclVybCwgb3B0aW9ucy5zZXNzaW9uSWQsIGF1dGhUb2tlbiwgKCkgPT4ge1xuICAgIHByb21vdGlvbk1nci5wcm9tb3RlKGZvcndhcmRpbmdTaW5rLCBzZXNzaW9uSGVhcnRiZWF0KVxuICAgICAgLmNhdGNoKGVyciA9PiBsb2dnZXIuZXJyb3IoJ1tVbmlmaWVkQ29uc29sZV0gUHJvbW90aW9uIGNyYXNoZWQnLCB7IGVycm9yOiBTdHJpbmcoZXJyKSB9KSk7XG4gIH0pO1xuICBvcHRpb25zLnJlZ2lzdGVyTG9nU2luayhmb3J3YXJkaW5nU2luayk7XG5cbiAgLy8gU3RhcnQgc2Vzc2lvbiBoZWFydGJlYXQgdG8gdGhlIGxlYWRlclxuICBzZXNzaW9uSGVhcnRiZWF0ID0gbmV3IFNlc3Npb25IZWFydGJlYXQobGVhZGVyVXJsLCBvcHRpb25zLnNlc3Npb25JZCwgcHJvY2Vzcy5waWQsIGF1dGhUb2tlbik7XG4gIGF3YWl0IHNlc3Npb25IZWFydGJlYXQuc3RhcnQoKTtcblxuICBjb25zdCBzdG9wQXV0aG9yaXR5TW9uaXRvciA9IHN0YXJ0Rm9sbG93ZXJBdXRob3JpdHlNb25pdG9yKFxuICAgIG9wdGlvbnMsXG4gICAgY29uc29sZVBvcnQsXG4gICAgZWxlY3Rpb24sXG4gICAgcHJvbW90aW9uTWdyLFxuICAgIGZvcndhcmRpbmdTaW5rLFxuICAgIHNlc3Npb25IZWFydGJlYXQsXG4gICk7XG5cbiAgbG9nZ2VyLmluZm8oJ1tVbmlmaWVkQ29uc29sZV0gRm9sbG93ZXIgc3RhcnRlZCcsIHtcbiAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLCBwaWQ6IHByb2Nlc3MucGlkLCByb2xlOiAnZm9sbG93ZXInLFxuICAgIGxlYWRlclNlc3Npb246IGVsZWN0aW9uLmxlYWRlckluZm8uc2Vzc2lvbklkLCBsZWFkZXJQaWQ6IGVsZWN0aW9uLmxlYWRlckluZm8ucGlkLFxuICAgIGxlYWRlclBvcnQ6IGVsZWN0aW9uLmxlYWRlckluZm8ucG9ydCwgbGVhZGVyVXJsLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHJvbGU6ICdmb2xsb3dlcicsXG4gICAgZWxlY3Rpb24sXG4gICAgY2xlYW51cDogYXN5bmMgKCkgPT4ge1xuICAgICAgc3RvcEF1dGhvcml0eU1vbml0b3IoKTtcbiAgICAgIGF3YWl0IHNlc3Npb25IZWFydGJlYXQuc3RvcCgpO1xuICAgICAgYXdhaXQgZm9yd2FyZGluZ1NpbmsuY2xvc2UoKTtcbiAgICB9LFxuICB9O1xufVxuIl19
949
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pZmllZENvbnNvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQU9ILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWix3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLHdCQUF3QixHQUl6QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUNMLGFBQWEsRUFDYix3QkFBd0IsR0FFekIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHMUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUMsMEJBQTBCLENBQUM7QUFDNUQsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSxtQ0FBbUMsR0FBRyxhQUFhLENBQUM7QUFDMUQsTUFBTSwyQkFBMkIsR0FBRyxHQUFHLENBQUMsNkNB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LENBQUMsbUNBQW1DLEVBQUU7UUFDL0MsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFVBQVU7UUFDaEUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUc7UUFDaEYsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVM7S0FDaEQsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLElBQUksRUFBRSxVQUFVO1FBQ2hCLFFBQVE7UUFDUixPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDbEIsb0JBQW9CLEVBQUUsQ0FBQztZQUN2QixNQUFNLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlCLE1BQU0sY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pZmllZCB3ZWIgY29uc29sZSBvcmNoZXN0cmF0b3IuXG4gKlxuICogVGllcyB0b2dldGhlciBsZWFkZXIgZWxlY3Rpb24sIGNvbnNvbGUgc3RhcnR1cCwgZm9sbG93ZXIgd2lyaW5nLFxuICogYW5kIHNlc3Npb24gbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnRcbiAqIGNhbGxlZCBieSB0aGUgREkgY29udGFpbmVyIGR1cmluZyBkZWZlcnJlZCBzZXR1cC5cbiAqXG4gKiBGbG93OlxuICogMS4gUnVuIGxlYWRlciBlbGVjdGlvbiAocmVhZCBsb2NrIGZpbGUsIGNsYWltIG9yIGZvbGxvdylcbiAqIDIuIElmIGxlYWRlcjogc3RhcnQgd2ViIHNlcnZlciBvbiBmaXhlZCBwb3J0LCBtb3VudCBpbmdlc3Qgcm91dGVzLCBzdGFydCBoZWFydGJlYXRcbiAqIDMuIElmIGZvbGxvd2VyOiByZWdpc3RlciBmb3J3YXJkaW5nIHNpbmtzIHdpdGggTG9nTWFuYWdlciwgc3RhcnQgc2Vzc2lvbiBoZWFydGJlYXRcbiAqXG4gKiBAc2luY2UgdjIuMS4wIOKAlCBJc3N1ZSAjMTcwMFxuICovXG5cbmltcG9ydCB0eXBlIHsgVW5pZmllZExvZ0VudHJ5IH0gZnJvbSAnLi4vLi4vbG9nZ2luZy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1ldHJpY1NuYXBzaG90IH0gZnJvbSAnLi4vLi4vbWV0cmljcy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeUxvZ1NpbmsgfSBmcm9tICcuLi8uLi9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlNZXRyaWNzU2luayB9IGZyb20gJy4uLy4uL21ldHJpY3Mvc2lua3MvTWVtb3J5TWV0cmljc1NpbmsuanMnO1xuaW1wb3J0IHR5cGUgeyBXZWJTZXJ2ZXJPcHRpb25zLCBXZWJTZXJ2ZXJSZXN1bHQgfSBmcm9tICcuLi9zZXJ2ZXIuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHtcbiAgZWxlY3RMZWFkZXIsXG4gIGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZSxcbiAgZm9yY2VDbGFpbUxlYWRlcnNoaXAsXG4gIHN0YXJ0SGVhcnRiZWF0LFxuICByZWdpc3RlckxlYWRlckNsZWFudXAsXG4gIGRldGVjdExlZ2FjeUxlYWRlcixcbiAgcmVhZExlYWRlckxvY2ssXG4gIGRlbGV0ZUxlYWRlckxvY2ssXG4gIGNsYWltTGVhZGVyc2hpcCxcbiAgY3JlYXRlTGVhZGVySW5mbyxcbiAgTE9DS19WRVJTSU9OLFxuICBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgZXZhbHVhdGVMZWFkZXJQcmVmZXJlbmNlLFxuICB0eXBlIEVsZWN0aW9uUmVzdWx0LFxuICB0eXBlIENvbnNvbGVMZWFkZXJJbmZvLFxuICB0eXBlIExlYWRlclByZWZlcmVuY2VEZWNpc2lvbixcbn0gZnJvbSAnLi9MZWFkZXJFbGVjdGlvbi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVJbmdlc3RSb3V0ZXMgfSBmcm9tICcuL0luZ2VzdFJvdXRlcy5qcyc7XG5pbXBvcnQge1xuICBMZWFkZXJGb3J3YXJkaW5nTG9nU2luayxcbiAgU2Vzc2lvbkhlYXJ0YmVhdCxcbn0gZnJvbSAnLi9MZWFkZXJGb3J3YXJkaW5nU2luay5qcyc7XG5pbXBvcnQgeyBQcm9tb3Rpb25NYW5hZ2VyIH0gZnJvbSAnLi9Qcm9tb3Rpb25NYW5hZ2VyLmpzJztcbmltcG9ydCB7IENvbnNvbGVUb2tlblN0b3JlIH0gZnJvbSAnLi9jb25zb2xlVG9rZW4uanMnO1xuaW1wb3J0IHtcbiAgZmluZFBpZE9uUG9ydCxcbiAga2lsbFN0YWxlUHJvY2Vzc0RldGFpbGVkLFxuICB0eXBlIEtpbGxTdGFsZVByb2Nlc3NPdXRjb21lLFxufSBmcm9tICcuL1N0YWxlUHJvY2Vzc1JlY292ZXJ5LmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uSW5mbyB9IGZyb20gJy4vSW5nZXN0Um91dGVzLmpzJztcblxuLyoqXG4gKiBEZWZhdWx0IGNvbnNvbGUgcG9ydCBmcm9tIHRoZSBlbnYgdmFyLiBVc2VkIGFzIGZhbGxiYWNrIHdoZW4gbm8gcG9ydFxuICogaXMgcHJvdmlkZWQgdmlhIGNvbmZpZyBmaWxlIG9yIG9wdGlvbnMuIFRoZSByZXNvbHV0aW9uIGhpZXJhcmNoeSBpczpcbiAqICAgMS4gb3B0aW9ucy5wb3J0IChmcm9tIGNvbmZpZyBmaWxlLCByZXNvbHZlZCBieSB0aGUgREkgY29udGFpbmVyKVxuICogICAyLiBET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVCBlbnYgdmFyXG4gKiAgIDMuIDQxNzE1IChoYXJkY29kZWQgZGVmYXVsdCBpbiBlbnYudHMpXG4gKi9cbmNvbnN0IERFRkFVTFRfQ09OU09MRV9QT1JUID0gZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUO1xuY29uc3QgTEVHQUNZX0NPTlNPTEVfRkFMTEJBQ0tfUE9SVCA9IDM5Mzk7XG5jb25zdCBTWU5USEVUSUNfUE9SVF9PV05FUl9TRVNTSU9OX1BSRUZJWCA9ICdwb3J0LW93bmVyLSc7XG5jb25zdCBMRUFERVJfRElTQ09WRVJZX1RJTUVPVVRfTVMgPSBlbnYuRE9MTEhPVVNFX0NPTlNPTEVfTEVBREVSX0RJU0NPVkVSWV9USU1FT1VUX01TO1xuY29uc3QgTEVBREVSX0xFQVNFX1JFQ09OQ0lMRV9JTlRFUlZBTF9NUyA9IDJfMDAwO1xuY29uc3QgTEVBREVSX0xFQVNFX1JFQ09OQ0lMRV9NQVhfSU5URVJWQUxfTVMgPSAzMF8wMDA7XG5jb25zdCBGT0xMT1dFUl9BVVRIT1JJVFlfTU9OSVRPUl9DT05GSUcgPSB7XG4gIGludGVydmFsTXM6IGVudi5ET0xMSE9VU0VfQ09OU09MRV9BVVRIT1JJVFlfUkVDSEVDS19NUyxcbiAgaml0dGVyTXM6IGVudi5ET0xMSE9VU0VfQ09OU09MRV9BVVRIT1JJVFlfUkVDSEVDS19KSVRURVJfTVMsXG4gIGZhaWx1cmVUaHJlc2hvbGQ6IGVudi5ET0xMSE9VU0VfQ09OU09MRV9BVVRIT1JJVFlfUkVDSEVDS19GQUlMVVJFX1RIUkVTSE9MRCxcbiAgZmFpbHVyZUNvb2xkb3duTXM6IGVudi5ET0xMSE9VU0VfQ09OU09MRV9BVVRIT1JJVFlfUkVDSEVDS19GQUlMVVJFX0NPT0xET1dOX01TLFxufSBhcyBjb25zdDtcblxuZnVuY3Rpb24gY3VycmVudFRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICByZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRm9sbG93ZXJBdXRob3JpdHlSZWNoZWNrSW50ZXJ2YWwoc2Vzc2lvbklkOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBub3JtYWxpemVkU2Vzc2lvbklkID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoc2Vzc2lvbklkKS5ub3JtYWxpemVkQ29udGVudDtcbiAgbGV0IGhhc2ggPSAwO1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbm9ybWFsaXplZFNlc3Npb25JZC5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBjb2RlUG9pbnQgPSBub3JtYWxpemVkU2Vzc2lvbklkLmNvZGVQb2ludEF0KGluZGV4KSA/PyAwO1xuICAgIGhhc2ggPSAoaGFzaCAqIDMxICsgY29kZVBvaW50KSA+Pj4gMDtcbiAgICBpZiAoY29kZVBvaW50ID4gMHhmZmZmKSB7XG4gICAgICBpbmRleCArPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gRk9MTE9XRVJfQVVUSE9SSVRZX01PTklUT1JfQ09ORklHLmludGVydmFsTXMgKyAoaGFzaCAlIChGT0xMT1dFUl9BVVRIT1JJVFlfTU9OSVRPUl9DT05GSUcuaml0dGVyTXMgKyAxKSk7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RhcnRpbmcgdGhlIHVuaWZpZWQgY29uc29sZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkQ29uc29sZU9wdGlvbnMge1xuICAvKiogVGhpcyBwcm9jZXNzJ3MgdW5pcXVlIHNlc3Npb24gSUQgKi9cbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIC8qKiBTdGFibGUgRG9sbGhvdXNlIHNlc3Npb24gaWRlbnRpdHkgc2hvd24gdG8gaHVtYW5zIGFuZCB1c2VkIGZvciBwZXJzaXN0ZW5jZS4gKi9cbiAgc3RhYmxlU2Vzc2lvbklkOiBzdHJpbmc7XG4gIC8qKiBQb3J0Zm9saW8gYmFzZSBkaXJlY3RvcnkgKGZvciBzdGFydFdlYlNlcnZlcikgKi9cbiAgcG9ydGZvbGlvRGlyOiBzdHJpbmc7XG4gIC8qKiBMb2cgbWVtb3J5IHNpbmsgKGZvciBjb25zb2xlIGhpc3RvcnkpICovXG4gIG1lbW9yeVNpbms6IE1lbW9yeUxvZ1Npbms7XG4gIC8qKiBNZXRyaWNzIG1lbW9yeSBzaW5rICovXG4gIG1ldHJpY3NTaW5rPzogTWVtb3J5TWV0cmljc1Npbms7XG4gIC8qKiBNQ1AtQVFMIGhhbmRsZXIgZm9yIHBlcm1pc3Npb24gcm91dGVzICh0eXBlZCBhcyBhbnkgdG8gYXZvaWQgY2lyY3VsYXIgaW1wb3J0cykgKi9cbiAgbWNwQXFsSGFuZGxlcj86IGFueTtcbiAgLyoqIENhbGxiYWNrIHRvIHJlZ2lzdGVyIGEgbG9nIHNpbmsgd2l0aCB0aGUgTG9nTWFuYWdlciAqL1xuICByZWdpc3RlckxvZ1Npbms6IChzaW5rOiB7IHdyaXRlKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpOiB2b2lkOyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+OyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IH0pID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB0byB3aXJlIFNTRSBicm9hZGNhc3RzIGFmdGVyIHdlYiBzZXJ2ZXIgc3RhcnRzICovXG4gIHdpcmVTU0VCcm9hZGNhc3RzOiAod2ViUmVzdWx0OiB7IGxvZ0Jyb2FkY2FzdD86IChlbnRyeTogVW5pZmllZExvZ0VudHJ5KSA9PiB2b2lkOyBtZXRyaWNzT25TbmFwc2hvdD86IChzbmFwc2hvdDogTWV0cmljU25hcHNob3QpID0+IHZvaWQgfSwgbWV0cmljc1Npbms/OiBNZW1vcnlNZXRyaWNzU2luaykgPT4gdm9pZDtcbiAgLyoqIENvbnNvbGUgcG9ydCBvdmVycmlkZSBmcm9tIGNvbmZpZyBmaWxlLiBGYWxscyBiYWNrIHRvIGVudiB2YXIgaWYgbm90IHByb3ZpZGVkLiAqL1xuICBwb3J0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBzdGFydGluZyB0aGUgdW5pZmllZCBjb25zb2xlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRDb25zb2xlUmVzdWx0IHtcbiAgcm9sZTogJ2xlYWRlcicgfCAnZm9sbG93ZXInO1xuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQ7XG4gIC8qKiBQb3J0IHRoZSBjb25zb2xlIGlzIHJ1bm5pbmcgb24gKGxlYWRlciBvbmx5KSAqL1xuICBwb3J0PzogbnVtYmVyO1xuICAvKiogQ2xlYW51cCBmdW5jdGlvbiB0byBjYWxsIG9uIHNodXRkb3duICovXG4gIGNsZWFudXA6ICgpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQ2hlY2sgZm9yIGEgcnVubmluZyBsZWdhY3kgKHByZS1hdXRoZW50aWNhdGlvbikgRG9sbGhvdXNlTUNQIGNvbnNvbGUgYW5kXG4gKiBsb2cgYSBXQVJOLWxldmVsIG1lc3NhZ2UgaWYgb25lIGlzIGZvdW5kICgjMTc5NCkuXG4gKlxuICogRXh0cmFjdGVkIGZyb20gYHN0YXJ0VW5pZmllZENvbnNvbGVgIHNvIHRoZSB3aXJpbmcgY2FuIGJlIGludGVncmF0aW9uLVxuICogdGVzdGVkIGluIGlzb2xhdGlvbiB3aXRob3V0IHNwaW5uaW5nIHVwIGEgZnVsbCB3ZWIgc2VydmVyIGFuZCBsZWFkZXJcbiAqIGVsZWN0aW9uLiBUaGUgaW1wbGVtZW50YXRpb24gaXMgZmlyZS1hbmQtZm9yZ2V0OiBkZXRlY3Rpb24gZmFpbHVyZXNcbiAqIGFyZSBsb2dnZWQgYXQgREVCVUcgYW5kIG5ldmVyIHByb3BhZ2F0ZSwgYmVjYXVzZSBhIGZhaWx1cmUgaGVyZSBtdXN0XG4gKiBub3QgYmxvY2sgbGVhZGVyIGVsZWN0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGVkIGNvbnNvbGUuXG4gKlxuICogQHBhcmFtIGN1cnJlbnRQb3J0IC0gVGhlIHBvcnQgdGhlIGF1dGhlbnRpY2F0ZWQgY29uc29sZSBpbnRlbmRzIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICBiaW5kIHRvLiBVc2VkIGluIHRoZSB3YXJuaW5nIG1lc3NhZ2UgdG8gaGVscCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgIHVzZXIgdGVsbCB0aGUgdHdvIGNvbnNvbGVzIGFwYXJ0LlxuICogQHBhcmFtIGRldGVjdCAgICAgIC0gT3B0aW9uYWwgaW5qZWN0aW9uIHBvaW50IGZvciB0aGUgZGV0ZWN0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gYGRldGVjdExlZ2FjeUxlYWRlcmAuIFRlc3RzXG4gKiAgICAgICAgICAgICAgICAgICAgICBwYXNzIGEgc3R1Yi5cbiAqIEBwYXJhbSBsb2cgICAgICAgICAtIE9wdGlvbmFsIGluamVjdGlvbiBwb2ludCBmb3IgdGhlIGxvZ2dlci4gRGVmYXVsdHNcbiAqICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBtb2R1bGUgbG9nZ2VyLiBUZXN0cyBwYXNzIGEgc3B5LlxuICogQHJldHVybnMgVGhlIGxlZ2FjeSBsZWFkZXIgaW5mbyBmcm9tIGBkZXRlY3QoKWAsIG9yIG51bGwgaWYgZGV0ZWN0aW9uXG4gKiAgICAgICAgICB0aHJldy4gRXhwb3NlZCBzbyB0ZXN0cyBjYW4gYXNzZXJ0IHRoZSBmdWxsIHJlc3VsdCBzaGFwZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhcm5JZkxlZ2FjeUNvbnNvbGVQcmVzZW50KFxuICBjdXJyZW50UG9ydDogbnVtYmVyLFxuICBkZXRlY3Q6IHR5cGVvZiBkZXRlY3RMZWdhY3lMZWFkZXIgPSBkZXRlY3RMZWdhY3lMZWFkZXIsXG4gIGxvZzogdHlwZW9mIGxvZ2dlciA9IGxvZ2dlcixcbik6IFByb21pc2U8QXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBkZXRlY3RMZWdhY3lMZWFkZXI+PiB8IG51bGw+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBsZWdhY3kgPSBhd2FpdCBkZXRlY3QoKTtcbiAgICBpZiAobGVnYWN5LmxlZ2FjeVJ1bm5pbmcpIHtcbiAgICAgIGxvZy53YXJuKFxuICAgICAgICBgW1VuaWZpZWRDb25zb2xlXSBMZWdhY3kgKHByZS1hdXRoZW50aWNhdGlvbikgRG9sbGhvdXNlTUNQIGNvbnNvbGUgZGV0ZWN0ZWQgYCArXG4gICAgICAgIGAocGlkPSR7bGVnYWN5LnBpZH0sIHBvcnQ9JHtsZWdhY3kucG9ydH0pLiBCb3RoIGNvbnNvbGVzIHdpbGwgcnVuIGAgK1xuICAgICAgICBgaW5kZXBlbmRlbnRseSBvbiBkaWZmZXJlbnQgcG9ydHMgd2l0aCBkaWZmZXJlbnQgc2VjdXJpdHkgcG9zdHVyZS4gYCArXG4gICAgICAgIGBUaGUgYXV0aGVudGljYXRlZCBjb25zb2xlICh0aGlzIHByb2Nlc3MpIHVzZXMgcG9ydCAke2N1cnJlbnRQb3J0fTsgYCArXG4gICAgICAgIGB0aGUgbGVnYWN5IGNvbnNvbGUgdXNlcyBwb3J0ICR7bGVnYWN5LnBvcnQgPz8gTEVHQUNZX0NPTlNPTEVfRkFMTEJBQ0tfUE9SVH0uIGAgK1xuICAgICAgICBgRm9yIGNvbnNpc3RlbnQgc2VjdXJpdHksIHVwZGF0ZSB0aGUgbGVnYWN5IGluc3RhbGxhdGlvbiB0byBhIGAgK1xuICAgICAgICBgdmVyc2lvbiB3aXRoIHRoZSBhdXRoZW50aWNhdGVkIGNvbnNvbGUuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBsZWdhY3k7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIEJlc3QtZWZmb3J0IOKAlCBuZXZlciBibG9jayBlbGVjdGlvbiBvbiBhIGRldGVjdGlvbiBmYWlsdXJlXG4gICAgbG9nLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIExlZ2FjeSBsZWFkZXIgZGV0ZWN0aW9uIGZhaWxlZCcsIHtcbiAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFNlc3Npb25BcGlSZWNvcmQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgcGlkOiBudW1iZXI7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgbGFzdEhlYXJ0YmVhdD86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBpc0xlYWRlcj86IGJvb2xlYW47XG4gIGtpbmQ/OiBzdHJpbmc7XG4gIHNlcnZlclZlcnNpb24/OiBzdHJpbmc7XG4gIGNvbnNvbGVQcm90b2NvbFZlcnNpb24/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9ydExlYWRlckRpc2NvdmVyeSB7XG4gIGxlYWRlckluZm86IENvbnNvbGVMZWFkZXJJbmZvIHwgbnVsbDtcbiAgb3duZXJQaWQ6IG51bWJlciB8IG51bGw7XG4gIHNvdXJjZTogJ2FwaScgfCAnbG9jaycgfCAnc3ludGhldGljJyB8ICdub25lJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCaW5kRmFpbHVyZVJlY292ZXJ5UmVzdWx0IGV4dGVuZHMgUG9ydExlYWRlckRpc2NvdmVyeSB7XG4gIGxvY2tDbGVhbnVwQXR0ZW1wdGVkOiBib29sZWFuO1xuICBsb2NrQ2xlYW51cFBlcmZvcm1lZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb3J0T3duZXJSZXBsYWNlbWVudERlY2lzaW9uIHtcbiAgc2hvdWxkRXZpY3Q6IGJvb2xlYW47XG4gIG93bmVyUGlkOiBudW1iZXIgfCBudWxsO1xuICBwcmVmZXJlbmNlOiBMZWFkZXJQcmVmZXJlbmNlRGVjaXNpb24gfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgRm9yY2VUYWtlb3ZlckF0dGVtcHRSZXN1bHQge1xuICB3ZWJSZXN1bHQ6IFdlYlNlcnZlclJlc3VsdDtcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0O1xuICBmYWxsYmFjazogUG9ydExlYWRlckRpc2NvdmVyeTtcbiAgcmVwbGFjZW1lbnQ6IFBvcnRPd25lclJlcGxhY2VtZW50RGVjaXNpb247XG4gIHJlY292ZXJlZFNlc3Npb25zOiBTZXNzaW9uSW5mb1tdO1xuICBmb3JjZWRLaWxsOiBLaWxsU3RhbGVQcm9jZXNzT3V0Y29tZSB8IG51bGw7XG4gIHRha2VvdmVyQXR0ZW1wdGVkOiBib29sZWFuO1xuICByZWJvdW5kTG9ja0NsYWltZWQ6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBGb2xsb3dlckF1dGhvcml0eVJlc29sdXRpb24ge1xuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQ7XG4gIGRpc2NvdmVyeTogUG9ydExlYWRlckRpc2NvdmVyeSB8IG51bGw7XG4gIHJlcGxhY2VtZW50OiBQb3J0T3duZXJSZXBsYWNlbWVudERlY2lzaW9uIHwgbnVsbDtcbiAgZm9yY2VkQ2xhaW06IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBMZWFkZXJQcmVmbGlnaHRSZXNvbHV0aW9uIHtcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0O1xuICBkaXNjb3Zlcnk6IFBvcnRMZWFkZXJEaXNjb3ZlcnkgfCBudWxsO1xuICByZXBsYWNlbWVudDogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbiB8IG51bGw7XG4gIGRlbW90ZWRUb0ZvbGxvd2VyOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRm9sbG93ZXJBdXRob3JpdHlEZXBlbmRlbmNpZXMge1xuICBpc0xlYWRlcldlYkNvbnNvbGVSZWFjaGFibGVJbXBsPzogdHlwZW9mIGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZTtcbiAgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydEltcGw/OiB0eXBlb2YgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydDtcbiAgZm9yY2VDbGFpbUxlYWRlcnNoaXBJbXBsPzogdHlwZW9mIGZvcmNlQ2xhaW1MZWFkZXJzaGlwO1xuICBkZWxldGVMZWFkZXJMb2NrSW1wbD86IHR5cGVvZiBkZWxldGVMZWFkZXJMb2NrO1xufVxuXG5pbnRlcmZhY2UgTGVhZGVyUHJlZmxpZ2h0RGVwZW5kZW5jaWVzIGV4dGVuZHMgRGlzY292ZXJ5RGVwZW5kZW5jaWVzIHtcbiAgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydEltcGw/OiB0eXBlb2YgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydDtcbiAgcmVhZExlYWRlckxvY2tJbXBsPzogdHlwZW9mIHJlYWRMZWFkZXJMb2NrO1xuICBkZWxldGVMZWFkZXJMb2NrSW1wbD86IHR5cGVvZiBkZWxldGVMZWFkZXJMb2NrO1xufVxuXG5pbnRlcmZhY2UgRm9sbG93ZXJBdXRob3JpdHlNb25pdG9yRGVwZW5kZW5jaWVzIGV4dGVuZHMgRm9sbG93ZXJBdXRob3JpdHlEZXBlbmRlbmNpZXMge1xuICByZXNvbHZlRm9sbG93ZXJBdXRob3JpdHlJbXBsPzogdHlwZW9mIHJlc29sdmVGb2xsb3dlckF1dGhvcml0eTtcbiAgc2V0VGltZW91dEltcGw/OiB0eXBlb2Ygc2V0VGltZW91dDtcbiAgY2xlYXJUaW1lb3V0SW1wbD86IHR5cGVvZiBjbGVhclRpbWVvdXQ7XG4gIG5vd0ltcGw/OiAoKSA9PiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBMZWFkZXJMZWFzZVJlY29uY2lsaWF0aW9uRGVwZW5kZW5jaWVzIHtcbiAgcmVhZExlYWRlckxvY2tJbXBsPzogdHlwZW9mIHJlYWRMZWFkZXJMb2NrO1xuICBmaW5kUGlkT25Qb3J0SW1wbD86IHR5cGVvZiBmaW5kUGlkT25Qb3J0O1xuICBjbGFpbUxlYWRlcnNoaXBJbXBsPzogdHlwZW9mIGNsYWltTGVhZGVyc2hpcDtcbiAgZGVsZXRlTGVhZGVyTG9ja0ltcGw/OiB0eXBlb2YgZGVsZXRlTGVhZGVyTG9jaztcbiAga2lsbFN0YWxlUHJvY2Vzc0RldGFpbGVkSW1wbD86IHR5cGVvZiBraWxsU3RhbGVQcm9jZXNzRGV0YWlsZWQ7XG4gIHNldFRpbWVvdXRJbXBsPzogdHlwZW9mIHNldFRpbWVvdXQ7XG4gIGNsZWFyVGltZW91dEltcGw/OiB0eXBlb2YgY2xlYXJUaW1lb3V0O1xufVxuXG5pbnRlcmZhY2UgRGlzY292ZXJ5RGVwZW5kZW5jaWVzIHtcbiAgZmV0Y2hJbXBsPzogdHlwZW9mIGZldGNoO1xuICBmaW5kUGlkT25Qb3J0SW1wbD86IHR5cGVvZiBmaW5kUGlkT25Qb3J0O1xuICByZWFkTGVhZGVyTG9ja0ltcGw/OiB0eXBlb2YgcmVhZExlYWRlckxvY2s7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRGlzY292ZXJ5SGVhZGVycyhhdXRoVG9rZW46IHN0cmluZyB8IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIGF1dGhUb2tlbiA/IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2F1dGhUb2tlbn1gIH0gOiB7fTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoTGVhZGVyU2Vzc2lvbnNTbmFwc2hvdChcbiAgcG9ydDogbnVtYmVyLFxuICBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwsXG4gIGZldGNoSW1wbDogdHlwZW9mIGZldGNoID0gZmV0Y2gsXG4pOiBQcm9taXNlPFNlc3Npb25JbmZvW10+IHtcbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCBMRUFERVJfRElTQ09WRVJZX1RJTUVPVVRfTVMpO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hJbXBsKGBodHRwOi8vMTI3LjAuMC4xOiR7cG9ydH0vYXBpL3Nlc3Npb25zYCwge1xuICAgICAgaGVhZGVyczogYnVpbGREaXNjb3ZlcnlIZWFkZXJzKGF1dGhUb2tlbiksXG4gICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIHsgc2Vzc2lvbnM/OiBTZXNzaW9uSW5mb1tdIH07XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGF0YS5zZXNzaW9ucykgPyBkYXRhLnNlc3Npb25zIDogW107XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5kZWJ1ZygnW1VuaWZpZWRDb25zb2xlXSBGYWlsZWQgdG8gZmV0Y2ggbGVhZGVyIHNlc3Npb24gc25hcHNob3QnLCB7XG4gICAgICBwb3J0LFxuICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICB9KTtcbiAgICByZXR1cm4gW107XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTGVhZGVySW5mb0Zyb21TZXNzaW9uKHBvcnQ6IG51bWJlciwgb3duZXJQaWQ6IG51bWJlciwgbGVhZGVyU2Vzc2lvbjogU2Vzc2lvbkFwaVJlY29yZCk6IENvbnNvbGVMZWFkZXJJbmZvIHtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBMT0NLX1ZFUlNJT04sXG4gICAgcGlkOiBvd25lclBpZCxcbiAgICBwb3J0LFxuICAgIHNlc3Npb25JZDogVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobGVhZGVyU2Vzc2lvbi5zZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgIHN0YXJ0ZWRBdDogbGVhZGVyU2Vzc2lvbi5zdGFydGVkQXQgPz8gY3VycmVudFRpbWVzdGFtcCgpLFxuICAgIGhlYXJ0YmVhdDogbGVhZGVyU2Vzc2lvbi5sYXN0SGVhcnRiZWF0ID8/IGN1cnJlbnRUaW1lc3RhbXAoKSxcbiAgICBzZXJ2ZXJWZXJzaW9uOiBsZWFkZXJTZXNzaW9uLnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IGxlYWRlclNlc3Npb24uY29uc29sZVByb3RvY29sVmVyc2lvbiA/PyBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU3ludGhldGljTGVhZGVySW5mbyhwb3J0OiBudW1iZXIsIG93bmVyUGlkOiBudW1iZXIpOiBDb25zb2xlTGVhZGVySW5mbyB7XG4gIGNvbnN0IG5vdyA9IGN1cnJlbnRUaW1lc3RhbXAoKTtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBMT0NLX1ZFUlNJT04sXG4gICAgcGlkOiBvd25lclBpZCxcbiAgICBwb3J0LFxuICAgIHNlc3Npb25JZDogYCR7U1lOVEhFVElDX1BPUlRfT1dORVJfU0VTU0lPTl9QUkVGSVh9JHtvd25lclBpZH1gLFxuICAgIHN0YXJ0ZWRBdDogbm93LFxuICAgIGhlYXJ0YmVhdDogbm93LFxuICAgIHNlcnZlclZlcnNpb246IExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uOiBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRpc2NvdmVyTGVhZGVyVmlhU2Vzc2lvbnNBcGkoXG4gIHBvcnQ6IG51bWJlcixcbiAgb3duZXJQaWQ6IG51bWJlcixcbiAgYXV0aFRva2VuOiBzdHJpbmcgfCBudWxsLFxuICBmZXRjaEltcGw6IHR5cGVvZiBmZXRjaCxcbik6IFByb21pc2U8Q29uc29sZUxlYWRlckluZm8gfCBudWxsPiB7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgTEVBREVSX0RJU0NPVkVSWV9USU1FT1VUX01TKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hJbXBsKGBodHRwOi8vMTI3LjAuMC4xOiR7cG9ydH0vYXBpL3Nlc3Npb25zYCwge1xuICAgICAgaGVhZGVyczogYnVpbGREaXNjb3ZlcnlIZWFkZXJzKGF1dGhUb2tlbiksXG4gICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgeyBzZXNzaW9ucz86IFNlc3Npb25BcGlSZWNvcmRbXSB9O1xuICAgIGNvbnN0IHNlc3Npb25zID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLnNlc3Npb25zKSA/IHBheWxvYWQuc2Vzc2lvbnMgOiBbXTtcbiAgICBjb25zdCBsZWFkZXJTZXNzaW9uID0gc2Vzc2lvbnMuZmluZCgoc2Vzc2lvbikgPT5cbiAgICAgIHNlc3Npb24ucGlkID09PSBvd25lclBpZCAmJlxuICAgICAgc2Vzc2lvbi5pc0xlYWRlciA9PT0gdHJ1ZSAmJlxuICAgICAgc2Vzc2lvbi5raW5kID09PSAnbWNwJyAmJlxuICAgICAgc2Vzc2lvbi5zdGF0dXMgIT09ICdzdG9wcGVkJ1xuICAgICk7XG4gICAgcmV0dXJuIGxlYWRlclNlc3Npb24gPyBidWlsZExlYWRlckluZm9Gcm9tU2Vzc2lvbihwb3J0LCBvd25lclBpZCwgbGVhZGVyU2Vzc2lvbikgOiBudWxsO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydChcbiAgcG9ydDogbnVtYmVyLFxuICBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwsXG4gIGRlcHM6IERpc2NvdmVyeURlcGVuZGVuY2llcyA9IHt9LFxuKTogUHJvbWlzZTxQb3J0TGVhZGVyRGlzY292ZXJ5PiB7XG4gIGNvbnN0IGZldGNoSW1wbCA9IGRlcHMuZmV0Y2hJbXBsID8/IGZldGNoO1xuICBjb25zdCBmaW5kUGlkT25Qb3J0SW1wbCA9IGRlcHMuZmluZFBpZE9uUG9ydEltcGwgPz8gZmluZFBpZE9uUG9ydDtcbiAgY29uc3QgcmVhZExlYWRlckxvY2tJbXBsID0gZGVwcy5yZWFkTGVhZGVyTG9ja0ltcGwgPz8gcmVhZExlYWRlckxvY2s7XG4gIGNvbnN0IG93bmVyUGlkID0gYXdhaXQgZmluZFBpZE9uUG9ydEltcGwocG9ydCk7XG5cbiAgaWYgKG93bmVyUGlkICE9PSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxlYWRlckluZm8gPSBhd2FpdCBkaXNjb3ZlckxlYWRlclZpYVNlc3Npb25zQXBpKHBvcnQsIG93bmVyUGlkLCBhdXRoVG9rZW4sIGZldGNoSW1wbCk7XG4gICAgICBpZiAobGVhZGVySW5mbykge1xuICAgICAgICByZXR1cm4geyBvd25lclBpZCwgc291cmNlOiAnYXBpJywgbGVhZGVySW5mbyB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIEZhaWxlZCB0byBxdWVyeSBhY3RpdmUgbGVhZGVyIHNlc3Npb25zJywge1xuICAgICAgICBwb3J0LFxuICAgICAgICBvd25lclBpZCxcbiAgICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGxvY2sgPSBhd2FpdCByZWFkTGVhZGVyTG9ja0ltcGwoKTtcbiAgaWYgKGxvY2s/LnBvcnQgPT09IHBvcnQgJiYgKG93bmVyUGlkID09PSBudWxsIHx8IGxvY2sucGlkID09PSBvd25lclBpZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duZXJQaWQ6IG93bmVyUGlkID8/IGxvY2sucGlkLFxuICAgICAgc291cmNlOiAnbG9jaycsXG4gICAgICBsZWFkZXJJbmZvOiB7XG4gICAgICAgIC4uLmxvY2ssXG4gICAgICAgIHNlc3Npb25JZDogVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobG9jay5zZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKG93bmVyUGlkICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bmVyUGlkLFxuICAgICAgc291cmNlOiAnc3ludGhldGljJyxcbiAgICAgIGxlYWRlckluZm86IGJ1aWxkU3ludGhldGljTGVhZGVySW5mbyhwb3J0LCBvd25lclBpZCksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7IGxlYWRlckluZm86IG51bGwsIG93bmVyUGlkOiBudWxsLCBzb3VyY2U6ICdub25lJyB9O1xufVxuXG5pbnRlcmZhY2UgQmluZEZhaWx1cmVSZWNvdmVyeURlcGVuZGVuY2llcyBleHRlbmRzIERpc2NvdmVyeURlcGVuZGVuY2llcyB7XG4gIGRlbGV0ZUxlYWRlckxvY2tJbXBsPzogdHlwZW9mIGRlbGV0ZUxlYWRlckxvY2s7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvdmVyTGVhZGVyQmluZEZhaWx1cmUoXG4gIHByb3Zpc2lvbmFsTGVhZGVyOiBDb25zb2xlTGVhZGVySW5mbyxcbiAgcG9ydDogbnVtYmVyLFxuICBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwsXG4gIGRlcHM6IEJpbmRGYWlsdXJlUmVjb3ZlcnlEZXBlbmRlbmNpZXMgPSB7fSxcbik6IFByb21pc2U8QmluZEZhaWx1cmVSZWNvdmVyeVJlc3VsdD4ge1xuICBjb25zdCByZWFkTGVhZGVyTG9ja0ltcGwgPSBkZXBzLnJlYWRMZWFkZXJMb2NrSW1wbCA/PyByZWFkTGVhZGVyTG9jaztcbiAgY29uc3QgZGVsZXRlTGVhZGVyTG9ja0ltcGwgPSBkZXBzLmRlbGV0ZUxlYWRlckxvY2tJbXBsID8/IGRlbGV0ZUxlYWRlckxvY2s7XG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciBiaW5kIHJlY292ZXJ5IGluaXRpYXRlZCcsIHtcbiAgICBwcm92aXNpb25hbFNlc3Npb25JZDogcHJvdmlzaW9uYWxMZWFkZXIuc2Vzc2lvbklkLFxuICAgIHByb3Zpc2lvbmFsUGlkOiBwcm92aXNpb25hbExlYWRlci5waWQsXG4gICAgcG9ydCxcbiAgfSk7XG5cbiAgbGV0IGZhbGxiYWNrID0gYXdhaXQgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydChwb3J0LCBhdXRoVG9rZW4sIGRlcHMpO1xuICBsZXQgbG9ja0NsZWFudXBBdHRlbXB0ZWQgPSBmYWxzZTtcbiAgbGV0IGxvY2tDbGVhbnVwUGVyZm9ybWVkID0gZmFsc2U7XG4gIGNvbnN0IGN1cnJlbnRMb2NrID0gYXdhaXQgcmVhZExlYWRlckxvY2tJbXBsKCk7XG4gIGNvbnN0IHByb3Zpc2lvbmFsTG9ja01hdGNoZXMgPSAoXG4gICAgY3VycmVudExvY2s/LnBpZCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucGlkICYmXG4gICAgY3VycmVudExvY2sucG9ydCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucG9ydCAmJlxuICAgIGN1cnJlbnRMb2NrLnNlc3Npb25JZCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIuc2Vzc2lvbklkXG4gICk7XG4gIGNvbnN0IGZhbGxiYWNrUG9pbnRzVG9Qcm92aXNpb25hbExlYWRlciA9IChcbiAgICBmYWxsYmFjay5sZWFkZXJJbmZvPy5waWQgPT09IHByb3Zpc2lvbmFsTGVhZGVyLnBpZCAmJlxuICAgIGZhbGxiYWNrLmxlYWRlckluZm8ucG9ydCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucG9ydCAmJlxuICAgIGZhbGxiYWNrLmxlYWRlckluZm8uc2Vzc2lvbklkID09PSBwcm92aXNpb25hbExlYWRlci5zZXNzaW9uSWRcbiAgKTtcblxuICBpZiAocHJvdmlzaW9uYWxMb2NrTWF0Y2hlcykge1xuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICBhd2FpdCBkZWxldGVMZWFkZXJMb2NrSW1wbCgpO1xuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkID0gdHJ1ZTtcbiAgICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBSZW1vdmVkIHByb3Zpc2lvbmFsIGxlYWRlciBsb2NrIGFmdGVyIGJpbmQgZmFpbHVyZScsIHtcbiAgICAgIHByb3Zpc2lvbmFsU2Vzc2lvbklkOiBwcm92aXNpb25hbExlYWRlci5zZXNzaW9uSWQsXG4gICAgICBwcm92aXNpb25hbFBpZDogcHJvdmlzaW9uYWxMZWFkZXIucGlkLFxuICAgICAgcG9ydCxcbiAgICB9KTtcbiAgICBpZiAoZmFsbGJhY2tQb2ludHNUb1Byb3Zpc2lvbmFsTGVhZGVyKSB7XG4gICAgICBmYWxsYmFjayA9IGF3YWl0IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnQocG9ydCwgYXV0aFRva2VuLCBkZXBzKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBMZWFkZXIgYmluZCByZWNvdmVyeSBjb21wbGV0ZWQnLCB7XG4gICAgcHJvdmlzaW9uYWxTZXNzaW9uSWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnNlc3Npb25JZCxcbiAgICBwcm92aXNpb25hbFBpZDogcHJvdmlzaW9uYWxMZWFkZXIucGlkLFxuICAgIHBvcnQsXG4gICAgZGlzY292ZXJ5U291cmNlOiBmYWxsYmFjay5zb3VyY2UsXG4gICAgb3duZXJQaWQ6IGZhbGxiYWNrLm93bmVyUGlkLFxuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkLFxuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLmZhbGxiYWNrLFxuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkLFxuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVQb3J0T3duZXJSZXBsYWNlbWVudChcbiAgY2FuZGlkYXRlTGVhZGVyOiBDb25zb2xlTGVhZGVySW5mbyxcbiAgZmFsbGJhY2s6IFBvcnRMZWFkZXJEaXNjb3ZlcnksXG4pOiBQb3J0T3duZXJSZXBsYWNlbWVudERlY2lzaW9uIHtcbiAgaWYgKCFmYWxsYmFjay5sZWFkZXJJbmZvIHx8IGZhbGxiYWNrLm93bmVyUGlkID09PSBudWxsIHx8IGZhbGxiYWNrLm93bmVyUGlkID09PSBjYW5kaWRhdGVMZWFkZXIucGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3VsZEV2aWN0OiBmYWxzZSxcbiAgICAgIG93bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICAgIHByZWZlcmVuY2U6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHByZWZlcmVuY2UgPSBldmFsdWF0ZUxlYWRlclByZWZlcmVuY2UoY2FuZGlkYXRlTGVhZGVyLCBmYWxsYmFjay5sZWFkZXJJbmZvKTtcbiAgcmV0dXJuIHtcbiAgICBzaG91bGRFdmljdDogcHJlZmVyZW5jZS5zaG91bGRSZXBsYWNlLFxuICAgIG93bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICBwcmVmZXJlbmNlLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkRXZpY3REaXNjb3ZlcmVkT3duZXIoXG4gIGRpc2NvdmVyeTogUG9ydExlYWRlckRpc2NvdmVyeSxcbiAgcmVwbGFjZW1lbnQ6IFBvcnRPd25lclJlcGxhY2VtZW50RGVjaXNpb24sXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGRpc2NvdmVyeS5zb3VyY2UgIT09ICdzeW50aGV0aWMnICYmIHJlcGxhY2VtZW50LnNob3VsZEV2aWN0ICYmIHJlcGxhY2VtZW50Lm93bmVyUGlkICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBidWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgcHJvdmlzaW9uYWxMZWFkZXI6IENvbnNvbGVMZWFkZXJJbmZvLFxuICBiaW5kUmVzdWx0OiBXZWJTZXJ2ZXJSZXN1bHRbJ2JpbmRSZXN1bHQnXSxcbiAgZmFsbGJhY2s6IFBvcnRMZWFkZXJEaXNjb3ZlcnksXG4gIHJlcGxhY2VtZW50PzogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbixcbiAgZm9yY2VkS2lsbD86IEtpbGxTdGFsZVByb2Nlc3NPdXRjb21lIHwgbnVsbCxcbikge1xuICByZXR1cm4ge1xuICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgIGJpbmRFcnJvcjogYmluZFJlc3VsdD8uZXJyb3IsXG4gICAgYmluZERldGFpbDogYmluZFJlc3VsdD8uZGV0YWlsLFxuICAgIHByb3Zpc2lvbmFsTGVhZGVyUGlkOiBwcm92aXNpb25hbExlYWRlci5waWQsXG4gICAgcHJvdmlzaW9uYWxMZWFkZXJTZXNzaW9uSWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnNlc3Npb25JZCxcbiAgICBwcm92aXNpb25hbExlYWRlclZlcnNpb246IHByb3Zpc2lvbmFsTGVhZGVyLnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIHByb3Zpc2lvbmFsTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBwcm92aXNpb25hbExlYWRlci5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICBmYWxsYmFja093bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICBmYWxsYmFja1NvdXJjZTogZmFsbGJhY2suc291cmNlLFxuICAgIGZhbGxiYWNrTGVhZGVyUGlkOiBmYWxsYmFjay5sZWFkZXJJbmZvPy5waWQsXG4gICAgZmFsbGJhY2tMZWFkZXJTZXNzaW9uSWQ6IGZhbGxiYWNrLmxlYWRlckluZm8/LnNlc3Npb25JZCxcbiAgICBmYWxsYmFja0xlYWRlclZlcnNpb246IGZhbGxiYWNrLmxlYWRlckluZm8/LnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIGZhbGxiYWNrTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBmYWxsYmFjay5sZWFkZXJJbmZvPy5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICByZXBsYWNlbWVudFNob3VsZEV2aWN0OiByZXBsYWNlbWVudD8uc2hvdWxkRXZpY3QgPz8gZmFsc2UsXG4gICAgcmVwbGFjZW1lbnRSZWFzb246IHJlcGxhY2VtZW50Py5wcmVmZXJlbmNlPy5yZWFzb24sXG4gICAgZm9yY2VkS2lsbFJlYXNvbjogZm9yY2VkS2lsbD8ucmVhc29uLFxuICAgIGZvcmNlZEtpbGxQaWQ6IGZvcmNlZEtpbGw/LnBpZCxcbiAgICBmb3JjZWRLaWxsRGV0YWlsOiBmb3JjZWRLaWxsPy5kZXRhaWwsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQXV0aG9yaXR5UmVzb2x1dGlvbkxvZ0NvbnRleHQoXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIGVsZWN0ZWRMZWFkZXI6IENvbnNvbGVMZWFkZXJJbmZvLFxuICBkaXNjb3Zlcnk6IFBvcnRMZWFkZXJEaXNjb3ZlcnkgfCBudWxsLFxuICByZXBsYWNlbWVudDogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbiB8IG51bGwsXG4pIHtcbiAgcmV0dXJuIHtcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBlbGVjdGVkTGVhZGVyUGlkOiBlbGVjdGVkTGVhZGVyLnBpZCxcbiAgICBlbGVjdGVkTGVhZGVyU2Vzc2lvbklkOiBlbGVjdGVkTGVhZGVyLnNlc3Npb25JZCxcbiAgICBlbGVjdGVkTGVhZGVyVmVyc2lvbjogZWxlY3RlZExlYWRlci5zZXJ2ZXJWZXJzaW9uID8/IExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgICBlbGVjdGVkTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBlbGVjdGVkTGVhZGVyLmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPz8gQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICAgIHNlcnZpbmdPd25lclBpZDogZGlzY292ZXJ5Py5vd25lclBpZCA/PyBudWxsLFxuICAgIHNlcnZpbmdTb3VyY2U6IGRpc2NvdmVyeT8uc291cmNlID8/ICdub25lJyxcbiAgICBzZXJ2aW5nTGVhZGVyUGlkOiBkaXNjb3Zlcnk/LmxlYWRlckluZm8/LnBpZCA/PyBudWxsLFxuICAgIHNlcnZpbmdMZWFkZXJTZXNzaW9uSWQ6IGRpc2NvdmVyeT8ubGVhZGVySW5mbz8uc2Vzc2lvbklkID8/IG51bGwsXG4gICAgc2VydmluZ0xlYWRlclZlcnNpb246IGRpc2NvdmVyeT8ubGVhZGVySW5mbz8uc2VydmVyVmVyc2lvbiA/PyBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04sXG4gICAgc2VydmluZ0xlYWRlclByb3RvY29sVmVyc2lvbjogZGlzY292ZXJ5Py5sZWFkZXJJbmZvPy5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICByZXBsYWNlbWVudFNob3VsZEV2aWN0OiByZXBsYWNlbWVudD8uc2hvdWxkRXZpY3QgPz8gZmFsc2UsXG4gICAgcmVwbGFjZW1lbnRSZWFzb246IHJlcGxhY2VtZW50Py5wcmVmZXJlbmNlPy5yZWFzb24gPz8gbnVsbCxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVGb2xsb3dlckF1dGhvcml0eShcbiAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgZGVwczogRm9sbG93ZXJBdXRob3JpdHlEZXBlbmRlbmNpZXMgPSB7fSxcbik6IFByb21pc2U8Rm9sbG93ZXJBdXRob3JpdHlSZXNvbHV0aW9uPiB7XG4gIGNvbnN0IGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwgPSBkZXBzLmlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwgPz8gaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlO1xuICBjb25zdCBkaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0SW1wbCA9IGRlcHMuZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydEltcGwgPz8gZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydDtcbiAgY29uc3QgZm9yY2VDbGFpbUxlYWRlcnNoaXBJbXBsID0gZGVwcy5mb3JjZUNsYWltTGVhZGVyc2hpcEltcGwgPz8gZm9yY2VDbGFpbUxlYWRlcnNoaXA7XG4gIGNvbnN0IGRlbGV0ZUxlYWRlckxvY2tJbXBsID0gZGVwcy5kZWxldGVMZWFkZXJMb2NrSW1wbCA/PyBkZWxldGVMZWFkZXJMb2NrO1xuXG4gIGNvbnN0IHJlYWNoYWJsZSA9IGF3YWl0IGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwoZWxlY3Rpb24ubGVhZGVySW5mbyk7XG4gIGlmICghcmVhY2hhYmxlKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gRWxlY3RlZCBsZWFkZXIgaXMgbm90IHNlcnZpbmcgdGhlIGNvbnNvbGUgcG9ydDsgZm9yY2luZyB0YWtlb3ZlcicsIHtcbiAgICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgICAgZWxlY3RlZExlYWRlclBpZDogZWxlY3Rpb24ubGVhZGVySW5mby5waWQsXG4gICAgICBlbGVjdGVkTGVhZGVyU2Vzc2lvbklkOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnNlc3Npb25JZCxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlY3Rpb246IGF3YWl0IGZvcmNlQ2xhaW1MZWFkZXJzaGlwSW1wbChzZXNzaW9uSWQsIGNvbnNvbGVQb3J0KSxcbiAgICAgIGRpc2NvdmVyeTogbnVsbCxcbiAgICAgIHJlcGxhY2VtZW50OiBudWxsLFxuICAgICAgZm9yY2VkQ2xhaW06IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGNhbmRpZGF0ZUxlYWRlciA9IGNyZWF0ZUxlYWRlckluZm8oc2Vzc2lvbklkLCBjb25zb2xlUG9ydCk7XG4gIGNvbnN0IGRpc2NvdmVyeSA9IGF3YWl0IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnRJbXBsKGNvbnNvbGVQb3J0LCBudWxsKTtcbiAgaWYgKCFkaXNjb3ZlcnkubGVhZGVySW5mbyB8fCBkaXNjb3Zlcnkub3duZXJQaWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlY3Rpb24sXG4gICAgICBkaXNjb3ZlcnksXG4gICAgICByZXBsYWNlbWVudDogbnVsbCxcbiAgICAgIGZvcmNlZENsYWltOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcmVwbGFjZW1lbnQgPSBldmFsdWF0ZVBvcnRPd25lclJlcGxhY2VtZW50KGNhbmRpZGF0ZUxlYWRlciwgZGlzY292ZXJ5KTtcbiAgaWYgKHNob3VsZEV2aWN0RGlzY292ZXJlZE93bmVyKGRpc2NvdmVyeSwgcmVwbGFjZW1lbnQpKSB7XG4gICAgYXdhaXQgZGVsZXRlTGVhZGVyTG9ja0ltcGwoKTtcbiAgICBsb2dnZXIud2FybihcbiAgICAgIGRpc2NvdmVyeS5vd25lclBpZCA9PT0gZWxlY3Rpb24ubGVhZGVySW5mby5waWRcbiAgICAgICAgPyAnW1VuaWZpZWRDb25zb2xlXSBPbGRlciBjb25zb2xlIGxlYWRlciBkZXRlY3RlZCBvbiB0aGUgY29uc29sZSBwb3J0OyBuZXdlciBzZXNzaW9uIHdpbGwgdGFrZSBvdmVyJ1xuICAgICAgICA6ICdbVW5pZmllZENvbnNvbGVdIFNwbGl0LWJyYWluIGNvbnNvbGUgYXV0aG9yaXR5IGRldGVjdGVkOyBuZXdlciBzZXNzaW9uIHdpbGwgcmVwbGFjZSB0aGUgYWN0dWFsIHBvcnQgb3duZXInLFxuICAgICAgYnVpbGRBdXRob3JpdHlSZXNvbHV0aW9uTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgIGRpc2NvdmVyeSxcbiAgICAgICAgcmVwbGFjZW1lbnQsXG4gICAgICApLFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZWN0aW9uOiB7IHJvbGU6ICdsZWFkZXInLCBsZWFkZXJJbmZvOiBjYW5kaWRhdGVMZWFkZXIgfSxcbiAgICAgIGRpc2NvdmVyeSxcbiAgICAgIHJlcGxhY2VtZW50LFxuICAgICAgZm9yY2VkQ2xhaW06IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBpZiAoZGlzY292ZXJ5Lm93bmVyUGlkICE9PSBlbGVjdGlvbi5sZWFkZXJJbmZvLnBpZCkge1xuICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIFNwbGl0LWJyYWluIGNvbnNvbGUgYXV0aG9yaXR5IGRldGVjdGVkOyBmb2xsb3dpbmcgdGhlIGFjdHVhbCBwb3J0IG93bmVyJywgYnVpbGRBdXRob3JpdHlSZXNvbHV0aW9uTG9nQ29udGV4dChcbiAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgZWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgIGRpc2NvdmVyeSxcbiAgICAgIHJlcGxhY2VtZW50LFxuICAgICkpO1xuICAgIHJldHVybiB7XG4gICAgICBlbGVjdGlvbjogeyByb2xlOiAnZm9sbG93ZXInLCBsZWFkZXJJbmZvOiBkaXNjb3ZlcnkubGVhZGVySW5mbyB9LFxuICAgICAgZGlzY292ZXJ5LFxuICAgICAgcmVwbGFjZW1lbnQsXG4gICAgICBmb3JjZWRDbGFpbTogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZWxlY3Rpb24sXG4gICAgZGlzY292ZXJ5LFxuICAgIHJlcGxhY2VtZW50LFxuICAgIGZvcmNlZENsYWltOiBmYWxzZSxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVMZWFkZXJQcmVmbGlnaHRBdXRob3JpdHkoXG4gIHNlc3Npb25JZDogc3RyaW5nLFxuICBjb25zb2xlUG9ydDogbnVtYmVyLFxuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQsXG4gIGF1dGhUb2tlbjogc3RyaW5nIHwgbnVsbCxcbiAgZGVwczogTGVhZGVyUHJlZmxpZ2h0RGVwZW5kZW5jaWVzID0ge30sXG4pOiBQcm9taXNlPExlYWRlclByZWZsaWdodFJlc29sdXRpb24+IHtcbiAgY29uc3QgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydEltcGwgPSBkZXBzLmRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnRJbXBsID8/IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnQ7XG4gIGNvbnN0IHJlYWRMZWFkZXJMb2NrSW1wbCA9IGRlcHMucmVhZExlYWRlckxvY2tJbXBsID8/IHJlYWRMZWFkZXJMb2NrO1xuICBjb25zdCBkZWxldGVMZWFkZXJMb2NrSW1wbCA9IGRlcHMuZGVsZXRlTGVhZGVyTG9ja0ltcGwgPz8gZGVsZXRlTGVhZGVyTG9jaztcblxuICBjb25zdCBkaXNjb3ZlcnkgPSBhd2FpdCBkaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0SW1wbChjb25zb2xlUG9ydCwgYXV0aFRva2VuLCBkZXBzKTtcbiAgaWYgKCFkaXNjb3ZlcnkubGVhZGVySW5mbyB8fCBkaXNjb3Zlcnkub3duZXJQaWQgPT09IG51bGwgfHwgZGlzY292ZXJ5Lm93bmVyUGlkID09PSBlbGVjdGlvbi5sZWFkZXJJbmZvLnBpZCkge1xuICAgIHJldHVybiB7XG4gICAgICBlbGVjdGlvbixcbiAgICAgIGRpc2NvdmVyeSxcbiAgICAgIHJlcGxhY2VtZW50OiBkaXNjb3ZlcnkubGVhZGVySW5mbyA/IGV2YWx1YXRlUG9ydE93bmVyUmVwbGFjZW1lbnQoZWxlY3Rpb24ubGVhZGVySW5mbywgZGlzY292ZXJ5KSA6IG51bGwsXG4gICAgICBkZW1vdGVkVG9Gb2xsb3dlcjogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxhY2VtZW50ID0gZXZhbHVhdGVQb3J0T3duZXJSZXBsYWNlbWVudChlbGVjdGlvbi5sZWFkZXJJbmZvLCBkaXNjb3ZlcnkpO1xuICBpZiAoc2hvdWxkRXZpY3REaXNjb3ZlcmVkT3duZXIoZGlzY292ZXJ5LCByZXBsYWNlbWVudCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlY3Rpb24sXG4gICAgICBkaXNjb3ZlcnksXG4gICAgICByZXBsYWNlbWVudCxcbiAgICAgIGRlbW90ZWRUb0ZvbGxvd2VyOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHJvdmlzaW9uYWxMb2NrID0gYXdhaXQgcmVhZExlYWRlckxvY2tJbXBsKCk7XG4gIGNvbnN0IHByb3Zpc2lvbmFsTG9ja01hdGNoZXMgPSAoXG4gICAgcHJvdmlzaW9uYWxMb2NrPy5waWQgPT09IGVsZWN0aW9uLmxlYWRlckluZm8ucGlkICYmXG4gICAgcHJvdmlzaW9uYWxMb2NrLnBvcnQgPT09IGVsZWN0aW9uLmxlYWRlckluZm8ucG9ydCAmJlxuICAgIHByb3Zpc2lvbmFsTG9jay5zZXNzaW9uSWQgPT09IGVsZWN0aW9uLmxlYWRlckluZm8uc2Vzc2lvbklkXG4gICk7XG5cbiAgaWYgKHByb3Zpc2lvbmFsTG9ja01hdGNoZXMpIHtcbiAgICBhd2FpdCBkZWxldGVMZWFkZXJMb2NrSW1wbCgpO1xuICB9XG5cbiAgbG9nZ2VyLndhcm4oXG4gICAgZGlzY292ZXJ5LnNvdXJjZSA9PT0gJ3N5bnRoZXRpYydcbiAgICAgID8gJ1tVbmlmaWVkQ29uc29sZV0gUHJvdmlzaW9uYWwgbGVhZGVyIGRldGVjdGVkIGFuIHVua25vd24gYWN0aXZlIGNvbnNvbGUgb3duZXIgYmVmb3JlIGJpbmQ7IGZvbGxvd2luZyB0aGUgZXhpc3RpbmcgcG9ydCBvd25lciBpbnN0ZWFkIG9mIGZvcmNpbmcgZXZpY3Rpb24nXG4gICAgICA6ICdbVW5pZmllZENvbnNvbGVdIFByb3Zpc2lvbmFsIGxlYWRlciBkZXRlY3RlZCBhIGhlYWx0aHkgY29uc29sZSBvd25lciBiZWZvcmUgYmluZDsgZm9sbG93aW5nIHRoZSBleGlzdGluZyBsZWFkZXIgaW5zdGVhZCBvZiBmb3JjaW5nIHRha2VvdmVyJyxcbiAgICB7XG4gICAgICAuLi5idWlsZEF1dGhvcml0eVJlc29sdXRpb25Mb2dDb250ZXh0KGNvbnNvbGVQb3J0LCBlbGVjdGlvbi5sZWFkZXJJbmZvLCBkaXNjb3ZlcnksIHJlcGxhY2VtZW50KSxcbiAgICAgIHByb3Zpc2lvbmFsTG9ja0NsZWFyZWQ6IHByb3Zpc2lvbmFsTG9ja01hdGNoZXMsXG4gICAgfSxcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIGVsZWN0aW9uOiB7IHJvbGU6ICdmb2xsb3dlcicsIGxlYWRlckluZm86IGRpc2NvdmVyeS5sZWFkZXJJbmZvIH0sXG4gICAgZGlzY292ZXJ5LFxuICAgIHJlcGxhY2VtZW50LFxuICAgIGRlbW90ZWRUb0ZvbGxvd2VyOiB0cnVlLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRGb2xsb3dlckF1dGhvcml0eU1vbml0b3IoXG4gIG9wdGlvbnM6IFVuaWZpZWRDb25zb2xlT3B0aW9ucyxcbiAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0LFxuICBwcm9tb3Rpb25NZ3I6IFByb21vdGlvbk1hbmFnZXIsXG4gIGZvcndhcmRpbmdTaW5rOiBMZWFkZXJGb3J3YXJkaW5nTG9nU2luayxcbiAgc2Vzc2lvbkhlYXJ0YmVhdDogU2Vzc2lvbkhlYXJ0YmVhdCxcbiAgZGVwczogRm9sbG93ZXJBdXRob3JpdHlNb25pdG9yRGVwZW5kZW5jaWVzID0ge30sXG4pOiAoKSA9PiB2b2lkIHtcbiAgY29uc3QgcmVzb2x2ZUZvbGxvd2VyQXV0aG9yaXR5SW1wbCA9IGRlcHMucmVzb2x2ZUZvbGxvd2VyQXV0aG9yaXR5SW1wbCA/PyByZXNvbHZlRm9sbG93ZXJBdXRob3JpdHk7XG4gIGNvbnN0IHNldFRpbWVvdXRJbXBsID0gZGVwcy5zZXRUaW1lb3V0SW1wbCA/PyBzZXRUaW1lb3V0O1xuICBjb25zdCBjbGVhclRpbWVvdXRJbXBsID0gZGVwcy5jbGVhclRpbWVvdXRJbXBsID8/IGNsZWFyVGltZW91dDtcbiAgY29uc3Qgbm93SW1wbCA9IGRlcHMubm93SW1wbCA/PyBEYXRlLm5vdztcbiAgbGV0IGN1cnJlbnRFbGVjdGlvbiA9IGVsZWN0aW9uO1xuICBsZXQgcHJvbW90aW9uUXVldWVkID0gZmFsc2U7XG4gIGxldCBjb25zZWN1dGl2ZUZhaWx1cmVzID0gMDtcbiAgbGV0IGNpcmN1aXRPcGVuVW50aWxNcyA9IDA7XG4gIGxldCBhdXRob3JpdHlUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgbGV0IHN0b3BwZWQgPSBmYWxzZTtcbiAgY29uc3QgcmVjaGVja0ludGVydmFsTXMgPSBjb21wdXRlRm9sbG93ZXJBdXRob3JpdHlSZWNoZWNrSW50ZXJ2YWwob3B0aW9ucy5zZXNzaW9uSWQpO1xuXG4gIGNvbnN0IHF1ZXVlQXV0aG9yaXR5UHJvbW90aW9uID0gKCkgPT4ge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIHByb21vdGlvbk1nci5wcm9tb3RlKGZvcndhcmRpbmdTaW5rLCBzZXNzaW9uSGVhcnRiZWF0KVxuICAgICAgICAuY2F0Y2goKGVycikgPT4gbG9nZ2VyLmVycm9yKCdbVW5pZmllZENvbnNvbGVdIEF1dGhvcml0eS1iYXNlZCBwcm9tb3Rpb24gY3Jhc2hlZCcsIHtcbiAgICAgICAgICBlcnJvcjogU3RyaW5nKGVyciksXG4gICAgICAgIH0pKTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZXNvbHZlZEF1dGhvcml0eSA9IChyZXNvbHZlZDogRm9sbG93ZXJBdXRob3JpdHlSZXNvbHV0aW9uKSA9PiB7XG4gICAgY3VycmVudEVsZWN0aW9uID0gcmVzb2x2ZWQuZWxlY3Rpb247XG4gICAgY29uc2VjdXRpdmVGYWlsdXJlcyA9IDA7XG4gICAgY2lyY3VpdE9wZW5VbnRpbE1zID0gMDtcblxuICAgIGlmIChyZXNvbHZlZC5lbGVjdGlvbi5yb2xlICE9PSAnbGVhZGVyJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByb21vdGlvblF1ZXVlZCA9IHRydWU7XG4gICAgaWYgKGF1dGhvcml0eVRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXRJbXBsKGF1dGhvcml0eVRpbWVyKTtcbiAgICAgIGF1dGhvcml0eVRpbWVyID0gbnVsbDtcbiAgICB9XG5cbiAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBGb2xsb3dlciBhdXRob3JpdHkgcmUtZXZhbHVhdGlvbiBxdWV1ZWQgYSBsZWFkZXIgdGFrZW92ZXInLCB7XG4gICAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLFxuICAgICAgc3RhYmxlU2Vzc2lvbklkOiBvcHRpb25zLnN0YWJsZVNlc3Npb25JZCxcbiAgICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgICAgcmVjaGVja0ludGVydmFsTXMsXG4gICAgICBlbGVjdGVkTGVhZGVyUGlkOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnBpZCxcbiAgICAgIGVsZWN0ZWRMZWFkZXJTZXNzaW9uSWQ6IGVsZWN0aW9uLmxlYWRlckluZm8uc2Vzc2lvbklkLFxuICAgICAgcmVzb2x2ZWRMZWFkZXJQaWQ6IHJlc29sdmVkLmVsZWN0aW9uLmxlYWRlckluZm8ucGlkLFxuICAgICAgcmVzb2x2ZWRMZWFkZXJTZXNzaW9uSWQ6IHJlc29sdmVkLmVsZWN0aW9uLmxlYWRlckluZm8uc2Vzc2lvbklkLFxuICAgICAgcmVwbGFjZW1lbnRSZWFzb246IHJlc29sdmVkLnJlcGxhY2VtZW50Py5wcmVmZXJlbmNlPy5yZWFzb24gPz8gbnVsbCxcbiAgICAgIGZvcmNlZENsYWltOiByZXNvbHZlZC5mb3JjZWRDbGFpbSxcbiAgICB9KTtcblxuICAgIHF1ZXVlQXV0aG9yaXR5UHJvbW90aW9uKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQXV0aG9yaXR5RmFpbHVyZSA9IChlcnI6IHVua25vd24pID0+IHtcbiAgICBjb25zZWN1dGl2ZUZhaWx1cmVzICs9IDE7XG4gICAgaWYgKGNvbnNlY3V0aXZlRmFpbHVyZXMgPj0gRk9MTE9XRVJfQVVUSE9SSVRZX01PTklUT1JfQ09ORklHLmZhaWx1cmVUaHJlc2hvbGQpIHtcbiAgICAgIGNpcmN1aXRPcGVuVW50aWxNcyA9IG5vd0ltcGwoKSArIEZPTExPV0VSX0FVVEhPUklUWV9NT05JVE9SX0NPTkZJRy5mYWlsdXJlQ29vbGRvd25NcztcbiAgICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIEZvbGxvd2VyIGF1dGhvcml0eSByZS1ldmFsdWF0aW9uIGNpcmN1aXQgb3BlbmVkIGFmdGVyIHJlcGVhdGVkIGZhaWx1cmVzJywge1xuICAgICAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLFxuICAgICAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICAgICAgcmVjaGVja0ludGVydmFsTXMsXG4gICAgICAgIGNvbnNlY3V0aXZlRmFpbHVyZXMsXG4gICAgICAgIGNpcmN1aXRPcGVuVW50aWxNczogbmV3IERhdGUoY2lyY3VpdE9wZW5VbnRpbE1zKS50b0lTT1N0cmluZygpLFxuICAgICAgfSk7XG4gICAgICBjb25zZWN1dGl2ZUZhaWx1cmVzID0gMDtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoJ1tVbmlmaWVkQ29uc29sZV0gRm9sbG93ZXIgYXV0aG9yaXR5IHJlLWV2YWx1YXRpb24gZmFpbGVkJywge1xuICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsXG4gICAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICAgIHJlY2hlY2tJbnRlcnZhbE1zLFxuICAgICAgY2lyY3VpdE9wZW5VbnRpbE1zOiBjaXJjdWl0T3BlblVudGlsTXMgPyBuZXcgRGF0ZShjaXJjdWl0T3BlblVudGlsTXMpLnRvSVNPU3RyaW5nKCkgOiBudWxsLFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHNjaGVkdWxlTmV4dENoZWNrID0gKGRlbGF5TXM6IG51bWJlcikgPT4ge1xuICAgIGlmIChzdG9wcGVkIHx8IHByb21vdGlvblF1ZXVlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhdXRob3JpdHlUaW1lciA9IHNldFRpbWVvdXRJbXBsKHJ1bkF1dGhvcml0eUNoZWNrLCBkZWxheU1zKTtcbiAgICBhdXRob3JpdHlUaW1lci51bnJlZigpO1xuICB9O1xuXG4gIGNvbnN0IHJ1bkF1dGhvcml0eUNoZWNrID0gKCkgPT4ge1xuICAgIGF1dGhvcml0eVRpbWVyID0gbnVsbDtcbiAgICBpZiAoc3RvcHBlZCB8fCBwcm9tb3Rpb25RdWV1ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNpcmN1aXRPcGVuVW50aWxNcyA+IG5vd0ltcGwoKSkge1xuICAgICAgc2NoZWR1bGVOZXh0Q2hlY2socmVjaGVja0ludGVydmFsTXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjaXJjdWl0T3BlblVudGlsTXMgIT09IDApIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIEZvbGxvd2VyIGF1dGhvcml0eSByZS1ldmFsdWF0aW9uIGNpcmN1aXQgY2xvc2VkOyByZXN1bWluZyBjaGVja3MnLCB7XG4gICAgICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsXG4gICAgICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgICAgICByZWNoZWNrSW50ZXJ2YWxNcyxcbiAgICAgIH0pO1xuICAgICAgY2lyY3VpdE9wZW5VbnRpbE1zID0gMDtcbiAgICB9XG5cbiAgICByZXNvbHZlRm9sbG93ZXJBdXRob3JpdHlJbXBsKG9wdGlvbnMuc2Vzc2lvbklkLCBjb25zb2xlUG9ydCwgY3VycmVudEVsZWN0aW9uKVxuICAgICAgLnRoZW4oaGFuZGxlUmVzb2x2ZWRBdXRob3JpdHkpXG4gICAgICAuY2F0Y2goaGFuZGxlQXV0aG9yaXR5RmFpbHVyZSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgc2NoZWR1bGVOZXh0Q2hlY2socmVjaGVja0ludGVydmFsTXMpO1xuICAgICAgfSk7XG4gIH07XG5cbiAgc2NoZWR1bGVOZXh0Q2hlY2socmVjaGVja0ludGVydmFsTXMpO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKGF1dGhvcml0eVRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXRJbXBsKGF1dGhvcml0eVRpbWVyKTtcbiAgICAgIGF1dGhvcml0eVRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgc3RvcHBlZCA9IHRydWU7XG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvbmNpbGVMZWFkZXJMZWFzZShcbiAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIGRlcHM6IExlYWRlckxlYXNlUmVjb25jaWxpYXRpb25EZXBlbmRlbmNpZXMgPSB7fSxcbik6IFByb21pc2U8J25vdC1wb3J0LW93bmVyJyB8ICdhbHJlYWR5LW93bmVkJyB8ICdyZWNvbmNpbGVkJyB8ICdyZWNsYWltLWZhaWxlZCc+IHtcbiAgY29uc3QgcmVhZExlYWRlckxvY2tJbXBsID0gZGVwcy5yZWFkTGVhZGVyTG9ja0ltcGwgPz8gcmVhZExlYWRlckxvY2s7XG4gIGNvbnN0IGZpbmRQaWRPblBvcnRJbXBsID0gZGVwcy5maW5kUGlkT25Qb3J0SW1wbCA/PyBmaW5kUGlkT25Qb3J0O1xuICBjb25zdCBjbGFpbUxlYWRlcnNoaXBJbXBsID0gZGVwcy5jbGFpbUxlYWRlcnNoaXBJbXBsID8/IGNsYWltTGVhZGVyc2hpcDtcbiAgY29uc3QgZGVsZXRlTGVhZGVyTG9ja0ltcGwgPSBkZXBzLmRlbGV0ZUxlYWRlckxvY2tJbXBsID8/IGRlbGV0ZUxlYWRlckxvY2s7XG4gIGNvbnN0IGtpbGxTdGFsZVByb2Nlc3NEZXRhaWxlZEltcGwgPSBkZXBzLmtpbGxTdGFsZVByb2Nlc3NEZXRhaWxlZEltcGwgPz8ga2lsbFN0YWxlUHJvY2Vzc0RldGFpbGVkO1xuXG4gIGNvbnN0IHBvcnRPd25lclBpZCA9IGF3YWl0IGZpbmRQaWRPblBvcnRJbXBsKGNvbnNvbGVQb3J0KTtcbiAgaWYgKHBvcnRPd25lclBpZCAhPT0gcHJvY2Vzcy5waWQpIHtcbiAgICByZXR1cm4gJ25vdC1wb3J0LW93bmVyJztcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRMb2NrID0gYXdhaXQgcmVhZExlYWRlckxvY2tJbXBsKCk7XG4gIGlmICghY3VycmVudExvY2sgfHwgY3VycmVudExvY2sucGlkID09PSBwcm9jZXNzLnBpZCkge1xuICAgIHJldHVybiAnYWxyZWFkeS1vd25lZCc7XG4gIH1cblxuICBjb25zdCBleHBlY3RlZExlYWRlciA9IGNyZWF0ZUxlYWRlckluZm8oc2Vzc2lvbklkLCBjb25zb2xlUG9ydCk7XG4gIGNvbnN0IHJlcGxhY2VtZW50ID0gZXZhbHVhdGVQb3J0T3duZXJSZXBsYWNlbWVudChleHBlY3RlZExlYWRlciwge1xuICAgIG93bmVyUGlkOiBjdXJyZW50TG9jay5waWQsXG4gICAgc291cmNlOiAnbG9jaycsXG4gICAgbGVhZGVySW5mbzogY3VycmVudExvY2ssXG4gIH0pO1xuXG4gIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIFBvcnQtb3duaW5nIGxlYWRlciBkZXRlY3RlZCBhIGRpc3BsYWNlZCBsb2NrIHdyaXRlcjsgcmVjb25jaWxpbmcgbGVhZGVyIGxlYXNlJywge1xuICAgIHNlc3Npb25JZCxcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBsb2NrT3duZXJQaWQ6IGN1cnJlbnRMb2NrLnBpZCxcbiAgICBsb2NrT3duZXJTZXNzaW9uSWQ6IGN1cnJlbnRMb2NrLnNlc3Npb25JZCxcbiAgICBsb2NrT3duZXJWZXJzaW9uOiBjdXJyZW50TG9jay5zZXJ2ZXJWZXJzaW9uID8/IExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgICBhY3R1YWxQb3J0T3duZXJQaWQ6IHBvcnRPd25lclBpZCxcbiAgICByZXBsYWNlbWVudFJlYXNvbjogcmVwbGFjZW1lbnQucHJlZmVyZW5jZT8ucmVhc29uID8/IG51bGwsXG4gIH0pO1xuXG4gIGNvbnN0IGtpbGxPdXRjb21lID0gYXdhaXQga2lsbFN0YWxlUHJvY2Vzc0RldGFpbGVkSW1wbChjdXJyZW50TG9jay5waWQsIGNvbnNvbGVQb3J0LCB7XG4gICAgYWxsb3dBY3RpdmVIb3N0UGFyZW50OiB0cnVlLFxuICB9KTtcbiAgY29uc3QgbG9ja0FmdGVyS2lsbCA9IGF3YWl0IHJlYWRMZWFkZXJMb2NrSW1wbCgpO1xuICBsZXQgbG9ja0RlbGV0ZWQgPSBmYWxzZTtcbiAgbGV0IGxvY2tDbGFpbUF0dGVtcHRlZCA9IGZhbHNlO1xuICBsZXQgbG9ja0NsYWltZWQgPSBmYWxzZTtcblxuICBpZiAobG9ja0FmdGVyS2lsbD8ucGlkICE9PSBwcm9jZXNzLnBpZCkge1xuICAgIGlmIChsb2NrQWZ0ZXJLaWxsKSB7XG4gICAgICBhd2FpdCBkZWxldGVMZWFkZXJMb2NrSW1wbCgpO1xuICAgICAgbG9ja0RlbGV0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICBsb2NrQ2xhaW1BdHRlbXB0ZWQgPSB0cnVlO1xuICAgIGxvY2tDbGFpbWVkID0gYXdhaXQgY2xhaW1MZWFkZXJzaGlwSW1wbChleHBlY3RlZExlYWRlcik7XG4gIH1cblxuICBjb25zdCBmaW5hbExvY2sgPSBhd2FpdCByZWFkTGVhZGVyTG9ja0ltcGwoKTtcbiAgY29uc3QgcmVjb25jaWxlZCA9IGZpbmFsTG9jaz8ucGlkID09PSBwcm9jZXNzLnBpZDtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBMZWFkZXIgbGVhc2UgcmVjb25jaWxpYXRpb24gY29tcGxldGVkJywge1xuICAgIHNlc3Npb25JZCxcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBkaXNwbGFjZWRQaWQ6IGN1cnJlbnRMb2NrLnBpZCxcbiAgICBkaXNwbGFjZWRTZXNzaW9uSWQ6IGN1cnJlbnRMb2NrLnNlc3Npb25JZCxcbiAgICBkaXNwbGFjZWRWZXJzaW9uOiBjdXJyZW50TG9jay5zZXJ2ZXJWZXJzaW9uID8/IExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgICBraWxsQXR0ZW1wdGVkOiB0cnVlLFxuICAgIGtpbGxSZXN1bHQ6IGtpbGxPdXRjb21lLnJlYXNvbixcbiAgICBraWxsZWQ6IGtpbGxPdXRjb21lLmtpbGxlZCxcbiAgICBsb2NrRGVsZXRlZCxcbiAgICBsb2NrQ2xhaW1BdHRlbXB0ZWQsXG4gICAgbG9ja0NsYWltZWQsXG4gICAgZmluYWxMb2NrT3duZXJQaWQ6IGZpbmFsTG9jaz8ucGlkID8/IG51bGwsXG4gICAgZmluYWxMb2NrT3duZXJTZXNzaW9uSWQ6IGZpbmFsTG9jaz8uc2Vzc2lvbklkID8/IG51bGwsXG4gICAgZmluYWxMb2NrT3duZXJWZXJzaW9uOiBmaW5hbExvY2s/LnNlcnZlclZlcnNpb24gPz8gbnVsbCxcbiAgICByZWNvbmNpbGVkLFxuICB9KTtcblxuICBpZiAoIXJlY29uY2lsZWQpIHtcbiAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBQb3J0LW93bmluZyBsZWFkZXIgY291bGQgbm90IHJlY2xhaW0gdGhlIGRpc3BsYWNlZCBsZWFkZXIgbG9jaycsIHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgICAgZGlzcGxhY2VkUGlkOiBjdXJyZW50TG9jay5waWQsXG4gICAgICBkaXNwbGFjZWRTZXNzaW9uSWQ6IGN1cnJlbnRMb2NrLnNlc3Npb25JZCxcbiAgICAgIGZpbmFsTG9ja093bmVyUGlkOiBmaW5hbExvY2s/LnBpZCA/PyBudWxsLFxuICAgICAgZmluYWxMb2NrT3duZXJTZXNzaW9uSWQ6IGZpbmFsTG9jaz8uc2Vzc2lvbklkID8/IG51bGwsXG4gICAgICBmaW5hbExvY2tPd25lclZlcnNpb246IGZpbmFsTG9jaz8uc2VydmVyVmVyc2lvbiA/PyBudWxsLFxuICAgICAga2lsbFJlc3VsdDoga2lsbE91dGNvbWUucmVhc29uLFxuICAgICAgbG9ja0RlbGV0ZWQsXG4gICAgICBsb2NrQ2xhaW1BdHRlbXB0ZWQsXG4gICAgICBsb2NrQ2xhaW1lZCxcbiAgICB9KTtcbiAgICByZXR1cm4gJ3JlY2xhaW0tZmFpbGVkJztcbiAgfVxuXG4gIHJldHVybiAncmVjb25jaWxlZCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydExlYWRlckxlYXNlTW9uaXRvcihcbiAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIGRlcHM6IExlYWRlckxlYXNlUmVjb25jaWxpYXRpb25EZXBlbmRlbmNpZXMgPSB7fSxcbik6ICgpID0+IHZvaWQge1xuICBjb25zdCBzZXRUaW1lb3V0SW1wbCA9IGRlcHMuc2V0VGltZW91dEltcGwgPz8gc2V0VGltZW91dDtcbiAgY29uc3QgY2xlYXJUaW1lb3V0SW1wbCA9IGRlcHMuY2xlYXJUaW1lb3V0SW1wbCA/PyBjbGVhclRpbWVvdXQ7XG4gIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgbGV0IHN0b3BwZWQgPSBmYWxzZTtcbiAgbGV0IGRlbGF5TXMgPSBMRUFERVJfTEVBU0VfUkVDT05DSUxFX0lOVEVSVkFMX01TO1xuXG4gIGNvbnN0IHNjaGVkdWxlTmV4dCA9ICgpID0+IHtcbiAgICBpZiAoc3RvcHBlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aW1lciA9IHNldFRpbWVvdXRJbXBsKHJ1bkNoZWNrLCBkZWxheU1zKTtcbiAgICB0aW1lci51bnJlZigpO1xuICB9O1xuXG4gIGNvbnN0IHJ1bkNoZWNrID0gKCkgPT4ge1xuICAgIHRpbWVyID0gbnVsbDtcbiAgICBpZiAoc3RvcHBlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZWNvbmNpbGVMZWFkZXJMZWFzZShzZXNzaW9uSWQsIGNvbnNvbGVQb3J0LCBkZXBzKVxuICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICBkZWxheU1zID0gcmVzdWx0ID09PSAncmVjb25jaWxlZCdcbiAgICAgICAgICA/IExFQURFUl9MRUFTRV9SRUNPTkNJTEVfSU5URVJWQUxfTVNcbiAgICAgICAgICA6IE1hdGgubWluKGRlbGF5TXMgKiAyLCBMRUFERVJfTEVBU0VfUkVDT05DSUxFX01BWF9JTlRFUlZBTF9NUyk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IGxvZ2dlci5kZWJ1ZygnW1VuaWZpZWRDb25zb2xlXSBMZWFkZXIgbGVhc2UgcmVjb25jaWxpYXRpb24gZmFpbGVkJywge1xuICAgICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgICAgfSkpXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHNjaGVkdWxlTmV4dCgpO1xuICAgICAgfSk7XG4gIH07XG5cbiAgc2NoZWR1bGVOZXh0KCk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBzdG9wcGVkID0gdHJ1ZTtcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dEltcGwodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgIH1cbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXR0ZW1wdEZvcmNlVGFrZW92ZXIoXG4gIG9wdGlvbnM6IFVuaWZpZWRDb25zb2xlT3B0aW9ucyxcbiAgY3VycmVudEVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgcHJpbWFyeVRva2VuOiBzdHJpbmcsXG4gIHNlcnZlck9wdHM6IFdlYlNlcnZlck9wdGlvbnMsXG4gIHN0YXJ0V2ViU2VydmVySW1wbDogKG9wdGlvbnM6IFdlYlNlcnZlck9wdGlvbnMpID0+IFByb21pc2U8V2ViU2VydmVyUmVzdWx0Pixcbik6IFByb21pc2U8Rm9yY2VUYWtlb3ZlckF0dGVtcHRSZXN1bHQ+IHtcbiAgY29uc3QgaW5pdGlhbEZhbGxiYWNrID0gYXdhaXQgcmVjb3ZlckxlYWRlckJpbmRGYWlsdXJlKGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLCBjb25zb2xlUG9ydCwgcHJpbWFyeVRva2VuKTtcbiAgY29uc3QgaW5pdGlhbFJlcGxhY2VtZW50ID0gZXZhbHVhdGVQb3J0T3duZXJSZXBsYWNlbWVudChjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbywgaW5pdGlhbEZhbGxiYWNrKTtcblxuICBpZiAoIXNob3VsZEV2aWN0RGlzY292ZXJlZE93bmVyKGluaXRpYWxGYWxsYmFjaywgaW5pdGlhbFJlcGxhY2VtZW50KSkge1xuICAgIHJldHVybiB7XG4gICAgICB3ZWJSZXN1bHQ6IHsgYmluZFJlc3VsdDogeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdFQUREUklOVVNFJywgZGV0YWlsOiBgUG9ydCAke2NvbnNvbGVQb3J0fSBhbHJlYWR5IGluIHVzZWAgfSB9LFxuICAgICAgZWxlY3Rpb246IGN1cnJlbnRFbGVjdGlvbixcbiAgICAgIGZhbGxiYWNrOiBpbml0aWFsRmFsbGJhY2ssXG4gICAgICByZXBsYWNlbWVudDogaW5pdGlhbFJlcGxhY2VtZW50LFxuICAgICAgcmVjb3ZlcmVkU2Vzc2lvbnM6IFtdLFxuICAgICAgZm9yY2VkS2lsbDogbnVsbCxcbiAgICAgIHRha2VvdmVyQXR0ZW1wdGVkOiBmYWxzZSxcbiAgICAgIHJlYm91bmRMb2NrQ2xhaW1lZDogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxhdGVzdEZhbGxiYWNrID0gYXdhaXQgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydChjb25zb2xlUG9ydCwgcHJpbWFyeVRva2VuKTtcbiAgY29uc3QgcmVjb3ZlcmVkU2Vzc2lvbnMgPSBhd2FpdCBmZXRjaExlYWRlclNlc3Npb25zU25hcHNob3QoY29uc29sZVBvcnQsIHByaW1hcnlUb2tlbik7XG4gIGNvbnN0IGxhdGVzdFJlcGxhY2VtZW50ID0gZXZhbHVhdGVQb3J0T3duZXJSZXBsYWNlbWVudChjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbywgbGF0ZXN0RmFsbGJhY2spO1xuICBpZiAoIXNob3VsZEV2aWN0RGlzY292ZXJlZE93bmVyKGxhdGVzdEZhbGxiYWNrLCBsYXRlc3RSZXBsYWNlbWVudCkpIHtcbiAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBGb3JjZWQgdGFrZW92ZXIgdGFyZ2V0IGNoYW5nZWQgYmVmb3JlIGV2aWN0aW9uOyBza2lwcGluZyBmb3JjZWQga2lsbCcsIHtcbiAgICAgIC4uLmJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICAgICAgICBjb25zb2xlUG9ydCxcbiAgICAgICAgY3VycmVudEVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRUFERFJJTlVTRScsIGRldGFpbDogYFBvcnQgJHtjb25zb2xlUG9ydH0gYWxyZWFkeSBpbiB1c2VgIH0sXG4gICAgICAgIGxhdGVzdEZhbGxiYWNrLFxuICAgICAgICBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICAgICksXG4gICAgICBwcmV2aW91c093bmVyUGlkOiBpbml0aWFsUmVwbGFjZW1lbnQub3duZXJQaWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdlYlJlc3VsdDogeyBiaW5kUmVzdWx0OiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9IH0sXG4gICAgICBlbGVjdGlvbjogY3VycmVudEVsZWN0aW9uLFxuICAgICAgZmFsbGJhY2s6IGxhdGVzdEZhbGxiYWNrLFxuICAgICAgcmVwbGFjZW1lbnQ6IGxhdGVzdFJlcGxhY2VtZW50LFxuICAgICAgcmVjb3ZlcmVkU2Vzc2lvbnMsXG4gICAgICBmb3JjZWRLaWxsOiBudWxsLFxuICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZhbHNlLFxuICAgICAgcmVib3VuZExvY2tDbGFpbWVkOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gQXR0ZW1wdGluZyBmb3JjZWQgdGFrZW92ZXIgZnJvbSBvbGRlciBvciBpbmNvbXBhdGlibGUgYWN0aXZlIGxlYWRlcicsIHtcbiAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgY3VycmVudEVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9LFxuICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICApLFxuICB9KTtcblxuICBjb25zdCBvd25lclBpZCA9IGxhdGVzdFJlcGxhY2VtZW50Lm93bmVyUGlkO1xuICBpZiAob3duZXJQaWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2ViUmVzdWx0OiB7IGJpbmRSZXN1bHQ6IHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRUFERFJJTlVTRScsIGRldGFpbDogYFBvcnQgJHtjb25zb2xlUG9ydH0gYWxyZWFkeSBpbiB1c2VgIH0gfSxcbiAgICAgIGVsZWN0aW9uOiBjdXJyZW50RWxlY3Rpb24sXG4gICAgICBmYWxsYmFjazogbGF0ZXN0RmFsbGJhY2ssXG4gICAgICByZXBsYWNlbWVudDogbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICByZWNvdmVyZWRTZXNzaW9ucyxcbiAgICAgIGZvcmNlZEtpbGw6IG51bGwsXG4gICAgICB0YWtlb3ZlckF0dGVtcHRlZDogZmFsc2UsXG4gICAgICByZWJvdW5kTG9ja0NsYWltZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBmb3JjZWRLaWxsID0gYXdhaXQga2lsbFN0YWxlUHJvY2Vzc0RldGFpbGVkKG93bmVyUGlkLCBjb25zb2xlUG9ydCwge1xuICAgIGFsbG93QWN0aXZlSG9zdFBhcmVudDogdHJ1ZSxcbiAgfSk7XG4gIGlmICghZm9yY2VkS2lsbC5raWxsZWQpIHtcbiAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBGb3JjZWQgdGFrZW92ZXIgc2tpcHBlZCBvciBmYWlsZWQgYWZ0ZXIgaWRlbnRpZnlpbmcgcmVwbGFjZWFibGUgbGVhZGVyJywge1xuICAgICAgLi4uYnVpbGRCaW5kRmFpbHVyZUxvZ0NvbnRleHQoXG4gICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICBjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgICAgeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdFQUREUklOVVNFJywgZGV0YWlsOiBgUG9ydCAke2NvbnNvbGVQb3J0fSBhbHJlYWR5IGluIHVzZWAgfSxcbiAgICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICAgIGxhdGVzdFJlcGxhY2VtZW50LFxuICAgICAgICBmb3JjZWRLaWxsLFxuICAgICAgKSxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgd2ViUmVzdWx0OiB7IGJpbmRSZXN1bHQ6IHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRUFERFJJTlVTRScsIGRldGFpbDogYFBvcnQgJHtjb25zb2xlUG9ydH0gYWxyZWFkeSBpbiB1c2VgIH0gfSxcbiAgICAgIGVsZWN0aW9uOiBjdXJyZW50RWxlY3Rpb24sXG4gICAgICBmYWxsYmFjazogbGF0ZXN0RmFsbGJhY2ssXG4gICAgICByZXBsYWNlbWVudDogbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICByZWNvdmVyZWRTZXNzaW9ucyxcbiAgICAgIGZvcmNlZEtpbGwsXG4gICAgICB0YWtlb3ZlckF0dGVtcHRlZDogdHJ1ZSxcbiAgICAgIHJlYm91bmRMb2NrQ2xhaW1lZDogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHJlYm91bmRXZWJSZXN1bHQgPSBhd2FpdCBzdGFydFdlYlNlcnZlckltcGwoc2VydmVyT3B0cyk7XG4gIGxldCByZWJvdW5kRWxlY3Rpb24gPSBjdXJyZW50RWxlY3Rpb247XG4gIGxldCByZWJvdW5kTG9ja0NsYWltZWQgPSBmYWxzZTtcblxuICBpZiAoIXJlYm91bmRXZWJSZXN1bHQuYmluZFJlc3VsdCB8fCByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHJlYm91bmRMZWFkZXJJbmZvID0gY3JlYXRlTGVhZGVySW5mbyhvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQpO1xuICAgIHJlYm91bmRMb2NrQ2xhaW1lZCA9IGF3YWl0IGNsYWltTGVhZGVyc2hpcChyZWJvdW5kTGVhZGVySW5mbyk7XG4gICAgaWYgKCFyZWJvdW5kTG9ja0NsYWltZWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIFJlYm91bmQgbGVhZGVyIGJvdW5kIHBvcnQgYnV0IGNvdWxkIG5vdCBpbW1lZGlhdGVseSByZS1jbGFpbSBsb2NrJywge1xuICAgICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgICBjb25zb2xlUG9ydCxcbiAgICAgICAgICByZWJvdW5kTGVhZGVySW5mbyxcbiAgICAgICAgICByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICAgICAgbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICAgICAgZm9yY2VkS2lsbCxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZWJvdW5kRWxlY3Rpb24gPSB7IHJvbGU6ICdsZWFkZXInLCBsZWFkZXJJbmZvOiByZWJvdW5kTGVhZGVySW5mbyB9O1xuICB9IGVsc2Uge1xuICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIEZvcmNlZCB0YWtlb3ZlciBraWxsZWQgb2xkIGxlYWRlciBidXQgYmluZCByZXRyeSBzdGlsbCBmYWlsZWQnLCB7XG4gICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgIGxhdGVzdEZhbGxiYWNrLFxuICAgICAgICBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICAgICAgZm9yY2VkS2lsbCxcbiAgICAgICksXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdlYlJlc3VsdDogcmVib3VuZFdlYlJlc3VsdCxcbiAgICBlbGVjdGlvbjogcmVib3VuZEVsZWN0aW9uLFxuICAgIGZhbGxiYWNrOiBsYXRlc3RGYWxsYmFjayxcbiAgICByZXBsYWNlbWVudDogbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgcmVjb3ZlcmVkU2Vzc2lvbnMsXG4gICAgZm9yY2VkS2lsbCxcbiAgICB0YWtlb3ZlckF0dGVtcHRlZDogdHJ1ZSxcbiAgICByZWJvdW5kTG9ja0NsYWltZWQsXG4gIH07XG59XG5cbi8qKlxuICogU3RhcnQgdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUuXG4gKlxuICogUnVucyBsZWFkZXIgZWxlY3Rpb24sIHRoZW4gZWl0aGVyIHN0YXJ0cyB0aGUgZnVsbCBjb25zb2xlIChsZWFkZXIpXG4gKiBvciBzZXRzIHVwIGV2ZW50IGZvcndhcmRpbmcgKGZvbGxvd2VyKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0VW5pZmllZENvbnNvbGUob3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICAvLyBSZXNvbHZlIHBvcnQ6IG9wdGlvbnMgKGNvbmZpZyBmaWxlKSDihpIgZW52IHZhciDihpIgZGVmYXVsdFxuICBjb25zdCBjb25zb2xlUG9ydCA9IG9wdGlvbnMucG9ydCB8fCBERUZBVUxUX0NPTlNPTEVfUE9SVDtcbiAgbG9nZ2VyLmRlYnVnKGBbVW5pZmllZENvbnNvbGVdIFBvcnQgcmVzb2x2ZWQ6ICR7Y29uc29sZVBvcnR9YCArXG4gICAgKG9wdGlvbnMucG9ydCA/ICcgKGZyb20gY29uZmlnIGZpbGUpJyA6IGAgKGZyb20gZW52L2RlZmF1bHQpYCkpO1xuXG4gIC8vIExlZ2FjeS1sZWFkZXIgZGV0ZWN0aW9uICgjMTc5NCkg4oCUIHdhcm4gdGhlIHVzZXIgaWYgYSBwcmUtYXV0aFxuICAvLyBEb2xsaG91c2VNQ1AgY29uc29sZSBpcyBydW5uaW5nIGFsb25nc2lkZSB0aGlzIGF1dGhlbnRpY2F0ZWQgb25lLlxuICAvLyBUaGV5IHdpbGwgY29leGlzdCBmaW5lIGJlY2F1c2Ugb2YgcG9ydCArIGxvY2sgKyB0b2tlbiBmaWxlIGlzb2xhdGlvbixcbiAgLy8gYnV0IHRoZSB1c2VyIHNob3VsZCBrbm93IGJvdGggZXhpc3Qgc28gdGhlIGRpZmZlcmluZyBzZWN1cml0eSBwb3N0dXJlXG4gIC8vIGJldHdlZW4gdGhlbSBkb2Vzbid0IGxvb2sgbGlrZSBhIGJ1Zy5cbiAgYXdhaXQgd2FybklmTGVnYWN5Q29uc29sZVByZXNlbnQoY29uc29sZVBvcnQpO1xuXG4gIGxldCBlbGVjdGlvbiA9IGF3YWl0IGVsZWN0TGVhZGVyKG9wdGlvbnMuc2Vzc2lvbklkLCBjb25zb2xlUG9ydCk7XG5cbiAgaWYgKGVsZWN0aW9uLnJvbGUgPT09ICdmb2xsb3dlcicpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVGb2xsb3dlckF1dGhvcml0eShvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQsIGVsZWN0aW9uKTtcbiAgICBlbGVjdGlvbiA9IHJlc29sdmVkLmVsZWN0aW9uO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgZ2V0UHJpbWFyeVRva2VuRnJvbUZpbGUgfSA9IGF3YWl0IGltcG9ydCgnLi9jb25zb2xlVG9rZW4uanMnKTtcbiAgICBjb25zdCBhdXRoVG9rZW4gPSBhd2FpdCBnZXRQcmltYXJ5VG9rZW5Gcm9tRmlsZShlbnYuRE9MTEhPVVNFX0NPTlNPTEVfVE9LRU5fRklMRSk7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCByZXNvbHZlTGVhZGVyUHJlZmxpZ2h0QXV0aG9yaXR5KG9wdGlvbnMuc2Vzc2lvbklkLCBjb25zb2xlUG9ydCwgZWxlY3Rpb24sIGF1dGhUb2tlbik7XG4gICAgZWxlY3Rpb24gPSByZXNvbHZlZC5lbGVjdGlvbjtcbiAgfVxuXG4gIGlmIChlbGVjdGlvbi5yb2xlID09PSAnbGVhZGVyJykge1xuICAgIHJldHVybiBzdGFydEFzTGVhZGVyKG9wdGlvbnMsIGVsZWN0aW9uLCBjb25zb2xlUG9ydCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0YXJ0QXNGb2xsb3dlcihvcHRpb25zLCBlbGVjdGlvbiwgY29uc29sZVBvcnQpO1xuICB9XG59XG5cbi8qKlxuICogU3RhcnQgYXMgdGhlIGNvbnNvbGUgbGVhZGVyLlxuICogQmluZHMgdGhlIHJlc29sdmVkIGNvbnNvbGUgcG9ydCAoY29uZmlnIGZpbGUg4oaSIGVudiB2YXIg4oaSIGRlZmF1bHQpLFxuICogbW91bnRzIGFsbCByb3V0ZXMgaW5jbHVkaW5nIGluZ2VzdGlvbiwgc3RhcnRzIGhlYXJ0YmVhdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3RhcnRBc0xlYWRlcihcbiAgb3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zLFxuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIgPSBERUZBVUxUX0NPTlNPTEVfUE9SVCxcbik6IFByb21pc2U8VW5pZmllZENvbnNvbGVSZXN1bHQ+IHtcbiAgY29uc3QgeyBzdGFydFdlYlNlcnZlciB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2ZXIuanMnKTtcbiAgY29uc3QgeyBwaWNrUmFuZG9tVG9rZW5OYW1lIH0gPSBhd2FpdCBpbXBvcnQoJy4vU2Vzc2lvbk5hbWVzLmpzJyk7XG5cbiAgLy8gSW5pdGlhbGl6ZSB0aGUgY29uc29sZSB0b2tlbiBzdG9yZSAoIzE3ODApLiBDcmVhdGVzIHRoZSB0b2tlbiBmaWxlIG9uXG4gIC8vIGZpcnN0IHJ1biwgcmVhZHMgdGhlIGV4aXN0aW5nIHRva2VucyBvbiBzdWJzZXF1ZW50IHJ1bnMuIFRoZSB0b2tlbiBpc1xuICAvLyBwZXJzaXN0ZW50IGFjcm9zcyByZXN0YXJ0cyDigJQgb25seSByb3RhdGVkIG9uIGV4cGxpY2l0IHJlcXVlc3QgKFBoYXNlIDIpLlxuICAvLyBGZWF0dXJlIGZsYWcgRE9MTEhPVVNFX1dFQl9BVVRIX0VOQUJMRUQgY29udHJvbHMgZW5mb3JjZW1lbnQ7IHRoZSBmaWxlXG4gIC8vIGlzIGdlbmVyYXRlZCByZWdhcmRsZXNzIHNvIGNvbnN1bWVycyBjYW4gYXR0YWNoIHRva2VucyBwcmVlbXB0aXZlbHkuXG4gIGNvbnN0IHRva2VuU3RvcmUgPSBuZXcgQ29uc29sZVRva2VuU3RvcmUoZW52LkRPTExIT1VTRV9DT05TT0xFX1RPS0VOX0ZJTEUpO1xuICBjb25zdCBwcmltYXJ5VG9rZW4gPSBhd2FpdCB0b2tlblN0b3JlLmVuc3VyZUluaXRpYWxpemVkKHBpY2tSYW5kb21Ub2tlbk5hbWUoKSk7XG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIENvbnNvbGUgdG9rZW4gc3RvcmUgaW5pdGlhbGl6ZWQnLCB7XG4gICAgdG9rZW5JZDogcHJpbWFyeVRva2VuLmlkLFxuICAgIHRva2VuTmFtZTogcHJpbWFyeVRva2VuLm5hbWUsXG4gICAgZmlsZTogdG9rZW5TdG9yZS5nZXRGaWxlUGF0aCgpLFxuICAgIGF1dGhFbmZvcmNlZDogZW52LkRPTExIT1VTRV9XRUJfQVVUSF9FTkFCTEVELFxuICB9KTtcblxuICAvLyBQcmUtY3JlYXRlIGEgcGxhY2Vob2xkZXIgYnJvYWRjYXN0IHRoYXQgd2UnbGwgd2lyZSB1cCBhZnRlciB0aGUgc2VydmVyIHN0YXJ0c1xuICBsZXQgbGl2ZUJyb2FkY2FzdDogKChlbnRyeTogVW5pZmllZExvZ0VudHJ5KSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IGxpdmVNZXRyaWNzT25TbmFwc2hvdDogKChzbmFwc2hvdDogTWV0cmljU25hcHNob3QpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gIC8vIENyZWF0ZSBpbmdlc3Rpb24gcm91dGVzIHdpdGggYSBkZWZlcnJlZCBicm9hZGNhc3QgKHdpcmVkIGFmdGVyIHNlcnZlciBzdGFydHMpXG4gIGNvbnN0IGluZ2VzdFJlc3VsdCA9IGNyZWF0ZUluZ2VzdFJvdXRlcyh7XG4gICAgbG9nQnJvYWRjYXN0OiAoZW50cnkpID0+IGxpdmVCcm9hZGNhc3Q/LihlbnRyeSksXG4gICAgbWV0cmljc09uU25hcHNob3Q6IChzbmFwc2hvdCkgPT4gbGl2ZU1ldHJpY3NPblNuYXBzaG90Py4oc25hcHNob3QpLFxuICAgIHN0b3JlTWV0cmljc1NuYXBzaG90OiAoc25hcHNob3QpID0+IG9wdGlvbnMubWV0cmljc1Npbms/Lm9uU25hcHNob3Qoc25hcHNob3QpLFxuICB9KTtcblxuICAvLyBTdGFydCB0aGUgd2ViIHNlcnZlciB3aXRoIGluZ2VzdCByb3V0ZXMgbW91bnRlZCBiZWZvcmUgdGhlIFNQQSBmYWxsYmFjay5cbiAgLy8gSWYgdGhlIHBvcnQgaXMgb2NjdXBpZWQgYnkgYSBzdGFsZSBwcm9jZXNzLCByZXRyeSB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYuXG4gIGNvbnN0IHNlcnZlck9wdHMgPSB7XG4gICAgcG9ydGZvbGlvRGlyOiBvcHRpb25zLnBvcnRmb2xpb0RpcixcbiAgICBtZW1vcnlTaW5rOiBvcHRpb25zLm1lbW9yeVNpbmssXG4gICAgbWV0cmljc1Npbms6IG9wdGlvbnMubWV0cmljc1NpbmssXG4gICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgc2Vzc2lvbklkOiBvcHRpb25zLnN0YWJsZVNlc3Npb25JZCxcbiAgICBydW50aW1lU2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCxcbiAgICBhZGRpdGlvbmFsUm91dGVyczogW2luZ2VzdFJlc3VsdC5yb3V0ZXJdLFxuICAgIHRva2VuU3RvcmUsXG4gICAgLi4uKG9wdGlvbnMubWNwQXFsSGFuZGxlciA/IHsgbWNwQXFsSGFuZGxlcjogb3B0aW9ucy5tY3BBcWxIYW5kbGVyIH0gOiB7fSksXG4gIH07XG4gIC8vIGJpbmRBbmRMaXN0ZW4gbm93IGhhbmRsZXMgRUFERFJJTlVTRSBieSBmaW5kaW5nIGFuZCBraWxsaW5nIHRoZSBzdGFsZVxuICAvLyBwcm9jZXNzIG9uIHRoZSBwb3J0LCB0aGVuIHJldHJ5aW5nLiBObyBleHRlcm5hbCByZXRyeSBsb29wIG5lZWRlZC5cbiAgbGV0IHdlYlJlc3VsdCA9IGF3YWl0IHN0YXJ0V2ViU2VydmVyKHNlcnZlck9wdHMpO1xuICBsZXQgcmVjb3ZlcmVkRm9sbG93ZXJTZXNzaW9uczogU2Vzc2lvbkluZm9bXSA9IFtdO1xuXG4gIGlmICh3ZWJSZXN1bHQuYmluZFJlc3VsdCAmJiAhd2ViUmVzdWx0LmJpbmRSZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcmNlVGFrZW92ZXIgPSBhd2FpdCBhdHRlbXB0Rm9yY2VUYWtlb3ZlcihcbiAgICAgIG9wdGlvbnMsXG4gICAgICBlbGVjdGlvbixcbiAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgcHJpbWFyeVRva2VuLnRva2VuLFxuICAgICAgc2VydmVyT3B0cyxcbiAgICAgIHN0YXJ0V2ViU2VydmVyLFxuICAgICk7XG4gICAgd2ViUmVzdWx0ID0gZm9yY2VUYWtlb3Zlci53ZWJSZXN1bHQ7XG4gICAgZWxlY3Rpb24gPSBmb3JjZVRha2VvdmVyLmVsZWN0aW9uO1xuICAgIHJlY292ZXJlZEZvbGxvd2VyU2Vzc2lvbnMgPSBmb3JjZVRha2VvdmVyLnJlY292ZXJlZFNlc3Npb25zO1xuXG4gICAgaWYgKHdlYlJlc3VsdC5iaW5kUmVzdWx0ICYmICF3ZWJSZXN1bHQuYmluZFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBpZiAoZm9yY2VUYWtlb3Zlci5mYWxsYmFjay5sZWFkZXJJbmZvKSB7XG4gICAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBMZWFkZXIgcm9sZSBhYm9ydGVkOiBiaW5kIGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIGZvbGxvd2VyJywge1xuICAgICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgICBjb25zb2xlUG9ydCxcbiAgICAgICAgICBlbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICAgIHdlYlJlc3VsdC5iaW5kUmVzdWx0LFxuICAgICAgICAgIGZvcmNlVGFrZW92ZXIuZmFsbGJhY2ssXG4gICAgICAgICAgZm9yY2VUYWtlb3Zlci5yZXBsYWNlbWVudCxcbiAgICAgICAgICBmb3JjZVRha2VvdmVyLmZvcmNlZEtpbGwsXG4gICAgICAgICksXG4gICAgICAgIHRha2VvdmVyQXR0ZW1wdGVkOiBmb3JjZVRha2VvdmVyLnRha2VvdmVyQXR0ZW1wdGVkLFxuICAgICAgICByZWJvdW5kTG9ja0NsYWltZWQ6IGZvcmNlVGFrZW92ZXIucmVib3VuZExvY2tDbGFpbWVkLFxuICAgICAgICBsb2NrQ2xlYW51cEF0dGVtcHRlZDogZm9yY2VUYWtlb3Zlci5mYWxsYmFjay5zb3VyY2UgIT09ICdub25lJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZm9sbG93ZXJFbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQgPSB7IHJvbGU6ICdmb2xsb3dlcicsIGxlYWRlckluZm86IGZvcmNlVGFrZW92ZXIuZmFsbGJhY2subGVhZGVySW5mbyB9O1xuICAgICAgcmV0dXJuIHN0YXJ0QXNGb2xsb3dlcihvcHRpb25zLCBmb2xsb3dlckVsZWN0aW9uLCBjb25zb2xlUG9ydCwgcHJpbWFyeVRva2VuLnRva2VuKTtcbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLmVycm9yKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciBmYWlsZWQgdG8gYmluZCBhbmQgbm8gYWN0aXZlIGxlYWRlciBjb3VsZCBiZSBpZGVudGlmaWVkJywge1xuICAgICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgICBjb25zb2xlUG9ydCxcbiAgICAgICAgICBlbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICAgIHdlYlJlc3VsdC5iaW5kUmVzdWx0LFxuICAgICAgICAgIGZvcmNlVGFrZW92ZXIuZmFsbGJhY2ssXG4gICAgICAgICAgZm9yY2VUYWtlb3Zlci5yZXBsYWNlbWVudCxcbiAgICAgICAgICBmb3JjZVRha2VvdmVyLmZvcmNlZEtpbGwsXG4gICAgICAgICksXG4gICAgICAgIHRha2VvdmVyQXR0ZW1wdGVkOiBmb3JjZVRha2VvdmVyLnRha2VvdmVyQXR0ZW1wdGVkLFxuICAgICAgICByZWJvdW5kTG9ja0NsYWltZWQ6IGZvcmNlVGFrZW92ZXIucmVib3VuZExvY2tDbGFpbWVkLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExlYWRlciBmYWlsZWQgdG8gYmluZCBwb3J0ICR7Y29uc29sZVBvcnR9IGFuZCBubyBhY3RpdmUgbGVhZGVyIHdhcyBkaXNjb3ZlcmFibGVgKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZWdpc3RlciB0aGUgbGVhZGVyIG9ubHkgYWZ0ZXIgdGhlIEhUVFAgbGlzdGVuZXIgaXMgYWN0dWFsbHkgc2VydmluZyB0aGUgcG9ydC5cbiAgaW5nZXN0UmVzdWx0LnJlZ2lzdGVyTGVhZGVyU2Vzc2lvbihvcHRpb25zLnNlc3Npb25JZCwgcHJvY2Vzcy5waWQpO1xuXG4gIC8vIFJlZ2lzdGVyIHRoZSB3ZWIgY29uc29sZSBpdHNlbGYgc28gdGhlIHNlc3Npb24gaW5kaWNhdG9yIGlzIG5ldmVyIGVtcHR5ICgjMTgwNSlcbiAgaW5nZXN0UmVzdWx0LnJlZ2lzdGVyQ29uc29sZVNlc3Npb24oKTtcblxuICBpZiAocmVjb3ZlcmVkRm9sbG93ZXJTZXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgaW5nZXN0UmVzdWx0LmltcG9ydFNlc3Npb25zKHJlY292ZXJlZEZvbGxvd2VyU2Vzc2lvbnMpO1xuICAgIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIFJlY292ZXJlZCBmb2xsb3dlciBzZXNzaW9uIHNuYXBzaG90IGZyb20gZGlzcGxhY2VkIGxlYWRlcicsIHtcbiAgICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsXG4gICAgICByZWNvdmVyZWRTZXNzaW9uczogcmVjb3ZlcmVkRm9sbG93ZXJTZXNzaW9ucy5sZW5ndGgsXG4gICAgfSk7XG4gIH1cblxuICAvLyBXaXJlIFNTRSBicm9hZGNhc3RzIGZvciB0aGlzIGxlYWRlcidzIG93biBldmVudHNcbiAgb3B0aW9ucy53aXJlU1NFQnJvYWRjYXN0cyh3ZWJSZXN1bHQsIG9wdGlvbnMubWV0cmljc1NpbmspO1xuXG4gIC8vIE5vdyB3aXJlIHRoZSBsaXZlIGJyb2FkY2FzdCBmdW5jdGlvbnMgaW50byB0aGUgaW5nZXN0IHJvdXRlc1xuICBpZiAod2ViUmVzdWx0LmxvZ0Jyb2FkY2FzdCkge1xuICAgIGNvbnN0IG9yaWdpbmFsQnJvYWRjYXN0ID0gd2ViUmVzdWx0LmxvZ0Jyb2FkY2FzdDtcbiAgICAvLyBTdGFtcCBsZWFkZXIncyBvd24gZW50cmllcyB3aXRoIHNlc3Npb24gSURcbiAgICBsaXZlQnJvYWRjYXN0ID0gKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHN0YW1wZWQ6IFVuaWZpZWRMb2dFbnRyeSA9IHtcbiAgICAgICAgLi4uZW50cnksXG4gICAgICAgIGRhdGE6IHsgLi4uZW50cnkuZGF0YSwgX3Nlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQgfSxcbiAgICAgIH07XG4gICAgICBvcmlnaW5hbEJyb2FkY2FzdChzdGFtcGVkKTtcbiAgICB9O1xuICB9XG4gIGxpdmVNZXRyaWNzT25TbmFwc2hvdCA9IHdlYlJlc3VsdC5tZXRyaWNzT25TbmFwc2hvdDtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBJbmdlc3Rpb24gcm91dGVzIG1vdW50ZWQnKTtcblxuICAvLyBTdGFydCBoZWFydGJlYXQgYW5kIHJlZ2lzdGVyIGNsZWFudXBcbiAgY29uc3Qgc3RvcEhlYXJ0YmVhdCA9IHN0YXJ0SGVhcnRiZWF0KGVsZWN0aW9uLmxlYWRlckluZm8pO1xuICBjb25zdCBzdG9wTGVhc2VNb25pdG9yID0gc3RhcnRMZWFkZXJMZWFzZU1vbml0b3Iob3B0aW9ucy5zZXNzaW9uSWQsIGNvbnNvbGVQb3J0KTtcbiAgcmVnaXN0ZXJMZWFkZXJDbGVhbnVwKCk7XG5cbiAgbG9nZ2VyLmluZm8oJ1tVbmlmaWVkQ29uc29sZV0gTGVhZGVyIHN0YXJ0ZWQnLCB7XG4gICAgc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCwgcG9ydDogY29uc29sZVBvcnQsIHBpZDogcHJvY2Vzcy5waWQsXG4gICAgcm9sZTogJ2xlYWRlcicsIGluZ2VzdFJvdXRlczogWycvYXBpL2luZ2VzdC9sb2dzJywgJy9hcGkvaW5nZXN0L21ldHJpY3MnLCAnL2FwaS9pbmdlc3Qvc2Vzc2lvbicsICcvYXBpL3Nlc3Npb25zJ10sXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcm9sZTogJ2xlYWRlcicsXG4gICAgZWxlY3Rpb24sXG4gICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgY2xlYW51cDogYXN5bmMgKCkgPT4ge1xuICAgICAgc3RvcEhlYXJ0YmVhdCgpO1xuICAgICAgc3RvcExlYXNlTW9uaXRvcigpO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogU3RhcnQgYXMgYSBmb2xsb3dlci5cbiAqIFJlZ2lzdGVycyBmb3J3YXJkaW5nIHNpbmtzIHdpdGggdGhlIExvZ01hbmFnZXIsIHN0YXJ0cyBzZXNzaW9uIGhlYXJ0YmVhdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3RhcnRBc0ZvbGxvd2VyKFxuICBvcHRpb25zOiBVbmlmaWVkQ29uc29sZU9wdGlvbnMsXG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgY29uc29sZVBvcnQ6IG51bWJlciA9IERFRkFVTFRfQ09OU09MRV9QT1JULFxuICBpbml0aWFsQXV0aFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbik6IFByb21pc2U8VW5pZmllZENvbnNvbGVSZXN1bHQ+IHtcbiAgY29uc3QgbGVhZGVyVXJsID0gYGh0dHA6Ly8xMjcuMC4wLjE6JHtlbGVjdGlvbi5sZWFkZXJJbmZvLnBvcnR9YDtcblxuICAvLyBSZWFkIHRoZSBjb25zb2xlIGF1dGggdG9rZW4gKCMxNzgwKSB3cml0dGVuIGJ5IHRoZSBsZWFkZXIuIE1heSBiZSBudWxsXG4gIC8vIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgeWV0IOKAlCB0aGUgc2lua3MgaGFuZGxlIHRoYXQgZ3JhY2VmdWxseSBhbmRcbiAgLy8gc2ltcGx5IG9taXQgdGhlIEJlYXJlciBoZWFkZXIsIHdoaWNoIGlzIGZpbmUgd2hlbiBhdXRoIGlzIG5vdCBlbmZvcmNlZC5cbiAgbGV0IGF1dGhUb2tlbiA9IGluaXRpYWxBdXRoVG9rZW47XG4gIGlmIChhdXRoVG9rZW4gPT09IG51bGwpIHtcbiAgICBjb25zdCB7IGdldFByaW1hcnlUb2tlbkZyb21GaWxlIH0gPSBhd2FpdCBpbXBvcnQoJy4vY29uc29sZVRva2VuLmpzJyk7XG4gICAgYXV0aFRva2VuID0gYXdhaXQgZ2V0UHJpbWFyeVRva2VuRnJvbUZpbGUoZW52LkRPTExIT1VTRV9DT05TT0xFX1RPS0VOX0ZJTEUpO1xuICB9XG4gIGlmIChhdXRoVG9rZW4pIHtcbiAgICBsb2dnZXIuZGVidWcoJ1tVbmlmaWVkQ29uc29sZV0gRm9sbG93ZXIgbG9hZGVkIGNvbnNvbGUgYXV0aCB0b2tlbicpO1xuICB9IGVsc2Uge1xuICAgIGxvZ2dlci5kZWJ1ZygnW1VuaWZpZWRDb25zb2xlXSBObyBjb25zb2xlIGF1dGggdG9rZW4gZmlsZSBmb3VuZDsgZm9sbG93ZXIgd2lsbCBQT1NUIHdpdGhvdXQgQmVhcmVyIGhlYWRlcicpO1xuICB9XG5cbiAgLy8gUGVyLWluc3RhbmNlIHByb21vdGlvbiBtYW5hZ2VyIOKAlCB0cmFja3MgaXRzIG93biBhdHRlbXB0IGNvdW50ZXIgc29cbiAgLy8gbXVsdGlwbGUgZm9sbG93ZXJzIGRvbid0IGludGVyZmVyZSB3aXRoIGVhY2ggb3RoZXIncyBwcm9tb3Rpb24gYnVkZ2V0cy5cbiAgY29uc3QgcHJvbW90aW9uTWdyID0gbmV3IFByb21vdGlvbk1hbmFnZXIob3B0aW9ucywgY29uc29sZVBvcnQsIHN0YXJ0QXNMZWFkZXIsIHN0YXJ0QXNGb2xsb3dlcik7XG5cbiAgLy8gRGVjbGFyZSBzZXNzaW9uSGVhcnRiZWF0IGJlZm9yZSB0aGUgc2luayBzbyB0aGUgY2xvc3VyZSBjYW4gY2FwdHVyZSBpdC5cbiAgLy8gQm90aCBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBjYWxsYmFjayBjb3VsZCBwb3NzaWJseSBmaXJlIChuZWVkcyA1KyBmYWlsZWQgZmx1c2hlcykuXG4gIGxldCBzZXNzaW9uSGVhcnRiZWF0OiBTZXNzaW9uSGVhcnRiZWF0O1xuXG4gIC8vIFJlZ2lzdGVyIGEgZm9yd2FyZGluZyBsb2cgc2luayB3aXRoIGxlYWRlci1kZWF0aCBjYWxsYmFjayAoIzE4NTApLlxuICBjb25zdCBmb3J3YXJkaW5nU2luayA9IG5ldyBMZWFkZXJGb3J3YXJkaW5nTG9nU2luayhsZWFkZXJVcmwsIG9wdGlvbnMuc2Vzc2lvbklkLCBhdXRoVG9rZW4sICgpID0+IHtcbiAgICBwcm9tb3Rpb25NZ3IucHJvbW90ZShmb3J3YXJkaW5nU2luaywgc2Vzc2lvbkhlYXJ0YmVhdClcbiAgICAgIC5jYXRjaChlcnIgPT4gbG9nZ2VyLmVycm9yKCdbVW5pZmllZENvbnNvbGVdIFByb21vdGlvbiBjcmFzaGVkJywgeyBlcnJvcjogU3RyaW5nKGVycikgfSkpO1xuICB9KTtcbiAgb3B0aW9ucy5yZWdpc3RlckxvZ1NpbmsoZm9yd2FyZGluZ1NpbmspO1xuXG4gIC8vIFN0YXJ0IHNlc3Npb24gaGVhcnRiZWF0IHRvIHRoZSBsZWFkZXJcbiAgc2Vzc2lvbkhlYXJ0YmVhdCA9IG5ldyBTZXNzaW9uSGVhcnRiZWF0KGxlYWRlclVybCwgb3B0aW9ucy5zZXNzaW9uSWQsIHByb2Nlc3MucGlkLCBhdXRoVG9rZW4pO1xuICBhd2FpdCBzZXNzaW9uSGVhcnRiZWF0LnN0YXJ0KCk7XG5cbiAgY29uc3Qgc3RvcEF1dGhvcml0eU1vbml0b3IgPSBzdGFydEZvbGxvd2VyQXV0aG9yaXR5TW9uaXRvcihcbiAgICBvcHRpb25zLFxuICAgIGNvbnNvbGVQb3J0LFxuICAgIGVsZWN0aW9uLFxuICAgIHByb21vdGlvbk1ncixcbiAgICBmb3J3YXJkaW5nU2luayxcbiAgICBzZXNzaW9uSGVhcnRiZWF0LFxuICApO1xuXG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIEZvbGxvd2VyIHN0YXJ0ZWQnLCB7XG4gICAgc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCwgcGlkOiBwcm9jZXNzLnBpZCwgcm9sZTogJ2ZvbGxvd2VyJyxcbiAgICBsZWFkZXJTZXNzaW9uOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnNlc3Npb25JZCwgbGVhZGVyUGlkOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnBpZCxcbiAgICBsZWFkZXJQb3J0OiBlbGVjdGlvbi5sZWFkZXJJbmZvLnBvcnQsIGxlYWRlclVybCxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICByb2xlOiAnZm9sbG93ZXInLFxuICAgIGVsZWN0aW9uLFxuICAgIGNsZWFudXA6IGFzeW5jICgpID0+IHtcbiAgICAgIHN0b3BBdXRob3JpdHlNb25pdG9yKCk7XG4gICAgICBhd2FpdCBzZXNzaW9uSGVhcnRiZWF0LnN0b3AoKTtcbiAgICAgIGF3YWl0IGZvcndhcmRpbmdTaW5rLmNsb3NlKCk7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dollhousemcp/mcp-server",
3
- "version": "2.0.27-rc.7",
3
+ "version": "2.0.27-rc.8",
4
4
  "description": "DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/server.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "io.github.DollhouseMCP/mcp-server",
4
4
  "title": "DollhouseMCP",
5
5
  "description": "OSS to create Personas, Skills, Templates, Agents, and Memories to customize your AI experience.",
6
- "version": "2.0.27-rc.7",
6
+ "version": "2.0.27-rc.8",
7
7
  "homepage": "https://dollhousemcp.com",
8
8
  "repository": {
9
9
  "type": "git",
@@ -29,7 +29,7 @@
29
29
  {
30
30
  "registryType": "npm",
31
31
  "identifier": "@dollhousemcp/mcp-server",
32
- "version": "2.0.27-rc.7",
32
+ "version": "2.0.27-rc.8",
33
33
  "transport": {
34
34
  "type": "stdio"
35
35
  }