@dollhousemcp/mcp-server 2.0.27-rc.2 → 2.0.27-rc.3

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.2] - 2026-04-19
3
+ ## [2.0.27-rc.3] - 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.2";
6
- export declare const BUILD_TIMESTAMP = "2026-04-19T16:20:57.972Z";
5
+ export declare const PACKAGE_VERSION = "2.0.27-rc.3";
6
+ export declare const BUILD_TIMESTAMP = "2026-04-19T16:39:50.436Z";
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.2';
6
- export const BUILD_TIMESTAMP = '2026-04-19T16:20:57.972Z';
5
+ export const PACKAGE_VERSION = '2.0.27-rc.3';
6
+ export const BUILD_TIMESTAMP = '2026-04-19T16:39:50.436Z';
7
7
  export const BUILD_TYPE = 'npm';
8
8
  export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMjctcmMuMic7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjYtMDQtMTlUMTY6MjA6NTcuOTcyWic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMjctcmMuMyc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjYtMDQtMTlUMTY6Mzk6NTAuNDM2Wic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"UnifiedConsole.d.ts","sourceRoot":"","sources":["../../../src/web/console/UnifiedConsole.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UnifiedConsole.d.ts","sourceRoot":"","sources":["../../../src/web/console/UnifiedConsole.ts"],"names":[],"mappings":"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"}
@@ -299,17 +299,19 @@ export async function resolveFollowerAuthority(sessionId, consolePort, election,
299
299
  };
300
300
  }
301
301
  const replacement = evaluatePortOwnerReplacement(candidateLeader, discovery);
302
+ if (replacement.shouldEvict) {
303
+ await deleteLeaderLockImpl();
304
+ logger.warn(discovery.ownerPid === election.leaderInfo.pid
305
+ ? '[UnifiedConsole] Older console leader detected on the console port; newer session will take over'
306
+ : '[UnifiedConsole] Split-brain console authority detected; newer session will replace the actual port owner', buildAuthorityResolutionLogContext(consolePort, election.leaderInfo, discovery, replacement));
307
+ return {
308
+ election: { role: 'leader', leaderInfo: candidateLeader },
309
+ discovery,
310
+ replacement,
311
+ forcedClaim: false,
312
+ };
313
+ }
302
314
  if (discovery.ownerPid !== election.leaderInfo.pid) {
303
- if (replacement.shouldEvict) {
304
- await deleteLeaderLockImpl();
305
- logger.warn('[UnifiedConsole] Split-brain console authority detected; newer session will replace the actual port owner', buildAuthorityResolutionLogContext(consolePort, election.leaderInfo, discovery, replacement));
306
- return {
307
- election: { role: 'leader', leaderInfo: candidateLeader },
308
- discovery,
309
- replacement,
310
- forcedClaim: false,
311
- };
312
- }
313
315
  logger.warn('[UnifiedConsole] Split-brain console authority detected; following the actual port owner', buildAuthorityResolutionLogContext(consolePort, election.leaderInfo, discovery, replacement));
314
316
  return {
315
317
  election: { role: 'follower', leaderInfo: discovery.leaderInfo },
@@ -587,4 +589,4 @@ async function startAsFollower(options, election, consolePort = DEFAULT_CONSOLE_
587
589
  },
588
590
  };
589
591
  }
590
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pZmllZENvbnNvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQU9ILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWix3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLHdCQUF3QixHQUl6QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUNMLGFBQWEsRUFDYix3QkFBd0IsR0FFekIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFMUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUMsMEJBQTBCLENBQUM7QUFDNUQsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSxtQ0FBbUMsR0FBRyxhQUFhLENBQUM7QUFDMUQsTUFBTSwyQkFBMkIsR0FBRyxLQUFLLENBQUM7QUFFMUMsU0FBUyxnQkFBZ0I7SUFDdkIsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFzQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSwwQkFBMEIsQ0FDOUMsV0FBbUIsRUFDbkIsU0FBb0Msa0JBQWtCLEVBQ3RELE1BQXFCLE1BQU07SUFFM0IsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLEVBQUUsQ0FBQztRQUM5QixJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixHQUFHLENBQUMsSUFBSSxDQUNOLDZFQUE2RTtnQkFDN0UsUUFBUSxNQUFNLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxJQUFJLDRCQUE0QjtnQkFDbkUsb0VBQW9FO2dCQUNwRSxzREFBc0QsV0FBVyxJQUFJO2dCQUNyRSxnQ0FBZ0MsTUFBTSxDQUFDLElBQUksSUFBSSw0QkFBNEIsSUFBSTtnQkFDL0UsK0RBQStEO2dCQUMvRCx5Q0FBeUMsQ0FDMUMsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLDREQUE0RDtRQUM1RCxHQUFHLENBQUMsS0FBSyxDQUFDLGlEQUFpRCxFQUFFO1lBQzNELEtBQUssRUFBRSxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1NBQ3hELENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUM7QUE2REQsU0FBUyxxQkFBcUIsQ0FBQyxTQUF3QjtJQUNyRCxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsVUFBVSxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDbkUsQ0FBQztBQUVELFNBQVMsMEJBQTBCLENBQUMsSUFBWSxFQUFFLFFBQWdCLEVBQUUsYUFBK0I7SUFDakcsT0FBTztRQUNMLE9BQU8sRUFBRSxZQUFZO1FBQ3JCLEdBQUcsRUFBRSxRQUFRO1FBQ2IsSUFBSTtRQUNKLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGlCQUFpQjtRQUNoRixTQUFTLEVBQUUsYUFBYSxDQUFDLFNBQVMsSUFBSSxnQkFBZ0IsRUFBRTtRQUN4RCxTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsSUFBSSxnQkFBZ0IsRUFBRTtRQUM1RCxhQUFhLEVBQUUsYUFBYSxDQUFDLGFBQWEsSUFBSSxxQkFBcUI7UUFDbkUsc0JBQXNCLEVBQUUsYUFBYSxDQUFDLHNCQUFzQixJQUFJLHdCQUF3QjtLQUN6RixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQUMsSUFBWSxFQUFFLFFBQWdCO0lBQzlELE1BQU0sR0FBRyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDL0IsT0FBTztRQUNMLE9BQU8sRUFBRSxZQUFZO1FBQ3JCLEdBQUcsRUFBRSxRQUFRO1FBQ2IsSUFBSTtRQUNKLFNBQVMsRUFBRSxHQUFHLG1DQUFtQyxHQUFHLFFBQVEsRUFBRTtRQUM5RCxTQUFTLEVBQUUsR0FBRztRQUNkLFNBQVMsRUFBRSxHQUFHO1FBQ2QsYUFBYSxFQUFFLHFCQUFxQjtRQUNwQyxzQkFBc0IsRUFBRSx3QkFBd0I7S0FDakQsQ0FBQztBQUNKLENBQUM7QUFFRCxLQUFLLFVBQVUsNEJBQTRCLENBQ3pDLElBQVksRUFDWixRQUFnQixFQUNoQixTQUF3QixFQUN4QixTQUF1QjtJQUV2QixNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztJQUVsRixJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxvQkFBb0IsSUFBSSxlQUFlLEVBQUU7WUFDeEUsT0FBTyxFQUFFLHFCQUFxQixDQUFDLFNBQVMsQ0FBQztZQUN6QyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQXVDLENBQUM7UUFDM0UsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN6RSxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDOUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxRQUFRO1lBQ3hCLE9BQU8sQ0FBQyxRQUFRLEtBQUssSUFBSTtZQUN6QixPQUFPLENBQUMsSUFBSSxLQUFLLEtBQUs7WUFDdEIsT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQzdCLENBQUM7UUFDRixPQUFPLGFBQWEsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzFGLENBQUM7WUFBUyxDQUFDO1FBQ1QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hCLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSx5QkFBeUIsQ0FDN0MsSUFBWSxFQUNaLFNBQXdCLEVBQ3hCLE9BQThCLEVBQUU7SUFFaEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUM7SUFDMUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLElBQUksYUFBYSxDQUFDO0lBQ2xFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLGNBQWMsQ0FBQztJQUNyRSxNQUFNLFFBQVEsR0FBRyxNQUFNLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRS9DLElBQUksUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0sNEJBQTRCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDNUYsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDakQsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyx5REFBeUQsRUFBRTtnQkFDdEUsSUFBSTtnQkFDSixRQUFRO2dCQUNSLEtBQUssRUFBRSxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO2FBQ3hELENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxrQkFBa0IsRUFBRSxDQUFDO0lBQ3hDLElBQUksSUFBSSxFQUFFLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN4RSxPQUFPO1lBQ0wsUUFBUSxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRztZQUM5QixNQUFNLEVBQUUsTUFBTTtZQUNkLFVBQVUsRUFBRTtnQkFDVixHQUFHLElBQUk7Z0JBQ1AsU0FBUyxFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsaUJBQWlCO2FBQ3hFO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN0QixPQUFPO1lBQ0wsUUFBUTtZQUNSLE1BQU0sRUFBRSxXQUFXO1lBQ25CLFVBQVUsRUFBRSx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO1NBQ3JELENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDOUQsQ0FBQztBQU1ELE1BQU0sQ0FBQyxLQUFLLFVBQVUsd0JBQXdCLENBQzVDLGlCQUFvQyxFQUNwQyxJQUFZLEVBQ1osU0FBd0IsRUFDeEIsT0FBd0MsRUFBRTtJQUUxQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxjQUFjLENBQUM7SUFDckUsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLElBQUksZ0JBQWdCLENBQUM7SUFDM0UsTUFBTSxDQUFDLElBQUksQ0FBQyxpREFBaUQsRUFBRTtRQUM3RCxvQkFBb0IsRUFBRSxpQkFBaUIsQ0FBQyxTQUFTO1FBQ2pELGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHO1FBQ3JDLElBQUk7S0FDTCxDQUFDLENBQUM7SUFFSCxJQUFJLFFBQVEsR0FBRyxNQUFNLHlCQUF5QixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEUsSUFBSSxvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDakMsSUFBSSxvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDakMsTUFBTSxXQUFXLEdBQUcsTUFBTSxrQkFBa0IsRUFBRSxDQUFDO0lBQy9DLE1BQU0sc0JBQXNCLEdBQUcsQ0FDN0IsV0FBVyxFQUFFLEdBQUcsS0FBSyxpQkFBaUIsQ0FBQyxHQUFHO1FBQzFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUMsSUFBSTtRQUMzQyxXQUFXLENBQUMsU0FBUyxLQUFLLGlCQUFpQixDQUFDLFNBQVMsQ0FDdEQsQ0FBQztJQUNGLE1BQU0saUNBQWlDLEdBQUcsQ0FDeEMsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLEtBQUssaUJBQWlCLENBQUMsR0FBRztRQUNsRCxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxpQkFBaUIsQ0FBQyxJQUFJO1FBQ25ELFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxLQUFLLGlCQUFpQixDQUFDLFNBQVMsQ0FDOUQsQ0FBQztJQUVGLElBQUksc0JBQXNCLEVBQUUsQ0FBQztRQUMzQixvQkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDNUIsTUFBTSxvQkFBb0IsRUFBRSxDQUFDO1FBQzdCLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLHFFQUFxRSxFQUFFO1lBQ2pGLG9CQUFvQixFQUFFLGlCQUFpQixDQUFDLFNBQVM7WUFDakQsY0FBYyxFQUFFLGlCQUFpQixDQUFDLEdBQUc7WUFDckMsSUFBSTtTQUNMLENBQUMsQ0FBQztRQUNILElBQUksaUNBQWlDLEVBQUUsQ0FBQztZQUN0QyxRQUFRLEdBQUcsTUFBTSx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BFLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxpREFBaUQsRUFBRTtRQUM3RCxvQkFBb0IsRUFBRSxpQkFBaUIsQ0FBQyxTQUFTO1FBQ2pELGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHO1FBQ3JDLElBQUk7UUFDSixlQUFlLEVBQUUsUUFBUSxDQUFDLE1BQU07UUFDaEMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO1FBQzNCLG9CQUFvQjtRQUNwQixvQkFBb0I7S0FDckIsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLEdBQUcsUUFBUTtRQUNYLG9CQUFvQjtRQUNwQixvQkFBb0I7S0FDckIsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsNEJBQTRCLENBQzFDLGVBQWtDLEVBQ2xDLFFBQTZCO0lBRTdCLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3BHLE9BQU87WUFDTCxXQUFXLEVBQUUsS0FBSztZQUNsQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7WUFDM0IsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xGLE9BQU87UUFDTCxXQUFXLEVBQUUsVUFBVSxDQUFDLGFBQWE7UUFDckMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO1FBQzNCLFVBQVU7S0FDWCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsMEJBQTBCLENBQ2pDLFdBQW1CLEVBQ25CLGlCQUFvQyxFQUNwQyxVQUF5QyxFQUN6QyxRQUE2QixFQUM3QixXQUEwQyxFQUMxQyxVQUEyQztJQUUzQyxPQUFPO1FBQ0wsSUFBSSxFQUFFLFdBQVc7UUFDakIsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLO1FBQzVCLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTTtRQUM5QixvQkFBb0IsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHO1FBQzNDLDBCQUEwQixFQUFFLGlCQUFpQixDQUFDLFNBQVM7UUFDdkQsd0JBQXdCLEVBQUUsaUJBQWlCLENBQUMsYUFBYSxJQUFJLHFCQUFxQjtRQUNsRixnQ0FBZ0MsRUFBRSxpQkFBaUIsQ0FBQyxzQkFBc0IsSUFBSSx3QkFBd0I7UUFDdEcsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLFFBQVE7UUFDbkMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxNQUFNO1FBQy9CLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsR0FBRztRQUMzQyx1QkFBdUIsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLFNBQVM7UUFDdkQscUJBQXFCLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxhQUFhLElBQUkscUJBQXFCO1FBQ2xGLDZCQUE2QixFQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsc0JBQXNCLElBQUksd0JBQXdCO1FBQ3RHLHNCQUFzQixFQUFFLFdBQVcsRUFBRSxXQUFXLElBQUksS0FBSztRQUN6RCxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU07UUFDbEQsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU07UUFDcEMsYUFBYSxFQUFFLFVBQVUsRUFBRSxHQUFHO1FBQzlCLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNO0tBQ3JDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxrQ0FBa0MsQ0FDekMsV0FBbUIsRUFDbkIsYUFBZ0MsRUFDaEMsU0FBcUMsRUFDckMsV0FBZ0Q7SUFFaEQsT0FBTztRQUNMLElBQUksRUFBRSxXQUFXO1FBQ2pCLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxHQUFHO1FBQ25DLHNCQUFzQixFQUFFLGFBQWEsQ0FBQyxTQUFTO1FBQy9DLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxhQUFhLElBQUkscUJBQXFCO1FBQzFFLDRCQUE0QixFQUFFLGFBQWEsQ0FBQyxzQkFBc0IsSUFBSSx3QkFBd0I7UUFDOUYsZUFBZSxFQUFFLFNBQVMsRUFBRSxRQUFRLElBQUksSUFBSTtRQUM1QyxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sSUFBSSxNQUFNO1FBQzFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLElBQUk7UUFDcEQsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLElBQUksSUFBSTtRQUNoRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsSUFBSSxxQkFBcUI7UUFDbkYsNEJBQTRCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsSUFBSSx3QkFBd0I7UUFDdkcsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLFdBQVcsSUFBSSxLQUFLO1FBQ3pELGlCQUFpQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxJQUFJLElBQUk7S0FDM0QsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxTQUFpQixFQUNqQixXQUFtQixFQUNuQixRQUF3QixFQUN4QixPQUFzQyxFQUFFO0lBRXhDLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxDQUFDLCtCQUErQixJQUFJLDJCQUEyQixDQUFDO0lBQzVHLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixJQUFJLHlCQUF5QixDQUFDO0lBQ3RHLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixJQUFJLG9CQUFvQixDQUFDO0lBQ3ZGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixJQUFJLGdCQUFnQixDQUFDO0lBRTNFLE1BQU0sU0FBUyxHQUFHLE1BQU0sK0JBQStCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUZBQW1GLEVBQUU7WUFDL0YsSUFBSSxFQUFFLFdBQVc7WUFDakIsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHO1lBQ3pDLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUztTQUN0RCxDQUFDLENBQUM7UUFDSCxPQUFPO1lBQ0wsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQztZQUNoRSxTQUFTLEVBQUUsSUFBSTtZQUNmLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sU0FBUyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxJQUFJLFNBQVMsQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDekQsT0FBTztZQUNMLFFBQVE7WUFDUixTQUFTO1lBQ1QsV0FBVyxFQUFFLElBQUk7WUFDakIsV0FBVyxFQUFFLEtBQUs7U0FDbkIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyw0QkFBNEIsQ0FBQyxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0UsSUFBSSxTQUFTLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbkQsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUIsTUFBTSxvQkFBb0IsRUFBRSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkdBQTJHLEVBQUUsa0NBQWtDLENBQ3pKLFdBQVcsRUFDWCxRQUFRLENBQUMsVUFBVSxFQUNuQixTQUFTLEVBQ1QsV0FBVyxDQUNaLENBQUMsQ0FBQztZQUNILE9BQU87Z0JBQ0wsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFO2dCQUN6RCxTQUFTO2dCQUNULFdBQVc7Z0JBQ1gsV0FBVyxFQUFFLEtBQUs7YUFDbkIsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLDBGQUEwRixFQUFFLGtDQUFrQyxDQUN4SSxXQUFXLEVBQ1gsUUFBUSxDQUFDLFVBQVUsRUFDbkIsU0FBUyxFQUNULFdBQVcsQ0FDWixDQUFDLENBQUM7UUFDSCxPQUFPO1lBQ0wsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRTtZQUNoRSxTQUFTO1lBQ1QsV0FBVztZQUNYLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLFFBQVE7UUFDUixTQUFTO1FBQ1QsV0FBVztRQUNYLFdBQVcsRUFBRSxLQUFLO0tBQ25CLENBQUM7QUFDSixDQUFDO0FBRUQsS0FBSyxVQUFVLG9CQUFvQixDQUNqQyxPQUE4QixFQUM5QixlQUErQixFQUMvQixXQUFtQixFQUNuQixZQUFvQixFQUNwQixVQUE0QixFQUM1QixrQkFBMkU7SUFFM0UsTUFBTSxlQUFlLEdBQUcsTUFBTSx3QkFBd0IsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM5RyxNQUFNLGtCQUFrQixHQUFHLDRCQUE0QixDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFckcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDNUUsT0FBTztZQUNMLFNBQVMsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxXQUFXLGlCQUFpQixFQUFFLEVBQUU7WUFDaEgsUUFBUSxFQUFFLGVBQWU7WUFDekIsUUFBUSxFQUFFLGVBQWU7WUFDekIsV0FBVyxFQUFFLGtCQUFrQjtZQUMvQixVQUFVLEVBQUUsSUFBSTtZQUNoQixpQkFBaUIsRUFBRSxLQUFLO1lBQ3hCLGtCQUFrQixFQUFFLEtBQUs7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxNQUFNLHlCQUF5QixDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNsRixNQUFNLGlCQUFpQixHQUFHLDRCQUE0QixDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDbkcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDMUUsTUFBTSxDQUFDLElBQUksQ0FBQyx1RkFBdUYsRUFBRTtZQUNuRyxHQUFHLDBCQUEwQixDQUMzQixXQUFXLEVBQ1gsZUFBZSxDQUFDLFVBQVUsRUFDMUIsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsV0FBVyxpQkFBaUIsRUFBRSxFQUNyRixjQUFjLEVBQ2QsaUJBQWlCLENBQ2xCO1lBQ0QsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsUUFBUTtTQUM5QyxDQUFDLENBQUM7UUFDSCxPQUFPO1lBQ0wsU0FBUyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLFdBQVcsaUJBQWlCLEVBQUUsRUFBRTtZQUNoSCxRQUFRLEVBQUUsZUFBZTtZQUN6QixRQUFRLEVBQUUsY0FBYztZQUN4QixXQUFXLEVBQUUsaUJBQWlCO1lBQzlCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsa0JBQWtCLEVBQUUsS0FBSztTQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsc0ZBQXNGLEVBQUU7UUFDbEcsR0FBRywwQkFBMEIsQ0FDM0IsV0FBVyxFQUNYLGVBQWUsQ0FBQyxVQUFVLEVBQzFCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLFdBQVcsaUJBQWlCLEVBQUUsRUFDckYsY0FBYyxFQUNkLGlCQUFpQixDQUNsQjtLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sVUFBVSxHQUFHLE1BQU0sd0JBQXdCLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRTtRQUN6RixxQkFBcUIsRUFBRSxJQUFJO0tBQzVCLENBQUMsQ0FBQztJQUNILElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyx5RkFBeUYsRUFBRTtZQUNyRyxHQUFHLDBCQUEwQixDQUMzQixXQUFXLEVBQ1gsZUFBZSxDQUFDLFVBQVUsRUFDMUIsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsV0FBVyxpQkFBaUIsRUFBRSxFQUNyRixjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLFVBQVUsQ0FDWDtTQUNGLENBQUMsQ0FBQztRQUNILE9BQU87WUFDTCxTQUFTLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsV0FBVyxpQkFBaUIsRUFBRSxFQUFFO1lBQ2hILFFBQVEsRUFBRSxlQUFlO1lBQ3pCLFFBQVEsRUFBRSxjQUFjO1lBQ3hCLFdBQVcsRUFBRSxpQkFBaUI7WUFDOUIsVUFBVTtZQUNWLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsa0JBQWtCLEVBQUUsS0FBSztTQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5RCxJQUFJLGVBQWUsR0FBRyxlQUFlLENBQUM7SUFDdEMsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFFL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEUsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzNFLGtCQUFrQixHQUFHLE1BQU0sZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxvRkFBb0YsRUFBRTtnQkFDaEcsR0FBRywwQkFBMEIsQ0FDM0IsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixnQkFBZ0IsQ0FBQyxVQUFVLEVBQzNCLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsVUFBVSxDQUNYO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELGVBQWUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLENBQUM7SUFDdEUsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLENBQUMsSUFBSSxDQUFDLGdGQUFnRixFQUFFO1lBQzVGLEdBQUcsMEJBQTBCLENBQzNCLFdBQVcsRUFDWCxlQUFlLENBQUMsVUFBVSxFQUMxQixnQkFBZ0IsQ0FBQyxVQUFVLEVBQzNCLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsVUFBVSxDQUNYO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFDTCxTQUFTLEVBQUUsZ0JBQWdCO1FBQzNCLFFBQVEsRUFBRSxlQUFlO1FBQ3pCLFFBQVEsRUFBRSxjQUFjO1FBQ3hCLFdBQVcsRUFBRSxpQkFBaUI7UUFDOUIsVUFBVTtRQUNWLGlCQUFpQixFQUFFLElBQUk7UUFDdkIsa0JBQWtCO0tBQ25CLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQixDQUFDLE9BQThCO0lBQ3RFLDBEQUEwRDtJQUMxRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLG9CQUFvQixDQUFDO0lBQ3pELE1BQU0sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLFdBQVcsRUFBRTtRQUMzRCxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7SUFFbEUsZ0VBQWdFO0lBQ2hFLG9FQUFvRTtJQUNwRSx3RUFBd0U7SUFDeEUsd0VBQXdFO0lBQ3hFLHdDQUF3QztJQUN4QyxNQUFNLDBCQUEwQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTlDLElBQUksUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFakUsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLE1BQU0sd0JBQXdCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDMUYsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMvQixPQUFPLGFBQWEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxlQUFlLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsYUFBYSxDQUMxQixPQUE4QixFQUM5QixRQUF3QixFQUN4QixjQUFzQixvQkFBb0I7SUFFMUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFbEUsd0VBQXdFO0lBQ3hFLHdFQUF3RTtJQUN4RSwyRUFBMkU7SUFDM0UseUVBQXlFO0lBQ3pFLHVFQUF1RTtJQUN2RSxNQUFNLFVBQVUsR0FBRyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sWUFBWSxHQUFHLE1BQU0sVUFBVSxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztJQUMvRSxNQUFNLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxFQUFFO1FBQzlELE9BQU8sRUFBRSxZQUFZLENBQUMsRUFBRTtRQUN4QixTQUFTLEVBQUUsWUFBWSxDQUFDLElBQUk7UUFDNUIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxXQUFXLEVBQUU7UUFDOUIsWUFBWSxFQUFFLEdBQUcsQ0FBQywwQkFBMEI7S0FDN0MsQ0FBQyxDQUFDO0lBRUgsZ0ZBQWdGO0lBQ2hGLElBQUksYUFBNkQsQ0FBQztJQUNsRSxJQUFJLHFCQUF1RSxDQUFDO0lBRTVFLGdGQUFnRjtJQUNoRixNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztRQUN0QyxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssQ0FBQztRQUMvQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDbEUsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztLQUM5RSxDQUFDLENBQUM7SUFFSCwyRUFBMkU7SUFDM0UsOEVBQThFO0lBQzlFLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtRQUNsQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7UUFDOUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLElBQUksRUFBRSxXQUFXO1FBQ2pCLFNBQVMsRUFBRSxPQUFPLENBQUMsZUFBZTtRQUNsQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsU0FBUztRQUNuQyxpQkFBaUIsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFDeEMsVUFBVTtRQUNWLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUMzRSxDQUFDO0lBQ0Ysd0VBQXdFO0lBQ3hFLHFFQUFxRTtJQUNyRSxJQUFJLFNBQVMsR0FBRyxNQUFNLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVqRCxJQUFJLFNBQVMsQ0FBQyxVQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFELE1BQU0sYUFBYSxHQUFHLE1BQU0sb0JBQW9CLENBQzlDLE9BQU8sRUFDUCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFlBQVksQ0FBQyxLQUFLLEVBQ2xCLFVBQVUsRUFDVixjQUFjLENBQ2YsQ0FBQztRQUNGLFNBQVMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO1FBQ3BDLFFBQVEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDO1FBRWxDLElBQUksU0FBUyxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUQsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDLDZFQUE2RSxFQUFFO29CQUN6RixHQUFHLDBCQUEwQixDQUMzQixXQUFXLEVBQ1gsUUFBUSxDQUFDLFVBQVUsRUFDbkIsU0FBUyxDQUFDLFVBQVUsRUFDcEIsYUFBYSxDQUFDLFFBQVEsRUFDdEIsYUFBYSxDQUFDLFdBQVcsRUFDekIsYUFBYSxDQUFDLFVBQVUsQ0FDekI7b0JBQ0QsaUJBQWlCLEVBQUUsYUFBYSxDQUFDLGlCQUFpQjtvQkFDbEQsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLGtCQUFrQjtvQkFDcEQsb0JBQW9CLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssTUFBTTtpQkFDL0QsQ0FBQyxDQUFDO2dCQUNILE1BQU0sZ0JBQWdCLEdBQW1CLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDN0csT0FBTyxlQUFlLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkYsQ0FBQztZQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsaUZBQWlGLEVBQUU7Z0JBQzlGLEdBQUcsMEJBQTBCLENBQzNCLFdBQVcsRUFDWCxRQUFRLENBQUMsVUFBVSxFQUNuQixTQUFTLENBQUMsVUFBVSxFQUNwQixhQUFhLENBQUMsUUFBUSxFQUN0QixhQUFhLENBQUMsV0FBVyxFQUN6QixhQUFhLENBQUMsVUFBVSxDQUN6QjtnQkFDRCxpQkFBaUIsRUFBRSxhQUFhLENBQUMsaUJBQWlCO2dCQUNsRCxrQkFBa0IsRUFBRSxhQUFhLENBQUMsa0JBQWtCO2FBQ3JELENBQUMsQ0FBQztZQUNILE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLFdBQVcsd0NBQXdDLENBQUMsQ0FBQztRQUNyRyxDQUFDO0lBQ0gsQ0FBQztJQUVELGlGQUFpRjtJQUNqRixZQUFZLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFbkUsa0ZBQWtGO0lBQ2xGLFlBQVksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBRXRDLG1EQUFtRDtJQUNuRCxPQUFPLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUUxRCwrREFBK0Q7SUFDL0QsSUFBSSxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0IsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDO1FBQ2pELDZDQUE2QztRQUM3QyxhQUFhLEdBQUcsQ0FBQyxLQUFzQixFQUFFLEVBQUU7WUFDekMsTUFBTSxPQUFPLEdBQW9CO2dCQUMvQixHQUFHLEtBQUs7Z0JBQ1IsSUFBSSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFO2FBQ3ZELENBQUM7WUFDRixpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0QscUJBQXFCLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixDQUFDO0lBRXBELE1BQU0sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLENBQUMsQ0FBQztJQUV6RCx1Q0FBdUM7SUFDdkMsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxRCxxQkFBcUIsRUFBRSxDQUFDO0lBRXhCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLEVBQUU7UUFDN0MsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7UUFDakUsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLENBQUM7S0FDbEgsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLElBQUksRUFBRSxRQUFRO1FBQ2QsUUFBUTtRQUNSLElBQUksRUFBRSxXQUFXO1FBQ2pCLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTtZQUNsQixhQUFhLEVBQUUsQ0FBQztRQUNsQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxLQUFLLFVBQVUsZUFBZSxDQUM1QixPQUE4QixFQUM5QixRQUF3QixFQUN4QixjQUFzQixvQkFBb0IsRUFDMUMsbUJBQWtDLElBQUk7SUFFdEMsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFakUseUVBQXlFO0lBQ3pFLHVFQUF1RTtJQUN2RSwwRUFBMEU7SUFDMUUsSUFBSSxTQUFTLEdBQUcsZ0JBQWdCLENBQUM7SUFDakMsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDdkIsTUFBTSxFQUFFLHVCQUF1QixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN0RSxTQUFTLEdBQUcsTUFBTSx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBQ0QsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNkLE1BQU0sQ0FBQyxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztJQUN0RSxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkZBQTZGLENBQUMsQ0FBQztJQUM5RyxDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLDBFQUEwRTtJQUMxRSxNQUFNLFlBQVksR0FBRyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRWhHLDBFQUEwRTtJQUMxRSwwRkFBMEY7SUFDMUYsSUFBSSxnQkFBa0MsQ0FBQztJQUV2QyxxRUFBcUU7SUFDckUsTUFBTSxjQUFjLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO1FBQy9GLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLGdCQUFnQixDQUFDO2FBQ25ELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlGLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUV4Qyx3Q0FBd0M7SUFDeEMsZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlGLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsRUFBRTtRQUMvQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsVUFBVTtRQUNoRSxhQUFhLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRztRQUNoRixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUztLQUNoRCxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsSUFBSSxFQUFFLFVBQVU7UUFDaEIsUUFBUTtRQUNSLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTtZQUNsQixNQUFNLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlCLE1BQU0sY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pZmllZCB3ZWIgY29uc29sZSBvcmNoZXN0cmF0b3IuXG4gKlxuICogVGllcyB0b2dldGhlciBsZWFkZXIgZWxlY3Rpb24sIGNvbnNvbGUgc3RhcnR1cCwgZm9sbG93ZXIgd2lyaW5nLFxuICogYW5kIHNlc3Npb24gbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnRcbiAqIGNhbGxlZCBieSB0aGUgREkgY29udGFpbmVyIGR1cmluZyBkZWZlcnJlZCBzZXR1cC5cbiAqXG4gKiBGbG93OlxuICogMS4gUnVuIGxlYWRlciBlbGVjdGlvbiAocmVhZCBsb2NrIGZpbGUsIGNsYWltIG9yIGZvbGxvdylcbiAqIDIuIElmIGxlYWRlcjogc3RhcnQgd2ViIHNlcnZlciBvbiBmaXhlZCBwb3J0LCBtb3VudCBpbmdlc3Qgcm91dGVzLCBzdGFydCBoZWFydGJlYXRcbiAqIDMuIElmIGZvbGxvd2VyOiByZWdpc3RlciBmb3J3YXJkaW5nIHNpbmtzIHdpdGggTG9nTWFuYWdlciwgc3RhcnQgc2Vzc2lvbiBoZWFydGJlYXRcbiAqXG4gKiBAc2luY2UgdjIuMS4wIOKAlCBJc3N1ZSAjMTcwMFxuICovXG5cbmltcG9ydCB0eXBlIHsgVW5pZmllZExvZ0VudHJ5IH0gZnJvbSAnLi4vLi4vbG9nZ2luZy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1ldHJpY1NuYXBzaG90IH0gZnJvbSAnLi4vLi4vbWV0cmljcy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeUxvZ1NpbmsgfSBmcm9tICcuLi8uLi9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlNZXRyaWNzU2luayB9IGZyb20gJy4uLy4uL21ldHJpY3Mvc2lua3MvTWVtb3J5TWV0cmljc1NpbmsuanMnO1xuaW1wb3J0IHR5cGUgeyBXZWJTZXJ2ZXJPcHRpb25zLCBXZWJTZXJ2ZXJSZXN1bHQgfSBmcm9tICcuLi9zZXJ2ZXIuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHtcbiAgZWxlY3RMZWFkZXIsXG4gIGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZSxcbiAgZm9yY2VDbGFpbUxlYWRlcnNoaXAsXG4gIHN0YXJ0SGVhcnRiZWF0LFxuICByZWdpc3RlckxlYWRlckNsZWFudXAsXG4gIGRldGVjdExlZ2FjeUxlYWRlcixcbiAgcmVhZExlYWRlckxvY2ssXG4gIGRlbGV0ZUxlYWRlckxvY2ssXG4gIGNsYWltTGVhZGVyc2hpcCxcbiAgY3JlYXRlTGVhZGVySW5mbyxcbiAgTE9DS19WRVJTSU9OLFxuICBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgZXZhbHVhdGVMZWFkZXJQcmVmZXJlbmNlLFxuICB0eXBlIEVsZWN0aW9uUmVzdWx0LFxuICB0eXBlIENvbnNvbGVMZWFkZXJJbmZvLFxuICB0eXBlIExlYWRlclByZWZlcmVuY2VEZWNpc2lvbixcbn0gZnJvbSAnLi9MZWFkZXJFbGVjdGlvbi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVJbmdlc3RSb3V0ZXMgfSBmcm9tICcuL0luZ2VzdFJvdXRlcy5qcyc7XG5pbXBvcnQge1xuICBMZWFkZXJGb3J3YXJkaW5nTG9nU2luayxcbiAgU2Vzc2lvbkhlYXJ0YmVhdCxcbn0gZnJvbSAnLi9MZWFkZXJGb3J3YXJkaW5nU2luay5qcyc7XG5pbXBvcnQgeyBQcm9tb3Rpb25NYW5hZ2VyIH0gZnJvbSAnLi9Qcm9tb3Rpb25NYW5hZ2VyLmpzJztcbmltcG9ydCB7IENvbnNvbGVUb2tlblN0b3JlIH0gZnJvbSAnLi9jb25zb2xlVG9rZW4uanMnO1xuaW1wb3J0IHtcbiAgZmluZFBpZE9uUG9ydCxcbiAga2lsbFN0YWxlUHJvY2Vzc0RldGFpbGVkLFxuICB0eXBlIEtpbGxTdGFsZVByb2Nlc3NPdXRjb21lLFxufSBmcm9tICcuL1N0YWxlUHJvY2Vzc1JlY292ZXJ5LmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuXG4vKipcbiAqIERlZmF1bHQgY29uc29sZSBwb3J0IGZyb20gdGhlIGVudiB2YXIuIFVzZWQgYXMgZmFsbGJhY2sgd2hlbiBubyBwb3J0XG4gKiBpcyBwcm92aWRlZCB2aWEgY29uZmlnIGZpbGUgb3Igb3B0aW9ucy4gVGhlIHJlc29sdXRpb24gaGllcmFyY2h5IGlzOlxuICogICAxLiBvcHRpb25zLnBvcnQgKGZyb20gY29uZmlnIGZpbGUsIHJlc29sdmVkIGJ5IHRoZSBESSBjb250YWluZXIpXG4gKiAgIDIuIERPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUIGVudiB2YXJcbiAqICAgMy4gNDE3MTUgKGhhcmRjb2RlZCBkZWZhdWx0IGluIGVudi50cylcbiAqL1xuY29uc3QgREVGQVVMVF9DT05TT0xFX1BPUlQgPSBlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFX1BPUlQ7XG5jb25zdCBMRUdBQ1lfQ09OU09MRV9GQUxMQkFDS19QT1JUID0gMzkzOTtcbmNvbnN0IFNZTlRIRVRJQ19QT1JUX09XTkVSX1NFU1NJT05fUFJFRklYID0gJ3BvcnQtb3duZXItJztcbmNvbnN0IExFQURFUl9ESVNDT1ZFUllfVElNRU9VVF9NUyA9IDJfMDAwO1xuXG5mdW5jdGlvbiBjdXJyZW50VGltZXN0YW1wKCk6IHN0cmluZyB7XG4gIHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RhcnRpbmcgdGhlIHVuaWZpZWQgY29uc29sZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkQ29uc29sZU9wdGlvbnMge1xuICAvKiogVGhpcyBwcm9jZXNzJ3MgdW5pcXVlIHNlc3Npb24gSUQgKi9cbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIC8qKiBTdGFibGUgRG9sbGhvdXNlIHNlc3Npb24gaWRlbnRpdHkgc2hvd24gdG8gaHVtYW5zIGFuZCB1c2VkIGZvciBwZXJzaXN0ZW5jZS4gKi9cbiAgc3RhYmxlU2Vzc2lvbklkOiBzdHJpbmc7XG4gIC8qKiBQb3J0Zm9saW8gYmFzZSBkaXJlY3RvcnkgKGZvciBzdGFydFdlYlNlcnZlcikgKi9cbiAgcG9ydGZvbGlvRGlyOiBzdHJpbmc7XG4gIC8qKiBMb2cgbWVtb3J5IHNpbmsgKGZvciBjb25zb2xlIGhpc3RvcnkpICovXG4gIG1lbW9yeVNpbms6IE1lbW9yeUxvZ1Npbms7XG4gIC8qKiBNZXRyaWNzIG1lbW9yeSBzaW5rICovXG4gIG1ldHJpY3NTaW5rPzogTWVtb3J5TWV0cmljc1Npbms7XG4gIC8qKiBNQ1AtQVFMIGhhbmRsZXIgZm9yIHBlcm1pc3Npb24gcm91dGVzICh0eXBlZCBhcyBhbnkgdG8gYXZvaWQgY2lyY3VsYXIgaW1wb3J0cykgKi9cbiAgbWNwQXFsSGFuZGxlcj86IGFueTtcbiAgLyoqIENhbGxiYWNrIHRvIHJlZ2lzdGVyIGEgbG9nIHNpbmsgd2l0aCB0aGUgTG9nTWFuYWdlciAqL1xuICByZWdpc3RlckxvZ1Npbms6IChzaW5rOiB7IHdyaXRlKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpOiB2b2lkOyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+OyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IH0pID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB0byB3aXJlIFNTRSBicm9hZGNhc3RzIGFmdGVyIHdlYiBzZXJ2ZXIgc3RhcnRzICovXG4gIHdpcmVTU0VCcm9hZGNhc3RzOiAod2ViUmVzdWx0OiB7IGxvZ0Jyb2FkY2FzdD86IChlbnRyeTogVW5pZmllZExvZ0VudHJ5KSA9PiB2b2lkOyBtZXRyaWNzT25TbmFwc2hvdD86IChzbmFwc2hvdDogTWV0cmljU25hcHNob3QpID0+IHZvaWQgfSwgbWV0cmljc1Npbms/OiBNZW1vcnlNZXRyaWNzU2luaykgPT4gdm9pZDtcbiAgLyoqIENvbnNvbGUgcG9ydCBvdmVycmlkZSBmcm9tIGNvbmZpZyBmaWxlLiBGYWxscyBiYWNrIHRvIGVudiB2YXIgaWYgbm90IHByb3ZpZGVkLiAqL1xuICBwb3J0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBzdGFydGluZyB0aGUgdW5pZmllZCBjb25zb2xlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRDb25zb2xlUmVzdWx0IHtcbiAgcm9sZTogJ2xlYWRlcicgfCAnZm9sbG93ZXInO1xuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQ7XG4gIC8qKiBQb3J0IHRoZSBjb25zb2xlIGlzIHJ1bm5pbmcgb24gKGxlYWRlciBvbmx5KSAqL1xuICBwb3J0PzogbnVtYmVyO1xuICAvKiogQ2xlYW51cCBmdW5jdGlvbiB0byBjYWxsIG9uIHNodXRkb3duICovXG4gIGNsZWFudXA6ICgpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQ2hlY2sgZm9yIGEgcnVubmluZyBsZWdhY3kgKHByZS1hdXRoZW50aWNhdGlvbikgRG9sbGhvdXNlTUNQIGNvbnNvbGUgYW5kXG4gKiBsb2cgYSBXQVJOLWxldmVsIG1lc3NhZ2UgaWYgb25lIGlzIGZvdW5kICgjMTc5NCkuXG4gKlxuICogRXh0cmFjdGVkIGZyb20gYHN0YXJ0VW5pZmllZENvbnNvbGVgIHNvIHRoZSB3aXJpbmcgY2FuIGJlIGludGVncmF0aW9uLVxuICogdGVzdGVkIGluIGlzb2xhdGlvbiB3aXRob3V0IHNwaW5uaW5nIHVwIGEgZnVsbCB3ZWIgc2VydmVyIGFuZCBsZWFkZXJcbiAqIGVsZWN0aW9uLiBUaGUgaW1wbGVtZW50YXRpb24gaXMgZmlyZS1hbmQtZm9yZ2V0OiBkZXRlY3Rpb24gZmFpbHVyZXNcbiAqIGFyZSBsb2dnZWQgYXQgREVCVUcgYW5kIG5ldmVyIHByb3BhZ2F0ZSwgYmVjYXVzZSBhIGZhaWx1cmUgaGVyZSBtdXN0XG4gKiBub3QgYmxvY2sgbGVhZGVyIGVsZWN0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGVkIGNvbnNvbGUuXG4gKlxuICogQHBhcmFtIGN1cnJlbnRQb3J0IC0gVGhlIHBvcnQgdGhlIGF1dGhlbnRpY2F0ZWQgY29uc29sZSBpbnRlbmRzIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICBiaW5kIHRvLiBVc2VkIGluIHRoZSB3YXJuaW5nIG1lc3NhZ2UgdG8gaGVscCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgIHVzZXIgdGVsbCB0aGUgdHdvIGNvbnNvbGVzIGFwYXJ0LlxuICogQHBhcmFtIGRldGVjdCAgICAgIC0gT3B0aW9uYWwgaW5qZWN0aW9uIHBvaW50IGZvciB0aGUgZGV0ZWN0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gYGRldGVjdExlZ2FjeUxlYWRlcmAuIFRlc3RzXG4gKiAgICAgICAgICAgICAgICAgICAgICBwYXNzIGEgc3R1Yi5cbiAqIEBwYXJhbSBsb2cgICAgICAgICAtIE9wdGlvbmFsIGluamVjdGlvbiBwb2ludCBmb3IgdGhlIGxvZ2dlci4gRGVmYXVsdHNcbiAqICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBtb2R1bGUgbG9nZ2VyLiBUZXN0cyBwYXNzIGEgc3B5LlxuICogQHJldHVybnMgVGhlIGxlZ2FjeSBsZWFkZXIgaW5mbyBmcm9tIGBkZXRlY3QoKWAsIG9yIG51bGwgaWYgZGV0ZWN0aW9uXG4gKiAgICAgICAgICB0aHJldy4gRXhwb3NlZCBzbyB0ZXN0cyBjYW4gYXNzZXJ0IHRoZSBmdWxsIHJlc3VsdCBzaGFwZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhcm5JZkxlZ2FjeUNvbnNvbGVQcmVzZW50KFxuICBjdXJyZW50UG9ydDogbnVtYmVyLFxuICBkZXRlY3Q6IHR5cGVvZiBkZXRlY3RMZWdhY3lMZWFkZXIgPSBkZXRlY3RMZWdhY3lMZWFkZXIsXG4gIGxvZzogdHlwZW9mIGxvZ2dlciA9IGxvZ2dlcixcbik6IFByb21pc2U8QXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBkZXRlY3RMZWdhY3lMZWFkZXI+PiB8IG51bGw+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBsZWdhY3kgPSBhd2FpdCBkZXRlY3QoKTtcbiAgICBpZiAobGVnYWN5LmxlZ2FjeVJ1bm5pbmcpIHtcbiAgICAgIGxvZy53YXJuKFxuICAgICAgICBgW1VuaWZpZWRDb25zb2xlXSBMZWdhY3kgKHByZS1hdXRoZW50aWNhdGlvbikgRG9sbGhvdXNlTUNQIGNvbnNvbGUgZGV0ZWN0ZWQgYCArXG4gICAgICAgIGAocGlkPSR7bGVnYWN5LnBpZH0sIHBvcnQ9JHtsZWdhY3kucG9ydH0pLiBCb3RoIGNvbnNvbGVzIHdpbGwgcnVuIGAgK1xuICAgICAgICBgaW5kZXBlbmRlbnRseSBvbiBkaWZmZXJlbnQgcG9ydHMgd2l0aCBkaWZmZXJlbnQgc2VjdXJpdHkgcG9zdHVyZS4gYCArXG4gICAgICAgIGBUaGUgYXV0aGVudGljYXRlZCBjb25zb2xlICh0aGlzIHByb2Nlc3MpIHVzZXMgcG9ydCAke2N1cnJlbnRQb3J0fTsgYCArXG4gICAgICAgIGB0aGUgbGVnYWN5IGNvbnNvbGUgdXNlcyBwb3J0ICR7bGVnYWN5LnBvcnQgPz8gTEVHQUNZX0NPTlNPTEVfRkFMTEJBQ0tfUE9SVH0uIGAgK1xuICAgICAgICBgRm9yIGNvbnNpc3RlbnQgc2VjdXJpdHksIHVwZGF0ZSB0aGUgbGVnYWN5IGluc3RhbGxhdGlvbiB0byBhIGAgK1xuICAgICAgICBgdmVyc2lvbiB3aXRoIHRoZSBhdXRoZW50aWNhdGVkIGNvbnNvbGUuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBsZWdhY3k7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIEJlc3QtZWZmb3J0IOKAlCBuZXZlciBibG9jayBlbGVjdGlvbiBvbiBhIGRldGVjdGlvbiBmYWlsdXJlXG4gICAgbG9nLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIExlZ2FjeSBsZWFkZXIgZGV0ZWN0aW9uIGZhaWxlZCcsIHtcbiAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFNlc3Npb25BcGlSZWNvcmQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgcGlkOiBudW1iZXI7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgbGFzdEhlYXJ0YmVhdD86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBpc0xlYWRlcj86IGJvb2xlYW47XG4gIGtpbmQ/OiBzdHJpbmc7XG4gIHNlcnZlclZlcnNpb24/OiBzdHJpbmc7XG4gIGNvbnNvbGVQcm90b2NvbFZlcnNpb24/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9ydExlYWRlckRpc2NvdmVyeSB7XG4gIGxlYWRlckluZm86IENvbnNvbGVMZWFkZXJJbmZvIHwgbnVsbDtcbiAgb3duZXJQaWQ6IG51bWJlciB8IG51bGw7XG4gIHNvdXJjZTogJ2FwaScgfCAnbG9jaycgfCAnc3ludGhldGljJyB8ICdub25lJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCaW5kRmFpbHVyZVJlY292ZXJ5UmVzdWx0IGV4dGVuZHMgUG9ydExlYWRlckRpc2NvdmVyeSB7XG4gIGxvY2tDbGVhbnVwQXR0ZW1wdGVkOiBib29sZWFuO1xuICBsb2NrQ2xlYW51cFBlcmZvcm1lZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb3J0T3duZXJSZXBsYWNlbWVudERlY2lzaW9uIHtcbiAgc2hvdWxkRXZpY3Q6IGJvb2xlYW47XG4gIG93bmVyUGlkOiBudW1iZXIgfCBudWxsO1xuICBwcmVmZXJlbmNlOiBMZWFkZXJQcmVmZXJlbmNlRGVjaXNpb24gfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgRm9yY2VUYWtlb3ZlckF0dGVtcHRSZXN1bHQge1xuICB3ZWJSZXN1bHQ6IFdlYlNlcnZlclJlc3VsdDtcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0O1xuICBmYWxsYmFjazogUG9ydExlYWRlckRpc2NvdmVyeTtcbiAgcmVwbGFjZW1lbnQ6IFBvcnRPd25lclJlcGxhY2VtZW50RGVjaXNpb247XG4gIGZvcmNlZEtpbGw6IEtpbGxTdGFsZVByb2Nlc3NPdXRjb21lIHwgbnVsbDtcbiAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGJvb2xlYW47XG4gIHJlYm91bmRMb2NrQ2xhaW1lZDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEZvbGxvd2VyQXV0aG9yaXR5UmVzb2x1dGlvbiB7XG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdDtcbiAgZGlzY292ZXJ5OiBQb3J0TGVhZGVyRGlzY292ZXJ5IHwgbnVsbDtcbiAgcmVwbGFjZW1lbnQ6IFBvcnRPd25lclJlcGxhY2VtZW50RGVjaXNpb24gfCBudWxsO1xuICBmb3JjZWRDbGFpbTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEZvbGxvd2VyQXV0aG9yaXR5RGVwZW5kZW5jaWVzIHtcbiAgaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlSW1wbD86IHR5cGVvZiBpc0xlYWRlcldlYkNvbnNvbGVSZWFjaGFibGU7XG4gIGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnRJbXBsPzogdHlwZW9mIGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnQ7XG4gIGZvcmNlQ2xhaW1MZWFkZXJzaGlwSW1wbD86IHR5cGVvZiBmb3JjZUNsYWltTGVhZGVyc2hpcDtcbiAgZGVsZXRlTGVhZGVyTG9ja0ltcGw/OiB0eXBlb2YgZGVsZXRlTGVhZGVyTG9jaztcbn1cblxuaW50ZXJmYWNlIERpc2NvdmVyeURlcGVuZGVuY2llcyB7XG4gIGZldGNoSW1wbD86IHR5cGVvZiBmZXRjaDtcbiAgZmluZFBpZE9uUG9ydEltcGw/OiB0eXBlb2YgZmluZFBpZE9uUG9ydDtcbiAgcmVhZExlYWRlckxvY2tJbXBsPzogdHlwZW9mIHJlYWRMZWFkZXJMb2NrO1xufVxuXG5mdW5jdGlvbiBidWlsZERpc2NvdmVyeUhlYWRlcnMoYXV0aFRva2VuOiBzdHJpbmcgfCBudWxsKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiBhdXRoVG9rZW4gPyB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthdXRoVG9rZW59YCB9IDoge307XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTGVhZGVySW5mb0Zyb21TZXNzaW9uKHBvcnQ6IG51bWJlciwgb3duZXJQaWQ6IG51bWJlciwgbGVhZGVyU2Vzc2lvbjogU2Vzc2lvbkFwaVJlY29yZCk6IENvbnNvbGVMZWFkZXJJbmZvIHtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBMT0NLX1ZFUlNJT04sXG4gICAgcGlkOiBvd25lclBpZCxcbiAgICBwb3J0LFxuICAgIHNlc3Npb25JZDogVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobGVhZGVyU2Vzc2lvbi5zZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgIHN0YXJ0ZWRBdDogbGVhZGVyU2Vzc2lvbi5zdGFydGVkQXQgPz8gY3VycmVudFRpbWVzdGFtcCgpLFxuICAgIGhlYXJ0YmVhdDogbGVhZGVyU2Vzc2lvbi5sYXN0SGVhcnRiZWF0ID8/IGN1cnJlbnRUaW1lc3RhbXAoKSxcbiAgICBzZXJ2ZXJWZXJzaW9uOiBsZWFkZXJTZXNzaW9uLnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IGxlYWRlclNlc3Npb24uY29uc29sZVByb3RvY29sVmVyc2lvbiA/PyBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU3ludGhldGljTGVhZGVySW5mbyhwb3J0OiBudW1iZXIsIG93bmVyUGlkOiBudW1iZXIpOiBDb25zb2xlTGVhZGVySW5mbyB7XG4gIGNvbnN0IG5vdyA9IGN1cnJlbnRUaW1lc3RhbXAoKTtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBMT0NLX1ZFUlNJT04sXG4gICAgcGlkOiBvd25lclBpZCxcbiAgICBwb3J0LFxuICAgIHNlc3Npb25JZDogYCR7U1lOVEhFVElDX1BPUlRfT1dORVJfU0VTU0lPTl9QUkVGSVh9JHtvd25lclBpZH1gLFxuICAgIHN0YXJ0ZWRBdDogbm93LFxuICAgIGhlYXJ0YmVhdDogbm93LFxuICAgIHNlcnZlclZlcnNpb246IExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uOiBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRpc2NvdmVyTGVhZGVyVmlhU2Vzc2lvbnNBcGkoXG4gIHBvcnQ6IG51bWJlcixcbiAgb3duZXJQaWQ6IG51bWJlcixcbiAgYXV0aFRva2VuOiBzdHJpbmcgfCBudWxsLFxuICBmZXRjaEltcGw6IHR5cGVvZiBmZXRjaCxcbik6IFByb21pc2U8Q29uc29sZUxlYWRlckluZm8gfCBudWxsPiB7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgTEVBREVSX0RJU0NPVkVSWV9USU1FT1VUX01TKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hJbXBsKGBodHRwOi8vMTI3LjAuMC4xOiR7cG9ydH0vYXBpL3Nlc3Npb25zYCwge1xuICAgICAgaGVhZGVyczogYnVpbGREaXNjb3ZlcnlIZWFkZXJzKGF1dGhUb2tlbiksXG4gICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgeyBzZXNzaW9ucz86IFNlc3Npb25BcGlSZWNvcmRbXSB9O1xuICAgIGNvbnN0IHNlc3Npb25zID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLnNlc3Npb25zKSA/IHBheWxvYWQuc2Vzc2lvbnMgOiBbXTtcbiAgICBjb25zdCBsZWFkZXJTZXNzaW9uID0gc2Vzc2lvbnMuZmluZCgoc2Vzc2lvbikgPT5cbiAgICAgIHNlc3Npb24ucGlkID09PSBvd25lclBpZCAmJlxuICAgICAgc2Vzc2lvbi5pc0xlYWRlciA9PT0gdHJ1ZSAmJlxuICAgICAgc2Vzc2lvbi5raW5kID09PSAnbWNwJyAmJlxuICAgICAgc2Vzc2lvbi5zdGF0dXMgIT09ICdzdG9wcGVkJ1xuICAgICk7XG4gICAgcmV0dXJuIGxlYWRlclNlc3Npb24gPyBidWlsZExlYWRlckluZm9Gcm9tU2Vzc2lvbihwb3J0LCBvd25lclBpZCwgbGVhZGVyU2Vzc2lvbikgOiBudWxsO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydChcbiAgcG9ydDogbnVtYmVyLFxuICBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwsXG4gIGRlcHM6IERpc2NvdmVyeURlcGVuZGVuY2llcyA9IHt9LFxuKTogUHJvbWlzZTxQb3J0TGVhZGVyRGlzY292ZXJ5PiB7XG4gIGNvbnN0IGZldGNoSW1wbCA9IGRlcHMuZmV0Y2hJbXBsID8/IGZldGNoO1xuICBjb25zdCBmaW5kUGlkT25Qb3J0SW1wbCA9IGRlcHMuZmluZFBpZE9uUG9ydEltcGwgPz8gZmluZFBpZE9uUG9ydDtcbiAgY29uc3QgcmVhZExlYWRlckxvY2tJbXBsID0gZGVwcy5yZWFkTGVhZGVyTG9ja0ltcGwgPz8gcmVhZExlYWRlckxvY2s7XG4gIGNvbnN0IG93bmVyUGlkID0gYXdhaXQgZmluZFBpZE9uUG9ydEltcGwocG9ydCk7XG5cbiAgaWYgKG93bmVyUGlkICE9PSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxlYWRlckluZm8gPSBhd2FpdCBkaXNjb3ZlckxlYWRlclZpYVNlc3Npb25zQXBpKHBvcnQsIG93bmVyUGlkLCBhdXRoVG9rZW4sIGZldGNoSW1wbCk7XG4gICAgICBpZiAobGVhZGVySW5mbykge1xuICAgICAgICByZXR1cm4geyBvd25lclBpZCwgc291cmNlOiAnYXBpJywgbGVhZGVySW5mbyB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIEZhaWxlZCB0byBxdWVyeSBhY3RpdmUgbGVhZGVyIHNlc3Npb25zJywge1xuICAgICAgICBwb3J0LFxuICAgICAgICBvd25lclBpZCxcbiAgICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGxvY2sgPSBhd2FpdCByZWFkTGVhZGVyTG9ja0ltcGwoKTtcbiAgaWYgKGxvY2s/LnBvcnQgPT09IHBvcnQgJiYgKG93bmVyUGlkID09PSBudWxsIHx8IGxvY2sucGlkID09PSBvd25lclBpZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duZXJQaWQ6IG93bmVyUGlkID8/IGxvY2sucGlkLFxuICAgICAgc291cmNlOiAnbG9jaycsXG4gICAgICBsZWFkZXJJbmZvOiB7XG4gICAgICAgIC4uLmxvY2ssXG4gICAgICAgIHNlc3Npb25JZDogVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobG9jay5zZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKG93bmVyUGlkICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bmVyUGlkLFxuICAgICAgc291cmNlOiAnc3ludGhldGljJyxcbiAgICAgIGxlYWRlckluZm86IGJ1aWxkU3ludGhldGljTGVhZGVySW5mbyhwb3J0LCBvd25lclBpZCksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7IGxlYWRlckluZm86IG51bGwsIG93bmVyUGlkOiBudWxsLCBzb3VyY2U6ICdub25lJyB9O1xufVxuXG5pbnRlcmZhY2UgQmluZEZhaWx1cmVSZWNvdmVyeURlcGVuZGVuY2llcyBleHRlbmRzIERpc2NvdmVyeURlcGVuZGVuY2llcyB7XG4gIGRlbGV0ZUxlYWRlckxvY2tJbXBsPzogdHlwZW9mIGRlbGV0ZUxlYWRlckxvY2s7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvdmVyTGVhZGVyQmluZEZhaWx1cmUoXG4gIHByb3Zpc2lvbmFsTGVhZGVyOiBDb25zb2xlTGVhZGVySW5mbyxcbiAgcG9ydDogbnVtYmVyLFxuICBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwsXG4gIGRlcHM6IEJpbmRGYWlsdXJlUmVjb3ZlcnlEZXBlbmRlbmNpZXMgPSB7fSxcbik6IFByb21pc2U8QmluZEZhaWx1cmVSZWNvdmVyeVJlc3VsdD4ge1xuICBjb25zdCByZWFkTGVhZGVyTG9ja0ltcGwgPSBkZXBzLnJlYWRMZWFkZXJMb2NrSW1wbCA/PyByZWFkTGVhZGVyTG9jaztcbiAgY29uc3QgZGVsZXRlTGVhZGVyTG9ja0ltcGwgPSBkZXBzLmRlbGV0ZUxlYWRlckxvY2tJbXBsID8/IGRlbGV0ZUxlYWRlckxvY2s7XG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciBiaW5kIHJlY292ZXJ5IGluaXRpYXRlZCcsIHtcbiAgICBwcm92aXNpb25hbFNlc3Npb25JZDogcHJvdmlzaW9uYWxMZWFkZXIuc2Vzc2lvbklkLFxuICAgIHByb3Zpc2lvbmFsUGlkOiBwcm92aXNpb25hbExlYWRlci5waWQsXG4gICAgcG9ydCxcbiAgfSk7XG5cbiAgbGV0IGZhbGxiYWNrID0gYXdhaXQgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydChwb3J0LCBhdXRoVG9rZW4sIGRlcHMpO1xuICBsZXQgbG9ja0NsZWFudXBBdHRlbXB0ZWQgPSBmYWxzZTtcbiAgbGV0IGxvY2tDbGVhbnVwUGVyZm9ybWVkID0gZmFsc2U7XG4gIGNvbnN0IGN1cnJlbnRMb2NrID0gYXdhaXQgcmVhZExlYWRlckxvY2tJbXBsKCk7XG4gIGNvbnN0IHByb3Zpc2lvbmFsTG9ja01hdGNoZXMgPSAoXG4gICAgY3VycmVudExvY2s/LnBpZCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucGlkICYmXG4gICAgY3VycmVudExvY2sucG9ydCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucG9ydCAmJlxuICAgIGN1cnJlbnRMb2NrLnNlc3Npb25JZCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIuc2Vzc2lvbklkXG4gICk7XG4gIGNvbnN0IGZhbGxiYWNrUG9pbnRzVG9Qcm92aXNpb25hbExlYWRlciA9IChcbiAgICBmYWxsYmFjay5sZWFkZXJJbmZvPy5waWQgPT09IHByb3Zpc2lvbmFsTGVhZGVyLnBpZCAmJlxuICAgIGZhbGxiYWNrLmxlYWRlckluZm8ucG9ydCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucG9ydCAmJlxuICAgIGZhbGxiYWNrLmxlYWRlckluZm8uc2Vzc2lvbklkID09PSBwcm92aXNpb25hbExlYWRlci5zZXNzaW9uSWRcbiAgKTtcblxuICBpZiAocHJvdmlzaW9uYWxMb2NrTWF0Y2hlcykge1xuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICBhd2FpdCBkZWxldGVMZWFkZXJMb2NrSW1wbCgpO1xuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkID0gdHJ1ZTtcbiAgICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBSZW1vdmVkIHByb3Zpc2lvbmFsIGxlYWRlciBsb2NrIGFmdGVyIGJpbmQgZmFpbHVyZScsIHtcbiAgICAgIHByb3Zpc2lvbmFsU2Vzc2lvbklkOiBwcm92aXNpb25hbExlYWRlci5zZXNzaW9uSWQsXG4gICAgICBwcm92aXNpb25hbFBpZDogcHJvdmlzaW9uYWxMZWFkZXIucGlkLFxuICAgICAgcG9ydCxcbiAgICB9KTtcbiAgICBpZiAoZmFsbGJhY2tQb2ludHNUb1Byb3Zpc2lvbmFsTGVhZGVyKSB7XG4gICAgICBmYWxsYmFjayA9IGF3YWl0IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnQocG9ydCwgYXV0aFRva2VuLCBkZXBzKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBMZWFkZXIgYmluZCByZWNvdmVyeSBjb21wbGV0ZWQnLCB7XG4gICAgcHJvdmlzaW9uYWxTZXNzaW9uSWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnNlc3Npb25JZCxcbiAgICBwcm92aXNpb25hbFBpZDogcHJvdmlzaW9uYWxMZWFkZXIucGlkLFxuICAgIHBvcnQsXG4gICAgZGlzY292ZXJ5U291cmNlOiBmYWxsYmFjay5zb3VyY2UsXG4gICAgb3duZXJQaWQ6IGZhbGxiYWNrLm93bmVyUGlkLFxuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkLFxuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLmZhbGxiYWNrLFxuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkLFxuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVQb3J0T3duZXJSZXBsYWNlbWVudChcbiAgY2FuZGlkYXRlTGVhZGVyOiBDb25zb2xlTGVhZGVySW5mbyxcbiAgZmFsbGJhY2s6IFBvcnRMZWFkZXJEaXNjb3ZlcnksXG4pOiBQb3J0T3duZXJSZXBsYWNlbWVudERlY2lzaW9uIHtcbiAgaWYgKCFmYWxsYmFjay5sZWFkZXJJbmZvIHx8IGZhbGxiYWNrLm93bmVyUGlkID09PSBudWxsIHx8IGZhbGxiYWNrLm93bmVyUGlkID09PSBjYW5kaWRhdGVMZWFkZXIucGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3VsZEV2aWN0OiBmYWxzZSxcbiAgICAgIG93bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICAgIHByZWZlcmVuY2U6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHByZWZlcmVuY2UgPSBldmFsdWF0ZUxlYWRlclByZWZlcmVuY2UoY2FuZGlkYXRlTGVhZGVyLCBmYWxsYmFjay5sZWFkZXJJbmZvKTtcbiAgcmV0dXJuIHtcbiAgICBzaG91bGRFdmljdDogcHJlZmVyZW5jZS5zaG91bGRSZXBsYWNlLFxuICAgIG93bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICBwcmVmZXJlbmNlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgcHJvdmlzaW9uYWxMZWFkZXI6IENvbnNvbGVMZWFkZXJJbmZvLFxuICBiaW5kUmVzdWx0OiBXZWJTZXJ2ZXJSZXN1bHRbJ2JpbmRSZXN1bHQnXSxcbiAgZmFsbGJhY2s6IFBvcnRMZWFkZXJEaXNjb3ZlcnksXG4gIHJlcGxhY2VtZW50PzogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbixcbiAgZm9yY2VkS2lsbD86IEtpbGxTdGFsZVByb2Nlc3NPdXRjb21lIHwgbnVsbCxcbikge1xuICByZXR1cm4ge1xuICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgIGJpbmRFcnJvcjogYmluZFJlc3VsdD8uZXJyb3IsXG4gICAgYmluZERldGFpbDogYmluZFJlc3VsdD8uZGV0YWlsLFxuICAgIHByb3Zpc2lvbmFsTGVhZGVyUGlkOiBwcm92aXNpb25hbExlYWRlci5waWQsXG4gICAgcHJvdmlzaW9uYWxMZWFkZXJTZXNzaW9uSWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnNlc3Npb25JZCxcbiAgICBwcm92aXNpb25hbExlYWRlclZlcnNpb246IHByb3Zpc2lvbmFsTGVhZGVyLnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIHByb3Zpc2lvbmFsTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBwcm92aXNpb25hbExlYWRlci5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICBmYWxsYmFja093bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICBmYWxsYmFja1NvdXJjZTogZmFsbGJhY2suc291cmNlLFxuICAgIGZhbGxiYWNrTGVhZGVyUGlkOiBmYWxsYmFjay5sZWFkZXJJbmZvPy5waWQsXG4gICAgZmFsbGJhY2tMZWFkZXJTZXNzaW9uSWQ6IGZhbGxiYWNrLmxlYWRlckluZm8/LnNlc3Npb25JZCxcbiAgICBmYWxsYmFja0xlYWRlclZlcnNpb246IGZhbGxiYWNrLmxlYWRlckluZm8/LnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIGZhbGxiYWNrTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBmYWxsYmFjay5sZWFkZXJJbmZvPy5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICByZXBsYWNlbWVudFNob3VsZEV2aWN0OiByZXBsYWNlbWVudD8uc2hvdWxkRXZpY3QgPz8gZmFsc2UsXG4gICAgcmVwbGFjZW1lbnRSZWFzb246IHJlcGxhY2VtZW50Py5wcmVmZXJlbmNlPy5yZWFzb24sXG4gICAgZm9yY2VkS2lsbFJlYXNvbjogZm9yY2VkS2lsbD8ucmVhc29uLFxuICAgIGZvcmNlZEtpbGxQaWQ6IGZvcmNlZEtpbGw/LnBpZCxcbiAgICBmb3JjZWRLaWxsRGV0YWlsOiBmb3JjZWRLaWxsPy5kZXRhaWwsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQXV0aG9yaXR5UmVzb2x1dGlvbkxvZ0NvbnRleHQoXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIGVsZWN0ZWRMZWFkZXI6IENvbnNvbGVMZWFkZXJJbmZvLFxuICBkaXNjb3Zlcnk6IFBvcnRMZWFkZXJEaXNjb3ZlcnkgfCBudWxsLFxuICByZXBsYWNlbWVudDogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbiB8IG51bGwsXG4pIHtcbiAgcmV0dXJuIHtcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBlbGVjdGVkTGVhZGVyUGlkOiBlbGVjdGVkTGVhZGVyLnBpZCxcbiAgICBlbGVjdGVkTGVhZGVyU2Vzc2lvbklkOiBlbGVjdGVkTGVhZGVyLnNlc3Npb25JZCxcbiAgICBlbGVjdGVkTGVhZGVyVmVyc2lvbjogZWxlY3RlZExlYWRlci5zZXJ2ZXJWZXJzaW9uID8/IExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgICBlbGVjdGVkTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBlbGVjdGVkTGVhZGVyLmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPz8gQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICAgIHNlcnZpbmdPd25lclBpZDogZGlzY292ZXJ5Py5vd25lclBpZCA/PyBudWxsLFxuICAgIHNlcnZpbmdTb3VyY2U6IGRpc2NvdmVyeT8uc291cmNlID8/ICdub25lJyxcbiAgICBzZXJ2aW5nTGVhZGVyUGlkOiBkaXNjb3Zlcnk/LmxlYWRlckluZm8/LnBpZCA/PyBudWxsLFxuICAgIHNlcnZpbmdMZWFkZXJTZXNzaW9uSWQ6IGRpc2NvdmVyeT8ubGVhZGVySW5mbz8uc2Vzc2lvbklkID8/IG51bGwsXG4gICAgc2VydmluZ0xlYWRlclZlcnNpb246IGRpc2NvdmVyeT8ubGVhZGVySW5mbz8uc2VydmVyVmVyc2lvbiA/PyBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04sXG4gICAgc2VydmluZ0xlYWRlclByb3RvY29sVmVyc2lvbjogZGlzY292ZXJ5Py5sZWFkZXJJbmZvPy5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICByZXBsYWNlbWVudFNob3VsZEV2aWN0OiByZXBsYWNlbWVudD8uc2hvdWxkRXZpY3QgPz8gZmFsc2UsXG4gICAgcmVwbGFjZW1lbnRSZWFzb246IHJlcGxhY2VtZW50Py5wcmVmZXJlbmNlPy5yZWFzb24gPz8gbnVsbCxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVGb2xsb3dlckF1dGhvcml0eShcbiAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgZGVwczogRm9sbG93ZXJBdXRob3JpdHlEZXBlbmRlbmNpZXMgPSB7fSxcbik6IFByb21pc2U8Rm9sbG93ZXJBdXRob3JpdHlSZXNvbHV0aW9uPiB7XG4gIGNvbnN0IGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwgPSBkZXBzLmlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwgPz8gaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlO1xuICBjb25zdCBkaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0SW1wbCA9IGRlcHMuZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydEltcGwgPz8gZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydDtcbiAgY29uc3QgZm9yY2VDbGFpbUxlYWRlcnNoaXBJbXBsID0gZGVwcy5mb3JjZUNsYWltTGVhZGVyc2hpcEltcGwgPz8gZm9yY2VDbGFpbUxlYWRlcnNoaXA7XG4gIGNvbnN0IGRlbGV0ZUxlYWRlckxvY2tJbXBsID0gZGVwcy5kZWxldGVMZWFkZXJMb2NrSW1wbCA/PyBkZWxldGVMZWFkZXJMb2NrO1xuXG4gIGNvbnN0IHJlYWNoYWJsZSA9IGF3YWl0IGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwoZWxlY3Rpb24ubGVhZGVySW5mbyk7XG4gIGlmICghcmVhY2hhYmxlKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gRWxlY3RlZCBsZWFkZXIgaXMgbm90IHNlcnZpbmcgdGhlIGNvbnNvbGUgcG9ydDsgZm9yY2luZyB0YWtlb3ZlcicsIHtcbiAgICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgICAgZWxlY3RlZExlYWRlclBpZDogZWxlY3Rpb24ubGVhZGVySW5mby5waWQsXG4gICAgICBlbGVjdGVkTGVhZGVyU2Vzc2lvbklkOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnNlc3Npb25JZCxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlY3Rpb246IGF3YWl0IGZvcmNlQ2xhaW1MZWFkZXJzaGlwSW1wbChzZXNzaW9uSWQsIGNvbnNvbGVQb3J0KSxcbiAgICAgIGRpc2NvdmVyeTogbnVsbCxcbiAgICAgIHJlcGxhY2VtZW50OiBudWxsLFxuICAgICAgZm9yY2VkQ2xhaW06IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGNhbmRpZGF0ZUxlYWRlciA9IGNyZWF0ZUxlYWRlckluZm8oc2Vzc2lvbklkLCBjb25zb2xlUG9ydCk7XG4gIGNvbnN0IGRpc2NvdmVyeSA9IGF3YWl0IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnRJbXBsKGNvbnNvbGVQb3J0LCBudWxsKTtcbiAgaWYgKCFkaXNjb3ZlcnkubGVhZGVySW5mbyB8fCBkaXNjb3Zlcnkub3duZXJQaWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlY3Rpb24sXG4gICAgICBkaXNjb3ZlcnksXG4gICAgICByZXBsYWNlbWVudDogbnVsbCxcbiAgICAgIGZvcmNlZENsYWltOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcmVwbGFjZW1lbnQgPSBldmFsdWF0ZVBvcnRPd25lclJlcGxhY2VtZW50KGNhbmRpZGF0ZUxlYWRlciwgZGlzY292ZXJ5KTtcbiAgaWYgKGRpc2NvdmVyeS5vd25lclBpZCAhPT0gZWxlY3Rpb24ubGVhZGVySW5mby5waWQpIHtcbiAgICBpZiAocmVwbGFjZW1lbnQuc2hvdWxkRXZpY3QpIHtcbiAgICAgIGF3YWl0IGRlbGV0ZUxlYWRlckxvY2tJbXBsKCk7XG4gICAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBTcGxpdC1icmFpbiBjb25zb2xlIGF1dGhvcml0eSBkZXRlY3RlZDsgbmV3ZXIgc2Vzc2lvbiB3aWxsIHJlcGxhY2UgdGhlIGFjdHVhbCBwb3J0IG93bmVyJywgYnVpbGRBdXRob3JpdHlSZXNvbHV0aW9uTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgIGRpc2NvdmVyeSxcbiAgICAgICAgcmVwbGFjZW1lbnQsXG4gICAgICApKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZWN0aW9uOiB7IHJvbGU6ICdsZWFkZXInLCBsZWFkZXJJbmZvOiBjYW5kaWRhdGVMZWFkZXIgfSxcbiAgICAgICAgZGlzY292ZXJ5LFxuICAgICAgICByZXBsYWNlbWVudCxcbiAgICAgICAgZm9yY2VkQ2xhaW06IGZhbHNlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBTcGxpdC1icmFpbiBjb25zb2xlIGF1dGhvcml0eSBkZXRlY3RlZDsgZm9sbG93aW5nIHRoZSBhY3R1YWwgcG9ydCBvd25lcicsIGJ1aWxkQXV0aG9yaXR5UmVzb2x1dGlvbkxvZ0NvbnRleHQoXG4gICAgICBjb25zb2xlUG9ydCxcbiAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICBkaXNjb3ZlcnksXG4gICAgICByZXBsYWNlbWVudCxcbiAgICApKTtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlY3Rpb246IHsgcm9sZTogJ2ZvbGxvd2VyJywgbGVhZGVySW5mbzogZGlzY292ZXJ5LmxlYWRlckluZm8gfSxcbiAgICAgIGRpc2NvdmVyeSxcbiAgICAgIHJlcGxhY2VtZW50LFxuICAgICAgZm9yY2VkQ2xhaW06IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVsZWN0aW9uLFxuICAgIGRpc2NvdmVyeSxcbiAgICByZXBsYWNlbWVudCxcbiAgICBmb3JjZWRDbGFpbTogZmFsc2UsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGF0dGVtcHRGb3JjZVRha2VvdmVyKFxuICBvcHRpb25zOiBVbmlmaWVkQ29uc29sZU9wdGlvbnMsXG4gIGN1cnJlbnRFbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIHByaW1hcnlUb2tlbjogc3RyaW5nLFxuICBzZXJ2ZXJPcHRzOiBXZWJTZXJ2ZXJPcHRpb25zLFxuICBzdGFydFdlYlNlcnZlckltcGw6IChvcHRpb25zOiBXZWJTZXJ2ZXJPcHRpb25zKSA9PiBQcm9taXNlPFdlYlNlcnZlclJlc3VsdD4sXG4pOiBQcm9taXNlPEZvcmNlVGFrZW92ZXJBdHRlbXB0UmVzdWx0PiB7XG4gIGNvbnN0IGluaXRpYWxGYWxsYmFjayA9IGF3YWl0IHJlY292ZXJMZWFkZXJCaW5kRmFpbHVyZShjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbywgY29uc29sZVBvcnQsIHByaW1hcnlUb2tlbik7XG4gIGNvbnN0IGluaXRpYWxSZXBsYWNlbWVudCA9IGV2YWx1YXRlUG9ydE93bmVyUmVwbGFjZW1lbnQoY3VycmVudEVsZWN0aW9uLmxlYWRlckluZm8sIGluaXRpYWxGYWxsYmFjayk7XG5cbiAgaWYgKCFpbml0aWFsUmVwbGFjZW1lbnQuc2hvdWxkRXZpY3QgfHwgaW5pdGlhbFJlcGxhY2VtZW50Lm93bmVyUGlkID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdlYlJlc3VsdDogeyBiaW5kUmVzdWx0OiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9IH0sXG4gICAgICBlbGVjdGlvbjogY3VycmVudEVsZWN0aW9uLFxuICAgICAgZmFsbGJhY2s6IGluaXRpYWxGYWxsYmFjayxcbiAgICAgIHJlcGxhY2VtZW50OiBpbml0aWFsUmVwbGFjZW1lbnQsXG4gICAgICBmb3JjZWRLaWxsOiBudWxsLFxuICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZhbHNlLFxuICAgICAgcmVib3VuZExvY2tDbGFpbWVkOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGF0ZXN0RmFsbGJhY2sgPSBhd2FpdCBkaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0KGNvbnNvbGVQb3J0LCBwcmltYXJ5VG9rZW4pO1xuICBjb25zdCBsYXRlc3RSZXBsYWNlbWVudCA9IGV2YWx1YXRlUG9ydE93bmVyUmVwbGFjZW1lbnQoY3VycmVudEVsZWN0aW9uLmxlYWRlckluZm8sIGxhdGVzdEZhbGxiYWNrKTtcbiAgaWYgKCFsYXRlc3RSZXBsYWNlbWVudC5zaG91bGRFdmljdCB8fCBsYXRlc3RSZXBsYWNlbWVudC5vd25lclBpZCA9PT0gbnVsbCkge1xuICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIEZvcmNlZCB0YWtlb3ZlciB0YXJnZXQgY2hhbmdlZCBiZWZvcmUgZXZpY3Rpb247IHNraXBwaW5nIGZvcmNlZCBraWxsJywge1xuICAgICAgLi4uYnVpbGRCaW5kRmFpbHVyZUxvZ0NvbnRleHQoXG4gICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICBjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgICAgeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdFQUREUklOVVNFJywgZGV0YWlsOiBgUG9ydCAke2NvbnNvbGVQb3J0fSBhbHJlYWR5IGluIHVzZWAgfSxcbiAgICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICAgIGxhdGVzdFJlcGxhY2VtZW50LFxuICAgICAgKSxcbiAgICAgIHByZXZpb3VzT3duZXJQaWQ6IGluaXRpYWxSZXBsYWNlbWVudC5vd25lclBpZCxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgd2ViUmVzdWx0OiB7IGJpbmRSZXN1bHQ6IHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRUFERFJJTlVTRScsIGRldGFpbDogYFBvcnQgJHtjb25zb2xlUG9ydH0gYWxyZWFkeSBpbiB1c2VgIH0gfSxcbiAgICAgIGVsZWN0aW9uOiBjdXJyZW50RWxlY3Rpb24sXG4gICAgICBmYWxsYmFjazogbGF0ZXN0RmFsbGJhY2ssXG4gICAgICByZXBsYWNlbWVudDogbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICBmb3JjZWRLaWxsOiBudWxsLFxuICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZhbHNlLFxuICAgICAgcmVib3VuZExvY2tDbGFpbWVkOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gQXR0ZW1wdGluZyBmb3JjZWQgdGFrZW92ZXIgZnJvbSBvbGRlciBvciBpbmNvbXBhdGlibGUgYWN0aXZlIGxlYWRlcicsIHtcbiAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgY3VycmVudEVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9LFxuICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICApLFxuICB9KTtcblxuICBjb25zdCBmb3JjZWRLaWxsID0gYXdhaXQga2lsbFN0YWxlUHJvY2Vzc0RldGFpbGVkKGxhdGVzdFJlcGxhY2VtZW50Lm93bmVyUGlkLCBjb25zb2xlUG9ydCwge1xuICAgIGFsbG93QWN0aXZlSG9zdFBhcmVudDogdHJ1ZSxcbiAgfSk7XG4gIGlmICghZm9yY2VkS2lsbC5raWxsZWQpIHtcbiAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBGb3JjZWQgdGFrZW92ZXIgc2tpcHBlZCBvciBmYWlsZWQgYWZ0ZXIgaWRlbnRpZnlpbmcgcmVwbGFjZWFibGUgbGVhZGVyJywge1xuICAgICAgLi4uYnVpbGRCaW5kRmFpbHVyZUxvZ0NvbnRleHQoXG4gICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICBjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgICAgeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdFQUREUklOVVNFJywgZGV0YWlsOiBgUG9ydCAke2NvbnNvbGVQb3J0fSBhbHJlYWR5IGluIHVzZWAgfSxcbiAgICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICAgIGxhdGVzdFJlcGxhY2VtZW50LFxuICAgICAgICBmb3JjZWRLaWxsLFxuICAgICAgKSxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgd2ViUmVzdWx0OiB7IGJpbmRSZXN1bHQ6IHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRUFERFJJTlVTRScsIGRldGFpbDogYFBvcnQgJHtjb25zb2xlUG9ydH0gYWxyZWFkeSBpbiB1c2VgIH0gfSxcbiAgICAgIGVsZWN0aW9uOiBjdXJyZW50RWxlY3Rpb24sXG4gICAgICBmYWxsYmFjazogbGF0ZXN0RmFsbGJhY2ssXG4gICAgICByZXBsYWNlbWVudDogbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICBmb3JjZWRLaWxsLFxuICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IHRydWUsXG4gICAgICByZWJvdW5kTG9ja0NsYWltZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBjb25zdCByZWJvdW5kV2ViUmVzdWx0ID0gYXdhaXQgc3RhcnRXZWJTZXJ2ZXJJbXBsKHNlcnZlck9wdHMpO1xuICBsZXQgcmVib3VuZEVsZWN0aW9uID0gY3VycmVudEVsZWN0aW9uO1xuICBsZXQgcmVib3VuZExvY2tDbGFpbWVkID0gZmFsc2U7XG5cbiAgaWYgKCFyZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQgfHwgcmVib3VuZFdlYlJlc3VsdC5iaW5kUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCByZWJvdW5kTGVhZGVySW5mbyA9IGNyZWF0ZUxlYWRlckluZm8ob3B0aW9ucy5zZXNzaW9uSWQsIGNvbnNvbGVQb3J0KTtcbiAgICByZWJvdW5kTG9ja0NsYWltZWQgPSBhd2FpdCBjbGFpbUxlYWRlcnNoaXAocmVib3VuZExlYWRlckluZm8pO1xuICAgIGlmICghcmVib3VuZExvY2tDbGFpbWVkKSB7XG4gICAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBSZWJvdW5kIGxlYWRlciBib3VuZCBwb3J0IGJ1dCBjb3VsZCBub3QgaW1tZWRpYXRlbHkgcmUtY2xhaW0gbG9jaycsIHtcbiAgICAgICAgLi4uYnVpbGRCaW5kRmFpbHVyZUxvZ0NvbnRleHQoXG4gICAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgICAgcmVib3VuZExlYWRlckluZm8sXG4gICAgICAgICAgcmVib3VuZFdlYlJlc3VsdC5iaW5kUmVzdWx0LFxuICAgICAgICAgIGxhdGVzdEZhbGxiYWNrLFxuICAgICAgICAgIGxhdGVzdFJlcGxhY2VtZW50LFxuICAgICAgICAgIGZvcmNlZEtpbGwsXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmVib3VuZEVsZWN0aW9uID0geyByb2xlOiAnbGVhZGVyJywgbGVhZGVySW5mbzogcmVib3VuZExlYWRlckluZm8gfTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBGb3JjZWQgdGFrZW92ZXIga2lsbGVkIG9sZCBsZWFkZXIgYnV0IGJpbmQgcmV0cnkgc3RpbGwgZmFpbGVkJywge1xuICAgICAgLi4uYnVpbGRCaW5kRmFpbHVyZUxvZ0NvbnRleHQoXG4gICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICBjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgICAgcmVib3VuZFdlYlJlc3VsdC5iaW5kUmVzdWx0LFxuICAgICAgICBsYXRlc3RGYWxsYmFjayxcbiAgICAgICAgbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICAgIGZvcmNlZEtpbGwsXG4gICAgICApLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3ZWJSZXN1bHQ6IHJlYm91bmRXZWJSZXN1bHQsXG4gICAgZWxlY3Rpb246IHJlYm91bmRFbGVjdGlvbixcbiAgICBmYWxsYmFjazogbGF0ZXN0RmFsbGJhY2ssXG4gICAgcmVwbGFjZW1lbnQ6IGxhdGVzdFJlcGxhY2VtZW50LFxuICAgIGZvcmNlZEtpbGwsXG4gICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IHRydWUsXG4gICAgcmVib3VuZExvY2tDbGFpbWVkLFxuICB9O1xufVxuXG4vKipcbiAqIFN0YXJ0IHRoZSB1bmlmaWVkIHdlYiBjb25zb2xlLlxuICpcbiAqIFJ1bnMgbGVhZGVyIGVsZWN0aW9uLCB0aGVuIGVpdGhlciBzdGFydHMgdGhlIGZ1bGwgY29uc29sZSAobGVhZGVyKVxuICogb3Igc2V0cyB1cCBldmVudCBmb3J3YXJkaW5nIChmb2xsb3dlcikuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydFVuaWZpZWRDb25zb2xlKG9wdGlvbnM6IFVuaWZpZWRDb25zb2xlT3B0aW9ucyk6IFByb21pc2U8VW5pZmllZENvbnNvbGVSZXN1bHQ+IHtcbiAgLy8gUmVzb2x2ZSBwb3J0OiBvcHRpb25zIChjb25maWcgZmlsZSkg4oaSIGVudiB2YXIg4oaSIGRlZmF1bHRcbiAgY29uc3QgY29uc29sZVBvcnQgPSBvcHRpb25zLnBvcnQgfHwgREVGQVVMVF9DT05TT0xFX1BPUlQ7XG4gIGxvZ2dlci5kZWJ1ZyhgW1VuaWZpZWRDb25zb2xlXSBQb3J0IHJlc29sdmVkOiAke2NvbnNvbGVQb3J0fWAgK1xuICAgIChvcHRpb25zLnBvcnQgPyAnIChmcm9tIGNvbmZpZyBmaWxlKScgOiBgIChmcm9tIGVudi9kZWZhdWx0KWApKTtcblxuICAvLyBMZWdhY3ktbGVhZGVyIGRldGVjdGlvbiAoIzE3OTQpIOKAlCB3YXJuIHRoZSB1c2VyIGlmIGEgcHJlLWF1dGhcbiAgLy8gRG9sbGhvdXNlTUNQIGNvbnNvbGUgaXMgcnVubmluZyBhbG9uZ3NpZGUgdGhpcyBhdXRoZW50aWNhdGVkIG9uZS5cbiAgLy8gVGhleSB3aWxsIGNvZXhpc3QgZmluZSBiZWNhdXNlIG9mIHBvcnQgKyBsb2NrICsgdG9rZW4gZmlsZSBpc29sYXRpb24sXG4gIC8vIGJ1dCB0aGUgdXNlciBzaG91bGQga25vdyBib3RoIGV4aXN0IHNvIHRoZSBkaWZmZXJpbmcgc2VjdXJpdHkgcG9zdHVyZVxuICAvLyBiZXR3ZWVuIHRoZW0gZG9lc24ndCBsb29rIGxpa2UgYSBidWcuXG4gIGF3YWl0IHdhcm5JZkxlZ2FjeUNvbnNvbGVQcmVzZW50KGNvbnNvbGVQb3J0KTtcblxuICBsZXQgZWxlY3Rpb24gPSBhd2FpdCBlbGVjdExlYWRlcihvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQpO1xuXG4gIGlmIChlbGVjdGlvbi5yb2xlID09PSAnZm9sbG93ZXInKSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCByZXNvbHZlRm9sbG93ZXJBdXRob3JpdHkob3B0aW9ucy5zZXNzaW9uSWQsIGNvbnNvbGVQb3J0LCBlbGVjdGlvbik7XG4gICAgZWxlY3Rpb24gPSByZXNvbHZlZC5lbGVjdGlvbjtcbiAgfVxuXG4gIGlmIChlbGVjdGlvbi5yb2xlID09PSAnbGVhZGVyJykge1xuICAgIHJldHVybiBzdGFydEFzTGVhZGVyKG9wdGlvbnMsIGVsZWN0aW9uLCBjb25zb2xlUG9ydCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0YXJ0QXNGb2xsb3dlcihvcHRpb25zLCBlbGVjdGlvbiwgY29uc29sZVBvcnQpO1xuICB9XG59XG5cbi8qKlxuICogU3RhcnQgYXMgdGhlIGNvbnNvbGUgbGVhZGVyLlxuICogQmluZHMgdGhlIHJlc29sdmVkIGNvbnNvbGUgcG9ydCAoY29uZmlnIGZpbGUg4oaSIGVudiB2YXIg4oaSIGRlZmF1bHQpLFxuICogbW91bnRzIGFsbCByb3V0ZXMgaW5jbHVkaW5nIGluZ2VzdGlvbiwgc3RhcnRzIGhlYXJ0YmVhdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3RhcnRBc0xlYWRlcihcbiAgb3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zLFxuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIgPSBERUZBVUxUX0NPTlNPTEVfUE9SVCxcbik6IFByb21pc2U8VW5pZmllZENvbnNvbGVSZXN1bHQ+IHtcbiAgY29uc3QgeyBzdGFydFdlYlNlcnZlciB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2ZXIuanMnKTtcbiAgY29uc3QgeyBwaWNrUmFuZG9tVG9rZW5OYW1lIH0gPSBhd2FpdCBpbXBvcnQoJy4vU2Vzc2lvbk5hbWVzLmpzJyk7XG5cbiAgLy8gSW5pdGlhbGl6ZSB0aGUgY29uc29sZSB0b2tlbiBzdG9yZSAoIzE3ODApLiBDcmVhdGVzIHRoZSB0b2tlbiBmaWxlIG9uXG4gIC8vIGZpcnN0IHJ1biwgcmVhZHMgdGhlIGV4aXN0aW5nIHRva2VucyBvbiBzdWJzZXF1ZW50IHJ1bnMuIFRoZSB0b2tlbiBpc1xuICAvLyBwZXJzaXN0ZW50IGFjcm9zcyByZXN0YXJ0cyDigJQgb25seSByb3RhdGVkIG9uIGV4cGxpY2l0IHJlcXVlc3QgKFBoYXNlIDIpLlxuICAvLyBGZWF0dXJlIGZsYWcgRE9MTEhPVVNFX1dFQl9BVVRIX0VOQUJMRUQgY29udHJvbHMgZW5mb3JjZW1lbnQ7IHRoZSBmaWxlXG4gIC8vIGlzIGdlbmVyYXRlZCByZWdhcmRsZXNzIHNvIGNvbnN1bWVycyBjYW4gYXR0YWNoIHRva2VucyBwcmVlbXB0aXZlbHkuXG4gIGNvbnN0IHRva2VuU3RvcmUgPSBuZXcgQ29uc29sZVRva2VuU3RvcmUoZW52LkRPTExIT1VTRV9DT05TT0xFX1RPS0VOX0ZJTEUpO1xuICBjb25zdCBwcmltYXJ5VG9rZW4gPSBhd2FpdCB0b2tlblN0b3JlLmVuc3VyZUluaXRpYWxpemVkKHBpY2tSYW5kb21Ub2tlbk5hbWUoKSk7XG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIENvbnNvbGUgdG9rZW4gc3RvcmUgaW5pdGlhbGl6ZWQnLCB7XG4gICAgdG9rZW5JZDogcHJpbWFyeVRva2VuLmlkLFxuICAgIHRva2VuTmFtZTogcHJpbWFyeVRva2VuLm5hbWUsXG4gICAgZmlsZTogdG9rZW5TdG9yZS5nZXRGaWxlUGF0aCgpLFxuICAgIGF1dGhFbmZvcmNlZDogZW52LkRPTExIT1VTRV9XRUJfQVVUSF9FTkFCTEVELFxuICB9KTtcblxuICAvLyBQcmUtY3JlYXRlIGEgcGxhY2Vob2xkZXIgYnJvYWRjYXN0IHRoYXQgd2UnbGwgd2lyZSB1cCBhZnRlciB0aGUgc2VydmVyIHN0YXJ0c1xuICBsZXQgbGl2ZUJyb2FkY2FzdDogKChlbnRyeTogVW5pZmllZExvZ0VudHJ5KSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgbGV0IGxpdmVNZXRyaWNzT25TbmFwc2hvdDogKChzbmFwc2hvdDogTWV0cmljU25hcHNob3QpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gIC8vIENyZWF0ZSBpbmdlc3Rpb24gcm91dGVzIHdpdGggYSBkZWZlcnJlZCBicm9hZGNhc3QgKHdpcmVkIGFmdGVyIHNlcnZlciBzdGFydHMpXG4gIGNvbnN0IGluZ2VzdFJlc3VsdCA9IGNyZWF0ZUluZ2VzdFJvdXRlcyh7XG4gICAgbG9nQnJvYWRjYXN0OiAoZW50cnkpID0+IGxpdmVCcm9hZGNhc3Q/LihlbnRyeSksXG4gICAgbWV0cmljc09uU25hcHNob3Q6IChzbmFwc2hvdCkgPT4gbGl2ZU1ldHJpY3NPblNuYXBzaG90Py4oc25hcHNob3QpLFxuICAgIHN0b3JlTWV0cmljc1NuYXBzaG90OiAoc25hcHNob3QpID0+IG9wdGlvbnMubWV0cmljc1Npbms/Lm9uU25hcHNob3Qoc25hcHNob3QpLFxuICB9KTtcblxuICAvLyBTdGFydCB0aGUgd2ViIHNlcnZlciB3aXRoIGluZ2VzdCByb3V0ZXMgbW91bnRlZCBiZWZvcmUgdGhlIFNQQSBmYWxsYmFjay5cbiAgLy8gSWYgdGhlIHBvcnQgaXMgb2NjdXBpZWQgYnkgYSBzdGFsZSBwcm9jZXNzLCByZXRyeSB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYuXG4gIGNvbnN0IHNlcnZlck9wdHMgPSB7XG4gICAgcG9ydGZvbGlvRGlyOiBvcHRpb25zLnBvcnRmb2xpb0RpcixcbiAgICBtZW1vcnlTaW5rOiBvcHRpb25zLm1lbW9yeVNpbmssXG4gICAgbWV0cmljc1Npbms6IG9wdGlvbnMubWV0cmljc1NpbmssXG4gICAgcG9ydDogY29uc29sZVBvcnQsXG4gICAgc2Vzc2lvbklkOiBvcHRpb25zLnN0YWJsZVNlc3Npb25JZCxcbiAgICBydW50aW1lU2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCxcbiAgICBhZGRpdGlvbmFsUm91dGVyczogW2luZ2VzdFJlc3VsdC5yb3V0ZXJdLFxuICAgIHRva2VuU3RvcmUsXG4gICAgLi4uKG9wdGlvbnMubWNwQXFsSGFuZGxlciA/IHsgbWNwQXFsSGFuZGxlcjogb3B0aW9ucy5tY3BBcWxIYW5kbGVyIH0gOiB7fSksXG4gIH07XG4gIC8vIGJpbmRBbmRMaXN0ZW4gbm93IGhhbmRsZXMgRUFERFJJTlVTRSBieSBmaW5kaW5nIGFuZCBraWxsaW5nIHRoZSBzdGFsZVxuICAvLyBwcm9jZXNzIG9uIHRoZSBwb3J0LCB0aGVuIHJldHJ5aW5nLiBObyBleHRlcm5hbCByZXRyeSBsb29wIG5lZWRlZC5cbiAgbGV0IHdlYlJlc3VsdCA9IGF3YWl0IHN0YXJ0V2ViU2VydmVyKHNlcnZlck9wdHMpO1xuXG4gIGlmICh3ZWJSZXN1bHQuYmluZFJlc3VsdCAmJiAhd2ViUmVzdWx0LmJpbmRSZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcmNlVGFrZW92ZXIgPSBhd2FpdCBhdHRlbXB0Rm9yY2VUYWtlb3ZlcihcbiAgICAgIG9wdGlvbnMsXG4gICAgICBlbGVjdGlvbixcbiAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgcHJpbWFyeVRva2VuLnRva2VuLFxuICAgICAgc2VydmVyT3B0cyxcbiAgICAgIHN0YXJ0V2ViU2VydmVyLFxuICAgICk7XG4gICAgd2ViUmVzdWx0ID0gZm9yY2VUYWtlb3Zlci53ZWJSZXN1bHQ7XG4gICAgZWxlY3Rpb24gPSBmb3JjZVRha2VvdmVyLmVsZWN0aW9uO1xuXG4gICAgaWYgKHdlYlJlc3VsdC5iaW5kUmVzdWx0ICYmICF3ZWJSZXN1bHQuYmluZFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBpZiAoZm9yY2VUYWtlb3Zlci5mYWxsYmFjay5sZWFkZXJJbmZvKSB7XG4gICAgICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBMZWFkZXIgcm9sZSBhYm9ydGVkOiBiaW5kIGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIGZvbGxvd2VyJywge1xuICAgICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgICBjb25zb2xlUG9ydCxcbiAgICAgICAgICBlbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICAgIHdlYlJlc3VsdC5iaW5kUmVzdWx0LFxuICAgICAgICAgIGZvcmNlVGFrZW92ZXIuZmFsbGJhY2ssXG4gICAgICAgICAgZm9yY2VUYWtlb3Zlci5yZXBsYWNlbWVudCxcbiAgICAgICAgICBmb3JjZVRha2VvdmVyLmZvcmNlZEtpbGwsXG4gICAgICAgICksXG4gICAgICAgIHRha2VvdmVyQXR0ZW1wdGVkOiBmb3JjZVRha2VvdmVyLnRha2VvdmVyQXR0ZW1wdGVkLFxuICAgICAgICByZWJvdW5kTG9ja0NsYWltZWQ6IGZvcmNlVGFrZW92ZXIucmVib3VuZExvY2tDbGFpbWVkLFxuICAgICAgICBsb2NrQ2xlYW51cEF0dGVtcHRlZDogZm9yY2VUYWtlb3Zlci5mYWxsYmFjay5zb3VyY2UgIT09ICdub25lJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZm9sbG93ZXJFbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQgPSB7IHJvbGU6ICdmb2xsb3dlcicsIGxlYWRlckluZm86IGZvcmNlVGFrZW92ZXIuZmFsbGJhY2subGVhZGVySW5mbyB9O1xuICAgICAgcmV0dXJuIHN0YXJ0QXNGb2xsb3dlcihvcHRpb25zLCBmb2xsb3dlckVsZWN0aW9uLCBjb25zb2xlUG9ydCwgcHJpbWFyeVRva2VuLnRva2VuKTtcbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLmVycm9yKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciBmYWlsZWQgdG8gYmluZCBhbmQgbm8gYWN0aXZlIGxlYWRlciBjb3VsZCBiZSBpZGVudGlmaWVkJywge1xuICAgICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgICBjb25zb2xlUG9ydCxcbiAgICAgICAgICBlbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICAgIHdlYlJlc3VsdC5iaW5kUmVzdWx0LFxuICAgICAgICAgIGZvcmNlVGFrZW92ZXIuZmFsbGJhY2ssXG4gICAgICAgICAgZm9yY2VUYWtlb3Zlci5yZXBsYWNlbWVudCxcbiAgICAgICAgICBmb3JjZVRha2VvdmVyLmZvcmNlZEtpbGwsXG4gICAgICAgICksXG4gICAgICAgIHRha2VvdmVyQXR0ZW1wdGVkOiBmb3JjZVRha2VvdmVyLnRha2VvdmVyQXR0ZW1wdGVkLFxuICAgICAgICByZWJvdW5kTG9ja0NsYWltZWQ6IGZvcmNlVGFrZW92ZXIucmVib3VuZExvY2tDbGFpbWVkLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExlYWRlciBmYWlsZWQgdG8gYmluZCBwb3J0ICR7Y29uc29sZVBvcnR9IGFuZCBubyBhY3RpdmUgbGVhZGVyIHdhcyBkaXNjb3ZlcmFibGVgKTtcbiAgICB9XG4gIH1cblxuICAvLyBSZWdpc3RlciB0aGUgbGVhZGVyIG9ubHkgYWZ0ZXIgdGhlIEhUVFAgbGlzdGVuZXIgaXMgYWN0dWFsbHkgc2VydmluZyB0aGUgcG9ydC5cbiAgaW5nZXN0UmVzdWx0LnJlZ2lzdGVyTGVhZGVyU2Vzc2lvbihvcHRpb25zLnNlc3Npb25JZCwgcHJvY2Vzcy5waWQpO1xuXG4gIC8vIFJlZ2lzdGVyIHRoZSB3ZWIgY29uc29sZSBpdHNlbGYgc28gdGhlIHNlc3Npb24gaW5kaWNhdG9yIGlzIG5ldmVyIGVtcHR5ICgjMTgwNSlcbiAgaW5nZXN0UmVzdWx0LnJlZ2lzdGVyQ29uc29sZVNlc3Npb24oKTtcblxuICAvLyBXaXJlIFNTRSBicm9hZGNhc3RzIGZvciB0aGlzIGxlYWRlcidzIG93biBldmVudHNcbiAgb3B0aW9ucy53aXJlU1NFQnJvYWRjYXN0cyh3ZWJSZXN1bHQsIG9wdGlvbnMubWV0cmljc1NpbmspO1xuXG4gIC8vIE5vdyB3aXJlIHRoZSBsaXZlIGJyb2FkY2FzdCBmdW5jdGlvbnMgaW50byB0aGUgaW5nZXN0IHJvdXRlc1xuICBpZiAod2ViUmVzdWx0LmxvZ0Jyb2FkY2FzdCkge1xuICAgIGNvbnN0IG9yaWdpbmFsQnJvYWRjYXN0ID0gd2ViUmVzdWx0LmxvZ0Jyb2FkY2FzdDtcbiAgICAvLyBTdGFtcCBsZWFkZXIncyBvd24gZW50cmllcyB3aXRoIHNlc3Npb24gSURcbiAgICBsaXZlQnJvYWRjYXN0ID0gKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHN0YW1wZWQ6IFVuaWZpZWRMb2dFbnRyeSA9IHtcbiAgICAgICAgLi4uZW50cnksXG4gICAgICAgIGRhdGE6IHsgLi4uZW50cnkuZGF0YSwgX3Nlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQgfSxcbiAgICAgIH07XG4gICAgICBvcmlnaW5hbEJyb2FkY2FzdChzdGFtcGVkKTtcbiAgICB9O1xuICB9XG4gIGxpdmVNZXRyaWNzT25TbmFwc2hvdCA9IHdlYlJlc3VsdC5tZXRyaWNzT25TbmFwc2hvdDtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBJbmdlc3Rpb24gcm91dGVzIG1vdW50ZWQnKTtcblxuICAvLyBTdGFydCBoZWFydGJlYXQgYW5kIHJlZ2lzdGVyIGNsZWFudXBcbiAgY29uc3Qgc3RvcEhlYXJ0YmVhdCA9IHN0YXJ0SGVhcnRiZWF0KGVsZWN0aW9uLmxlYWRlckluZm8pO1xuICByZWdpc3RlckxlYWRlckNsZWFudXAoKTtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBMZWFkZXIgc3RhcnRlZCcsIHtcbiAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLCBwb3J0OiBjb25zb2xlUG9ydCwgcGlkOiBwcm9jZXNzLnBpZCxcbiAgICByb2xlOiAnbGVhZGVyJywgaW5nZXN0Um91dGVzOiBbJy9hcGkvaW5nZXN0L2xvZ3MnLCAnL2FwaS9pbmdlc3QvbWV0cmljcycsICcvYXBpL2luZ2VzdC9zZXNzaW9uJywgJy9hcGkvc2Vzc2lvbnMnXSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICByb2xlOiAnbGVhZGVyJyxcbiAgICBlbGVjdGlvbixcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBjbGVhbnVwOiBhc3luYyAoKSA9PiB7XG4gICAgICBzdG9wSGVhcnRiZWF0KCk7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBTdGFydCBhcyBhIGZvbGxvd2VyLlxuICogUmVnaXN0ZXJzIGZvcndhcmRpbmcgc2lua3Mgd2l0aCB0aGUgTG9nTWFuYWdlciwgc3RhcnRzIHNlc3Npb24gaGVhcnRiZWF0LlxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFydEFzRm9sbG93ZXIoXG4gIG9wdGlvbnM6IFVuaWZpZWRDb25zb2xlT3B0aW9ucyxcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0LFxuICBjb25zb2xlUG9ydDogbnVtYmVyID0gREVGQVVMVF9DT05TT0xFX1BPUlQsXG4gIGluaXRpYWxBdXRoVG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsLFxuKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICBjb25zdCBsZWFkZXJVcmwgPSBgaHR0cDovLzEyNy4wLjAuMToke2VsZWN0aW9uLmxlYWRlckluZm8ucG9ydH1gO1xuXG4gIC8vIFJlYWQgdGhlIGNvbnNvbGUgYXV0aCB0b2tlbiAoIzE3ODApIHdyaXR0ZW4gYnkgdGhlIGxlYWRlci4gTWF5IGJlIG51bGxcbiAgLy8gaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCB5ZXQg4oCUIHRoZSBzaW5rcyBoYW5kbGUgdGhhdCBncmFjZWZ1bGx5IGFuZFxuICAvLyBzaW1wbHkgb21pdCB0aGUgQmVhcmVyIGhlYWRlciwgd2hpY2ggaXMgZmluZSB3aGVuIGF1dGggaXMgbm90IGVuZm9yY2VkLlxuICBsZXQgYXV0aFRva2VuID0gaW5pdGlhbEF1dGhUb2tlbjtcbiAgaWYgKGF1dGhUb2tlbiA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHsgZ2V0UHJpbWFyeVRva2VuRnJvbUZpbGUgfSA9IGF3YWl0IGltcG9ydCgnLi9jb25zb2xlVG9rZW4uanMnKTtcbiAgICBhdXRoVG9rZW4gPSBhd2FpdCBnZXRQcmltYXJ5VG9rZW5Gcm9tRmlsZShlbnYuRE9MTEhPVVNFX0NPTlNPTEVfVE9LRU5fRklMRSk7XG4gIH1cbiAgaWYgKGF1dGhUb2tlbikge1xuICAgIGxvZ2dlci5kZWJ1ZygnW1VuaWZpZWRDb25zb2xlXSBGb2xsb3dlciBsb2FkZWQgY29uc29sZSBhdXRoIHRva2VuJyk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIE5vIGNvbnNvbGUgYXV0aCB0b2tlbiBmaWxlIGZvdW5kOyBmb2xsb3dlciB3aWxsIFBPU1Qgd2l0aG91dCBCZWFyZXIgaGVhZGVyJyk7XG4gIH1cblxuICAvLyBQZXItaW5zdGFuY2UgcHJvbW90aW9uIG1hbmFnZXIg4oCUIHRyYWNrcyBpdHMgb3duIGF0dGVtcHQgY291bnRlciBzb1xuICAvLyBtdWx0aXBsZSBmb2xsb3dlcnMgZG9uJ3QgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlcidzIHByb21vdGlvbiBidWRnZXRzLlxuICBjb25zdCBwcm9tb3Rpb25NZ3IgPSBuZXcgUHJvbW90aW9uTWFuYWdlcihvcHRpb25zLCBjb25zb2xlUG9ydCwgc3RhcnRBc0xlYWRlciwgc3RhcnRBc0ZvbGxvd2VyKTtcblxuICAvLyBEZWNsYXJlIHNlc3Npb25IZWFydGJlYXQgYmVmb3JlIHRoZSBzaW5rIHNvIHRoZSBjbG9zdXJlIGNhbiBjYXB0dXJlIGl0LlxuICAvLyBCb3RoIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGNhbGxiYWNrIGNvdWxkIHBvc3NpYmx5IGZpcmUgKG5lZWRzIDUrIGZhaWxlZCBmbHVzaGVzKS5cbiAgbGV0IHNlc3Npb25IZWFydGJlYXQ6IFNlc3Npb25IZWFydGJlYXQ7XG5cbiAgLy8gUmVnaXN0ZXIgYSBmb3J3YXJkaW5nIGxvZyBzaW5rIHdpdGggbGVhZGVyLWRlYXRoIGNhbGxiYWNrICgjMTg1MCkuXG4gIGNvbnN0IGZvcndhcmRpbmdTaW5rID0gbmV3IExlYWRlckZvcndhcmRpbmdMb2dTaW5rKGxlYWRlclVybCwgb3B0aW9ucy5zZXNzaW9uSWQsIGF1dGhUb2tlbiwgKCkgPT4ge1xuICAgIHByb21vdGlvbk1nci5wcm9tb3RlKGZvcndhcmRpbmdTaW5rLCBzZXNzaW9uSGVhcnRiZWF0KVxuICAgICAgLmNhdGNoKGVyciA9PiBsb2dnZXIuZXJyb3IoJ1tVbmlmaWVkQ29uc29sZV0gUHJvbW90aW9uIGNyYXNoZWQnLCB7IGVycm9yOiBTdHJpbmcoZXJyKSB9KSk7XG4gIH0pO1xuICBvcHRpb25zLnJlZ2lzdGVyTG9nU2luayhmb3J3YXJkaW5nU2luayk7XG5cbiAgLy8gU3RhcnQgc2Vzc2lvbiBoZWFydGJlYXQgdG8gdGhlIGxlYWRlclxuICBzZXNzaW9uSGVhcnRiZWF0ID0gbmV3IFNlc3Npb25IZWFydGJlYXQobGVhZGVyVXJsLCBvcHRpb25zLnNlc3Npb25JZCwgcHJvY2Vzcy5waWQsIGF1dGhUb2tlbik7XG4gIGF3YWl0IHNlc3Npb25IZWFydGJlYXQuc3RhcnQoKTtcblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBGb2xsb3dlciBzdGFydGVkJywge1xuICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsIHBpZDogcHJvY2Vzcy5waWQsIHJvbGU6ICdmb2xsb3dlcicsXG4gICAgbGVhZGVyU2Vzc2lvbjogZWxlY3Rpb24ubGVhZGVySW5mby5zZXNzaW9uSWQsIGxlYWRlclBpZDogZWxlY3Rpb24ubGVhZGVySW5mby5waWQsXG4gICAgbGVhZGVyUG9ydDogZWxlY3Rpb24ubGVhZGVySW5mby5wb3J0LCBsZWFkZXJVcmwsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcm9sZTogJ2ZvbGxvd2VyJyxcbiAgICBlbGVjdGlvbixcbiAgICBjbGVhbnVwOiBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBzZXNzaW9uSGVhcnRiZWF0LnN0b3AoKTtcbiAgICAgIGF3YWl0IGZvcndhcmRpbmdTaW5rLmNsb3NlKCk7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
592
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5pZmllZENvbnNvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL2NvbnNvbGUvVW5pZmllZENvbnNvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQU9ILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWix3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLHdCQUF3QixHQUl6QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUNMLGFBQWEsRUFDYix3QkFBd0IsR0FFekIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFMUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUMsMEJBQTBCLENBQUM7QUFDNUQsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSxtQ0FBbUMsR0FBRyxhQUFhLENBQUM7QUFDMUQsTUFBTSwyQkFBMkIsR0FBRyxLQUFLLENBQUM7QUFF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QUcsRUFBRSxJQUFJLEVBQUUsVUFBVTtRQUNoRSxhQUFhLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRztRQUNoRixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUztLQUNoRCxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsSUFBSSxFQUFFLFVBQVU7UUFDaEIsUUFBUTtRQUNSLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTtZQUNsQixNQUFNLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlCLE1BQU0sY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pZmllZCB3ZWIgY29uc29sZSBvcmNoZXN0cmF0b3IuXG4gKlxuICogVGllcyB0b2dldGhlciBsZWFkZXIgZWxlY3Rpb24sIGNvbnNvbGUgc3RhcnR1cCwgZm9sbG93ZXIgd2lyaW5nLFxuICogYW5kIHNlc3Npb24gbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnRcbiAqIGNhbGxlZCBieSB0aGUgREkgY29udGFpbmVyIGR1cmluZyBkZWZlcnJlZCBzZXR1cC5cbiAqXG4gKiBGbG93OlxuICogMS4gUnVuIGxlYWRlciBlbGVjdGlvbiAocmVhZCBsb2NrIGZpbGUsIGNsYWltIG9yIGZvbGxvdylcbiAqIDIuIElmIGxlYWRlcjogc3RhcnQgd2ViIHNlcnZlciBvbiBmaXhlZCBwb3J0LCBtb3VudCBpbmdlc3Qgcm91dGVzLCBzdGFydCBoZWFydGJlYXRcbiAqIDMuIElmIGZvbGxvd2VyOiByZWdpc3RlciBmb3J3YXJkaW5nIHNpbmtzIHdpdGggTG9nTWFuYWdlciwgc3RhcnQgc2Vzc2lvbiBoZWFydGJlYXRcbiAqXG4gKiBAc2luY2UgdjIuMS4wIOKAlCBJc3N1ZSAjMTcwMFxuICovXG5cbmltcG9ydCB0eXBlIHsgVW5pZmllZExvZ0VudHJ5IH0gZnJvbSAnLi4vLi4vbG9nZ2luZy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1ldHJpY1NuYXBzaG90IH0gZnJvbSAnLi4vLi4vbWV0cmljcy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeUxvZ1NpbmsgfSBmcm9tICcuLi8uLi9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlNZXRyaWNzU2luayB9IGZyb20gJy4uLy4uL21ldHJpY3Mvc2lua3MvTWVtb3J5TWV0cmljc1NpbmsuanMnO1xuaW1wb3J0IHR5cGUgeyBXZWJTZXJ2ZXJPcHRpb25zLCBXZWJTZXJ2ZXJSZXN1bHQgfSBmcm9tICcuLi9zZXJ2ZXIuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHtcbiAgZWxlY3RMZWFkZXIsXG4gIGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZSxcbiAgZm9yY2VDbGFpbUxlYWRlcnNoaXAsXG4gIHN0YXJ0SGVhcnRiZWF0LFxuICByZWdpc3RlckxlYWRlckNsZWFudXAsXG4gIGRldGVjdExlZ2FjeUxlYWRlcixcbiAgcmVhZExlYWRlckxvY2ssXG4gIGRlbGV0ZUxlYWRlckxvY2ssXG4gIGNsYWltTGVhZGVyc2hpcCxcbiAgY3JlYXRlTGVhZGVySW5mbyxcbiAgTE9DS19WRVJTSU9OLFxuICBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgZXZhbHVhdGVMZWFkZXJQcmVmZXJlbmNlLFxuICB0eXBlIEVsZWN0aW9uUmVzdWx0LFxuICB0eXBlIENvbnNvbGVMZWFkZXJJbmZvLFxuICB0eXBlIExlYWRlclByZWZlcmVuY2VEZWNpc2lvbixcbn0gZnJvbSAnLi9MZWFkZXJFbGVjdGlvbi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVJbmdlc3RSb3V0ZXMgfSBmcm9tICcuL0luZ2VzdFJvdXRlcy5qcyc7XG5pbXBvcnQge1xuICBMZWFkZXJGb3J3YXJkaW5nTG9nU2luayxcbiAgU2Vzc2lvbkhlYXJ0YmVhdCxcbn0gZnJvbSAnLi9MZWFkZXJGb3J3YXJkaW5nU2luay5qcyc7XG5pbXBvcnQgeyBQcm9tb3Rpb25NYW5hZ2VyIH0gZnJvbSAnLi9Qcm9tb3Rpb25NYW5hZ2VyLmpzJztcbmltcG9ydCB7IENvbnNvbGVUb2tlblN0b3JlIH0gZnJvbSAnLi9jb25zb2xlVG9rZW4uanMnO1xuaW1wb3J0IHtcbiAgZmluZFBpZE9uUG9ydCxcbiAga2lsbFN0YWxlUHJvY2Vzc0RldGFpbGVkLFxuICB0eXBlIEtpbGxTdGFsZVByb2Nlc3NPdXRjb21lLFxufSBmcm9tICcuL1N0YWxlUHJvY2Vzc1JlY292ZXJ5LmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuXG4vKipcbiAqIERlZmF1bHQgY29uc29sZSBwb3J0IGZyb20gdGhlIGVudiB2YXIuIFVzZWQgYXMgZmFsbGJhY2sgd2hlbiBubyBwb3J0XG4gKiBpcyBwcm92aWRlZCB2aWEgY29uZmlnIGZpbGUgb3Igb3B0aW9ucy4gVGhlIHJlc29sdXRpb24gaGllcmFyY2h5IGlzOlxuICogICAxLiBvcHRpb25zLnBvcnQgKGZyb20gY29uZmlnIGZpbGUsIHJlc29sdmVkIGJ5IHRoZSBESSBjb250YWluZXIpXG4gKiAgIDIuIERPTExIT1VTRV9XRUJfQ09OU09MRV9QT1JUIGVudiB2YXJcbiAqICAgMy4gNDE3MTUgKGhhcmRjb2RlZCBkZWZhdWx0IGluIGVudi50cylcbiAqL1xuY29uc3QgREVGQVVMVF9DT05TT0xFX1BPUlQgPSBlbnYuRE9MTEhPVVNFX1dFQl9DT05TT0xFX1BPUlQ7XG5jb25zdCBMRUdBQ1lfQ09OU09MRV9GQUxMQkFDS19QT1JUID0gMzkzOTtcbmNvbnN0IFNZTlRIRVRJQ19QT1JUX09XTkVSX1NFU1NJT05fUFJFRklYID0gJ3BvcnQtb3duZXItJztcbmNvbnN0IExFQURFUl9ESVNDT1ZFUllfVElNRU9VVF9NUyA9IDJfMDAwO1xuXG5mdW5jdGlvbiBjdXJyZW50VGltZXN0YW1wKCk6IHN0cmluZyB7XG4gIHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RhcnRpbmcgdGhlIHVuaWZpZWQgY29uc29sZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbmlmaWVkQ29uc29sZU9wdGlvbnMge1xuICAvKiogVGhpcyBwcm9jZXNzJ3MgdW5pcXVlIHNlc3Npb24gSUQgKi9cbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIC8qKiBTdGFibGUgRG9sbGhvdXNlIHNlc3Npb24gaWRlbnRpdHkgc2hvd24gdG8gaHVtYW5zIGFuZCB1c2VkIGZvciBwZXJzaXN0ZW5jZS4gKi9cbiAgc3RhYmxlU2Vzc2lvbklkOiBzdHJpbmc7XG4gIC8qKiBQb3J0Zm9saW8gYmFzZSBkaXJlY3RvcnkgKGZvciBzdGFydFdlYlNlcnZlcikgKi9cbiAgcG9ydGZvbGlvRGlyOiBzdHJpbmc7XG4gIC8qKiBMb2cgbWVtb3J5IHNpbmsgKGZvciBjb25zb2xlIGhpc3RvcnkpICovXG4gIG1lbW9yeVNpbms6IE1lbW9yeUxvZ1Npbms7XG4gIC8qKiBNZXRyaWNzIG1lbW9yeSBzaW5rICovXG4gIG1ldHJpY3NTaW5rPzogTWVtb3J5TWV0cmljc1Npbms7XG4gIC8qKiBNQ1AtQVFMIGhhbmRsZXIgZm9yIHBlcm1pc3Npb24gcm91dGVzICh0eXBlZCBhcyBhbnkgdG8gYXZvaWQgY2lyY3VsYXIgaW1wb3J0cykgKi9cbiAgbWNwQXFsSGFuZGxlcj86IGFueTtcbiAgLyoqIENhbGxiYWNrIHRvIHJlZ2lzdGVyIGEgbG9nIHNpbmsgd2l0aCB0aGUgTG9nTWFuYWdlciAqL1xuICByZWdpc3RlckxvZ1Npbms6IChzaW5rOiB7IHdyaXRlKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpOiB2b2lkOyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+OyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IH0pID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB0byB3aXJlIFNTRSBicm9hZGNhc3RzIGFmdGVyIHdlYiBzZXJ2ZXIgc3RhcnRzICovXG4gIHdpcmVTU0VCcm9hZGNhc3RzOiAod2ViUmVzdWx0OiB7IGxvZ0Jyb2FkY2FzdD86IChlbnRyeTogVW5pZmllZExvZ0VudHJ5KSA9PiB2b2lkOyBtZXRyaWNzT25TbmFwc2hvdD86IChzbmFwc2hvdDogTWV0cmljU25hcHNob3QpID0+IHZvaWQgfSwgbWV0cmljc1Npbms/OiBNZW1vcnlNZXRyaWNzU2luaykgPT4gdm9pZDtcbiAgLyoqIENvbnNvbGUgcG9ydCBvdmVycmlkZSBmcm9tIGNvbmZpZyBmaWxlLiBGYWxscyBiYWNrIHRvIGVudiB2YXIgaWYgbm90IHByb3ZpZGVkLiAqL1xuICBwb3J0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBzdGFydGluZyB0aGUgdW5pZmllZCBjb25zb2xlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaWZpZWRDb25zb2xlUmVzdWx0IHtcbiAgcm9sZTogJ2xlYWRlcicgfCAnZm9sbG93ZXInO1xuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQ7XG4gIC8qKiBQb3J0IHRoZSBjb25zb2xlIGlzIHJ1bm5pbmcgb24gKGxlYWRlciBvbmx5KSAqL1xuICBwb3J0PzogbnVtYmVyO1xuICAvKiogQ2xlYW51cCBmdW5jdGlvbiB0byBjYWxsIG9uIHNodXRkb3duICovXG4gIGNsZWFudXA6ICgpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQ2hlY2sgZm9yIGEgcnVubmluZyBsZWdhY3kgKHByZS1hdXRoZW50aWNhdGlvbikgRG9sbGhvdXNlTUNQIGNvbnNvbGUgYW5kXG4gKiBsb2cgYSBXQVJOLWxldmVsIG1lc3NhZ2UgaWYgb25lIGlzIGZvdW5kICgjMTc5NCkuXG4gKlxuICogRXh0cmFjdGVkIGZyb20gYHN0YXJ0VW5pZmllZENvbnNvbGVgIHNvIHRoZSB3aXJpbmcgY2FuIGJlIGludGVncmF0aW9uLVxuICogdGVzdGVkIGluIGlzb2xhdGlvbiB3aXRob3V0IHNwaW5uaW5nIHVwIGEgZnVsbCB3ZWIgc2VydmVyIGFuZCBsZWFkZXJcbiAqIGVsZWN0aW9uLiBUaGUgaW1wbGVtZW50YXRpb24gaXMgZmlyZS1hbmQtZm9yZ2V0OiBkZXRlY3Rpb24gZmFpbHVyZXNcbiAqIGFyZSBsb2dnZWQgYXQgREVCVUcgYW5kIG5ldmVyIHByb3BhZ2F0ZSwgYmVjYXVzZSBhIGZhaWx1cmUgaGVyZSBtdXN0XG4gKiBub3QgYmxvY2sgbGVhZGVyIGVsZWN0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGVkIGNvbnNvbGUuXG4gKlxuICogQHBhcmFtIGN1cnJlbnRQb3J0IC0gVGhlIHBvcnQgdGhlIGF1dGhlbnRpY2F0ZWQgY29uc29sZSBpbnRlbmRzIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICBiaW5kIHRvLiBVc2VkIGluIHRoZSB3YXJuaW5nIG1lc3NhZ2UgdG8gaGVscCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgIHVzZXIgdGVsbCB0aGUgdHdvIGNvbnNvbGVzIGFwYXJ0LlxuICogQHBhcmFtIGRldGVjdCAgICAgIC0gT3B0aW9uYWwgaW5qZWN0aW9uIHBvaW50IGZvciB0aGUgZGV0ZWN0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gYGRldGVjdExlZ2FjeUxlYWRlcmAuIFRlc3RzXG4gKiAgICAgICAgICAgICAgICAgICAgICBwYXNzIGEgc3R1Yi5cbiAqIEBwYXJhbSBsb2cgICAgICAgICAtIE9wdGlvbmFsIGluamVjdGlvbiBwb2ludCBmb3IgdGhlIGxvZ2dlci4gRGVmYXVsdHNcbiAqICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBtb2R1bGUgbG9nZ2VyLiBUZXN0cyBwYXNzIGEgc3B5LlxuICogQHJldHVybnMgVGhlIGxlZ2FjeSBsZWFkZXIgaW5mbyBmcm9tIGBkZXRlY3QoKWAsIG9yIG51bGwgaWYgZGV0ZWN0aW9uXG4gKiAgICAgICAgICB0aHJldy4gRXhwb3NlZCBzbyB0ZXN0cyBjYW4gYXNzZXJ0IHRoZSBmdWxsIHJlc3VsdCBzaGFwZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhcm5JZkxlZ2FjeUNvbnNvbGVQcmVzZW50KFxuICBjdXJyZW50UG9ydDogbnVtYmVyLFxuICBkZXRlY3Q6IHR5cGVvZiBkZXRlY3RMZWdhY3lMZWFkZXIgPSBkZXRlY3RMZWdhY3lMZWFkZXIsXG4gIGxvZzogdHlwZW9mIGxvZ2dlciA9IGxvZ2dlcixcbik6IFByb21pc2U8QXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBkZXRlY3RMZWdhY3lMZWFkZXI+PiB8IG51bGw+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBsZWdhY3kgPSBhd2FpdCBkZXRlY3QoKTtcbiAgICBpZiAobGVnYWN5LmxlZ2FjeVJ1bm5pbmcpIHtcbiAgICAgIGxvZy53YXJuKFxuICAgICAgICBgW1VuaWZpZWRDb25zb2xlXSBMZWdhY3kgKHByZS1hdXRoZW50aWNhdGlvbikgRG9sbGhvdXNlTUNQIGNvbnNvbGUgZGV0ZWN0ZWQgYCArXG4gICAgICAgIGAocGlkPSR7bGVnYWN5LnBpZH0sIHBvcnQ9JHtsZWdhY3kucG9ydH0pLiBCb3RoIGNvbnNvbGVzIHdpbGwgcnVuIGAgK1xuICAgICAgICBgaW5kZXBlbmRlbnRseSBvbiBkaWZmZXJlbnQgcG9ydHMgd2l0aCBkaWZmZXJlbnQgc2VjdXJpdHkgcG9zdHVyZS4gYCArXG4gICAgICAgIGBUaGUgYXV0aGVudGljYXRlZCBjb25zb2xlICh0aGlzIHByb2Nlc3MpIHVzZXMgcG9ydCAke2N1cnJlbnRQb3J0fTsgYCArXG4gICAgICAgIGB0aGUgbGVnYWN5IGNvbnNvbGUgdXNlcyBwb3J0ICR7bGVnYWN5LnBvcnQgPz8gTEVHQUNZX0NPTlNPTEVfRkFMTEJBQ0tfUE9SVH0uIGAgK1xuICAgICAgICBgRm9yIGNvbnNpc3RlbnQgc2VjdXJpdHksIHVwZGF0ZSB0aGUgbGVnYWN5IGluc3RhbGxhdGlvbiB0byBhIGAgK1xuICAgICAgICBgdmVyc2lvbiB3aXRoIHRoZSBhdXRoZW50aWNhdGVkIGNvbnNvbGUuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBsZWdhY3k7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIEJlc3QtZWZmb3J0IOKAlCBuZXZlciBibG9jayBlbGVjdGlvbiBvbiBhIGRldGVjdGlvbiBmYWlsdXJlXG4gICAgbG9nLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIExlZ2FjeSBsZWFkZXIgZGV0ZWN0aW9uIGZhaWxlZCcsIHtcbiAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFNlc3Npb25BcGlSZWNvcmQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgcGlkOiBudW1iZXI7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgbGFzdEhlYXJ0YmVhdD86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBpc0xlYWRlcj86IGJvb2xlYW47XG4gIGtpbmQ/OiBzdHJpbmc7XG4gIHNlcnZlclZlcnNpb24/OiBzdHJpbmc7XG4gIGNvbnNvbGVQcm90b2NvbFZlcnNpb24/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9ydExlYWRlckRpc2NvdmVyeSB7XG4gIGxlYWRlckluZm86IENvbnNvbGVMZWFkZXJJbmZvIHwgbnVsbDtcbiAgb3duZXJQaWQ6IG51bWJlciB8IG51bGw7XG4gIHNvdXJjZTogJ2FwaScgfCAnbG9jaycgfCAnc3ludGhldGljJyB8ICdub25lJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCaW5kRmFpbHVyZVJlY292ZXJ5UmVzdWx0IGV4dGVuZHMgUG9ydExlYWRlckRpc2NvdmVyeSB7XG4gIGxvY2tDbGVhbnVwQXR0ZW1wdGVkOiBib29sZWFuO1xuICBsb2NrQ2xlYW51cFBlcmZvcm1lZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb3J0T3duZXJSZXBsYWNlbWVudERlY2lzaW9uIHtcbiAgc2hvdWxkRXZpY3Q6IGJvb2xlYW47XG4gIG93bmVyUGlkOiBudW1iZXIgfCBudWxsO1xuICBwcmVmZXJlbmNlOiBMZWFkZXJQcmVmZXJlbmNlRGVjaXNpb24gfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgRm9yY2VUYWtlb3ZlckF0dGVtcHRSZXN1bHQge1xuICB3ZWJSZXN1bHQ6IFdlYlNlcnZlclJlc3VsdDtcbiAgZWxlY3Rpb246IEVsZWN0aW9uUmVzdWx0O1xuICBmYWxsYmFjazogUG9ydExlYWRlckRpc2NvdmVyeTtcbiAgcmVwbGFjZW1lbnQ6IFBvcnRPd25lclJlcGxhY2VtZW50RGVjaXNpb247XG4gIGZvcmNlZEtpbGw6IEtpbGxTdGFsZVByb2Nlc3NPdXRjb21lIHwgbnVsbDtcbiAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGJvb2xlYW47XG4gIHJlYm91bmRMb2NrQ2xhaW1lZDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEZvbGxvd2VyQXV0aG9yaXR5UmVzb2x1dGlvbiB7XG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdDtcbiAgZGlzY292ZXJ5OiBQb3J0TGVhZGVyRGlzY292ZXJ5IHwgbnVsbDtcbiAgcmVwbGFjZW1lbnQ6IFBvcnRPd25lclJlcGxhY2VtZW50RGVjaXNpb24gfCBudWxsO1xuICBmb3JjZWRDbGFpbTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEZvbGxvd2VyQXV0aG9yaXR5RGVwZW5kZW5jaWVzIHtcbiAgaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlSW1wbD86IHR5cGVvZiBpc0xlYWRlcldlYkNvbnNvbGVSZWFjaGFibGU7XG4gIGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnRJbXBsPzogdHlwZW9mIGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnQ7XG4gIGZvcmNlQ2xhaW1MZWFkZXJzaGlwSW1wbD86IHR5cGVvZiBmb3JjZUNsYWltTGVhZGVyc2hpcDtcbiAgZGVsZXRlTGVhZGVyTG9ja0ltcGw/OiB0eXBlb2YgZGVsZXRlTGVhZGVyTG9jaztcbn1cblxuaW50ZXJmYWNlIERpc2NvdmVyeURlcGVuZGVuY2llcyB7XG4gIGZldGNoSW1wbD86IHR5cGVvZiBmZXRjaDtcbiAgZmluZFBpZE9uUG9ydEltcGw/OiB0eXBlb2YgZmluZFBpZE9uUG9ydDtcbiAgcmVhZExlYWRlckxvY2tJbXBsPzogdHlwZW9mIHJlYWRMZWFkZXJMb2NrO1xufVxuXG5mdW5jdGlvbiBidWlsZERpc2NvdmVyeUhlYWRlcnMoYXV0aFRva2VuOiBzdHJpbmcgfCBudWxsKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiBhdXRoVG9rZW4gPyB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthdXRoVG9rZW59YCB9IDoge307XG59XG5cbmZ1bmN0aW9uIGJ1aWxkTGVhZGVySW5mb0Zyb21TZXNzaW9uKHBvcnQ6IG51bWJlciwgb3duZXJQaWQ6IG51bWJlciwgbGVhZGVyU2Vzc2lvbjogU2Vzc2lvbkFwaVJlY29yZCk6IENvbnNvbGVMZWFkZXJJbmZvIHtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBMT0NLX1ZFUlNJT04sXG4gICAgcGlkOiBvd25lclBpZCxcbiAgICBwb3J0LFxuICAgIHNlc3Npb25JZDogVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobGVhZGVyU2Vzc2lvbi5zZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgIHN0YXJ0ZWRBdDogbGVhZGVyU2Vzc2lvbi5zdGFydGVkQXQgPz8gY3VycmVudFRpbWVzdGFtcCgpLFxuICAgIGhlYXJ0YmVhdDogbGVhZGVyU2Vzc2lvbi5sYXN0SGVhcnRiZWF0ID8/IGN1cnJlbnRUaW1lc3RhbXAoKSxcbiAgICBzZXJ2ZXJWZXJzaW9uOiBsZWFkZXJTZXNzaW9uLnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIGNvbnNvbGVQcm90b2NvbFZlcnNpb246IGxlYWRlclNlc3Npb24uY29uc29sZVByb3RvY29sVmVyc2lvbiA/PyBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU3ludGhldGljTGVhZGVySW5mbyhwb3J0OiBudW1iZXIsIG93bmVyUGlkOiBudW1iZXIpOiBDb25zb2xlTGVhZGVySW5mbyB7XG4gIGNvbnN0IG5vdyA9IGN1cnJlbnRUaW1lc3RhbXAoKTtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBMT0NLX1ZFUlNJT04sXG4gICAgcGlkOiBvd25lclBpZCxcbiAgICBwb3J0LFxuICAgIHNlc3Npb25JZDogYCR7U1lOVEhFVElDX1BPUlRfT1dORVJfU0VTU0lPTl9QUkVGSVh9JHtvd25lclBpZH1gLFxuICAgIHN0YXJ0ZWRBdDogbm93LFxuICAgIGhlYXJ0YmVhdDogbm93LFxuICAgIHNlcnZlclZlcnNpb246IExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgICBjb25zb2xlUHJvdG9jb2xWZXJzaW9uOiBDT05TT0xFX1BST1RPQ09MX1ZFUlNJT04sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRpc2NvdmVyTGVhZGVyVmlhU2Vzc2lvbnNBcGkoXG4gIHBvcnQ6IG51bWJlcixcbiAgb3duZXJQaWQ6IG51bWJlcixcbiAgYXV0aFRva2VuOiBzdHJpbmcgfCBudWxsLFxuICBmZXRjaEltcGw6IHR5cGVvZiBmZXRjaCxcbik6IFByb21pc2U8Q29uc29sZUxlYWRlckluZm8gfCBudWxsPiB7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgTEVBREVSX0RJU0NPVkVSWV9USU1FT1VUX01TKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hJbXBsKGBodHRwOi8vMTI3LjAuMC4xOiR7cG9ydH0vYXBpL3Nlc3Npb25zYCwge1xuICAgICAgaGVhZGVyczogYnVpbGREaXNjb3ZlcnlIZWFkZXJzKGF1dGhUb2tlbiksXG4gICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgeyBzZXNzaW9ucz86IFNlc3Npb25BcGlSZWNvcmRbXSB9O1xuICAgIGNvbnN0IHNlc3Npb25zID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLnNlc3Npb25zKSA/IHBheWxvYWQuc2Vzc2lvbnMgOiBbXTtcbiAgICBjb25zdCBsZWFkZXJTZXNzaW9uID0gc2Vzc2lvbnMuZmluZCgoc2Vzc2lvbikgPT5cbiAgICAgIHNlc3Npb24ucGlkID09PSBvd25lclBpZCAmJlxuICAgICAgc2Vzc2lvbi5pc0xlYWRlciA9PT0gdHJ1ZSAmJlxuICAgICAgc2Vzc2lvbi5raW5kID09PSAnbWNwJyAmJlxuICAgICAgc2Vzc2lvbi5zdGF0dXMgIT09ICdzdG9wcGVkJ1xuICAgICk7XG4gICAgcmV0dXJuIGxlYWRlclNlc3Npb24gPyBidWlsZExlYWRlckluZm9Gcm9tU2Vzc2lvbihwb3J0LCBvd25lclBpZCwgbGVhZGVyU2Vzc2lvbikgOiBudWxsO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydChcbiAgcG9ydDogbnVtYmVyLFxuICBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwsXG4gIGRlcHM6IERpc2NvdmVyeURlcGVuZGVuY2llcyA9IHt9LFxuKTogUHJvbWlzZTxQb3J0TGVhZGVyRGlzY292ZXJ5PiB7XG4gIGNvbnN0IGZldGNoSW1wbCA9IGRlcHMuZmV0Y2hJbXBsID8/IGZldGNoO1xuICBjb25zdCBmaW5kUGlkT25Qb3J0SW1wbCA9IGRlcHMuZmluZFBpZE9uUG9ydEltcGwgPz8gZmluZFBpZE9uUG9ydDtcbiAgY29uc3QgcmVhZExlYWRlckxvY2tJbXBsID0gZGVwcy5yZWFkTGVhZGVyTG9ja0ltcGwgPz8gcmVhZExlYWRlckxvY2s7XG4gIGNvbnN0IG93bmVyUGlkID0gYXdhaXQgZmluZFBpZE9uUG9ydEltcGwocG9ydCk7XG5cbiAgaWYgKG93bmVyUGlkICE9PSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxlYWRlckluZm8gPSBhd2FpdCBkaXNjb3ZlckxlYWRlclZpYVNlc3Npb25zQXBpKHBvcnQsIG93bmVyUGlkLCBhdXRoVG9rZW4sIGZldGNoSW1wbCk7XG4gICAgICBpZiAobGVhZGVySW5mbykge1xuICAgICAgICByZXR1cm4geyBvd25lclBpZCwgc291cmNlOiAnYXBpJywgbGVhZGVySW5mbyB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIEZhaWxlZCB0byBxdWVyeSBhY3RpdmUgbGVhZGVyIHNlc3Npb25zJywge1xuICAgICAgICBwb3J0LFxuICAgICAgICBvd25lclBpZCxcbiAgICAgICAgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGxvY2sgPSBhd2FpdCByZWFkTGVhZGVyTG9ja0ltcGwoKTtcbiAgaWYgKGxvY2s/LnBvcnQgPT09IHBvcnQgJiYgKG93bmVyUGlkID09PSBudWxsIHx8IGxvY2sucGlkID09PSBvd25lclBpZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duZXJQaWQ6IG93bmVyUGlkID8/IGxvY2sucGlkLFxuICAgICAgc291cmNlOiAnbG9jaycsXG4gICAgICBsZWFkZXJJbmZvOiB7XG4gICAgICAgIC4uLmxvY2ssXG4gICAgICAgIHNlc3Npb25JZDogVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobG9jay5zZXNzaW9uSWQpLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKG93bmVyUGlkICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bmVyUGlkLFxuICAgICAgc291cmNlOiAnc3ludGhldGljJyxcbiAgICAgIGxlYWRlckluZm86IGJ1aWxkU3ludGhldGljTGVhZGVySW5mbyhwb3J0LCBvd25lclBpZCksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7IGxlYWRlckluZm86IG51bGwsIG93bmVyUGlkOiBudWxsLCBzb3VyY2U6ICdub25lJyB9O1xufVxuXG5pbnRlcmZhY2UgQmluZEZhaWx1cmVSZWNvdmVyeURlcGVuZGVuY2llcyBleHRlbmRzIERpc2NvdmVyeURlcGVuZGVuY2llcyB7XG4gIGRlbGV0ZUxlYWRlckxvY2tJbXBsPzogdHlwZW9mIGRlbGV0ZUxlYWRlckxvY2s7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWNvdmVyTGVhZGVyQmluZEZhaWx1cmUoXG4gIHByb3Zpc2lvbmFsTGVhZGVyOiBDb25zb2xlTGVhZGVySW5mbyxcbiAgcG9ydDogbnVtYmVyLFxuICBhdXRoVG9rZW46IHN0cmluZyB8IG51bGwsXG4gIGRlcHM6IEJpbmRGYWlsdXJlUmVjb3ZlcnlEZXBlbmRlbmNpZXMgPSB7fSxcbik6IFByb21pc2U8QmluZEZhaWx1cmVSZWNvdmVyeVJlc3VsdD4ge1xuICBjb25zdCByZWFkTGVhZGVyTG9ja0ltcGwgPSBkZXBzLnJlYWRMZWFkZXJMb2NrSW1wbCA/PyByZWFkTGVhZGVyTG9jaztcbiAgY29uc3QgZGVsZXRlTGVhZGVyTG9ja0ltcGwgPSBkZXBzLmRlbGV0ZUxlYWRlckxvY2tJbXBsID8/IGRlbGV0ZUxlYWRlckxvY2s7XG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciBiaW5kIHJlY292ZXJ5IGluaXRpYXRlZCcsIHtcbiAgICBwcm92aXNpb25hbFNlc3Npb25JZDogcHJvdmlzaW9uYWxMZWFkZXIuc2Vzc2lvbklkLFxuICAgIHByb3Zpc2lvbmFsUGlkOiBwcm92aXNpb25hbExlYWRlci5waWQsXG4gICAgcG9ydCxcbiAgfSk7XG5cbiAgbGV0IGZhbGxiYWNrID0gYXdhaXQgZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydChwb3J0LCBhdXRoVG9rZW4sIGRlcHMpO1xuICBsZXQgbG9ja0NsZWFudXBBdHRlbXB0ZWQgPSBmYWxzZTtcbiAgbGV0IGxvY2tDbGVhbnVwUGVyZm9ybWVkID0gZmFsc2U7XG4gIGNvbnN0IGN1cnJlbnRMb2NrID0gYXdhaXQgcmVhZExlYWRlckxvY2tJbXBsKCk7XG4gIGNvbnN0IHByb3Zpc2lvbmFsTG9ja01hdGNoZXMgPSAoXG4gICAgY3VycmVudExvY2s/LnBpZCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucGlkICYmXG4gICAgY3VycmVudExvY2sucG9ydCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucG9ydCAmJlxuICAgIGN1cnJlbnRMb2NrLnNlc3Npb25JZCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIuc2Vzc2lvbklkXG4gICk7XG4gIGNvbnN0IGZhbGxiYWNrUG9pbnRzVG9Qcm92aXNpb25hbExlYWRlciA9IChcbiAgICBmYWxsYmFjay5sZWFkZXJJbmZvPy5waWQgPT09IHByb3Zpc2lvbmFsTGVhZGVyLnBpZCAmJlxuICAgIGZhbGxiYWNrLmxlYWRlckluZm8ucG9ydCA9PT0gcHJvdmlzaW9uYWxMZWFkZXIucG9ydCAmJlxuICAgIGZhbGxiYWNrLmxlYWRlckluZm8uc2Vzc2lvbklkID09PSBwcm92aXNpb25hbExlYWRlci5zZXNzaW9uSWRcbiAgKTtcblxuICBpZiAocHJvdmlzaW9uYWxMb2NrTWF0Y2hlcykge1xuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICBhd2FpdCBkZWxldGVMZWFkZXJMb2NrSW1wbCgpO1xuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkID0gdHJ1ZTtcbiAgICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBSZW1vdmVkIHByb3Zpc2lvbmFsIGxlYWRlciBsb2NrIGFmdGVyIGJpbmQgZmFpbHVyZScsIHtcbiAgICAgIHByb3Zpc2lvbmFsU2Vzc2lvbklkOiBwcm92aXNpb25hbExlYWRlci5zZXNzaW9uSWQsXG4gICAgICBwcm92aXNpb25hbFBpZDogcHJvdmlzaW9uYWxMZWFkZXIucGlkLFxuICAgICAgcG9ydCxcbiAgICB9KTtcbiAgICBpZiAoZmFsbGJhY2tQb2ludHNUb1Byb3Zpc2lvbmFsTGVhZGVyKSB7XG4gICAgICBmYWxsYmFjayA9IGF3YWl0IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnQocG9ydCwgYXV0aFRva2VuLCBkZXBzKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuaW5mbygnW1VuaWZpZWRDb25zb2xlXSBMZWFkZXIgYmluZCByZWNvdmVyeSBjb21wbGV0ZWQnLCB7XG4gICAgcHJvdmlzaW9uYWxTZXNzaW9uSWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnNlc3Npb25JZCxcbiAgICBwcm92aXNpb25hbFBpZDogcHJvdmlzaW9uYWxMZWFkZXIucGlkLFxuICAgIHBvcnQsXG4gICAgZGlzY292ZXJ5U291cmNlOiBmYWxsYmFjay5zb3VyY2UsXG4gICAgb3duZXJQaWQ6IGZhbGxiYWNrLm93bmVyUGlkLFxuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkLFxuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLmZhbGxiYWNrLFxuICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkLFxuICAgIGxvY2tDbGVhbnVwUGVyZm9ybWVkLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVQb3J0T3duZXJSZXBsYWNlbWVudChcbiAgY2FuZGlkYXRlTGVhZGVyOiBDb25zb2xlTGVhZGVySW5mbyxcbiAgZmFsbGJhY2s6IFBvcnRMZWFkZXJEaXNjb3ZlcnksXG4pOiBQb3J0T3duZXJSZXBsYWNlbWVudERlY2lzaW9uIHtcbiAgaWYgKCFmYWxsYmFjay5sZWFkZXJJbmZvIHx8IGZhbGxiYWNrLm93bmVyUGlkID09PSBudWxsIHx8IGZhbGxiYWNrLm93bmVyUGlkID09PSBjYW5kaWRhdGVMZWFkZXIucGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3VsZEV2aWN0OiBmYWxzZSxcbiAgICAgIG93bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICAgIHByZWZlcmVuY2U6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHByZWZlcmVuY2UgPSBldmFsdWF0ZUxlYWRlclByZWZlcmVuY2UoY2FuZGlkYXRlTGVhZGVyLCBmYWxsYmFjay5sZWFkZXJJbmZvKTtcbiAgcmV0dXJuIHtcbiAgICBzaG91bGRFdmljdDogcHJlZmVyZW5jZS5zaG91bGRSZXBsYWNlLFxuICAgIG93bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICBwcmVmZXJlbmNlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgcHJvdmlzaW9uYWxMZWFkZXI6IENvbnNvbGVMZWFkZXJJbmZvLFxuICBiaW5kUmVzdWx0OiBXZWJTZXJ2ZXJSZXN1bHRbJ2JpbmRSZXN1bHQnXSxcbiAgZmFsbGJhY2s6IFBvcnRMZWFkZXJEaXNjb3ZlcnksXG4gIHJlcGxhY2VtZW50PzogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbixcbiAgZm9yY2VkS2lsbD86IEtpbGxTdGFsZVByb2Nlc3NPdXRjb21lIHwgbnVsbCxcbikge1xuICByZXR1cm4ge1xuICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgIGJpbmRFcnJvcjogYmluZFJlc3VsdD8uZXJyb3IsXG4gICAgYmluZERldGFpbDogYmluZFJlc3VsdD8uZGV0YWlsLFxuICAgIHByb3Zpc2lvbmFsTGVhZGVyUGlkOiBwcm92aXNpb25hbExlYWRlci5waWQsXG4gICAgcHJvdmlzaW9uYWxMZWFkZXJTZXNzaW9uSWQ6IHByb3Zpc2lvbmFsTGVhZGVyLnNlc3Npb25JZCxcbiAgICBwcm92aXNpb25hbExlYWRlclZlcnNpb246IHByb3Zpc2lvbmFsTGVhZGVyLnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIHByb3Zpc2lvbmFsTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBwcm92aXNpb25hbExlYWRlci5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICBmYWxsYmFja093bmVyUGlkOiBmYWxsYmFjay5vd25lclBpZCxcbiAgICBmYWxsYmFja1NvdXJjZTogZmFsbGJhY2suc291cmNlLFxuICAgIGZhbGxiYWNrTGVhZGVyUGlkOiBmYWxsYmFjay5sZWFkZXJJbmZvPy5waWQsXG4gICAgZmFsbGJhY2tMZWFkZXJTZXNzaW9uSWQ6IGZhbGxiYWNrLmxlYWRlckluZm8/LnNlc3Npb25JZCxcbiAgICBmYWxsYmFja0xlYWRlclZlcnNpb246IGZhbGxiYWNrLmxlYWRlckluZm8/LnNlcnZlclZlcnNpb24gPz8gTEVHQUNZX1NFUlZFUl9WRVJTSU9OLFxuICAgIGZhbGxiYWNrTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBmYWxsYmFjay5sZWFkZXJJbmZvPy5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICByZXBsYWNlbWVudFNob3VsZEV2aWN0OiByZXBsYWNlbWVudD8uc2hvdWxkRXZpY3QgPz8gZmFsc2UsXG4gICAgcmVwbGFjZW1lbnRSZWFzb246IHJlcGxhY2VtZW50Py5wcmVmZXJlbmNlPy5yZWFzb24sXG4gICAgZm9yY2VkS2lsbFJlYXNvbjogZm9yY2VkS2lsbD8ucmVhc29uLFxuICAgIGZvcmNlZEtpbGxQaWQ6IGZvcmNlZEtpbGw/LnBpZCxcbiAgICBmb3JjZWRLaWxsRGV0YWlsOiBmb3JjZWRLaWxsPy5kZXRhaWwsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQXV0aG9yaXR5UmVzb2x1dGlvbkxvZ0NvbnRleHQoXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIGVsZWN0ZWRMZWFkZXI6IENvbnNvbGVMZWFkZXJJbmZvLFxuICBkaXNjb3Zlcnk6IFBvcnRMZWFkZXJEaXNjb3ZlcnkgfCBudWxsLFxuICByZXBsYWNlbWVudDogUG9ydE93bmVyUmVwbGFjZW1lbnREZWNpc2lvbiB8IG51bGwsXG4pIHtcbiAgcmV0dXJuIHtcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBlbGVjdGVkTGVhZGVyUGlkOiBlbGVjdGVkTGVhZGVyLnBpZCxcbiAgICBlbGVjdGVkTGVhZGVyU2Vzc2lvbklkOiBlbGVjdGVkTGVhZGVyLnNlc3Npb25JZCxcbiAgICBlbGVjdGVkTGVhZGVyVmVyc2lvbjogZWxlY3RlZExlYWRlci5zZXJ2ZXJWZXJzaW9uID8/IExFR0FDWV9TRVJWRVJfVkVSU0lPTixcbiAgICBlbGVjdGVkTGVhZGVyUHJvdG9jb2xWZXJzaW9uOiBlbGVjdGVkTGVhZGVyLmNvbnNvbGVQcm90b2NvbFZlcnNpb24gPz8gQ09OU09MRV9QUk9UT0NPTF9WRVJTSU9OLFxuICAgIHNlcnZpbmdPd25lclBpZDogZGlzY292ZXJ5Py5vd25lclBpZCA/PyBudWxsLFxuICAgIHNlcnZpbmdTb3VyY2U6IGRpc2NvdmVyeT8uc291cmNlID8/ICdub25lJyxcbiAgICBzZXJ2aW5nTGVhZGVyUGlkOiBkaXNjb3Zlcnk/LmxlYWRlckluZm8/LnBpZCA/PyBudWxsLFxuICAgIHNlcnZpbmdMZWFkZXJTZXNzaW9uSWQ6IGRpc2NvdmVyeT8ubGVhZGVySW5mbz8uc2Vzc2lvbklkID8/IG51bGwsXG4gICAgc2VydmluZ0xlYWRlclZlcnNpb246IGRpc2NvdmVyeT8ubGVhZGVySW5mbz8uc2VydmVyVmVyc2lvbiA/PyBMRUdBQ1lfU0VSVkVSX1ZFUlNJT04sXG4gICAgc2VydmluZ0xlYWRlclByb3RvY29sVmVyc2lvbjogZGlzY292ZXJ5Py5sZWFkZXJJbmZvPy5jb25zb2xlUHJvdG9jb2xWZXJzaW9uID8/IENPTlNPTEVfUFJPVE9DT0xfVkVSU0lPTixcbiAgICByZXBsYWNlbWVudFNob3VsZEV2aWN0OiByZXBsYWNlbWVudD8uc2hvdWxkRXZpY3QgPz8gZmFsc2UsXG4gICAgcmVwbGFjZW1lbnRSZWFzb246IHJlcGxhY2VtZW50Py5wcmVmZXJlbmNlPy5yZWFzb24gPz8gbnVsbCxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVGb2xsb3dlckF1dGhvcml0eShcbiAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIsXG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgZGVwczogRm9sbG93ZXJBdXRob3JpdHlEZXBlbmRlbmNpZXMgPSB7fSxcbik6IFByb21pc2U8Rm9sbG93ZXJBdXRob3JpdHlSZXNvbHV0aW9uPiB7XG4gIGNvbnN0IGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwgPSBkZXBzLmlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwgPz8gaXNMZWFkZXJXZWJDb25zb2xlUmVhY2hhYmxlO1xuICBjb25zdCBkaXNjb3ZlckxlYWRlclNlcnZpbmdQb3J0SW1wbCA9IGRlcHMuZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydEltcGwgPz8gZGlzY292ZXJMZWFkZXJTZXJ2aW5nUG9ydDtcbiAgY29uc3QgZm9yY2VDbGFpbUxlYWRlcnNoaXBJbXBsID0gZGVwcy5mb3JjZUNsYWltTGVhZGVyc2hpcEltcGwgPz8gZm9yY2VDbGFpbUxlYWRlcnNoaXA7XG4gIGNvbnN0IGRlbGV0ZUxlYWRlckxvY2tJbXBsID0gZGVwcy5kZWxldGVMZWFkZXJMb2NrSW1wbCA/PyBkZWxldGVMZWFkZXJMb2NrO1xuXG4gIGNvbnN0IHJlYWNoYWJsZSA9IGF3YWl0IGlzTGVhZGVyV2ViQ29uc29sZVJlYWNoYWJsZUltcGwoZWxlY3Rpb24ubGVhZGVySW5mbyk7XG4gIGlmICghcmVhY2hhYmxlKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gRWxlY3RlZCBsZWFkZXIgaXMgbm90IHNlcnZpbmcgdGhlIGNvbnNvbGUgcG9ydDsgZm9yY2luZyB0YWtlb3ZlcicsIHtcbiAgICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgICAgZWxlY3RlZExlYWRlclBpZDogZWxlY3Rpb24ubGVhZGVySW5mby5waWQsXG4gICAgICBlbGVjdGVkTGVhZGVyU2Vzc2lvbklkOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnNlc3Npb25JZCxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlY3Rpb246IGF3YWl0IGZvcmNlQ2xhaW1MZWFkZXJzaGlwSW1wbChzZXNzaW9uSWQsIGNvbnNvbGVQb3J0KSxcbiAgICAgIGRpc2NvdmVyeTogbnVsbCxcbiAgICAgIHJlcGxhY2VtZW50OiBudWxsLFxuICAgICAgZm9yY2VkQ2xhaW06IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGNhbmRpZGF0ZUxlYWRlciA9IGNyZWF0ZUxlYWRlckluZm8oc2Vzc2lvbklkLCBjb25zb2xlUG9ydCk7XG4gIGNvbnN0IGRpc2NvdmVyeSA9IGF3YWl0IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnRJbXBsKGNvbnNvbGVQb3J0LCBudWxsKTtcbiAgaWYgKCFkaXNjb3ZlcnkubGVhZGVySW5mbyB8fCBkaXNjb3Zlcnkub3duZXJQaWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWxlY3Rpb24sXG4gICAgICBkaXNjb3ZlcnksXG4gICAgICByZXBsYWNlbWVudDogbnVsbCxcbiAgICAgIGZvcmNlZENsYWltOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcmVwbGFjZW1lbnQgPSBldmFsdWF0ZVBvcnRPd25lclJlcGxhY2VtZW50KGNhbmRpZGF0ZUxlYWRlciwgZGlzY292ZXJ5KTtcbiAgaWYgKHJlcGxhY2VtZW50LnNob3VsZEV2aWN0KSB7XG4gICAgYXdhaXQgZGVsZXRlTGVhZGVyTG9ja0ltcGwoKTtcbiAgICBsb2dnZXIud2FybihcbiAgICAgIGRpc2NvdmVyeS5vd25lclBpZCA9PT0gZWxlY3Rpb24ubGVhZGVySW5mby5waWRcbiAgICAgICAgPyAnW1VuaWZpZWRDb25zb2xlXSBPbGRlciBjb25zb2xlIGxlYWRlciBkZXRlY3RlZCBvbiB0aGUgY29uc29sZSBwb3J0OyBuZXdlciBzZXNzaW9uIHdpbGwgdGFrZSBvdmVyJ1xuICAgICAgICA6ICdbVW5pZmllZENvbnNvbGVdIFNwbGl0LWJyYWluIGNvbnNvbGUgYXV0aG9yaXR5IGRldGVjdGVkOyBuZXdlciBzZXNzaW9uIHdpbGwgcmVwbGFjZSB0aGUgYWN0dWFsIHBvcnQgb3duZXInLFxuICAgICAgYnVpbGRBdXRob3JpdHlSZXNvbHV0aW9uTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgIGRpc2NvdmVyeSxcbiAgICAgICAgcmVwbGFjZW1lbnQsXG4gICAgICApLFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVsZWN0aW9uOiB7IHJvbGU6ICdsZWFkZXInLCBsZWFkZXJJbmZvOiBjYW5kaWRhdGVMZWFkZXIgfSxcbiAgICAgIGRpc2NvdmVyeSxcbiAgICAgIHJlcGxhY2VtZW50LFxuICAgICAgZm9yY2VkQ2xhaW06IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBpZiAoZGlzY292ZXJ5Lm93bmVyUGlkICE9PSBlbGVjdGlvbi5sZWFkZXJJbmZvLnBpZCkge1xuICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIFNwbGl0LWJyYWluIGNvbnNvbGUgYXV0aG9yaXR5IGRldGVjdGVkOyBmb2xsb3dpbmcgdGhlIGFjdHVhbCBwb3J0IG93bmVyJywgYnVpbGRBdXRob3JpdHlSZXNvbHV0aW9uTG9nQ29udGV4dChcbiAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgZWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgIGRpc2NvdmVyeSxcbiAgICAgIHJlcGxhY2VtZW50LFxuICAgICkpO1xuICAgIHJldHVybiB7XG4gICAgICBlbGVjdGlvbjogeyByb2xlOiAnZm9sbG93ZXInLCBsZWFkZXJJbmZvOiBkaXNjb3ZlcnkubGVhZGVySW5mbyB9LFxuICAgICAgZGlzY292ZXJ5LFxuICAgICAgcmVwbGFjZW1lbnQsXG4gICAgICBmb3JjZWRDbGFpbTogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZWxlY3Rpb24sXG4gICAgZGlzY292ZXJ5LFxuICAgIHJlcGxhY2VtZW50LFxuICAgIGZvcmNlZENsYWltOiBmYWxzZSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXR0ZW1wdEZvcmNlVGFrZW92ZXIoXG4gIG9wdGlvbnM6IFVuaWZpZWRDb25zb2xlT3B0aW9ucyxcbiAgY3VycmVudEVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgY29uc29sZVBvcnQ6IG51bWJlcixcbiAgcHJpbWFyeVRva2VuOiBzdHJpbmcsXG4gIHNlcnZlck9wdHM6IFdlYlNlcnZlck9wdGlvbnMsXG4gIHN0YXJ0V2ViU2VydmVySW1wbDogKG9wdGlvbnM6IFdlYlNlcnZlck9wdGlvbnMpID0+IFByb21pc2U8V2ViU2VydmVyUmVzdWx0Pixcbik6IFByb21pc2U8Rm9yY2VUYWtlb3ZlckF0dGVtcHRSZXN1bHQ+IHtcbiAgY29uc3QgaW5pdGlhbEZhbGxiYWNrID0gYXdhaXQgcmVjb3ZlckxlYWRlckJpbmRGYWlsdXJlKGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLCBjb25zb2xlUG9ydCwgcHJpbWFyeVRva2VuKTtcbiAgY29uc3QgaW5pdGlhbFJlcGxhY2VtZW50ID0gZXZhbHVhdGVQb3J0T3duZXJSZXBsYWNlbWVudChjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbywgaW5pdGlhbEZhbGxiYWNrKTtcblxuICBpZiAoIWluaXRpYWxSZXBsYWNlbWVudC5zaG91bGRFdmljdCB8fCBpbml0aWFsUmVwbGFjZW1lbnQub3duZXJQaWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2ViUmVzdWx0OiB7IGJpbmRSZXN1bHQ6IHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRUFERFJJTlVTRScsIGRldGFpbDogYFBvcnQgJHtjb25zb2xlUG9ydH0gYWxyZWFkeSBpbiB1c2VgIH0gfSxcbiAgICAgIGVsZWN0aW9uOiBjdXJyZW50RWxlY3Rpb24sXG4gICAgICBmYWxsYmFjazogaW5pdGlhbEZhbGxiYWNrLFxuICAgICAgcmVwbGFjZW1lbnQ6IGluaXRpYWxSZXBsYWNlbWVudCxcbiAgICAgIGZvcmNlZEtpbGw6IG51bGwsXG4gICAgICB0YWtlb3ZlckF0dGVtcHRlZDogZmFsc2UsXG4gICAgICByZWJvdW5kTG9ja0NsYWltZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBsYXRlc3RGYWxsYmFjayA9IGF3YWl0IGRpc2NvdmVyTGVhZGVyU2VydmluZ1BvcnQoY29uc29sZVBvcnQsIHByaW1hcnlUb2tlbik7XG4gIGNvbnN0IGxhdGVzdFJlcGxhY2VtZW50ID0gZXZhbHVhdGVQb3J0T3duZXJSZXBsYWNlbWVudChjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbywgbGF0ZXN0RmFsbGJhY2spO1xuICBpZiAoIWxhdGVzdFJlcGxhY2VtZW50LnNob3VsZEV2aWN0IHx8IGxhdGVzdFJlcGxhY2VtZW50Lm93bmVyUGlkID09PSBudWxsKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1tVbmlmaWVkQ29uc29sZV0gRm9yY2VkIHRha2VvdmVyIHRhcmdldCBjaGFuZ2VkIGJlZm9yZSBldmljdGlvbjsgc2tpcHBpbmcgZm9yY2VkIGtpbGwnLCB7XG4gICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9LFxuICAgICAgICBsYXRlc3RGYWxsYmFjayxcbiAgICAgICAgbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICApLFxuICAgICAgcHJldmlvdXNPd25lclBpZDogaW5pdGlhbFJlcGxhY2VtZW50Lm93bmVyUGlkLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB3ZWJSZXN1bHQ6IHsgYmluZFJlc3VsdDogeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdFQUREUklOVVNFJywgZGV0YWlsOiBgUG9ydCAke2NvbnNvbGVQb3J0fSBhbHJlYWR5IGluIHVzZWAgfSB9LFxuICAgICAgZWxlY3Rpb246IGN1cnJlbnRFbGVjdGlvbixcbiAgICAgIGZhbGxiYWNrOiBsYXRlc3RGYWxsYmFjayxcbiAgICAgIHJlcGxhY2VtZW50OiBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICAgIGZvcmNlZEtpbGw6IG51bGwsXG4gICAgICB0YWtlb3ZlckF0dGVtcHRlZDogZmFsc2UsXG4gICAgICByZWJvdW5kTG9ja0NsYWltZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBsb2dnZXIud2FybignW1VuaWZpZWRDb25zb2xlXSBBdHRlbXB0aW5nIGZvcmNlZCB0YWtlb3ZlciBmcm9tIG9sZGVyIG9yIGluY29tcGF0aWJsZSBhY3RpdmUgbGVhZGVyJywge1xuICAgIC4uLmJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICAgICAgY29uc29sZVBvcnQsXG4gICAgICBjdXJyZW50RWxlY3Rpb24ubGVhZGVySW5mbyxcbiAgICAgIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnRUFERFJJTlVTRScsIGRldGFpbDogYFBvcnQgJHtjb25zb2xlUG9ydH0gYWxyZWFkeSBpbiB1c2VgIH0sXG4gICAgICBsYXRlc3RGYWxsYmFjayxcbiAgICAgIGxhdGVzdFJlcGxhY2VtZW50LFxuICAgICksXG4gIH0pO1xuXG4gIGNvbnN0IGZvcmNlZEtpbGwgPSBhd2FpdCBraWxsU3RhbGVQcm9jZXNzRGV0YWlsZWQobGF0ZXN0UmVwbGFjZW1lbnQub3duZXJQaWQsIGNvbnNvbGVQb3J0LCB7XG4gICAgYWxsb3dBY3RpdmVIb3N0UGFyZW50OiB0cnVlLFxuICB9KTtcbiAgaWYgKCFmb3JjZWRLaWxsLmtpbGxlZCkge1xuICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIEZvcmNlZCB0YWtlb3ZlciBza2lwcGVkIG9yIGZhaWxlZCBhZnRlciBpZGVudGlmeWluZyByZXBsYWNlYWJsZSBsZWFkZXInLCB7XG4gICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogJ0VBRERSSU5VU0UnLCBkZXRhaWw6IGBQb3J0ICR7Y29uc29sZVBvcnR9IGFscmVhZHkgaW4gdXNlYCB9LFxuICAgICAgICBsYXRlc3RGYWxsYmFjayxcbiAgICAgICAgbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICAgIGZvcmNlZEtpbGwsXG4gICAgICApLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB3ZWJSZXN1bHQ6IHsgYmluZFJlc3VsdDogeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6ICdFQUREUklOVVNFJywgZGV0YWlsOiBgUG9ydCAke2NvbnNvbGVQb3J0fSBhbHJlYWR5IGluIHVzZWAgfSB9LFxuICAgICAgZWxlY3Rpb246IGN1cnJlbnRFbGVjdGlvbixcbiAgICAgIGZhbGxiYWNrOiBsYXRlc3RGYWxsYmFjayxcbiAgICAgIHJlcGxhY2VtZW50OiBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICAgIGZvcmNlZEtpbGwsXG4gICAgICB0YWtlb3ZlckF0dGVtcHRlZDogdHJ1ZSxcbiAgICAgIHJlYm91bmRMb2NrQ2xhaW1lZDogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHJlYm91bmRXZWJSZXN1bHQgPSBhd2FpdCBzdGFydFdlYlNlcnZlckltcGwoc2VydmVyT3B0cyk7XG4gIGxldCByZWJvdW5kRWxlY3Rpb24gPSBjdXJyZW50RWxlY3Rpb247XG4gIGxldCByZWJvdW5kTG9ja0NsYWltZWQgPSBmYWxzZTtcblxuICBpZiAoIXJlYm91bmRXZWJSZXN1bHQuYmluZFJlc3VsdCB8fCByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHJlYm91bmRMZWFkZXJJbmZvID0gY3JlYXRlTGVhZGVySW5mbyhvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQpO1xuICAgIHJlYm91bmRMb2NrQ2xhaW1lZCA9IGF3YWl0IGNsYWltTGVhZGVyc2hpcChyZWJvdW5kTGVhZGVySW5mbyk7XG4gICAgaWYgKCFyZWJvdW5kTG9ja0NsYWltZWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIFJlYm91bmQgbGVhZGVyIGJvdW5kIHBvcnQgYnV0IGNvdWxkIG5vdCBpbW1lZGlhdGVseSByZS1jbGFpbSBsb2NrJywge1xuICAgICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgICBjb25zb2xlUG9ydCxcbiAgICAgICAgICByZWJvdW5kTGVhZGVySW5mbyxcbiAgICAgICAgICByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgICAgbGF0ZXN0RmFsbGJhY2ssXG4gICAgICAgICAgbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgICAgICAgZm9yY2VkS2lsbCxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZWJvdW5kRWxlY3Rpb24gPSB7IHJvbGU6ICdsZWFkZXInLCBsZWFkZXJJbmZvOiByZWJvdW5kTGVhZGVySW5mbyB9O1xuICB9IGVsc2Uge1xuICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIEZvcmNlZCB0YWtlb3ZlciBraWxsZWQgb2xkIGxlYWRlciBidXQgYmluZCByZXRyeSBzdGlsbCBmYWlsZWQnLCB7XG4gICAgICAuLi5idWlsZEJpbmRGYWlsdXJlTG9nQ29udGV4dChcbiAgICAgICAgY29uc29sZVBvcnQsXG4gICAgICAgIGN1cnJlbnRFbGVjdGlvbi5sZWFkZXJJbmZvLFxuICAgICAgICByZWJvdW5kV2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgIGxhdGVzdEZhbGxiYWNrLFxuICAgICAgICBsYXRlc3RSZXBsYWNlbWVudCxcbiAgICAgICAgZm9yY2VkS2lsbCxcbiAgICAgICksXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdlYlJlc3VsdDogcmVib3VuZFdlYlJlc3VsdCxcbiAgICBlbGVjdGlvbjogcmVib3VuZEVsZWN0aW9uLFxuICAgIGZhbGxiYWNrOiBsYXRlc3RGYWxsYmFjayxcbiAgICByZXBsYWNlbWVudDogbGF0ZXN0UmVwbGFjZW1lbnQsXG4gICAgZm9yY2VkS2lsbCxcbiAgICB0YWtlb3ZlckF0dGVtcHRlZDogdHJ1ZSxcbiAgICByZWJvdW5kTG9ja0NsYWltZWQsXG4gIH07XG59XG5cbi8qKlxuICogU3RhcnQgdGhlIHVuaWZpZWQgd2ViIGNvbnNvbGUuXG4gKlxuICogUnVucyBsZWFkZXIgZWxlY3Rpb24sIHRoZW4gZWl0aGVyIHN0YXJ0cyB0aGUgZnVsbCBjb25zb2xlIChsZWFkZXIpXG4gKiBvciBzZXRzIHVwIGV2ZW50IGZvcndhcmRpbmcgKGZvbGxvd2VyKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0VW5pZmllZENvbnNvbGUob3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICAvLyBSZXNvbHZlIHBvcnQ6IG9wdGlvbnMgKGNvbmZpZyBmaWxlKSDihpIgZW52IHZhciDihpIgZGVmYXVsdFxuICBjb25zdCBjb25zb2xlUG9ydCA9IG9wdGlvbnMucG9ydCB8fCBERUZBVUxUX0NPTlNPTEVfUE9SVDtcbiAgbG9nZ2VyLmRlYnVnKGBbVW5pZmllZENvbnNvbGVdIFBvcnQgcmVzb2x2ZWQ6ICR7Y29uc29sZVBvcnR9YCArXG4gICAgKG9wdGlvbnMucG9ydCA/ICcgKGZyb20gY29uZmlnIGZpbGUpJyA6IGAgKGZyb20gZW52L2RlZmF1bHQpYCkpO1xuXG4gIC8vIExlZ2FjeS1sZWFkZXIgZGV0ZWN0aW9uICgjMTc5NCkg4oCUIHdhcm4gdGhlIHVzZXIgaWYgYSBwcmUtYXV0aFxuICAvLyBEb2xsaG91c2VNQ1AgY29uc29sZSBpcyBydW5uaW5nIGFsb25nc2lkZSB0aGlzIGF1dGhlbnRpY2F0ZWQgb25lLlxuICAvLyBUaGV5IHdpbGwgY29leGlzdCBmaW5lIGJlY2F1c2Ugb2YgcG9ydCArIGxvY2sgKyB0b2tlbiBmaWxlIGlzb2xhdGlvbixcbiAgLy8gYnV0IHRoZSB1c2VyIHNob3VsZCBrbm93IGJvdGggZXhpc3Qgc28gdGhlIGRpZmZlcmluZyBzZWN1cml0eSBwb3N0dXJlXG4gIC8vIGJldHdlZW4gdGhlbSBkb2Vzbid0IGxvb2sgbGlrZSBhIGJ1Zy5cbiAgYXdhaXQgd2FybklmTGVnYWN5Q29uc29sZVByZXNlbnQoY29uc29sZVBvcnQpO1xuXG4gIGxldCBlbGVjdGlvbiA9IGF3YWl0IGVsZWN0TGVhZGVyKG9wdGlvbnMuc2Vzc2lvbklkLCBjb25zb2xlUG9ydCk7XG5cbiAgaWYgKGVsZWN0aW9uLnJvbGUgPT09ICdmb2xsb3dlcicpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVGb2xsb3dlckF1dGhvcml0eShvcHRpb25zLnNlc3Npb25JZCwgY29uc29sZVBvcnQsIGVsZWN0aW9uKTtcbiAgICBlbGVjdGlvbiA9IHJlc29sdmVkLmVsZWN0aW9uO1xuICB9XG5cbiAgaWYgKGVsZWN0aW9uLnJvbGUgPT09ICdsZWFkZXInKSB7XG4gICAgcmV0dXJuIHN0YXJ0QXNMZWFkZXIob3B0aW9ucywgZWxlY3Rpb24sIGNvbnNvbGVQb3J0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RhcnRBc0ZvbGxvd2VyKG9wdGlvbnMsIGVsZWN0aW9uLCBjb25zb2xlUG9ydCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTdGFydCBhcyB0aGUgY29uc29sZSBsZWFkZXIuXG4gKiBCaW5kcyB0aGUgcmVzb2x2ZWQgY29uc29sZSBwb3J0IChjb25maWcgZmlsZSDihpIgZW52IHZhciDihpIgZGVmYXVsdCksXG4gKiBtb3VudHMgYWxsIHJvdXRlcyBpbmNsdWRpbmcgaW5nZXN0aW9uLCBzdGFydHMgaGVhcnRiZWF0LlxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFydEFzTGVhZGVyKFxuICBvcHRpb25zOiBVbmlmaWVkQ29uc29sZU9wdGlvbnMsXG4gIGVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCxcbiAgY29uc29sZVBvcnQ6IG51bWJlciA9IERFRkFVTFRfQ09OU09MRV9QT1JULFxuKTogUHJvbWlzZTxVbmlmaWVkQ29uc29sZVJlc3VsdD4ge1xuICBjb25zdCB7IHN0YXJ0V2ViU2VydmVyIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZlci5qcycpO1xuICBjb25zdCB7IHBpY2tSYW5kb21Ub2tlbk5hbWUgfSA9IGF3YWl0IGltcG9ydCgnLi9TZXNzaW9uTmFtZXMuanMnKTtcblxuICAvLyBJbml0aWFsaXplIHRoZSBjb25zb2xlIHRva2VuIHN0b3JlICgjMTc4MCkuIENyZWF0ZXMgdGhlIHRva2VuIGZpbGUgb25cbiAgLy8gZmlyc3QgcnVuLCByZWFkcyB0aGUgZXhpc3RpbmcgdG9rZW5zIG9uIHN1YnNlcXVlbnQgcnVucy4gVGhlIHRva2VuIGlzXG4gIC8vIHBlcnNpc3RlbnQgYWNyb3NzIHJlc3RhcnRzIOKAlCBvbmx5IHJvdGF0ZWQgb24gZXhwbGljaXQgcmVxdWVzdCAoUGhhc2UgMikuXG4gIC8vIEZlYXR1cmUgZmxhZyBET0xMSE9VU0VfV0VCX0FVVEhfRU5BQkxFRCBjb250cm9scyBlbmZvcmNlbWVudDsgdGhlIGZpbGVcbiAgLy8gaXMgZ2VuZXJhdGVkIHJlZ2FyZGxlc3Mgc28gY29uc3VtZXJzIGNhbiBhdHRhY2ggdG9rZW5zIHByZWVtcHRpdmVseS5cbiAgY29uc3QgdG9rZW5TdG9yZSA9IG5ldyBDb25zb2xlVG9rZW5TdG9yZShlbnYuRE9MTEhPVVNFX0NPTlNPTEVfVE9LRU5fRklMRSk7XG4gIGNvbnN0IHByaW1hcnlUb2tlbiA9IGF3YWl0IHRva2VuU3RvcmUuZW5zdXJlSW5pdGlhbGl6ZWQocGlja1JhbmRvbVRva2VuTmFtZSgpKTtcbiAgbG9nZ2VyLmluZm8oJ1tVbmlmaWVkQ29uc29sZV0gQ29uc29sZSB0b2tlbiBzdG9yZSBpbml0aWFsaXplZCcsIHtcbiAgICB0b2tlbklkOiBwcmltYXJ5VG9rZW4uaWQsXG4gICAgdG9rZW5OYW1lOiBwcmltYXJ5VG9rZW4ubmFtZSxcbiAgICBmaWxlOiB0b2tlblN0b3JlLmdldEZpbGVQYXRoKCksXG4gICAgYXV0aEVuZm9yY2VkOiBlbnYuRE9MTEhPVVNFX1dFQl9BVVRIX0VOQUJMRUQsXG4gIH0pO1xuXG4gIC8vIFByZS1jcmVhdGUgYSBwbGFjZWhvbGRlciBicm9hZGNhc3QgdGhhdCB3ZSdsbCB3aXJlIHVwIGFmdGVyIHRoZSBzZXJ2ZXIgc3RhcnRzXG4gIGxldCBsaXZlQnJvYWRjYXN0OiAoKGVudHJ5OiBVbmlmaWVkTG9nRW50cnkpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgbGl2ZU1ldHJpY3NPblNuYXBzaG90OiAoKHNuYXBzaG90OiBNZXRyaWNTbmFwc2hvdCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG5cbiAgLy8gQ3JlYXRlIGluZ2VzdGlvbiByb3V0ZXMgd2l0aCBhIGRlZmVycmVkIGJyb2FkY2FzdCAod2lyZWQgYWZ0ZXIgc2VydmVyIHN0YXJ0cylcbiAgY29uc3QgaW5nZXN0UmVzdWx0ID0gY3JlYXRlSW5nZXN0Um91dGVzKHtcbiAgICBsb2dCcm9hZGNhc3Q6IChlbnRyeSkgPT4gbGl2ZUJyb2FkY2FzdD8uKGVudHJ5KSxcbiAgICBtZXRyaWNzT25TbmFwc2hvdDogKHNuYXBzaG90KSA9PiBsaXZlTWV0cmljc09uU25hcHNob3Q/LihzbmFwc2hvdCksXG4gICAgc3RvcmVNZXRyaWNzU25hcHNob3Q6IChzbmFwc2hvdCkgPT4gb3B0aW9ucy5tZXRyaWNzU2luaz8ub25TbmFwc2hvdChzbmFwc2hvdCksXG4gIH0pO1xuXG4gIC8vIFN0YXJ0IHRoZSB3ZWIgc2VydmVyIHdpdGggaW5nZXN0IHJvdXRlcyBtb3VudGVkIGJlZm9yZSB0aGUgU1BBIGZhbGxiYWNrLlxuICAvLyBJZiB0aGUgcG9ydCBpcyBvY2N1cGllZCBieSBhIHN0YWxlIHByb2Nlc3MsIHJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi5cbiAgY29uc3Qgc2VydmVyT3B0cyA9IHtcbiAgICBwb3J0Zm9saW9EaXI6IG9wdGlvbnMucG9ydGZvbGlvRGlyLFxuICAgIG1lbW9yeVNpbms6IG9wdGlvbnMubWVtb3J5U2luayxcbiAgICBtZXRyaWNzU2luazogb3B0aW9ucy5tZXRyaWNzU2luayxcbiAgICBwb3J0OiBjb25zb2xlUG9ydCxcbiAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc3RhYmxlU2Vzc2lvbklkLFxuICAgIHJ1bnRpbWVTZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLFxuICAgIGFkZGl0aW9uYWxSb3V0ZXJzOiBbaW5nZXN0UmVzdWx0LnJvdXRlcl0sXG4gICAgdG9rZW5TdG9yZSxcbiAgICAuLi4ob3B0aW9ucy5tY3BBcWxIYW5kbGVyID8geyBtY3BBcWxIYW5kbGVyOiBvcHRpb25zLm1jcEFxbEhhbmRsZXIgfSA6IHt9KSxcbiAgfTtcbiAgLy8gYmluZEFuZExpc3RlbiBub3cgaGFuZGxlcyBFQUREUklOVVNFIGJ5IGZpbmRpbmcgYW5kIGtpbGxpbmcgdGhlIHN0YWxlXG4gIC8vIHByb2Nlc3Mgb24gdGhlIHBvcnQsIHRoZW4gcmV0cnlpbmcuIE5vIGV4dGVybmFsIHJldHJ5IGxvb3AgbmVlZGVkLlxuICBsZXQgd2ViUmVzdWx0ID0gYXdhaXQgc3RhcnRXZWJTZXJ2ZXIoc2VydmVyT3B0cyk7XG5cbiAgaWYgKHdlYlJlc3VsdC5iaW5kUmVzdWx0ICYmICF3ZWJSZXN1bHQuYmluZFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZm9yY2VUYWtlb3ZlciA9IGF3YWl0IGF0dGVtcHRGb3JjZVRha2VvdmVyKFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGVsZWN0aW9uLFxuICAgICAgY29uc29sZVBvcnQsXG4gICAgICBwcmltYXJ5VG9rZW4udG9rZW4sXG4gICAgICBzZXJ2ZXJPcHRzLFxuICAgICAgc3RhcnRXZWJTZXJ2ZXIsXG4gICAgKTtcbiAgICB3ZWJSZXN1bHQgPSBmb3JjZVRha2VvdmVyLndlYlJlc3VsdDtcbiAgICBlbGVjdGlvbiA9IGZvcmNlVGFrZW92ZXIuZWxlY3Rpb247XG5cbiAgICBpZiAod2ViUmVzdWx0LmJpbmRSZXN1bHQgJiYgIXdlYlJlc3VsdC5iaW5kUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIGlmIChmb3JjZVRha2VvdmVyLmZhbGxiYWNrLmxlYWRlckluZm8pIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciByb2xlIGFib3J0ZWQ6IGJpbmQgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gZm9sbG93ZXInLCB7XG4gICAgICAgIC4uLmJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICAgICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgICAgd2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgICAgZm9yY2VUYWtlb3Zlci5mYWxsYmFjayxcbiAgICAgICAgICBmb3JjZVRha2VvdmVyLnJlcGxhY2VtZW50LFxuICAgICAgICAgIGZvcmNlVGFrZW92ZXIuZm9yY2VkS2lsbCxcbiAgICAgICAgKSxcbiAgICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZvcmNlVGFrZW92ZXIudGFrZW92ZXJBdHRlbXB0ZWQsXG4gICAgICAgIHJlYm91bmRMb2NrQ2xhaW1lZDogZm9yY2VUYWtlb3Zlci5yZWJvdW5kTG9ja0NsYWltZWQsXG4gICAgICAgIGxvY2tDbGVhbnVwQXR0ZW1wdGVkOiBmb3JjZVRha2VvdmVyLmZhbGxiYWNrLnNvdXJjZSAhPT0gJ25vbmUnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmb2xsb3dlckVsZWN0aW9uOiBFbGVjdGlvblJlc3VsdCA9IHsgcm9sZTogJ2ZvbGxvd2VyJywgbGVhZGVySW5mbzogZm9yY2VUYWtlb3Zlci5mYWxsYmFjay5sZWFkZXJJbmZvIH07XG4gICAgICByZXR1cm4gc3RhcnRBc0ZvbGxvd2VyKG9wdGlvbnMsIGZvbGxvd2VyRWxlY3Rpb24sIGNvbnNvbGVQb3J0LCBwcmltYXJ5VG9rZW4udG9rZW4pO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuZXJyb3IoJ1tVbmlmaWVkQ29uc29sZV0gTGVhZGVyIGZhaWxlZCB0byBiaW5kIGFuZCBubyBhY3RpdmUgbGVhZGVyIGNvdWxkIGJlIGlkZW50aWZpZWQnLCB7XG4gICAgICAgIC4uLmJ1aWxkQmluZEZhaWx1cmVMb2dDb250ZXh0KFxuICAgICAgICAgIGNvbnNvbGVQb3J0LFxuICAgICAgICAgIGVsZWN0aW9uLmxlYWRlckluZm8sXG4gICAgICAgICAgd2ViUmVzdWx0LmJpbmRSZXN1bHQsXG4gICAgICAgICAgZm9yY2VUYWtlb3Zlci5mYWxsYmFjayxcbiAgICAgICAgICBmb3JjZVRha2VvdmVyLnJlcGxhY2VtZW50LFxuICAgICAgICAgIGZvcmNlVGFrZW92ZXIuZm9yY2VkS2lsbCxcbiAgICAgICAgKSxcbiAgICAgICAgdGFrZW92ZXJBdHRlbXB0ZWQ6IGZvcmNlVGFrZW92ZXIudGFrZW92ZXJBdHRlbXB0ZWQsXG4gICAgICAgIHJlYm91bmRMb2NrQ2xhaW1lZDogZm9yY2VUYWtlb3Zlci5yZWJvdW5kTG9ja0NsYWltZWQsXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGVhZGVyIGZhaWxlZCB0byBiaW5kIHBvcnQgJHtjb25zb2xlUG9ydH0gYW5kIG5vIGFjdGl2ZSBsZWFkZXIgd2FzIGRpc2NvdmVyYWJsZWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlZ2lzdGVyIHRoZSBsZWFkZXIgb25seSBhZnRlciB0aGUgSFRUUCBsaXN0ZW5lciBpcyBhY3R1YWxseSBzZXJ2aW5nIHRoZSBwb3J0LlxuICBpbmdlc3RSZXN1bHQucmVnaXN0ZXJMZWFkZXJTZXNzaW9uKG9wdGlvbnMuc2Vzc2lvbklkLCBwcm9jZXNzLnBpZCk7XG5cbiAgLy8gUmVnaXN0ZXIgdGhlIHdlYiBjb25zb2xlIGl0c2VsZiBzbyB0aGUgc2Vzc2lvbiBpbmRpY2F0b3IgaXMgbmV2ZXIgZW1wdHkgKCMxODA1KVxuICBpbmdlc3RSZXN1bHQucmVnaXN0ZXJDb25zb2xlU2Vzc2lvbigpO1xuXG4gIC8vIFdpcmUgU1NFIGJyb2FkY2FzdHMgZm9yIHRoaXMgbGVhZGVyJ3Mgb3duIGV2ZW50c1xuICBvcHRpb25zLndpcmVTU0VCcm9hZGNhc3RzKHdlYlJlc3VsdCwgb3B0aW9ucy5tZXRyaWNzU2luayk7XG5cbiAgLy8gTm93IHdpcmUgdGhlIGxpdmUgYnJvYWRjYXN0IGZ1bmN0aW9ucyBpbnRvIHRoZSBpbmdlc3Qgcm91dGVzXG4gIGlmICh3ZWJSZXN1bHQubG9nQnJvYWRjYXN0KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxCcm9hZGNhc3QgPSB3ZWJSZXN1bHQubG9nQnJvYWRjYXN0O1xuICAgIC8vIFN0YW1wIGxlYWRlcidzIG93biBlbnRyaWVzIHdpdGggc2Vzc2lvbiBJRFxuICAgIGxpdmVCcm9hZGNhc3QgPSAoZW50cnk6IFVuaWZpZWRMb2dFbnRyeSkgPT4ge1xuICAgICAgY29uc3Qgc3RhbXBlZDogVW5pZmllZExvZ0VudHJ5ID0ge1xuICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgZGF0YTogeyAuLi5lbnRyeS5kYXRhLCBfc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCB9LFxuICAgICAgfTtcbiAgICAgIG9yaWdpbmFsQnJvYWRjYXN0KHN0YW1wZWQpO1xuICAgIH07XG4gIH1cbiAgbGl2ZU1ldHJpY3NPblNuYXBzaG90ID0gd2ViUmVzdWx0Lm1ldHJpY3NPblNuYXBzaG90O1xuXG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIEluZ2VzdGlvbiByb3V0ZXMgbW91bnRlZCcpO1xuXG4gIC8vIFN0YXJ0IGhlYXJ0YmVhdCBhbmQgcmVnaXN0ZXIgY2xlYW51cFxuICBjb25zdCBzdG9wSGVhcnRiZWF0ID0gc3RhcnRIZWFydGJlYXQoZWxlY3Rpb24ubGVhZGVySW5mbyk7XG4gIHJlZ2lzdGVyTGVhZGVyQ2xlYW51cCgpO1xuXG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIExlYWRlciBzdGFydGVkJywge1xuICAgIHNlc3Npb25JZDogb3B0aW9ucy5zZXNzaW9uSWQsIHBvcnQ6IGNvbnNvbGVQb3J0LCBwaWQ6IHByb2Nlc3MucGlkLFxuICAgIHJvbGU6ICdsZWFkZXInLCBpbmdlc3RSb3V0ZXM6IFsnL2FwaS9pbmdlc3QvbG9ncycsICcvYXBpL2luZ2VzdC9tZXRyaWNzJywgJy9hcGkvaW5nZXN0L3Nlc3Npb24nLCAnL2FwaS9zZXNzaW9ucyddLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHJvbGU6ICdsZWFkZXInLFxuICAgIGVsZWN0aW9uLFxuICAgIHBvcnQ6IGNvbnNvbGVQb3J0LFxuICAgIGNsZWFudXA6IGFzeW5jICgpID0+IHtcbiAgICAgIHN0b3BIZWFydGJlYXQoKTtcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIFN0YXJ0IGFzIGEgZm9sbG93ZXIuXG4gKiBSZWdpc3RlcnMgZm9yd2FyZGluZyBzaW5rcyB3aXRoIHRoZSBMb2dNYW5hZ2VyLCBzdGFydHMgc2Vzc2lvbiBoZWFydGJlYXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0QXNGb2xsb3dlcihcbiAgb3B0aW9uczogVW5pZmllZENvbnNvbGVPcHRpb25zLFxuICBlbGVjdGlvbjogRWxlY3Rpb25SZXN1bHQsXG4gIGNvbnNvbGVQb3J0OiBudW1iZXIgPSBERUZBVUxUX0NPTlNPTEVfUE9SVCxcbiAgaW5pdGlhbEF1dGhUb2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4pOiBQcm9taXNlPFVuaWZpZWRDb25zb2xlUmVzdWx0PiB7XG4gIGNvbnN0IGxlYWRlclVybCA9IGBodHRwOi8vMTI3LjAuMC4xOiR7ZWxlY3Rpb24ubGVhZGVySW5mby5wb3J0fWA7XG5cbiAgLy8gUmVhZCB0aGUgY29uc29sZSBhdXRoIHRva2VuICgjMTc4MCkgd3JpdHRlbiBieSB0aGUgbGVhZGVyLiBNYXkgYmUgbnVsbFxuICAvLyBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IHlldCDigJQgdGhlIHNpbmtzIGhhbmRsZSB0aGF0IGdyYWNlZnVsbHkgYW5kXG4gIC8vIHNpbXBseSBvbWl0IHRoZSBCZWFyZXIgaGVhZGVyLCB3aGljaCBpcyBmaW5lIHdoZW4gYXV0aCBpcyBub3QgZW5mb3JjZWQuXG4gIGxldCBhdXRoVG9rZW4gPSBpbml0aWFsQXV0aFRva2VuO1xuICBpZiAoYXV0aFRva2VuID09PSBudWxsKSB7XG4gICAgY29uc3QgeyBnZXRQcmltYXJ5VG9rZW5Gcm9tRmlsZSB9ID0gYXdhaXQgaW1wb3J0KCcuL2NvbnNvbGVUb2tlbi5qcycpO1xuICAgIGF1dGhUb2tlbiA9IGF3YWl0IGdldFByaW1hcnlUb2tlbkZyb21GaWxlKGVudi5ET0xMSE9VU0VfQ09OU09MRV9UT0tFTl9GSUxFKTtcbiAgfVxuICBpZiAoYXV0aFRva2VuKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdbVW5pZmllZENvbnNvbGVdIEZvbGxvd2VyIGxvYWRlZCBjb25zb2xlIGF1dGggdG9rZW4nKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuZGVidWcoJ1tVbmlmaWVkQ29uc29sZV0gTm8gY29uc29sZSBhdXRoIHRva2VuIGZpbGUgZm91bmQ7IGZvbGxvd2VyIHdpbGwgUE9TVCB3aXRob3V0IEJlYXJlciBoZWFkZXInKTtcbiAgfVxuXG4gIC8vIFBlci1pbnN0YW5jZSBwcm9tb3Rpb24gbWFuYWdlciDigJQgdHJhY2tzIGl0cyBvd24gYXR0ZW1wdCBjb3VudGVyIHNvXG4gIC8vIG11bHRpcGxlIGZvbGxvd2VycyBkb24ndCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyJ3MgcHJvbW90aW9uIGJ1ZGdldHMuXG4gIGNvbnN0IHByb21vdGlvbk1nciA9IG5ldyBQcm9tb3Rpb25NYW5hZ2VyKG9wdGlvbnMsIGNvbnNvbGVQb3J0LCBzdGFydEFzTGVhZGVyLCBzdGFydEFzRm9sbG93ZXIpO1xuXG4gIC8vIERlY2xhcmUgc2Vzc2lvbkhlYXJ0YmVhdCBiZWZvcmUgdGhlIHNpbmsgc28gdGhlIGNsb3N1cmUgY2FuIGNhcHR1cmUgaXQuXG4gIC8vIEJvdGggYXJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgY2FsbGJhY2sgY291bGQgcG9zc2libHkgZmlyZSAobmVlZHMgNSsgZmFpbGVkIGZsdXNoZXMpLlxuICBsZXQgc2Vzc2lvbkhlYXJ0YmVhdDogU2Vzc2lvbkhlYXJ0YmVhdDtcblxuICAvLyBSZWdpc3RlciBhIGZvcndhcmRpbmcgbG9nIHNpbmsgd2l0aCBsZWFkZXItZGVhdGggY2FsbGJhY2sgKCMxODUwKS5cbiAgY29uc3QgZm9yd2FyZGluZ1NpbmsgPSBuZXcgTGVhZGVyRm9yd2FyZGluZ0xvZ1NpbmsobGVhZGVyVXJsLCBvcHRpb25zLnNlc3Npb25JZCwgYXV0aFRva2VuLCAoKSA9PiB7XG4gICAgcHJvbW90aW9uTWdyLnByb21vdGUoZm9yd2FyZGluZ1NpbmssIHNlc3Npb25IZWFydGJlYXQpXG4gICAgICAuY2F0Y2goZXJyID0+IGxvZ2dlci5lcnJvcignW1VuaWZpZWRDb25zb2xlXSBQcm9tb3Rpb24gY3Jhc2hlZCcsIHsgZXJyb3I6IFN0cmluZyhlcnIpIH0pKTtcbiAgfSk7XG4gIG9wdGlvbnMucmVnaXN0ZXJMb2dTaW5rKGZvcndhcmRpbmdTaW5rKTtcblxuICAvLyBTdGFydCBzZXNzaW9uIGhlYXJ0YmVhdCB0byB0aGUgbGVhZGVyXG4gIHNlc3Npb25IZWFydGJlYXQgPSBuZXcgU2Vzc2lvbkhlYXJ0YmVhdChsZWFkZXJVcmwsIG9wdGlvbnMuc2Vzc2lvbklkLCBwcm9jZXNzLnBpZCwgYXV0aFRva2VuKTtcbiAgYXdhaXQgc2Vzc2lvbkhlYXJ0YmVhdC5zdGFydCgpO1xuXG4gIGxvZ2dlci5pbmZvKCdbVW5pZmllZENvbnNvbGVdIEZvbGxvd2VyIHN0YXJ0ZWQnLCB7XG4gICAgc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCwgcGlkOiBwcm9jZXNzLnBpZCwgcm9sZTogJ2ZvbGxvd2VyJyxcbiAgICBsZWFkZXJTZXNzaW9uOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnNlc3Npb25JZCwgbGVhZGVyUGlkOiBlbGVjdGlvbi5sZWFkZXJJbmZvLnBpZCxcbiAgICBsZWFkZXJQb3J0OiBlbGVjdGlvbi5sZWFkZXJJbmZvLnBvcnQsIGxlYWRlclVybCxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICByb2xlOiAnZm9sbG93ZXInLFxuICAgIGVsZWN0aW9uLFxuICAgIGNsZWFudXA6IGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHNlc3Npb25IZWFydGJlYXQuc3RvcCgpO1xuICAgICAgYXdhaXQgZm9yd2FyZGluZ1NpbmsuY2xvc2UoKTtcbiAgICB9LFxuICB9O1xufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dollhousemcp/mcp-server",
3
- "version": "2.0.27-rc.2",
3
+ "version": "2.0.27-rc.3",
4
4
  "description": "DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/server.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "io.github.DollhouseMCP/mcp-server",
4
4
  "title": "DollhouseMCP",
5
5
  "description": "OSS to create Personas, Skills, Templates, Agents, and Memories to customize your AI experience.",
6
- "version": "2.0.27-rc.2",
6
+ "version": "2.0.27-rc.3",
7
7
  "homepage": "https://dollhousemcp.com",
8
8
  "repository": {
9
9
  "type": "git",
@@ -29,7 +29,7 @@
29
29
  {
30
30
  "registryType": "npm",
31
31
  "identifier": "@dollhousemcp/mcp-server",
32
- "version": "2.0.27-rc.2",
32
+ "version": "2.0.27-rc.3",
33
33
  "transport": {
34
34
  "type": "stdio"
35
35
  }