@dollhousemcp/mcp-server 2.0.27-rc.4 → 2.0.27-rc.6

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.4] - 2026-04-19
3
+ ## [2.0.27-rc.6] - 2026-04-19
4
4
 
5
5
  - Version bump
6
6
 
@@ -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.4";
6
- export declare const BUILD_TIMESTAMP = "2026-04-19T17:27:21.141Z";
5
+ export declare const PACKAGE_VERSION = "2.0.27-rc.6";
6
+ export declare const BUILD_TIMESTAMP = "2026-04-19T19:47:49.427Z";
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.4';
6
- export const BUILD_TIMESTAMP = '2026-04-19T17:27:21.141Z';
5
+ export const PACKAGE_VERSION = '2.0.27-rc.6';
6
+ export const BUILD_TIMESTAMP = '2026-04-19T19:47:49.427Z';
7
7
  export const BUILD_TYPE = 'npm';
8
8
  export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMjctcmMuNCc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjYtMDQtMTlUMTc6Mjc6MjEuMTQxWic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMjctcmMuNic7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjYtMDQtMTlUMTk6NDc6NDkuNDI3Wic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
@@ -88,6 +88,8 @@ export interface IngestRoutesResult {
88
88
  router: Router;
89
89
  /** Get all tracked sessions */
90
90
  getSessions: () => SessionInfo[];
91
+ /** Import active follower sessions from a displaced leader during takeover. */
92
+ importSessions: (sessions: SessionInfo[]) => void;
91
93
  /** Register the leader as a session */
92
94
  registerLeaderSession: (sessionId: string, pid: number) => void;
93
95
  /** Register the web console as a session so the indicator is never empty (#1805) */
@@ -1 +1 @@
1
- {"version":3,"file":"IngestRoutes.d.ts","sourceRoot":"","sources":["../../../src/web/console/IngestRoutes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA+B7D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,+FAA+F;IAC/F,aAAa,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,aAAa,EAAE,OAAO,CAAC;IACvB,iGAAiG;IACjG,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IACvD,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7E,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,WAAW,EAAE,MAAM,WAAW,EAAE,CAAC;IACjC,uCAAuC;IACvC,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,oFAAoF;IACpF,sBAAsB,EAAE,MAAM,IAAI,CAAC;CACpC;AAqBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,gBAAgB,GAAG,kBAAkB,CAucnF"}
1
+ {"version":3,"file":"IngestRoutes.d.ts","sourceRoot":"","sources":["../../../src/web/console/IngestRoutes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAgC7D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,+FAA+F;IAC/F,aAAa,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,aAAa,EAAE,OAAO,CAAC;IACvB,iGAAiG;IACjG,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IACvD,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7E,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,WAAW,EAAE,MAAM,WAAW,EAAE,CAAC;IACjC,+EAA+E;IAC/E,cAAc,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAClD,uCAAuC;IACvC,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,oFAAoF;IACpF,sBAAsB,EAAE,MAAM,IAAI,CAAC;CACpC;AAqBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,gBAAgB,GAAG,kBAAkB,CAwfnF"}
@@ -31,6 +31,7 @@ const RATE_LIMIT_WINDOW_MS = 60_000;
31
31
  const REAPER_INTERVAL_MS = 5_000;
32
32
  /** How long since last heartbeat before a session is considered dead (ms) */
33
33
  const SESSION_STALE_MS = 15_000;
34
+ const TAKEOVER_IMPORTED_SESSION_GRACE_MS = 60_000;
34
35
  /** Timeout for legacy port federation/proxy requests (ms) */
35
36
  const LEGACY_FETCH_TIMEOUT_MS = 2_000;
36
37
  /** How long before ended sessions are purged from the Map (ms) */
@@ -69,6 +70,7 @@ export function createIngestRoutes(broadcasts) {
69
70
  // When the user dismisses a pid=0 orphan, we add it here. The next heartbeat
70
71
  // (every 10s) carries the PID — we SIGTERM immediately and move to killedSessions.
71
72
  const pendingKills = new Set();
73
+ const importedSessionGraceUntil = new Map();
72
74
  /** Execute a deferred kill if we now have a PID. */
73
75
  function tryExecutePendingKill(sessionId, pid) {
74
76
  const killPid = pid || sessions.get(sessionId)?.pid;
@@ -134,6 +136,7 @@ export function createIngestRoutes(broadcasts) {
134
136
  if (!existing) {
135
137
  return autoRegister(sessionId, pid, authenticated, serverVersion, consoleProtocolVersion);
136
138
  }
139
+ importedSessionGraceUntil.delete(sessionId);
137
140
  if (existing.status === 'ended') {
138
141
  existing.status = 'active';
139
142
  logger.info('[IngestRoutes] Revived ended session still sending data', {
@@ -403,6 +406,12 @@ export function createIngestRoutes(broadcasts) {
403
406
  if (session.isLeader || session.kind === 'console')
404
407
  continue;
405
408
  const age = now - new Date(session.lastHeartbeat).getTime();
409
+ const graceUntil = importedSessionGraceUntil.get(id) ?? 0;
410
+ if (graceUntil > now)
411
+ continue;
412
+ if (graceUntil !== 0) {
413
+ importedSessionGraceUntil.delete(id);
414
+ }
406
415
  if (age <= SESSION_STALE_MS)
407
416
  continue;
408
417
  session.status = 'ended';
@@ -419,6 +428,7 @@ export function createIngestRoutes(broadcasts) {
419
428
  function purgeStaleEntries(now) {
420
429
  for (const [id, session] of sessions) {
421
430
  if (session.status === 'ended' && now - new Date(session.lastHeartbeat).getTime() > ENDED_PURGE_MS) {
431
+ importedSessionGraceUntil.delete(id);
422
432
  sessions.delete(id);
423
433
  }
424
434
  }
@@ -432,6 +442,43 @@ export function createIngestRoutes(broadcasts) {
432
442
  function getSessions() {
433
443
  return Array.from(sessions.values()).filter(s => s.status === 'active');
434
444
  }
445
+ function importSessions(importedSessions) {
446
+ const now = Date.now();
447
+ for (const imported of importedSessions) {
448
+ if (imported.status !== 'active')
449
+ continue;
450
+ if (imported.isLeader || imported.kind === 'console')
451
+ continue;
452
+ if (killedSessions.has(imported.sessionId) || pendingKills.has(imported.sessionId))
453
+ continue;
454
+ const normalizedSessionId = normalizeInput(imported.sessionId);
455
+ const existing = sessions.get(normalizedSessionId);
456
+ if (existing?.isLeader || existing?.kind === 'console') {
457
+ continue;
458
+ }
459
+ const displayName = imported.displayName
460
+ ? namePool.adopt(normalizedSessionId, imported.displayName)
461
+ : namePool.assign(normalizedSessionId);
462
+ const color = imported.color || namePool.getColor(normalizedSessionId) || '#3b82f6';
463
+ const merged = {
464
+ sessionId: normalizedSessionId,
465
+ displayName,
466
+ color,
467
+ pid: imported.pid || existing?.pid || 0,
468
+ startedAt: imported.startedAt || existing?.startedAt || new Date(now).toISOString(),
469
+ lastHeartbeat: imported.lastHeartbeat || existing?.lastHeartbeat || new Date(now).toISOString(),
470
+ status: 'active',
471
+ isLeader: false,
472
+ authenticated: imported.authenticated ?? existing?.authenticated ?? false,
473
+ kind: 'mcp',
474
+ serverVersion: normalizeServerVersion(imported.serverVersion || existing?.serverVersion),
475
+ consoleProtocolVersion: normalizeConsoleProtocolVersion(imported.consoleProtocolVersion ?? existing?.consoleProtocolVersion),
476
+ };
477
+ sessions.set(normalizedSessionId, merged);
478
+ importedSessionGraceUntil.set(normalizedSessionId, now + TAKEOVER_IMPORTED_SESSION_GRACE_MS);
479
+ broadcasts.sessionBroadcast?.(merged);
480
+ }
481
+ }
435
482
  function registerLeaderSession(sessionId, pid) {
436
483
  const displayName = namePool.assign(sessionId, true);
437
484
  const color = namePool.getColor(sessionId) ?? '#3b82f6';
@@ -477,6 +524,6 @@ export function createIngestRoutes(broadcasts) {
477
524
  });
478
525
  logger.info('[IngestRoutes] Console session registered', { sessionId: consoleId, pid: process.pid });
479
526
  }
480
- return { router, getSessions, registerLeaderSession, registerConsoleSession };
527
+ return { router, getSessions, importSessions, registerLeaderSession, registerConsoleSession };
481
528
  }
482
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5nZXN0Um91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dlYi9jb25zb2xlL0luZ2VzdFJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUkxQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUNMLHdCQUF3QixFQUN4QiwrQkFBK0IsR0FDaEMsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixrREFBa0Q7QUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFFL0IscURBQXFEO0FBQ3JELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQztBQUM1QixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztBQUVwQyxpREFBaUQ7QUFDakQsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFFakMsNkVBQTZFO0FBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0FBRWhDLDZEQUE2RDtBQUM3RCxNQUFNLHVCQUF1QixHQUFHLEtBQUssQ0FBQztBQUV0QyxrRUFBa0U7QUFDbEUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLFlBQVk7QUFvRi9DLDZEQUE2RDtBQUM3RCxTQUFTLGNBQWMsQ0FBQyxDQUFTO0lBQy9CLE9B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ZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnQgaW5nZXN0aW9uIHJvdXRlcyBmb3IgdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUuXG4gKlxuICogVGhlIGNvbnNvbGUgbGVhZGVyIG1vdW50cyB0aGVzZSByb3V0ZXMgc28gZm9sbG93ZXIgTUNQIHNlcnZlcnMgY2FuXG4gKiBmb3J3YXJkIHRoZWlyIGxvZ3MsIG1ldHJpY3MsIGFuZCBzZXNzaW9uIGxpZmVjeWNsZSBldmVudHMuIEFsbCBpbmdlc3RlZFxuICogZW50cmllcyBhcmUgc3RhbXBlZCB3aXRoIGBfc2Vzc2lvbklkYCBpbiB0aGVpciBkYXRhIGZpZWxkIGFuZCB0aGVuXG4gKiBicm9hZGNhc3QgdG8gU1NFIGNsaWVudHMgdmlhIHRoZSBleGlzdGluZyBsb2cvbWV0cmljcyBicm9hZGNhc3QgaG9va3MuXG4gKlxuICogUm91dGVzOlxuICogLSBQT1NUIC9hcGkvaW5nZXN0L2xvZ3MgICAgIOKAlCBCYXRjaGVkIGxvZyBlbnRyaWVzIGZyb20gYSBmb2xsb3dlclxuICogLSBQT1NUIC9hcGkvaW5nZXN0L21ldHJpY3MgIOKAlCBNZXRyaWMgc25hcHNob3RzIGZyb20gYSBmb2xsb3dlclxuICogLSBQT1NUIC9hcGkvaW5nZXN0L3Nlc3Npb24gIOKAlCBTZXNzaW9uIGxpZmVjeWNsZSBldmVudHMgKHN0YXJ0ZWQvc3RvcHBlZC9oZWFydGJlYXQpXG4gKiAtIEdFVCAgL2FwaS9zZXNzaW9ucyAgICAgICAg4oCUIEFjdGl2ZSBzZXNzaW9uIGxpc3QgZm9yIHRoZSBVSVxuICpcbiAqIEBzaW5jZSB2Mi4xLjAg4oCUIElzc3VlICMxNzAwXG4gKi9cblxuaW1wb3J0IGV4cHJlc3MsIHsgUm91dGVyIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdHlwZSB7IFVuaWZpZWRMb2dFbnRyeSB9IGZyb20gJy4uLy4uL2xvZ2dpbmcvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRyaWNTbmFwc2hvdCB9IGZyb20gJy4uLy4uL21ldHJpY3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2Vzc2lvbk5hbWVQb29sIH0gZnJvbSAnLi9TZXNzaW9uTmFtZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuaW1wb3J0IHsgUEFDS0FHRV9WRVJTSU9OIH0gZnJvbSAnLi4vLi4vZ2VuZXJhdGVkL3ZlcnNpb24uanMnO1xuaW1wb3J0IHtcbiAgQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICBMRUdBQ1lfQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxufSBmcm9tICcuL0xlYWRlckVsZWN0aW9uLmpzJztcblxuLyoqIE1heGltdW0gcGF5bG9hZCBzaXplIGZvciBpbmdlc3Rpb24gcmVxdWVzdHMgKi9cbmNvbnN0IE1BWF9QQVlMT0FEX1NJWkUgPSAnMW1iJztcblxuLyoqIFJhdGUgbGltaXQ6IG1heCByZXF1ZXN0cyBwZXIgd2luZG93IHBlciBzb3VyY2UgKi9cbmNvbnN0IFJBVEVfTElNSVRfTUFYID0gMTAwMDtcbmNvbnN0IFJBVEVfTElNSVRfV0lORE9XX01TID0gNjBfMDAwO1xuXG4vKiogSG93IG9mdGVuIHRvIGNoZWNrIGZvciBzdGFsZSBzZXNzaW9ucyAobXMpICovXG5jb25zdCBSRUFQRVJfSU5URVJWQUxfTVMgPSA1XzAwMDtcblxuLyoqIEhvdyBsb25nIHNpbmNlIGxhc3QgaGVhcnRiZWF0IGJlZm9yZSBhIHNlc3Npb24gaXMgY29uc2lkZXJlZCBkZWFkIChtcykgKi9cbmNvbnN0IFNFU1NJT05fU1RBTEVfTVMgPSAxNV8wMDA7XG5cbi8qKiBUaW1lb3V0IGZvciBsZWdhY3kgcG9ydCBmZWRlcmF0aW9uL3Byb3h5IHJlcXVlc3RzIChtcykgKi9cbmNvbnN0IExFR0FDWV9GRVRDSF9USU1FT1VUX01TID0gMl8wMDA7XG5cbi8qKiBIb3cgbG9uZyBiZWZvcmUgZW5kZWQgc2Vzc2lvbnMgYXJlIHB1cmdlZCBmcm9tIHRoZSBNYXAgKG1zKSAqL1xuY29uc3QgRU5ERURfUFVSR0VfTVMgPSA1ICogNjBfMDAwOyAvLyA1IG1pbnV0ZXNcblxuLyoqXG4gKiBUcmFja2VkIHNlc3Npb24gaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbkluZm8ge1xuICAvKiogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgc2Vzc2lvbiAoVVVJRCBvciBgY29uc29sZS08cGlkPmApLiAqL1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgLyoqIEZyaWVuZGx5IHB1cHBldCBuYW1lIChlLmcuLCBcIktlcm1pdFwiLCBcIlB1bmNoXCIpIG9yIFwiV2ViIENvbnNvbGVcIi4gKi9cbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgLyoqIENhbm9uaWNhbCBoZXggY29sb3IgZm9yIHRoaXMgcHVwcGV0IGNoYXJhY3Rlci4gKi9cbiAgY29sb3I6IHN0cmluZztcbiAgLyoqIE9TIHByb2Nlc3MgSUQgb2YgdGhlIE1DUCBzZXJ2ZXIgb3Igd2ViIGNvbnNvbGUgcHJvY2Vzcy4gKi9cbiAgcGlkOiBudW1iZXI7XG4gIC8qKiBJU08gdGltZXN0YW1wIHdoZW4gdGhlIHNlc3Npb24gc3RhcnRlZC4gKi9cbiAgc3RhcnRlZEF0OiBzdHJpbmc7XG4gIC8qKiBJU08gdGltZXN0YW1wIG9mIHRoZSBtb3N0IHJlY2VudCBoZWFydGJlYXQgKGZvbGxvd2Vycykgb3IgcmVnaXN0cmF0aW9uIChsZWFkZXIvY29uc29sZSkuICovXG4gIGxhc3RIZWFydGJlYXQ6IHN0cmluZztcbiAgLyoqIExpZmVjeWNsZSBzdGF0dXMg4oCUICdhY3RpdmUnIHVudGlsIGVuZGVkIG9yIHJlYXBlZCBmb3Igc3RhbGVuZXNzLiAqL1xuICBzdGF0dXM6ICdhY3RpdmUnIHwgJ2VuZGVkJztcbiAgLyoqIFRydWUgaWYgdGhpcyBzZXNzaW9uIHdvbiBsZWFkZXIgZWxlY3Rpb24gYW5kIG93bnMgdGhlIHRva2VuIGZpbGUuICovXG4gIGlzTGVhZGVyOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGlzIHNlc3Npb24gY29ubmVjdGVkIHdpdGggYSB2YWxpZCBCZWFyZXIgdG9rZW4gKCMxODA1KS4gKi9cbiAgYXV0aGVudGljYXRlZDogYm9vbGVhbjtcbiAgLyoqIFNlc3Npb24ga2luZCDigJQgJ21jcCcgZm9yIE1DUCBzdGRpbyBzZXNzaW9ucywgJ2NvbnNvbGUnIGZvciB0aGUgd2ViIGNvbnNvbGUgaXRzZWxmICgjMTgwNSkuICovXG4gIGtpbmQ6ICdtY3AnIHwgJ2NvbnNvbGUnO1xuICAvKiogRG9sbGhvdXNlTUNQIHBhY2thZ2UgdmVyc2lvbiByZXBvcnRlZCBieSB0aGUgc2Vzc2lvbi4gKi9cbiAgc2VydmVyVmVyc2lvbjogc3RyaW5nO1xuICAvKiogQ29uc29sZS9zZXNzaW9uIGNvbnRyYWN0IHZlcnNpb24gdXNlZCBmb3IgY29tcGF0aWJpbGl0eS1hd2FyZSB0YWtlb3Zlci4gKi9cbiAgY29uc29sZVByb3RvY29sVmVyc2lvbjogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBheWxvYWQgZm9yIFBPU1QgL2FwaS9pbmdlc3QvbG9nc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZ2VzdExvZ1BheWxvYWQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgZW50cmllczogVW5pZmllZExvZ0VudHJ5W107XG59XG5cbi8qKlxuICogUGF5bG9hZCBmb3IgUE9TVCAvYXBpL2luZ2VzdC9tZXRyaWNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5nZXN0TWV0cmljc1BheWxvYWQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc25hcHNob3Q6IE1ldHJpY1NuYXBzaG90O1xufVxuXG4vKipcbiAqIFBheWxvYWQgZm9yIFBPU1QgL2FwaS9pbmdlc3Qvc2Vzc2lvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25FdmVudFBheWxvYWQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgZXZlbnQ6ICdzdGFydGVkJyB8ICdzdG9wcGVkJyB8ICdoZWFydGJlYXQnO1xuICBwaWQ6IG51bWJlcjtcbiAgc3RhcnRlZEF0OiBzdHJpbmc7XG4gIHNlcnZlclZlcnNpb24/OiBzdHJpbmc7XG4gIGNvbnNvbGVQcm90b2NvbFZlcnNpb24/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ2FsbGJhY2tzIHByb3ZpZGVkIGJ5IHRoZSB1bmlmaWVkIGNvbnNvbGUgb3JjaGVzdHJhdG9yIGZvciBicm9hZGNhc3RpbmdcbiAqIGluZ2VzdGVkIGV2ZW50cyB0aHJvdWdoIHRoZSBleGlzdGluZyBTU0UgaW5mcmFzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5nZXN0QnJvYWRjYXN0cyB7XG4gIGxvZ0Jyb2FkY2FzdDogKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHZvaWQ7XG4gIG1ldHJpY3NPblNuYXBzaG90PzogKHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdCkgPT4gdm9pZDtcbiAgc3RvcmVNZXRyaWNzU25hcHNob3Q/OiAoc25hcHNob3Q6IE1ldHJpY1NuYXBzaG90LCBzZXNzaW9uSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgc2Vzc2lvbkJyb2FkY2FzdD86IChldmVudDogU2Vzc2lvbkluZm8pID0+IHZvaWQ7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGNyZWF0aW5nIGluZ2VzdCByb3V0ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5nZXN0Um91dGVzUmVzdWx0IHtcbiAgcm91dGVyOiBSb3V0ZXI7XG4gIC8qKiBHZXQgYWxsIHRyYWNrZWQgc2Vzc2lvbnMgKi9cbiAgZ2V0U2Vzc2lvbnM6ICgpID0+IFNlc3Npb25JbmZvW107XG4gIC8qKiBSZWdpc3RlciB0aGUgbGVhZGVyIGFzIGEgc2Vzc2lvbiAqL1xuICByZWdpc3RlckxlYWRlclNlc3Npb246IChzZXNzaW9uSWQ6IHN0cmluZywgcGlkOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBSZWdpc3RlciB0aGUgd2ViIGNvbnNvbGUgYXMgYSBzZXNzaW9uIHNvIHRoZSBpbmRpY2F0b3IgaXMgbmV2ZXIgZW1wdHkgKCMxODA1KSAqL1xuICByZWdpc3RlckNvbnNvbGVTZXNzaW9uOiAoKSA9PiB2b2lkO1xufVxuXG4vKiogTm9ybWFsaXplIGEgc3RyaW5nIHZpYSBVbmljb2RlVmFsaWRhdG9yIChETUNQLVNFQy0wMDQpICovXG5mdW5jdGlvbiBub3JtYWxpemVJbnB1dChzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUocykubm9ybWFsaXplZENvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlcnZlclZlcnNpb24odmVyc2lvbj86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycgJiYgdmVyc2lvbi50cmltKCkubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB2ZXJzaW9uLnRyaW0oKTtcbiAgfVxuICByZXR1cm4gJ3Vua25vd24nO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDb25zb2xlUHJvdG9jb2xWZXJzaW9uKHZlcnNpb24/OiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIodmVyc2lvbikgJiYgdmVyc2lvbiA+PSAwKSB7XG4gICAgcmV0dXJuIHZlcnNpb247XG4gIH1cbiAgcmV0dXJuIExFR0FDWV9DT05TT0xFX1BST1RPQ09MX1ZFUlNJT047XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBpbmdlc3Rpb24gcm91dGVzIGFuZCBzZXNzaW9uIHJlZ2lzdHJ5LlxuICpcbiAqIEBwYXJhbSBicm9hZGNhc3RzIC0gQ2FsbGJhY2tzIHRvIGZvcndhcmQgaW5nZXN0ZWQgZXZlbnRzIHRvIFNTRSBjbGllbnRzXG4gKiBAcmV0dXJucyBSb3V0ZXIgYW5kIHNlc3Npb24gbWFuYWdlbWVudCBmdW5jdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluZ2VzdFJvdXRlcyhicm9hZGNhc3RzOiBJbmdlc3RCcm9hZGNhc3RzKTogSW5nZXN0Um91dGVzUmVzdWx0IHtcbiAgY29uc3Qgcm91dGVyID0gUm91dGVyKCk7XG4gIGNvbnN0IHNlc3Npb25zID0gbmV3IE1hcDxzdHJpbmcsIFNlc3Npb25JbmZvPigpO1xuICBjb25zdCBuYW1lUG9vbCA9IG5ldyBTZXNzaW9uTmFtZVBvb2woKTtcbiAgY29uc3QgcmF0ZUxpbWl0ZXIgPSBuZXcgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyKFJBVEVfTElNSVRfTUFYLCBSQVRFX0xJTUlUX1dJTkRPV19NUyk7XG5cbiAgLy8gU2Vzc2lvbnMgdGhlIHVzZXIgZXhwbGljaXRseSBraWxsZWQg4oCUIG5ldmVyIGNvbWUgYmFjayAoIzE4NzApLlxuICAvLyBDbGVhcmVkIG9ubHkgb24gc2VydmVyIHJlc3RhcnQsIHdoaWNoIGlzIGFwcHJvcHJpYXRlIHNpbmNlIHRoYXQncyBhIG5ldyBjb250ZXh0LlxuICBjb25zdCBraWxsZWRTZXNzaW9ucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIC8vIFNlc3Npb25zIHdhaXRpbmcgZm9yIGEgUElEIHNvIHdlIGNhbiBTSUdURVJNIHRoZW0gKCMxODcwKS5cbiAgLy8gV2hlbiB0aGUgdXNlciBkaXNtaXNzZXMgYSBwaWQ9MCBvcnBoYW4sIHdlIGFkZCBpdCBoZXJlLiBUaGUgbmV4dCBoZWFydGJlYXRcbiAgLy8gKGV2ZXJ5IDEwcykgY2FycmllcyB0aGUgUElEIOKAlCB3ZSBTSUdURVJNIGltbWVkaWF0ZWx5IGFuZCBtb3ZlIHRvIGtpbGxlZFNlc3Npb25zLlxuICBjb25zdCBwZW5kaW5nS2lsbHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAvKiogRXhlY3V0ZSBhIGRlZmVycmVkIGtpbGwgaWYgd2Ugbm93IGhhdmUgYSBQSUQuICovXG4gIGZ1bmN0aW9uIHRyeUV4ZWN1dGVQZW5kaW5nS2lsbChzZXNzaW9uSWQ6IHN0cmluZywgcGlkPzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qga2lsbFBpZCA9IHBpZCB8fCBzZXNzaW9ucy5nZXQoc2Vzc2lvbklkKT8ucGlkO1xuICAgIGlmICgha2lsbFBpZCkgcmV0dXJuO1xuICAgIHRyeSB7IHByb2Nlc3Mua2lsbChraWxsUGlkLCAnU0lHVEVSTScpOyB9IGNhdGNoIHsgLyogYWxyZWFkeSBkZWFkICovIH1cbiAgICBjb25zdCBleGlzdGluZyA9IHNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuICAgIGlmIChleGlzdGluZykgZXhpc3Rpbmcuc3RhdHVzID0gJ2VuZGVkJztcbiAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gRGVmZXJyZWQga2lsbCBleGVjdXRlZCDigJQgUElEIGFycml2ZWQnLCB7XG4gICAgICBkaXNwbGF5TmFtZTogZXhpc3Rpbmc/LmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZDoga2lsbFBpZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBQcm9tb3RlIGEgcGVuZGluZyBraWxsIHRvIHBlcm1hbmVudC4gKi9cbiAgZnVuY3Rpb24gZmluYWxpemVQZW5kaW5nS2lsbChzZXNzaW9uSWQ6IHN0cmluZywgcGlkPzogbnVtYmVyKTogdm9pZCB7XG4gICAgdHJ5RXhlY3V0ZVBlbmRpbmdLaWxsKHNlc3Npb25JZCwgcGlkKTtcbiAgICBwZW5kaW5nS2lsbHMuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAga2lsbGVkU2Vzc2lvbnMuYWRkKHNlc3Npb25JZCk7XG4gIH1cblxuICAvKiogQ3JlYXRlIGEgbmV3IHNlc3Npb24gZW50cnkgZm9yIGFuIG9ycGhhbi4gUmV0dXJucyBudWxsIG9uIGZhaWx1cmUuICovXG4gIGZ1bmN0aW9uIGF1dG9SZWdpc3RlcihcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICBwaWQ/OiBudW1iZXIsXG4gICAgYXV0aGVudGljYXRlZCA9IGZhbHNlLFxuICAgIHNlcnZlclZlcnNpb24/OiBzdHJpbmcsXG4gICAgY29uc29sZVByb3RvY29sVmVyc2lvbj86IG51bWJlcixcbiAgKTogU2Vzc2lvbkluZm8gfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBuYW1lUG9vbC5hc3NpZ24oc2Vzc2lvbklkKTtcbiAgICAgIGNvbnN0IGNvbG9yID0gbmFtZVBvb2wuZ2V0Q29sb3Ioc2Vzc2lvbklkKSA/PyAnIzNiODJmNic7XG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICBjb25zdCBpbmZvOiBTZXNzaW9uSW5mbyA9IHtcbiAgICAgICAgc2Vzc2lvbklkLCBkaXNwbGF5TmFtZSwgY29sb3IsXG4gICAgICAgIHBpZDogcGlkIHx8IDAsXG4gICAgICAgIHN0YXJ0ZWRBdDogbm93LCBsYXN0SGVhcnRiZWF0OiBub3csXG4gICAgICAgIHN0YXR1czogJ2FjdGl2ZScsIGlzTGVhZGVyOiBmYWxzZSwgYXV0aGVudGljYXRlZCwga2luZDogJ21jcCcsXG4gICAgICAgIHNlcnZlclZlcnNpb246IG5vcm1hbGl6ZVNlcnZlclZlcnNpb24oc2VydmVyVmVyc2lvbiksXG4gICAgICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IG5vcm1hbGl6ZUNvbnNvbGVQcm90b2NvbFZlcnNpb24oY29uc29sZVByb3RvY29sVmVyc2lvbiksXG4gICAgICB9O1xuICAgICAgc2Vzc2lvbnMuc2V0KHNlc3Npb25JZCwgaW5mbyk7XG4gICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gQXV0by1yZWdpc3RlcmVkIG9ycGhhbmVkIHNlc3Npb24nLCB7XG4gICAgICAgIGRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHNvdXJjZTogcGlkID8gJ2hlYXJ0YmVhdCcgOiAnaW5nZXN0aW9uJyxcbiAgICAgIH0pO1xuICAgICAgYnJvYWRjYXN0cy5zZXNzaW9uQnJvYWRjYXN0Py4oaW5mbyk7XG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnW0luZ2VzdFJvdXRlc10gRmFpbGVkIHRvIGF1dG8tcmVnaXN0ZXIgb3JwaGFuZWQgc2Vzc2lvbicsIHtcbiAgICAgICAgc2Vzc2lvbklkLCBlcnJvcjogKGVyciBhcyBFcnJvcikubWVzc2FnZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF1dG8tcmVnaXN0ZXIgb3IgdXBkYXRlIGFuIG9ycGhhbmVkIHNlc3Npb24gZnJvbSBpbmdlc3Rpb24gZGF0YS5cbiAgICogUmV0dXJucyB0aGUgc2Vzc2lvbiAoZXhpc3Rpbmcgb3IgbmV3bHkgY3JlYXRlZCksIG9yIG51bGwgaWYga2lsbGVkL3BlbmRpbmcuXG4gICAqL1xuICBmdW5jdGlvbiBlbnN1cmVTZXNzaW9uKFxuICAgIHNlc3Npb25JZDogc3RyaW5nLFxuICAgIHBpZD86IG51bWJlcixcbiAgICBhdXRoZW50aWNhdGVkID0gZmFsc2UsXG4gICAgc2VydmVyVmVyc2lvbj86IHN0cmluZyxcbiAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uPzogbnVtYmVyLFxuICApOiBTZXNzaW9uSW5mbyB8IG51bGwge1xuICAgIGlmIChraWxsZWRTZXNzaW9ucy5oYXMoc2Vzc2lvbklkKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHBlbmRpbmdLaWxscy5oYXMoc2Vzc2lvbklkKSkge1xuICAgICAgZmluYWxpemVQZW5kaW5nS2lsbChzZXNzaW9uSWQsIHBpZCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZyA9IHNlc3Npb25zLmdldChzZXNzaW9uSWQpO1xuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiBhdXRvUmVnaXN0ZXIoc2Vzc2lvbklkLCBwaWQsIGF1dGhlbnRpY2F0ZWQsIHNlcnZlclZlcnNpb24sIGNvbnNvbGVQcm90b2NvbFZlcnNpb24pO1xuICAgIH1cblxuICAgIGlmIChleGlzdGluZy5zdGF0dXMgPT09ICdlbmRlZCcpIHtcbiAgICAgIGV4aXN0aW5nLnN0YXR1cyA9ICdhY3RpdmUnO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIFJldml2ZWQgZW5kZWQgc2Vzc2lvbiBzdGlsbCBzZW5kaW5nIGRhdGEnLCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiBleGlzdGluZy5kaXNwbGF5TmFtZSwgc2Vzc2lvbklkLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGV4aXN0aW5nLmxhc3RIZWFydGJlYXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgaWYgKHBpZCAmJiAhZXhpc3RpbmcucGlkKSB7XG4gICAgICBleGlzdGluZy5waWQgPSBwaWQ7XG4gICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gUmVjb3ZlcmVkIFBJRCBmb3Igb3JwaGFuZWQgc2Vzc2lvbicsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IGV4aXN0aW5nLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc2VydmVyVmVyc2lvbikge1xuICAgICAgZXhpc3Rpbmcuc2VydmVyVmVyc2lvbiA9IG5vcm1hbGl6ZVNlcnZlclZlcnNpb24oc2VydmVyVmVyc2lvbik7XG4gICAgfVxuICAgIGlmIChjb25zb2xlUHJvdG9jb2xWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV4aXN0aW5nLmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPSBub3JtYWxpemVDb25zb2xlUHJvdG9jb2xWZXJzaW9uKGNvbnNvbGVQcm90b2NvbFZlcnNpb24pO1xuICAgIH1cbiAgICByZXR1cm4gZXhpc3Rpbmc7XG4gIH1cblxuICAvLyBKU09OIGJvZHkgcGFyc2luZyB3aXRoIHNpemUgbGltaXRcbiAgcm91dGVyLnVzZShleHByZXNzLmpzb24oeyBsaW1pdDogTUFYX1BBWUxPQURfU0laRSB9KSk7XG5cbiAgLyoqXG4gICAqIFBPU1QgL2FwaS9pbmdlc3QvbG9ncyDigJQgUmVjZWl2ZSBiYXRjaGVkIGxvZyBlbnRyaWVzIGZyb20gYSBmb2xsb3dlci5cbiAgICovXG4gIHJvdXRlci5wb3N0KCcvYXBpL2luZ2VzdC9sb2dzJywgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIGlmICghcmF0ZUxpbWl0ZXIudHJ5QWNxdWlyZSgpKSB7XG4gICAgICByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnUmF0ZSBsaW1pdCBleGNlZWRlZCcgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZCA9IHJlcS5ib2R5IGFzIEluZ2VzdExvZ1BheWxvYWQ7XG4gICAgaWYgKCFwYXlsb2FkPy5zZXNzaW9uSWQgfHwgIUFycmF5LmlzQXJyYXkocGF5bG9hZC5lbnRyaWVzKSkge1xuICAgICAgY29uc3QgcmVjZWl2ZWQgPSBwYXlsb2FkID8gT2JqZWN0LmtleXMocGF5bG9hZCkgOiBbXTtcbiAgICAgIGxvZ2dlci53YXJuKCdbSW5nZXN0Um91dGVzXSBJbnZhbGlkIGxvZyBwYXlsb2FkJywgeyByZWNlaXZlZCwgaGFzU2Vzc2lvbklkOiAhIXBheWxvYWQ/LnNlc3Npb25JZCwgaGFzRW50cmllczogQXJyYXkuaXNBcnJheShwYXlsb2FkPy5lbnRyaWVzKSB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIHBheWxvYWQnLCByZXF1aXJlZDogWydzZXNzaW9uSWQnLCAnZW50cmllcyddLCByZWNlaXZlZCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGF5bG9hZC5zZXNzaW9uSWQgPSBub3JtYWxpemVJbnB1dChwYXlsb2FkLnNlc3Npb25JZCk7XG5cbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGxldCBza2lwcGVkID0gMDtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBheWxvYWQuZW50cmllcykge1xuICAgICAgaWYgKCFlbnRyeSB8fCB0eXBlb2YgZW50cnkubWVzc2FnZSAhPT0gJ3N0cmluZycpIHsgc2tpcHBlZCsrOyBjb250aW51ZTsgfVxuICAgICAgY29uc3Qgc3RhbXBlZDogVW5pZmllZExvZ0VudHJ5ID0ge1xuICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgZGF0YTogeyAuLi5lbnRyeS5kYXRhLCBfc2Vzc2lvbklkOiBwYXlsb2FkLnNlc3Npb25JZCB9LFxuICAgICAgfTtcbiAgICAgIGJyb2FkY2FzdHMubG9nQnJvYWRjYXN0KHN0YW1wZWQpO1xuICAgICAgY291bnQrKztcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgaGVhcnRiZWF0LCByZXZpdmUgZW5kZWQgc2Vzc2lvbnMsIG9yIGF1dG8tcmVnaXN0ZXIgb3JwaGFucyAoIzE4NzApXG4gICAgY29uc3Qgc2Vzc2lvbiA9IGVuc3VyZVNlc3Npb24ocGF5bG9hZC5zZXNzaW9uSWQpO1xuXG4gICAgaWYgKHNraXBwZWQgPiAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFtJbmdlc3RSb3V0ZXNdIExvZyBpbmdlc3QgZnJvbSAke3Nlc3Npb24/LmRpc3BsYXlOYW1lID8/IHBheWxvYWQuc2Vzc2lvbklkfTogYWNjZXB0ZWQ9JHtjb3VudH0sIHNraXBwZWQ9JHtza2lwcGVkfWApO1xuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgYWNjZXB0ZWQ6IGNvdW50LCBza2lwcGVkIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL2luZ2VzdC9tZXRyaWNzIOKAlCBSZWNlaXZlIG1ldHJpYyBzbmFwc2hvdHMgZnJvbSBhIGZvbGxvd2VyLlxuICAgKi9cbiAgcm91dGVyLnBvc3QoJy9hcGkvaW5nZXN0L21ldHJpY3MnLCAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKCFyYXRlTGltaXRlci50cnlBY3F1aXJlKCkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDI5KS5qc29uKHsgZXJyb3I6ICdSYXRlIGxpbWl0IGV4Y2VlZGVkJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkID0gcmVxLmJvZHkgYXMgSW5nZXN0TWV0cmljc1BheWxvYWQ7XG4gICAgaWYgKCFwYXlsb2FkPy5zZXNzaW9uSWQgfHwgIXBheWxvYWQuc25hcHNob3QpIHtcbiAgICAgIGNvbnN0IHJlY2VpdmVkID0gcGF5bG9hZCA/IE9iamVjdC5rZXlzKHBheWxvYWQpIDogW107XG4gICAgICBsb2dnZXIud2FybignW0luZ2VzdFJvdXRlc10gSW52YWxpZCBtZXRyaWNzIHBheWxvYWQnLCB7IHJlY2VpdmVkIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgcGF5bG9hZCcsIHJlcXVpcmVkOiBbJ3Nlc3Npb25JZCcsICdzbmFwc2hvdCddLCByZWNlaXZlZCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGF5bG9hZC5zZXNzaW9uSWQgPSBub3JtYWxpemVJbnB1dChwYXlsb2FkLnNlc3Npb25JZCk7XG5cbiAgICBpZiAoYnJvYWRjYXN0cy5tZXRyaWNzT25TbmFwc2hvdCkge1xuICAgICAgYnJvYWRjYXN0cy5tZXRyaWNzT25TbmFwc2hvdChwYXlsb2FkLnNuYXBzaG90KTtcbiAgICB9XG4gICAgaWYgKGJyb2FkY2FzdHMuc3RvcmVNZXRyaWNzU25hcHNob3QpIHtcbiAgICAgIGJyb2FkY2FzdHMuc3RvcmVNZXRyaWNzU25hcHNob3QocGF5bG9hZC5zbmFwc2hvdCwgcGF5bG9hZC5zZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBoZWFydGJlYXQsIHJldml2ZSBlbmRlZCBzZXNzaW9ucywgb3IgYXV0by1yZWdpc3RlciBvcnBoYW5zICgjMTg3MClcbiAgICBjb25zdCBzZXNzaW9uID0gZW5zdXJlU2Vzc2lvbihwYXlsb2FkLnNlc3Npb25JZCk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbSW5nZXN0Um91dGVzXSBNZXRyaWNzIGluZ2VzdGVkIGZyb20gJHtzZXNzaW9uPy5kaXNwbGF5TmFtZSA/PyBwYXlsb2FkLnNlc3Npb25JZH1gKTtcbiAgICByZXMuc3RhdHVzKDIwMCkuanNvbih7IGFjY2VwdGVkOiB0cnVlIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL2luZ2VzdC9zZXNzaW9uIOKAlCBTZXNzaW9uIGxpZmVjeWNsZSBldmVudHMuXG4gICAqL1xuICByb3V0ZXIucG9zdCgnL2FwaS9pbmdlc3Qvc2Vzc2lvbicsIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCBwYXlsb2FkID0gcmVxLmJvZHkgYXMgU2Vzc2lvbkV2ZW50UGF5bG9hZDtcbiAgICBpZiAoIXBheWxvYWQ/LnNlc3Npb25JZCB8fCAhcGF5bG9hZC5ldmVudCkge1xuICAgICAgY29uc3QgcmVjZWl2ZWQgPSBwYXlsb2FkID8gT2JqZWN0LmtleXMocGF5bG9hZCkgOiBbXTtcbiAgICAgIGxvZ2dlci53YXJuKCdbSW5nZXN0Um91dGVzXSBJbnZhbGlkIHNlc3Npb24gZXZlbnQgcGF5bG9hZCcsIHsgcmVjZWl2ZWQgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBwYXlsb2FkJywgcmVxdWlyZWQ6IFsnc2Vzc2lvbklkJywgJ2V2ZW50J10sIHJlY2VpdmVkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwYXlsb2FkLnNlc3Npb25JZCA9IG5vcm1hbGl6ZUlucHV0KHBheWxvYWQuc2Vzc2lvbklkKTtcblxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICAgIHN3aXRjaCAocGF5bG9hZC5ldmVudCkge1xuICAgICAgY2FzZSAnc3RhcnRlZCc6IHtcbiAgICAgICAgLy8gS2lsbGVkIHNlc3Npb25zIHN0YXkgZGVhZDsgcGVuZGluZyBraWxscyBnZXQgZmluYWxpemVkICgjMTg3MClcbiAgICAgICAgaWYgKGtpbGxlZFNlc3Npb25zLmhhcyhwYXlsb2FkLnNlc3Npb25JZCkpIGJyZWFrO1xuICAgICAgICBpZiAocGVuZGluZ0tpbGxzLmhhcyhwYXlsb2FkLnNlc3Npb25JZCkpIHsgZmluYWxpemVQZW5kaW5nS2lsbChwYXlsb2FkLnNlc3Npb25JZCwgcGF5bG9hZC5waWQpOyBicmVhazsgfVxuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gbmFtZVBvb2wuYXNzaWduKHBheWxvYWQuc2Vzc2lvbklkKTtcbiAgICAgICAgY29uc3QgY29sb3IgPSBuYW1lUG9vbC5nZXRDb2xvcihwYXlsb2FkLnNlc3Npb25JZCkgPz8gJyMzYjgyZjYnO1xuICAgICAgICBjb25zdCBpc0F1dGhlbnRpY2F0ZWQgPSBCb29sZWFuKChyZXMgYXMgYW55KS5sb2NhbHM/LnRva2VuRW50cnkpO1xuICAgICAgICBzZXNzaW9ucy5zZXQocGF5bG9hZC5zZXNzaW9uSWQsIHtcbiAgICAgICAgICBzZXNzaW9uSWQ6IHBheWxvYWQuc2Vzc2lvbklkLCBkaXNwbGF5TmFtZSwgY29sb3IsXG4gICAgICAgICAgcGlkOiBwYXlsb2FkLnBpZCwgc3RhcnRlZEF0OiBwYXlsb2FkLnN0YXJ0ZWRBdCB8fCBub3csIGxhc3RIZWFydGJlYXQ6IG5vdyxcbiAgICAgICAgICBzdGF0dXM6ICdhY3RpdmUnLCBpc0xlYWRlcjogZmFsc2UsIGF1dGhlbnRpY2F0ZWQ6IGlzQXV0aGVudGljYXRlZCwga2luZDogJ21jcCcsXG4gICAgICAgICAgc2VydmVyVmVyc2lvbjogbm9ybWFsaXplU2VydmVyVmVyc2lvbihwYXlsb2FkLnNlcnZlclZlcnNpb24pLFxuICAgICAgICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IG5vcm1hbGl6ZUNvbnNvbGVQcm90b2NvbFZlcnNpb24ocGF5bG9hZC5jb25zb2xlUHJvdG9jb2xWZXJzaW9uKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBTZXNzaW9uIHJlZ2lzdGVyZWQnLCB7XG4gICAgICAgICAgZGlzcGxheU5hbWUsIHNlc3Npb25JZDogcGF5bG9hZC5zZXNzaW9uSWQsIHBpZDogcGF5bG9hZC5waWQsIGNvbG9yLFxuICAgICAgICAgIGFjdGl2ZVNlc3Npb25zOiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpLmxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyb2FkY2FzdHMuc2Vzc2lvbkJyb2FkY2FzdD8uKHNlc3Npb25zLmdldChwYXlsb2FkLnNlc3Npb25JZCkhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdzdG9wcGVkJzoge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHNlc3Npb25zLmdldChwYXlsb2FkLnNlc3Npb25JZCk7XG4gICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgIGV4aXN0aW5nLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgICAgICAgZXhpc3RpbmcubGFzdEhlYXJ0YmVhdCA9IG5vdztcbiAgICAgICAgICBuYW1lUG9vbC5yZWxlYXNlKHBheWxvYWQuc2Vzc2lvbklkKTtcbiAgICAgICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gU2Vzc2lvbiBzdG9wcGVkJywge1xuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGV4aXN0aW5nLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQ6IHBheWxvYWQuc2Vzc2lvbklkLCBwaWQ6IGV4aXN0aW5nLnBpZCxcbiAgICAgICAgICAgIGFjdGl2ZVNlc3Npb25zOiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpLmxlbmd0aCAtIDEsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJvYWRjYXN0cy5zZXNzaW9uQnJvYWRjYXN0Py4oZXhpc3RpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnaGVhcnRiZWF0Jzoge1xuICAgICAgICAvLyBBdXRvLXJlZ2lzdGVyIG9yIHVwZGF0ZSDigJQgaGVhcnRiZWF0IGluY2x1ZGVzIFBJRCBmb3IgcmVjb3ZlcnkgKCMxODcwKVxuICAgICAgICBlbnN1cmVTZXNzaW9uKFxuICAgICAgICAgIHBheWxvYWQuc2Vzc2lvbklkLFxuICAgICAgICAgIHBheWxvYWQucGlkLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHBheWxvYWQuc2VydmVyVmVyc2lvbixcbiAgICAgICAgICBwYXlsb2FkLmNvbnNvbGVQcm90b2NvbFZlcnNpb24sXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgb2s6IHRydWUgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBHRVQgL2FwaS9zZXNzaW9ucyDigJQgTGlzdCBhbGwgdHJhY2tlZCBzZXNzaW9ucy5cbiAgICovXG4gIHJvdXRlci5nZXQoJy9hcGkvc2Vzc2lvbnMnLCBhc3luYyAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIC8vIFNlcnZlci1zaWRlIGFjdGl2ZSBmaWx0ZXIg4oCUIHRoZSBmcm9udGVuZCBhbHNvIGZpbHRlcnMsIGJ1dCBlbmRlZCBzZXNzaW9uc1xuICAgIC8vIHNob3VsZCBuZXZlciBsZWF2ZSB0aGUgQVBJIHRvIHByZXZlbnQgc3RhbGUgVUkgKCMxODcwKS5cbiAgICBjb25zdCBsb2NhbFNlc3Npb25zID0gQXJyYXkuZnJvbShzZXNzaW9ucy52YWx1ZXMoKSkuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09ICdhY3RpdmUnKTtcbiAgICBjb25zdCBjdXJyZW50UG9ydCA9IGVudi5ET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVCA/PyA0MTcxNTtcblxuICAgIC8vIEZlZGVyYXRlIHdpdGggdGhlIGxlZ2FjeSBwb3J0ICgzOTM5KSB0byBzaG93IGFsbCBzZXNzaW9ucyBvbiB0aGVcbiAgICAvLyBtYWNoaW5lLCBpbmNsdWRpbmcgdW5hdXRoZW50aWNhdGVkIG9uZXMgZnJvbSBwcmUtYXV0aCBpbnN0YWxscy5cbiAgICAvLyBTZXJ2ZXItdG8tc2VydmVyIGF2b2lkcyBDT1JTIHJlc3RyaWN0aW9ucyAoIzE4MDUpLlxuICAgIGlmIChjdXJyZW50UG9ydCAhPT0gMzkzOSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCBMRUdBQ1lfRkVUQ0hfVElNRU9VVF9NUyk7XG4gICAgICAgIGNvbnN0IGxlZ2FjeVJlcyA9IGF3YWl0IGZldGNoKCdodHRwOi8vMTI3LjAuMC4xOjM5MzkvYXBpL3Nlc3Npb25zJywge1xuICAgICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGlmIChsZWdhY3lSZXMub2spIHtcbiAgICAgICAgICBjb25zdCBsZWdhY3lEYXRhID0gYXdhaXQgbGVnYWN5UmVzLmpzb24oKSBhcyB7IHNlc3Npb25zOiBTZXNzaW9uSW5mb1tdIH07XG4gICAgICAgICAgY29uc3QgbG9jYWxJZHMgPSBuZXcgU2V0KGxvY2FsU2Vzc2lvbnMubWFwKHMgPT4gcy5zZXNzaW9uSWQpKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGxzIG9mIChsZWdhY3lEYXRhLnNlc3Npb25zIHx8IFtdKSkge1xuICAgICAgICAgICAgaWYgKCFsb2NhbElkcy5oYXMobHMuc2Vzc2lvbklkKSAmJiBscy5zdGF0dXMgPT09ICdhY3RpdmUnKSB7XG4gICAgICAgICAgICAgIGxvY2FsU2Vzc2lvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgLi4ubHMsXG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAga2luZDogbHMua2luZCB8fCAnbWNwJyxcbiAgICAgICAgICAgICAgICBzZXJ2ZXJWZXJzaW9uOiBub3JtYWxpemVTZXJ2ZXJWZXJzaW9uKGxzLnNlcnZlclZlcnNpb24pLFxuICAgICAgICAgICAgICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IG5vcm1hbGl6ZUNvbnNvbGVQcm90b2NvbFZlcnNpb24obHMuY29uc29sZVByb3RvY29sVmVyc2lvbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIExlZ2FjeSBpbnN0YW5jZSBub3QgcnVubmluZyBvciB1bnJlYWNoYWJsZSDigJQgdGhhdCdzIGZpbmVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXMuanNvbih7IHNlc3Npb25zOiBsb2NhbFNlc3Npb25zIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL3Nlc3Npb25zLzpzZXNzaW9uSWQva2lsbCDigJQgVGVybWluYXRlIGEgc2Vzc2lvbidzIHNlcnZlciBwcm9jZXNzLlxuICAgKi9cbiAgcm91dGVyLnBvc3QoJy9hcGkvc2Vzc2lvbnMvOnNlc3Npb25JZC9raWxsJywgYXN5bmMgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IHJlcS5wYXJhbXNbJ3Nlc3Npb25JZCddIGFzIHN0cmluZztcbiAgICBjb25zdCBzZXNzaW9uID0gc2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk7XG5cbiAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgIC8vIFNlc3Npb24gbm90IGluIGxvY2FsIE1hcCDigJQgdHJ5IHByb3h5aW5nIGtpbGwgdG8gbGVnYWN5IHBvcnQgKCMxODcwKVxuICAgICAgY29uc3QgY3VycmVudFBvcnQgPSBlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFX1BPUlQgPz8gNDE3MTU7XG4gICAgICBpZiAoY3VycmVudFBvcnQgIT09IDM5MzkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgTEVHQUNZX0ZFVENIX1RJTUVPVVRfTVMpO1xuICAgICAgICAgIGNvbnN0IHByb3h5UmVzID0gYXdhaXQgZmV0Y2goYGh0dHA6Ly8xMjcuMC4wLjE6MzkzOS9hcGkvc2Vzc2lvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoc2Vzc2lvbklkKX0va2lsbGAsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgaWYgKHByb3h5UmVzLm9rKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcHJveHlSZXMuanNvbigpO1xuICAgICAgICAgICAgcmVzLmpzb24oZGF0YSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBMZWdhY3kgaW5zdGFuY2Ugbm90IHJ1bm5pbmcg4oCUIGZhbGwgdGhyb3VnaCB0byA0MDRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nZ2VyLndhcm4oJ1tJbmdlc3RSb3V0ZXNdIEtpbGwgcmVxdWVzdGVkIGZvciB1bmtub3duIHNlc3Npb24nLCB7IHNlc3Npb25JZCB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDA0KS5qc29uKHsgZXJyb3I6ICdTZXNzaW9uIG5vdCBmb3VuZCcsIHNlc3Npb25JZCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXNlc3Npb24ucGlkKSB7XG4gICAgICAvLyBBdXRvLXJlZ2lzdGVyZWQgb3JwaGFuIHdpdGggdW5rbm93biBQSUQg4oCUIHF1ZXVlIGZvciBkZWZlcnJlZCBraWxsICgjMTg3MCkuXG4gICAgICAvLyBUaGUgbmV4dCBoZWFydGJlYXQgKGV2ZXJ5IH4xMHMpIGNhcnJpZXMgdGhlIFBJRC4gZW5zdXJlU2Vzc2lvbigpIHdpbGxcbiAgICAgIC8vIFNJR1RFUk0gdGhlIHByb2Nlc3MgYXMgc29vbiBhcyB0aGUgUElEIGFycml2ZXMuIFNlc3Npb24gaXMgZ29uZSBmb3IgZ29vZC5cbiAgICAgIHNlc3Npb24uc3RhdHVzID0gJ2VuZGVkJztcbiAgICAgIG5hbWVQb29sLnJlbGVhc2Uoc2Vzc2lvbklkKTtcbiAgICAgIHBlbmRpbmdLaWxscy5hZGQoc2Vzc2lvbklkKTtcbiAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBRdWV1ZWQgZGVmZXJyZWQga2lsbCDigJQgd2FpdGluZyBmb3IgUElEIHZpYSBoZWFydGJlYXQnLCB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiBzZXNzaW9uLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsXG4gICAgICB9KTtcbiAgICAgIHJlcy5qc29uKHsgb2s6IHRydWUsIGRpc21pc3NlZDogc2Vzc2lvbi5kaXNwbGF5TmFtZSwgcmVhc29uOiAncGVuZGluZy1raWxsJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTSUdURVJNIHRoZSBwcm9jZXNzLiBFdmVuIGlmIGl0IGZhaWxzIChFU1JDSCA9IGFscmVhZHkgZGVhZCwgRVBFUk0gPSBub3Qgb3VycyksXG4gICAgLy8gbWFyayB0aGUgc2Vzc2lvbiBhcyBwZXJtYW5lbnRseSBraWxsZWQgc28gaXQgbmV2ZXIgcmVhcHBlYXJzICgjMTg3MCkuXG4gICAgdHJ5IHtcbiAgICAgIHByb2Nlc3Mua2lsbChzZXNzaW9uLnBpZCwgJ1NJR1RFUk0nKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSAoZXJyIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZTtcbiAgICAgIGlmIChjb2RlID09PSAnRVNSQ0gnKSB7XG4gICAgICAgIC8vIFByb2Nlc3MgYWxyZWFkeSBkZWFkIOKAlCB0cmVhdCBhcyBzdWNjZXNzZnVsIGtpbGwuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1tJbmdlc3RSb3V0ZXNdIEZhaWxlZCB0byBraWxsIHNlc3Npb24nLCB7XG4gICAgICAgICAgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHNlc3Npb25JZCwgcGlkOiBzZXNzaW9uLnBpZCwgZXJyb3I6IChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiAnRmFpbGVkIHRvIGtpbGwgc2Vzc2lvbicsIHNlc3Npb25JZCwgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHBpZDogc2Vzc2lvbi5waWQsIGRldGFpbDogKGVyciBhcyBFcnJvcikubWVzc2FnZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBzZXNzaW9uLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgbmFtZVBvb2wucmVsZWFzZShzZXNzaW9uSWQpO1xuICAgIGtpbGxlZFNlc3Npb25zLmFkZChzZXNzaW9uSWQpO1xuICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBTZXNzaW9uIGtpbGxlZCcsIHtcbiAgICAgIGRpc3BsYXlOYW1lOiBzZXNzaW9uLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZDogc2Vzc2lvbi5waWQsXG4gICAgICBhY3RpdmVTZXNzaW9uczogQXJyYXkuZnJvbShzZXNzaW9ucy52YWx1ZXMoKSkuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09ICdhY3RpdmUnKS5sZW5ndGggLSAxLFxuICAgIH0pO1xuICAgIHJlcy5qc29uKHsgb2s6IHRydWUsIGtpbGxlZDogc2Vzc2lvbi5kaXNwbGF5TmFtZSwgcGlkOiBzZXNzaW9uLnBpZCB9KTtcbiAgfSk7XG5cbiAgLyoqIE1hcmsgc3RhbGUgYWN0aXZlIHNlc3Npb25zIGFzIGVuZGVkLiAqL1xuICBmdW5jdGlvbiByZWFwU3RhbGVTZXNzaW9ucyhub3c6IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2lkLCBzZXNzaW9uXSBvZiBzZXNzaW9ucykge1xuICAgICAgaWYgKHNlc3Npb24uc3RhdHVzICE9PSAnYWN0aXZlJykgY29udGludWU7XG4gICAgICBpZiAoc2Vzc2lvbi5pc0xlYWRlciB8fCBzZXNzaW9uLmtpbmQgPT09ICdjb25zb2xlJykgY29udGludWU7XG4gICAgICBjb25zdCBhZ2UgPSBub3cgLSBuZXcgRGF0ZShzZXNzaW9uLmxhc3RIZWFydGJlYXQpLmdldFRpbWUoKTtcbiAgICAgIGlmIChhZ2UgPD0gU0VTU0lPTl9TVEFMRV9NUykgY29udGludWU7XG4gICAgICBzZXNzaW9uLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgICBuYW1lUG9vbC5yZWxlYXNlKGlkKTtcbiAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBSZWFwZWQgc3RhbGUgc2Vzc2lvbicsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHNlc3Npb25JZDogaWQsIHBpZDogc2Vzc2lvbi5waWQsXG4gICAgICAgIGxhc3RIZWFydGJlYXRBZ286IGAke01hdGgucm91bmQoYWdlIC8gMTAwMCl9c2AsXG4gICAgICAgIGFjdGl2ZVNlc3Npb25zOiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpLmxlbmd0aCAtIDEsXG4gICAgICB9KTtcbiAgICAgIGJyb2FkY2FzdHMuc2Vzc2lvbkJyb2FkY2FzdD8uKHNlc3Npb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBEZWxldGUgZW5kZWQgc2Vzc2lvbnMgdG8gYm91bmQgbWVtb3J5ICgjMTg3MCkuICovXG4gIGZ1bmN0aW9uIHB1cmdlU3RhbGVFbnRyaWVzKG5vdzogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbaWQsIHNlc3Npb25dIG9mIHNlc3Npb25zKSB7XG4gICAgICBpZiAoc2Vzc2lvbi5zdGF0dXMgPT09ICdlbmRlZCcgJiYgbm93IC0gbmV3IERhdGUoc2Vzc2lvbi5sYXN0SGVhcnRiZWF0KS5nZXRUaW1lKCkgPiBFTkRFRF9QVVJHRV9NUykge1xuICAgICAgICBzZXNzaW9ucy5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlYXBlckludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgcmVhcFN0YWxlU2Vzc2lvbnMobm93KTtcbiAgICBwdXJnZVN0YWxlRW50cmllcyhub3cpO1xuICB9LCBSRUFQRVJfSU5URVJWQUxfTVMpO1xuICByZWFwZXJJbnRlcnZhbC51bnJlZigpO1xuXG4gIGZ1bmN0aW9uIGdldFNlc3Npb25zKCk6IFNlc3Npb25JbmZvW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJMZWFkZXJTZXNzaW9uKHNlc3Npb25JZDogc3RyaW5nLCBwaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gbmFtZVBvb2wuYXNzaWduKHNlc3Npb25JZCwgdHJ1ZSk7XG4gICAgY29uc3QgY29sb3IgPSBuYW1lUG9vbC5nZXRDb2xvcihzZXNzaW9uSWQpID8/ICcjM2I4MmY2JztcbiAgICBzZXNzaW9ucy5zZXQoc2Vzc2lvbklkLCB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICAgIGNvbG9yLFxuICAgICAgcGlkLFxuICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYXN0SGVhcnRiZWF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBzdGF0dXM6ICdhY3RpdmUnLFxuICAgICAgaXNMZWFkZXI6IHRydWUsXG4gICAgICBhdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgICAga2luZDogJ21jcCcsXG4gICAgICBzZXJ2ZXJWZXJzaW9uOiBQQUNLQUdFX1ZFUlNJT04sXG4gICAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uOiBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gICAgfSk7XG4gICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIExlYWRlciBzZXNzaW9uIHJlZ2lzdGVyZWQnLCB7IGRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsIHBpZCwgY29sb3IgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdGhlIHdlYiBjb25zb2xlIGl0c2VsZiBhcyBhIHNlc3Npb24gKCMxODA1KS4gRW5zdXJlcyB0aGVcbiAgICogc2Vzc2lvbiBpbmRpY2F0b3IgYWx3YXlzIHNob3dzIGF0IGxlYXN0IG9uZSBlbnRyeSDigJQgdGhlIGNvbnNvbGUgdGhlXG4gICAqIHVzZXIgaXMgY3VycmVudGx5IGxvb2tpbmcgYXQuXG4gICAqL1xuICBmdW5jdGlvbiByZWdpc3RlckNvbnNvbGVTZXNzaW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnNvbGVJZCA9IGBjb25zb2xlLSR7cHJvY2Vzcy5waWR9YDtcbiAgICBpZiAoc2Vzc2lvbnMuaGFzKGNvbnNvbGVJZCkpIHJldHVybjtcbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9ICdXZWIgQ29uc29sZSc7XG4gICAgc2Vzc2lvbnMuc2V0KGNvbnNvbGVJZCwge1xuICAgICAgc2Vzc2lvbklkOiBjb25zb2xlSWQsXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICAgIGNvbG9yOiAnIzYzNjZmMScsIC8vIGluZGlnbyDigJQgZGlzdGluY3QgZnJvbSBwdXBwZXQgZ3JlZW5zL2JsdWVzXG4gICAgICBwaWQ6IHByb2Nlc3MucGlkLFxuICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYXN0SGVhcnRiZWF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBzdGF0dXM6ICdhY3RpdmUnLFxuICAgICAgaXNMZWFkZXI6IGZhbHNlLFxuICAgICAgYXV0aGVudGljYXRlZDogdHJ1ZSxcbiAgICAgIGtpbmQ6ICdjb25zb2xlJyxcbiAgICAgIHNlcnZlclZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTixcbiAgICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gQ29uc29sZSBzZXNzaW9uIHJlZ2lzdGVyZWQnLCB7IHNlc3Npb25JZDogY29uc29sZUlkLCBwaWQ6IHByb2Nlc3MucGlkIH0pO1xuICB9XG5cbiAgcmV0dXJuIHsgcm91dGVyLCBnZXRTZXNzaW9ucywgcmVnaXN0ZXJMZWFkZXJTZXNzaW9uLCByZWdpc3RlckNvbnNvbGVTZXNzaW9uIH07XG59XG4iXX0=
529
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5nZXN0Um91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dlYi9jb25zb2xlL0luZ2VzdFJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUkxQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUNMLHdCQUF3QixFQUN4QiwrQkFBK0IsR0FDaEMsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixrREFBa0Q7QUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFFL0IscURBQXFEO0FBQ3JELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQztBQUM1QixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztBQUVwQyxpREFBaUQ7QUFDakQsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFFakMsNkVBQTZFO0FBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0FBQ2hDLE1BQU0sa0NBQWtDLEdBQUcsTUFBTSxDQUFDO0FBRWxELDZEQUE2RDtBQUM3RCxNQUFNLHVCQUF1QixHQUFHLEtBQUssQ0FBQztBQUV0QyxrRUFBa0U7QUFDbEUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLFlBQVk7QUFzRi9DLDZEQUE2RDtBQUM3RCxTQUFTLGNBQWMsQ0FBQyxDQUFTO0lBQy9CLE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO0FBQ3pELENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLE9BQWdCO0lBQzlDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDN0QsT0FBTyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLCtCQUErQixDQUFDLE9BQWdCO0lBQ3ZELElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzdFLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxPQUFPLCtCQUErQixDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxVQUE0QjtJQUM3RCxNQUFNLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQztJQUN4QixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQztJQUNoRCxNQUFNLFFBQVEsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQ3ZDLE1BQU0sV0FBVyxHQUFHLElBQUksd0JBQXdCLENBQUMsY0FBYyxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFFdkYsaUVBQWlFO0lBQ2pFLG1GQUFtRjtJQUNuRixNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBRXpDLDZEQUE2RDtJQUM3RCw2RUFBNkU7SUFDN0UsbUZBQW1GO0lBQ25GLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDdkMsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUU1RCxvREFBb0Q7SUFDcEQsU0FBUyxxQkFBcUIsQ0FBQyxTQUFpQixFQUFFLEdBQVk7UUFDNUQsTUFBTSxPQUFPLEdBQUcsR0FBRyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ3BELElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUNyQixJQUFJLENBQUM7WUFBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsSUFBSSxRQUFRO1lBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7UUFDeEMsTUFBTSxDQUFDLElBQUksQ0FBQyxxREFBcUQsRUFBRTtZQUNqRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU87U0FDNUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxTQUFTLG1CQUFtQixDQUFDLFNBQWlCLEVBQUUsR0FBWTtRQUMxRCxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQixjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsU0FBUyxZQUFZLENBQ25CLFNBQWlCLEVBQ2pCLEdBQVksRUFDWixhQUFhLEdBQUcsS0FBSyxFQUNyQixhQUFzQixFQUN0QixzQkFBK0I7UUFFL0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMvQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztZQUN4RCxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxHQUFnQjtnQkFDeEIsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLO2dCQUM3QixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBQ2IsU0FBUyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsR0FBRztnQkFDbEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSztnQkFDN0QsYUFBYSxFQUFFLHNCQUFzQixDQUFDLGFBQWEsQ0FBQztnQkFDcEQsc0JBQXNCLEVBQUUsK0JBQStCLENBQUMsc0JBQXNCLENBQUM7YUFDaEYsQ0FBQztZQUNGLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaURBQWlELEVBQUU7Z0JBQzdELFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXO2FBQ2hFLENBQUMsQ0FBQztZQUNILFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixNQUFNLENBQUMsS0FBSyxDQUFDLHlEQUF5RCxFQUFFO2dCQUN0RSxTQUFTLEVBQUUsS0FBSyxFQUFHLEdBQWEsQ0FBQyxPQUFPO2FBQ3pDLENBQUMsQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLGFBQWEsQ0FDcEIsU0FBaUIsRUFDakIsR0FBWSxFQUNaLGFBQWEsR0FBRyxLQUFLLEVBQ3JCLGFBQXNCLEVBQ3RCLHNCQUErQjtRQUUvQixJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDL0MsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDaEMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTyxZQUFZLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUVELHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDaEMsUUFBUSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7WUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyx5REFBeUQsRUFBRTtnQkFDckUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsU0FBUzthQUM3QyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsUUFBUSxDQUFDLGFBQWEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xELElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLFFBQVEsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsbURBQW1ELEVBQUU7Z0JBQy9ELFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHO2FBQ2xELENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLFFBQVEsQ0FBQyxhQUFhLEdBQUcsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUNELElBQUksc0JBQXNCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekMsUUFBUSxDQUFDLHNCQUFzQixHQUFHLCtCQUErQixDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXREOztPQUVHO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEdBQVksRUFBRSxHQUFhLEVBQUUsRUFBRTtRQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDOUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQXdCLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzNELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxJQUFJLENBQUMsb0NBQW9DLEVBQUUsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakosR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDakcsT0FBTztRQUNULENBQUM7UUFDRCxPQUFPLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdEQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUFDLFNBQVM7WUFBQyxDQUFDO1lBQ3pFLE1BQU0sT0FBTyxHQUFvQjtnQkFDL0IsR0FBRyxLQUFLO2dCQUNSLElBQUksRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRTthQUN2RCxDQUFDO1lBQ0YsVUFBVSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqQyxLQUFLLEVBQUUsQ0FBQztRQUNWLENBQUM7UUFFRCw0RUFBNEU7UUFDNUUsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVqRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxPQUFPLEVBQUUsV0FBVyxJQUFJLE9BQU8sQ0FBQyxTQUFTLGNBQWMsS0FBSyxhQUFhLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDckksQ0FBQztRQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUMsQ0FBQyxDQUFDO0lBRUg7O09BRUc7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsR0FBWSxFQUFFLEdBQWEsRUFBRSxFQUFFO1FBQ2pFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUM5QixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7WUFDdkQsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBNEIsQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM3QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxNQUFNLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNwRSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNsRyxPQUFPO1FBQ1QsQ0FBQztRQUNELE9BQU8sQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV0RCxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2pDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDcEMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFFRCw0RUFBNEU7UUFDNUUsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxPQUFPLEVBQUUsV0FBVyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2xHLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFFSDs7T0FFRztJQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFZLEVBQUUsR0FBYSxFQUFFLEVBQUU7UUFDakUsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQTJCLENBQUM7UUFDaEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckQsTUFBTSxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDMUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDL0YsT0FBTztRQUNULENBQUM7UUFDRCxPQUFPLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVyQyxRQUFRLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsaUVBQWlFO2dCQUNqRSxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztvQkFBRSxNQUFNO2dCQUNqRCxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQUMsTUFBTTtnQkFBQyxDQUFDO2dCQUV4RyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDdkQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDO2dCQUNoRSxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUUsR0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDakUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO29CQUM5QixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSztvQkFDaEQsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUksR0FBRyxFQUFFLGFBQWEsRUFBRSxHQUFHO29CQUN6RSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsS0FBSztvQkFDOUUsYUFBYSxFQUFFLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7b0JBQzVELHNCQUFzQixFQUFFLCtCQUErQixDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztpQkFDeEYsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEVBQUU7b0JBQy9DLFdBQVcsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLO29CQUNsRSxjQUFjLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLE1BQU07aUJBQ3hGLENBQUMsQ0FBQztnQkFDSCxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUUsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDZixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDakQsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDYixRQUFRLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztvQkFDMUIsUUFBUSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUM7b0JBQzdCLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNwQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxFQUFFO3dCQUM1QyxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUc7d0JBQ2xGLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7cUJBQzVGLENBQUMsQ0FBQztvQkFDSCxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUMsQ0FBQztnQkFDRCxNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDakIsd0VBQXdFO2dCQUN4RSxhQUFhLENBQ1gsT0FBTyxDQUFDLFNBQVMsRUFDakIsT0FBTyxDQUFDLEdBQUcsRUFDWCxLQUFLLEVBQ0wsT0FBTyxDQUFDLGFBQWEsRUFDckIsT0FBTyxDQUFDLHNCQUFzQixDQUMvQixDQUFDO2dCQUNGLE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztRQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDLENBQUM7SUFFSDs7T0FFRztJQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxJQUFhLEVBQUUsR0FBYSxFQUFFLEVBQUU7UUFDakUsNEVBQTRFO1FBQzVFLDBEQUEwRDtRQUMxRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDdkYsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLDBCQUEwQixJQUFJLEtBQUssQ0FBQztRQUU1RCxtRUFBbUU7UUFDbkUsa0VBQWtFO1FBQ2xFLHFEQUFxRDtRQUNyRCxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO2dCQUM5RSxNQUFNLFNBQVMsR0FBRyxNQUFNLEtBQUssQ0FBQyxvQ0FBb0MsRUFBRTtvQkFDbEUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO2lCQUMxQixDQUFDLENBQUM7Z0JBQ0gsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN0QixJQUFJLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxVQUFVLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxFQUFpQyxDQUFDO29CQUN6RSxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQzlELEtBQUssTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7d0JBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDOzRCQUMxRCxhQUFhLENBQUMsSUFBSSxDQUFDO2dDQUNqQixHQUFHLEVBQUU7Z0NBQ0wsYUFBYSxFQUFFLEtBQUs7Z0NBQ3BCLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLEtBQUs7Z0NBQ3RCLGFBQWEsRUFBRSxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO2dDQUN2RCxzQkFBc0IsRUFBRSwrQkFBK0IsQ0FBQyxFQUFFLENBQUMsc0JBQXNCLENBQUM7NkJBQ25GLENBQUMsQ0FBQzt3QkFDTCxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsMkRBQTJEO1lBQzdELENBQUM7UUFDSCxDQUFDO1FBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBRUg7O09BRUc7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFLEtBQUssRUFBRSxHQUFZLEVBQUUsR0FBYSxFQUFFLEVBQUU7UUFDakYsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQVcsQ0FBQztRQUNwRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLHNFQUFzRTtZQUN0RSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsMEJBQTBCLElBQUksS0FBSyxDQUFDO1lBQzVELElBQUksV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUM7b0JBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDekMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO29CQUM5RSxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxzQ0FBc0Msa0JBQWtCLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTt3QkFDdkcsTUFBTSxFQUFFLE1BQU07d0JBQ2QsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO3FCQUMxQixDQUFDLENBQUM7b0JBQ0gsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN0QixJQUFJLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQzt3QkFDaEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ25DLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ2YsT0FBTztvQkFDVCxDQUFDO2dCQUNILENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLG9EQUFvRDtnQkFDdEQsQ0FBQztZQUNILENBQUM7WUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLG1EQUFtRCxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNoRixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNqQiw2RUFBNkU7WUFDN0Usd0VBQXdFO1lBQ3hFLDRFQUE0RTtZQUM1RSxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztZQUN6QixRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVCLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxxRUFBcUUsRUFBRTtnQkFDakYsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUzthQUM1QyxDQUFDLENBQUM7WUFDSCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUMvRSxPQUFPO1FBQ1QsQ0FBQztRQUVELGtGQUFrRjtRQUNsRix3RUFBd0U7UUFDeEUsSUFBSSxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEdBQUksR0FBNkIsQ0FBQyxJQUFJLENBQUM7WUFDakQsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ3JCLG1EQUFtRDtZQUNyRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRTtvQkFDcEQsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRyxHQUFhLENBQUMsT0FBTztpQkFDN0YsQ0FBQyxDQUFDO2dCQUNILEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUcsR0FBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3pKLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFO1lBQzNDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDN0QsY0FBYyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztTQUM1RixDQUFDLENBQUM7UUFDSCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFFSCwyQ0FBMkM7SUFDM0MsU0FBUyxpQkFBaUIsQ0FBQyxHQUFXO1FBQ3BDLEtBQUssTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNyQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssUUFBUTtnQkFBRSxTQUFTO1lBQzFDLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFNBQVM7Z0JBQUUsU0FBUztZQUM3RCxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVELE1BQU0sVUFBVSxHQUFHLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUQsSUFBSSxVQUFVLEdBQUcsR0FBRztnQkFBRSxTQUFTO1lBQy9CLElBQUksVUFBVSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNyQix5QkFBeUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUNELElBQUksR0FBRyxJQUFJLGdCQUFnQjtnQkFBRSxTQUFTO1lBQ3RDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO1lBQ3pCLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsRUFBRTtnQkFDakQsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7Z0JBQ2pFLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUc7Z0JBQzlDLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7YUFDNUYsQ0FBQyxDQUFDO1lBQ0gsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRCxxREFBcUQ7SUFDckQsU0FBUyxpQkFBaUIsQ0FBQyxHQUFXO1FBQ3BDLEtBQUssTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNyQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssT0FBTyxJQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUM7Z0JBQ25HLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ3RDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN2QixjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFdkIsU0FBUyxXQUFXO1FBQ2xCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxTQUFTLGNBQWMsQ0FBQyxnQkFBK0I7UUFDckQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssTUFBTSxRQUFRLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssUUFBUTtnQkFBRSxTQUFTO1lBQzNDLElBQUksUUFBUSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFNBQVM7Z0JBQUUsU0FBUztZQUMvRCxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQkFBRSxTQUFTO1lBRTdGLE1BQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMvRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDbkQsSUFBSSxRQUFRLEVBQUUsUUFBUSxJQUFJLFFBQVEsRUFBRSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3ZELFNBQVM7WUFDWCxDQUFDO1lBRUQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVc7Z0JBQ3RDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUM7Z0JBQzNELENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDekMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLElBQUksU0FBUyxDQUFDO1lBQ3BGLE1BQU0sTUFBTSxHQUFnQjtnQkFDMUIsU0FBUyxFQUFFLG1CQUFtQjtnQkFDOUIsV0FBVztnQkFDWCxLQUFLO2dCQUNMLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxJQUFJLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQztnQkFDdkMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTLElBQUksUUFBUSxFQUFFLFNBQVMsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUU7Z0JBQ25GLGFBQWEsRUFBRSxRQUFRLENBQUMsYUFBYSxJQUFJLFFBQVEsRUFBRSxhQUFhLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFO2dCQUMvRixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhLElBQUksUUFBUSxFQUFFLGFBQWEsSUFBSSxLQUFLO2dCQUN6RSxJQUFJLEVBQUUsS0FBSztnQkFDWCxhQUFhLEVBQUUsc0JBQXNCLENBQUMsUUFBUSxDQUFDLGFBQWEsSUFBSSxRQUFRLEVBQUUsYUFBYSxDQUFDO2dCQUN4RixzQkFBc0IsRUFBRSwrQkFBK0IsQ0FDckQsUUFBUSxDQUFDLHNCQUFzQixJQUFJLFFBQVEsRUFBRSxzQkFBc0IsQ0FDcEU7YUFDRixDQUFDO1lBRUYsUUFBUSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxHQUFHLGtDQUFrQyxDQUFDLENBQUM7WUFDN0YsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLHFCQUFxQixDQUFDLFNBQWlCLEVBQUUsR0FBVztRQUMzRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUN4RCxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRTtZQUN0QixTQUFTO1lBQ1QsV0FBVztZQUNYLEtBQUs7WUFDTCxHQUFHO1lBQ0gsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ25DLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUN2QyxNQUFNLEVBQUUsUUFBUTtZQUNoQixRQUFRLEVBQUUsSUFBSTtZQUNkLGFBQWEsRUFBRSxJQUFJO1lBQ25CLElBQUksRUFBRSxLQUFLO1lBQ1gsYUFBYSxFQUFFLGVBQWU7WUFDOUIsc0JBQXNCLEVBQUUsd0JBQXdCO1NBQ2pELENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsMENBQTBDLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxzQkFBc0I7UUFDN0IsTUFBTSxTQUFTLEdBQUcsV0FBVyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0MsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztZQUFFLE9BQU87UUFDcEMsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDO1FBQ2xDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFO1lBQ3RCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFdBQVc7WUFDWCxLQUFLLEVBQUUsU0FBUyxFQUFFLDZDQUE2QztZQUMvRCxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDaEIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ25DLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUN2QyxNQUFNLEVBQUUsUUFBUTtZQUNoQixRQUFRLEVBQUUsS0FBSztZQUNmLGFBQWEsRUFBRSxJQUFJO1lBQ25CLElBQUksRUFBRSxTQUFTO1lBQ2YsYUFBYSxFQUFFLGVBQWU7WUFDOUIsc0JBQXNCLEVBQUUsd0JBQXdCO1NBQ2pELENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN2RyxDQUFDO0lBRUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLENBQUM7QUFDaEcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnQgaW5nZXN0aW9uIHJvdXRlcyBmb3IgdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUuXG4gKlxuICogVGhlIGNvbnNvbGUgbGVhZGVyIG1vdW50cyB0aGVzZSByb3V0ZXMgc28gZm9sbG93ZXIgTUNQIHNlcnZlcnMgY2FuXG4gKiBmb3J3YXJkIHRoZWlyIGxvZ3MsIG1ldHJpY3MsIGFuZCBzZXNzaW9uIGxpZmVjeWNsZSBldmVudHMuIEFsbCBpbmdlc3RlZFxuICogZW50cmllcyBhcmUgc3RhbXBlZCB3aXRoIGBfc2Vzc2lvbklkYCBpbiB0aGVpciBkYXRhIGZpZWxkIGFuZCB0aGVuXG4gKiBicm9hZGNhc3QgdG8gU1NFIGNsaWVudHMgdmlhIHRoZSBleGlzdGluZyBsb2cvbWV0cmljcyBicm9hZGNhc3QgaG9va3MuXG4gKlxuICogUm91dGVzOlxuICogLSBQT1NUIC9hcGkvaW5nZXN0L2xvZ3MgICAgIOKAlCBCYXRjaGVkIGxvZyBlbnRyaWVzIGZyb20gYSBmb2xsb3dlclxuICogLSBQT1NUIC9hcGkvaW5nZXN0L21ldHJpY3MgIOKAlCBNZXRyaWMgc25hcHNob3RzIGZyb20gYSBmb2xsb3dlclxuICogLSBQT1NUIC9hcGkvaW5nZXN0L3Nlc3Npb24gIOKAlCBTZXNzaW9uIGxpZmVjeWNsZSBldmVudHMgKHN0YXJ0ZWQvc3RvcHBlZC9oZWFydGJlYXQpXG4gKiAtIEdFVCAgL2FwaS9zZXNzaW9ucyAgICAgICAg4oCUIEFjdGl2ZSBzZXNzaW9uIGxpc3QgZm9yIHRoZSBVSVxuICpcbiAqIEBzaW5jZSB2Mi4xLjAg4oCUIElzc3VlICMxNzAwXG4gKi9cblxuaW1wb3J0IGV4cHJlc3MsIHsgUm91dGVyIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdHlwZSB7IFVuaWZpZWRMb2dFbnRyeSB9IGZyb20gJy4uLy4uL2xvZ2dpbmcvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZXRyaWNTbmFwc2hvdCB9IGZyb20gJy4uLy4uL21ldHJpY3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2Vzc2lvbk5hbWVQb29sIH0gZnJvbSAnLi9TZXNzaW9uTmFtZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuaW1wb3J0IHsgUEFDS0FHRV9WRVJTSU9OIH0gZnJvbSAnLi4vLi4vZ2VuZXJhdGVkL3ZlcnNpb24uanMnO1xuaW1wb3J0IHtcbiAgQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICBMRUdBQ1lfQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxufSBmcm9tICcuL0xlYWRlckVsZWN0aW9uLmpzJztcblxuLyoqIE1heGltdW0gcGF5bG9hZCBzaXplIGZvciBpbmdlc3Rpb24gcmVxdWVzdHMgKi9cbmNvbnN0IE1BWF9QQVlMT0FEX1NJWkUgPSAnMW1iJztcblxuLyoqIFJhdGUgbGltaXQ6IG1heCByZXF1ZXN0cyBwZXIgd2luZG93IHBlciBzb3VyY2UgKi9cbmNvbnN0IFJBVEVfTElNSVRfTUFYID0gMTAwMDtcbmNvbnN0IFJBVEVfTElNSVRfV0lORE9XX01TID0gNjBfMDAwO1xuXG4vKiogSG93IG9mdGVuIHRvIGNoZWNrIGZvciBzdGFsZSBzZXNzaW9ucyAobXMpICovXG5jb25zdCBSRUFQRVJfSU5URVJWQUxfTVMgPSA1XzAwMDtcblxuLyoqIEhvdyBsb25nIHNpbmNlIGxhc3QgaGVhcnRiZWF0IGJlZm9yZSBhIHNlc3Npb24gaXMgY29uc2lkZXJlZCBkZWFkIChtcykgKi9cbmNvbnN0IFNFU1NJT05fU1RBTEVfTVMgPSAxNV8wMDA7XG5jb25zdCBUQUtFT1ZFUl9JTVBPUlRFRF9TRVNTSU9OX0dSQUNFX01TID0gNjBfMDAwO1xuXG4vKiogVGltZW91dCBmb3IgbGVnYWN5IHBvcnQgZmVkZXJhdGlvbi9wcm94eSByZXF1ZXN0cyAobXMpICovXG5jb25zdCBMRUdBQ1lfRkVUQ0hfVElNRU9VVF9NUyA9IDJfMDAwO1xuXG4vKiogSG93IGxvbmcgYmVmb3JlIGVuZGVkIHNlc3Npb25zIGFyZSBwdXJnZWQgZnJvbSB0aGUgTWFwIChtcykgKi9cbmNvbnN0IEVOREVEX1BVUkdFX01TID0gNSAqIDYwXzAwMDsgLy8gNSBtaW51dGVzXG5cbi8qKlxuICogVHJhY2tlZCBzZXNzaW9uIGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25JbmZvIHtcbiAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIHNlc3Npb24gKFVVSUQgb3IgYGNvbnNvbGUtPHBpZD5gKS4gKi9cbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIC8qKiBGcmllbmRseSBwdXBwZXQgbmFtZSAoZS5nLiwgXCJLZXJtaXRcIiwgXCJQdW5jaFwiKSBvciBcIldlYiBDb25zb2xlXCIuICovXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIC8qKiBDYW5vbmljYWwgaGV4IGNvbG9yIGZvciB0aGlzIHB1cHBldCBjaGFyYWN0ZXIuICovXG4gIGNvbG9yOiBzdHJpbmc7XG4gIC8qKiBPUyBwcm9jZXNzIElEIG9mIHRoZSBNQ1Agc2VydmVyIG9yIHdlYiBjb25zb2xlIHByb2Nlc3MuICovXG4gIHBpZDogbnVtYmVyO1xuICAvKiogSVNPIHRpbWVzdGFtcCB3aGVuIHRoZSBzZXNzaW9uIHN0YXJ0ZWQuICovXG4gIHN0YXJ0ZWRBdDogc3RyaW5nO1xuICAvKiogSVNPIHRpbWVzdGFtcCBvZiB0aGUgbW9zdCByZWNlbnQgaGVhcnRiZWF0IChmb2xsb3dlcnMpIG9yIHJlZ2lzdHJhdGlvbiAobGVhZGVyL2NvbnNvbGUpLiAqL1xuICBsYXN0SGVhcnRiZWF0OiBzdHJpbmc7XG4gIC8qKiBMaWZlY3ljbGUgc3RhdHVzIOKAlCAnYWN0aXZlJyB1bnRpbCBlbmRlZCBvciByZWFwZWQgZm9yIHN0YWxlbmVzcy4gKi9cbiAgc3RhdHVzOiAnYWN0aXZlJyB8ICdlbmRlZCc7XG4gIC8qKiBUcnVlIGlmIHRoaXMgc2Vzc2lvbiB3b24gbGVhZGVyIGVsZWN0aW9uIGFuZCBvd25zIHRoZSB0b2tlbiBmaWxlLiAqL1xuICBpc0xlYWRlcjogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhpcyBzZXNzaW9uIGNvbm5lY3RlZCB3aXRoIGEgdmFsaWQgQmVhcmVyIHRva2VuICgjMTgwNSkuICovXG4gIGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XG4gIC8qKiBTZXNzaW9uIGtpbmQg4oCUICdtY3AnIGZvciBNQ1Agc3RkaW8gc2Vzc2lvbnMsICdjb25zb2xlJyBmb3IgdGhlIHdlYiBjb25zb2xlIGl0c2VsZiAoIzE4MDUpLiAqL1xuICBraW5kOiAnbWNwJyB8ICdjb25zb2xlJztcbiAgLyoqIERvbGxob3VzZU1DUCBwYWNrYWdlIHZlcnNpb24gcmVwb3J0ZWQgYnkgdGhlIHNlc3Npb24uICovXG4gIHNlcnZlclZlcnNpb246IHN0cmluZztcbiAgLyoqIENvbnNvbGUvc2Vzc2lvbiBjb250cmFjdCB2ZXJzaW9uIHVzZWQgZm9yIGNvbXBhdGliaWxpdHktYXdhcmUgdGFrZW92ZXIuICovXG4gIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXlsb2FkIGZvciBQT1NUIC9hcGkvaW5nZXN0L2xvZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmdlc3RMb2dQYXlsb2FkIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGVudHJpZXM6IFVuaWZpZWRMb2dFbnRyeVtdO1xufVxuXG4vKipcbiAqIFBheWxvYWQgZm9yIFBPU1QgL2FwaS9pbmdlc3QvbWV0cmljc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZ2VzdE1ldHJpY3NQYXlsb2FkIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdDtcbn1cblxuLyoqXG4gKiBQYXlsb2FkIGZvciBQT1NUIC9hcGkvaW5nZXN0L3Nlc3Npb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uRXZlbnRQYXlsb2FkIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGV2ZW50OiAnc3RhcnRlZCcgfCAnc3RvcHBlZCcgfCAnaGVhcnRiZWF0JztcbiAgcGlkOiBudW1iZXI7XG4gIHN0YXJ0ZWRBdDogc3RyaW5nO1xuICBzZXJ2ZXJWZXJzaW9uPzogc3RyaW5nO1xuICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENhbGxiYWNrcyBwcm92aWRlZCBieSB0aGUgdW5pZmllZCBjb25zb2xlIG9yY2hlc3RyYXRvciBmb3IgYnJvYWRjYXN0aW5nXG4gKiBpbmdlc3RlZCBldmVudHMgdGhyb3VnaCB0aGUgZXhpc3RpbmcgU1NFIGluZnJhc3RydWN0dXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZ2VzdEJyb2FkY2FzdHMge1xuICBsb2dCcm9hZGNhc3Q6IChlbnRyeTogVW5pZmllZExvZ0VudHJ5KSA9PiB2b2lkO1xuICBtZXRyaWNzT25TbmFwc2hvdD86IChzbmFwc2hvdDogTWV0cmljU25hcHNob3QpID0+IHZvaWQ7XG4gIHN0b3JlTWV0cmljc1NuYXBzaG90PzogKHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdCwgc2Vzc2lvbklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHNlc3Npb25Ccm9hZGNhc3Q/OiAoZXZlbnQ6IFNlc3Npb25JbmZvKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBjcmVhdGluZyBpbmdlc3Qgcm91dGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZ2VzdFJvdXRlc1Jlc3VsdCB7XG4gIHJvdXRlcjogUm91dGVyO1xuICAvKiogR2V0IGFsbCB0cmFja2VkIHNlc3Npb25zICovXG4gIGdldFNlc3Npb25zOiAoKSA9PiBTZXNzaW9uSW5mb1tdO1xuICAvKiogSW1wb3J0IGFjdGl2ZSBmb2xsb3dlciBzZXNzaW9ucyBmcm9tIGEgZGlzcGxhY2VkIGxlYWRlciBkdXJpbmcgdGFrZW92ZXIuICovXG4gIGltcG9ydFNlc3Npb25zOiAoc2Vzc2lvbnM6IFNlc3Npb25JbmZvW10pID0+IHZvaWQ7XG4gIC8qKiBSZWdpc3RlciB0aGUgbGVhZGVyIGFzIGEgc2Vzc2lvbiAqL1xuICByZWdpc3RlckxlYWRlclNlc3Npb246IChzZXNzaW9uSWQ6IHN0cmluZywgcGlkOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBSZWdpc3RlciB0aGUgd2ViIGNvbnNvbGUgYXMgYSBzZXNzaW9uIHNvIHRoZSBpbmRpY2F0b3IgaXMgbmV2ZXIgZW1wdHkgKCMxODA1KSAqL1xuICByZWdpc3RlckNvbnNvbGVTZXNzaW9uOiAoKSA9PiB2b2lkO1xufVxuXG4vKiogTm9ybWFsaXplIGEgc3RyaW5nIHZpYSBVbmljb2RlVmFsaWRhdG9yIChETUNQLVNFQy0wMDQpICovXG5mdW5jdGlvbiBub3JtYWxpemVJbnB1dChzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUocykubm9ybWFsaXplZENvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlcnZlclZlcnNpb24odmVyc2lvbj86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycgJiYgdmVyc2lvbi50cmltKCkubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB2ZXJzaW9uLnRyaW0oKTtcbiAgfVxuICByZXR1cm4gJ3Vua25vd24nO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDb25zb2xlUHJvdG9jb2xWZXJzaW9uKHZlcnNpb24/OiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIodmVyc2lvbikgJiYgdmVyc2lvbiA+PSAwKSB7XG4gICAgcmV0dXJuIHZlcnNpb247XG4gIH1cbiAgcmV0dXJuIExFR0FDWV9DT05TT0xFX1BST1RPQ09MX1ZFUlNJT047XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBpbmdlc3Rpb24gcm91dGVzIGFuZCBzZXNzaW9uIHJlZ2lzdHJ5LlxuICpcbiAqIEBwYXJhbSBicm9hZGNhc3RzIC0gQ2FsbGJhY2tzIHRvIGZvcndhcmQgaW5nZXN0ZWQgZXZlbnRzIHRvIFNTRSBjbGllbnRzXG4gKiBAcmV0dXJucyBSb3V0ZXIgYW5kIHNlc3Npb24gbWFuYWdlbWVudCBmdW5jdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluZ2VzdFJvdXRlcyhicm9hZGNhc3RzOiBJbmdlc3RCcm9hZGNhc3RzKTogSW5nZXN0Um91dGVzUmVzdWx0IHtcbiAgY29uc3Qgcm91dGVyID0gUm91dGVyKCk7XG4gIGNvbnN0IHNlc3Npb25zID0gbmV3IE1hcDxzdHJpbmcsIFNlc3Npb25JbmZvPigpO1xuICBjb25zdCBuYW1lUG9vbCA9IG5ldyBTZXNzaW9uTmFtZVBvb2woKTtcbiAgY29uc3QgcmF0ZUxpbWl0ZXIgPSBuZXcgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyKFJBVEVfTElNSVRfTUFYLCBSQVRFX0xJTUlUX1dJTkRPV19NUyk7XG5cbiAgLy8gU2Vzc2lvbnMgdGhlIHVzZXIgZXhwbGljaXRseSBraWxsZWQg4oCUIG5ldmVyIGNvbWUgYmFjayAoIzE4NzApLlxuICAvLyBDbGVhcmVkIG9ubHkgb24gc2VydmVyIHJlc3RhcnQsIHdoaWNoIGlzIGFwcHJvcHJpYXRlIHNpbmNlIHRoYXQncyBhIG5ldyBjb250ZXh0LlxuICBjb25zdCBraWxsZWRTZXNzaW9ucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIC8vIFNlc3Npb25zIHdhaXRpbmcgZm9yIGEgUElEIHNvIHdlIGNhbiBTSUdURVJNIHRoZW0gKCMxODcwKS5cbiAgLy8gV2hlbiB0aGUgdXNlciBkaXNtaXNzZXMgYSBwaWQ9MCBvcnBoYW4sIHdlIGFkZCBpdCBoZXJlLiBUaGUgbmV4dCBoZWFydGJlYXRcbiAgLy8gKGV2ZXJ5IDEwcykgY2FycmllcyB0aGUgUElEIOKAlCB3ZSBTSUdURVJNIGltbWVkaWF0ZWx5IGFuZCBtb3ZlIHRvIGtpbGxlZFNlc3Npb25zLlxuICBjb25zdCBwZW5kaW5nS2lsbHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgaW1wb3J0ZWRTZXNzaW9uR3JhY2VVbnRpbCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbiAgLyoqIEV4ZWN1dGUgYSBkZWZlcnJlZCBraWxsIGlmIHdlIG5vdyBoYXZlIGEgUElELiAqL1xuICBmdW5jdGlvbiB0cnlFeGVjdXRlUGVuZGluZ0tpbGwoc2Vzc2lvbklkOiBzdHJpbmcsIHBpZD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGtpbGxQaWQgPSBwaWQgfHwgc2Vzc2lvbnMuZ2V0KHNlc3Npb25JZCk/LnBpZDtcbiAgICBpZiAoIWtpbGxQaWQpIHJldHVybjtcbiAgICB0cnkgeyBwcm9jZXNzLmtpbGwoa2lsbFBpZCwgJ1NJR1RFUk0nKTsgfSBjYXRjaCB7IC8qIGFscmVhZHkgZGVhZCAqLyB9XG4gICAgY29uc3QgZXhpc3RpbmcgPSBzZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoZXhpc3RpbmcpIGV4aXN0aW5nLnN0YXR1cyA9ICdlbmRlZCc7XG4gICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIERlZmVycmVkIGtpbGwgZXhlY3V0ZWQg4oCUIFBJRCBhcnJpdmVkJywge1xuICAgICAgZGlzcGxheU5hbWU6IGV4aXN0aW5nPy5kaXNwbGF5TmFtZSwgc2Vzc2lvbklkLCBwaWQ6IGtpbGxQaWQsXG4gICAgfSk7XG4gIH1cblxuICAvKiogUHJvbW90ZSBhIHBlbmRpbmcga2lsbCB0byBwZXJtYW5lbnQuICovXG4gIGZ1bmN0aW9uIGZpbmFsaXplUGVuZGluZ0tpbGwoc2Vzc2lvbklkOiBzdHJpbmcsIHBpZD86IG51bWJlcik6IHZvaWQge1xuICAgIHRyeUV4ZWN1dGVQZW5kaW5nS2lsbChzZXNzaW9uSWQsIHBpZCk7XG4gICAgcGVuZGluZ0tpbGxzLmRlbGV0ZShzZXNzaW9uSWQpO1xuICAgIGtpbGxlZFNlc3Npb25zLmFkZChzZXNzaW9uSWQpO1xuICB9XG5cbiAgLyoqIENyZWF0ZSBhIG5ldyBzZXNzaW9uIGVudHJ5IGZvciBhbiBvcnBoYW4uIFJldHVybnMgbnVsbCBvbiBmYWlsdXJlLiAqL1xuICBmdW5jdGlvbiBhdXRvUmVnaXN0ZXIoXG4gICAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgcGlkPzogbnVtYmVyLFxuICAgIGF1dGhlbnRpY2F0ZWQgPSBmYWxzZSxcbiAgICBzZXJ2ZXJWZXJzaW9uPzogc3RyaW5nLFxuICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb24/OiBudW1iZXIsXG4gICk6IFNlc3Npb25JbmZvIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gbmFtZVBvb2wuYXNzaWduKHNlc3Npb25JZCk7XG4gICAgICBjb25zdCBjb2xvciA9IG5hbWVQb29sLmdldENvbG9yKHNlc3Npb25JZCkgPz8gJyMzYjgyZjYnO1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgY29uc3QgaW5mbzogU2Vzc2lvbkluZm8gPSB7XG4gICAgICAgIHNlc3Npb25JZCwgZGlzcGxheU5hbWUsIGNvbG9yLFxuICAgICAgICBwaWQ6IHBpZCB8fCAwLFxuICAgICAgICBzdGFydGVkQXQ6IG5vdywgbGFzdEhlYXJ0YmVhdDogbm93LFxuICAgICAgICBzdGF0dXM6ICdhY3RpdmUnLCBpc0xlYWRlcjogZmFsc2UsIGF1dGhlbnRpY2F0ZWQsIGtpbmQ6ICdtY3AnLFxuICAgICAgICBzZXJ2ZXJWZXJzaW9uOiBub3JtYWxpemVTZXJ2ZXJWZXJzaW9uKHNlcnZlclZlcnNpb24pLFxuICAgICAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uOiBub3JtYWxpemVDb25zb2xlUHJvdG9jb2xWZXJzaW9uKGNvbnNvbGVQcm90b2NvbFZlcnNpb24pLFxuICAgICAgfTtcbiAgICAgIHNlc3Npb25zLnNldChzZXNzaW9uSWQsIGluZm8pO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIEF1dG8tcmVnaXN0ZXJlZCBvcnBoYW5lZCBzZXNzaW9uJywge1xuICAgICAgICBkaXNwbGF5TmFtZSwgc2Vzc2lvbklkLCBzb3VyY2U6IHBpZCA/ICdoZWFydGJlYXQnIDogJ2luZ2VzdGlvbicsXG4gICAgICB9KTtcbiAgICAgIGJyb2FkY2FzdHMuc2Vzc2lvbkJyb2FkY2FzdD8uKGluZm8pO1xuICAgICAgcmV0dXJuIGluZm87XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1tJbmdlc3RSb3V0ZXNdIEZhaWxlZCB0byBhdXRvLXJlZ2lzdGVyIG9ycGhhbmVkIHNlc3Npb24nLCB7XG4gICAgICAgIHNlc3Npb25JZCwgZXJyb3I6IChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRvLXJlZ2lzdGVyIG9yIHVwZGF0ZSBhbiBvcnBoYW5lZCBzZXNzaW9uIGZyb20gaW5nZXN0aW9uIGRhdGEuXG4gICAqIFJldHVybnMgdGhlIHNlc3Npb24gKGV4aXN0aW5nIG9yIG5ld2x5IGNyZWF0ZWQpLCBvciBudWxsIGlmIGtpbGxlZC9wZW5kaW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gZW5zdXJlU2Vzc2lvbihcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICBwaWQ/OiBudW1iZXIsXG4gICAgYXV0aGVudGljYXRlZCA9IGZhbHNlLFxuICAgIHNlcnZlclZlcnNpb24/OiBzdHJpbmcsXG4gICAgY29uc29sZVByb3RvY29sVmVyc2lvbj86IG51bWJlcixcbiAgKTogU2Vzc2lvbkluZm8gfCBudWxsIHtcbiAgICBpZiAoa2lsbGVkU2Vzc2lvbnMuaGFzKHNlc3Npb25JZCkpIHJldHVybiBudWxsO1xuICAgIGlmIChwZW5kaW5nS2lsbHMuaGFzKHNlc3Npb25JZCkpIHtcbiAgICAgIGZpbmFsaXplUGVuZGluZ0tpbGwoc2Vzc2lvbklkLCBwaWQpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmcgPSBzZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gYXV0b1JlZ2lzdGVyKHNlc3Npb25JZCwgcGlkLCBhdXRoZW50aWNhdGVkLCBzZXJ2ZXJWZXJzaW9uLCBjb25zb2xlUHJvdG9jb2xWZXJzaW9uKTtcbiAgICB9XG5cbiAgICBpbXBvcnRlZFNlc3Npb25HcmFjZVVudGlsLmRlbGV0ZShzZXNzaW9uSWQpO1xuXG4gICAgaWYgKGV4aXN0aW5nLnN0YXR1cyA9PT0gJ2VuZGVkJykge1xuICAgICAgZXhpc3Rpbmcuc3RhdHVzID0gJ2FjdGl2ZSc7XG4gICAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gUmV2aXZlZCBlbmRlZCBzZXNzaW9uIHN0aWxsIHNlbmRpbmcgZGF0YScsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IGV4aXN0aW5nLmRpc3BsYXlOYW1lLCBzZXNzaW9uSWQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgZXhpc3RpbmcubGFzdEhlYXJ0YmVhdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBpZiAocGlkICYmICFleGlzdGluZy5waWQpIHtcbiAgICAgIGV4aXN0aW5nLnBpZCA9IHBpZDtcbiAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBSZWNvdmVyZWQgUElEIGZvciBvcnBoYW5lZCBzZXNzaW9uJywge1xuICAgICAgICBkaXNwbGF5TmFtZTogZXhpc3RpbmcuZGlzcGxheU5hbWUsIHNlc3Npb25JZCwgcGlkLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChzZXJ2ZXJWZXJzaW9uKSB7XG4gICAgICBleGlzdGluZy5zZXJ2ZXJWZXJzaW9uID0gbm9ybWFsaXplU2VydmVyVmVyc2lvbihzZXJ2ZXJWZXJzaW9uKTtcbiAgICB9XG4gICAgaWYgKGNvbnNvbGVQcm90b2NvbFZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXhpc3RpbmcuY29uc29sZVByb3RvY29sVmVyc2lvbiA9IG5vcm1hbGl6ZUNvbnNvbGVQcm90b2NvbFZlcnNpb24oY29uc29sZVByb3RvY29sVmVyc2lvbik7XG4gICAgfVxuICAgIHJldHVybiBleGlzdGluZztcbiAgfVxuXG4gIC8vIEpTT04gYm9keSBwYXJzaW5nIHdpdGggc2l6ZSBsaW1pdFxuICByb3V0ZXIudXNlKGV4cHJlc3MuanNvbih7IGxpbWl0OiBNQVhfUEFZTE9BRF9TSVpFIH0pKTtcblxuICAvKipcbiAgICogUE9TVCAvYXBpL2luZ2VzdC9sb2dzIOKAlCBSZWNlaXZlIGJhdGNoZWQgbG9nIGVudHJpZXMgZnJvbSBhIGZvbGxvd2VyLlxuICAgKi9cbiAgcm91dGVyLnBvc3QoJy9hcGkvaW5nZXN0L2xvZ3MnLCAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKCFyYXRlTGltaXRlci50cnlBY3F1aXJlKCkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDI5KS5qc29uKHsgZXJyb3I6ICdSYXRlIGxpbWl0IGV4Y2VlZGVkJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkID0gcmVxLmJvZHkgYXMgSW5nZXN0TG9nUGF5bG9hZDtcbiAgICBpZiAoIXBheWxvYWQ/LnNlc3Npb25JZCB8fCAhQXJyYXkuaXNBcnJheShwYXlsb2FkLmVudHJpZXMpKSB7XG4gICAgICBjb25zdCByZWNlaXZlZCA9IHBheWxvYWQgPyBPYmplY3Qua2V5cyhwYXlsb2FkKSA6IFtdO1xuICAgICAgbG9nZ2VyLndhcm4oJ1tJbmdlc3RSb3V0ZXNdIEludmFsaWQgbG9nIHBheWxvYWQnLCB7IHJlY2VpdmVkLCBoYXNTZXNzaW9uSWQ6ICEhcGF5bG9hZD8uc2Vzc2lvbklkLCBoYXNFbnRyaWVzOiBBcnJheS5pc0FycmF5KHBheWxvYWQ/LmVudHJpZXMpIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgcGF5bG9hZCcsIHJlcXVpcmVkOiBbJ3Nlc3Npb25JZCcsICdlbnRyaWVzJ10sIHJlY2VpdmVkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwYXlsb2FkLnNlc3Npb25JZCA9IG5vcm1hbGl6ZUlucHV0KHBheWxvYWQuc2Vzc2lvbklkKTtcblxuICAgIGxldCBjb3VudCA9IDA7XG4gICAgbGV0IHNraXBwZWQgPSAwO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgcGF5bG9hZC5lbnRyaWVzKSB7XG4gICAgICBpZiAoIWVudHJ5IHx8IHR5cGVvZiBlbnRyeS5tZXNzYWdlICE9PSAnc3RyaW5nJykgeyBza2lwcGVkKys7IGNvbnRpbnVlOyB9XG4gICAgICBjb25zdCBzdGFtcGVkOiBVbmlmaWVkTG9nRW50cnkgPSB7XG4gICAgICAgIC4uLmVudHJ5LFxuICAgICAgICBkYXRhOiB7IC4uLmVudHJ5LmRhdGEsIF9zZXNzaW9uSWQ6IHBheWxvYWQuc2Vzc2lvbklkIH0sXG4gICAgICB9O1xuICAgICAgYnJvYWRjYXN0cy5sb2dCcm9hZGNhc3Qoc3RhbXBlZCk7XG4gICAgICBjb3VudCsrO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBoZWFydGJlYXQsIHJldml2ZSBlbmRlZCBzZXNzaW9ucywgb3IgYXV0by1yZWdpc3RlciBvcnBoYW5zICgjMTg3MClcbiAgICBjb25zdCBzZXNzaW9uID0gZW5zdXJlU2Vzc2lvbihwYXlsb2FkLnNlc3Npb25JZCk7XG5cbiAgICBpZiAoc2tpcHBlZCA+IDApIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0luZ2VzdFJvdXRlc10gTG9nIGluZ2VzdCBmcm9tICR7c2Vzc2lvbj8uZGlzcGxheU5hbWUgPz8gcGF5bG9hZC5zZXNzaW9uSWR9OiBhY2NlcHRlZD0ke2NvdW50fSwgc2tpcHBlZD0ke3NraXBwZWR9YCk7XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBhY2NlcHRlZDogY291bnQsIHNraXBwZWQgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBQT1NUIC9hcGkvaW5nZXN0L21ldHJpY3Mg4oCUIFJlY2VpdmUgbWV0cmljIHNuYXBzaG90cyBmcm9tIGEgZm9sbG93ZXIuXG4gICAqL1xuICByb3V0ZXIucG9zdCgnL2FwaS9pbmdlc3QvbWV0cmljcycsIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICBpZiAoIXJhdGVMaW1pdGVyLnRyeUFjcXVpcmUoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MjkpLmpzb24oeyBlcnJvcjogJ1JhdGUgbGltaXQgZXhjZWVkZWQnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBheWxvYWQgPSByZXEuYm9keSBhcyBJbmdlc3RNZXRyaWNzUGF5bG9hZDtcbiAgICBpZiAoIXBheWxvYWQ/LnNlc3Npb25JZCB8fCAhcGF5bG9hZC5zbmFwc2hvdCkge1xuICAgICAgY29uc3QgcmVjZWl2ZWQgPSBwYXlsb2FkID8gT2JqZWN0LmtleXMocGF5bG9hZCkgOiBbXTtcbiAgICAgIGxvZ2dlci53YXJuKCdbSW5nZXN0Um91dGVzXSBJbnZhbGlkIG1ldHJpY3MgcGF5bG9hZCcsIHsgcmVjZWl2ZWQgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnSW52YWxpZCBwYXlsb2FkJywgcmVxdWlyZWQ6IFsnc2Vzc2lvbklkJywgJ3NuYXBzaG90J10sIHJlY2VpdmVkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwYXlsb2FkLnNlc3Npb25JZCA9IG5vcm1hbGl6ZUlucHV0KHBheWxvYWQuc2Vzc2lvbklkKTtcblxuICAgIGlmIChicm9hZGNhc3RzLm1ldHJpY3NPblNuYXBzaG90KSB7XG4gICAgICBicm9hZGNhc3RzLm1ldHJpY3NPblNuYXBzaG90KHBheWxvYWQuc25hcHNob3QpO1xuICAgIH1cbiAgICBpZiAoYnJvYWRjYXN0cy5zdG9yZU1ldHJpY3NTbmFwc2hvdCkge1xuICAgICAgYnJvYWRjYXN0cy5zdG9yZU1ldHJpY3NTbmFwc2hvdChwYXlsb2FkLnNuYXBzaG90LCBwYXlsb2FkLnNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGhlYXJ0YmVhdCwgcmV2aXZlIGVuZGVkIHNlc3Npb25zLCBvciBhdXRvLXJlZ2lzdGVyIG9ycGhhbnMgKCMxODcwKVxuICAgIGNvbnN0IHNlc3Npb24gPSBlbnN1cmVTZXNzaW9uKHBheWxvYWQuc2Vzc2lvbklkKTtcbiAgICBsb2dnZXIuZGVidWcoYFtJbmdlc3RSb3V0ZXNdIE1ldHJpY3MgaW5nZXN0ZWQgZnJvbSAke3Nlc3Npb24/LmRpc3BsYXlOYW1lID8/IHBheWxvYWQuc2Vzc2lvbklkfWApO1xuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgYWNjZXB0ZWQ6IHRydWUgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBQT1NUIC9hcGkvaW5nZXN0L3Nlc3Npb24g4oCUIFNlc3Npb24gbGlmZWN5Y2xlIGV2ZW50cy5cbiAgICovXG4gIHJvdXRlci5wb3N0KCcvYXBpL2luZ2VzdC9zZXNzaW9uJywgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIGNvbnN0IHBheWxvYWQgPSByZXEuYm9keSBhcyBTZXNzaW9uRXZlbnRQYXlsb2FkO1xuICAgIGlmICghcGF5bG9hZD8uc2Vzc2lvbklkIHx8ICFwYXlsb2FkLmV2ZW50KSB7XG4gICAgICBjb25zdCByZWNlaXZlZCA9IHBheWxvYWQgPyBPYmplY3Qua2V5cyhwYXlsb2FkKSA6IFtdO1xuICAgICAgbG9nZ2VyLndhcm4oJ1tJbmdlc3RSb3V0ZXNdIEludmFsaWQgc2Vzc2lvbiBldmVudCBwYXlsb2FkJywgeyByZWNlaXZlZCB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdJbnZhbGlkIHBheWxvYWQnLCByZXF1aXJlZDogWydzZXNzaW9uSWQnLCAnZXZlbnQnXSwgcmVjZWl2ZWQgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBheWxvYWQuc2Vzc2lvbklkID0gbm9ybWFsaXplSW5wdXQocGF5bG9hZC5zZXNzaW9uSWQpO1xuXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gICAgc3dpdGNoIChwYXlsb2FkLmV2ZW50KSB7XG4gICAgICBjYXNlICdzdGFydGVkJzoge1xuICAgICAgICAvLyBLaWxsZWQgc2Vzc2lvbnMgc3RheSBkZWFkOyBwZW5kaW5nIGtpbGxzIGdldCBmaW5hbGl6ZWQgKCMxODcwKVxuICAgICAgICBpZiAoa2lsbGVkU2Vzc2lvbnMuaGFzKHBheWxvYWQuc2Vzc2lvbklkKSkgYnJlYWs7XG4gICAgICAgIGlmIChwZW5kaW5nS2lsbHMuaGFzKHBheWxvYWQuc2Vzc2lvbklkKSkgeyBmaW5hbGl6ZVBlbmRpbmdLaWxsKHBheWxvYWQuc2Vzc2lvbklkLCBwYXlsb2FkLnBpZCk7IGJyZWFrOyB9XG5cbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBuYW1lUG9vbC5hc3NpZ24ocGF5bG9hZC5zZXNzaW9uSWQpO1xuICAgICAgICBjb25zdCBjb2xvciA9IG5hbWVQb29sLmdldENvbG9yKHBheWxvYWQuc2Vzc2lvbklkKSA/PyAnIzNiODJmNic7XG4gICAgICAgIGNvbnN0IGlzQXV0aGVudGljYXRlZCA9IEJvb2xlYW4oKHJlcyBhcyBhbnkpLmxvY2Fscz8udG9rZW5FbnRyeSk7XG4gICAgICAgIHNlc3Npb25zLnNldChwYXlsb2FkLnNlc3Npb25JZCwge1xuICAgICAgICAgIHNlc3Npb25JZDogcGF5bG9hZC5zZXNzaW9uSWQsIGRpc3BsYXlOYW1lLCBjb2xvcixcbiAgICAgICAgICBwaWQ6IHBheWxvYWQucGlkLCBzdGFydGVkQXQ6IHBheWxvYWQuc3RhcnRlZEF0IHx8IG5vdywgbGFzdEhlYXJ0YmVhdDogbm93LFxuICAgICAgICAgIHN0YXR1czogJ2FjdGl2ZScsIGlzTGVhZGVyOiBmYWxzZSwgYXV0aGVudGljYXRlZDogaXNBdXRoZW50aWNhdGVkLCBraW5kOiAnbWNwJyxcbiAgICAgICAgICBzZXJ2ZXJWZXJzaW9uOiBub3JtYWxpemVTZXJ2ZXJWZXJzaW9uKHBheWxvYWQuc2VydmVyVmVyc2lvbiksXG4gICAgICAgICAgY29uc29sZVByb3RvY29sVmVyc2lvbjogbm9ybWFsaXplQ29uc29sZVByb3RvY29sVmVyc2lvbihwYXlsb2FkLmNvbnNvbGVQcm90b2NvbFZlcnNpb24pLFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIFNlc3Npb24gcmVnaXN0ZXJlZCcsIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSwgc2Vzc2lvbklkOiBwYXlsb2FkLnNlc3Npb25JZCwgcGlkOiBwYXlsb2FkLnBpZCwgY29sb3IsXG4gICAgICAgICAgYWN0aXZlU2Vzc2lvbnM6IEFycmF5LmZyb20oc2Vzc2lvbnMudmFsdWVzKCkpLmZpbHRlcihzID0+IHMuc3RhdHVzID09PSAnYWN0aXZlJykubGVuZ3RoLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJvYWRjYXN0cy5zZXNzaW9uQnJvYWRjYXN0Py4oc2Vzc2lvbnMuZ2V0KHBheWxvYWQuc2Vzc2lvbklkKSEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3N0b3BwZWQnOiB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gc2Vzc2lvbnMuZ2V0KHBheWxvYWQuc2Vzc2lvbklkKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgZXhpc3Rpbmcuc3RhdHVzID0gJ2VuZGVkJztcbiAgICAgICAgICBleGlzdGluZy5sYXN0SGVhcnRiZWF0ID0gbm93O1xuICAgICAgICAgIG5hbWVQb29sLnJlbGVhc2UocGF5bG9hZC5zZXNzaW9uSWQpO1xuICAgICAgICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBTZXNzaW9uIHN0b3BwZWQnLCB7XG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogZXhpc3RpbmcuZGlzcGxheU5hbWUsIHNlc3Npb25JZDogcGF5bG9hZC5zZXNzaW9uSWQsIHBpZDogZXhpc3RpbmcucGlkLFxuICAgICAgICAgICAgYWN0aXZlU2Vzc2lvbnM6IEFycmF5LmZyb20oc2Vzc2lvbnMudmFsdWVzKCkpLmZpbHRlcihzID0+IHMuc3RhdHVzID09PSAnYWN0aXZlJykubGVuZ3RoIC0gMSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicm9hZGNhc3RzLnNlc3Npb25Ccm9hZGNhc3Q/LihleGlzdGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdoZWFydGJlYXQnOiB7XG4gICAgICAgIC8vIEF1dG8tcmVnaXN0ZXIgb3IgdXBkYXRlIOKAlCBoZWFydGJlYXQgaW5jbHVkZXMgUElEIGZvciByZWNvdmVyeSAoIzE4NzApXG4gICAgICAgIGVuc3VyZVNlc3Npb24oXG4gICAgICAgICAgcGF5bG9hZC5zZXNzaW9uSWQsXG4gICAgICAgICAgcGF5bG9hZC5waWQsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgcGF5bG9hZC5zZXJ2ZXJWZXJzaW9uLFxuICAgICAgICAgIHBheWxvYWQuY29uc29sZVByb3RvY29sVmVyc2lvbixcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oeyBvazogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEdFVCAvYXBpL3Nlc3Npb25zIOKAlCBMaXN0IGFsbCB0cmFja2VkIHNlc3Npb25zLlxuICAgKi9cbiAgcm91dGVyLmdldCgnL2FwaS9zZXNzaW9ucycsIGFzeW5jIChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgLy8gU2VydmVyLXNpZGUgYWN0aXZlIGZpbHRlciDigJQgdGhlIGZyb250ZW5kIGFsc28gZmlsdGVycywgYnV0IGVuZGVkIHNlc3Npb25zXG4gICAgLy8gc2hvdWxkIG5ldmVyIGxlYXZlIHRoZSBBUEkgdG8gcHJldmVudCBzdGFsZSBVSSAoIzE4NzApLlxuICAgIGNvbnN0IGxvY2FsU2Vzc2lvbnMgPSBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpO1xuICAgIGNvbnN0IGN1cnJlbnRQb3J0ID0gZW52LkRPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUID8/IDQxNzE1O1xuXG4gICAgLy8gRmVkZXJhdGUgd2l0aCB0aGUgbGVnYWN5IHBvcnQgKDM5MzkpIHRvIHNob3cgYWxsIHNlc3Npb25zIG9uIHRoZVxuICAgIC8vIG1hY2hpbmUsIGluY2x1ZGluZyB1bmF1dGhlbnRpY2F0ZWQgb25lcyBmcm9tIHByZS1hdXRoIGluc3RhbGxzLlxuICAgIC8vIFNlcnZlci10by1zZXJ2ZXIgYXZvaWRzIENPUlMgcmVzdHJpY3Rpb25zICgjMTgwNSkuXG4gICAgaWYgKGN1cnJlbnRQb3J0ICE9PSAzOTM5KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIExFR0FDWV9GRVRDSF9USU1FT1VUX01TKTtcbiAgICAgICAgY29uc3QgbGVnYWN5UmVzID0gYXdhaXQgZmV0Y2goJ2h0dHA6Ly8xMjcuMC4wLjE6MzkzOS9hcGkvc2Vzc2lvbnMnLCB7XG4gICAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgaWYgKGxlZ2FjeVJlcy5vaykge1xuICAgICAgICAgIGNvbnN0IGxlZ2FjeURhdGEgPSBhd2FpdCBsZWdhY3lSZXMuanNvbigpIGFzIHsgc2Vzc2lvbnM6IFNlc3Npb25JbmZvW10gfTtcbiAgICAgICAgICBjb25zdCBsb2NhbElkcyA9IG5ldyBTZXQobG9jYWxTZXNzaW9ucy5tYXAocyA9PiBzLnNlc3Npb25JZCkpO1xuICAgICAgICAgIGZvciAoY29uc3QgbHMgb2YgKGxlZ2FjeURhdGEuc2Vzc2lvbnMgfHwgW10pKSB7XG4gICAgICAgICAgICBpZiAoIWxvY2FsSWRzLmhhcyhscy5zZXNzaW9uSWQpICYmIGxzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgICAgICAgICAgbG9jYWxTZXNzaW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAuLi5scyxcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBraW5kOiBscy5raW5kIHx8ICdtY3AnLFxuICAgICAgICAgICAgICAgIHNlcnZlclZlcnNpb246IG5vcm1hbGl6ZVNlcnZlclZlcnNpb24obHMuc2VydmVyVmVyc2lvbiksXG4gICAgICAgICAgICAgICAgY29uc29sZVByb3RvY29sVmVyc2lvbjogbm9ybWFsaXplQ29uc29sZVByb3RvY29sVmVyc2lvbihscy5jb25zb2xlUHJvdG9jb2xWZXJzaW9uKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTGVnYWN5IGluc3RhbmNlIG5vdCBydW5uaW5nIG9yIHVucmVhY2hhYmxlIOKAlCB0aGF0J3MgZmluZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlcy5qc29uKHsgc2Vzc2lvbnM6IGxvY2FsU2Vzc2lvbnMgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBQT1NUIC9hcGkvc2Vzc2lvbnMvOnNlc3Npb25JZC9raWxsIOKAlCBUZXJtaW5hdGUgYSBzZXNzaW9uJ3Mgc2VydmVyIHByb2Nlc3MuXG4gICAqL1xuICByb3V0ZXIucG9zdCgnL2FwaS9zZXNzaW9ucy86c2Vzc2lvbklkL2tpbGwnLCBhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gcmVxLnBhcmFtc1snc2Vzc2lvbklkJ10gYXMgc3RyaW5nO1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTtcblxuICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgLy8gU2Vzc2lvbiBub3QgaW4gbG9jYWwgTWFwIOKAlCB0cnkgcHJveHlpbmcga2lsbCB0byBsZWdhY3kgcG9ydCAoIzE4NzApXG4gICAgICBjb25zdCBjdXJyZW50UG9ydCA9IGVudi5ET0xMSE9VU0VfV0VCX0NPTlNPTEVfUE9SVCA/PyA0MTcxNTtcbiAgICAgIGlmIChjdXJyZW50UG9ydCAhPT0gMzkzOSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCBMRUdBQ1lfRkVUQ0hfVElNRU9VVF9NUyk7XG4gICAgICAgICAgY29uc3QgcHJveHlSZXMgPSBhd2FpdCBmZXRjaChgaHR0cDovLzEyNy4wLjAuMTozOTM5L2FwaS9zZXNzaW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChzZXNzaW9uSWQpfS9raWxsYCwge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICBpZiAocHJveHlSZXMub2spIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBwcm94eVJlcy5qc29uKCk7XG4gICAgICAgICAgICByZXMuanNvbihkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIExlZ2FjeSBpbnN0YW5jZSBub3QgcnVubmluZyDigJQgZmFsbCB0aHJvdWdoIHRvIDQwNFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIud2FybignW0luZ2VzdFJvdXRlc10gS2lsbCByZXF1ZXN0ZWQgZm9yIHVua25vd24gc2Vzc2lvbicsIHsgc2Vzc2lvbklkIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oeyBlcnJvcjogJ1Nlc3Npb24gbm90IGZvdW5kJywgc2Vzc2lvbklkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghc2Vzc2lvbi5waWQpIHtcbiAgICAgIC8vIEF1dG8tcmVnaXN0ZXJlZCBvcnBoYW4gd2l0aCB1bmtub3duIFBJRCDigJQgcXVldWUgZm9yIGRlZmVycmVkIGtpbGwgKCMxODcwKS5cbiAgICAgIC8vIFRoZSBuZXh0IGhlYXJ0YmVhdCAoZXZlcnkgfjEwcykgY2FycmllcyB0aGUgUElELiBlbnN1cmVTZXNzaW9uKCkgd2lsbFxuICAgICAgLy8gU0lHVEVSTSB0aGUgcHJvY2VzcyBhcyBzb29uIGFzIHRoZSBQSUQgYXJyaXZlcy4gU2Vzc2lvbiBpcyBnb25lIGZvciBnb29kLlxuICAgICAgc2Vzc2lvbi5zdGF0dXMgPSAnZW5kZWQnO1xuICAgICAgbmFtZVBvb2wucmVsZWFzZShzZXNzaW9uSWQpO1xuICAgICAgcGVuZGluZ0tpbGxzLmFkZChzZXNzaW9uSWQpO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIFF1ZXVlZCBkZWZlcnJlZCBraWxsIOKAlCB3YWl0aW5nIGZvciBQSUQgdmlhIGhlYXJ0YmVhdCcsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHNlc3Npb25JZCxcbiAgICAgIH0pO1xuICAgICAgcmVzLmpzb24oeyBvazogdHJ1ZSwgZGlzbWlzc2VkOiBzZXNzaW9uLmRpc3BsYXlOYW1lLCByZWFzb246ICdwZW5kaW5nLWtpbGwnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNJR1RFUk0gdGhlIHByb2Nlc3MuIEV2ZW4gaWYgaXQgZmFpbHMgKEVTUkNIID0gYWxyZWFkeSBkZWFkLCBFUEVSTSA9IG5vdCBvdXJzKSxcbiAgICAvLyBtYXJrIHRoZSBzZXNzaW9uIGFzIHBlcm1hbmVudGx5IGtpbGxlZCBzbyBpdCBuZXZlciByZWFwcGVhcnMgKCMxODcwKS5cbiAgICB0cnkge1xuICAgICAgcHJvY2Vzcy5raWxsKHNlc3Npb24ucGlkLCAnU0lHVEVSTScpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgY29kZSA9IChlcnIgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlO1xuICAgICAgaWYgKGNvZGUgPT09ICdFU1JDSCcpIHtcbiAgICAgICAgLy8gUHJvY2VzcyBhbHJlYWR5IGRlYWQg4oCUIHRyZWF0IGFzIHN1Y2Nlc3NmdWwga2lsbC5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignW0luZ2VzdFJvdXRlc10gRmFpbGVkIHRvIGtpbGwgc2Vzc2lvbicsIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZTogc2Vzc2lvbi5kaXNwbGF5TmFtZSwgc2Vzc2lvbklkLCBwaWQ6IHNlc3Npb24ucGlkLCBlcnJvcjogKGVyciBhcyBFcnJvcikubWVzc2FnZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8ga2lsbCBzZXNzaW9uJywgc2Vzc2lvbklkLCBkaXNwbGF5TmFtZTogc2Vzc2lvbi5kaXNwbGF5TmFtZSwgcGlkOiBzZXNzaW9uLnBpZCwgZGV0YWlsOiAoZXJyIGFzIEVycm9yKS5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHNlc3Npb24uc3RhdHVzID0gJ2VuZGVkJztcbiAgICBuYW1lUG9vbC5yZWxlYXNlKHNlc3Npb25JZCk7XG4gICAga2lsbGVkU2Vzc2lvbnMuYWRkKHNlc3Npb25JZCk7XG4gICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIFNlc3Npb24ga2lsbGVkJywge1xuICAgICAgZGlzcGxheU5hbWU6IHNlc3Npb24uZGlzcGxheU5hbWUsIHNlc3Npb25JZCwgcGlkOiBzZXNzaW9uLnBpZCxcbiAgICAgIGFjdGl2ZVNlc3Npb25zOiBBcnJheS5mcm9tKHNlc3Npb25zLnZhbHVlcygpKS5maWx0ZXIocyA9PiBzLnN0YXR1cyA9PT0gJ2FjdGl2ZScpLmxlbmd0aCAtIDEsXG4gICAgfSk7XG4gICAgcmVzLmpzb24oeyBvazogdHJ1ZSwga2lsbGVkOiBzZXNzaW9uLmRpc3BsYXlOYW1lLCBwaWQ6IHNlc3Npb24ucGlkIH0pO1xuICB9KTtcblxuICAvKiogTWFyayBzdGFsZSBhY3RpdmUgc2Vzc2lvbnMgYXMgZW5kZWQuICovXG4gIGZ1bmN0aW9uIHJlYXBTdGFsZVNlc3Npb25zKG5vdzogbnVtYmVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbaWQsIHNlc3Npb25dIG9mIHNlc3Npb25zKSB7XG4gICAgICBpZiAoc2Vzc2lvbi5zdGF0dXMgIT09ICdhY3RpdmUnKSBjb250aW51ZTtcbiAgICAgIGlmIChzZXNzaW9uLmlzTGVhZGVyIHx8IHNlc3Npb24ua2luZCA9PT0gJ2NvbnNvbGUnKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGFnZSA9IG5vdyAtIG5ldyBEYXRlKHNlc3Npb24ubGFzdEhlYXJ0YmVhdCkuZ2V0VGltZSgpO1xuICAgICAgY29uc3QgZ3JhY2VVbnRpbCA9IGltcG9ydGVkU2Vzc2lvbkdyYWNlVW50aWwuZ2V0KGlkKSA/PyAwO1xuICAgICAgaWYgKGdyYWNlVW50aWwgPiBub3cpIGNvbnRpbnVlO1xuICAgICAgaWYgKGdyYWNlVW50aWwgIT09IDApIHtcbiAgICAgICAgaW1wb3J0ZWRTZXNzaW9uR3JhY2VVbnRpbC5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgICAgaWYgKGFnZSA8PSBTRVNTSU9OX1NUQUxFX01TKSBjb250aW51ZTtcbiAgICAgIHNlc3Npb24uc3RhdHVzID0gJ2VuZGVkJztcbiAgICAgIG5hbWVQb29sLnJlbGVhc2UoaWQpO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tJbmdlc3RSb3V0ZXNdIFJlYXBlZCBzdGFsZSBzZXNzaW9uJywge1xuICAgICAgICBkaXNwbGF5TmFtZTogc2Vzc2lvbi5kaXNwbGF5TmFtZSwgc2Vzc2lvbklkOiBpZCwgcGlkOiBzZXNzaW9uLnBpZCxcbiAgICAgICAgbGFzdEhlYXJ0YmVhdEFnbzogYCR7TWF0aC5yb3VuZChhZ2UgLyAxMDAwKX1zYCxcbiAgICAgICAgYWN0aXZlU2Vzc2lvbnM6IEFycmF5LmZyb20oc2Vzc2lvbnMudmFsdWVzKCkpLmZpbHRlcihzID0+IHMuc3RhdHVzID09PSAnYWN0aXZlJykubGVuZ3RoIC0gMSxcbiAgICAgIH0pO1xuICAgICAgYnJvYWRjYXN0cy5zZXNzaW9uQnJvYWRjYXN0Py4oc2Vzc2lvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqIERlbGV0ZSBlbmRlZCBzZXNzaW9ucyB0byBib3VuZCBtZW1vcnkgKCMxODcwKS4gKi9cbiAgZnVuY3Rpb24gcHVyZ2VTdGFsZUVudHJpZXMobm93OiBudW1iZXIpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgc2Vzc2lvbl0gb2Ygc2Vzc2lvbnMpIHtcbiAgICAgIGlmIChzZXNzaW9uLnN0YXR1cyA9PT0gJ2VuZGVkJyAmJiBub3cgLSBuZXcgRGF0ZShzZXNzaW9uLmxhc3RIZWFydGJlYXQpLmdldFRpbWUoKSA+IEVOREVEX1BVUkdFX01TKSB7XG4gICAgICAgIGltcG9ydGVkU2Vzc2lvbkdyYWNlVW50aWwuZGVsZXRlKGlkKTtcbiAgICAgICAgc2Vzc2lvbnMuZGVsZXRlKGlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZWFwZXJJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHJlYXBTdGFsZVNlc3Npb25zKG5vdyk7XG4gICAgcHVyZ2VTdGFsZUVudHJpZXMobm93KTtcbiAgfSwgUkVBUEVSX0lOVEVSVkFMX01TKTtcbiAgcmVhcGVySW50ZXJ2YWwudW5yZWYoKTtcblxuICBmdW5jdGlvbiBnZXRTZXNzaW9ucygpOiBTZXNzaW9uSW5mb1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShzZXNzaW9ucy52YWx1ZXMoKSkuZmlsdGVyKHMgPT4gcy5zdGF0dXMgPT09ICdhY3RpdmUnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGltcG9ydFNlc3Npb25zKGltcG9ydGVkU2Vzc2lvbnM6IFNlc3Npb25JbmZvW10pOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGZvciAoY29uc3QgaW1wb3J0ZWQgb2YgaW1wb3J0ZWRTZXNzaW9ucykge1xuICAgICAgaWYgKGltcG9ydGVkLnN0YXR1cyAhPT0gJ2FjdGl2ZScpIGNvbnRpbnVlO1xuICAgICAgaWYgKGltcG9ydGVkLmlzTGVhZGVyIHx8IGltcG9ydGVkLmtpbmQgPT09ICdjb25zb2xlJykgY29udGludWU7XG4gICAgICBpZiAoa2lsbGVkU2Vzc2lvbnMuaGFzKGltcG9ydGVkLnNlc3Npb25JZCkgfHwgcGVuZGluZ0tpbGxzLmhhcyhpbXBvcnRlZC5zZXNzaW9uSWQpKSBjb250aW51ZTtcblxuICAgICAgY29uc3Qgbm9ybWFsaXplZFNlc3Npb25JZCA9IG5vcm1hbGl6ZUlucHV0KGltcG9ydGVkLnNlc3Npb25JZCk7XG4gICAgICBjb25zdCBleGlzdGluZyA9IHNlc3Npb25zLmdldChub3JtYWxpemVkU2Vzc2lvbklkKTtcbiAgICAgIGlmIChleGlzdGluZz8uaXNMZWFkZXIgfHwgZXhpc3Rpbmc/LmtpbmQgPT09ICdjb25zb2xlJykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBpbXBvcnRlZC5kaXNwbGF5TmFtZVxuICAgICAgICA/IG5hbWVQb29sLmFkb3B0KG5vcm1hbGl6ZWRTZXNzaW9uSWQsIGltcG9ydGVkLmRpc3BsYXlOYW1lKVxuICAgICAgICA6IG5hbWVQb29sLmFzc2lnbihub3JtYWxpemVkU2Vzc2lvbklkKTtcbiAgICAgIGNvbnN0IGNvbG9yID0gaW1wb3J0ZWQuY29sb3IgfHwgbmFtZVBvb2wuZ2V0Q29sb3Iobm9ybWFsaXplZFNlc3Npb25JZCkgfHwgJyMzYjgyZjYnO1xuICAgICAgY29uc3QgbWVyZ2VkOiBTZXNzaW9uSW5mbyA9IHtcbiAgICAgICAgc2Vzc2lvbklkOiBub3JtYWxpemVkU2Vzc2lvbklkLFxuICAgICAgICBkaXNwbGF5TmFtZSxcbiAgICAgICAgY29sb3IsXG4gICAgICAgIHBpZDogaW1wb3J0ZWQucGlkIHx8IGV4aXN0aW5nPy5waWQgfHwgMCxcbiAgICAgICAgc3RhcnRlZEF0OiBpbXBvcnRlZC5zdGFydGVkQXQgfHwgZXhpc3Rpbmc/LnN0YXJ0ZWRBdCB8fCBuZXcgRGF0ZShub3cpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGxhc3RIZWFydGJlYXQ6IGltcG9ydGVkLmxhc3RIZWFydGJlYXQgfHwgZXhpc3Rpbmc/Lmxhc3RIZWFydGJlYXQgfHwgbmV3IERhdGUobm93KS50b0lTT1N0cmluZygpLFxuICAgICAgICBzdGF0dXM6ICdhY3RpdmUnLFxuICAgICAgICBpc0xlYWRlcjogZmFsc2UsXG4gICAgICAgIGF1dGhlbnRpY2F0ZWQ6IGltcG9ydGVkLmF1dGhlbnRpY2F0ZWQgPz8gZXhpc3Rpbmc/LmF1dGhlbnRpY2F0ZWQgPz8gZmFsc2UsXG4gICAgICAgIGtpbmQ6ICdtY3AnLFxuICAgICAgICBzZXJ2ZXJWZXJzaW9uOiBub3JtYWxpemVTZXJ2ZXJWZXJzaW9uKGltcG9ydGVkLnNlcnZlclZlcnNpb24gfHwgZXhpc3Rpbmc/LnNlcnZlclZlcnNpb24pLFxuICAgICAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uOiBub3JtYWxpemVDb25zb2xlUHJvdG9jb2xWZXJzaW9uKFxuICAgICAgICAgIGltcG9ydGVkLmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPz8gZXhpc3Rpbmc/LmNvbnNvbGVQcm90b2NvbFZlcnNpb24sXG4gICAgICAgICksXG4gICAgICB9O1xuXG4gICAgICBzZXNzaW9ucy5zZXQobm9ybWFsaXplZFNlc3Npb25JZCwgbWVyZ2VkKTtcbiAgICAgIGltcG9ydGVkU2Vzc2lvbkdyYWNlVW50aWwuc2V0KG5vcm1hbGl6ZWRTZXNzaW9uSWQsIG5vdyArIFRBS0VPVkVSX0lNUE9SVEVEX1NFU1NJT05fR1JBQ0VfTVMpO1xuICAgICAgYnJvYWRjYXN0cy5zZXNzaW9uQnJvYWRjYXN0Py4obWVyZ2VkKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlckxlYWRlclNlc3Npb24oc2Vzc2lvbklkOiBzdHJpbmcsIHBpZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSBuYW1lUG9vbC5hc3NpZ24oc2Vzc2lvbklkLCB0cnVlKTtcbiAgICBjb25zdCBjb2xvciA9IG5hbWVQb29sLmdldENvbG9yKHNlc3Npb25JZCkgPz8gJyMzYjgyZjYnO1xuICAgIHNlc3Npb25zLnNldChzZXNzaW9uSWQsIHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIGRpc3BsYXlOYW1lLFxuICAgICAgY29sb3IsXG4gICAgICBwaWQsXG4gICAgICBzdGFydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGxhc3RIZWFydGJlYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHN0YXR1czogJ2FjdGl2ZScsXG4gICAgICBpc0xlYWRlcjogdHJ1ZSxcbiAgICAgIGF1dGhlbnRpY2F0ZWQ6IHRydWUsXG4gICAgICBraW5kOiAnbWNwJyxcbiAgICAgIHNlcnZlclZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTixcbiAgICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbygnW0luZ2VzdFJvdXRlc10gTGVhZGVyIHNlc3Npb24gcmVnaXN0ZXJlZCcsIHsgZGlzcGxheU5hbWUsIHNlc3Npb25JZCwgcGlkLCBjb2xvciB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciB0aGUgd2ViIGNvbnNvbGUgaXRzZWxmIGFzIGEgc2Vzc2lvbiAoIzE4MDUpLiBFbnN1cmVzIHRoZVxuICAgKiBzZXNzaW9uIGluZGljYXRvciBhbHdheXMgc2hvd3MgYXQgbGVhc3Qgb25lIGVudHJ5IOKAlCB0aGUgY29uc29sZSB0aGVcbiAgICogdXNlciBpcyBjdXJyZW50bHkgbG9va2luZyBhdC5cbiAgICovXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyQ29uc29sZVNlc3Npb24oKTogdm9pZCB7XG4gICAgY29uc3QgY29uc29sZUlkID0gYGNvbnNvbGUtJHtwcm9jZXNzLnBpZH1gO1xuICAgIGlmIChzZXNzaW9ucy5oYXMoY29uc29sZUlkKSkgcmV0dXJuO1xuICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gJ1dlYiBDb25zb2xlJztcbiAgICBzZXNzaW9ucy5zZXQoY29uc29sZUlkLCB7XG4gICAgICBzZXNzaW9uSWQ6IGNvbnNvbGVJZCxcbiAgICAgIGRpc3BsYXlOYW1lLFxuICAgICAgY29sb3I6ICcjNjM2NmYxJywgLy8gaW5kaWdvIOKAlCBkaXN0aW5jdCBmcm9tIHB1cHBldCBncmVlbnMvYmx1ZXNcbiAgICAgIHBpZDogcHJvY2Vzcy5waWQsXG4gICAgICBzdGFydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGxhc3RIZWFydGJlYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHN0YXR1czogJ2FjdGl2ZScsXG4gICAgICBpc0xlYWRlcjogZmFsc2UsXG4gICAgICBhdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgICAga2luZDogJ2NvbnNvbGUnLFxuICAgICAgc2VydmVyVmVyc2lvbjogUEFDS0FHRV9WRVJTSU9OLFxuICAgICAgY29uc29sZVByb3RvY29sVmVyc2lvbjogQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICAgIH0pO1xuICAgIGxvZ2dlci5pbmZvKCdbSW5nZXN0Um91dGVzXSBDb25zb2xlIHNlc3Npb24gcmVnaXN0ZXJlZCcsIHsgc2Vzc2lvbklkOiBjb25zb2xlSWQsIHBpZDogcHJvY2Vzcy5waWQgfSk7XG4gIH1cblxuICByZXR1cm4geyByb3V0ZXIsIGdldFNlc3Npb25zLCBpbXBvcnRTZXNzaW9ucywgcmVnaXN0ZXJMZWFkZXJTZXNzaW9uLCByZWdpc3RlckNvbnNvbGVTZXNzaW9uIH07XG59XG4iXX0=
@@ -45,6 +45,12 @@ export declare class SessionNamePool {
45
45
  * @param isLeader - If true, follower-only names (e.g., Punch) are excluded
46
46
  */
47
47
  assign(sessionId: string, isLeader?: boolean): string;
48
+ /**
49
+ * Preserve an existing human-facing assignment during leadership handoff.
50
+ * If the requested name is already taken by another live session, the pool
51
+ * falls back to normal assignment logic rather than creating a duplicate.
52
+ */
53
+ adopt(sessionId: string, name: string, isLeader?: boolean): string;
48
54
  /**
49
55
  * Release a name back to the pool with a cooldown period.
50
56
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SessionNames.d.ts","sourceRoot":"","sources":["../../../src/web/console/SessionNames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAmF7C,CAAC;AAiBF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAqD5C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AA8ED;;GAEG;AACH,qBAAa,eAAe;IAC1B,oEAAoE;IACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,uCAAuC;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAC3D,0CAA0C;IAC1C,OAAO,CAAC,QAAQ,CAAuB;IAEvC;;;;;OAKG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,MAAM;IAuCnD;;OAEG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAehC;;OAEG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI9C;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK/C;;OAEG;IACH,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAI7B,OAAO,CAAC,cAAc;CAIvB"}
1
+ {"version":3,"file":"SessionNames.d.ts","sourceRoot":"","sources":["../../../src/web/console/SessionNames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAmF7C,CAAC;AAiBF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAqD5C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AA8ED;;GAEG;AACH,qBAAa,eAAe;IAC1B,oEAAoE;IACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,uCAAuC;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAC3D,0CAA0C;IAC1C,OAAO,CAAC,QAAQ,CAAuB;IAEvC;;;;;OAKG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,MAAM;IAuCnD;;;;OAIG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,MAAM;IAiBhE;;OAEG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAehC;;OAEG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI9C;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK/C;;OAEG;IACH,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAI7B,OAAO,CAAC,cAAc;CAIvB"}
@@ -279,6 +279,25 @@ export class SessionNamePool {
279
279
  logger.warn(`[SessionNames] Name pool exhausted, using fallback '${fallback}' for ${sessionId}`);
280
280
  return fallback;
281
281
  }
282
+ /**
283
+ * Preserve an existing human-facing assignment during leadership handoff.
284
+ * If the requested name is already taken by another live session, the pool
285
+ * falls back to normal assignment logic rather than creating a duplicate.
286
+ */
287
+ adopt(sessionId, name, isLeader = false) {
288
+ const existing = this.assigned.get(sessionId);
289
+ if (existing)
290
+ return existing;
291
+ this.flushCooldowns();
292
+ if (!this.nameToSession.has(name) && !(isLeader && FOLLOWER_ONLY_NAMES.has(name))) {
293
+ this.assigned.set(sessionId, name);
294
+ this.nameToSession.set(name, sessionId);
295
+ this.cooldown = this.cooldown.filter(entry => entry.name !== name);
296
+ logger.debug(`[SessionNames] Adopted '${name}' for ${sessionId}`);
297
+ return name;
298
+ }
299
+ return this.assign(sessionId, isLeader);
300
+ }
282
301
  /**
283
302
  * Release a name back to the pool with a cooldown period.
284
303
  */
@@ -318,4 +337,4 @@ export class SessionNamePool {
318
337
  this.cooldown = this.cooldown.filter(c => (now - c.releasedAt) < NAME_COOLDOWN_MS);
319
338
  }
320
339
  }
321
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Vzc2lvbk5hbWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dlYi9jb25zb2xlL1Nlc3Npb25OYW1lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBc0I7SUFDakQsd0JBQXdCO0lBQ3hCLE9BQU87SUFDUCxNQUFNO0lBQ04sV0FBVztJQUNYLFlBQVk7SUFDWixZQUFZO0lBQ1osU0FBUztJQUNULFVBQVU7SUFFVix1QkFBdUI7SUFDdkIsUUFBUTtJQUNSLE9BQU87SUFDUCxRQUFRO0lBQ1IsT0FBTztJQUNQLFNBQVM7SUFDVCxPQUFPO0lBQ1AsU0FBUztJQUNULFNBQVM7SUFFVCx3QkFBd0I7SUFDeEIsT0FBTztJQUNQLE9BQU87SUFFUCxrQkFBa0I7SUFDbEIsT0FBTztJQUNQLFdBQVc7SUFFWCxnQkFBZ0I7SUFDaEIsUUFBUTtJQUNSLE1BQU07SUFDTixPQUFPO0lBQ1AsTUFBTTtJQUNOLE9BQU87SUFFUCwwQkFBMEI7SUFDMUIsVUFBVTtJQUNWLFVBQVU7SUFDVixRQUFRO0lBQ1IsTUFBTTtJQUVOLHlCQUF5QjtJQUN6QixTQUFTO0lBQ1QsUUFBUTtJQUNSLFdBQVc7SUFDWCxZQUFZO0lBQ1osV0FBVztJQUVYLHVCQUF1QjtJQUN2QixPQUFPO0lBQ1AsU0FBUztJQUNULFFBQVE7SUFDUixRQUFRO0lBRVIsd0JBQXdCO0lBQ3hCLFlBQVk7SUFDWixjQUFjO0lBQ2QsV0FBVztJQUNYLFdBQVc7SUFFWCx3QkFBd0I7SUFDeEIsTUFBTTtJQUVOLGVBQWU7SUFDZixPQUFPO0lBQ1AsT0FBTztJQUVQLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1IsS0FBSztJQUNMLFNB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SUFBSSxVQUFVLFNBQVMsY0FBYyxnQkFBZ0IsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxTQUFpQjtRQUN2QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVEsQ0FBQyxTQUFpQjtRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNO1FBQ0osT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztJQUNyRixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZyaWVuZGx5IHNlc3Npb24gbmFtZXMgZHJhd24gZnJvbSBmYW1vdXMgcHVwcGV0cywgbWFyaW9uZXR0ZXMsXG4gKiBhbmQgcHVwcGV0IGNoYXJhY3RlcnMgdGhyb3VnaG91dCBoaXN0b3J5LlxuICpcbiAqIE5hbWVzIGFyZSBhc3NpZ25lZCBmcm9tIGEgcG9vbCBhbmQgcmV0dXJuZWQgYWZ0ZXIgYSBjb29sZG93biBwZXJpb2RcbiAqIHdoZW4gc2Vzc2lvbnMgZW5kLiBUaGlzIGtlZXBzIHRoZSBhY3RpdmUgc2Vzc2lvbiBsaXN0IGh1bWFuLXJlYWRhYmxlXG4gKiBhbmQgb24tYnJhbmQgZm9yIERvbGxob3VzZU1DUC5cbiAqXG4gKiBAc2luY2UgdjIuMS4wIOKAlCBJc3N1ZSAjMTcwMFxuICovXG5cbmltcG9ydCB7IHJhbmRvbUludCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5cbi8qKlxuICogRmFtb3VzIHB1cHBldHMsIG1hcmlvbmV0dGVzLCBhbmQgcHVwcGV0IGNoYXJhY3RlcnMgZnJvbSBhcm91bmQgdGhlIHdvcmxkLlxuICogT3JkZXIgZG9lc24ndCBtYXR0ZXIg4oCUIHRoZSBwb29sIGlzIHNodWZmbGVkIG9uIHN0YXJ0dXAuXG4gKi9cbmV4cG9ydCBjb25zdCBBTExfUFVQUEVUX05BTUVTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgLy8gQ2xhc3NpYyAmIHRyYWRpdGlvbmFsXG4gICdQdW5jaCcsXG4gICdKdWR5JyxcbiAgJ1Bpbm9jY2hpbycsXG4gICdQZXRyb3VjaGthJyxcbiAgJ1B1bGNpbmVsbGEnLFxuICAnR3VpZ25vbCcsXG4gICdLYXNwZXJsZScsXG5cbiAgLy8gTXVwcGV0cyAmIEppbSBIZW5zb25cbiAgJ0tlcm1pdCcsXG4gICdQaWdneScsXG4gICdGb3p6aWUnLFxuICAnR29uem8nLFxuICAnU2Nvb3RlcicsXG4gICdSb3dsZicsXG4gICdXYWxkb3JmJyxcbiAgJ1N0YXRsZXInLFxuXG4gIC8vIEt1a2xhLCBGcmFuIGFuZCBPbGxpZVxuICAnS3VrbGEnLFxuICAnT2xsaWUnLFxuXG4gIC8vIEhvd2R5IERvb2R5IGVyYVxuICAnSG93ZHknLFxuICAnQ2xhcmFiZWxsJyxcblxuICAvLyBTZXNhbWUgU3RyZWV0XG4gICdHcm92ZXInLFxuICAnRWxtbycsXG4gICdFcm5pZScsXG4gICdCZXJ0JyxcbiAgJ09zY2FyJyxcblxuICAvLyBWZW50cmlsb3F1aXN0ICYgdmFyaWV0eVxuICAnTW9ydGltZXInLFxuICAnTGFtYmNob3AnLFxuICAnTWFkYW1lJyxcbiAgJ1RvcG8nLFxuXG4gIC8vIEludGVybmF0aW9uYWwgcHVwcGV0cnlcbiAgJ0J1bnJha3UnLFxuICAnV2F5YW5nJyxcbiAgJ1BldHJ1c2hrYScsXG4gICdIYW5uZXNjaGVuJyxcbiAgJ1ZpdGV6c2xhdicsXG5cbiAgLy8gTW9kZXJuICYgcG9wIGN1bHR1cmVcbiAgJ1NhbGVtJyxcbiAgJ1RyaXVtcGgnLFxuICAnUGVhbnV0JyxcbiAgJ0FjaG1lZCcsXG5cbiAgLy8gTWFyaW9uZXR0ZSB0cmFkaXRpb25zXG4gICdGYW50b2NjaW5pJyxcbiAgJ1NhbHRpbWJhbnF1ZScsXG4gICdCdXJhdHRpbm8nLFxuICAnSGFybGVxdWluJyxcblxuICAvLyBEb2xsaG91c2UgKFRWIHNlcmllcylcbiAgJ0VjaG8nLFxuXG4gIC8vIEluc2lkZSBqb2tlc1xuICAnU3Bpa2UnLFxuICAnQW5nZWwnLFxuXG4gIC8vIENsYXNzaWMgZG9sbHNcbiAgJ0JhcmJpZScsXG4gICdLZW4nLFxuICAnU2tpcHBlcicsXG4gICdNaWRnZScsXG4gICdDaHJpc3RpZScsXG4gICdBbm5pZScsXG4gICdBbmR5JyxcbiAgJ0NhdGh5JyxcbiAgJ1RlZGR5JyxcbiAgJ1hhdmllcicsXG4gICdTdHJhd2JlcnJ5JyxcbiAgJ0JseXRoZScsXG4gICdHaW5ueScsXG4gICdCZXRzeScsXG4gICdNYWRlbGluZScsXG5dO1xuXG4vKiogTmFtZXMgdGhhdCBjYW4gbmV2ZXIgYmUgYXNzaWduZWQgdG8gYSBsZWFkZXIgc2Vzc2lvbiAqL1xuY29uc3QgRk9MTE9XRVJfT05MWV9OQU1FUyA9IG5ldyBTZXQoWydQdW5jaCddKTtcblxuLyoqIEZpc2hlci1ZYXRlcyBzaHVmZmxlIHVzaW5nIGNyeXB0by5yYW5kb21JbnQgKHVuYmlhc2VkLCBubyBtb2R1bG8pICovXG5mdW5jdGlvbiBzaHVmZmxlQXJyYXk8VD4oYXJyOiBUW10pOiBUW10ge1xuICBmb3IgKGxldCBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICBjb25zdCBqID0gcmFuZG9tSW50KGkgKyAxKTtcbiAgICBbYXJyW2ldLCBhcnJbal1dID0gW2FycltqXSwgYXJyW2ldXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG4vKiogU2h1ZmZsZWQgY29weSBvZiB0aGUgbmFtZSBwb29sIOKAlCByYW5kb21pemVkIG9uIGVhY2ggcHJvY2VzcyBzdGFydCAqL1xuY29uc3QgUFVQUEVUX05BTUVTOiBzdHJpbmdbXSA9IHNodWZmbGVBcnJheShbLi4uQUxMX1BVUFBFVF9OQU1FU10pO1xuXG4vKipcbiAqIEljb25pYyBhdHRpcmUgYW5kIGFjY2Vzc29yaWVzIGRyYXduIGZyb20gZmFtb3VzIGRvbGxzLCBwdXBwZXRzLCBhbmRcbiAqIHRoZWF0cmljYWwgY2hhcmFjdGVycyB0aHJvdWdob3V0IGhpc3RvcnkuIFVzZWQgdG8gbmFtZSBjb25zb2xlIHRva2Vuc1xuICogc28gdGhleSBuZXZlciBjb2xsaWRlIHdpdGggdGhlIHNlc3Npb24gcHVwcGV0LW5hbWUgcG9vbCAoIzE4NzEpLlxuICpcbiAqIE5hbWVzIGV2b2tlIGNvc3R1bWUgcGllY2VzIOKAlCBhIHRva2VuIGlzIHNvbWV0aGluZyB5b3Ugd2VhciBvciBjYXJyeSxcbiAqIG5vdCBhIHBlcnNvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEFMTF9UT0tFTl9OQU1FUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gIC8vIFZpY3RvcmlhbiAmIHRoZWF0cmljYWxcbiAgJ1RvcCBIYXQnLFxuICAnTW9ub2NsZScsXG4gICdUcmVuY2ggQ29hdCcsXG4gICdPcGVyYSBDYXBlJyxcbiAgJ09wZXJhIEdsb3ZlcycsXG4gICdWZWx2ZXQgQ2xvYWsnLFxuICAnTGFjZSBDb2xsYXInLFxuICAnU2lsayBDcmF2YXQnLFxuICAnV2Fpc3Rjb2F0JyxcbiAgJ0dpbHQgQnV0dG9uJyxcblxuICAvLyBQaGFudG9tLCBtYXNrcywgbXlzdGVyeVxuICAnSGFsZiBNYXNrJyxcbiAgJ0RvbWlubyBNYXNrJyxcbiAgJ0ZlYXRoZXJlZCBNYXNrJyxcblxuICAvLyBQdW5jaCAmIEp1ZHkgLyBIYXJsZXF1aW5cbiAgJ0plc3RlciBCZWxscycsXG4gICdEaWFtb25kIFN1aXQnLFxuICAnQmVsbCBDYXAnLFxuICAnU2xhcHN0aWNrJyxcbiAgJ1JlZCBOb3NlJyxcblxuICAvLyBQdXBwZXQgdHJhZGl0aW9uc1xuICAnTWFyaW9uZXR0ZSBTdHJpbmdzJyxcbiAgJ0NyYWNrZWQgUG9yY2VsYWluJyxcbiAgJ1BhcGllci1Nw6JjaMOpJyxcblxuICAvLyBDbGFzc2ljIGRvbGxzICYgY2hhcmFjdGVyc1xuICAnUGluayBDb3J2ZXR0ZScsXG4gICdSZWQgWWFybiBIYWlyJyxcbiAgJ1NhaWxvciBTdWl0JyxcbiAgJ1llbGxvdyBIYXQnLFxuICAnUnVieSBTbGlwcGVycycsXG4gICdHbGFzcyBTbGlwcGVyJyxcbiAgJ0JsdWUgUmliYm9uJyxcbiAgJ1N0cmlwZWQgU3RvY2tpbmdzJyxcblxuICAvLyBXaXphcmQgLyB3aXRjaCAvIGZhbnRhc3lcbiAgJ1BvaW50ZWQgSGF0JyxcbiAgJ0Jyb29tc3RpY2snLFxuICAnU2lsdmVyIFdhbmQnLFxuICAnVGluIENyb3duJyxcbiAgJ1N0cmF3IEhhdCcsXG5cbiAgLy8gQWR2ZW50dXJlICYgbXlzdGVyeVxuICAnRGVlcnN0YWxrZXInLFxuICAnTWFnbmlmeWluZyBHbGFzcycsXG4gICdGZWF0aGVyZWQgQ2FwJyxcbiAgJ1NpbHZlciBCdWNrbGUnLFxuICAnV2lja2VyIEJhc2tldCcsXG5dO1xuXG4vKipcbiAqIFBpY2sgYSByYW5kb20gdG9rZW4gbmFtZSBmcm9tIHRoZSBhdHRpcmUgcG9vbC5cbiAqIFVzZWQgYnkgdGhlIGNvbnNvbGUgdG9rZW4gbW9kdWxlIHRvIG5hbWUgbmV3bHkgY3JlYXRlZCB0b2tlbnMgKCMxODcxKS5cbiAqIERyYXduIGZyb20gYSBzZXBhcmF0ZSBwb29sIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIHNlc3Npb24gcHVwcGV0IG5hbWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGlja1JhbmRvbVRva2VuTmFtZSgpOiBzdHJpbmcge1xuICByZXR1cm4gQUxMX1RPS0VOX05BTUVTW3JhbmRvbUludChBTExfVE9LRU5fTkFNRVMubGVuZ3RoKV07XG59XG5cbi8qKlxuICogQ2Fub25pY2FsIGNvbG9ycyBmb3IgZWFjaCBwdXBwZXQgY2hhcmFjdGVyLlxuICogQWRqdXN0ZWQgZnJvbSB0cnVlIGNhbm9uaWNhbCBjb2xvcnMgZm9yIFVJIHJlYWRhYmlsaXR5IGluIGJvdGggbGlnaHQvZGFyayB0aGVtZXMuXG4gKi9cbmNvbnN0IFBVUFBFVF9DT0xPUlM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICdQdW5jaCc6ICAgICAgICAnI0RDMTQzQycsIC8vIGNyaW1zb24gcmVkIGNvc3R1bWVcbiAgJ0p1ZHknOiAgICAgICAgICcjMUU5MEZGJywgLy8gYmx1ZSBkcmVzc1xuICAnUGlub2NjaGlvJzogICAgJyNEQUE1MjAnLCAvLyBnb2xkZW5yb2QgKHdvb2RlbiwgeWVsbG93IGhhdClcbiAgJ1BldHJvdWNoa2EnOiAgICcjQjBCRUM1JywgLy8gYmx1ZS1ncmF5ICh3aGl0ZSBjb3N0dW1lLCBhZGp1c3RlZCBmb3IgdmlzaWJpbGl0eSlcbiAgJ1B1bGNpbmVsbGEnOiAgICcjOTBBNEFFJywgLy8gZ3JheS1ibHVlICh3aGl0ZSBjb3N0dW1lLCBhZGp1c3RlZClcbiAgJ0d1aWdub2wnOiAgICAgICcjOEI0NTEzJywgLy8gc2FkZGxlIGJyb3duXG4gICdLYXNwZXJsZSc6ICAgICAnI0ZGMDAwMCcsIC8vIHJlZCBwb2ludGVkIGNhcFxuICAnS2VybWl0JzogICAgICAgJyM0Q0FGNTAnLCAvLyBncmVlbiBmcm9nXG4gICdQaWdneSc6ICAgICAgICAnI0U5MUU4QycsIC8vIGhvdCBwaW5rIChnbGFtb3JvdXMgcGlnKVxuICAnRm96emllJzogICAgICAgJyNDQzc3MjInLCAvLyBvY2hyZSBicm93biBiZWFyXG4gICdHb256byc6ICAgICAgICAnIzQxNjlFMScsIC8vIHJveWFsIGJsdWVcbiAgJ1Njb290ZXInOiAgICAgICcjRkY4QzAwJywgLy8gZGFyayBvcmFuZ2VcbiAgJ1Jvd2xmJzogICAgICAgICcjOEI2OTE0JywgLy8gZGFyayBnb2xkZW5yb2QgYnJvd24gZG9nXG4gICdXYWxkb3JmJzogICAgICAnIzU1NkIyRicsIC8vIGRhcmsgb2xpdmUgZ3JlZW5cbiAgJ1N0YXRsZXInOiAgICAgICcjNzA4MDkwJywgLy8gc2xhdGUgZ3JheVxuICAnS3VrbGEnOiAgICAgICAgJyNGRjAwMDAnLCAvLyByZWQgbm9zZSBhbmQgY29zdHVtZVxuICAnT2xsaWUnOiAgICAgICAgJyMyMjhCMjInLCAvLyBmb3Jlc3QgZ3JlZW4gZHJhZ29uXG4gICdIb3dkeSc6ICAgICAgICAnI0UyNzI1QicsIC8vIHRlcnJhIGNvdHRhXG4gICdDbGFyYWJlbGwnOiAgICAnI0ZGQ0MwMCcsIC8vIGJyaWdodCB5ZWxsb3cgY2xvd25cbiAgJ0dyb3Zlcic6ICAgICAgICcjNDY4MkI0JywgLy8gc3RlZWwgYmx1ZVxuICAnRWxtbyc6ICAgICAgICAgJyNGRjI0MDAnLCAvLyBzY2FybGV0IHJlZFxuICAnRXJuaWUnOiAgICAgICAgJyNGNEE0NjAnLCAvLyBzYW5keSBicm93blxuICAnQmVydCc6ICAgICAgICAgJyNGRkQ3MDAnLCAvLyBnb2xkIHllbGxvd1xuICAnT3NjYXInOiAgICAgICAgJyM2QjhFMjMnLCAvLyBvbGl2ZSBkcmFiIGdyZWVuXG4gICdNb3J0aW1lcic6ICAgICAnI0RFQjg4NycsIC8vIGJ1cmx5d29vZFxuICAnTGFtYmNob3AnOiAgICAgJyNENEM1QTknLCAvLyB3YXJtIGNyZWFtIChhZGp1c3RlZCBmcm9tIHB1cmUgd2hpdGUpXG4gICdNYWRhbWUnOiAgICAgICAnIzgwMDA4MCcsIC8vIHB1cnBsZVxuICAnVG9wbyc6ICAgICAgICAgJyNBMEEwQTAnLCAvLyBzaWx2ZXIgZ3JheVxuICAnQnVucmFrdSc6ICAgICAgJyNCMjIyMjInLCAvLyBmaXJlYnJpY2sgcmVkXG4gICdXYXlhbmcnOiAgICAgICAnIzZCNDIyNicsIC8vIGRhcmsgbGVhdGhlciBicm93biAobGlnaHRlbmVkIGZvciB2aXNpYmlsaXR5KVxuICAnUGV0cnVzaGthJzogICAgJyNGRjQ1MDAnLCAvLyBvcmFuZ2UgcmVkXG4gICdIYW5uZXNjaGVuJzogICAnI0NENUM1QycsIC8vIGluZGlhbiByZWRcbiAgJ1ZpdGV6c2xhdic6ICAgICcjQjg4NjBCJywgLy8gZGFyayBnb2xkZW5yb2RcbiAgJ1NhbGVtJzogICAgICAgICcjNEE0QTRBJywgLy8gZGFyayBncmF5IChibGFjayBjYXQsIGxpZ2h0ZW5lZCBmb3IgdmlzaWJpbGl0eSlcbiAgJ1RyaXVtcGgnOiAgICAgICcjNkY0RTM3JywgLy8gY29mZmVlIGJyb3duXG4gICdQZWFudXQnOiAgICAgICAnIzkzNzBEQicsIC8vIG1lZGl1bSBwdXJwbGVcbiAgJ0FjaG1lZCc6ICAgICAgICcjQzhCRkE5JywgLy8gYm9uZS9wYXJjaG1lbnQgKGxpZ2h0ZW5lZCBmcm9tIGJlaWdlKVxuICAnRmFudG9jY2luaSc6ICAgJyNDNDFFM0EnLCAvLyBjYXJkaW5hbCByZWRcbiAgJ1NhbHRpbWJhbnF1ZSc6ICcjREFBNTIwJywgLy8gZ29sZGVucm9kXG4gICdCdXJhdHRpbm8nOiAgICAnI0QyNjkxRScsIC8vIGNob2NvbGF0ZSBicm93blxuICAnSGFybGVxdWluJzogICAgJyNFNjAwMjYnLCAvLyBkaWFtb25kIHJlZFxuICAnRWNobyc6ICAgICAgICAgJyM1QzYzNzAnLCAvLyBzbGF0ZSAoZGFyayBhdHRpcmUsIGxpZ2h0ZW5lZCBmb3IgdmlzaWJpbGl0eSlcbiAgJ1NwaWtlJzogICAgICAgICcjRThEQ0M4JywgLy8gcGxhdGludW0vYmxlYWNoIChsaWdodGVuZWQgZm9yIHJlYWRhYmlsaXR5KVxuICAnQW5nZWwnOiAgICAgICAgJyMzRDNEM0QnLCAvLyBjaGFyY29hbCAoYmxhY2sgZHVzdGVyLCBsaWdodGVuZWQgZm9yIHZpc2liaWxpdHkpXG5cbiAgLy8gQ2xhc3NpYyBkb2xsc1xuICAnQmFyYmllJzogICAgICAgJyNFOTFFOTAnLCAvLyBCYXJiaWUgcGlua1xuICAnS2VuJzogICAgICAgICAgJyM0QTkwRDknLCAvLyBLZW4gYmx1ZVxuICAnU2tpcHBlcic6ICAgICAgJyNGRjZCNkInLCAvLyBjb3JhbCByZWRcbiAgJ01pZGdlJzogICAgICAgICcjRTg3MDQwJywgLy8gd2FybSBhdWJ1cm5cbiAgJ0NocmlzdGllJzogICAgICcjQzA2MDMwJywgLy8gd2FybSBicm93blxuICAnQW5uaWUnOiAgICAgICAgJyNFMDMwMzAnLCAvLyBSYWdnZWR5IEFubiByZWQgeWFybiBoYWlyXG4gICdBbmR5JzogICAgICAgICAnIzMwNzBDMCcsIC8vIFJhZ2dlZHkgQW5keSBibHVlIHNhaWxvciBvdXRmaXRcbiAgJ0NhdGh5JzogICAgICAgICcjRDRBNTc0JywgLy8gQ2hhdHR5IENhdGh5IHZpbnRhZ2UgdGFuXG4gICdUZWRkeSc6ICAgICAgICAnI0EwNzg0QScsIC8vIFRlZGR5IFJ1eHBpbiBiZWFyIGJyb3duXG4gICdYYXZpZXInOiAgICAgICAnIzVBQUY0QScsIC8vIFhhdmllciBSb2JlcnRzIC8gQ2FiYmFnZSBQYXRjaCBncmVlblxuICAnU3RyYXdiZXJyeSc6ICAgJyNFODQ0NUEnLCAvLyBzdHJhd2JlcnJ5IHJlZC1waW5rXG4gICdCbHl0aGUnOiAgICAgICAnIzdCNjhFRScsIC8vIGJpZy1leWVkIHB1cnBsZVxuICAnR2lubnknOiAgICAgICAgJyM1QjlCRDUnLCAvLyBjbGFzc2ljIGJsdWUgZHJlc3NcbiAgJ0JldHN5JzogICAgICAgICcjREQ3Njk0JywgLy8gcm9zZSBwaW5rXG4gICdNYWRlbGluZSc6ICAgICAnI0ZGRDcwMCcsIC8vIHllbGxvdyBoYXRcbn07XG5cbi8qKiBDb29sZG93biBwZXJpb2QgYmVmb3JlIGEgcmVsZWFzZWQgbmFtZSBjYW4gYmUgcmV1c2VkIChtcykgKi9cbmNvbnN0IE5BTUVfQ09PTERPV05fTVMgPSA1ICogNjBfMDAwOyAvLyA1IG1pbnV0ZXNcblxuaW50ZXJmYWNlIENvb2xkb3duRW50cnkge1xuICBuYW1lOiBzdHJpbmc7XG4gIHJlbGVhc2VkQXQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBNYW5hZ2VzIGZyaWVuZGx5IHNlc3Npb24gbmFtZSBhc3NpZ25tZW50IGZyb20gdGhlIHB1cHBldCBuYW1lIHBvb2wuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXNzaW9uTmFtZVBvb2wge1xuICAvKiogTmFtZXMgY3VycmVudGx5IGFzc2lnbmVkIHRvIGFjdGl2ZSBzZXNzaW9uczogc2Vzc2lvbklkIOKGkiBuYW1lICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYXNzaWduZWQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAvKiogUmV2ZXJzZSBsb29rdXA6IG5hbWUg4oaSIHNlc3Npb25JZCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG5hbWVUb1Nlc3Npb24gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAvKiogTmFtZXMgaW4gY29vbGRvd24gYWZ0ZXIgc2Vzc2lvbiBlbmQgKi9cbiAgcHJpdmF0ZSBjb29sZG93bjogQ29vbGRvd25FbnRyeVtdID0gW107XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBhIGZyaWVuZGx5IG5hbWUgdG8gYSBzZXNzaW9uLlxuICAgKiBSZXR1cm5zIGFuIGV4aXN0aW5nIGFzc2lnbm1lbnQgaWYgdGhlIHNlc3Npb24gYWxyZWFkeSBoYXMgb25lLlxuICAgKlxuICAgKiBAcGFyYW0gaXNMZWFkZXIgLSBJZiB0cnVlLCBmb2xsb3dlci1vbmx5IG5hbWVzIChlLmcuLCBQdW5jaCkgYXJlIGV4Y2x1ZGVkXG4gICAqL1xuICBhc3NpZ24oc2Vzc2lvbklkOiBzdHJpbmcsIGlzTGVhZGVyID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIC8vIEFscmVhZHkgYXNzaWduZWQ/XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmFzc2lnbmVkLmdldChzZXNzaW9uSWQpO1xuICAgIGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuXG4gICAgLy8gRmx1c2ggZXhwaXJlZCBjb29sZG93bnNcbiAgICB0aGlzLmZsdXNoQ29vbGRvd25zKCk7XG5cbiAgICAvLyBGaW5kIGFuIGF2YWlsYWJsZSBuYW1lLCByZXNwZWN0aW5nIGxlYWRlciByZXN0cmljdGlvbnNcbiAgICBjb25zdCBjb29sZG93bk5hbWVzID0gbmV3IFNldCh0aGlzLmNvb2xkb3duLm1hcChjID0+IGMubmFtZSkpO1xuICAgIGNvbnN0IGF2YWlsYWJsZU5hbWUgPSBQVVBQRVRfTkFNRVMuZmluZChcbiAgICAgIG5hbWUgPT4gIXRoaXMubmFtZVRvU2Vzc2lvbi5oYXMobmFtZSkgJiZcbiAgICAgICAgICAgICAgIWNvb2xkb3duTmFtZXMuaGFzKG5hbWUpICYmXG4gICAgICAgICAgICAgICEoaXNMZWFkZXIgJiYgRk9MTE9XRVJfT05MWV9OQU1FUy5oYXMobmFtZSkpXG4gICAgKTtcblxuICAgIGlmIChhdmFpbGFibGVOYW1lKSB7XG4gICAgICB0aGlzLmFzc2lnbmVkLnNldChzZXNzaW9uSWQsIGF2YWlsYWJsZU5hbWUpO1xuICAgICAgdGhpcy5uYW1lVG9TZXNzaW9uLnNldChhdmFpbGFibGVOYW1lLCBzZXNzaW9uSWQpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbU2Vzc2lvbk5hbWVzXSBBc3NpZ25lZCAnJHthdmFpbGFibGVOYW1lfScgdG8gJHtzZXNzaW9uSWR9YCk7XG4gICAgICByZXR1cm4gYXZhaWxhYmxlTmFtZTtcbiAgICB9XG5cbiAgICAvLyBBbGwgbmFtZXMgaW4gdXNlIG9yIGNvb2xpbmcgZG93biDigJQgdHJ5IGNvb2xkb3duIG5hbWVzIChvbGRlc3QgZmlyc3QpXG4gICAgaWYgKHRoaXMuY29vbGRvd24ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgb2xkZXN0ID0gdGhpcy5jb29sZG93bi5zaGlmdCgpITtcbiAgICAgIHRoaXMuYXNzaWduZWQuc2V0KHNlc3Npb25JZCwgb2xkZXN0Lm5hbWUpO1xuICAgICAgdGhpcy5uYW1lVG9TZXNzaW9uLnNldChvbGRlc3QubmFtZSwgc2Vzc2lvbklkKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW1Nlc3Npb25OYW1lc10gQXNzaWduZWQgJyR7b2xkZXN0Lm5hbWV9JyB0byAke3Nlc3Npb25JZH0gKGVhcmx5IGNvb2xkb3duIHJlbGVhc2UpYCk7XG4gICAgICByZXR1cm4gb2xkZXN0Lm5hbWU7XG4gICAgfVxuXG4gICAgLy8gVHJ1bHkgZXhoYXVzdGVkIOKAlCBmYWxsIGJhY2sgdG8gdHJ1bmNhdGVkIHNlc3Npb24gSURcbiAgICBjb25zdCBmYWxsYmFjayA9IHNlc3Npb25JZC5zcGxpdCgnLScpWzFdIHx8IHNlc3Npb25JZC5zbGljZSgwLCA4KTtcbiAgICB0aGlzLmFzc2lnbmVkLnNldChzZXNzaW9uSWQsIGZhbGxiYWNrKTtcbiAgICBsb2dnZXIud2FybihgW1Nlc3Npb25OYW1lc10gTmFtZSBwb29sIGV4aGF1c3RlZCwgdXNpbmcgZmFsbGJhY2sgJyR7ZmFsbGJhY2t9JyBmb3IgJHtzZXNzaW9uSWR9YCk7XG4gICAgcmV0dXJuIGZhbGxiYWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2UgYSBuYW1lIGJhY2sgdG8gdGhlIHBvb2wgd2l0aCBhIGNvb2xkb3duIHBlcmlvZC5cbiAgICovXG4gIHJlbGVhc2Uoc2Vzc2lvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5hc3NpZ25lZC5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcblxuICAgIHRoaXMuYXNzaWduZWQuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAgdGhpcy5uYW1lVG9TZXNzaW9uLmRlbGV0ZShuYW1lKTtcblxuICAgIC8vIE9ubHkgY29vbGRvd24gcHVwcGV0IG5hbWVzLCBub3QgZmFsbGJhY2sgSURzXG4gICAgaWYgKFBVUFBFVF9OQU1FUy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgdGhpcy5jb29sZG93bi5wdXNoKHsgbmFtZSwgcmVsZWFzZWRBdDogRGF0ZS5ub3coKSB9KTtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoYFtTZXNzaW9uTmFtZXNdIFJlbGVhc2VkICcke25hbWV9JyBmcm9tICR7c2Vzc2lvbklkfSAoY29vbGRvd24gJHtOQU1FX0NPT0xET1dOX01TIC8gMTAwMH1zKWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnJpZW5kbHkgbmFtZSBmb3IgYSBzZXNzaW9uLCBvciB1bmRlZmluZWQgaWYgbm90IGFzc2lnbmVkLlxuICAgKi9cbiAgZ2V0TmFtZShzZXNzaW9uSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYXNzaWduZWQuZ2V0KHNlc3Npb25JZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjYW5vbmljYWwgY29sb3IgZm9yIGFuIGFzc2lnbmVkIHNlc3Npb24gbmFtZS5cbiAgICovXG4gIGdldENvbG9yKHNlc3Npb25JZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5hc3NpZ25lZC5nZXQoc2Vzc2lvbklkKTtcbiAgICByZXR1cm4gbmFtZSA/IChQVVBQRVRfQ09MT1JTW25hbWVdID8/IHVuZGVmaW5lZCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBjdXJyZW50IGFzc2lnbm1lbnRzLlxuICAgKi9cbiAgZ2V0QWxsKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgTWFwKHRoaXMuYXNzaWduZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaENvb2xkb3ducygpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuY29vbGRvd24gPSB0aGlzLmNvb2xkb3duLmZpbHRlcihjID0+IChub3cgLSBjLnJlbGVhc2VkQXQpIDwgTkFNRV9DT09MRE9XTl9NUyk7XG4gIH1cbn1cbiJdfQ==
340
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Vzc2lvbk5hbWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dlYi9jb25zb2xlL1Nlc3Npb25OYW1lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBc0I7SUFDakQsd0JBQXdCO0lBQ3hCLE9BQU87SUFDUCxNQUFNO0lBQ04sV0FBVztJQUNYLFlBQVk7SUFDWixZQUFZO0lBQ1osU0FBUztJQUNULFVBQVU7SUFFVix1QkFBdUI7SUFDdkIsUUFBUTtJQUNSLE9BQU87SUFDUCxRQUFRO0lBQ1IsT0FBTztJQUNQLFNBQVM7SUFDVCxPQUFPO0lBQ1AsU0FBUztJQUNULFNBQVM7SUFFVCx3QkFBd0I7SUFDeEIsT0FBTztJQUNQLE9BQU87SUFFUCxrQkFBa0I7SUFDbEIsT0FBTztJQUNQLFdBQVc7SUFFWCxnQkFBZ0I7SUFDaEIsUUFBUTtJQUNSLE1BQU07SUFDTixPQUFPO0lBQ1AsTUFBTTtJQUNOLE9BQU87SUFFUCwwQkFBMEI7SUFDMUIsVUFBVTtJQUNWLFVBQVU7SUFDVixRQUFRO0lBQ1IsTUFBTTtJQUVOLHlCQUF5QjtJQUN6QixTQUFTO0lBQ1QsUUFBUTtJQUNSLFdBQVc7SUFDWCxZQUFZO0lBQ1osV0FBVztJQUVYLHVCQUF1QjtJQUN2QixPQUFPO0lBQ1AsU0FBUztJQUNULFFBQVE7SUFDUixRQUFRO0lBRVIsd0JBQXdCO0lBQ3hCLFlBQVk7SUFDWixjQUFjO0lBQ2QsV0FBVztJQUNYLFdBQVc7SUFFWCx3QkFBd0I7SUFDeEIsTUFBTTtJQUVOLGVBQWU7SUFDZixPQUFPO0lBQ1AsT0FBTztJQUVQLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1IsS0FBSztJQUNMLFNB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LENBQUMsU0FBaUI7UUFDeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDL0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNKLE9BQU8sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxjQUFjO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUM7SUFDckYsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGcmllbmRseSBzZXNzaW9uIG5hbWVzIGRyYXduIGZyb20gZmFtb3VzIHB1cHBldHMsIG1hcmlvbmV0dGVzLFxuICogYW5kIHB1cHBldCBjaGFyYWN0ZXJzIHRocm91Z2hvdXQgaGlzdG9yeS5cbiAqXG4gKiBOYW1lcyBhcmUgYXNzaWduZWQgZnJvbSBhIHBvb2wgYW5kIHJldHVybmVkIGFmdGVyIGEgY29vbGRvd24gcGVyaW9kXG4gKiB3aGVuIHNlc3Npb25zIGVuZC4gVGhpcyBrZWVwcyB0aGUgYWN0aXZlIHNlc3Npb24gbGlzdCBodW1hbi1yZWFkYWJsZVxuICogYW5kIG9uLWJyYW5kIGZvciBEb2xsaG91c2VNQ1AuXG4gKlxuICogQHNpbmNlIHYyLjEuMCDigJQgSXNzdWUgIzE3MDBcbiAqL1xuXG5pbXBvcnQgeyByYW5kb21JbnQgfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuXG4vKipcbiAqIEZhbW91cyBwdXBwZXRzLCBtYXJpb25ldHRlcywgYW5kIHB1cHBldCBjaGFyYWN0ZXJzIGZyb20gYXJvdW5kIHRoZSB3b3JsZC5cbiAqIE9yZGVyIGRvZXNuJ3QgbWF0dGVyIOKAlCB0aGUgcG9vbCBpcyBzaHVmZmxlZCBvbiBzdGFydHVwLlxuICovXG5leHBvcnQgY29uc3QgQUxMX1BVUFBFVF9OQU1FUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gIC8vIENsYXNzaWMgJiB0cmFkaXRpb25hbFxuICAnUHVuY2gnLFxuICAnSnVkeScsXG4gICdQaW5vY2NoaW8nLFxuICAnUGV0cm91Y2hrYScsXG4gICdQdWxjaW5lbGxhJyxcbiAgJ0d1aWdub2wnLFxuICAnS2FzcGVybGUnLFxuXG4gIC8vIE11cHBldHMgJiBKaW0gSGVuc29uXG4gICdLZXJtaXQnLFxuICAnUGlnZ3knLFxuICAnRm96emllJyxcbiAgJ0dvbnpvJyxcbiAgJ1Njb290ZXInLFxuICAnUm93bGYnLFxuICAnV2FsZG9yZicsXG4gICdTdGF0bGVyJyxcblxuICAvLyBLdWtsYSwgRnJhbiBhbmQgT2xsaWVcbiAgJ0t1a2xhJyxcbiAgJ09sbGllJyxcblxuICAvLyBIb3dkeSBEb29keSBlcmFcbiAgJ0hvd2R5JyxcbiAgJ0NsYXJhYmVsbCcsXG5cbiAgLy8gU2VzYW1lIFN0cmVldFxuICAnR3JvdmVyJyxcbiAgJ0VsbW8nLFxuICAnRXJuaWUnLFxuICAnQmVydCcsXG4gICdPc2NhcicsXG5cbiAgLy8gVmVudHJpbG9xdWlzdCAmIHZhcmlldHlcbiAgJ01vcnRpbWVyJyxcbiAgJ0xhbWJjaG9wJyxcbiAgJ01hZGFtZScsXG4gICdUb3BvJyxcblxuICAvLyBJbnRlcm5hdGlvbmFsIHB1cHBldHJ5XG4gICdCdW5yYWt1JyxcbiAgJ1dheWFuZycsXG4gICdQZXRydXNoa2EnLFxuICAnSGFubmVzY2hlbicsXG4gICdWaXRlenNsYXYnLFxuXG4gIC8vIE1vZGVybiAmIHBvcCBjdWx0dXJlXG4gICdTYWxlbScsXG4gICdUcml1bXBoJyxcbiAgJ1BlYW51dCcsXG4gICdBY2htZWQnLFxuXG4gIC8vIE1hcmlvbmV0dGUgdHJhZGl0aW9uc1xuICAnRmFudG9jY2luaScsXG4gICdTYWx0aW1iYW5xdWUnLFxuICAnQnVyYXR0aW5vJyxcbiAgJ0hhcmxlcXVpbicsXG5cbiAgLy8gRG9sbGhvdXNlIChUViBzZXJpZXMpXG4gICdFY2hvJyxcblxuICAvLyBJbnNpZGUgam9rZXNcbiAgJ1NwaWtlJyxcbiAgJ0FuZ2VsJyxcblxuICAvLyBDbGFzc2ljIGRvbGxzXG4gICdCYXJiaWUnLFxuICAnS2VuJyxcbiAgJ1NraXBwZXInLFxuICAnTWlkZ2UnLFxuICAnQ2hyaXN0aWUnLFxuICAnQW5uaWUnLFxuICAnQW5keScsXG4gICdDYXRoeScsXG4gICdUZWRkeScsXG4gICdYYXZpZXInLFxuICAnU3RyYXdiZXJyeScsXG4gICdCbHl0aGUnLFxuICAnR2lubnknLFxuICAnQmV0c3knLFxuICAnTWFkZWxpbmUnLFxuXTtcblxuLyoqIE5hbWVzIHRoYXQgY2FuIG5ldmVyIGJlIGFzc2lnbmVkIHRvIGEgbGVhZGVyIHNlc3Npb24gKi9cbmNvbnN0IEZPTExPV0VSX09OTFlfTkFNRVMgPSBuZXcgU2V0KFsnUHVuY2gnXSk7XG5cbi8qKiBGaXNoZXItWWF0ZXMgc2h1ZmZsZSB1c2luZyBjcnlwdG8ucmFuZG9tSW50ICh1bmJpYXNlZCwgbm8gbW9kdWxvKSAqL1xuZnVuY3Rpb24gc2h1ZmZsZUFycmF5PFQ+KGFycjogVFtdKTogVFtdIHtcbiAgZm9yIChsZXQgaSA9IGFyci5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgY29uc3QgaiA9IHJhbmRvbUludChpICsgMSk7XG4gICAgW2FycltpXSwgYXJyW2pdXSA9IFthcnJbal0sIGFycltpXV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLyoqIFNodWZmbGVkIGNvcHkgb2YgdGhlIG5hbWUgcG9vbCDigJQgcmFuZG9taXplZCBvbiBlYWNoIHByb2Nlc3Mgc3RhcnQgKi9cbmNvbnN0IFBVUFBFVF9OQU1FUzogc3RyaW5nW10gPSBzaHVmZmxlQXJyYXkoWy4uLkFMTF9QVVBQRVRfTkFNRVNdKTtcblxuLyoqXG4gKiBJY29uaWMgYXR0aXJlIGFuZCBhY2Nlc3NvcmllcyBkcmF3biBmcm9tIGZhbW91cyBkb2xscywgcHVwcGV0cywgYW5kXG4gKiB0aGVhdHJpY2FsIGNoYXJhY3RlcnMgdGhyb3VnaG91dCBoaXN0b3J5LiBVc2VkIHRvIG5hbWUgY29uc29sZSB0b2tlbnNcbiAqIHNvIHRoZXkgbmV2ZXIgY29sbGlkZSB3aXRoIHRoZSBzZXNzaW9uIHB1cHBldC1uYW1lIHBvb2wgKCMxODcxKS5cbiAqXG4gKiBOYW1lcyBldm9rZSBjb3N0dW1lIHBpZWNlcyDigJQgYSB0b2tlbiBpcyBzb21ldGhpbmcgeW91IHdlYXIgb3IgY2FycnksXG4gKiBub3QgYSBwZXJzb24uXG4gKi9cbmV4cG9ydCBjb25zdCBBTExfVE9LRU5fTkFNRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAvLyBWaWN0b3JpYW4gJiB0aGVhdHJpY2FsXG4gICdUb3AgSGF0JyxcbiAgJ01vbm9jbGUnLFxuICAnVHJlbmNoIENvYXQnLFxuICAnT3BlcmEgQ2FwZScsXG4gICdPcGVyYSBHbG92ZXMnLFxuICAnVmVsdmV0IENsb2FrJyxcbiAgJ0xhY2UgQ29sbGFyJyxcbiAgJ1NpbGsgQ3JhdmF0JyxcbiAgJ1dhaXN0Y29hdCcsXG4gICdHaWx0IEJ1dHRvbicsXG5cbiAgLy8gUGhhbnRvbSwgbWFza3MsIG15c3RlcnlcbiAgJ0hhbGYgTWFzaycsXG4gICdEb21pbm8gTWFzaycsXG4gICdGZWF0aGVyZWQgTWFzaycsXG5cbiAgLy8gUHVuY2ggJiBKdWR5IC8gSGFybGVxdWluXG4gICdKZXN0ZXIgQmVsbHMnLFxuICAnRGlhbW9uZCBTdWl0JyxcbiAgJ0JlbGwgQ2FwJyxcbiAgJ1NsYXBzdGljaycsXG4gICdSZWQgTm9zZScsXG5cbiAgLy8gUHVwcGV0IHRyYWRpdGlvbnNcbiAgJ01hcmlvbmV0dGUgU3RyaW5ncycsXG4gICdDcmFja2VkIFBvcmNlbGFpbicsXG4gICdQYXBpZXItTcOiY2jDqScsXG5cbiAgLy8gQ2xhc3NpYyBkb2xscyAmIGNoYXJhY3RlcnNcbiAgJ1BpbmsgQ29ydmV0dGUnLFxuICAnUmVkIFlhcm4gSGFpcicsXG4gICdTYWlsb3IgU3VpdCcsXG4gICdZZWxsb3cgSGF0JyxcbiAgJ1J1YnkgU2xpcHBlcnMnLFxuICAnR2xhc3MgU2xpcHBlcicsXG4gICdCbHVlIFJpYmJvbicsXG4gICdTdHJpcGVkIFN0b2NraW5ncycsXG5cbiAgLy8gV2l6YXJkIC8gd2l0Y2ggLyBmYW50YXN5XG4gICdQb2ludGVkIEhhdCcsXG4gICdCcm9vbXN0aWNrJyxcbiAgJ1NpbHZlciBXYW5kJyxcbiAgJ1RpbiBDcm93bicsXG4gICdTdHJhdyBIYXQnLFxuXG4gIC8vIEFkdmVudHVyZSAmIG15c3RlcnlcbiAgJ0RlZXJzdGFsa2VyJyxcbiAgJ01hZ25pZnlpbmcgR2xhc3MnLFxuICAnRmVhdGhlcmVkIENhcCcsXG4gICdTaWx2ZXIgQnVja2xlJyxcbiAgJ1dpY2tlciBCYXNrZXQnLFxuXTtcblxuLyoqXG4gKiBQaWNrIGEgcmFuZG9tIHRva2VuIG5hbWUgZnJvbSB0aGUgYXR0aXJlIHBvb2wuXG4gKiBVc2VkIGJ5IHRoZSBjb25zb2xlIHRva2VuIG1vZHVsZSB0byBuYW1lIG5ld2x5IGNyZWF0ZWQgdG9rZW5zICgjMTg3MSkuXG4gKiBEcmF3biBmcm9tIGEgc2VwYXJhdGUgcG9vbCB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBzZXNzaW9uIHB1cHBldCBuYW1lcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpY2tSYW5kb21Ub2tlbk5hbWUoKTogc3RyaW5nIHtcbiAgcmV0dXJuIEFMTF9UT0tFTl9OQU1FU1tyYW5kb21JbnQoQUxMX1RPS0VOX05BTUVTLmxlbmd0aCldO1xufVxuXG4vKipcbiAqIENhbm9uaWNhbCBjb2xvcnMgZm9yIGVhY2ggcHVwcGV0IGNoYXJhY3Rlci5cbiAqIEFkanVzdGVkIGZyb20gdHJ1ZSBjYW5vbmljYWwgY29sb3JzIGZvciBVSSByZWFkYWJpbGl0eSBpbiBib3RoIGxpZ2h0L2RhcmsgdGhlbWVzLlxuICovXG5jb25zdCBQVVBQRVRfQ09MT1JTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnUHVuY2gnOiAgICAgICAgJyNEQzE0M0MnLCAvLyBjcmltc29uIHJlZCBjb3N0dW1lXG4gICdKdWR5JzogICAgICAgICAnIzFFOTBGRicsIC8vIGJsdWUgZHJlc3NcbiAgJ1Bpbm9jY2hpbyc6ICAgICcjREFBNTIwJywgLy8gZ29sZGVucm9kICh3b29kZW4sIHllbGxvdyBoYXQpXG4gICdQZXRyb3VjaGthJzogICAnI0IwQkVDNScsIC8vIGJsdWUtZ3JheSAod2hpdGUgY29zdHVtZSwgYWRqdXN0ZWQgZm9yIHZpc2liaWxpdHkpXG4gICdQdWxjaW5lbGxhJzogICAnIzkwQTRBRScsIC8vIGdyYXktYmx1ZSAod2hpdGUgY29zdHVtZSwgYWRqdXN0ZWQpXG4gICdHdWlnbm9sJzogICAgICAnIzhCNDUxMycsIC8vIHNhZGRsZSBicm93blxuICAnS2FzcGVybGUnOiAgICAgJyNGRjAwMDAnLCAvLyByZWQgcG9pbnRlZCBjYXBcbiAgJ0tlcm1pdCc6ICAgICAgICcjNENBRjUwJywgLy8gZ3JlZW4gZnJvZ1xuICAnUGlnZ3knOiAgICAgICAgJyNFOTFFOEMnLCAvLyBob3QgcGluayAoZ2xhbW9yb3VzIHBpZylcbiAgJ0ZvenppZSc6ICAgICAgICcjQ0M3NzIyJywgLy8gb2NocmUgYnJvd24gYmVhclxuICAnR29uem8nOiAgICAgICAgJyM0MTY5RTEnLCAvLyByb3lhbCBibHVlXG4gICdTY29vdGVyJzogICAgICAnI0ZGOEMwMCcsIC8vIGRhcmsgb3JhbmdlXG4gICdSb3dsZic6ICAgICAgICAnIzhCNjkxNCcsIC8vIGRhcmsgZ29sZGVucm9kIGJyb3duIGRvZ1xuICAnV2FsZG9yZic6ICAgICAgJyM1NTZCMkYnLCAvLyBkYXJrIG9saXZlIGdyZWVuXG4gICdTdGF0bGVyJzogICAgICAnIzcwODA5MCcsIC8vIHNsYXRlIGdyYXlcbiAgJ0t1a2xhJzogICAgICAgICcjRkYwMDAwJywgLy8gcmVkIG5vc2UgYW5kIGNvc3R1bWVcbiAgJ09sbGllJzogICAgICAgICcjMjI4QjIyJywgLy8gZm9yZXN0IGdyZWVuIGRyYWdvblxuICAnSG93ZHknOiAgICAgICAgJyNFMjcyNUInLCAvLyB0ZXJyYSBjb3R0YVxuICAnQ2xhcmFiZWxsJzogICAgJyNGRkNDMDAnLCAvLyBicmlnaHQgeWVsbG93IGNsb3duXG4gICdHcm92ZXInOiAgICAgICAnIzQ2ODJCNCcsIC8vIHN0ZWVsIGJsdWVcbiAgJ0VsbW8nOiAgICAgICAgICcjRkYyNDAwJywgLy8gc2NhcmxldCByZWRcbiAgJ0VybmllJzogICAgICAgICcjRjRBNDYwJywgLy8gc2FuZHkgYnJvd25cbiAgJ0JlcnQnOiAgICAgICAgICcjRkZENzAwJywgLy8gZ29sZCB5ZWxsb3dcbiAgJ09zY2FyJzogICAgICAgICcjNkI4RTIzJywgLy8gb2xpdmUgZHJhYiBncmVlblxuICAnTW9ydGltZXInOiAgICAgJyNERUI4ODcnLCAvLyBidXJseXdvb2RcbiAgJ0xhbWJjaG9wJzogICAgICcjRDRDNUE5JywgLy8gd2FybSBjcmVhbSAoYWRqdXN0ZWQgZnJvbSBwdXJlIHdoaXRlKVxuICAnTWFkYW1lJzogICAgICAgJyM4MDAwODAnLCAvLyBwdXJwbGVcbiAgJ1RvcG8nOiAgICAgICAgICcjQTBBMEEwJywgLy8gc2lsdmVyIGdyYXlcbiAgJ0J1bnJha3UnOiAgICAgICcjQjIyMjIyJywgLy8gZmlyZWJyaWNrIHJlZFxuICAnV2F5YW5nJzogICAgICAgJyM2QjQyMjYnLCAvLyBkYXJrIGxlYXRoZXIgYnJvd24gKGxpZ2h0ZW5lZCBmb3IgdmlzaWJpbGl0eSlcbiAgJ1BldHJ1c2hrYSc6ICAgICcjRkY0NTAwJywgLy8gb3JhbmdlIHJlZFxuICAnSGFubmVzY2hlbic6ICAgJyNDRDVDNUMnLCAvLyBpbmRpYW4gcmVkXG4gICdWaXRlenNsYXYnOiAgICAnI0I4ODYwQicsIC8vIGRhcmsgZ29sZGVucm9kXG4gICdTYWxlbSc6ICAgICAgICAnIzRBNEE0QScsIC8vIGRhcmsgZ3JheSAoYmxhY2sgY2F0LCBsaWdodGVuZWQgZm9yIHZpc2liaWxpdHkpXG4gICdUcml1bXBoJzogICAgICAnIzZGNEUzNycsIC8vIGNvZmZlZSBicm93blxuICAnUGVhbnV0JzogICAgICAgJyM5MzcwREInLCAvLyBtZWRpdW0gcHVycGxlXG4gICdBY2htZWQnOiAgICAgICAnI0M4QkZBOScsIC8vIGJvbmUvcGFyY2htZW50IChsaWdodGVuZWQgZnJvbSBiZWlnZSlcbiAgJ0ZhbnRvY2NpbmknOiAgICcjQzQxRTNBJywgLy8gY2FyZGluYWwgcmVkXG4gICdTYWx0aW1iYW5xdWUnOiAnI0RBQTUyMCcsIC8vIGdvbGRlbnJvZFxuICAnQnVyYXR0aW5vJzogICAgJyNEMjY5MUUnLCAvLyBjaG9jb2xhdGUgYnJvd25cbiAgJ0hhcmxlcXVpbic6ICAgICcjRTYwMDI2JywgLy8gZGlhbW9uZCByZWRcbiAgJ0VjaG8nOiAgICAgICAgICcjNUM2MzcwJywgLy8gc2xhdGUgKGRhcmsgYXR0aXJlLCBsaWdodGVuZWQgZm9yIHZpc2liaWxpdHkpXG4gICdTcGlrZSc6ICAgICAgICAnI0U4RENDOCcsIC8vIHBsYXRpbnVtL2JsZWFjaCAobGlnaHRlbmVkIGZvciByZWFkYWJpbGl0eSlcbiAgJ0FuZ2VsJzogICAgICAgICcjM0QzRDNEJywgLy8gY2hhcmNvYWwgKGJsYWNrIGR1c3RlciwgbGlnaHRlbmVkIGZvciB2aXNpYmlsaXR5KVxuXG4gIC8vIENsYXNzaWMgZG9sbHNcbiAgJ0JhcmJpZSc6ICAgICAgICcjRTkxRTkwJywgLy8gQmFyYmllIHBpbmtcbiAgJ0tlbic6ICAgICAgICAgICcjNEE5MEQ5JywgLy8gS2VuIGJsdWVcbiAgJ1NraXBwZXInOiAgICAgICcjRkY2QjZCJywgLy8gY29yYWwgcmVkXG4gICdNaWRnZSc6ICAgICAgICAnI0U4NzA0MCcsIC8vIHdhcm0gYXVidXJuXG4gICdDaHJpc3RpZSc6ICAgICAnI0MwNjAzMCcsIC8vIHdhcm0gYnJvd25cbiAgJ0FubmllJzogICAgICAgICcjRTAzMDMwJywgLy8gUmFnZ2VkeSBBbm4gcmVkIHlhcm4gaGFpclxuICAnQW5keSc6ICAgICAgICAgJyMzMDcwQzAnLCAvLyBSYWdnZWR5IEFuZHkgYmx1ZSBzYWlsb3Igb3V0Zml0XG4gICdDYXRoeSc6ICAgICAgICAnI0Q0QTU3NCcsIC8vIENoYXR0eSBDYXRoeSB2aW50YWdlIHRhblxuICAnVGVkZHknOiAgICAgICAgJyNBMDc4NEEnLCAvLyBUZWRkeSBSdXhwaW4gYmVhciBicm93blxuICAnWGF2aWVyJzogICAgICAgJyM1QUFGNEEnLCAvLyBYYXZpZXIgUm9iZXJ0cyAvIENhYmJhZ2UgUGF0Y2ggZ3JlZW5cbiAgJ1N0cmF3YmVycnknOiAgICcjRTg0NDVBJywgLy8gc3RyYXdiZXJyeSByZWQtcGlua1xuICAnQmx5dGhlJzogICAgICAgJyM3QjY4RUUnLCAvLyBiaWctZXllZCBwdXJwbGVcbiAgJ0dpbm55JzogICAgICAgICcjNUI5QkQ1JywgLy8gY2xhc3NpYyBibHVlIGRyZXNzXG4gICdCZXRzeSc6ICAgICAgICAnI0RENzY5NCcsIC8vIHJvc2UgcGlua1xuICAnTWFkZWxpbmUnOiAgICAgJyNGRkQ3MDAnLCAvLyB5ZWxsb3cgaGF0XG59O1xuXG4vKiogQ29vbGRvd24gcGVyaW9kIGJlZm9yZSBhIHJlbGVhc2VkIG5hbWUgY2FuIGJlIHJldXNlZCAobXMpICovXG5jb25zdCBOQU1FX0NPT0xET1dOX01TID0gNSAqIDYwXzAwMDsgLy8gNSBtaW51dGVzXG5cbmludGVyZmFjZSBDb29sZG93bkVudHJ5IHtcbiAgbmFtZTogc3RyaW5nO1xuICByZWxlYXNlZEF0OiBudW1iZXI7XG59XG5cbi8qKlxuICogTWFuYWdlcyBmcmllbmRseSBzZXNzaW9uIG5hbWUgYXNzaWdubWVudCBmcm9tIHRoZSBwdXBwZXQgbmFtZSBwb29sLlxuICovXG5leHBvcnQgY2xhc3MgU2Vzc2lvbk5hbWVQb29sIHtcbiAgLyoqIE5hbWVzIGN1cnJlbnRseSBhc3NpZ25lZCB0byBhY3RpdmUgc2Vzc2lvbnM6IHNlc3Npb25JZCDihpIgbmFtZSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGFzc2lnbmVkID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgLyoqIFJldmVyc2UgbG9va3VwOiBuYW1lIOKGkiBzZXNzaW9uSWQgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lVG9TZXNzaW9uID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgLyoqIE5hbWVzIGluIGNvb2xkb3duIGFmdGVyIHNlc3Npb24gZW5kICovXG4gIHByaXZhdGUgY29vbGRvd246IENvb2xkb3duRW50cnlbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBBc3NpZ24gYSBmcmllbmRseSBuYW1lIHRvIGEgc2Vzc2lvbi5cbiAgICogUmV0dXJucyBhbiBleGlzdGluZyBhc3NpZ25tZW50IGlmIHRoZSBzZXNzaW9uIGFscmVhZHkgaGFzIG9uZS5cbiAgICpcbiAgICogQHBhcmFtIGlzTGVhZGVyIC0gSWYgdHJ1ZSwgZm9sbG93ZXItb25seSBuYW1lcyAoZS5nLiwgUHVuY2gpIGFyZSBleGNsdWRlZFxuICAgKi9cbiAgYXNzaWduKHNlc3Npb25JZDogc3RyaW5nLCBpc0xlYWRlciA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICAvLyBBbHJlYWR5IGFzc2lnbmVkP1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5hc3NpZ25lZC5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblxuICAgIC8vIEZsdXNoIGV4cGlyZWQgY29vbGRvd25zXG4gICAgdGhpcy5mbHVzaENvb2xkb3ducygpO1xuXG4gICAgLy8gRmluZCBhbiBhdmFpbGFibGUgbmFtZSwgcmVzcGVjdGluZyBsZWFkZXIgcmVzdHJpY3Rpb25zXG4gICAgY29uc3QgY29vbGRvd25OYW1lcyA9IG5ldyBTZXQodGhpcy5jb29sZG93bi5tYXAoYyA9PiBjLm5hbWUpKTtcbiAgICBjb25zdCBhdmFpbGFibGVOYW1lID0gUFVQUEVUX05BTUVTLmZpbmQoXG4gICAgICBuYW1lID0+ICF0aGlzLm5hbWVUb1Nlc3Npb24uaGFzKG5hbWUpICYmXG4gICAgICAgICAgICAgICFjb29sZG93bk5hbWVzLmhhcyhuYW1lKSAmJlxuICAgICAgICAgICAgICAhKGlzTGVhZGVyICYmIEZPTExPV0VSX09OTFlfTkFNRVMuaGFzKG5hbWUpKVxuICAgICk7XG5cbiAgICBpZiAoYXZhaWxhYmxlTmFtZSkge1xuICAgICAgdGhpcy5hc3NpZ25lZC5zZXQoc2Vzc2lvbklkLCBhdmFpbGFibGVOYW1lKTtcbiAgICAgIHRoaXMubmFtZVRvU2Vzc2lvbi5zZXQoYXZhaWxhYmxlTmFtZSwgc2Vzc2lvbklkKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW1Nlc3Npb25OYW1lc10gQXNzaWduZWQgJyR7YXZhaWxhYmxlTmFtZX0nIHRvICR7c2Vzc2lvbklkfWApO1xuICAgICAgcmV0dXJuIGF2YWlsYWJsZU5hbWU7XG4gICAgfVxuXG4gICAgLy8gQWxsIG5hbWVzIGluIHVzZSBvciBjb29saW5nIGRvd24g4oCUIHRyeSBjb29sZG93biBuYW1lcyAob2xkZXN0IGZpcnN0KVxuICAgIGlmICh0aGlzLmNvb2xkb3duLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG9sZGVzdCA9IHRoaXMuY29vbGRvd24uc2hpZnQoKSE7XG4gICAgICB0aGlzLmFzc2lnbmVkLnNldChzZXNzaW9uSWQsIG9sZGVzdC5uYW1lKTtcbiAgICAgIHRoaXMubmFtZVRvU2Vzc2lvbi5zZXQob2xkZXN0Lm5hbWUsIHNlc3Npb25JZCk7XG4gICAgICBsb2dnZXIuZGVidWcoYFtTZXNzaW9uTmFtZXNdIEFzc2lnbmVkICcke29sZGVzdC5uYW1lfScgdG8gJHtzZXNzaW9uSWR9IChlYXJseSBjb29sZG93biByZWxlYXNlKWApO1xuICAgICAgcmV0dXJuIG9sZGVzdC5uYW1lO1xuICAgIH1cblxuICAgIC8vIFRydWx5IGV4aGF1c3RlZCDigJQgZmFsbCBiYWNrIHRvIHRydW5jYXRlZCBzZXNzaW9uIElEXG4gICAgY29uc3QgZmFsbGJhY2sgPSBzZXNzaW9uSWQuc3BsaXQoJy0nKVsxXSB8fCBzZXNzaW9uSWQuc2xpY2UoMCwgOCk7XG4gICAgdGhpcy5hc3NpZ25lZC5zZXQoc2Vzc2lvbklkLCBmYWxsYmFjayk7XG4gICAgbG9nZ2VyLndhcm4oYFtTZXNzaW9uTmFtZXNdIE5hbWUgcG9vbCBleGhhdXN0ZWQsIHVzaW5nIGZhbGxiYWNrICcke2ZhbGxiYWNrfScgZm9yICR7c2Vzc2lvbklkfWApO1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVzZXJ2ZSBhbiBleGlzdGluZyBodW1hbi1mYWNpbmcgYXNzaWdubWVudCBkdXJpbmcgbGVhZGVyc2hpcCBoYW5kb2ZmLlxuICAgKiBJZiB0aGUgcmVxdWVzdGVkIG5hbWUgaXMgYWxyZWFkeSB0YWtlbiBieSBhbm90aGVyIGxpdmUgc2Vzc2lvbiwgdGhlIHBvb2xcbiAgICogZmFsbHMgYmFjayB0byBub3JtYWwgYXNzaWdubWVudCBsb2dpYyByYXRoZXIgdGhhbiBjcmVhdGluZyBhIGR1cGxpY2F0ZS5cbiAgICovXG4gIGFkb3B0KHNlc3Npb25JZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGlzTGVhZGVyID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5hc3NpZ25lZC5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblxuICAgIHRoaXMuZmx1c2hDb29sZG93bnMoKTtcblxuICAgIGlmICghdGhpcy5uYW1lVG9TZXNzaW9uLmhhcyhuYW1lKSAmJiAhKGlzTGVhZGVyICYmIEZPTExPV0VSX09OTFlfTkFNRVMuaGFzKG5hbWUpKSkge1xuICAgICAgdGhpcy5hc3NpZ25lZC5zZXQoc2Vzc2lvbklkLCBuYW1lKTtcbiAgICAgIHRoaXMubmFtZVRvU2Vzc2lvbi5zZXQobmFtZSwgc2Vzc2lvbklkKTtcbiAgICAgIHRoaXMuY29vbGRvd24gPSB0aGlzLmNvb2xkb3duLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5uYW1lICE9PSBuYW1lKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW1Nlc3Npb25OYW1lc10gQWRvcHRlZCAnJHtuYW1lfScgZm9yICR7c2Vzc2lvbklkfWApO1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXNzaWduKHNlc3Npb25JZCwgaXNMZWFkZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2UgYSBuYW1lIGJhY2sgdG8gdGhlIHBvb2wgd2l0aCBhIGNvb2xkb3duIHBlcmlvZC5cbiAgICovXG4gIHJlbGVhc2Uoc2Vzc2lvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5hc3NpZ25lZC5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcblxuICAgIHRoaXMuYXNzaWduZWQuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAgdGhpcy5uYW1lVG9TZXNzaW9uLmRlbGV0ZShuYW1lKTtcblxuICAgIC8vIE9ubHkgY29vbGRvd24gcHVwcGV0IG5hbWVzLCBub3QgZmFsbGJhY2sgSURzXG4gICAgaWYgKFBVUFBFVF9OQU1FUy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgdGhpcy5jb29sZG93bi5wdXNoKHsgbmFtZSwgcmVsZWFzZWRBdDogRGF0ZS5ub3coKSB9KTtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoYFtTZXNzaW9uTmFtZXNdIFJlbGVhc2VkICcke25hbWV9JyBmcm9tICR7c2Vzc2lvbklkfSAoY29vbGRvd24gJHtOQU1FX0NPT0xET1dOX01TIC8gMTAwMH1zKWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnJpZW5kbHkgbmFtZSBmb3IgYSBzZXNzaW9uLCBvciB1bmRlZmluZWQgaWYgbm90IGFzc2lnbmVkLlxuICAgKi9cbiAgZ2V0TmFtZShzZXNzaW9uSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYXNzaWduZWQuZ2V0KHNlc3Npb25JZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjYW5vbmljYWwgY29sb3IgZm9yIGFuIGFzc2lnbmVkIHNlc3Npb24gbmFtZS5cbiAgICovXG4gIGdldENvbG9yKHNlc3Npb25JZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5hc3NpZ25lZC5nZXQoc2Vzc2lvbklkKTtcbiAgICByZXR1cm4gbmFtZSA/IChQVVBQRVRfQ09MT1JTW25hbWVdID8/IHVuZGVmaW5lZCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBjdXJyZW50IGFzc2lnbm1lbnRzLlxuICAgKi9cbiAgZ2V0QWxsKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgTWFwKHRoaXMuYXNzaWduZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaENvb2xkb3ducygpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuY29vbGRvd24gPSB0aGlzLmNvb2xkb3duLmZpbHRlcihjID0+IChub3cgLSBjLnJlbGVhc2VkQXQpIDwgTkFNRV9DT09MRE9XTl9NUyk7XG4gIH1cbn1cbiJdfQ==