@dollhousemcp/mcp-server 2.0.23 → 2.0.24

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.
@@ -240,6 +240,8 @@ const MS_PER_MINUTE = 60 * 1000;
240
240
  const VERIFICATION_CODE_TTL_MINUTES = 10;
241
241
  const VERIFICATION_CODE_TTL_MS = VERIFICATION_CODE_TTL_MINUTES * MS_PER_MINUTE;
242
242
  const VERIFICATION_MAX_ATTEMPTS = 5;
243
+ const LICENSE_WORKER_TIMEOUT_MS = 2_000;
244
+ const DEFAULT_LICENSE_WORKER_URL = 'https://dollhousemcp-license-email.mick-eba.workers.dev';
243
245
  /** Generate a cryptographically random 6-digit verification code. */
244
246
  function generateVerificationCode() {
245
247
  return String(randomInt(100000, 999999));
@@ -384,6 +386,36 @@ async function capturePostHogLicenseEvent(licenseData) {
384
386
  });
385
387
  await posthog.shutdown();
386
388
  }
389
+ function buildLicenseWorkerRequestBody(licenseData, verificationCode, distinctId) {
390
+ return JSON.stringify({
391
+ event: 'license_activation',
392
+ distinct_id: distinctId,
393
+ properties: {
394
+ tier: licenseData.tier,
395
+ email: licenseData.email,
396
+ event_type: 'verification',
397
+ verification_code: verificationCode,
398
+ server_version: PACKAGE_VERSION,
399
+ os: platform(),
400
+ },
401
+ });
402
+ }
403
+ async function sendLicenseWorkerVerificationEmail(licenseData, verificationCode, distinctId) {
404
+ const workerUrl = process.env.DOLLHOUSE_LICENSE_WORKER_URL || DEFAULT_LICENSE_WORKER_URL;
405
+ const workerSecret = process.env.DOLLHOUSE_LICENSE_WORKER_SECRET || '';
406
+ const response = await fetch(workerUrl, {
407
+ method: 'POST',
408
+ headers: {
409
+ 'Content-Type': 'application/json',
410
+ ...(workerSecret ? { 'x-posthog-secret': workerSecret } : {}),
411
+ },
412
+ body: buildLicenseWorkerRequestBody(licenseData, verificationCode, distinctId),
413
+ signal: AbortSignal.timeout(LICENSE_WORKER_TIMEOUT_MS),
414
+ });
415
+ if (!response.ok) {
416
+ throw new Error(`Worker returned ${response.status}`);
417
+ }
418
+ }
387
419
  export function createSetupRoutes(opts) {
388
420
  const installer = opts?._runInstallMcp ?? runInstallMcp;
389
421
  const permissionHookInstaller = opts?._installPermissionHook ?? installPermissionHook;
@@ -627,27 +659,7 @@ export function createSetupRoutes(opts) {
627
659
  // PostHog event also fires for analytics, but the email can't wait for
628
660
  // PostHog's event pipeline (1-5 min delay).
629
661
  try {
630
- const workerUrl = process.env.DOLLHOUSE_LICENSE_WORKER_URL || 'https://dollhousemcp-license-email.mick-eba.workers.dev';
631
- const workerSecret = process.env.DOLLHOUSE_LICENSE_WORKER_SECRET || '';
632
- await fetch(workerUrl, {
633
- method: 'POST',
634
- headers: {
635
- 'Content-Type': 'application/json',
636
- ...(workerSecret ? { 'x-posthog-secret': workerSecret } : {}),
637
- },
638
- body: JSON.stringify({
639
- event: 'license_activation',
640
- distinct_id: 'direct-verification',
641
- properties: {
642
- tier: licenseData.tier,
643
- email: licenseData.email,
644
- event_type: 'verification',
645
- verification_code: code,
646
- server_version: PACKAGE_VERSION,
647
- os: platform(),
648
- },
649
- }),
650
- });
662
+ await sendLicenseWorkerVerificationEmail(licenseData, code, 'direct-verification');
651
663
  logger.info(`[Setup] Verification email sent directly via Worker: ${licenseData.email}`);
652
664
  }
653
665
  catch (workerError) {
@@ -772,27 +784,7 @@ export function createSetupRoutes(opts) {
772
784
  await writeLicense(license);
773
785
  // Send verification email directly to Worker for instant delivery
774
786
  try {
775
- const workerUrl = process.env.DOLLHOUSE_LICENSE_WORKER_URL || 'https://dollhousemcp-license-email.mick-eba.workers.dev';
776
- const workerSecret = process.env.DOLLHOUSE_LICENSE_WORKER_SECRET || '';
777
- await fetch(workerUrl, {
778
- method: 'POST',
779
- headers: {
780
- 'Content-Type': 'application/json',
781
- ...(workerSecret ? { 'x-posthog-secret': workerSecret } : {}),
782
- },
783
- body: JSON.stringify({
784
- event: 'license_activation',
785
- distinct_id: 'direct-resend',
786
- properties: {
787
- tier: license.tier,
788
- email: license.email,
789
- event_type: 'verification',
790
- verification_code: code,
791
- server_version: PACKAGE_VERSION,
792
- os: platform(),
793
- },
794
- }),
795
- });
787
+ await sendLicenseWorkerVerificationEmail(license, code, 'direct-resend');
796
788
  logger.info(`[Setup] Verification code resent directly via Worker: ${license.email}`);
797
789
  }
798
790
  catch (workerError) {
@@ -1157,4 +1149,4 @@ function runInstallMcp(client, version) {
1157
1149
  });
1158
1150
  });
1159
1151
  }
1160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBSb3V0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL3JvdXRlcy9zZXR1cFJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUdILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsSUFBSSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxLQUFLLElBQUksU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRS9DLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxxQkFBcUIsRUFBb0MsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV2SSxNQUFNLFdBQVcsR0FBRyx5QkFBeUIsQ0FBQztBQUM5QyxNQUFNLGtCQUFrQixHQUFHLHlCQUF5QixDQUFDO0FBQ3JE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RSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7SUFDckQsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxNQUFjLEVBQUUsT0FBZ0I7SUFDckQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLG9CQUFvQixFQUFFLENBQUM7UUFDbkQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDaEQsTUFBTSxJQUFJLEdBQUc7WUFDWCxHQUFHLFVBQVU7WUFDYiwyQkFBMkIsR0FBRyxFQUFFO1lBQ2hDLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFFBQVEsRUFBRSxjQUFjO1lBQ3hCLE9BQU87U0FDUixDQUFDO1FBRUYsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQy9ELElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDekMsT0FBTztZQUNULENBQUM7WUFDRCxPQUFPLENBQUMsTUFBTSxJQUFJLHlCQUF5QixDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNldHVwIFJvdXRlcyDigJQgQXV0by1pbnN0YWxsIERvbGxob3VzZU1DUCB0byBNQ1AgY2xpZW50c1xuICpcbiAqIFVzZXMgYGluc3RhbGwtbWNwYCAoaHR0cHM6Ly9naXRodWIuY29tL3N1cGVybWVtb3J5YWkvaW5zdGFsbC1tY3ApXG4gKiB0byBpbmplY3Qgc2VydmVyIGNvbmZpZ3VyYXRpb24gaW50byBzdXBwb3J0ZWQgTUNQIGNsaWVudCBjb25maWcgZmlsZXMuXG4gKlxuICogU2VjdXJpdHk6IGxvY2FsaG9zdC1vbmx5IGJpbmRpbmcgKGVuZm9yY2VkIGJ5IHNlcnZlci50cyksIHJhdGUtbGltaXRlZCxcbiAqIGFuZCBjb21tYW5kIGFyZ3VtZW50cyBhcmUgaGFyZGNvZGVkIOKAlCBubyB1c2VyLXN1cHBsaWVkIHNoZWxsIGlucHV0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IGV4ZWNGaWxlIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGFjY2Vzc1N5bmMsIGNvbnN0YW50cyBhcyBmc0NvbnN0YW50cyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgYWNjZXNzLCBjaG1vZCwgbWtkaXIsIHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGpvaW4sIGRpcm5hbWUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IGhvbWVkaXIsIHBsYXRmb3JtIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZVRvbWwgfSBmcm9tICdzbW9sLXRvbWwnO1xuXG5jb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xuY29uc3QgX19kaXJuYW1lID0gZGlybmFtZShfX2ZpbGVuYW1lKTtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFBBQ0tBR0VfVkVSU0lPTiB9IGZyb20gJy4uLy4uL2dlbmVyYXRlZC92ZXJzaW9uLmpzJztcbmltcG9ydCB7IGdldFBlcm1pc3Npb25Ib29rU3RhdHVzQXN5bmMsIGluc3RhbGxQZXJtaXNzaW9uSG9vaywgdHlwZSBJbnN0YWxsUGVybWlzc2lvbkhvb2tSZXN1bHQgfSBmcm9tICcuLi8uLi91dGlscy9wZXJtaXNzaW9uSG9va3MuanMnO1xuXG5jb25zdCBHSVRIVUJfUkVQTyA9ICdEb2xsaG91c2VNQ1AvbWNwLXNlcnZlcic7XG5jb25zdCBNQ1BCX0FTU0VUX1BBVFRFUk4gPSAvXmRvbGxob3VzZW1jcC0uKlxcLm1jcGIkLztcbmltcG9ydCB7IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlciB9IGZyb20gJy4uLy4uL3V0aWxzL1NsaWRpbmdXaW5kb3dSYXRlTGltaXRlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgcmFuZG9tSW50IH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgUG9zdEhvZyB9IGZyb20gJ3Bvc3Rob2ctbm9kZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcblxuZnVuY3Rpb24gaXNNaXNzaW5nUGF0aEVycm9yKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGVycm9yXG4gICAgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0J1xuICAgICYmICdjb2RlJyBpbiBlcnJvclxuICAgICYmIChlcnJvciBhcyB7IGNvZGU/OiBzdHJpbmcgfSkuY29kZSA9PT0gJ0VOT0VOVCcsXG4gICk7XG59XG5cbi8vIFBvc3RIb2cgcHJvamVjdCBjYXB0dXJlIGtleSDigJQgd3JpdGUtb25seSBieSBkZXNpZ24sIHNhZmUgdG8gZXhwb3NlIHB1YmxpY2x5LlxuLy8gVGhpcyBrZXkgY2FuIE9OTFkgc2VuZCBldmVudHMgdG8gUG9zdEhvZzsgaXQgY2Fubm90IHJlYWQgZGF0YSwgcXVlcnkgYW5hbHl0aWNzLFxuLy8gY29uZmlndXJlIGRlc3RpbmF0aW9ucywgb3IgYWNjZXNzIGFueSBvdGhlciBQb3N0SG9nIEFQSS4gU2FtZSBrZXkgdXNlZCBpblxuLy8gc3JjL3RlbGVtZXRyeS9PcGVyYXRpb25hbFRlbGVtZXRyeS50cy4gVmVyaWZpZWQgd3JpdGUtb25seSAyMDI2LTA0LTA3LlxuLy8gQ2FuIGJlIG92ZXJyaWRkZW4gd2l0aCBQT1NUSE9HX0FQSV9LRVkgZW52IHZhciBmb3IgY3VzdG9tIFBvc3RIb2cgaW5zdGFsbGF0aW9ucy5cbmNvbnN0IFBPU1RIT0dfUFJPSkVDVF9LRVkgPSBwcm9jZXNzLmVudi5QT1NUSE9HX0FQSV9LRVkgfHwgJ3BoY194RkpLSUhBcVJYMVlMYTBUU2RUR3dHajE5ZDFKZW9YREtqSk5ZcTQ5MnZxJztcblxuLyoqIFN1cHBvcnRlZCBjbGllbnQgaWRlbnRpZmllcnMgZm9yIG9uZS1jbGljayBzZXR1cC4gKi9cbmNvbnN0IEFMTE9XRURfQ0xJRU5UUyA9IG5ldyBTZXQoW1xuICAnY2xhdWRlJyxcbiAgJ2NsYXVkZS1jb2RlJyxcbiAgJ2N1cnNvcicsXG4gICd2c2NvZGUnLFxuICAnY2xpbmUnLFxuICAncm9vLWNsaW5lJyxcbiAgJ3dpbmRzdXJmJyxcbiAgJ3dpdHN5JyxcbiAgJ2VuY29udm8nLFxuICAnZ2VtaW5pLWNsaScsXG4gICdnb29zZScsXG4gICd6ZWQnLFxuICAnd2FycCcsXG4gICdjb2RleCcsXG4gICdsbXN0dWRpbycsXG5dKTtcblxudHlwZSBDb25maWdQYXRoQ2xpZW50ID1cbiAgfCAnY2xhdWRlJ1xuICB8ICdjbGF1ZGUtY29kZSdcbiAgfCAnY3Vyc29yJ1xuICB8ICd3aW5kc3VyZidcbiAgfCAnY2xpbmUnXG4gIHwgJ2xtc3R1ZGlvJ1xuICB8ICdnZW1pbmktY2xpJ1xuICB8ICdjb2RleCc7XG5cbnR5cGUgU2V0dXBTdXBwb3J0TGV2ZWwgPVxuICB8ICdmdWxsX25hdGl2ZSdcbiAgfCAncGFydGlhbF9uYXRpdmUnXG4gIHwgJ21jcF9vbmx5J1xuICB8ICd1bnN1cHBvcnRlZCc7XG5cbmNvbnN0IFNFVFVQX1NVUFBPUlRfTEVWRUxTOiBSZWNvcmQ8c3RyaW5nLCBTZXR1cFN1cHBvcnRMZXZlbD4gPSB7XG4gICdjbGF1ZGUnOiAndW5zdXBwb3J0ZWQnLFxuICAnY2xhdWRlLWNvZGUnOiAnZnVsbF9uYXRpdmUnLFxuICAnY3Vyc29yJzogJ3BhcnRpYWxfbmF0aXZlJyxcbiAgJ2NsaW5lJzogJ21jcF9vbmx5JyxcbiAgJ3dpbmRzdXJmJzogJ3BhcnRpYWxfbmF0aXZlJyxcbiAgJ2xtc3R1ZGlvJzogJ21jcF9vbmx5JyxcbiAgJ2dlbWluaS1jbGknOiAncGFydGlhbF9uYXRpdmUnLFxuICAnY29kZXgnOiAncGFydGlhbF9uYXRpdmUnLFxufTtcblxuLyoqIEFsbG93ZWQgcmVsZWFzZSBjaGFubmVscyBmb3IgdGhlIGluc3RhbGwgZW5kcG9pbnQuICovXG5jb25zdCBBTExPV0VEX0lOU1RBTExfQ0hBTk5FTFM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KFsnbGF0ZXN0JywgJ2JldGEnLCAncmMnXSk7XG5cbi8qKiBSYXRlIGxpbWl0OiA1IGluc3RhbGxzIHBlciBtaW51dGUgKi9cbmNvbnN0IGluc3RhbGxMaW1pdGVyID0gbmV3IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlcig1LCA2MF8wMDApO1xuXG4vKipcbiAqIEtub3duIGNvbmZpZyBmaWxlIHBhdGhzIHBlciBjbGllbnQuXG4gKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSBwYXRoIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZmlnUGF0aChjbGllbnQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBob21lID0gaG9tZWRpcigpO1xuICBjb25zdCBwbGF0ID0gcGxhdGZvcm0oKTtcblxuICBjb25zdCBwYXRoczogUmVjb3JkPENvbmZpZ1BhdGhDbGllbnQsICgpID0+IHN0cmluZyB8IG51bGw+ID0ge1xuICAgICdjbGF1ZGUnOiAoKSA9PiB7XG4gICAgICBpZiAocGxhdCA9PT0gJ2RhcndpbicpIHJldHVybiBqb2luKGhvbWUsICdMaWJyYXJ5JywgJ0FwcGxpY2F0aW9uIFN1cHBvcnQnLCAnQ2xhdWRlJywgJ2NsYXVkZV9kZXNrdG9wX2NvbmZpZy5qc29uJyk7XG4gICAgICBpZiAocGxhdCA9PT0gJ3dpbjMyJykgcmV0dXJuIGpvaW4ocHJvY2Vzcy5lbnYuQVBQREFUQSB8fCBqb2luKGhvbWUsICdBcHBEYXRhJywgJ1JvYW1pbmcnKSwgJ0NsYXVkZScsICdjbGF1ZGVfZGVza3RvcF9jb25maWcuanNvbicpO1xuICAgICAgcmV0dXJuIGpvaW4oaG9tZSwgJy5jb25maWcnLCAnQ2xhdWRlJywgJ2NsYXVkZV9kZXNrdG9wX2NvbmZpZy5qc29uJyk7XG4gICAgfSxcbiAgICAnY2xhdWRlLWNvZGUnOiAoKSA9PiBqb2luKGhvbWUsICcuY2xhdWRlLmpzb24nKSxcbiAgICAnY3Vyc29yJzogKCkgPT4gam9pbihob21lLCAnLmN1cnNvcicsICdtY3AuanNvbicpLFxuICAgICd3aW5kc3VyZic6ICgpID0+IGpvaW4oaG9tZSwgJy5jb2RlaXVtJywgJ3dpbmRzdXJmJywgJ21jcF9jb25maWcuanNvbicpLFxuICAgICdjbGluZSc6ICgpID0+IHtcbiAgICAgIGlmIChwbGF0ID09PSAnZGFyd2luJykgcmV0dXJuIGpvaW4oaG9tZSwgJ0xpYnJhcnknLCAnQXBwbGljYXRpb24gU3VwcG9ydCcsICdDb2RlJywgJ1VzZXInLCAnZ2xvYmFsU3RvcmFnZScsICdzYW91ZHJpendhbi5jbGF1ZGUtZGV2JywgJ3NldHRpbmdzJywgJ2NsaW5lX21jcF9zZXR0aW5ncy5qc29uJyk7XG4gICAgICBpZiAocGxhdCA9PT0gJ3dpbjMyJykgcmV0dXJuIGpvaW4ocHJvY2Vzcy5lbnYuQVBQREFUQSB8fCBqb2luKGhvbWUsICdBcHBEYXRhJywgJ1JvYW1pbmcnKSwgJ0NvZGUnLCAnVXNlcicsICdnbG9iYWxTdG9yYWdlJywgJ3Nhb3Vkcml6d2FuLmNsYXVkZS1kZXYnLCAnc2V0dGluZ3MnLCAnY2xpbmVfbWNwX3NldHRpbmdzLmpzb24nKTtcbiAgICAgIHJldHVybiBqb2luKGhvbWUsICcuY29uZmlnJywgJ0NvZGUnLCAnVXNlcicsICdnbG9iYWxTdG9yYWdlJywgJ3Nhb3Vkcml6d2FuLmNsYXVkZS1kZXYnLCAnc2V0dGluZ3MnLCAnY2xpbmVfbWNwX3NldHRpbmdzLmpzb24nKTtcbiAgICB9LFxuICAgICdsbXN0dWRpbyc6ICgpID0+IGpvaW4oaG9tZSwgJy5sbXN0dWRpbycsICdtY3AuanNvbicpLFxuICAgICdnZW1pbmktY2xpJzogKCkgPT4gam9pbihob21lLCAnLmdlbWluaScsICdzZXR0aW5ncy5qc29uJyksXG4gICAgJ2NvZGV4JzogKCkgPT4gam9pbihob21lLCAnLmNvZGV4JywgJ2NvbmZpZy50b21sJyksXG4gIH07XG5cbiAgY29uc3QgcmVzb2x2ZXIgPSBwYXRoc1tjbGllbnQgYXMgQ29uZmlnUGF0aENsaWVudF07XG4gIHJldHVybiByZXNvbHZlciA/IHJlc29sdmVyKCkgOiBudWxsO1xufVxuXG4vKipcbiAqIE9wZW4gYSBmaWxlIGluIHRoZSBzeXN0ZW0ncyBkZWZhdWx0IHRleHQgZWRpdG9yLlxuICovXG5mdW5jdGlvbiBvcGVuSW5FZGl0b3IoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcGxhdCA9IHBsYXRmb3JtKCk7XG4gICAgbGV0IGNtZDogc3RyaW5nO1xuICAgIGxldCBhcmdzOiBzdHJpbmdbXTtcblxuICAgIGlmIChwbGF0ID09PSAnZGFyd2luJykge1xuICAgICAgY21kID0gJ29wZW4nO1xuICAgICAgYXJncyA9IFsnLXQnLCBmaWxlUGF0aF07XG4gICAgfSBlbHNlIGlmIChwbGF0ID09PSAnd2luMzInKSB7XG4gICAgICBjbWQgPSAnbm90ZXBhZCc7XG4gICAgICBhcmdzID0gW2ZpbGVQYXRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY21kID0gJ3hkZy1vcGVuJztcbiAgICAgIGFyZ3MgPSBbZmlsZVBhdGhdO1xuICAgIH1cblxuICAgIGV4ZWNGaWxlKGNtZCwgYXJncywgeyB0aW1lb3V0OiAxMF8wMDAgfSwgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDb3VsZCBub3Qgb3BlbiBlZGl0b3I6ICR7ZXJyLm1lc3NhZ2V9YCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKCdPcGVuZWQgaW4gZWRpdG9yLicpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqIENsaWVudHMgd2hvc2UgY29uZmlnIGZpbGVzIHdlIGNhbiBsb2NhdGUgYW5kIG9wZW4gKi9cbmNvbnN0IE9QRU5BQkxFX0NMSUVOVFMgPSBuZXcgU2V0KFtcbiAgJ2NsYXVkZScsICdjbGF1ZGUtY29kZScsICdjdXJzb3InLCAnY2xpbmUnLCAnd2luZHN1cmYnLCAnbG1zdHVkaW8nLCAnZ2VtaW5pLWNsaScsICdjb2RleCcsXG5dKTtcblxuLyoqXG4gKiBDcmVhdGUgc2V0dXAgaGFuZGxlcnMgKEV4cHJlc3MgNSBjb21wYXRpYmxlIOKAlCBwbGFpbiBoYW5kbGVyIGZ1bmN0aW9ucywgbm90IFJvdXRlcikuXG4gKi9cbmludGVyZmFjZSBEZXRlY3RSZXN1bHQge1xuICBpbnN0YWxsZWQ6IGJvb2xlYW47XG4gIGNvbmZpZ1BhdGg6IHN0cmluZyB8IG51bGw7XG4gIGN1cnJlbnRDb25maWc/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgc2VydmVyS2V5Pzogc3RyaW5nO1xufVxuXG4vKiogUGFyc2UgYSBUT01MIGNvbmZpZyBmaWxlIGZvciBhIERvbGxob3VzZU1DUCBzZXJ2ZXIgZW50cnkgKi9cbmZ1bmN0aW9uIHBhcnNlVG9tbENvbmZpZyhyYXc6IHN0cmluZyk6IE9taXQ8RGV0ZWN0UmVzdWx0LCAnY29uZmlnUGF0aCc+IHtcbiAgaWYgKCFyYXcudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZG9sbGhvdXNlbWNwJykpIHtcbiAgICByZXR1cm4geyBpbnN0YWxsZWQ6IGZhbHNlIH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlVG9tbChyYXcpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IG1jcFNlcnZlcnMgPSBwYXJzZWQubWNwX3NlcnZlcnM7XG4gICAgaWYgKCFtY3BTZXJ2ZXJzIHx8IHR5cGVvZiBtY3BTZXJ2ZXJzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG1jcFNlcnZlcnMpKSB7XG4gICAgICByZXR1cm4geyBpbnN0YWxsZWQ6IHRydWUsIGN1cnJlbnRDb25maWc6IHt9LCBzZXJ2ZXJLZXk6ICdtY3Bfc2VydmVycycgfTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaGluZ0VudHJ5ID0gT2JqZWN0LmVudHJpZXMobWNwU2VydmVycykuZmluZCgoW2tleV0pID0+XG4gICAgICBrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZG9sbGhvdXNlbWNwJykpO1xuICAgIGlmICghbWF0Y2hpbmdFbnRyeSkge1xuICAgICAgcmV0dXJuIHsgaW5zdGFsbGVkOiB0cnVlLCBjdXJyZW50Q29uZmlnOiB7fSwgc2VydmVyS2V5OiAnbWNwX3NlcnZlcnMnIH07XG4gICAgfVxuXG4gICAgY29uc3QgW3NlcnZlck5hbWUsIHNlcnZlckNvbmZpZ10gPSBtYXRjaGluZ0VudHJ5O1xuICAgIGNvbnN0IHRvbWxDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBzZXJ2ZXJOYW1lIH07XG4gICAgaWYgKHNlcnZlckNvbmZpZyAmJiB0eXBlb2Ygc2VydmVyQ29uZmlnID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzZXJ2ZXJDb25maWcpKSB7XG4gICAgICBjb25zdCB7IGNvbW1hbmQsIGFyZ3MgfSA9IHNlcnZlckNvbmZpZyBhcyB7IGNvbW1hbmQ/OiB1bmtub3duOyBhcmdzPzogdW5rbm93biB9O1xuICAgICAgaWYgKHR5cGVvZiBjb21tYW5kID09PSAnc3RyaW5nJykgdG9tbENvbmZpZy5jb21tYW5kID0gY29tbWFuZDtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3MpKSB0b21sQ29uZmlnLmFyZ3MgPSBhcmdzO1xuICAgIH1cblxuICAgIHJldHVybiB7IGluc3RhbGxlZDogdHJ1ZSwgY3VycmVudENvbmZpZzogdG9tbENvbmZpZywgc2VydmVyS2V5OiAnbWNwX3NlcnZlcnMnIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IGluc3RhbGxlZDogdHJ1ZSwgY3VycmVudENvbmZpZzoge30sIHNlcnZlcktleTogJ21jcF9zZXJ2ZXJzJyB9O1xuICB9XG59XG5cbi8qKiBQYXJzZSBhIEpTT04gY29uZmlnIGZpbGUgZm9yIGEgRG9sbGhvdXNlTUNQIHNlcnZlciBlbnRyeSAqL1xuZnVuY3Rpb24gcGFyc2VKc29uQ29uZmlnKHJhdzogc3RyaW5nKTogT21pdDxEZXRlY3RSZXN1bHQsICdjb25maWdQYXRoJz4ge1xuICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gIGZvciAoY29uc3Qga2V5IG9mIFsnbWNwU2VydmVycycsICdzZXJ2ZXJzJ10pIHtcbiAgICBpZiAocGFyc2VkW2tleV0/LmRvbGxob3VzZW1jcCkge1xuICAgICAgcmV0dXJuIHsgaW5zdGFsbGVkOiB0cnVlLCBjdXJyZW50Q29uZmlnOiBwYXJzZWRba2V5XS5kb2xsaG91c2VtY3AsIHNlcnZlcktleToga2V5IH07XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGluc3RhbGxlZDogZmFsc2UgfTtcbn1cblxuLyoqIENoZWNrIGEgc2luZ2xlIGNsaWVudCBjb25maWcgZmlsZSBmb3IgYW4gZXhpc3RpbmcgRG9sbGhvdXNlTUNQIGVudHJ5ICovXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RDbGllbnQoY2xpZW50OiBzdHJpbmcpOiBQcm9taXNlPERldGVjdFJlc3VsdCB8IG51bGw+IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IGdldENvbmZpZ1BhdGgoY2xpZW50KTtcbiAgaWYgKCFjb25maWdQYXRoKSByZXR1cm4gbnVsbDtcblxuICB0cnkge1xuICAgIGF3YWl0IGFjY2Vzcyhjb25maWdQYXRoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgaW5zdGFsbGVkOiBmYWxzZSwgY29uZmlnUGF0aCB9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCByZWFkRmlsZShjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCByZXN1bHQgPSBjb25maWdQYXRoLmVuZHNXaXRoKCcudG9tbCcpID8gcGFyc2VUb21sQ29uZmlnKHJhdykgOiBwYXJzZUpzb25Db25maWcocmF3KTtcbiAgICByZXR1cm4geyBjb25maWdQYXRoLCAuLi5yZXN1bHQgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgaW5zdGFsbGVkOiBmYWxzZSwgY29uZmlnUGF0aCB9O1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW5kIG5vcm1hbGl6ZSBhIGNsaWVudCBuYW1lIGZyb20gcmVxdWVzdCBib2R5LlxuICogUmV0dXJucyB0aGUgbm9ybWFsaXplZCBjbGllbnQgbmFtZSBvciBudWxsICh3aXRoIGVycm9yIHJlc3BvbnNlIHNlbnQpLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNsaWVudChcbiAgcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBhbGxvd2VkU2V0OiBTZXQ8c3RyaW5nPixcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB7IGNsaWVudCB9ID0gcmVxLmJvZHkgYXMgeyBjbGllbnQ/OiBzdHJpbmcgfTtcbiAgaWYgKCFjbGllbnQgfHwgdHlwZW9mIGNsaWVudCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnTWlzc2luZyByZXF1aXJlZCBmaWVsZDogY2xpZW50JyB9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoY2xpZW50KS5ub3JtYWxpemVkQ29udGVudC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgaWYgKCFhbGxvd2VkU2V0Lmhhcyhub3JtYWxpemVkKSkge1xuICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHtcbiAgICAgIGVycm9yOiBgVW5zdXBwb3J0ZWQgY2xpZW50OiAke2NsaWVudH1gLFxuICAgICAgc3VwcG9ydGVkOiBBcnJheS5mcm9tKGFsbG93ZWRTZXQpLFxuICAgIH0pO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlUmVxdWVzdGVkSW5zdGFsbFZlcnNpb24oYm9keTogdW5rbm93bik6IHsgZWZmZWN0aXZlVmVyc2lvbj86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfSB7XG4gIGNvbnN0IHsgdmVyc2lvbiwgY2hhbm5lbCB9ID0gKGJvZHkgPz8ge30pIGFzIHsgdmVyc2lvbj86IHN0cmluZzsgY2hhbm5lbD86IHN0cmluZyB9O1xuICBjb25zdCBub3JtYWxpemVkVmVyc2lvbiA9IHZlcnNpb24gPyBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh2ZXJzaW9uKS5ub3JtYWxpemVkQ29udGVudCA6IHVuZGVmaW5lZDtcbiAgaWYgKG5vcm1hbGl6ZWRWZXJzaW9uICYmICEvXlxcZCtcXC5cXGQrXFwuXFxkKy8udGVzdChub3JtYWxpemVkVmVyc2lvbikpIHtcbiAgICByZXR1cm4geyBlcnJvcjogJ0ludmFsaWQgdmVyc2lvbiBmb3JtYXQuIEV4cGVjdGVkIHNlbXZlciAoZS5nLiwgMi4wLjIpJyB9O1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZENoYW5uZWwgPSBjaGFubmVsID8gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoY2hhbm5lbCkubm9ybWFsaXplZENvbnRlbnQgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGVmZmVjdGl2ZVZlcnNpb24gPSBub3JtYWxpemVkQ2hhbm5lbCAmJiBBTExPV0VEX0lOU1RBTExfQ0hBTk5FTFMuaGFzKG5vcm1hbGl6ZWRDaGFubmVsKSAmJiBub3JtYWxpemVkQ2hhbm5lbCAhPT0gJ2xhdGVzdCdcbiAgICA/IG5vcm1hbGl6ZWRDaGFubmVsXG4gICAgOiBub3JtYWxpemVkVmVyc2lvbjtcblxuICByZXR1cm4geyBlZmZlY3RpdmVWZXJzaW9uIH07XG59XG5cbmZ1bmN0aW9uIHRvTnZtTWl0aWdhdGlvbkFwcGxpZWQocmVzdWx0OiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGFwcGx5TnZtTGF1bmNoZXJJZk5lZWRlZD4+KTogYm9vbGVhbiB8IG51bGwge1xuICBpZiAocmVzdWx0ID09PSAnYXBwbGllZCcpIHJldHVybiB0cnVlO1xuICBpZiAocmVzdWx0ID09PSAnZmFpbGVkJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gbnVsbDtcbn1cblxuLy8g4pSA4pSAIExpY2Vuc2UgdmVyaWZpY2F0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5jb25zdCBNU19QRVJfTUlOVVRFID0gNjAgKiAxMDAwO1xuY29uc3QgVkVSSUZJQ0FUSU9OX0NPREVfVFRMX01JTlVURVMgPSAxMDtcbmNvbnN0IFZFUklGSUNBVElPTl9DT0RFX1RUTF9NUyA9IFZFUklGSUNBVElPTl9DT0RFX1RUTF9NSU5VVEVTICogTVNfUEVSX01JTlVURTtcbmNvbnN0IFZFUklGSUNBVElPTl9NQVhfQVRURU1QVFMgPSA1O1xuXG4vKiogR2VuZXJhdGUgYSBjcnlwdG9ncmFwaGljYWxseSByYW5kb20gNi1kaWdpdCB2ZXJpZmljYXRpb24gY29kZS4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlVmVyaWZpY2F0aW9uQ29kZSgpOiBzdHJpbmcge1xuICByZXR1cm4gU3RyaW5nKHJhbmRvbUludCgxMDAwMDAsIDk5OTk5OSkpO1xufVxuXG4vKiogQ2hlY2sgaWYgYSB2ZXJpZmljYXRpb24gY29kZSBoYXMgZXhwaXJlZC4gKi9cbmZ1bmN0aW9uIGlzQ29kZUV4cGlyZWQoZXhwaXJlc0F0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIG5ldyBEYXRlKGV4cGlyZXNBdCkuZ2V0VGltZSgpIDwgRGF0ZS5ub3coKTtcbn1cblxuLy8g4pSA4pSAIExpY2Vuc2UgaGVscGVycyAobW9kdWxlIHNjb3BlIGZvciBTb25hckNsb3VkIFM3NzIxKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuY29uc3QgVkFMSURfTElDRU5TRV9USUVSUyA9IG5ldyBTZXQoWydhZ3BsJywgJ2ZyZWUtY29tbWVyY2lhbCcsICdwYWlkLWNvbW1lcmNpYWwnXSk7XG5jb25zdCBWQUxJRF9SRVZFTlVFX1NDQUxFUyA9IG5ldyBTZXQoWyckMU3igJMkNU0nLCAnJDVN4oCTJDI1TScsICckMjVN4oCTJDEwME0nLCAnJDEwME0rJ10pO1xuLy8gU2FmZSBmcm9tIFJlRG9TOiBpbnB1dCBpcyBwcmUtY2hlY2tlZCB0byDiiaQyNTQgY2hhcnMsIGFuZCB7MSw2NH0vezEsMjUzfS97Miw2M31cbi8vIGJvdW5kcyBwcmV2ZW50IGNhdGFzdHJvcGhpYyBiYWNrdHJhY2tpbmcgb24gYW55IGlucHV0IHdpdGhpbiB0aGF0IGxlbmd0aC5cbmNvbnN0IEVNQUlMX1BBVFRFUk4gPSAvXlteXFxzQF17MSw2NH1AW15cXHNAXXsxLDI1M31cXC5bXlxcc0BdezIsNjN9JC87XG5cbi8qKiBTYW5pdGl6ZSBhIHN0cmluZyBmaWVsZDogdHJpbSwgdHJ1bmNhdGUsIHJldHVybiB1bmRlZmluZWQgaWYgZW1wdHkuICovXG5mdW5jdGlvbiBzYW5pdGl6ZSh2YWw6IHVua25vd24sIG1heExlbjogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnIHx8ICF2YWwudHJpbSgpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdmFsLnRyaW0oKS5zbGljZSgwLCBtYXhMZW4pO1xufVxuXG4vKiogVmFsaWRhdGUgZW1haWwgZm9ybWF0IGFuZCBjb21tZXJjaWFsIGFja25vd2xlZGdtZW50cy4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29tbWVyY2lhbEZpZWxkcyhib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB7IGVtYWlsLCB0ZWxlbWV0cnlBY2tub3dsZWRnZWQgfSA9IGJvZHk7XG4gIGlmICghZW1haWwgfHwgdHlwZW9mIGVtYWlsICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiAnRW1haWwgYWRkcmVzcyBpcyByZXF1aXJlZCBmb3IgQ29tbWVyY2lhbCBhbmQgRW50ZXJwcmlzZSBsaWNlbnNlcyc7XG4gIH1cbiAgaWYgKGVtYWlsLmxlbmd0aCA+IDI1NCB8fCAhRU1BSUxfUEFUVEVSTi50ZXN0KGVtYWlsKSkge1xuICAgIHJldHVybiAnUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBlbWFpbCBhZGRyZXNzJztcbiAgfVxuICBpZiAoIXRlbGVtZXRyeUFja25vd2xlZGdlZCkge1xuICAgIHJldHVybiAnVGVsZW1ldHJ5IGFja25vd2xlZGdtZW50IGlzIHJlcXVpcmVkIGZvciBDb21tZXJjaWFsIGFuZCBFbnRlcnByaXNlIGxpY2Vuc2VzJztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIFZhbGlkYXRlIGZyZWUtY29tbWVyY2lhbCBzcGVjaWZpYyBmaWVsZHMuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZyZWVDb21tZXJjaWFsRmllbGRzKGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHsgYXR0cmlidXRpb25BY2tub3dsZWRnZWQsIHJldmVudWVBdHRlc3RlZCB9ID0gYm9keTtcbiAgaWYgKCFhdHRyaWJ1dGlvbkFja25vd2xlZGdlZCkge1xuICAgIHJldHVybiAnQXR0cmlidXRpb24gYWNrbm93bGVkZ21lbnQgaXMgcmVxdWlyZWQgZm9yIENvbW1lcmNpYWwgbGljZW5zZXMnO1xuICB9XG4gIGlmICghcmV2ZW51ZUF0dGVzdGVkKSB7XG4gICAgcmV0dXJuICdSZXZlbnVlIGF0dGVzdGF0aW9uIGlzIHJlcXVpcmVkIGZvciBDb21tZXJjaWFsIGxpY2Vuc2VzJztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIFZhbGlkYXRlIGVudGVycHJpc2Ugc3BlY2lmaWMgZmllbGRzLiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFbnRlcnByaXNlRmllbGRzKGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHsgcmV2ZW51ZVNjYWxlLCBjb21wYW55TmFtZSwgdXNlQ2FzZSB9ID0gYm9keTtcbiAgaWYgKCFyZXZlbnVlU2NhbGUgfHwgIVZBTElEX1JFVkVOVUVfU0NBTEVTLmhhcyhyZXZlbnVlU2NhbGUgYXMgc3RyaW5nKSkge1xuICAgIHJldHVybiBgUmV2ZW51ZSBzY2FsZSBpcyByZXF1aXJlZC4gTXVzdCBiZSBvbmUgb2Y6ICR7Wy4uLlZBTElEX1JFVkVOVUVfU0NBTEVTXS5qb2luKCcsICcpfWA7XG4gIH1cbiAgaWYgKCFjb21wYW55TmFtZSB8fCB0eXBlb2YgY29tcGFueU5hbWUgIT09ICdzdHJpbmcnIHx8ICFjb21wYW55TmFtZS50cmltKCkpIHtcbiAgICByZXR1cm4gJ0NvbXBhbnkgbmFtZSBpcyByZXF1aXJlZCBmb3IgRW50ZXJwcmlzZSBsaWNlbnNlcyc7XG4gIH1cbiAgaWYgKCF1c2VDYXNlIHx8IHR5cGVvZiB1c2VDYXNlICE9PSAnc3RyaW5nJyB8fCAhdXNlQ2FzZS50cmltKCkpIHtcbiAgICByZXR1cm4gJ1VzZSBjYXNlIGlzIHJlcXVpcmVkIGZvciBFbnRlcnByaXNlIGxpY2Vuc2VzJztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIFZhbGlkYXRlIGxpY2Vuc2UgZm9ybSBpbnB1dC4gUmV0dXJucyBlcnJvciBzdHJpbmcgb3IgbnVsbCBpZiB2YWxpZC4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTGljZW5zZUlucHV0KGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHsgdGllciB9ID0gYm9keTtcbiAgaWYgKCF0aWVyIHx8ICFWQUxJRF9MSUNFTlNFX1RJRVJTLmhhcyh0aWVyIGFzIHN0cmluZykpIHtcbiAgICByZXR1cm4gYEludmFsaWQgbGljZW5zZSB0aWVyLiBNdXN0IGJlIG9uZSBvZjogJHtbLi4uVkFMSURfTElDRU5TRV9USUVSU10uam9pbignLCAnKX1gO1xuICB9XG4gIGlmICh0aWVyICE9PSAnYWdwbCcpIHtcbiAgICBjb25zdCBjb21tZXJjaWFsRXJyb3IgPSB2YWxpZGF0ZUNvbW1lcmNpYWxGaWVsZHMoYm9keSk7XG4gICAgaWYgKGNvbW1lcmNpYWxFcnJvcikgcmV0dXJuIGNvbW1lcmNpYWxFcnJvcjtcbiAgfVxuICBpZiAodGllciA9PT0gJ2ZyZWUtY29tbWVyY2lhbCcpIHtcbiAgICBjb25zdCBmcmVlRXJyb3IgPSB2YWxpZGF0ZUZyZWVDb21tZXJjaWFsRmllbGRzKGJvZHkpO1xuICAgIGlmIChmcmVlRXJyb3IpIHJldHVybiBmcmVlRXJyb3I7XG4gIH1cbiAgaWYgKHRpZXIgPT09ICdwYWlkLWNvbW1lcmNpYWwnKSB7XG4gICAgY29uc3QgZW50ZXJwcmlzZUVycm9yID0gdmFsaWRhdGVFbnRlcnByaXNlRmllbGRzKGJvZHkpO1xuICAgIGlmIChlbnRlcnByaXNlRXJyb3IpIHJldHVybiBlbnRlcnByaXNlRXJyb3I7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBCdWlsZCBsaWNlbnNlIGRhdGEgb2JqZWN0IGZyb20gdmFsaWRhdGVkIGlucHV0LiAqL1xuZnVuY3Rpb24gYnVpbGRMaWNlbnNlRGF0YShib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgeyB0aWVyLCBlbWFpbCwgcmV2ZW51ZVNjYWxlLCBjb21wYW55TmFtZSwgdXNlQ2FzZSB9ID0gYm9keTtcbiAgY29uc3QgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IHRpZXIgfTtcbiAgaWYgKHRpZXIgIT09ICdhZ3BsJykge1xuICAgIGRhdGEuZW1haWwgPSBzYW5pdGl6ZShlbWFpbCwgMjU0KTtcbiAgICBkYXRhLmF0dGVzdGVkQXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgZGF0YS50ZWxlbWV0cnlSZXF1aXJlZCA9IHRydWU7XG4gIH1cbiAgaWYgKHRpZXIgPT09ICdwYWlkLWNvbW1lcmNpYWwnKSB7XG4gICAgaWYgKHJldmVudWVTY2FsZSkgZGF0YS5yZXZlbnVlU2NhbGUgPSByZXZlbnVlU2NhbGU7XG4gICAgaWYgKGNvbXBhbnlOYW1lKSBkYXRhLmNvbXBhbnlOYW1lID0gc2FuaXRpemUoY29tcGFueU5hbWUsIDIwMCk7XG4gICAgaWYgKHVzZUNhc2UpIGRhdGEudXNlQ2FzZSA9IHNhbml0aXplKHVzZUNhc2UsIDUwMCk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKiBTZW5kIGxpY2Vuc2VfYWN0aXZhdGlvbiBldmVudCB0byBQb3N0SG9nIGZvciBjb21tZXJjaWFsIHRpZXJzLiAqL1xuYXN5bmMgZnVuY3Rpb24gY2FwdHVyZVBvc3RIb2dMaWNlbnNlRXZlbnQobGljZW5zZURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBvc3Rob2cgPSBuZXcgUG9zdEhvZyhQT1NUSE9HX1BST0pFQ1RfS0VZLCB7XG4gICAgaG9zdDogcHJvY2Vzcy5lbnYuUE9TVEhPR19IT1NUIHx8ICdodHRwczovL2FwcC5wb3N0aG9nLmNvbScsXG4gICAgZmx1c2hBdDogMSxcbiAgICBmbHVzaEludGVydmFsOiA1MDAwLFxuICB9KTtcbiAgbGV0IGluc3RhbGxJZDogc3RyaW5nO1xuICB0cnkge1xuICAgIGNvbnN0IGlkUGF0aCA9IGpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICcudGVsZW1ldHJ5LWlkJyk7XG4gICAgaW5zdGFsbElkID0gKGF3YWl0IHJlYWRGaWxlKGlkUGF0aCwgJ3V0Zi04JykpLnRyaW0oKTtcbiAgfSBjYXRjaCB7XG4gICAgaW5zdGFsbElkID0gdXVpZHY0KCk7XG4gIH1cbiAgY29uc3QgZXZlbnRUeXBlID0gKGxpY2Vuc2VEYXRhLmV2ZW50VHlwZSBhcyBzdHJpbmcpID8/ICdhY3RpdmF0aW9uJztcbiAgcG9zdGhvZy5jYXB0dXJlKHtcbiAgICBkaXN0aW5jdElkOiBpbnN0YWxsSWQsXG4gICAgZXZlbnQ6ICdsaWNlbnNlX2FjdGl2YXRpb24nLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHRpZXI6IGxpY2Vuc2VEYXRhLnRpZXIsXG4gICAgICBlbWFpbDogbGljZW5zZURhdGEuZW1haWwsXG4gICAgICBldmVudF90eXBlOiBldmVudFR5cGUsXG4gICAgICBzZXJ2ZXJfdmVyc2lvbjogUEFDS0FHRV9WRVJTSU9OLFxuICAgICAgb3M6IHBsYXRmb3JtKCksXG4gICAgICAuLi4oZXZlbnRUeXBlID09PSAndmVyaWZpY2F0aW9uJyA/IHtcbiAgICAgICAgdmVyaWZpY2F0aW9uX2NvZGU6IGxpY2Vuc2VEYXRhLnZlcmlmaWNhdGlvbkNvZGUsXG4gICAgICB9IDoge30pLFxuICAgICAgLi4uKGV2ZW50VHlwZSA9PT0gJ2FjdGl2YXRpb24nID8ge1xuICAgICAgICB2ZXJpZmljYXRpb25fdGltZV9tczogbGljZW5zZURhdGEudmVyaWZpY2F0aW9uX3RpbWVfbXMsXG4gICAgICAgIHZlcmlmaWNhdGlvbl90aW1lX3NlY29uZHM6IGxpY2Vuc2VEYXRhLnZlcmlmaWNhdGlvbl90aW1lX21zXG4gICAgICAgICAgPyBNYXRoLnJvdW5kKChsaWNlbnNlRGF0YS52ZXJpZmljYXRpb25fdGltZV9tcyBhcyBudW1iZXIpIC8gMTAwMCkgOiB1bmRlZmluZWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9hdHRlbXB0czogbGljZW5zZURhdGEudmVyaWZpY2F0aW9uX2F0dGVtcHRzLFxuICAgICAgfSA6IHt9KSxcbiAgICAgIC4uLihsaWNlbnNlRGF0YS50aWVyID09PSAncGFpZC1jb21tZXJjaWFsJyA/IHtcbiAgICAgICAgcmV2ZW51ZV9zY2FsZTogbGljZW5zZURhdGEucmV2ZW51ZVNjYWxlLFxuICAgICAgICBjb21wYW55X25hbWU6IGxpY2Vuc2VEYXRhLmNvbXBhbnlOYW1lLFxuICAgICAgICB1c2VfY2FzZTogbGljZW5zZURhdGEudXNlQ2FzZSxcbiAgICAgIH0gOiB7fSksXG4gICAgfSxcbiAgfSk7XG4gIGF3YWl0IHBvc3Rob2cuc2h1dGRvd24oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNldHVwUm91dGVzKG9wdHM/OiB7XG4gIC8qKiBPdmVycmlkZSBpbnN0YWxsLW1jcCBydW5uZXIuIEZvciB0ZXN0aW5nIG9ubHkg4oCUIHByZWZpeCBzaWduYWxzIHRlc3Qtb25seSB1c2UuICovXG4gIF9ydW5JbnN0YWxsTWNwPzogKGNsaWVudDogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG4gIC8qKiBPdmVycmlkZSBwZXJtaXNzaW9uIGhvb2sgaW5zdGFsbGVyLiBGb3IgdGVzdGluZyBvbmx5LiAqL1xuICBfaW5zdGFsbFBlcm1pc3Npb25Ib29rPzogKGNsaWVudDogc3RyaW5nKSA9PiBQcm9taXNlPEluc3RhbGxQZXJtaXNzaW9uSG9va1Jlc3VsdD47XG4gIC8qKiBTa2lwIHRoZSBzbGlkaW5nLXdpbmRvdyByYXRlIGxpbWl0ZXIuIEZvciB0ZXN0aW5nIG9ubHkuICovXG4gIF9za2lwUmF0ZUxpbWl0PzogYm9vbGVhbjtcbn0pOiB7XG4gIGluc3RhbGxIYW5kbGVyOiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBvcGVuQ29uZmlnSGFuZGxlcjogKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgdmVyc2lvbkhhbmRsZXI6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD47XG4gIG1jcGJSZWRpcmVjdEhhbmRsZXI6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD47XG4gIGRldGVjdEhhbmRsZXI6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD47XG4gIGdldExpY2Vuc2VIYW5kbGVyOiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBzZXRMaWNlbnNlSGFuZGxlcjogKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgdmVyaWZ5TGljZW5zZUhhbmRsZXI6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD47XG4gIHJlc2VuZFZlcmlmaWNhdGlvbkhhbmRsZXI6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD47XG59IHtcbiAgY29uc3QgaW5zdGFsbGVyID0gb3B0cz8uX3J1bkluc3RhbGxNY3AgPz8gcnVuSW5zdGFsbE1jcDtcbiAgY29uc3QgcGVybWlzc2lvbkhvb2tJbnN0YWxsZXIgPSBvcHRzPy5faW5zdGFsbFBlcm1pc3Npb25Ib29rID8/IGluc3RhbGxQZXJtaXNzaW9uSG9vaztcbiAgY29uc3Qgc2tpcFJhdGVMaW1pdCA9IG9wdHM/Ll9za2lwUmF0ZUxpbWl0ID8/IGZhbHNlO1xuICAvLyDilIDilIAgRGV0ZWN0IGV4aXN0aW5nIGluc3RhbGxhdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGNvbnN0IGRldGVjdEhhbmRsZXIgPSBhc3luYyAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IGNsaWVudHMgPSBbXG4gICAgICB7IGlkOiAnY2xhdWRlJywgbmFtZTogJ0NsYXVkZSBEZXNrdG9wJyB9LFxuICAgICAgeyBpZDogJ2NsYXVkZS1jb2RlJywgbmFtZTogJ0NsYXVkZSBDb2RlJyB9LFxuICAgICAgeyBpZDogJ2N1cnNvcicsIG5hbWU6ICdDdXJzb3InIH0sXG4gICAgICB7IGlkOiAnY2xpbmUnLCBuYW1lOiAnQ2xpbmUnIH0sXG4gICAgICB7IGlkOiAnd2luZHN1cmYnLCBuYW1lOiAnV2luZHN1cmYnIH0sXG4gICAgICB7IGlkOiAnbG1zdHVkaW8nLCBuYW1lOiAnTE0gU3R1ZGlvJyB9LFxuICAgICAgeyBpZDogJ2dlbWluaS1jbGknLCBuYW1lOiAnR2VtaW5pIENMSScgfSxcbiAgICAgIHsgaWQ6ICdjb2RleCcsIG5hbWU6ICdDb2RleCcgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgcmVzdWx0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRzLm1hcChhc3luYyAoeyBpZCwgbmFtZSB9KSA9PiB7XG4gICAgICBjb25zdCBkZXRlY3Rpb24gPSBhd2FpdCBkZXRlY3RDbGllbnQoaWQpO1xuICAgICAgaWYgKGRldGVjdGlvbikge1xuICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgc3VwcG9ydDogeyBsZXZlbDogU0VUVVBfU1VQUE9SVF9MRVZFTFNbaWRdIH0sXG4gICAgICAgICAgLi4uZGV0ZWN0aW9uLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaWQgPT09ICdjbGF1ZGUtY29kZScgfHwgaWQgPT09ICdjdXJzb3InIHx8IGlkID09PSAnd2luZHN1cmYnIHx8IGlkID09PSAnZ2VtaW5pLWNsaScgfHwgaWQgPT09ICdjb2RleCcpIHtcbiAgICAgICAgICBjb25zdCBob29rU3RhdHVzID0gYXdhaXQgZ2V0UGVybWlzc2lvbkhvb2tTdGF0dXNBc3luYyh1bmRlZmluZWQsIGlkKTtcbiAgICAgICAgICByZXN1bHQuaG9va0luc3RhbGxlZCA9IGhvb2tTdGF0dXMuaW5zdGFsbGVkO1xuICAgICAgICAgIHJlc3VsdC5ob29rQXNzZXRzUHJlcGFyZWQgPSBob29rU3RhdHVzLmFzc2V0c1ByZXBhcmVkO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdHNbaWRdID0gcmVzdWx0O1xuICAgICAgfVxuICAgIH0pKTtcblxuICAgIHJlcy5qc29uKHJlc3VsdHMpO1xuICB9O1xuXG4gIC8vIOKUgOKUgCBPcGVuIGNvbmZpZyBmaWxlIGluIGVkaXRvciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgY29uc3Qgb3BlbkNvbmZpZ0hhbmRsZXIgPSBhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZENsaWVudCA9IHZhbGlkYXRlQ2xpZW50KHJlcSwgcmVzLCBPUEVOQUJMRV9DTElFTlRTKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRDbGllbnQpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBnZXRDb25maWdQYXRoKG5vcm1hbGl6ZWRDbGllbnQpO1xuICAgIGlmICghY29uZmlnUGF0aCkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogYENvbmZpZyBwYXRoIHVua25vd24gZm9yOiAke25vcm1hbGl6ZWRDbGllbnR9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIGZpbGUgd2l0aCBlbXB0eSBjb250ZW50IGlmIGl0IGRvZXNuJ3QgZXhpc3QgeWV0XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFjY2Vzcyhjb25maWdQYXRoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUoY29uZmlnUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBjb25zdCBjb250ZW50ID0gY29uZmlnUGF0aC5lbmRzV2l0aCgnLnRvbWwnKSA/ICcnIDogJ3t9JztcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGNvbmZpZ1BhdGgsIGNvbnRlbnQgKyAnXFxuJywgJ3V0Zi04Jyk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBbU2V0dXBdIENyZWF0ZWQgZW1wdHkgY29uZmlnOiAke2NvbmZpZ1BhdGh9YCk7XG4gICAgICB9IGNhdGNoIChta0Vycikge1xuICAgICAgICBjb25zdCBtc2cgPSBta0VyciBpbnN0YW5jZW9mIEVycm9yID8gbWtFcnIubWVzc2FnZSA6IFN0cmluZyhta0Vycik7XG4gICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IGBDb3VsZCBub3QgY3JlYXRlIGNvbmZpZyBmaWxlOiAke21zZ31gIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gT3BlbmluZyBjb25maWcgZm9yICR7bm9ybWFsaXplZENsaWVudH06ICR7Y29uZmlnUGF0aH1gKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBvcGVuSW5FZGl0b3IoY29uZmlnUGF0aCk7XG4gICAgICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIHBhdGg6IGNvbmZpZ1BhdGggfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IG1lc3NhZ2UsIHBhdGg6IGNvbmZpZ1BhdGggfSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIOKUgOKUgCBBdXRvLWluc3RhbGwgdmlhIGluc3RhbGwtbWNwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBjb25zdCBpbnN0YWxsSGFuZGxlciA9IGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoIXNraXBSYXRlTGltaXQgJiYgIWluc3RhbGxMaW1pdGVyLnRyeUFjcXVpcmUoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MjkpLmpzb24oeyBlcnJvcjogJ1RvbyBtYW55IGluc3RhbGwgcmVxdWVzdHMuIFRyeSBhZ2FpbiBpbiBhIG1pbnV0ZS4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRDbGllbnQgPSB2YWxpZGF0ZUNsaWVudChyZXEsIHJlcywgQUxMT1dFRF9DTElFTlRTKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRDbGllbnQpIHJldHVybjtcblxuICAgIGNvbnN0IHsgZWZmZWN0aXZlVmVyc2lvbiwgZXJyb3IgfSA9IHJlc29sdmVSZXF1ZXN0ZWRJbnN0YWxsVmVyc2lvbihyZXEuYm9keSk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhZyA9IGVmZmVjdGl2ZVZlcnNpb24gPyBgQCR7ZWZmZWN0aXZlVmVyc2lvbn1gIDogJ0BsYXRlc3QnO1xuICAgIGxvZ2dlci5pbmZvKGBbU2V0dXBdIEluc3RhbGxpbmcgRG9sbGhvdXNlTUNQJHt0YWd9IHRvIGNsaWVudDogJHtub3JtYWxpemVkQ2xpZW50fWApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IG5vcm1hbGl6ZWRDbGllbnQgPT09ICdsbXN0dWRpbydcbiAgICAgICAgPyBhd2FpdCBpbnN0YWxsTG1TdHVkaW9Db25maWcoZWZmZWN0aXZlVmVyc2lvbilcbiAgICAgICAgOiBhd2FpdCBpbnN0YWxsZXIobm9ybWFsaXplZENsaWVudCwgZWZmZWN0aXZlVmVyc2lvbik7XG4gICAgICBsb2dnZXIuaW5mbyhgW1NldHVwXSBTdWNjZXNzZnVsbHkgaW5zdGFsbGVkIHRvICR7bm9ybWFsaXplZENsaWVudH1gKTtcblxuICAgICAgLy8gQmVzdC1lZmZvcnQgTlZNIG1pdGlnYXRpb24gKG1hY09TL0xpbnV4IG9ubHkpLlxuICAgICAgLy8gRXh0cmFjdGVkIGludG8gYXBwbHlOdm1MYXVuY2hlcklmTmVlZGVkIHRvIGtlZXAgdGhpcyBoYW5kbGVyJ3NcbiAgICAgIC8vIGNvZ25pdGl2ZSBjb21wbGV4aXR5IHdpdGhpbiBib3VuZHMgKFNvbmFyQ2xvdWQgUzM3NzYpLlxuICAgICAgY29uc3QgbnZtUmVzdWx0ID0gYXdhaXQgYXBwbHlOdm1MYXVuY2hlcklmTmVlZGVkKG5vcm1hbGl6ZWRDbGllbnQpO1xuXG4gICAgICBjb25zdCBudm1NaXRpZ2F0aW9uQXBwbGllZCA9IHRvTnZtTWl0aWdhdGlvbkFwcGxpZWQobnZtUmVzdWx0KTtcblxuICAgICAgY29uc3QgaG9va0luc3RhbGwgPSBhd2FpdCBwZXJtaXNzaW9uSG9va0luc3RhbGxlcihub3JtYWxpemVkQ2xpZW50KTtcblxuICAgICAgcmVzLmpzb24oe1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBvdXRwdXQsXG4gICAgICAgIGNsaWVudDogbm9ybWFsaXplZENsaWVudCxcbiAgICAgICAgdmVyc2lvbjogZWZmZWN0aXZlVmVyc2lvbiB8fCAnbGF0ZXN0JyxcbiAgICAgICAgbnZtTWl0aWdhdGlvbkFwcGxpZWQsXG4gICAgICAgIGhvb2tJbnN0YWxsLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgbG9nZ2VyLndhcm4oYFtTZXR1cF0gSW5zdGFsbCBmYWlsZWQgZm9yICR7bm9ybWFsaXplZENsaWVudH06ICR7bWVzc2FnZX1gKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBtZXNzYWdlLCBjbGllbnQ6IG5vcm1hbGl6ZWRDbGllbnQgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIOKUgOKUgCBWZXJzaW9uIGluZm8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGNvbnN0IHZlcnNpb25IYW5kbGVyID0gYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBsb2NhbCA9IHtcbiAgICAgIHZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTixcbiAgICAgIG1jcGJVcmw6IGBodHRwczovL2dpdGh1Yi5jb20vJHtHSVRIVUJfUkVQT30vcmVsZWFzZXMvZG93bmxvYWQvdiR7UEFDS0FHRV9WRVJTSU9OfS9kb2xsaG91c2VtY3AtJHtQQUNLQUdFX1ZFUlNJT059Lm1jcGJgLFxuICAgIH07XG5cbiAgICAvLyBRdWVyeSBHaXRIdWIgZm9yIHRoZSBhY3R1YWwgbGF0ZXN0IHJlbGVhc2VcbiAgICBsZXQgbGF0ZXN0ID0gbG9jYWw7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdoUmVzID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtHSVRIVUJfUkVQT30vcmVsZWFzZXMvbGF0ZXN0YCwge1xuICAgICAgICBoZWFkZXJzOiB7ICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yitqc29uJywgJ1VzZXItQWdlbnQnOiAnRG9sbGhvdXNlTUNQLVNldHVwJyB9LFxuICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoNTAwMCksXG4gICAgICB9KTtcbiAgICAgIGlmIChnaFJlcy5vaykge1xuICAgICAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgZ2hSZXMuanNvbigpIGFzIHsgdGFnX25hbWU6IHN0cmluZzsgYXNzZXRzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgYnJvd3Nlcl9kb3dubG9hZF91cmw6IHN0cmluZyB9PiB9O1xuICAgICAgICBjb25zdCBtY3BiQXNzZXQgPSByZWxlYXNlLmFzc2V0cy5maW5kKGEgPT4gTUNQQl9BU1NFVF9QQVRURVJOLnRlc3QoYS5uYW1lKSk7XG4gICAgICAgIGxhdGVzdCA9IHtcbiAgICAgICAgICB2ZXJzaW9uOiByZWxlYXNlLnRhZ19uYW1lLnJlcGxhY2UoL152LywgJycpLFxuICAgICAgICAgIG1jcGJVcmw6IG1jcGJBc3NldD8uYnJvd3Nlcl9kb3dubG9hZF91cmwgfHxcbiAgICAgICAgICAgIGBodHRwczovL2dpdGh1Yi5jb20vJHtHSVRIVUJfUkVQT30vcmVsZWFzZXMvZG93bmxvYWQvJHtyZWxlYXNlLnRhZ19uYW1lfS9kb2xsaG91c2VtY3AtJHtyZWxlYXNlLnRhZ19uYW1lLnJlcGxhY2UoL152LywgJycpfS5tY3BiYCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEdpdEh1YiB1bnJlYWNoYWJsZSDigJQgdXNlIGxvY2FsIHZlcnNpb24gaW5mb1xuICAgIH1cblxuICAgIHJlcy5qc29uKHtcbiAgICAgIHJ1bm5pbmc6IGxvY2FsLFxuICAgICAgbGF0ZXN0LFxuICAgICAgaXNMYXRlc3Q6IGxvY2FsLnZlcnNpb24gPT09IGxhdGVzdC52ZXJzaW9uLFxuICAgIH0pO1xuICB9O1xuXG4gIC8vIOKUgOKUgCAubWNwYiBkb3dubG9hZCByZWRpcmVjdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgY29uc3QgbWNwYlJlZGlyZWN0SGFuZGxlciA9IGFzeW5jIChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgLy8gVHJ5IEdpdEh1YiBBUEkgZm9yIHRoZSBhY3R1YWwgbGF0ZXN0IC5tY3BiIGFzc2V0IFVSTFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBnaFJlcyA9IGF3YWl0IGZldGNoKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7R0lUSFVCX1JFUE99L3JlbGVhc2VzL2xhdGVzdGAsIHtcbiAgICAgICAgaGVhZGVyczogeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbicsICdVc2VyLUFnZW50JzogJ0RvbGxob3VzZU1DUC1TZXR1cCcgfSxcbiAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KDUwMDApLFxuICAgICAgfSk7XG4gICAgICBpZiAoZ2hSZXMub2spIHtcbiAgICAgICAgY29uc3QgcmVsZWFzZSA9IGF3YWl0IGdoUmVzLmpzb24oKSBhcyB7IHRhZ19uYW1lOiBzdHJpbmc7IGFzc2V0czogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGJyb3dzZXJfZG93bmxvYWRfdXJsOiBzdHJpbmcgfT4gfTtcbiAgICAgICAgY29uc3QgbWNwYkFzc2V0ID0gcmVsZWFzZS5hc3NldHMuZmluZChhID0+IE1DUEJfQVNTRVRfUEFUVEVSTi50ZXN0KGEubmFtZSkpO1xuICAgICAgICBpZiAobWNwYkFzc2V0KSB7XG4gICAgICAgICAgcmVzLnJlZGlyZWN0KG1jcGJBc3NldC5icm93c2VyX2Rvd25sb2FkX3VybCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBGYWxsIHRocm91Z2ggdG8gY29uc3RydWN0ZWQgVVJMXG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2s6IGNvbnN0cnVjdCBVUkwgZnJvbSBydW5uaW5nIHZlcnNpb25cbiAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly9naXRodWIuY29tLyR7R0lUSFVCX1JFUE99L3JlbGVhc2VzL2Rvd25sb2FkL3Yke1BBQ0tBR0VfVkVSU0lPTn0vZG9sbGhvdXNlbWNwLSR7UEFDS0FHRV9WRVJTSU9OfS5tY3BiYDtcbiAgICByZXMucmVkaXJlY3QodXJsKTtcbiAgfTtcblxuICAvLyDilIDilIAgTGljZW5zZSBzZWxlY3Rpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGNvbnN0IGxpY2Vuc2VDb25maWdQYXRoID0gam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJ2xpY2Vuc2UuanNvbicpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlYWRMaWNlbnNlKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3ID0gYXdhaXQgcmVhZEZpbGUobGljZW5zZUNvbmZpZ1BhdGgsICd1dGYtOCcpO1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmF3KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB7IHRpZXI6ICdhZ3BsJyB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHdyaXRlTGljZW5zZShkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRpciA9IGpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScpO1xuICAgIGF3YWl0IG1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKGxpY2Vuc2VDb25maWdQYXRoLCBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKSwgeyBtb2RlOiAwbzYwMCB9KTtcbiAgfVxuXG4gIGNvbnN0IGdldExpY2Vuc2VIYW5kbGVyID0gYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBsaWNlbnNlID0gYXdhaXQgcmVhZExpY2Vuc2UoKTtcbiAgICAvLyBOZXZlciBleHBvc2UgdmVyaWZpY2F0aW9uIGludGVybmFscyB0byBjbGllbnRcbiAgICBjb25zdCB7IHZlcmlmaWNhdGlvbkNvZGU6IF9jb2RlLCB2ZXJpZmljYXRpb25BdHRlbXB0czogX2F0dGVtcHRzLCAuLi5wdWJsaWNMaWNlbnNlIH0gPSBsaWNlbnNlO1xuICAgIHJlcy5qc29uKHB1YmxpY0xpY2Vuc2UpO1xuICB9O1xuXG4gIGNvbnN0IGxpY2Vuc2VSYXRlTGltaXRlciA9IG5ldyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIoNSwgNjBfMDAwKTsgLy8gNSByZXF1ZXN0cy9taW51dGVcblxuICBjb25zdCBzZXRMaWNlbnNlSGFuZGxlciA9IGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoIWxpY2Vuc2VSYXRlTGltaXRlci50cnlBY3F1aXJlKCkpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1JBVEVfTElNSVRfRVhDRUVERUQnLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ3NldHVwUm91dGVzLnNldExpY2Vuc2VIYW5kbGVyJyxcbiAgICAgICAgZGV0YWlsczogJ0xpY2Vuc2UgZW5kcG9pbnQgcmF0ZSBsaW1pdCBleGNlZWRlZCAoNSByZXEvbWluKScsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDI5KS5qc29uKHsgZXJyb3I6ICdUb28gbWFueSBsaWNlbnNlIHJlcXVlc3RzLiBQbGVhc2UgdHJ5IGFnYWluIGluIGEgbWludXRlLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IHJlcS5ib2R5ID8/IHt9O1xuICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRlTGljZW5zZUlucHV0KGJvZHkpO1xuICAgIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6IHZhbGlkYXRpb25FcnJvciB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsaWNlbnNlRGF0YSA9IGJ1aWxkTGljZW5zZURhdGEoYm9keSk7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKGxpY2Vuc2VEYXRhLnRpZXIgPT09ICdhZ3BsJykge1xuICAgICAgICAvLyBBR1BMOiBhY3RpdmF0ZSBpbW1lZGlhdGVseSwgbm8gdmVyaWZpY2F0aW9uIG5lZWRlZFxuICAgICAgICBsaWNlbnNlRGF0YS5zdGF0dXMgPSAnYWN0aXZlJztcbiAgICAgICAgYXdhaXQgd3JpdGVMaWNlbnNlKGxpY2Vuc2VEYXRhKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tTZXR1cF0gTGljZW5zZSBzZXQgdG8gQUdQTCAoYWN0aXZlLCBubyB2ZXJpZmljYXRpb24pJyk7XG4gICAgICAgIHJlcy5qc29uKHsgc3VjY2VzczogdHJ1ZSwgbGljZW5zZTogbGljZW5zZURhdGEgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQ29tbWVyY2lhbCB0aWVyczogc2F2ZSBhcyBwZW5kaW5nLCBnZW5lcmF0ZSB2ZXJpZmljYXRpb24gY29kZVxuICAgICAgY29uc3QgY29kZSA9IGdlbmVyYXRlVmVyaWZpY2F0aW9uQ29kZSgpO1xuICAgICAgbGljZW5zZURhdGEuc3RhdHVzID0gJ3BlbmRpbmcnO1xuICAgICAgbGljZW5zZURhdGEudmVyaWZpY2F0aW9uQ29kZSA9IGNvZGU7XG4gICAgICBsaWNlbnNlRGF0YS52ZXJpZmljYXRpb25FeHBpcnkgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgVkVSSUZJQ0FUSU9OX0NPREVfVFRMX01TKS50b0lTT1N0cmluZygpO1xuICAgICAgbGljZW5zZURhdGEudmVyaWZpY2F0aW9uQXR0ZW1wdHMgPSAwO1xuICAgICAgbGljZW5zZURhdGEudmVyaWZpY2F0aW9uUmVxdWVzdGVkQXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICBhd2FpdCB3cml0ZUxpY2Vuc2UobGljZW5zZURhdGEpO1xuXG4gICAgICBsb2dnZXIuaW5mbyhgW1NldHVwXSBMaWNlbnNlIHBlbmRpbmcgdmVyaWZpY2F0aW9uOiAke2xpY2Vuc2VEYXRhLnRpZXJ9ICgke2xpY2Vuc2VEYXRhLmVtYWlsfSlgKTtcblxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnQ09ORklHX1VQREFURUQnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ3NldHVwUm91dGVzLnNldExpY2Vuc2VIYW5kbGVyJyxcbiAgICAgICAgZGV0YWlsczogYExpY2Vuc2UgdmVyaWZpY2F0aW9uIGluaXRpYXRlZDogJHtsaWNlbnNlRGF0YS50aWVyfWAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7XG4gICAgICAgICAgdGllcjogbGljZW5zZURhdGEudGllcixcbiAgICAgICAgICBlbWFpbDogbGljZW5zZURhdGEuZW1haWwsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gU2VuZCB2ZXJpZmljYXRpb24gZW1haWwgZGlyZWN0bHkgdG8gV29ya2VyIGZvciBpbnN0YW50IGRlbGl2ZXJ5LlxuICAgICAgLy8gUG9zdEhvZyBldmVudCBhbHNvIGZpcmVzIGZvciBhbmFseXRpY3MsIGJ1dCB0aGUgZW1haWwgY2FuJ3Qgd2FpdCBmb3JcbiAgICAgIC8vIFBvc3RIb2cncyBldmVudCBwaXBlbGluZSAoMS01IG1pbiBkZWxheSkuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB3b3JrZXJVcmwgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfTElDRU5TRV9XT1JLRVJfVVJMIHx8ICdodHRwczovL2RvbGxob3VzZW1jcC1saWNlbnNlLWVtYWlsLm1pY2stZWJhLndvcmtlcnMuZGV2JztcbiAgICAgICAgY29uc3Qgd29ya2VyU2VjcmV0ID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0xJQ0VOU0VfV09SS0VSX1NFQ1JFVCB8fCAnJztcbiAgICAgICAgYXdhaXQgZmV0Y2god29ya2VyVXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIC4uLih3b3JrZXJTZWNyZXQgPyB7ICd4LXBvc3Rob2ctc2VjcmV0Jzogd29ya2VyU2VjcmV0IH0gOiB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogJ2xpY2Vuc2VfYWN0aXZhdGlvbicsXG4gICAgICAgICAgICBkaXN0aW5jdF9pZDogJ2RpcmVjdC12ZXJpZmljYXRpb24nLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICB0aWVyOiBsaWNlbnNlRGF0YS50aWVyLFxuICAgICAgICAgICAgICBlbWFpbDogbGljZW5zZURhdGEuZW1haWwsXG4gICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICd2ZXJpZmljYXRpb24nLFxuICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogY29kZSxcbiAgICAgICAgICAgICAgc2VydmVyX3ZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTixcbiAgICAgICAgICAgICAgb3M6IHBsYXRmb3JtKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gVmVyaWZpY2F0aW9uIGVtYWlsIHNlbnQgZGlyZWN0bHkgdmlhIFdvcmtlcjogJHtsaWNlbnNlRGF0YS5lbWFpbH1gKTtcbiAgICAgIH0gY2F0Y2ggKHdvcmtlckVycm9yKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBbU2V0dXBdIERpcmVjdCBXb3JrZXIgY2FsbCBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBQb3N0SG9nIHBpcGVsaW5lOiAke3dvcmtlckVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyB3b3JrZXJFcnJvci5tZXNzYWdlIDogU3RyaW5nKHdvcmtlckVycm9yKX1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWxzbyBmaXJlIFBvc3RIb2cgZXZlbnQgZm9yIGFuYWx5dGljcyAobm9uLWJsb2NraW5nLCBkZWxheSBpcyBmaW5lKVxuICAgICAgY2FwdHVyZVBvc3RIb2dMaWNlbnNlRXZlbnQoeyAuLi5saWNlbnNlRGF0YSwgdmVyaWZpY2F0aW9uQ29kZTogY29kZSwgZXZlbnRUeXBlOiAndmVyaWZpY2F0aW9uJyB9KS5jYXRjaChcbiAgICAgICAgKGVycikgPT4gbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIFBvc3RIb2cgY2FwdHVyZSBmYWlsZWQ6ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWApLFxuICAgICAgKTtcblxuICAgICAgLy8gUmV0dXJuIHN1Y2Nlc3Mgd2l0aG91dCBleHBvc2luZyB0aGUgY29kZVxuICAgICAgY29uc3QgeyB2ZXJpZmljYXRpb25Db2RlOiBfYywgdmVyaWZpY2F0aW9uQXR0ZW1wdHM6IF9hLCAuLi5wdWJsaWNEYXRhIH0gPSBsaWNlbnNlRGF0YTtcbiAgICAgIHJlcy5qc29uKHsgc3VjY2VzczogdHJ1ZSwgbGljZW5zZTogcHVibGljRGF0YSwgdmVyaWZpY2F0aW9uUmVxdWlyZWQ6IHRydWUgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignW1NldHVwXSBGYWlsZWQgdG8gc2F2ZSBsaWNlbnNlJywgeyBlcnJvciB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6ICdGYWlsZWQgdG8gc2F2ZSBsaWNlbnNlIGNvbmZpZ3VyYXRpb24nIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB2ZXJpZnlSYXRlTGltaXRlciA9IG5ldyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIoNSwgNjBfMDAwKTsgLy8gNSBhdHRlbXB0cy9taW51dGVcblxuICBjb25zdCB2ZXJpZnlMaWNlbnNlSGFuZGxlciA9IGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoIXZlcmlmeVJhdGVMaW1pdGVyLnRyeUFjcXVpcmUoKSkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnUkFURV9MSU1JVF9FWENFRURFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnc2V0dXBSb3V0ZXMudmVyaWZ5TGljZW5zZUhhbmRsZXInLFxuICAgICAgICBkZXRhaWxzOiAnVmVyaWZpY2F0aW9uIGVuZHBvaW50IHJhdGUgbGltaXQgZXhjZWVkZWQgKDUgcmVxL21pbiknLFxuICAgICAgfSk7XG4gICAgICByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnVG9vIG1hbnkgdmVyaWZpY2F0aW9uIGF0dGVtcHRzLiBQbGVhc2UgdHJ5IGFnYWluIGluIGEgbWludXRlLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBjb2RlIH0gPSByZXEuYm9keSA/PyB7fTtcbiAgICBpZiAoIWNvZGUgfHwgdHlwZW9mIGNvZGUgIT09ICdzdHJpbmcnIHx8ICEvXlxcZHs2fSQvLnRlc3QoY29kZSkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCA2LWRpZ2l0IHZlcmlmaWNhdGlvbiBjb2RlJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsaWNlbnNlID0gYXdhaXQgcmVhZExpY2Vuc2UoKTtcbiAgICBpZiAobGljZW5zZS5zdGF0dXMgIT09ICdwZW5kaW5nJykge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ05vIHBlbmRpbmcgbGljZW5zZSB2ZXJpZmljYXRpb24uIFBsZWFzZSBzdWJtaXQgdGhlIGxpY2Vuc2UgZm9ybSBmaXJzdC4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGV4cGlyeVxuICAgIGlmICghbGljZW5zZS52ZXJpZmljYXRpb25FeHBpcnkgfHwgaXNDb2RlRXhwaXJlZChsaWNlbnNlLnZlcmlmaWNhdGlvbkV4cGlyeSBhcyBzdHJpbmcpKSB7XG4gICAgICBsaWNlbnNlLnN0YXR1cyA9ICdleHBpcmVkJztcbiAgICAgIGF3YWl0IHdyaXRlTGljZW5zZShsaWNlbnNlKTtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdWZXJpZmljYXRpb24gY29kZSBoYXMgZXhwaXJlZC4gUGxlYXNlIHN1Ym1pdCB0aGUgZm9ybSBhZ2FpbiB0byByZWNlaXZlIGEgbmV3IGNvZGUuJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBtYXggYXR0ZW1wdHNcbiAgICBjb25zdCBhdHRlbXB0cyA9ICgobGljZW5zZS52ZXJpZmljYXRpb25BdHRlbXB0cyBhcyBudW1iZXIpID8/IDApICsgMTtcbiAgICBpZiAoYXR0ZW1wdHMgPiBWRVJJRklDQVRJT05fTUFYX0FUVEVNUFRTKSB7XG4gICAgICBsaWNlbnNlLnN0YXR1cyA9ICdleHBpcmVkJztcbiAgICAgIGF3YWl0IHdyaXRlTGljZW5zZShsaWNlbnNlKTtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1JBVEVfTElNSVRfRVhDRUVERUQnLFxuICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICBzb3VyY2U6ICdzZXR1cFJvdXRlcy52ZXJpZnlMaWNlbnNlSGFuZGxlcicsXG4gICAgICAgIGRldGFpbHM6IGBWZXJpZmljYXRpb24gbWF4IGF0dGVtcHRzIGV4Y2VlZGVkIGZvcjogJHtsaWNlbnNlLmVtYWlsfWAsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6ICdUb28gbWFueSBmYWlsZWQgYXR0ZW1wdHMuIFBsZWFzZSBzdWJtaXQgdGhlIGZvcm0gYWdhaW4gdG8gcmVjZWl2ZSBhIG5ldyBjb2RlLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgY29kZVxuICAgIGlmIChjb2RlICE9PSBsaWNlbnNlLnZlcmlmaWNhdGlvbkNvZGUpIHtcbiAgICAgIGxpY2Vuc2UudmVyaWZpY2F0aW9uQXR0ZW1wdHMgPSBhdHRlbXB0cztcbiAgICAgIGF3YWl0IHdyaXRlTGljZW5zZShsaWNlbnNlKTtcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IFZFUklGSUNBVElPTl9NQVhfQVRURU1QVFMgLSBhdHRlbXB0cztcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6IGBJbmNvcnJlY3QgdmVyaWZpY2F0aW9uIGNvZGUuICR7cmVtYWluaW5nfSBhdHRlbXB0JHtyZW1haW5pbmcgPT09IDEgPyAnJyA6ICdzJ30gcmVtYWluaW5nLmAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ29kZSBpcyBjb3JyZWN0IOKAlCBhY3RpdmF0ZSBsaWNlbnNlXG4gICAgY29uc3QgdmVyaWZpZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBjb25zdCByZXF1ZXN0ZWRBdCA9IGxpY2Vuc2UudmVyaWZpY2F0aW9uUmVxdWVzdGVkQXQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRpbWVUb1ZlcmlmeU1zID0gcmVxdWVzdGVkQXQgPyBEYXRlLm5vdygpIC0gbmV3IERhdGUocmVxdWVzdGVkQXQpLmdldFRpbWUoKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBhdHRlbXB0c1VzZWQgPSAoKGxpY2Vuc2UudmVyaWZpY2F0aW9uQXR0ZW1wdHMgYXMgbnVtYmVyKSA/PyAwKSArIDE7XG5cbiAgICBsaWNlbnNlLnN0YXR1cyA9ICdhY3RpdmUnO1xuICAgIGxpY2Vuc2UudmVyaWZpZWRBdCA9IHZlcmlmaWVkQXQ7XG4gICAgZGVsZXRlIGxpY2Vuc2UudmVyaWZpY2F0aW9uQ29kZTtcbiAgICBkZWxldGUgbGljZW5zZS52ZXJpZmljYXRpb25FeHBpcnk7XG4gICAgZGVsZXRlIGxpY2Vuc2UudmVyaWZpY2F0aW9uQXR0ZW1wdHM7XG4gICAgZGVsZXRlIGxpY2Vuc2UudmVyaWZpY2F0aW9uUmVxdWVzdGVkQXQ7XG4gICAgYXdhaXQgd3JpdGVMaWNlbnNlKGxpY2Vuc2UpO1xuXG4gICAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gTGljZW5zZSB2ZXJpZmllZCBhbmQgYWN0aXZhdGVkOiAke2xpY2Vuc2UudGllcn0gKCR7bGljZW5zZS5lbWFpbH0pIOKAlCAke3RpbWVUb1ZlcmlmeU1zID8gTWF0aC5yb3VuZCh0aW1lVG9WZXJpZnlNcyAvIDEwMDApICsgJ3MnIDogJ3Vua25vd24nfSwgJHthdHRlbXB0c1VzZWR9IGF0dGVtcHQocylgKTtcblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdDT05GSUdfVVBEQVRFRCcsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdzZXR1cFJvdXRlcy52ZXJpZnlMaWNlbnNlSGFuZGxlcicsXG4gICAgICBkZXRhaWxzOiBgTGljZW5zZSBhY3RpdmF0ZWQgYWZ0ZXIgZW1haWwgdmVyaWZpY2F0aW9uOiAke2xpY2Vuc2UudGllcn1gLFxuICAgICAgYWRkaXRpb25hbERhdGE6IHsgdGllcjogbGljZW5zZS50aWVyLCBlbWFpbDogbGljZW5zZS5lbWFpbCB9LFxuICAgIH0pO1xuXG4gICAgLy8gU2VuZCBjb25maXJtYXRpb24gZW1haWwgKyBQb3N0SG9nIGFjdGl2YXRpb24gZXZlbnQgd2l0aCBhbmFseXRpY3NcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2FwdHVyZVBvc3RIb2dMaWNlbnNlRXZlbnQoe1xuICAgICAgICAuLi5saWNlbnNlLFxuICAgICAgICBldmVudFR5cGU6ICdhY3RpdmF0aW9uJyxcbiAgICAgICAgdmVyaWZpY2F0aW9uX3RpbWVfbXM6IHRpbWVUb1ZlcmlmeU1zLFxuICAgICAgICB2ZXJpZmljYXRpb25fYXR0ZW1wdHM6IGF0dGVtcHRzVXNlZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogY29kZS5sZW5ndGggPT09IDYgPyAnY29kZV9vcl9jbGljaycgOiAndW5rbm93bicsXG4gICAgICB9KTtcbiAgICAgIGxvZ2dlci5pbmZvKGBbU2V0dXBdIExpY2Vuc2UgYWN0aXZhdGlvbiBldmVudCBzZW50IHRvIFBvc3RIb2c6ICR7bGljZW5zZS50aWVyfWApO1xuICAgIH0gY2F0Y2ggKHBvc3Rob2dFcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIFBvc3RIb2cgY2FwdHVyZSBmYWlsZWQ6ICR7cG9zdGhvZ0Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBwb3N0aG9nRXJyb3IubWVzc2FnZSA6IFN0cmluZyhwb3N0aG9nRXJyb3IpfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHsgdmVyaWZpY2F0aW9uQ29kZTogX2MsIHZlcmlmaWNhdGlvbkF0dGVtcHRzOiBfYSwgdmVyaWZpY2F0aW9uRXhwaXJ5OiBfZSwgLi4ucHVibGljTGljZW5zZSB9ID0gbGljZW5zZTtcbiAgICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIGxpY2Vuc2U6IHB1YmxpY0xpY2Vuc2UgfSk7XG4gIH07XG5cbiAgY29uc3QgcmVzZW5kUmF0ZUxpbWl0ZXIgPSBuZXcgU2xpZGluZ1dpbmRvd1JhdGVMaW1pdGVyKDMsIDEyMF8wMDApOyAvLyAzIHJlc2VuZHMgcGVyIDIgbWludXRlc1xuXG4gIGNvbnN0IHJlc2VuZFZlcmlmaWNhdGlvbkhhbmRsZXIgPSBhc3luYyAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICghcmVzZW5kUmF0ZUxpbWl0ZXIudHJ5QWNxdWlyZSgpKSB7XG4gICAgICByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnUGxlYXNlIHdhaXQgYmVmb3JlIHJlcXVlc3RpbmcgYW5vdGhlciBjb2RlLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGljZW5zZSA9IGF3YWl0IHJlYWRMaWNlbnNlKCk7XG4gICAgaWYgKGxpY2Vuc2Uuc3RhdHVzICE9PSAncGVuZGluZycgJiYgbGljZW5zZS5zdGF0dXMgIT09ICdleHBpcmVkJykge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ05vIHBlbmRpbmcgbGljZW5zZSB2ZXJpZmljYXRpb24uJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBuZXcgY29kZSBhbmQgcmVzZXRcbiAgICBjb25zdCBjb2RlID0gZ2VuZXJhdGVWZXJpZmljYXRpb25Db2RlKCk7XG4gICAgbGljZW5zZS5zdGF0dXMgPSAncGVuZGluZyc7XG4gICAgbGljZW5zZS52ZXJpZmljYXRpb25Db2RlID0gY29kZTtcbiAgICBsaWNlbnNlLnZlcmlmaWNhdGlvbkV4cGlyeSA9IG5ldyBEYXRlKERhdGUubm93KCkgKyBWRVJJRklDQVRJT05fQ09ERV9UVExfTVMpLnRvSVNPU3RyaW5nKCk7XG4gICAgbGljZW5zZS52ZXJpZmljYXRpb25BdHRlbXB0cyA9IDA7XG4gICAgYXdhaXQgd3JpdGVMaWNlbnNlKGxpY2Vuc2UpO1xuXG4gICAgLy8gU2VuZCB2ZXJpZmljYXRpb24gZW1haWwgZGlyZWN0bHkgdG8gV29ya2VyIGZvciBpbnN0YW50IGRlbGl2ZXJ5XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdvcmtlclVybCA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9MSUNFTlNFX1dPUktFUl9VUkwgfHwgJ2h0dHBzOi8vZG9sbGhvdXNlbWNwLWxpY2Vuc2UtZW1haWwubWljay1lYmEud29ya2Vycy5kZXYnO1xuICAgICAgY29uc3Qgd29ya2VyU2VjcmV0ID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0xJQ0VOU0VfV09SS0VSX1NFQ1JFVCB8fCAnJztcbiAgICAgIGF3YWl0IGZldGNoKHdvcmtlclVybCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgLi4uKHdvcmtlclNlY3JldCA/IHsgJ3gtcG9zdGhvZy1zZWNyZXQnOiB3b3JrZXJTZWNyZXQgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGV2ZW50OiAnbGljZW5zZV9hY3RpdmF0aW9uJyxcbiAgICAgICAgICBkaXN0aW5jdF9pZDogJ2RpcmVjdC1yZXNlbmQnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHRpZXI6IGxpY2Vuc2UudGllcixcbiAgICAgICAgICAgIGVtYWlsOiBsaWNlbnNlLmVtYWlsLFxuICAgICAgICAgICAgZXZlbnRfdHlwZTogJ3ZlcmlmaWNhdGlvbicsXG4gICAgICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogY29kZSxcbiAgICAgICAgICAgIHNlcnZlcl92ZXJzaW9uOiBQQUNLQUdFX1ZFUlNJT04sXG4gICAgICAgICAgICBvczogcGxhdGZvcm0oKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gVmVyaWZpY2F0aW9uIGNvZGUgcmVzZW50IGRpcmVjdGx5IHZpYSBXb3JrZXI6ICR7bGljZW5zZS5lbWFpbH1gKTtcbiAgICB9IGNhdGNoICh3b3JrZXJFcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oYFtTZXR1cF0gRGlyZWN0IFdvcmtlciBjYWxsIGZhaWxlZDogJHt3b3JrZXJFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gd29ya2VyRXJyb3IubWVzc2FnZSA6IFN0cmluZyh3b3JrZXJFcnJvcil9YCk7XG4gICAgfVxuXG4gICAgcmVzLmpzb24oeyBzdWNjZXNzOiB0cnVlLCBtZXNzYWdlOiAnQSBuZXcgdmVyaWZpY2F0aW9uIGNvZGUgaGFzIGJlZW4gc2VudCB0byB5b3VyIGVtYWlsLicgfSk7XG4gIH07XG5cbiAgcmV0dXJuIHsgaW5zdGFsbEhhbmRsZXIsIG9wZW5Db25maWdIYW5kbGVyLCB2ZXJzaW9uSGFuZGxlciwgbWNwYlJlZGlyZWN0SGFuZGxlciwgZGV0ZWN0SGFuZGxlciwgZ2V0TGljZW5zZUhhbmRsZXIsIHNldExpY2Vuc2VIYW5kbGVyLCB2ZXJpZnlMaWNlbnNlSGFuZGxlciwgcmVzZW5kVmVyaWZpY2F0aW9uSGFuZGxlciB9O1xufVxuXG4vLyDilIDilIAgSW5zdGFsbCBhbmFseXRpY3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogRmlyZS1hbmQtZm9yZ2V0IFBvc3RIb2cgZXZlbnQgZm9yIGluc3RhbGxhdGlvbiBhbmFseXRpY3MuXG4gKiBVc2VzIHRoZSBzYW1lIGluc3RhbGwgSUQgYXMgdGhlIGxpY2Vuc2UgdGVsZW1ldHJ5IHN5c3RlbS5cbiAqIFNpbGVudGx5IHN3YWxsb3dzIGFsbCBlcnJvcnMg4oCUIGFuYWx5dGljcyBtdXN0IG5ldmVyIGJyZWFrIGluc3RhbGxzLlxuICovXG5mdW5jdGlvbiBjYXB0dXJlSW5zdGFsbEFuYWx5dGljcyhldmVudDogc3RyaW5nLCBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICBjb25zdCBwb3N0aG9nID0gbmV3IFBvc3RIb2coUE9TVEhPR19QUk9KRUNUX0tFWSwge1xuICAgIGhvc3Q6IHByb2Nlc3MuZW52LlBPU1RIT0dfSE9TVCB8fCAnaHR0cHM6Ly9hcHAucG9zdGhvZy5jb20nLFxuICAgIGZsdXNoQXQ6IDEsXG4gICAgZmx1c2hJbnRlcnZhbDogNTAwMCxcbiAgfSk7XG4gIHJlYWRGaWxlKGpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICcudGVsZW1ldHJ5LWlkJyksICd1dGYtOCcpXG4gICAgLnRoZW4oaWQgPT4gaWQudHJpbSgpKVxuICAgIC5jYXRjaCgoKSA9PiAnYW5vbnltb3VzJylcbiAgICAudGhlbihpbnN0YWxsSWQgPT4ge1xuICAgICAgcG9zdGhvZy5jYXB0dXJlKHsgZGlzdGluY3RJZDogaW5zdGFsbElkLCBldmVudCwgcHJvcGVydGllcyB9KTtcbiAgICAgIHJldHVybiBwb3N0aG9nLnNodXRkb3duKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKCkgPT4geyAvKiB0ZWxlbWV0cnkgbXVzdCBuZXZlciB0aHJvdyAqLyB9KTtcbn1cblxuLy8g4pSA4pSAIE5WTSBtaXRpZ2F0aW9uIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBDbGF1ZGUgRGVza3RvcCBoYXMgYSBidWcgd2hlcmUgaXQgc2NhbnMgfi8ubnZtL3ZlcnNpb25zL25vZGUvLCBidWlsZHMgYSBQQVRIXG4vLyBmcm9tIGFsbCBpbnN0YWxsZWQgdmVyc2lvbnMgaW4gYXNjZW5kaW5nIG9yZGVyIChvbGRlc3QgZmlyc3QpLCBhbmQgcnVucyBucHhcbi8vIHVuZGVyIGFuIG91dGRhdGVkIE5vZGUgZXZlbiB3aGVuIGEgbmV3ZXIgdmVyc2lvbiBpcyBpbnN0YWxsZWQgYW5kIHNlbGVjdGVkLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXIvaXNzdWVzLzE5MDJcbi8vXG4vLyBGaXg6IHdoZW4gTlZNIGlzIHByZXNlbnQsIGNyZWF0ZSBhIHNtYWxsIGJhc2ggbGF1bmNoZXIgdGhhdCBpbml0aWFsaXNlcyBOVk1cbi8vIHByb3Blcmx5IGJlZm9yZSBkZWxlZ2F0aW5nIHRvIG5weCwgdGhlbiBwYXRjaCB0aGUgd3JpdHRlbiBNQ1AgY2xpZW50IGNvbmZpZ1xuLy8gdG8gdXNlIHRoYXQgbGF1bmNoZXIgaW5zdGVhZCBvZiBiYXJlIGBucHhgLlxuXG4vKiogUmVzdWx0IG9mIGF0dGVtcHRpbmcgdG8gYXBwbHkgdGhlIE5WTSBsYXVuY2hlciBtaXRpZ2F0aW9uLiAqL1xuZXhwb3J0IHR5cGUgTnZtTGF1bmNoZXJSZXN1bHQgPSAnYXBwbGllZCcgfCAnbm90LWFwcGxpY2FibGUnIHwgJ2ZhaWxlZCc7XG5cbi8qKiBKU09OLWZvcm1hdCBjbGllbnRzIGVsaWdpYmxlIGZvciBOVk0gbGF1bmNoZXIgcmVwYWlyIG9uIHN0YXJ0dXAuICovXG5jb25zdCBKU09OX0ZPUk1BVF9DTElFTlRTID0gW1xuICAnY2xhdWRlJywgJ2NsYXVkZS1jb2RlJywgJ2N1cnNvcicsICd3aW5kc3VyZicsICdsbXN0dWRpbycsICdnZW1pbmktY2xpJyxcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogT3JjaGVzdHJhdGVzIHRoZSBOVk0gbWl0aWdhdGlvbjogZGV0ZWN0IOKGkiBjcmVhdGUgbGF1bmNoZXIg4oaSIHBhdGNoIGNvbmZpZyDihpIgdGVsZW1ldHJ5LlxuICogRXh0cmFjdGVkIGZyb20gaW5zdGFsbEhhbmRsZXIgdG8ga2VlcCBpdHMgY29nbml0aXZlIGNvbXBsZXhpdHkgd2l0aGluIFNvbmFyQ2xvdWQgbGltaXRzLlxuICogUmV0dXJucyBhIHJlc3VsdCBlbnVtIHJhdGhlciB0aGFuIHRocm93aW5nIHNvIHRoZSBjYWxsZXIgYWx3YXlzIGdldHMgYSBjbGVhbiBzaWduYWwuXG4gKlxuICogQHBhcmFtIGhvbWUgLSBPdmVycmlkZSBob21lIGRpcmVjdG9yeSAoaW5qZWN0YWJsZSBmb3IgdGVzdHMpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseU52bUxhdW5jaGVySWZOZWVkZWQoY2xpZW50OiBzdHJpbmcsIGhvbWUgPSBob21lZGlyKCkpOiBQcm9taXNlPE52bUxhdW5jaGVyUmVzdWx0PiB7XG4gIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBOVk0gbWl0aWdhdGlvbiBjaGVjayBmb3IgY2xpZW50OiAke2NsaWVudH1gKTtcbiAgaWYgKCFhd2FpdCBpc052bVByZXNlbnQoaG9tZSkpIHtcbiAgICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gTlZNIG5vdCBwcmVzZW50IOKAlCBza2lwcGluZyBsYXVuY2hlciBtaXRpZ2F0aW9uIGZvciAke2NsaWVudH1gKTtcbiAgICBjYXB0dXJlSW5zdGFsbEFuYWx5dGljcygnbnZtX2xhdW5jaGVyX25vdF9hcHBsaWNhYmxlJywgeyBjbGllbnQsIHBsYXRmb3JtOiBwbGF0Zm9ybSgpIH0pO1xuICAgIHJldHVybiAnbm90LWFwcGxpY2FibGUnO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3Qgd3JhcHBlclBhdGggPSBhd2FpdCBlbnN1cmVOdm1MYXVuY2hlcihob21lKTtcbiAgICBhd2FpdCBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyKGNsaWVudCwgd3JhcHBlclBhdGgpO1xuICAgIGxvZ2dlci5pbmZvKGBbU2V0dXBdIE5WTS1hd2FyZSBsYXVuY2hlciBhcHBsaWVkIGZvciAke2NsaWVudH1gKTtcbiAgICBjYXB0dXJlSW5zdGFsbEFuYWx5dGljcygnbnZtX2xhdW5jaGVyX2FwcGxpZWQnLCB7IGNsaWVudCwgcGxhdGZvcm06IHBsYXRmb3JtKCkgfSk7XG4gICAgcmV0dXJuICdhcHBsaWVkJztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFtTZXR1cF0gTlZNIGxhdW5jaGVyIHNldHVwIGZhaWxlZCAobm9uLWZhdGFsKTogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCk7XG4gICAgY2FwdHVyZUluc3RhbGxBbmFseXRpY3MoJ252bV9sYXVuY2hlcl9mYWlsZWQnLCB7XG4gICAgICBjbGllbnQsXG4gICAgICBwbGF0Zm9ybTogcGxhdGZvcm0oKSxcbiAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuICdmYWlsZWQnO1xuICB9XG59XG5cbi8qKlxuICogU3RhcnR1cCByZXBhaXI6IHJlLWNyZWF0ZXMgdGhlIHdyYXBwZXIgYW5kIHJlLXBhdGNoZXMgYWxsIGtub3duIEpTT04tZm9ybWF0XG4gKiBjbGllbnQgY29uZmlncyBvbiBldmVyeSBzZXJ2ZXIgc3RhcnQuIEhhbmRsZXMgdHdvIGNhc2VzOlxuICogICAxLiBXcmFwcGVyIHdhcyBkZWxldGVkIOKAlCByZWNyZWF0ZXMgaXQgc28gY29uZmlncyBwb2ludGluZyB0byBpdCBrZWVwIHdvcmtpbmcuXG4gKiAgIDIuIFByZS1leGlzdGluZyBpbnN0YWxsICh1c2VyIGluc3RhbGxlZCBiZWZvcmUgdGhpcyBmaXggc2hpcHBlZCkg4oCUIHBhdGNoZXNcbiAqICAgICAgY29uZmlncyB0aGF0IHN0aWxsIHVzZSBiYXJlIGBucHhgLlxuICpcbiAqIEZpcmUtYW5kLWZvcmdldCBmcm9tIHN0YXJ0V2ViU2VydmVyLiBBbGwgZXJyb3JzIGFyZSBzd2FsbG93ZWQgYW5kIGxvZ2dlZC5cbiAqXG4gKiBAcGFyYW0gaG9tZSAgICAgICAgICAgICAgIC0gT3ZlcnJpZGUgaG9tZSBkaXJlY3RvcnkgKGluamVjdGFibGUgZm9yIHRlc3RzKVxuICogQHBhcmFtIGNvbmZpZ1BhdGhSZXNvbHZlciAtIE92ZXJyaWRlIGNvbmZpZyBwYXRoIGxvb2t1cCAoaW5qZWN0YWJsZSBmb3IgdGVzdHMpLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybiBudWxsIHRvIHNraXAgYSBjbGllbnQgZW50aXJlbHkuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gdGhlIHByb2R1Y3Rpb24gZ2V0Q29uZmlnUGF0aC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGFpck52bUxhdW5jaGVyT25TdGFydHVwKFxuICBob21lID0gaG9tZWRpcigpLFxuICBjb25maWdQYXRoUmVzb2x2ZXI6IChjbGllbnQ6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbCA9IGdldENvbmZpZ1BhdGgsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHBsYXRmb3JtKCkgPT09ICd3aW4zMicpIHJldHVybjtcbiAgbG9nZ2VyLmRlYnVnKCdbU2V0dXBdIE5WTSBsYXVuY2hlciBzdGFydHVwIHJlcGFpcjogY2hlY2tpbmcgZm9yIE5WTS4uLicpO1xuICBpZiAoIWF3YWl0IGlzTnZtUHJlc2VudChob21lKSkge1xuICAgIGxvZ2dlci5kZWJ1ZygnW1NldHVwXSBOVk0gbGF1bmNoZXIgc3RhcnR1cCByZXBhaXI6IE5WTSBub3QgcHJlc2VudCDigJQgbm90aGluZyB0byByZXBhaXInKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgd3JhcHBlclBhdGg6IHN0cmluZztcbiAgdHJ5IHtcbiAgICB3cmFwcGVyUGF0aCA9IGF3YWl0IGVuc3VyZU52bUxhdW5jaGVyKGhvbWUpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgW1NldHVwXSBOVk0gc3RhcnR1cCByZXBhaXI6IGNvdWxkIG5vdCBjcmVhdGUgbGF1bmNoZXI6ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICBKU09OX0ZPUk1BVF9DTElFTlRTLm1hcChjbGllbnQgPT4ge1xuICAgICAgY29uc3QgY29uZmlnUGF0aCA9IGNvbmZpZ1BhdGhSZXNvbHZlcihjbGllbnQpO1xuICAgICAgaWYgKCFjb25maWdQYXRoKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7IC8vIHJlc29sdmVyIHJldHVybmVkIG51bGwg4oCUIHNraXAgdGhpcyBjbGllbnRcbiAgICAgIHJldHVybiBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyKGNsaWVudCwgd3JhcHBlclBhdGgsIGNvbmZpZ1BhdGgpXG4gICAgICAgIC5jYXRjaChlcnIgPT5cbiAgICAgICAgICBsb2dnZXIud2FybihgW1NldHVwXSBOVk0gc3RhcnR1cCByZXBhaXI6IGZhaWxlZCB0byBwYXRjaCAke2NsaWVudH06ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWApXG4gICAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICBsb2dnZXIuaW5mbygnW1NldHVwXSBOVk0gbGF1bmNoZXIgc3RhcnR1cCByZXBhaXIgY29tcGxldGUnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgTlZNIGlzIGluc3RhbGxlZCBvbiB0aGlzIG1hY2hpbmUgKG1hY09TL0xpbnV4IG9ubHkpLlxuICogQ2hlY2tzIHByb2Nlc3MuZW52Lk5WTV9ESVIgZmlyc3QgKGhhbmRsZXMgbm9uLXN0YW5kYXJkIGluc3RhbGwgbG9jYXRpb25zKSxcbiAqIHRoZW4gZmFsbHMgYmFjayB0byB+Ly5udm0uXG4gKlxuICogQHBhcmFtIGhvbWUgLSBPdmVycmlkZSBob21lIGRpcmVjdG9yeSAoZGVmYXVsdHMgdG8gb3MuaG9tZWRpcigpOyBpbmplY3RhYmxlIGZvciB0ZXN0cylcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzTnZtUHJlc2VudChob21lID0gaG9tZWRpcigpKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChwbGF0Zm9ybSgpID09PSAnd2luMzInKSByZXR1cm4gZmFsc2U7XG4gIC8vIENoZWNrIGNhbmRpZGF0ZXMgaW4gb3JkZXI6IGVudiB2YXIgb3ZlcnJpZGUg4oaSIGRlZmF1bHQgbG9jYXRpb25cbiAgY29uc3QgY2FuZGlkYXRlcyA9IFtcbiAgICBwcm9jZXNzLmVudi5OVk1fRElSLFxuICAgIGpvaW4oaG9tZSwgJy5udm0nKSxcbiAgXS5maWx0ZXIoQm9vbGVhbikgYXMgc3RyaW5nW107XG4gIGZvciAoY29uc3QgZGlyIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYWNjZXNzKGpvaW4oZGlyLCAnbnZtLnNoJykpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIE5WTSBkZXRlY3RlZCBhdDogJHtkaXJ9YCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHsgLyogdHJ5IG5leHQgY2FuZGlkYXRlICovIH1cbiAgfVxuICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gTlZNIG5vdCBmb3VuZCAoY2hlY2tlZDogJHtjYW5kaWRhdGVzLmpvaW4oJywgJyl9KWApO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIE5WTSBkaXJlY3Rvcnk6IHByb2Nlc3MuZW52Lk5WTV9ESVIgaWYgc2V0LCBvdGhlcndpc2Ugfi8ubnZtLlxuICogVXNlZCB0byBoYXJkY29kZSB0aGUgcGF0aCBpbiB0aGUgZ2VuZXJhdGVkIHdyYXBwZXIgc28gaXQgd29ya3MgZXZlbiB3aGVuXG4gKiBDbGF1ZGUgRGVza3RvcCBkb2VzIG5vdCBzb3VyY2UgdGhlIHVzZXIncyBzaGVsbCBwcm9maWxlLlxuICpcbiAqIHByb2Nlc3MuZW52Lk5WTV9ESVIgaXMgdmFsaWRhdGVkIGJlZm9yZSB1c2UgdG8gcHJldmVudCBzaGVsbCBpbmplY3Rpb24gaW5cbiAqIHRoZSBnZW5lcmF0ZWQgd3JhcHBlciBzY3JpcHQgKG9ubHkgYWJzb2x1dGUgcGF0aHMgd2l0aCBzYWZlIGNoYXJhY3RlcnMgYXJlXG4gKiBhY2NlcHRlZDsgdW5zYWZlIHZhbHVlcyBmYWxsIGJhY2sgdG8gfi8ubnZtKS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU52bURpcihob21lID0gaG9tZWRpcigpKTogc3RyaW5nIHtcbiAgY29uc3QgZW52RGlyID0gcHJvY2Vzcy5lbnYuTlZNX0RJUjtcbiAgaWYgKGVudkRpciAmJiAvXlxcL1tcXHcuL34tXSskLy50ZXN0KGVudkRpcikpIHtcbiAgICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gTlZNIGRpciByZXNvbHZlZCBmcm9tIE5WTV9ESVIgZW52IHZhcjogJHtlbnZEaXJ9YCk7XG4gICAgcmV0dXJuIGVudkRpcjtcbiAgfVxuICBpZiAoZW52RGlyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIE5WTV9ESVIgZW52IHZhciByZWplY3RlZCAodW5zYWZlIHBhdGgpOiAke2VudkRpcn0g4oCUIGZhbGxpbmcgYmFjayB0byB+Ly5udm1gKTtcbiAgfVxuICBjb25zdCBmYWxsYmFjayA9IGpvaW4oaG9tZSwgJy5udm0nKTtcbiAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIE5WTSBkaXIgcmVzb2x2ZWQgdG8gZGVmYXVsdDogJHtmYWxsYmFja31gKTtcbiAgcmV0dXJuIGZhbGxiYWNrO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgfi8uZG9sbGhvdXNlL2Jpbi9kb2xsaG91c2VtY3AtbnZtLnNoIGFuZCByZXR1cm5zIGl0cyBwYXRoLlxuICpcbiAqIFRoZSBOVk0gZGlyZWN0b3J5IGlzIHJlc29sdmVkIGF0IGdlbmVyYXRpb24gdGltZSBhbmQgaGFyZGNvZGVkIGludG8gdGhlXG4gKiBzY3JpcHQuIFRoaXMgaXMgaW50ZW50aW9uYWw6IENsYXVkZSBEZXNrdG9wIGRvZXMgbm90IHNvdXJjZSB0aGUgdXNlcidzXG4gKiBzaGVsbCBwcm9maWxlLCBzbyAkTlZNX0RJUiB3b3VsZCBiZSB1bnNldCB3aGVuIHRoZSB3cmFwcGVyIHJ1bnMuIEJ5XG4gKiBlbWJlZGRpbmcgdGhlIGFic29sdXRlIHBhdGggd2UgZ3VhcmFudGVlIHRoZSBjb3JyZWN0IE5WTSBpcyBmb3VuZC5cbiAqXG4gKiBUaGUgc2NyaXB0IHNvdXJjZXMgTlZNLCB0aGVuIGNoZWNrcyB0aGUgYWN0aXZlIE5vZGUgbWFqb3IgdmVyc2lvbi4gSWYgaXRcbiAqIGlzIGJlbG93IDE4ICh0aGUgRG9sbGhvdXNlTUNQIG1pbmltdW0pLCBpdCB0cmllcyBgbnZtIHVzZSBub2RlYCAoaGlnaGVzdFxuICogaW5zdGFsbGVkKSB0aGVuIGBudm0gdXNlIC0tbHRzYCBhcyBhIGZhbGxiYWNrLiBBIGZpbmFsIHZlcnNpb24gY2hlY2tcbiAqIHdyaXRlcyBhIHdhcm5pbmcgdG8gc3RkZXJyIGlmIHRoZSBub2RlIGlzIHN0aWxsIHRvbyBvbGQg4oCUIHRoYXQgd2FybmluZ1xuICogd2lsbCBhcHBlYXIgaW4gQ2xhdWRlIERlc2t0b3AncyBlcnJvciBsb2cuXG4gKlxuICogQHBhcmFtIGhvbWUgICAgICAgLSBPdmVycmlkZSBob21lIGRpcmVjdG9yeSAoaW5qZWN0YWJsZSBmb3IgdGVzdHMpXG4gKiBAcGFyYW0gbnZtRGlyT3ZlcnJpZGUgLSBPdmVycmlkZSB0aGUgcmVzb2x2ZWQgTlZNIHBhdGggKGluamVjdGFibGUgZm9yIHRlc3RzKVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTnZtTGF1bmNoZXIoaG9tZSA9IGhvbWVkaXIoKSwgbnZtRGlyT3ZlcnJpZGU/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBiaW5EaXIgPSBqb2luKGhvbWUsICcuZG9sbGhvdXNlJywgJ2JpbicpO1xuICBjb25zdCB3cmFwcGVyUGF0aCA9IGpvaW4oYmluRGlyLCAnZG9sbGhvdXNlbWNwLW52bS5zaCcpO1xuICBjb25zdCBudm1EaXIgPSBudm1EaXJPdmVycmlkZSA/PyByZXNvbHZlTnZtRGlyKGhvbWUpO1xuXG4gIGF3YWl0IG1rZGlyKGJpbkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgLy8gU2luZ2xlLWV4cHJlc3Npb24gaGVscGVyIHJldXNlZCB0d2ljZSB0byBnZXQgdGhlIE5vZGUgbWFqb3IgdmVyc2lvbi5cbiAgY29uc3QgZ2V0TWFqb3IgPSAnbm9kZSAtZSBcInByb2Nlc3Muc3Rkb3V0LndyaXRlKFN0cmluZyhwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoXFwnLlxcJylbMF0pKVwiIDI+L2Rldi9udWxsIHx8IGVjaG8gXCIwXCInO1xuXG4gIGNvbnN0IHNjcmlwdCA9IFtcbiAgICAnIyEvYmluL2Jhc2gnLFxuICAgICcjIERvbGxob3VzZU1DUCBOVk0tYXdhcmUgbGF1bmNoZXInLFxuICAgICcjIEF1dG8tZ2VuZXJhdGVkIGJ5IHRoZSBEb2xsaG91c2VNQ1AgaW5zdGFsbGVyLicsXG4gICAgJyMgRW5zdXJlcyB0aGUgY29ycmVjdCBOb2RlLmpzIHZlcnNpb24gaXMgYWN0aXZlIGJlZm9yZSBydW5uaW5nIG5weCwnLFxuICAgICcjIHdvcmtpbmcgYXJvdW5kIGEgQ2xhdWRlIERlc2t0b3AgYnVnIHdoZXJlIE5WTSBQQVRIIG9yZGVyaW5nIGNhdXNlcycsXG4gICAgJyMgbnB4IHRvIGV4ZWN1dGUgdW5kZXIgYW4gb2xkZXIgTm9kZSB2ZXJzaW9uIChlLmcuIHYxMikgZXZlbiB3aGVuIGEnLFxuICAgICcjIG5ld2VyIHZlcnNpb24gaXMgaW5zdGFsbGVkLicsXG4gICAgJyMgU2VlOiBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXIvaXNzdWVzLzE5MDInLFxuICAgICcnLFxuICAgIGBOVk1fRElSPVwiJHtudm1EaXJ9XCJgLFxuICAgICdpZiBbIC1zIFwiJE5WTV9ESVIvbnZtLnNoXCIgXTsgdGhlbicsXG4gICAgJyAgICAjIHNoZWxsY2hlY2sgc291cmNlPS9kZXYvbnVsbCcsXG4gICAgJyAgICAuIFwiJE5WTV9ESVIvbnZtLnNoXCIgMj4vZGV2L251bGwnLFxuICAgICcgICAgIyBJZiB0aGUgYWN0aXZlIE5vZGUgaXMgYmVsb3cgdjE4IChtaW5pbXVtIGZvciBEb2xsaG91c2VNQ1ApLCcsXG4gICAgYCAgICAjIHRyeSAnbm9kZScgYWxpYXMgKGhpZ2hlc3QgaW5zdGFsbGVkKSB0aGVuIExUUyBhcyBhIGZhbGxiYWNrLmAsXG4gICAgYCAgICBNQUpPUj0kKCR7Z2V0TWFqb3J9KWAsXG4gICAgJyAgICBpZiBbIFwiJE1BSk9SXCIgLWx0IDE4IF07IHRoZW4nLFxuICAgICcgICAgICAgIG52bSB1c2Ugbm9kZSAyPi9kZXYvbnVsbCB8fCBudm0gdXNlIC0tbHRzIDI+L2Rldi9udWxsIHx8IHRydWUnLFxuICAgIGAgICAgICAgIE1BSk9SPSQoJHtnZXRNYWpvcn0pYCxcbiAgICAnICAgICAgICBpZiBbIFwiJE1BSk9SXCIgLWx0IDE4IF07IHRoZW4nLFxuICAgICcgICAgICAgICAgICBlY2hvIFwiW0RvbGxob3VzZU1DUF0gV0FSTklORzogTm9kZS5qcyAkTUFKT1IgaXMgYmVsb3cgdGhlIG1pbmltdW0gKDE4KS4gRG9sbGhvdXNlTUNQIG1heSBub3Qgc3RhcnQgY29ycmVjdGx5LlwiID4mMicsXG4gICAgJyAgICAgICAgZmknLFxuICAgICcgICAgZmknLFxuICAgICdmaScsXG4gICAgJycsXG4gICAgJ2V4ZWMgbnB4IFwiJEBcIicsXG4gIF0uam9pbignXFxuJykgKyAnXFxuJztcblxuICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gV3JpdGluZyBOVk0gbGF1bmNoZXIgd3JhcHBlciB0bzogJHt3cmFwcGVyUGF0aH0gKE5WTV9ESVI9JHtudm1EaXJ9KWApO1xuICBhd2FpdCB3cml0ZUZpbGUod3JhcHBlclBhdGgsIHNjcmlwdCwgJ3V0Zi04Jyk7XG4gIGF3YWl0IGNobW9kKHdyYXBwZXJQYXRoLCAwbzc1NSk7XG4gIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBOVk0gbGF1bmNoZXIgd3JhcHBlciB3cml0dGVuIGFuZCBtYWRlIGV4ZWN1dGFibGVgKTtcbiAgcmV0dXJuIHdyYXBwZXJQYXRoO1xufVxuXG4vKipcbiAqIERldGVjdHMgdGhlIGluZGVudGF0aW9uIHVzZWQgaW4gYSBKU09OIHN0cmluZyBzbyB0aGUgcmVzZXJpYWxpc2VkIG91dHB1dFxuICogcHJlc2VydmVzIHRoZSBvcmlnaW5hbCBzdHlsZSAoYXZvaWRzIG5vaXN5IGRpZmZzIGluIHVzZXItbWFpbnRhaW5lZCBjb25maWdzKS5cbiAqIFJldHVybnMgdGhlIHRhYiBjaGFyYWN0ZXIgZm9yIHRhYi1pbmRlbnRlZCBmaWxlcywgb3IgdGhlIGxlYWRpbmctc3BhY2UgY291bnRcbiAqIChtaW5pbXVtIDIpIGZvciBzcGFjZS1pbmRlbnRlZCBmaWxlcy4gRGVmYXVsdHMgdG8gMiB3aGVuIHVuZGV0ZWN0YWJsZS5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0SW5kZW50KHJhdzogc3RyaW5nKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgZm9yIChjb25zdCBsaW5lIG9mIHJhdy5zcGxpdCgnXFxuJykpIHtcbiAgICBpZiAobGluZS5sZW5ndGggPT09IDAgfHwgbGluZS5zdGFydHNXaXRoKCd7JykgfHwgbGluZS5zdGFydHNXaXRoKCd9JykpIGNvbnRpbnVlO1xuICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJ1xcdCcpKSByZXR1cm4gJ1xcdCc7XG4gICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnICcpKSB7XG4gICAgICBjb25zdCBzcGFjZXMgPSBsaW5lLmxlbmd0aCAtIGxpbmUudHJpbVN0YXJ0KCkubGVuZ3RoO1xuICAgICAgaWYgKHNwYWNlcyA+PSAyKSByZXR1cm4gc3BhY2VzO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMjtcbn1cblxuLyoqXG4gKiBQYXRjaGVzIHRoZSBkb2xsaG91c2VtY3AgZW50cnkgaW4gYW4gTUNQIGNsaWVudCdzIEpTT04gY29uZmlnIHRvIHVzZVxuICogdGhlIE5WTS1hd2FyZSBsYXVuY2hlciBpbnN0ZWFkIG9mIGJhcmUgYG5weGAuXG4gKlxuICogT25seSBhY3RzIG9uIEpTT04tZm9ybWF0IGNvbmZpZ3MuIFRPTUwgY29uZmlncyAoY29kZXgpIGFyZSBza2lwcGVkLlxuICogU2lsZW50bHkgbm8tb3BzIGlmIHRoZSBjb25maWcgZmlsZSBpcyBtaXNzaW5nIG9yIHVucmVhZGFibGUuXG4gKlxuICogQHBhcmFtIGNvbmZpZ1BhdGhPdmVycmlkZSAtIFVzZSB0aGlzIHBhdGggaW5zdGVhZCBvZiB0aGUgcGxhdGZvcm0gZGVmYXVsdCAoaW5qZWN0YWJsZSBmb3IgdGVzdHMpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyKGNsaWVudDogc3RyaW5nLCB3cmFwcGVyUGF0aDogc3RyaW5nLCBjb25maWdQYXRoT3ZlcnJpZGU/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IGNvbmZpZ1BhdGhPdmVycmlkZSA/PyBnZXRDb25maWdQYXRoKGNsaWVudCk7XG4gIGlmICghY29uZmlnUGF0aCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyOiBubyBjb25maWcgcGF0aCBmb3IgJHtjbGllbnR9IOKAlCBza2lwcGluZ2ApO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoY29uZmlnUGF0aC5lbmRzV2l0aCgnLnRvbWwnKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyOiBUT01MIGNvbmZpZyBmb3IgJHtjbGllbnR9IOKAlCBza2lwcGluZyAobm90IEpTT04tZm9ybWF0KWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCByYXc6IHN0cmluZztcbiAgdHJ5IHtcbiAgICByYXcgPSBhd2FpdCByZWFkRmlsZShjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuOyAvLyBDb25maWcgbm90IHJlYWRhYmxlIOKAlCBpbnN0YWxsLW1jcCBtYXkgbm90IGhhdmUgd3JpdHRlbiBpdCB5ZXRcbiAgfVxuXG4gIGxldCBwYXJzZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB0cnkge1xuICAgIHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuOyAvLyBNYWxmb3JtZWQgSlNPTiDigJQgZG9uJ3QgdG91Y2ggaXRcbiAgfVxuXG4gIGxldCBwYXRjaGVkID0gZmFsc2U7XG4gIGZvciAoY29uc3Qga2V5IG9mIFsnbWNwU2VydmVycycsICdzZXJ2ZXJzJ10pIHtcbiAgICBjb25zdCBzZWN0aW9uID0gcGFyc2VkW2tleV0gYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgdW5kZWZpbmVkO1xuICAgIGlmIChzZWN0aW9uPy5kb2xsaG91c2VtY3ApIHtcbiAgICAgIHNlY3Rpb24uZG9sbGhvdXNlbWNwLmNvbW1hbmQgPSB3cmFwcGVyUGF0aDtcbiAgICAgIHBhdGNoZWQgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFwYXRjaGVkKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIHBhdGNoQ29uZmlnRm9yTnZtTGF1bmNoZXI6IG5vIGRvbGxob3VzZW1jcCBlbnRyeSBpbiAke2NsaWVudH0gY29uZmlnIOKAlCBub3RoaW5nIHRvIHBhdGNoYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaW5kZW50ID0gZGV0ZWN0SW5kZW50KHJhdyk7XG4gIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyOiB3cml0aW5nICR7Y2xpZW50fSBjb25maWcgKGluZGVudD0ke0pTT04uc3RyaW5naWZ5KGluZGVudCl9KWApO1xuICBhd2FpdCB3cml0ZUZpbGUoY29uZmlnUGF0aCwgSlNPTi5zdHJpbmdpZnkocGFyc2VkLCBudWxsLCBpbmRlbnQpICsgJ1xcbicsICd1dGYtOCcpO1xuICBsb2dnZXIuaW5mbyhgW1NldHVwXSBQYXRjaGVkICR7Y2xpZW50fSBjb25maWcgdG8gdXNlIE5WTS1hd2FyZSBsYXVuY2hlcjogJHt3cmFwcGVyUGF0aH1gKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRNY3BTZXJ2ZXJFbnRyeSh2ZXJzaW9uPzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBjb25zdCB0YWcgPSB2ZXJzaW9uID8gYEAke3ZlcnNpb259YCA6ICdAbGF0ZXN0JztcbiAgcmV0dXJuIHtcbiAgICBjb21tYW5kOiAnbnB4JyxcbiAgICBhcmdzOiBbYEBkb2xsaG91c2VtY3AvbWNwLXNlcnZlciR7dGFnfWBdLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEpzb25NY3BDbGllbnRDb25maWcoXG4gIGNsaWVudDogc3RyaW5nLFxuICB2ZXJzaW9uPzogc3RyaW5nLFxuICBjb25maWdQYXRoT3ZlcnJpZGU/OiBzdHJpbmcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBjb25maWdQYXRoID0gY29uZmlnUGF0aE92ZXJyaWRlID8/IGdldENvbmZpZ1BhdGgoY2xpZW50KTtcbiAgaWYgKCFjb25maWdQYXRoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb25maWcgcGF0aCB1bmtub3duIGZvciBjbGllbnQ6ICR7Y2xpZW50fWApO1xuICB9XG4gIGlmIChjb25maWdQYXRoLmVuZHNXaXRoKCcudG9tbCcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBKU09OIE1DUCBpbnN0YWxsIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFRPTUwgY2xpZW50OiAke2NsaWVudH1gKTtcbiAgfVxuXG4gIGF3YWl0IG1rZGlyKGRpcm5hbWUoY29uZmlnUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGxldCByYXcgPSAnJztcbiAgbGV0IHBhcnNlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgdHJ5IHtcbiAgICByYXcgPSBhd2FpdCByZWFkRmlsZShjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCFpc01pc3NpbmdQYXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwYXJzZSBleGlzdGluZyBjb25maWcgYXQgJHtjb25maWdQYXRofWApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJvb3RLZXkgPSBjbGllbnQgPT09ICd2c2NvZGUnID8gJ3NlcnZlcnMnIDogJ21jcFNlcnZlcnMnO1xuICBjb25zdCBleGlzdGluZ1Jvb3QgPSBwYXJzZWRbcm9vdEtleV07XG4gIGNvbnN0IHJvb3QgPSBleGlzdGluZ1Jvb3QgJiYgdHlwZW9mIGV4aXN0aW5nUm9vdCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZXhpc3RpbmdSb290KVxuICAgID8gZXhpc3RpbmdSb290IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgOiB7fTtcblxuICByb290LmRvbGxob3VzZW1jcCA9IGJ1aWxkTWNwU2VydmVyRW50cnkodmVyc2lvbik7XG4gIHBhcnNlZFtyb290S2V5XSA9IHJvb3Q7XG5cbiAgY29uc3QgaW5kZW50ID0gcmF3ID8gZGV0ZWN0SW5kZW50KHJhdykgOiAyO1xuICBhd2FpdCB3cml0ZUZpbGUoY29uZmlnUGF0aCwgSlNPTi5zdHJpbmdpZnkocGFyc2VkLCBudWxsLCBpbmRlbnQpICsgJ1xcbicsICd1dGYtOCcpO1xuXG4gIHJldHVybiBgSW5zdGFsbGVkIE1DUCBzZXJ2ZXIgXCJkb2xsaG91c2VtY3BcIiBpbiAke2NsaWVudH0gKCR7Y29uZmlnUGF0aH0pYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbExtU3R1ZGlvQ29uZmlnKHZlcnNpb24/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gaW5zdGFsbEpzb25NY3BDbGllbnRDb25maWcoJ2xtc3R1ZGlvJywgdmVyc2lvbik7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgaW5zdGFsbC1tY3AgYmluYXJ5IHBhdGguXG4gKiBVc2VzIHRoZSBsb2NhbCBkZXBlbmRlbmN5IChub2RlX21vZHVsZXMvLmJpbi9pbnN0YWxsLW1jcCkgZmlyc3QsXG4gKiBmYWxscyBiYWNrIHRvIG5weCBpZiBub3QgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVJbnN0YWxsTWNwQmluKCk6IHsgY21kOiBzdHJpbmc7IHByZWZpeEFyZ3M6IHN0cmluZ1tdIH0ge1xuICBjb25zdCBsb2NhbEJpbiA9IGpvaW4oZGlybmFtZShkaXJuYW1lKGRpcm5hbWUoX19kaXJuYW1lKSkpLCAnbm9kZV9tb2R1bGVzJywgJy5iaW4nLCAnaW5zdGFsbC1tY3AnKTtcbiAgdHJ5IHtcbiAgICBhY2Nlc3NTeW5jKGxvY2FsQmluLCBmc0NvbnN0YW50cy5YX09LKTtcbiAgICByZXR1cm4geyBjbWQ6IGxvY2FsQmluLCBwcmVmaXhBcmdzOiBbXSB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyBjbWQ6ICducHgnLCBwcmVmaXhBcmdzOiBbJ2luc3RhbGwtbWNwJ10gfTtcbiAgfVxufVxuXG4vKipcbiAqIFJ1biBpbnN0YWxsLW1jcCB0byBjb25maWd1cmUgYSBzcGVjaWZpYyBNQ1AgY2xpZW50LlxuICpcbiAqIFVzZXMgdGhlIGJ1bmRsZWQgaW5zdGFsbC1tY3AgZGVwZW5kZW5jeSAoTUlULCBodHRwczovL2dpdGh1Yi5jb20vc3VwZXJtZW1vcnlhaS9pbnN0YWxsLW1jcCkuXG4gKiBDb21tYW5kIGFyZ3VtZW50cyBhcmUgZnVsbHkgaGFyZGNvZGVkIOKAlCBubyB1c2VyIGlucHV0IHJlYWNoZXMgdGhlIHNoZWxsLlxuICogZXhlY0ZpbGUgaXMgdXNlZCAobm90IGV4ZWMpIHRvIHByZXZlbnQgc2hlbGwgaW5qZWN0aW9uLlxuICovXG5mdW5jdGlvbiBydW5JbnN0YWxsTWNwKGNsaWVudDogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB7IGNtZCwgcHJlZml4QXJncyB9ID0gcmVzb2x2ZUluc3RhbGxNY3BCaW4oKTtcbiAgICBjb25zdCB0YWcgPSB2ZXJzaW9uID8gYEAke3ZlcnNpb259YCA6ICdAbGF0ZXN0JztcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgLi4ucHJlZml4QXJncyxcbiAgICAgIGBAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXIke3RhZ31gLFxuICAgICAgJy0tY2xpZW50JywgY2xpZW50LFxuICAgICAgJy0tbmFtZScsICdkb2xsaG91c2VtY3AnLFxuICAgICAgJy0teWVzJyxcbiAgICBdO1xuXG4gICAgZXhlY0ZpbGUoY21kLCBhcmdzLCB7IHRpbWVvdXQ6IDMwXzAwMCB9LCAoZXJyLCBzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKHN0ZGVyciB8fCBlcnIubWVzc2FnZSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKHN0ZG91dCB8fCAnSW5zdGFsbGF0aW9uIGNvbXBsZXRlZC4nKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXX0=
1152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBSb3V0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViL3JvdXRlcy9zZXR1cFJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUdILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsSUFBSSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxLQUFLLElBQUksU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRS9DLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxxQkFBcUIsRUFBb0MsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV2SSxNQUFNLFdBQVcsR0FBRyx5QkFBeUIsQ0FBQztBQUM5QyxNQUFNLGtCQUFrQixHQUFHLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsU0FBUyxrQkFBa0IsQ0FBQyxLQUFjO0lBQ3hDLE9BQU8sT0FBTyxDQUNaLEtBQUs7V0FDRixPQUFPLEtBQUssS0FBSyxRQUFRO1dBQ3pCLE1BQU0sSUFBSSxLQUFLO1dBQ2QsS0FBMkIsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUNsRCxDQUFDO0FBQ0osQ0FBQztBQUVELCtFQUErRTtBQUMvRSxrRkFBa0Y7QUFDbEYsNEVBQTRFO0FBQzVFLHlFQUF5RTtBQUN6RSxtRkFBbUY7QUFDbkYsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsSUFBSSxpREFBaUQsQ0FBQztBQUU3Ryx3REFBd0Q7QUFDeEQsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDOUIsUUFBUTtJQUNSLGFBQWE7SUFDYixRQUFRO0lBQ1IsUUFBUTtJQUNSLE9BQU87SUFDUCxXQUFXO0lBQ1gsVUFBVTtJQUNWLE9BQU87SUFDUCxTQUFTO0lBQ1QsWUFBWTtJQUNaLE9BQU87SUFDUCxLQUFLO0lBQ0wsTUFBTTtJQUNOLE9BQU87SUFDUCxVQUFVO0NBQ1gsQ0FBQyxDQUFDO0FBa0JILE1BQU0sb0JBQW9CLEdBQXNDO0lBQzlELFFBQVEsRUFBRSxhQUFhO0lBQ3ZCLGFBQWEsRUFBRSxhQUFhO0lBQzVCLFFBQVEsRUFBRSxnQkFBZ0I7SUFDMUIsT0FBTyxFQUFFLFVBQVU7SUFDbkIsVUFBVSxFQUFFLGdCQUFnQjtJQUM1QixVQUFVLEVBQUUsVUFBVTtJQUN0QixZQUFZLEVBQUUsZ0JBQWdCO0lBQzlCLE9BQU8sRUFBRSxnQkFBZ0I7Q0FDMUIsQ0FBQztBQUVGLHlEQUF5RDtBQUN6RCxNQUFNLHdCQUF3QixHQUF3QixJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUV4Rix3Q0FBd0M7QUFDeEMsTUFBTSxjQUFjLEdBQUcsSUFBSSx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFL0Q7OztHQUdHO0FBQ0gsU0FBUyxhQUFhLENBQUMsTUFBYztJQUNuQyxNQUFNLElBQUksR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUN2QixNQUFNLElBQUksR0FBRyxRQUFRLEVBQUUsQ0FBQztJQUV4QixNQUFNLEtBQUssR0FBa0Q7UUFDM0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUNiLElBQUksSUFBSSxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztZQUNuSCxJQUFJLElBQUksS0FBSyxPQUFPO2dCQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1lBQ25JLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLDRCQUE0QixDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUNELGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQztRQUMvQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDO1FBQ2pELFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLENBQUM7UUFDdkUsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUNaLElBQUksSUFBSSxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxVQUFVLEVBQUUseUJBQXlCLENBQUMsQ0FBQztZQUM3SyxJQUFJLElBQUksS0FBSyxPQUFPO2dCQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLFVBQVUsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBQzdMLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsVUFBVSxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDakksQ0FBQztRQUNELFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUM7UUFDckQsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQztRQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDO0tBQ25ELENBQUM7SUFFRixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQyxDQUFDO0lBQ25ELE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsWUFBWSxDQUFDLFFBQWdCO0lBQ3BDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxJQUFJLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFDeEIsSUFBSSxHQUFXLENBQUM7UUFDaEIsSUFBSSxJQUFjLENBQUM7UUFFbkIsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEIsR0FBRyxHQUFHLE1BQU0sQ0FBQztZQUNiLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxQixDQUFDO2FBQU0sSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDNUIsR0FBRyxHQUFHLFNBQVMsQ0FBQztZQUNoQixJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQixDQUFDO2FBQU0sQ0FBQztZQUNOLEdBQUcsR0FBRyxVQUFVLENBQUM7WUFDakIsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUVELFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDL0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsMEJBQTBCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELE9BQU87WUFDVCxDQUFDO1lBQ0QsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCx3REFBd0Q7QUFDeEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMvQixRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsT0FBTztDQUMxRixDQUFDLENBQUM7QUFZSCwrREFBK0Q7QUFDL0QsU0FBUyxlQUFlLENBQUMsR0FBVztJQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQTRCLENBQUM7UUFDekQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDL0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLENBQUM7UUFDMUUsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQzlELEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLENBQUM7UUFDMUUsQ0FBQztRQUVELE1BQU0sQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLEdBQUcsYUFBYSxDQUFDO1FBQ2pELE1BQU0sVUFBVSxHQUE0QixFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQzNELElBQUksWUFBWSxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNyRixNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLFlBQXFELENBQUM7WUFDaEYsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRO2dCQUFFLFVBQVUsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQzlELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQUUsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEQsQ0FBQztRQUVELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQ2xGLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsQ0FBQztJQUMxRSxDQUFDO0FBQ0gsQ0FBQztBQUVELCtEQUErRDtBQUMvRCxTQUFTLGVBQWUsQ0FBQyxHQUFXO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzVDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDO1lBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUN0RixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDOUIsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSxLQUFLLFVBQVUsWUFBWSxDQUFDLE1BQWM7SUFDeEMsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxVQUFVO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFN0IsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEQsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsY0FBYyxDQUNyQixHQUFZLEVBQUUsR0FBYSxFQUFFLFVBQXVCO0lBRXBELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBMkIsQ0FBQztJQUNuRCxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLGdDQUFnQyxFQUFFLENBQUMsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNoQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNuQixLQUFLLEVBQUUsdUJBQXVCLE1BQU0sRUFBRTtZQUN0QyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDbEMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVELFNBQVMsOEJBQThCLENBQUMsSUFBYTtJQUNuRCxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBMkMsQ0FBQztJQUNwRixNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdEcsSUFBSSxpQkFBaUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7UUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBRSx1REFBdUQsRUFBRSxDQUFDO0lBQzVFLENBQUM7SUFFRCxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdEcsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsSUFBSSx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxpQkFBaUIsS0FBSyxRQUFRO1FBQzdILENBQUMsQ0FBQyxpQkFBaUI7UUFDbkIsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO0lBRXRCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLE1BQTREO0lBQzFGLElBQUksTUFBTSxLQUFLLFNBQVM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN0QyxJQUFJLE1BQU0sS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdEMsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsd0VBQXdFO0FBRXhFLE1BQU0sYUFBYSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEMsTUFBTSw2QkFBNkIsR0FBRyxFQUFFLENBQUM7QUFDekMsTUFBTSx3QkFBd0IsR0FBRyw2QkFBNkIsR0FBRyxhQUFhLENBQUM7QUFDL0UsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFDcEMsTUFBTSx5QkFBeUIsR0FBRyxLQUFLLENBQUM7QUFDeEMsTUFBTSwwQkFBMEIsR0FBRyx5REFBeUQsQ0FBQztBQUU3RixxRUFBcUU7QUFDckUsU0FBUyx3QkFBd0I7SUFDL0IsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxnREFBZ0Q7QUFDaEQsU0FBUyxhQUFhLENBQUMsU0FBaUI7SUFDdEMsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEQsQ0FBQztBQUVELHdFQUF3RTtBQUV4RSxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUNwRixNQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN0RixpRkFBaUY7QUFDakYsNEVBQTRFO0FBQzVFLE1BQU0sYUFBYSxHQUFHLDRDQUE0QyxDQUFDO0FBRW5FLDBFQUEwRTtBQUMxRSxTQUFTLFFBQVEsQ0FBQyxHQUFZLEVBQUUsTUFBYztJQUM1QyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUM3RCxPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRCw0REFBNEQ7QUFDNUQsU0FBUyx3QkFBd0IsQ0FBQyxJQUE2QjtJQUM3RCxNQUFNLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQzlDLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEMsT0FBTyxrRUFBa0UsQ0FBQztJQUM1RSxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyRCxPQUFPLHNDQUFzQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMzQixPQUFPLDZFQUE2RSxDQUFDO0lBQ3ZGLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxnREFBZ0Q7QUFDaEQsU0FBUyw0QkFBNEIsQ0FBQyxJQUE2QjtJQUNqRSxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQzFELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQzdCLE9BQU8sZ0VBQWdFLENBQUM7SUFDMUUsQ0FBQztJQUNELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyQixPQUFPLHlEQUF5RCxDQUFDO0lBQ25FLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCwyQ0FBMkM7QUFDM0MsU0FBUyx3QkFBd0IsQ0FBQyxJQUE2QjtJQUM3RCxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDcEQsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxZQUFzQixDQUFDLEVBQUUsQ0FBQztRQUN2RSxPQUFPLDhDQUE4QyxDQUFDLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUM5RixDQUFDO0lBQ0QsSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUMzRSxPQUFPLGtEQUFrRCxDQUFDO0lBQzVELENBQUM7SUFDRCxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQy9ELE9BQU8sOENBQThDLENBQUM7SUFDeEQsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELDBFQUEwRTtBQUMxRSxTQUFTLG9CQUFvQixDQUFDLElBQTZCO0lBQ3pELE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDdEIsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFjLENBQUMsRUFBRSxDQUFDO1FBQ3RELE9BQU8seUNBQXlDLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3hGLENBQUM7SUFDRCxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUNwQixNQUFNLGVBQWUsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLGVBQWU7WUFBRSxPQUFPLGVBQWUsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsSUFBSSxJQUFJLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztRQUMvQixNQUFNLFNBQVMsR0FBRyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxJQUFJLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBSSxJQUFJLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztRQUMvQixNQUFNLGVBQWUsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLGVBQWU7WUFBRSxPQUFPLGVBQWUsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsc0RBQXNEO0FBQ3RELFNBQVMsZ0JBQWdCLENBQUMsSUFBNkI7SUFDckQsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDakUsTUFBTSxJQUFJLEdBQTRCLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDL0MsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLElBQUksS0FBSyxpQkFBaUIsRUFBRSxDQUFDO1FBQy9CLElBQUksWUFBWTtZQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ25ELElBQUksV0FBVztZQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvRCxJQUFJLE9BQU87WUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELHFFQUFxRTtBQUNyRSxLQUFLLFVBQVUsMEJBQTBCLENBQUMsV0FBb0M7SUFDNUUsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsbUJBQW1CLEVBQUU7UUFDL0MsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLHlCQUF5QjtRQUMzRCxPQUFPLEVBQUUsQ0FBQztRQUNWLGFBQWEsRUFBRSxJQUFJO0tBQ3BCLENBQUMsQ0FBQztJQUNILElBQUksU0FBaUIsQ0FBQztJQUN0QixJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzlELFNBQVMsR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFJLFdBQVcsQ0FBQyxTQUFvQixJQUFJLFlBQVksQ0FBQztJQUNwRSxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ2QsVUFBVSxFQUFFLFNBQVM7UUFDckIsS0FBSyxFQUFFLG9CQUFvQjtRQUMzQixVQUFVLEVBQUU7WUFDVixJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7WUFDdEIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLO1lBQ3hCLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLGNBQWMsRUFBRSxlQUFlO1lBQy9CLEVBQUUsRUFBRSxRQUFRLEVBQUU7WUFDZCxHQUFHLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxnQkFBZ0I7YUFDaEQsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsR0FBRyxDQUFDLFNBQVMsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixvQkFBb0IsRUFBRSxXQUFXLENBQUMsb0JBQW9CO2dCQUN0RCx5QkFBeUIsRUFBRSxXQUFXLENBQUMsb0JBQW9CO29CQUN6RCxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBRSxXQUFXLENBQUMsb0JBQStCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQy9FLHFCQUFxQixFQUFFLFdBQVcsQ0FBQyxxQkFBcUI7YUFDekQsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxhQUFhLEVBQUUsV0FBVyxDQUFDLFlBQVk7Z0JBQ3ZDLFlBQVksRUFBRSxXQUFXLENBQUMsV0FBVztnQkFDckMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxPQUFPO2FBQzlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNSO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQVMsNkJBQTZCLENBQ3BDLFdBQW9DLEVBQ3BDLGdCQUF3QixFQUN4QixVQUFrQjtJQUVsQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDcEIsS0FBSyxFQUFFLG9CQUFvQjtRQUMzQixXQUFXLEVBQUUsVUFBVTtRQUN2QixVQUFVLEVBQUU7WUFDVixJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7WUFDdEIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLO1lBQ3hCLFVBQVUsRUFBRSxjQUFjO1lBQzFCLGlCQUFpQixFQUFFLGdCQUFnQjtZQUNuQyxjQUFjLEVBQUUsZUFBZTtZQUMvQixFQUFFLEVBQUUsUUFBUSxFQUFFO1NBQ2Y7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsS0FBSyxVQUFVLGtDQUFrQyxDQUMvQyxXQUFvQyxFQUNwQyxnQkFBd0IsRUFDeEIsVUFBa0I7SUFFbEIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsSUFBSSwwQkFBMEIsQ0FBQztJQUN6RixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixJQUFJLEVBQUUsQ0FBQztJQUN2RSxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxTQUFTLEVBQUU7UUFDdEMsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUU7WUFDUCxjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUM5RDtRQUNELElBQUksRUFBRSw2QkFBNkIsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDO1FBQzlFLE1BQU0sRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDO0tBQ3ZELENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFPakM7SUFXQyxNQUFNLFNBQVMsR0FBRyxJQUFJLEVBQUUsY0FBYyxJQUFJLGFBQWEsQ0FBQztJQUN4RCxNQUFNLHVCQUF1QixHQUFHLElBQUksRUFBRSxzQkFBc0IsSUFBSSxxQkFBcUIsQ0FBQztJQUN0RixNQUFNLGFBQWEsR0FBRyxJQUFJLEVBQUUsY0FBYyxJQUFJLEtBQUssQ0FBQztJQUNwRCx1RUFBdUU7SUFDdkUsTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLElBQWEsRUFBRSxHQUFhLEVBQWlCLEVBQUU7UUFDMUUsTUFBTSxPQUFPLEdBQUc7WUFDZCxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ3hDLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQzFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ2hDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQzlCLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3BDLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO1lBQ3JDLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQ3hDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO1NBQy9CLENBQUM7UUFFRixNQUFNLE9BQU8sR0FBNEIsRUFBRSxDQUFDO1FBQzVDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ25ELE1BQU0sU0FBUyxHQUFHLE1BQU0sWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxNQUFNLEdBQTRCO29CQUN0QyxJQUFJO29CQUNKLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDNUMsR0FBRyxTQUFTO2lCQUNiLENBQUM7Z0JBQ0YsSUFBSSxFQUFFLEtBQUssYUFBYSxJQUFJLEVBQUUsS0FBSyxRQUFRLElBQUksRUFBRSxLQUFLLFVBQVUsSUFBSSxFQUFFLEtBQUssWUFBWSxJQUFJLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDMUcsTUFBTSxVQUFVLEdBQUcsTUFBTSw0QkFBNEIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ3JFLE1BQU0sQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztvQkFDNUMsTUFBTSxDQUFDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUM7Z0JBQ3hELENBQUM7Z0JBQ0QsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUN2QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVKLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0lBRUYsdUVBQXVFO0lBQ3ZFLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxFQUFFLEdBQVksRUFBRSxHQUFhLEVBQWlCLEVBQUU7UUFDN0UsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxPQUFPO1FBRTlCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSw0QkFBNEIsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEYsT0FBTztRQUNULENBQUM7UUFFRCw2REFBNkQ7UUFDN0QsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLElBQUksQ0FBQztnQkFDSCxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3pELE1BQU0sU0FBUyxDQUFDLFVBQVUsRUFBRSxPQUFPLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sR0FBRyxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsaUNBQWlDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDeEUsT0FBTztZQUNULENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsZ0JBQWdCLEtBQUssVUFBVSxFQUFFLENBQUMsQ0FBQztRQUU3RSxJQUFJLENBQUM7WUFDSCxNQUFNLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sT0FBTyxHQUFHLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM3RSxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsdUVBQXVFO0lBQ3ZFLE1BQU0sY0FBYyxHQUFHLEtBQUssRUFBRSxHQUFZLEVBQUUsR0FBYSxFQUFpQixFQUFFO1FBQzFFLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNuRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxtREFBbUQsRUFBRSxDQUFDLENBQUM7WUFDckYsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxPQUFPO1FBRTlCLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsR0FBRyw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0UsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNoQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNsRSxNQUFNLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLGVBQWUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBRXBGLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLGdCQUFnQixLQUFLLFVBQVU7Z0JBQzVDLENBQUMsQ0FBQyxNQUFNLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDO2dCQUMvQyxDQUFDLENBQUMsTUFBTSxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUN4RCxNQUFNLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFFckUsaURBQWlEO1lBQ2pELGlFQUFpRTtZQUNqRSx5REFBeUQ7WUFDekQsTUFBTSxTQUFTLEdBQUcsTUFBTSx3QkFBd0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBRW5FLE1BQU0sb0JBQW9CLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFL0QsTUFBTSxXQUFXLEdBQUcsTUFBTSx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBRXBFLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ1AsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsTUFBTTtnQkFDTixNQUFNLEVBQUUsZ0JBQWdCO2dCQUN4QixPQUFPLEVBQUUsZ0JBQWdCLElBQUksUUFBUTtnQkFDckMsb0JBQW9CO2dCQUNwQixXQUFXO2FBQ1osQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixNQUFNLE9BQU8sR0FBRyxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakUsTUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsZ0JBQWdCLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMxRSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRix3RUFBd0U7SUFDeEUsTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUFFLElBQWEsRUFBRSxHQUFhLEVBQWlCLEVBQUU7UUFDM0UsTUFBTSxLQUFLLEdBQUc7WUFDWixPQUFPLEVBQUUsZUFBZTtZQUN4QixPQUFPLEVBQUUsc0JBQXNCLFdBQVcsdUJBQXVCLGVBQWUsaUJBQWlCLGVBQWUsT0FBTztTQUN4SCxDQUFDO1FBRUYsNkNBQTZDO1FBQzdDLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUM7WUFDSCxNQUFNLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxnQ0FBZ0MsV0FBVyxrQkFBa0IsRUFBRTtnQkFDdkYsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLDZCQUE2QixFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRTtnQkFDeEYsTUFBTSxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2FBQ2xDLENBQUMsQ0FBQztZQUNILElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNiLE1BQU0sT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksRUFBeUYsQ0FBQztnQkFDMUgsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzVFLE1BQU0sR0FBRztvQkFDUCxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0I7d0JBQ3RDLHNCQUFzQixXQUFXLHNCQUFzQixPQUFPLENBQUMsUUFBUSxpQkFBaUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPO2lCQUNwSSxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCw4Q0FBOEM7UUFDaEQsQ0FBQztRQUVELEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDUCxPQUFPLEVBQUUsS0FBSztZQUNkLE1BQU07WUFDTixRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsT0FBTztTQUMzQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRix1RUFBdUU7SUFDdkUsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLEVBQUUsSUFBYSxFQUFFLEdBQWEsRUFBaUIsRUFBRTtRQUNoRix1REFBdUQ7UUFDdkQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxLQUFLLEdBQUcsTUFBTSxLQUFLLENBQUMsZ0NBQWdDLFdBQVcsa0JBQWtCLEVBQUU7Z0JBQ3ZGLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSw2QkFBNkIsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUU7Z0JBQ3hGLE1BQU0sRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQzthQUNsQyxDQUFDLENBQUM7WUFDSCxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDYixNQUFNLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQXlGLENBQUM7Z0JBQzFILE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUM1RSxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNkLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUM7b0JBQzdDLE9BQU87Z0JBQ1QsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1Asa0NBQWtDO1FBQ3BDLENBQUM7UUFFRCwrQ0FBK0M7UUFDL0MsTUFBTSxHQUFHLEdBQUcsc0JBQXNCLFdBQVcsdUJBQXVCLGVBQWUsaUJBQWlCLGVBQWUsT0FBTyxDQUFDO1FBQzNILEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0lBRUYsd0VBQXdFO0lBQ3hFLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztJQUV4RSxLQUFLLFVBQVUsV0FBVztRQUN4QixJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN2RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLFVBQVUsWUFBWSxDQUFDLElBQTZCO1FBQ3ZELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMxQyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0QyxNQUFNLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLEVBQUUsSUFBYSxFQUFFLEdBQWEsRUFBaUIsRUFBRTtRQUM5RSxNQUFNLE9BQU8sR0FBRyxNQUFNLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLGdEQUFnRDtRQUNoRCxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxHQUFHLGFBQWEsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUMvRixHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFCLENBQUMsQ0FBQztJQUVGLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxvQkFBb0I7SUFFeEYsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLEVBQUUsR0FBWSxFQUFFLEdBQWEsRUFBaUIsRUFBRTtRQUM3RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNyQyxlQUFlLENBQUMsZ0JBQWdCLENBQUM7Z0JBQy9CLElBQUksRUFBRSxxQkFBcUI7Z0JBQzNCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixNQUFNLEVBQUUsK0JBQStCO2dCQUN2QyxPQUFPLEVBQUUsa0RBQWtEO2FBQzVELENBQUMsQ0FBQztZQUNILEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLDBEQUEwRCxFQUFFLENBQUMsQ0FBQztZQUM1RixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzVCLE1BQU0sZUFBZSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztZQUNqRCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQztZQUNILElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDaEMscURBQXFEO2dCQUNyRCxXQUFXLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztnQkFDOUIsTUFBTSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdURBQXVELENBQUMsQ0FBQztnQkFDckUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQ2xELE9BQU87WUFDVCxDQUFDO1lBRUQsZ0VBQWdFO1lBQ2hFLE1BQU0sSUFBSSxHQUFHLHdCQUF3QixFQUFFLENBQUM7WUFDeEMsV0FBVyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDL0IsV0FBVyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUNwQyxXQUFXLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLHdCQUF3QixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0YsV0FBVyxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQztZQUNyQyxXQUFXLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMvRCxNQUFNLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUVoQyxNQUFNLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxXQUFXLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBRWhHLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsTUFBTSxFQUFFLCtCQUErQjtnQkFDdkMsT0FBTyxFQUFFLG1DQUFtQyxXQUFXLENBQUMsSUFBSSxFQUFFO2dCQUM5RCxjQUFjLEVBQUU7b0JBQ2QsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJO29CQUN0QixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7aUJBQ3pCO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsbUVBQW1FO1lBQ25FLHVFQUF1RTtZQUN2RSw0Q0FBNEM7WUFDNUMsSUFBSSxDQUFDO2dCQUNILE1BQU0sa0NBQWtDLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO2dCQUNuRixNQUFNLENBQUMsSUFBSSxDQUFDLHdEQUF3RCxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMzRixDQUFDO1lBQUMsT0FBTyxXQUFXLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyx3RUFBd0UsV0FBVyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsSyxDQUFDO1lBRUQsc0VBQXNFO1lBQ3RFLDBCQUEwQixDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FDckcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQzdHLENBQUM7WUFFRiwyQ0FBMkM7WUFDM0MsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLEVBQUUsR0FBRyxVQUFVLEVBQUUsR0FBRyxXQUFXLENBQUM7WUFDdEYsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDMUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixNQUFNLGlCQUFpQixHQUFHLElBQUksd0JBQXdCLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsb0JBQW9CO0lBRXZGLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxFQUFFLEdBQVksRUFBRSxHQUFhLEVBQWlCLEVBQUU7UUFDaEYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDcEMsZUFBZSxDQUFDLGdCQUFnQixDQUFDO2dCQUMvQixJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixRQUFRLEVBQUUsUUFBUTtnQkFDbEIsTUFBTSxFQUFFLGtDQUFrQztnQkFDMUMsT0FBTyxFQUFFLHVEQUF1RDthQUNqRSxDQUFDLENBQUM7WUFDSCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSwrREFBK0QsRUFBRSxDQUFDLENBQUM7WUFDakcsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDL0QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsZ0RBQWdELEVBQUUsQ0FBQyxDQUFDO1lBQ2xGLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsd0VBQXdFLEVBQUUsQ0FBQyxDQUFDO1lBQzFHLE9BQU87UUFDVCxDQUFDO1FBRUQsZUFBZTtRQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxrQkFBNEIsQ0FBQyxFQUFFLENBQUM7WUFDdkYsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDM0IsTUFBTSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsb0ZBQW9GLEVBQUUsQ0FBQyxDQUFDO1lBQ3RILE9BQU87UUFDVCxDQUFDO1FBRUQscUJBQXFCO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLENBQUUsT0FBTyxDQUFDLG9CQUErQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyRSxJQUFJLFFBQVEsR0FBRyx5QkFBeUIsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1lBQzNCLE1BQU0sWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVCLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLE1BQU0sRUFBRSxrQ0FBa0M7Z0JBQzFDLE9BQU8sRUFBRSwyQ0FBMkMsT0FBTyxDQUFDLEtBQUssRUFBRTthQUNwRSxDQUFDLENBQUM7WUFDSCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSwrRUFBK0UsRUFBRSxDQUFDLENBQUM7WUFDakgsT0FBTztRQUNULENBQUM7UUFFRCxnQkFBZ0I7UUFDaEIsSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdEMsT0FBTyxDQUFDLG9CQUFvQixHQUFHLFFBQVEsQ0FBQztZQUN4QyxNQUFNLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QixNQUFNLFNBQVMsR0FBRyx5QkFBeUIsR0FBRyxRQUFRLENBQUM7WUFDdkQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsZ0NBQWdDLFNBQVMsV0FBVyxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUM3SCxPQUFPO1FBQ1QsQ0FBQztRQUVELHFDQUFxQztRQUNyQyxNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyx1QkFBNkMsQ0FBQztRQUMxRSxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzlGLE1BQU0sWUFBWSxHQUFHLENBQUUsT0FBTyxDQUFDLG9CQUErQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6RSxPQUFPLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztRQUMxQixPQUFPLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUNoQyxPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztRQUNoQyxPQUFPLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztRQUNsQyxPQUFPLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztRQUNwQyxPQUFPLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztRQUN2QyxNQUFNLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU1QixNQUFNLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxLQUFLLE9BQU8sY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxZQUFZLGFBQWEsQ0FBQyxDQUFDO1FBRWhNLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztZQUMvQixJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsTUFBTSxFQUFFLGtDQUFrQztZQUMxQyxPQUFPLEVBQUUsK0NBQStDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDdEUsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUU7U0FDN0QsQ0FBQyxDQUFDO1FBRUgsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQztZQUNILE1BQU0sMEJBQTBCLENBQUM7Z0JBQy9CLEdBQUcsT0FBTztnQkFDVixTQUFTLEVBQUUsWUFBWTtnQkFDdkIsb0JBQW9CLEVBQUUsY0FBYztnQkFDcEMscUJBQXFCLEVBQUUsWUFBWTtnQkFDbkMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUzthQUNyRSxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLHFEQUFxRCxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNuRixDQUFDO1FBQUMsT0FBTyxZQUFZLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxZQUFZLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pJLENBQUM7UUFFRCxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLEVBQUUsR0FBRyxhQUFhLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDN0csR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQyxDQUFDO0lBRUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLHdCQUF3QixDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtJQUU5RixNQUFNLHlCQUF5QixHQUFHLEtBQUssRUFBRSxJQUFhLEVBQUUsR0FBYSxFQUFpQixFQUFFO1FBQ3RGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLDZDQUE2QyxFQUFFLENBQUMsQ0FBQztZQUMvRSxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sV0FBVyxFQUFFLENBQUM7UUFDcEMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLGtDQUFrQyxFQUFFLENBQUMsQ0FBQztZQUNwRSxPQUFPO1FBQ1QsQ0FBQztRQUVELDhCQUE4QjtRQUM5QixNQUFNLElBQUksR0FBRyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQzNCLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDaEMsT0FBTyxDQUFDLGtCQUFrQixHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNGLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUM7UUFDakMsTUFBTSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUIsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQztZQUNILE1BQU0sa0NBQWtDLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztZQUN6RSxNQUFNLENBQUMsSUFBSSxDQUFDLHlEQUF5RCxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBQUMsT0FBTyxXQUFXLEVBQUUsQ0FBQztZQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxXQUFXLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hJLENBQUM7UUFFRCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsc0RBQXNELEVBQUUsQ0FBQyxDQUFDO0lBQy9GLENBQUMsQ0FBQztJQUVGLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSx5QkFBeUIsRUFBRSxDQUFDO0FBQzFMLENBQUM7QUFFRCxnRkFBZ0Y7QUFFaEY7Ozs7R0FJRztBQUNILFNBQVMsdUJBQXVCLENBQUMsS0FBYSxFQUFFLFVBQW1DO0lBQ2pGLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLG1CQUFtQixFQUFFO1FBQy9DLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSx5QkFBeUI7UUFDM0QsT0FBTyxFQUFFLENBQUM7UUFDVixhQUFhLEVBQUUsSUFBSTtLQUNwQixDQUFDLENBQUM7SUFDSCxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsRUFBRSxPQUFPLENBQUM7U0FDOUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3JCLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUM7U0FDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ2hCLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzlELE9BQU8sT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUMsQ0FBQztTQUNELEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBb0MsQ0FBQyxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQWVELHVFQUF1RTtBQUN2RSxNQUFNLG1CQUFtQixHQUFHO0lBQzFCLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsWUFBWTtDQUMvRCxDQUFDO0FBRVg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSx3QkFBd0IsQ0FBQyxNQUFjLEVBQUUsSUFBSSxHQUFHLE9BQU8sRUFBRTtJQUM3RSxNQUFNLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUMsOERBQThELE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDckYsdUJBQXVCLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6RixPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxNQUFNLFdBQVcsR0FBRyxNQUFNLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELE1BQU0seUJBQXlCLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxJQUFJLENBQUMsMENBQTBDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDaEUsdUJBQXVCLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsRixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0RBQWtELEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEgsdUJBQXVCLENBQUMscUJBQXFCLEVBQUU7WUFDN0MsTUFBTTtZQUNOLFFBQVEsRUFBRSxRQUFRLEVBQUU7WUFDcEIsS0FBSyxFQUFFLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7U0FDeEQsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSwwQkFBMEIsQ0FDOUMsSUFBSSxHQUFHLE9BQU8sRUFBRSxFQUNoQixxQkFBd0QsYUFBYTtJQUVyRSxJQUFJLFFBQVEsRUFBRSxLQUFLLE9BQU87UUFBRSxPQUFPO0lBQ25DLE1BQU0sQ0FBQyxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztJQUN6RSxJQUFJLENBQUMsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM5QixNQUFNLENBQUMsS0FBSyxDQUFDLDBFQUEwRSxDQUFDLENBQUM7UUFDekYsT0FBTztJQUNULENBQUM7SUFFRCxJQUFJLFdBQW1CLENBQUM7SUFDeEIsSUFBSSxDQUFDO1FBQ0gsV0FBVyxHQUFHLE1BQU0saUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLDBEQUEwRCxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFILE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUN0QixtQkFBbUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDL0IsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLDRDQUE0QztRQUN2RixPQUFPLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDO2FBQzlELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUMsK0NBQStDLE1BQU0sS0FBSyxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUMxSCxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsOENBQThDLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQUMsSUFBSSxHQUFHLE9BQU8sRUFBRTtJQUNqRCxJQUFJLFFBQVEsRUFBRSxLQUFLLE9BQU87UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN6QyxpRUFBaUU7SUFDakUsTUFBTSxVQUFVLEdBQUc7UUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPO1FBQ25CLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO0tBQ25CLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBYSxDQUFDO0lBQzlCLEtBQUssTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDaEQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsTUFBTSxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxJQUFJLEdBQUcsT0FBTyxFQUFFO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQ25DLElBQUksTUFBTSxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMzQyxNQUFNLENBQUMsS0FBSyxDQUFDLGtEQUFrRCxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsTUFBTSxDQUFDLEtBQUssQ0FBQyxtREFBbUQsTUFBTSwyQkFBMkIsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDakUsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsT0FBTyxFQUFFLEVBQUUsY0FBdUI7SUFDL0UsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sTUFBTSxHQUFHLGNBQWMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFckQsTUFBTSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFekMsdUVBQXVFO0lBQ3ZFLE1BQU0sUUFBUSxHQUFHLHVHQUF1RyxDQUFDO0lBRXpILE1BQU0sTUFBTSxHQUFHO1FBQ2IsYUFBYTtRQUNiLG1DQUFtQztRQUNuQyxpREFBaUQ7UUFDakQscUVBQXFFO1FBQ3JFLHNFQUFzRTtRQUN0RSxxRUFBcUU7UUFDckUsK0JBQStCO1FBQy9CLCtEQUErRDtRQUMvRCxFQUFFO1FBQ0YsWUFBWSxNQUFNLEdBQUc7UUFDckIsbUNBQW1DO1FBQ25DLG1DQUFtQztRQUNuQyxxQ0FBcUM7UUFDckMsbUVBQW1FO1FBQ25FLG9FQUFvRTtRQUNwRSxlQUFlLFFBQVEsR0FBRztRQUMxQixrQ0FBa0M7UUFDbEMsdUVBQXVFO1FBQ3ZFLG1CQUFtQixRQUFRLEdBQUc7UUFDOUIsc0NBQXNDO1FBQ3RDLGdJQUFnSTtRQUNoSSxZQUFZO1FBQ1osUUFBUTtRQUNSLElBQUk7UUFDSixFQUFFO1FBQ0YsZUFBZTtLQUNoQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7SUFFcEIsTUFBTSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsV0FBVyxhQUFhLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDNUYsTUFBTSxTQUFTLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QyxNQUFNLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsTUFBTSxDQUFDLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO0lBQ3pFLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsWUFBWSxDQUFDLEdBQVc7SUFDL0IsS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQUUsU0FBUztRQUNoRixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ3JELElBQUksTUFBTSxJQUFJLENBQUM7Z0JBQUUsT0FBTyxNQUFNLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUseUJBQXlCLENBQUMsTUFBYyxFQUFFLFdBQW1CLEVBQUUsa0JBQTJCO0lBQzlHLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsTUFBTSxDQUFDLEtBQUssQ0FBQyx5REFBeUQsTUFBTSxhQUFhLENBQUMsQ0FBQztRQUMzRixPQUFPO0lBQ1QsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0RBQXNELE1BQU0sK0JBQStCLENBQUMsQ0FBQztRQUMxRyxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksR0FBVyxDQUFDO0lBQ2hCLElBQUksQ0FBQztRQUNILEdBQUcsR0FBRyxNQUFNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sQ0FBQyxnRUFBZ0U7SUFDMUUsQ0FBQztJQUVELElBQUksTUFBK0IsQ0FBQztJQUNwQyxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQTRCLENBQUM7SUFDdEQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sQ0FBQyxrQ0FBa0M7SUFDNUMsQ0FBQztJQUVELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNwQixLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDNUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBd0QsQ0FBQztRQUNuRixJQUFJLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUM7WUFDM0MsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNmLE1BQU07UUFDUixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0RBQStELE1BQU0sNEJBQTRCLENBQUMsQ0FBQztRQUNoSCxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxNQUFNLG1CQUFtQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvRyxNQUFNLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsRixNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixNQUFNLHNDQUFzQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzVGLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLE9BQWdCO0lBQzNDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hELE9BQU87UUFDTCxPQUFPLEVBQUUsS0FBSztRQUNkLElBQUksRUFBRSxDQUFDLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztLQUN6QyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsMEJBQTBCLENBQzlDLE1BQWMsRUFDZCxPQUFnQixFQUNoQixrQkFBMkI7SUFFM0IsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9ELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUV0RCxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDYixJQUFJLE1BQU0sR0FBNEIsRUFBRSxDQUFDO0lBQ3pDLElBQUksQ0FBQztRQUNILEdBQUcsR0FBRyxNQUFNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUE0QixDQUFDO0lBQ3RELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQy9ELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxNQUFNLElBQUksR0FBRyxZQUFZLElBQUksT0FBTyxZQUFZLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDM0YsQ0FBQyxDQUFDLFlBQXVDO1FBQ3pDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFUCxJQUFJLENBQUMsWUFBWSxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUM7SUFFdkIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxNQUFNLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVsRixPQUFPLDBDQUEwQyxNQUFNLEtBQUssVUFBVSxHQUFHLENBQUM7QUFDNUUsQ0FBQztBQUVELEtBQUssVUFBVSxxQkFBcUIsQ0FBQyxPQUFnQjtJQUNuRCxPQUFPLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsb0JBQW9CO0lBQzNCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNuRyxJQUFJLENBQUM7UUFDSCxVQUFVLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7SUFDckQsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxNQUFjLEVBQUUsT0FBZ0I7SUFDckQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLG9CQUFvQixFQUFFLENBQUM7UUFDbkQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDaEQsTUFBTSxJQUFJLEdBQUc7WUFDWCxHQUFHLFVBQVU7WUFDYiwyQkFBMkIsR0FBRyxFQUFFO1lBQ2hDLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFFBQVEsRUFBRSxjQUFjO1lBQ3hCLE9BQU87U0FDUixDQUFDO1FBRUYsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQy9ELElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDekMsT0FBTztZQUNULENBQUM7WUFDRCxPQUFPLENBQUMsTUFBTSxJQUFJLHlCQUF5QixDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNldHVwIFJvdXRlcyDigJQgQXV0by1pbnN0YWxsIERvbGxob3VzZU1DUCB0byBNQ1AgY2xpZW50c1xuICpcbiAqIFVzZXMgYGluc3RhbGwtbWNwYCAoaHR0cHM6Ly9naXRodWIuY29tL3N1cGVybWVtb3J5YWkvaW5zdGFsbC1tY3ApXG4gKiB0byBpbmplY3Qgc2VydmVyIGNvbmZpZ3VyYXRpb24gaW50byBzdXBwb3J0ZWQgTUNQIGNsaWVudCBjb25maWcgZmlsZXMuXG4gKlxuICogU2VjdXJpdHk6IGxvY2FsaG9zdC1vbmx5IGJpbmRpbmcgKGVuZm9yY2VkIGJ5IHNlcnZlci50cyksIHJhdGUtbGltaXRlZCxcbiAqIGFuZCBjb21tYW5kIGFyZ3VtZW50cyBhcmUgaGFyZGNvZGVkIOKAlCBubyB1c2VyLXN1cHBsaWVkIHNoZWxsIGlucHV0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IGV4ZWNGaWxlIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGFjY2Vzc1N5bmMsIGNvbnN0YW50cyBhcyBmc0NvbnN0YW50cyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgYWNjZXNzLCBjaG1vZCwgbWtkaXIsIHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGpvaW4sIGRpcm5hbWUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IGhvbWVkaXIsIHBsYXRmb3JtIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZVRvbWwgfSBmcm9tICdzbW9sLXRvbWwnO1xuXG5jb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xuY29uc3QgX19kaXJuYW1lID0gZGlybmFtZShfX2ZpbGVuYW1lKTtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFBBQ0tBR0VfVkVSU0lPTiB9IGZyb20gJy4uLy4uL2dlbmVyYXRlZC92ZXJzaW9uLmpzJztcbmltcG9ydCB7IGdldFBlcm1pc3Npb25Ib29rU3RhdHVzQXN5bmMsIGluc3RhbGxQZXJtaXNzaW9uSG9vaywgdHlwZSBJbnN0YWxsUGVybWlzc2lvbkhvb2tSZXN1bHQgfSBmcm9tICcuLi8uLi91dGlscy9wZXJtaXNzaW9uSG9va3MuanMnO1xuXG5jb25zdCBHSVRIVUJfUkVQTyA9ICdEb2xsaG91c2VNQ1AvbWNwLXNlcnZlcic7XG5jb25zdCBNQ1BCX0FTU0VUX1BBVFRFUk4gPSAvXmRvbGxob3VzZW1jcC0uKlxcLm1jcGIkLztcbmltcG9ydCB7IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlciB9IGZyb20gJy4uLy4uL3V0aWxzL1NsaWRpbmdXaW5kb3dSYXRlTGltaXRlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgcmFuZG9tSW50IH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgUG9zdEhvZyB9IGZyb20gJ3Bvc3Rob2ctbm9kZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcblxuZnVuY3Rpb24gaXNNaXNzaW5nUGF0aEVycm9yKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGVycm9yXG4gICAgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0J1xuICAgICYmICdjb2RlJyBpbiBlcnJvclxuICAgICYmIChlcnJvciBhcyB7IGNvZGU/OiBzdHJpbmcgfSkuY29kZSA9PT0gJ0VOT0VOVCcsXG4gICk7XG59XG5cbi8vIFBvc3RIb2cgcHJvamVjdCBjYXB0dXJlIGtleSDigJQgd3JpdGUtb25seSBieSBkZXNpZ24sIHNhZmUgdG8gZXhwb3NlIHB1YmxpY2x5LlxuLy8gVGhpcyBrZXkgY2FuIE9OTFkgc2VuZCBldmVudHMgdG8gUG9zdEhvZzsgaXQgY2Fubm90IHJlYWQgZGF0YSwgcXVlcnkgYW5hbHl0aWNzLFxuLy8gY29uZmlndXJlIGRlc3RpbmF0aW9ucywgb3IgYWNjZXNzIGFueSBvdGhlciBQb3N0SG9nIEFQSS4gU2FtZSBrZXkgdXNlZCBpblxuLy8gc3JjL3RlbGVtZXRyeS9PcGVyYXRpb25hbFRlbGVtZXRyeS50cy4gVmVyaWZpZWQgd3JpdGUtb25seSAyMDI2LTA0LTA3LlxuLy8gQ2FuIGJlIG92ZXJyaWRkZW4gd2l0aCBQT1NUSE9HX0FQSV9LRVkgZW52IHZhciBmb3IgY3VzdG9tIFBvc3RIb2cgaW5zdGFsbGF0aW9ucy5cbmNvbnN0IFBPU1RIT0dfUFJPSkVDVF9LRVkgPSBwcm9jZXNzLmVudi5QT1NUSE9HX0FQSV9LRVkgfHwgJ3BoY194RkpLSUhBcVJYMVlMYTBUU2RUR3dHajE5ZDFKZW9YREtqSk5ZcTQ5MnZxJztcblxuLyoqIFN1cHBvcnRlZCBjbGllbnQgaWRlbnRpZmllcnMgZm9yIG9uZS1jbGljayBzZXR1cC4gKi9cbmNvbnN0IEFMTE9XRURfQ0xJRU5UUyA9IG5ldyBTZXQoW1xuICAnY2xhdWRlJyxcbiAgJ2NsYXVkZS1jb2RlJyxcbiAgJ2N1cnNvcicsXG4gICd2c2NvZGUnLFxuICAnY2xpbmUnLFxuICAncm9vLWNsaW5lJyxcbiAgJ3dpbmRzdXJmJyxcbiAgJ3dpdHN5JyxcbiAgJ2VuY29udm8nLFxuICAnZ2VtaW5pLWNsaScsXG4gICdnb29zZScsXG4gICd6ZWQnLFxuICAnd2FycCcsXG4gICdjb2RleCcsXG4gICdsbXN0dWRpbycsXG5dKTtcblxudHlwZSBDb25maWdQYXRoQ2xpZW50ID1cbiAgfCAnY2xhdWRlJ1xuICB8ICdjbGF1ZGUtY29kZSdcbiAgfCAnY3Vyc29yJ1xuICB8ICd3aW5kc3VyZidcbiAgfCAnY2xpbmUnXG4gIHwgJ2xtc3R1ZGlvJ1xuICB8ICdnZW1pbmktY2xpJ1xuICB8ICdjb2RleCc7XG5cbnR5cGUgU2V0dXBTdXBwb3J0TGV2ZWwgPVxuICB8ICdmdWxsX25hdGl2ZSdcbiAgfCAncGFydGlhbF9uYXRpdmUnXG4gIHwgJ21jcF9vbmx5J1xuICB8ICd1bnN1cHBvcnRlZCc7XG5cbmNvbnN0IFNFVFVQX1NVUFBPUlRfTEVWRUxTOiBSZWNvcmQ8c3RyaW5nLCBTZXR1cFN1cHBvcnRMZXZlbD4gPSB7XG4gICdjbGF1ZGUnOiAndW5zdXBwb3J0ZWQnLFxuICAnY2xhdWRlLWNvZGUnOiAnZnVsbF9uYXRpdmUnLFxuICAnY3Vyc29yJzogJ3BhcnRpYWxfbmF0aXZlJyxcbiAgJ2NsaW5lJzogJ21jcF9vbmx5JyxcbiAgJ3dpbmRzdXJmJzogJ3BhcnRpYWxfbmF0aXZlJyxcbiAgJ2xtc3R1ZGlvJzogJ21jcF9vbmx5JyxcbiAgJ2dlbWluaS1jbGknOiAncGFydGlhbF9uYXRpdmUnLFxuICAnY29kZXgnOiAncGFydGlhbF9uYXRpdmUnLFxufTtcblxuLyoqIEFsbG93ZWQgcmVsZWFzZSBjaGFubmVscyBmb3IgdGhlIGluc3RhbGwgZW5kcG9pbnQuICovXG5jb25zdCBBTExPV0VEX0lOU1RBTExfQ0hBTk5FTFM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KFsnbGF0ZXN0JywgJ2JldGEnLCAncmMnXSk7XG5cbi8qKiBSYXRlIGxpbWl0OiA1IGluc3RhbGxzIHBlciBtaW51dGUgKi9cbmNvbnN0IGluc3RhbGxMaW1pdGVyID0gbmV3IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlcig1LCA2MF8wMDApO1xuXG4vKipcbiAqIEtub3duIGNvbmZpZyBmaWxlIHBhdGhzIHBlciBjbGllbnQuXG4gKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSBwYXRoIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZmlnUGF0aChjbGllbnQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBob21lID0gaG9tZWRpcigpO1xuICBjb25zdCBwbGF0ID0gcGxhdGZvcm0oKTtcblxuICBjb25zdCBwYXRoczogUmVjb3JkPENvbmZpZ1BhdGhDbGllbnQsICgpID0+IHN0cmluZyB8IG51bGw+ID0ge1xuICAgICdjbGF1ZGUnOiAoKSA9PiB7XG4gICAgICBpZiAocGxhdCA9PT0gJ2RhcndpbicpIHJldHVybiBqb2luKGhvbWUsICdMaWJyYXJ5JywgJ0FwcGxpY2F0aW9uIFN1cHBvcnQnLCAnQ2xhdWRlJywgJ2NsYXVkZV9kZXNrdG9wX2NvbmZpZy5qc29uJyk7XG4gICAgICBpZiAocGxhdCA9PT0gJ3dpbjMyJykgcmV0dXJuIGpvaW4ocHJvY2Vzcy5lbnYuQVBQREFUQSB8fCBqb2luKGhvbWUsICdBcHBEYXRhJywgJ1JvYW1pbmcnKSwgJ0NsYXVkZScsICdjbGF1ZGVfZGVza3RvcF9jb25maWcuanNvbicpO1xuICAgICAgcmV0dXJuIGpvaW4oaG9tZSwgJy5jb25maWcnLCAnQ2xhdWRlJywgJ2NsYXVkZV9kZXNrdG9wX2NvbmZpZy5qc29uJyk7XG4gICAgfSxcbiAgICAnY2xhdWRlLWNvZGUnOiAoKSA9PiBqb2luKGhvbWUsICcuY2xhdWRlLmpzb24nKSxcbiAgICAnY3Vyc29yJzogKCkgPT4gam9pbihob21lLCAnLmN1cnNvcicsICdtY3AuanNvbicpLFxuICAgICd3aW5kc3VyZic6ICgpID0+IGpvaW4oaG9tZSwgJy5jb2RlaXVtJywgJ3dpbmRzdXJmJywgJ21jcF9jb25maWcuanNvbicpLFxuICAgICdjbGluZSc6ICgpID0+IHtcbiAgICAgIGlmIChwbGF0ID09PSAnZGFyd2luJykgcmV0dXJuIGpvaW4oaG9tZSwgJ0xpYnJhcnknLCAnQXBwbGljYXRpb24gU3VwcG9ydCcsICdDb2RlJywgJ1VzZXInLCAnZ2xvYmFsU3RvcmFnZScsICdzYW91ZHJpendhbi5jbGF1ZGUtZGV2JywgJ3NldHRpbmdzJywgJ2NsaW5lX21jcF9zZXR0aW5ncy5qc29uJyk7XG4gICAgICBpZiAocGxhdCA9PT0gJ3dpbjMyJykgcmV0dXJuIGpvaW4ocHJvY2Vzcy5lbnYuQVBQREFUQSB8fCBqb2luKGhvbWUsICdBcHBEYXRhJywgJ1JvYW1pbmcnKSwgJ0NvZGUnLCAnVXNlcicsICdnbG9iYWxTdG9yYWdlJywgJ3Nhb3Vkcml6d2FuLmNsYXVkZS1kZXYnLCAnc2V0dGluZ3MnLCAnY2xpbmVfbWNwX3NldHRpbmdzLmpzb24nKTtcbiAgICAgIHJldHVybiBqb2luKGhvbWUsICcuY29uZmlnJywgJ0NvZGUnLCAnVXNlcicsICdnbG9iYWxTdG9yYWdlJywgJ3Nhb3Vkcml6d2FuLmNsYXVkZS1kZXYnLCAnc2V0dGluZ3MnLCAnY2xpbmVfbWNwX3NldHRpbmdzLmpzb24nKTtcbiAgICB9LFxuICAgICdsbXN0dWRpbyc6ICgpID0+IGpvaW4oaG9tZSwgJy5sbXN0dWRpbycsICdtY3AuanNvbicpLFxuICAgICdnZW1pbmktY2xpJzogKCkgPT4gam9pbihob21lLCAnLmdlbWluaScsICdzZXR0aW5ncy5qc29uJyksXG4gICAgJ2NvZGV4JzogKCkgPT4gam9pbihob21lLCAnLmNvZGV4JywgJ2NvbmZpZy50b21sJyksXG4gIH07XG5cbiAgY29uc3QgcmVzb2x2ZXIgPSBwYXRoc1tjbGllbnQgYXMgQ29uZmlnUGF0aENsaWVudF07XG4gIHJldHVybiByZXNvbHZlciA/IHJlc29sdmVyKCkgOiBudWxsO1xufVxuXG4vKipcbiAqIE9wZW4gYSBmaWxlIGluIHRoZSBzeXN0ZW0ncyBkZWZhdWx0IHRleHQgZWRpdG9yLlxuICovXG5mdW5jdGlvbiBvcGVuSW5FZGl0b3IoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcGxhdCA9IHBsYXRmb3JtKCk7XG4gICAgbGV0IGNtZDogc3RyaW5nO1xuICAgIGxldCBhcmdzOiBzdHJpbmdbXTtcblxuICAgIGlmIChwbGF0ID09PSAnZGFyd2luJykge1xuICAgICAgY21kID0gJ29wZW4nO1xuICAgICAgYXJncyA9IFsnLXQnLCBmaWxlUGF0aF07XG4gICAgfSBlbHNlIGlmIChwbGF0ID09PSAnd2luMzInKSB7XG4gICAgICBjbWQgPSAnbm90ZXBhZCc7XG4gICAgICBhcmdzID0gW2ZpbGVQYXRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY21kID0gJ3hkZy1vcGVuJztcbiAgICAgIGFyZ3MgPSBbZmlsZVBhdGhdO1xuICAgIH1cblxuICAgIGV4ZWNGaWxlKGNtZCwgYXJncywgeyB0aW1lb3V0OiAxMF8wMDAgfSwgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDb3VsZCBub3Qgb3BlbiBlZGl0b3I6ICR7ZXJyLm1lc3NhZ2V9YCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKCdPcGVuZWQgaW4gZWRpdG9yLicpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqIENsaWVudHMgd2hvc2UgY29uZmlnIGZpbGVzIHdlIGNhbiBsb2NhdGUgYW5kIG9wZW4gKi9cbmNvbnN0IE9QRU5BQkxFX0NMSUVOVFMgPSBuZXcgU2V0KFtcbiAgJ2NsYXVkZScsICdjbGF1ZGUtY29kZScsICdjdXJzb3InLCAnY2xpbmUnLCAnd2luZHN1cmYnLCAnbG1zdHVkaW8nLCAnZ2VtaW5pLWNsaScsICdjb2RleCcsXG5dKTtcblxuLyoqXG4gKiBDcmVhdGUgc2V0dXAgaGFuZGxlcnMgKEV4cHJlc3MgNSBjb21wYXRpYmxlIOKAlCBwbGFpbiBoYW5kbGVyIGZ1bmN0aW9ucywgbm90IFJvdXRlcikuXG4gKi9cbmludGVyZmFjZSBEZXRlY3RSZXN1bHQge1xuICBpbnN0YWxsZWQ6IGJvb2xlYW47XG4gIGNvbmZpZ1BhdGg6IHN0cmluZyB8IG51bGw7XG4gIGN1cnJlbnRDb25maWc/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgc2VydmVyS2V5Pzogc3RyaW5nO1xufVxuXG4vKiogUGFyc2UgYSBUT01MIGNvbmZpZyBmaWxlIGZvciBhIERvbGxob3VzZU1DUCBzZXJ2ZXIgZW50cnkgKi9cbmZ1bmN0aW9uIHBhcnNlVG9tbENvbmZpZyhyYXc6IHN0cmluZyk6IE9taXQ8RGV0ZWN0UmVzdWx0LCAnY29uZmlnUGF0aCc+IHtcbiAgaWYgKCFyYXcudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZG9sbGhvdXNlbWNwJykpIHtcbiAgICByZXR1cm4geyBpbnN0YWxsZWQ6IGZhbHNlIH07XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlVG9tbChyYXcpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IG1jcFNlcnZlcnMgPSBwYXJzZWQubWNwX3NlcnZlcnM7XG4gICAgaWYgKCFtY3BTZXJ2ZXJzIHx8IHR5cGVvZiBtY3BTZXJ2ZXJzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG1jcFNlcnZlcnMpKSB7XG4gICAgICByZXR1cm4geyBpbnN0YWxsZWQ6IHRydWUsIGN1cnJlbnRDb25maWc6IHt9LCBzZXJ2ZXJLZXk6ICdtY3Bfc2VydmVycycgfTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaGluZ0VudHJ5ID0gT2JqZWN0LmVudHJpZXMobWNwU2VydmVycykuZmluZCgoW2tleV0pID0+XG4gICAgICBrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZG9sbGhvdXNlbWNwJykpO1xuICAgIGlmICghbWF0Y2hpbmdFbnRyeSkge1xuICAgICAgcmV0dXJuIHsgaW5zdGFsbGVkOiB0cnVlLCBjdXJyZW50Q29uZmlnOiB7fSwgc2VydmVyS2V5OiAnbWNwX3NlcnZlcnMnIH07XG4gICAgfVxuXG4gICAgY29uc3QgW3NlcnZlck5hbWUsIHNlcnZlckNvbmZpZ10gPSBtYXRjaGluZ0VudHJ5O1xuICAgIGNvbnN0IHRvbWxDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBzZXJ2ZXJOYW1lIH07XG4gICAgaWYgKHNlcnZlckNvbmZpZyAmJiB0eXBlb2Ygc2VydmVyQ29uZmlnID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzZXJ2ZXJDb25maWcpKSB7XG4gICAgICBjb25zdCB7IGNvbW1hbmQsIGFyZ3MgfSA9IHNlcnZlckNvbmZpZyBhcyB7IGNvbW1hbmQ/OiB1bmtub3duOyBhcmdzPzogdW5rbm93biB9O1xuICAgICAgaWYgKHR5cGVvZiBjb21tYW5kID09PSAnc3RyaW5nJykgdG9tbENvbmZpZy5jb21tYW5kID0gY29tbWFuZDtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3MpKSB0b21sQ29uZmlnLmFyZ3MgPSBhcmdzO1xuICAgIH1cblxuICAgIHJldHVybiB7IGluc3RhbGxlZDogdHJ1ZSwgY3VycmVudENvbmZpZzogdG9tbENvbmZpZywgc2VydmVyS2V5OiAnbWNwX3NlcnZlcnMnIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IGluc3RhbGxlZDogdHJ1ZSwgY3VycmVudENvbmZpZzoge30sIHNlcnZlcktleTogJ21jcF9zZXJ2ZXJzJyB9O1xuICB9XG59XG5cbi8qKiBQYXJzZSBhIEpTT04gY29uZmlnIGZpbGUgZm9yIGEgRG9sbGhvdXNlTUNQIHNlcnZlciBlbnRyeSAqL1xuZnVuY3Rpb24gcGFyc2VKc29uQ29uZmlnKHJhdzogc3RyaW5nKTogT21pdDxEZXRlY3RSZXN1bHQsICdjb25maWdQYXRoJz4ge1xuICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gIGZvciAoY29uc3Qga2V5IG9mIFsnbWNwU2VydmVycycsICdzZXJ2ZXJzJ10pIHtcbiAgICBpZiAocGFyc2VkW2tleV0/LmRvbGxob3VzZW1jcCkge1xuICAgICAgcmV0dXJuIHsgaW5zdGFsbGVkOiB0cnVlLCBjdXJyZW50Q29uZmlnOiBwYXJzZWRba2V5XS5kb2xsaG91c2VtY3AsIHNlcnZlcktleToga2V5IH07XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGluc3RhbGxlZDogZmFsc2UgfTtcbn1cblxuLyoqIENoZWNrIGEgc2luZ2xlIGNsaWVudCBjb25maWcgZmlsZSBmb3IgYW4gZXhpc3RpbmcgRG9sbGhvdXNlTUNQIGVudHJ5ICovXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RDbGllbnQoY2xpZW50OiBzdHJpbmcpOiBQcm9taXNlPERldGVjdFJlc3VsdCB8IG51bGw+IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IGdldENvbmZpZ1BhdGgoY2xpZW50KTtcbiAgaWYgKCFjb25maWdQYXRoKSByZXR1cm4gbnVsbDtcblxuICB0cnkge1xuICAgIGF3YWl0IGFjY2Vzcyhjb25maWdQYXRoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgaW5zdGFsbGVkOiBmYWxzZSwgY29uZmlnUGF0aCB9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCByZWFkRmlsZShjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCByZXN1bHQgPSBjb25maWdQYXRoLmVuZHNXaXRoKCcudG9tbCcpID8gcGFyc2VUb21sQ29uZmlnKHJhdykgOiBwYXJzZUpzb25Db25maWcocmF3KTtcbiAgICByZXR1cm4geyBjb25maWdQYXRoLCAuLi5yZXN1bHQgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgaW5zdGFsbGVkOiBmYWxzZSwgY29uZmlnUGF0aCB9O1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW5kIG5vcm1hbGl6ZSBhIGNsaWVudCBuYW1lIGZyb20gcmVxdWVzdCBib2R5LlxuICogUmV0dXJucyB0aGUgbm9ybWFsaXplZCBjbGllbnQgbmFtZSBvciBudWxsICh3aXRoIGVycm9yIHJlc3BvbnNlIHNlbnQpLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNsaWVudChcbiAgcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlLCBhbGxvd2VkU2V0OiBTZXQ8c3RyaW5nPixcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB7IGNsaWVudCB9ID0gcmVxLmJvZHkgYXMgeyBjbGllbnQ/OiBzdHJpbmcgfTtcbiAgaWYgKCFjbGllbnQgfHwgdHlwZW9mIGNsaWVudCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnTWlzc2luZyByZXF1aXJlZCBmaWVsZDogY2xpZW50JyB9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoY2xpZW50KS5ub3JtYWxpemVkQ29udGVudC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgaWYgKCFhbGxvd2VkU2V0Lmhhcyhub3JtYWxpemVkKSkge1xuICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHtcbiAgICAgIGVycm9yOiBgVW5zdXBwb3J0ZWQgY2xpZW50OiAke2NsaWVudH1gLFxuICAgICAgc3VwcG9ydGVkOiBBcnJheS5mcm9tKGFsbG93ZWRTZXQpLFxuICAgIH0pO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlUmVxdWVzdGVkSW5zdGFsbFZlcnNpb24oYm9keTogdW5rbm93bik6IHsgZWZmZWN0aXZlVmVyc2lvbj86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfSB7XG4gIGNvbnN0IHsgdmVyc2lvbiwgY2hhbm5lbCB9ID0gKGJvZHkgPz8ge30pIGFzIHsgdmVyc2lvbj86IHN0cmluZzsgY2hhbm5lbD86IHN0cmluZyB9O1xuICBjb25zdCBub3JtYWxpemVkVmVyc2lvbiA9IHZlcnNpb24gPyBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh2ZXJzaW9uKS5ub3JtYWxpemVkQ29udGVudCA6IHVuZGVmaW5lZDtcbiAgaWYgKG5vcm1hbGl6ZWRWZXJzaW9uICYmICEvXlxcZCtcXC5cXGQrXFwuXFxkKy8udGVzdChub3JtYWxpemVkVmVyc2lvbikpIHtcbiAgICByZXR1cm4geyBlcnJvcjogJ0ludmFsaWQgdmVyc2lvbiBmb3JtYXQuIEV4cGVjdGVkIHNlbXZlciAoZS5nLiwgMi4wLjIpJyB9O1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZENoYW5uZWwgPSBjaGFubmVsID8gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoY2hhbm5lbCkubm9ybWFsaXplZENvbnRlbnQgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGVmZmVjdGl2ZVZlcnNpb24gPSBub3JtYWxpemVkQ2hhbm5lbCAmJiBBTExPV0VEX0lOU1RBTExfQ0hBTk5FTFMuaGFzKG5vcm1hbGl6ZWRDaGFubmVsKSAmJiBub3JtYWxpemVkQ2hhbm5lbCAhPT0gJ2xhdGVzdCdcbiAgICA/IG5vcm1hbGl6ZWRDaGFubmVsXG4gICAgOiBub3JtYWxpemVkVmVyc2lvbjtcblxuICByZXR1cm4geyBlZmZlY3RpdmVWZXJzaW9uIH07XG59XG5cbmZ1bmN0aW9uIHRvTnZtTWl0aWdhdGlvbkFwcGxpZWQocmVzdWx0OiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGFwcGx5TnZtTGF1bmNoZXJJZk5lZWRlZD4+KTogYm9vbGVhbiB8IG51bGwge1xuICBpZiAocmVzdWx0ID09PSAnYXBwbGllZCcpIHJldHVybiB0cnVlO1xuICBpZiAocmVzdWx0ID09PSAnZmFpbGVkJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gbnVsbDtcbn1cblxuLy8g4pSA4pSAIExpY2Vuc2UgdmVyaWZpY2F0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5jb25zdCBNU19QRVJfTUlOVVRFID0gNjAgKiAxMDAwO1xuY29uc3QgVkVSSUZJQ0FUSU9OX0NPREVfVFRMX01JTlVURVMgPSAxMDtcbmNvbnN0IFZFUklGSUNBVElPTl9DT0RFX1RUTF9NUyA9IFZFUklGSUNBVElPTl9DT0RFX1RUTF9NSU5VVEVTICogTVNfUEVSX01JTlVURTtcbmNvbnN0IFZFUklGSUNBVElPTl9NQVhfQVRURU1QVFMgPSA1O1xuY29uc3QgTElDRU5TRV9XT1JLRVJfVElNRU9VVF9NUyA9IDJfMDAwO1xuY29uc3QgREVGQVVMVF9MSUNFTlNFX1dPUktFUl9VUkwgPSAnaHR0cHM6Ly9kb2xsaG91c2VtY3AtbGljZW5zZS1lbWFpbC5taWNrLWViYS53b3JrZXJzLmRldic7XG5cbi8qKiBHZW5lcmF0ZSBhIGNyeXB0b2dyYXBoaWNhbGx5IHJhbmRvbSA2LWRpZ2l0IHZlcmlmaWNhdGlvbiBjb2RlLiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVWZXJpZmljYXRpb25Db2RlKCk6IHN0cmluZyB7XG4gIHJldHVybiBTdHJpbmcocmFuZG9tSW50KDEwMDAwMCwgOTk5OTk5KSk7XG59XG5cbi8qKiBDaGVjayBpZiBhIHZlcmlmaWNhdGlvbiBjb2RlIGhhcyBleHBpcmVkLiAqL1xuZnVuY3Rpb24gaXNDb2RlRXhwaXJlZChleHBpcmVzQXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gbmV3IERhdGUoZXhwaXJlc0F0KS5nZXRUaW1lKCkgPCBEYXRlLm5vdygpO1xufVxuXG4vLyDilIDilIAgTGljZW5zZSBoZWxwZXJzIChtb2R1bGUgc2NvcGUgZm9yIFNvbmFyQ2xvdWQgUzc3MjEpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5jb25zdCBWQUxJRF9MSUNFTlNFX1RJRVJTID0gbmV3IFNldChbJ2FncGwnLCAnZnJlZS1jb21tZXJjaWFsJywgJ3BhaWQtY29tbWVyY2lhbCddKTtcbmNvbnN0IFZBTElEX1JFVkVOVUVfU0NBTEVTID0gbmV3IFNldChbJyQxTeKAkyQ1TScsICckNU3igJMkMjVNJywgJyQyNU3igJMkMTAwTScsICckMTAwTSsnXSk7XG4vLyBTYWZlIGZyb20gUmVEb1M6IGlucHV0IGlzIHByZS1jaGVja2VkIHRvIOKJpDI1NCBjaGFycywgYW5kIHsxLDY0fS97MSwyNTN9L3syLDYzfVxuLy8gYm91bmRzIHByZXZlbnQgY2F0YXN0cm9waGljIGJhY2t0cmFja2luZyBvbiBhbnkgaW5wdXQgd2l0aGluIHRoYXQgbGVuZ3RoLlxuY29uc3QgRU1BSUxfUEFUVEVSTiA9IC9eW15cXHNAXXsxLDY0fUBbXlxcc0BdezEsMjUzfVxcLlteXFxzQF17Miw2M30kLztcblxuLyoqIFNhbml0aXplIGEgc3RyaW5nIGZpZWxkOiB0cmltLCB0cnVuY2F0ZSwgcmV0dXJuIHVuZGVmaW5lZCBpZiBlbXB0eS4gKi9cbmZ1bmN0aW9uIHNhbml0aXplKHZhbDogdW5rbm93biwgbWF4TGVuOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodHlwZW9mIHZhbCAhPT0gJ3N0cmluZycgfHwgIXZhbC50cmltKCkpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB2YWwudHJpbSgpLnNsaWNlKDAsIG1heExlbik7XG59XG5cbi8qKiBWYWxpZGF0ZSBlbWFpbCBmb3JtYXQgYW5kIGNvbW1lcmNpYWwgYWNrbm93bGVkZ21lbnRzLiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb21tZXJjaWFsRmllbGRzKGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHsgZW1haWwsIHRlbGVtZXRyeUFja25vd2xlZGdlZCB9ID0gYm9keTtcbiAgaWYgKCFlbWFpbCB8fCB0eXBlb2YgZW1haWwgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuICdFbWFpbCBhZGRyZXNzIGlzIHJlcXVpcmVkIGZvciBDb21tZXJjaWFsIGFuZCBFbnRlcnByaXNlIGxpY2Vuc2VzJztcbiAgfVxuICBpZiAoZW1haWwubGVuZ3RoID4gMjU0IHx8ICFFTUFJTF9QQVRURVJOLnRlc3QoZW1haWwpKSB7XG4gICAgcmV0dXJuICdQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIGVtYWlsIGFkZHJlc3MnO1xuICB9XG4gIGlmICghdGVsZW1ldHJ5QWNrbm93bGVkZ2VkKSB7XG4gICAgcmV0dXJuICdUZWxlbWV0cnkgYWNrbm93bGVkZ21lbnQgaXMgcmVxdWlyZWQgZm9yIENvbW1lcmNpYWwgYW5kIEVudGVycHJpc2UgbGljZW5zZXMnO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKiogVmFsaWRhdGUgZnJlZS1jb21tZXJjaWFsIHNwZWNpZmljIGZpZWxkcy4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRnJlZUNvbW1lcmNpYWxGaWVsZHMoYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgeyBhdHRyaWJ1dGlvbkFja25vd2xlZGdlZCwgcmV2ZW51ZUF0dGVzdGVkIH0gPSBib2R5O1xuICBpZiAoIWF0dHJpYnV0aW9uQWNrbm93bGVkZ2VkKSB7XG4gICAgcmV0dXJuICdBdHRyaWJ1dGlvbiBhY2tub3dsZWRnbWVudCBpcyByZXF1aXJlZCBmb3IgQ29tbWVyY2lhbCBsaWNlbnNlcyc7XG4gIH1cbiAgaWYgKCFyZXZlbnVlQXR0ZXN0ZWQpIHtcbiAgICByZXR1cm4gJ1JldmVudWUgYXR0ZXN0YXRpb24gaXMgcmVxdWlyZWQgZm9yIENvbW1lcmNpYWwgbGljZW5zZXMnO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKiogVmFsaWRhdGUgZW50ZXJwcmlzZSBzcGVjaWZpYyBmaWVsZHMuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUVudGVycHJpc2VGaWVsZHMoYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgeyByZXZlbnVlU2NhbGUsIGNvbXBhbnlOYW1lLCB1c2VDYXNlIH0gPSBib2R5O1xuICBpZiAoIXJldmVudWVTY2FsZSB8fCAhVkFMSURfUkVWRU5VRV9TQ0FMRVMuaGFzKHJldmVudWVTY2FsZSBhcyBzdHJpbmcpKSB7XG4gICAgcmV0dXJuIGBSZXZlbnVlIHNjYWxlIGlzIHJlcXVpcmVkLiBNdXN0IGJlIG9uZSBvZjogJHtbLi4uVkFMSURfUkVWRU5VRV9TQ0FMRVNdLmpvaW4oJywgJyl9YDtcbiAgfVxuICBpZiAoIWNvbXBhbnlOYW1lIHx8IHR5cGVvZiBjb21wYW55TmFtZSAhPT0gJ3N0cmluZycgfHwgIWNvbXBhbnlOYW1lLnRyaW0oKSkge1xuICAgIHJldHVybiAnQ29tcGFueSBuYW1lIGlzIHJlcXVpcmVkIGZvciBFbnRlcnByaXNlIGxpY2Vuc2VzJztcbiAgfVxuICBpZiAoIXVzZUNhc2UgfHwgdHlwZW9mIHVzZUNhc2UgIT09ICdzdHJpbmcnIHx8ICF1c2VDYXNlLnRyaW0oKSkge1xuICAgIHJldHVybiAnVXNlIGNhc2UgaXMgcmVxdWlyZWQgZm9yIEVudGVycHJpc2UgbGljZW5zZXMnO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKiogVmFsaWRhdGUgbGljZW5zZSBmb3JtIGlucHV0LiBSZXR1cm5zIGVycm9yIHN0cmluZyBvciBudWxsIGlmIHZhbGlkLiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVMaWNlbnNlSW5wdXQoYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgeyB0aWVyIH0gPSBib2R5O1xuICBpZiAoIXRpZXIgfHwgIVZBTElEX0xJQ0VOU0VfVElFUlMuaGFzKHRpZXIgYXMgc3RyaW5nKSkge1xuICAgIHJldHVybiBgSW52YWxpZCBsaWNlbnNlIHRpZXIuIE11c3QgYmUgb25lIG9mOiAke1suLi5WQUxJRF9MSUNFTlNFX1RJRVJTXS5qb2luKCcsICcpfWA7XG4gIH1cbiAgaWYgKHRpZXIgIT09ICdhZ3BsJykge1xuICAgIGNvbnN0IGNvbW1lcmNpYWxFcnJvciA9IHZhbGlkYXRlQ29tbWVyY2lhbEZpZWxkcyhib2R5KTtcbiAgICBpZiAoY29tbWVyY2lhbEVycm9yKSByZXR1cm4gY29tbWVyY2lhbEVycm9yO1xuICB9XG4gIGlmICh0aWVyID09PSAnZnJlZS1jb21tZXJjaWFsJykge1xuICAgIGNvbnN0IGZyZWVFcnJvciA9IHZhbGlkYXRlRnJlZUNvbW1lcmNpYWxGaWVsZHMoYm9keSk7XG4gICAgaWYgKGZyZWVFcnJvcikgcmV0dXJuIGZyZWVFcnJvcjtcbiAgfVxuICBpZiAodGllciA9PT0gJ3BhaWQtY29tbWVyY2lhbCcpIHtcbiAgICBjb25zdCBlbnRlcnByaXNlRXJyb3IgPSB2YWxpZGF0ZUVudGVycHJpc2VGaWVsZHMoYm9keSk7XG4gICAgaWYgKGVudGVycHJpc2VFcnJvcikgcmV0dXJuIGVudGVycHJpc2VFcnJvcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIEJ1aWxkIGxpY2Vuc2UgZGF0YSBvYmplY3QgZnJvbSB2YWxpZGF0ZWQgaW5wdXQuICovXG5mdW5jdGlvbiBidWlsZExpY2Vuc2VEYXRhKGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBjb25zdCB7IHRpZXIsIGVtYWlsLCByZXZlbnVlU2NhbGUsIGNvbXBhbnlOYW1lLCB1c2VDYXNlIH0gPSBib2R5O1xuICBjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgdGllciB9O1xuICBpZiAodGllciAhPT0gJ2FncGwnKSB7XG4gICAgZGF0YS5lbWFpbCA9IHNhbml0aXplKGVtYWlsLCAyNTQpO1xuICAgIGRhdGEuYXR0ZXN0ZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBkYXRhLnRlbGVtZXRyeVJlcXVpcmVkID0gdHJ1ZTtcbiAgfVxuICBpZiAodGllciA9PT0gJ3BhaWQtY29tbWVyY2lhbCcpIHtcbiAgICBpZiAocmV2ZW51ZVNjYWxlKSBkYXRhLnJldmVudWVTY2FsZSA9IHJldmVudWVTY2FsZTtcbiAgICBpZiAoY29tcGFueU5hbWUpIGRhdGEuY29tcGFueU5hbWUgPSBzYW5pdGl6ZShjb21wYW55TmFtZSwgMjAwKTtcbiAgICBpZiAodXNlQ2FzZSkgZGF0YS51c2VDYXNlID0gc2FuaXRpemUodXNlQ2FzZSwgNTAwKTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqIFNlbmQgbGljZW5zZV9hY3RpdmF0aW9uIGV2ZW50IHRvIFBvc3RIb2cgZm9yIGNvbW1lcmNpYWwgdGllcnMuICovXG5hc3luYyBmdW5jdGlvbiBjYXB0dXJlUG9zdEhvZ0xpY2Vuc2VFdmVudChsaWNlbnNlRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcG9zdGhvZyA9IG5ldyBQb3N0SG9nKFBPU1RIT0dfUFJPSkVDVF9LRVksIHtcbiAgICBob3N0OiBwcm9jZXNzLmVudi5QT1NUSE9HX0hPU1QgfHwgJ2h0dHBzOi8vYXBwLnBvc3Rob2cuY29tJyxcbiAgICBmbHVzaEF0OiAxLFxuICAgIGZsdXNoSW50ZXJ2YWw6IDUwMDAsXG4gIH0pO1xuICBsZXQgaW5zdGFsbElkOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgY29uc3QgaWRQYXRoID0gam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJy50ZWxlbWV0cnktaWQnKTtcbiAgICBpbnN0YWxsSWQgPSAoYXdhaXQgcmVhZEZpbGUoaWRQYXRoLCAndXRmLTgnKSkudHJpbSgpO1xuICB9IGNhdGNoIHtcbiAgICBpbnN0YWxsSWQgPSB1dWlkdjQoKTtcbiAgfVxuICBjb25zdCBldmVudFR5cGUgPSAobGljZW5zZURhdGEuZXZlbnRUeXBlIGFzIHN0cmluZykgPz8gJ2FjdGl2YXRpb24nO1xuICBwb3N0aG9nLmNhcHR1cmUoe1xuICAgIGRpc3RpbmN0SWQ6IGluc3RhbGxJZCxcbiAgICBldmVudDogJ2xpY2Vuc2VfYWN0aXZhdGlvbicsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgdGllcjogbGljZW5zZURhdGEudGllcixcbiAgICAgIGVtYWlsOiBsaWNlbnNlRGF0YS5lbWFpbCxcbiAgICAgIGV2ZW50X3R5cGU6IGV2ZW50VHlwZSxcbiAgICAgIHNlcnZlcl92ZXJzaW9uOiBQQUNLQUdFX1ZFUlNJT04sXG4gICAgICBvczogcGxhdGZvcm0oKSxcbiAgICAgIC4uLihldmVudFR5cGUgPT09ICd2ZXJpZmljYXRpb24nID8ge1xuICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogbGljZW5zZURhdGEudmVyaWZpY2F0aW9uQ29kZSxcbiAgICAgIH0gOiB7fSksXG4gICAgICAuLi4oZXZlbnRUeXBlID09PSAnYWN0aXZhdGlvbicgPyB7XG4gICAgICAgIHZlcmlmaWNhdGlvbl90aW1lX21zOiBsaWNlbnNlRGF0YS52ZXJpZmljYXRpb25fdGltZV9tcyxcbiAgICAgICAgdmVyaWZpY2F0aW9uX3RpbWVfc2Vjb25kczogbGljZW5zZURhdGEudmVyaWZpY2F0aW9uX3RpbWVfbXNcbiAgICAgICAgICA/IE1hdGgucm91bmQoKGxpY2Vuc2VEYXRhLnZlcmlmaWNhdGlvbl90aW1lX21zIGFzIG51bWJlcikgLyAxMDAwKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX2F0dGVtcHRzOiBsaWNlbnNlRGF0YS52ZXJpZmljYXRpb25fYXR0ZW1wdHMsXG4gICAgICB9IDoge30pLFxuICAgICAgLi4uKGxpY2Vuc2VEYXRhLnRpZXIgPT09ICdwYWlkLWNvbW1lcmNpYWwnID8ge1xuICAgICAgICByZXZlbnVlX3NjYWxlOiBsaWNlbnNlRGF0YS5yZXZlbnVlU2NhbGUsXG4gICAgICAgIGNvbXBhbnlfbmFtZTogbGljZW5zZURhdGEuY29tcGFueU5hbWUsXG4gICAgICAgIHVzZV9jYXNlOiBsaWNlbnNlRGF0YS51c2VDYXNlLFxuICAgICAgfSA6IHt9KSxcbiAgICB9LFxuICB9KTtcbiAgYXdhaXQgcG9zdGhvZy5zaHV0ZG93bigpO1xufVxuXG5mdW5jdGlvbiBidWlsZExpY2Vuc2VXb3JrZXJSZXF1ZXN0Qm9keShcbiAgbGljZW5zZURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICB2ZXJpZmljYXRpb25Db2RlOiBzdHJpbmcsXG4gIGRpc3RpbmN0SWQ6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgZXZlbnQ6ICdsaWNlbnNlX2FjdGl2YXRpb24nLFxuICAgIGRpc3RpbmN0X2lkOiBkaXN0aW5jdElkLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHRpZXI6IGxpY2Vuc2VEYXRhLnRpZXIsXG4gICAgICBlbWFpbDogbGljZW5zZURhdGEuZW1haWwsXG4gICAgICBldmVudF90eXBlOiAndmVyaWZpY2F0aW9uJyxcbiAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiB2ZXJpZmljYXRpb25Db2RlLFxuICAgICAgc2VydmVyX3ZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTixcbiAgICAgIG9zOiBwbGF0Zm9ybSgpLFxuICAgIH0sXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZW5kTGljZW5zZVdvcmtlclZlcmlmaWNhdGlvbkVtYWlsKFxuICBsaWNlbnNlRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHZlcmlmaWNhdGlvbkNvZGU6IHN0cmluZyxcbiAgZGlzdGluY3RJZDogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHdvcmtlclVybCA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9MSUNFTlNFX1dPUktFUl9VUkwgfHwgREVGQVVMVF9MSUNFTlNFX1dPUktFUl9VUkw7XG4gIGNvbnN0IHdvcmtlclNlY3JldCA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9MSUNFTlNFX1dPUktFUl9TRUNSRVQgfHwgJyc7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2god29ya2VyVXJsLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIC4uLih3b3JrZXJTZWNyZXQgPyB7ICd4LXBvc3Rob2ctc2VjcmV0Jzogd29ya2VyU2VjcmV0IH0gOiB7fSksXG4gICAgfSxcbiAgICBib2R5OiBidWlsZExpY2Vuc2VXb3JrZXJSZXF1ZXN0Qm9keShsaWNlbnNlRGF0YSwgdmVyaWZpY2F0aW9uQ29kZSwgZGlzdGluY3RJZCksXG4gICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KExJQ0VOU0VfV09SS0VSX1RJTUVPVVRfTVMpLFxuICB9KTtcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBXb3JrZXIgcmV0dXJuZWQgJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNldHVwUm91dGVzKG9wdHM/OiB7XG4gIC8qKiBPdmVycmlkZSBpbnN0YWxsLW1jcCBydW5uZXIuIEZvciB0ZXN0aW5nIG9ubHkg4oCUIHByZWZpeCBzaWduYWxzIHRlc3Qtb25seSB1c2UuICovXG4gIF9ydW5JbnN0YWxsTWNwPzogKGNsaWVudDogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG4gIC8qKiBPdmVycmlkZSBwZXJtaXNzaW9uIGhvb2sgaW5zdGFsbGVyLiBGb3IgdGVzdGluZyBvbmx5LiAqL1xuICBfaW5zdGFsbFBlcm1pc3Npb25Ib29rPzogKGNsaWVudDogc3RyaW5nKSA9PiBQcm9taXNlPEluc3RhbGxQZXJtaXNzaW9uSG9va1Jlc3VsdD47XG4gIC8qKiBTa2lwIHRoZSBzbGlkaW5nLXdpbmRvdyByYXRlIGxpbWl0ZXIuIEZvciB0ZXN0aW5nIG9ubHkuICovXG4gIF9za2lwUmF0ZUxpbWl0PzogYm9vbGVhbjtcbn0pOiB7XG4gIGluc3RhbGxIYW5kbGVyOiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBvcGVuQ29uZmlnSGFuZGxlcjogKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgdmVyc2lvbkhhbmRsZXI6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD47XG4gIG1jcGJSZWRpcmVjdEhhbmRsZXI6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD47XG4gIGRldGVjdEhhbmRsZXI6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD47XG4gIGdldExpY2Vuc2VIYW5kbGVyOiAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBzZXRMaWNlbnNlSGFuZGxlcjogKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgdmVyaWZ5TGljZW5zZUhhbmRsZXI6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD47XG4gIHJlc2VuZFZlcmlmaWNhdGlvbkhhbmRsZXI6IChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD47XG59IHtcbiAgY29uc3QgaW5zdGFsbGVyID0gb3B0cz8uX3J1bkluc3RhbGxNY3AgPz8gcnVuSW5zdGFsbE1jcDtcbiAgY29uc3QgcGVybWlzc2lvbkhvb2tJbnN0YWxsZXIgPSBvcHRzPy5faW5zdGFsbFBlcm1pc3Npb25Ib29rID8/IGluc3RhbGxQZXJtaXNzaW9uSG9vaztcbiAgY29uc3Qgc2tpcFJhdGVMaW1pdCA9IG9wdHM/Ll9za2lwUmF0ZUxpbWl0ID8/IGZhbHNlO1xuICAvLyDilIDilIAgRGV0ZWN0IGV4aXN0aW5nIGluc3RhbGxhdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGNvbnN0IGRldGVjdEhhbmRsZXIgPSBhc3luYyAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IGNsaWVudHMgPSBbXG4gICAgICB7IGlkOiAnY2xhdWRlJywgbmFtZTogJ0NsYXVkZSBEZXNrdG9wJyB9LFxuICAgICAgeyBpZDogJ2NsYXVkZS1jb2RlJywgbmFtZTogJ0NsYXVkZSBDb2RlJyB9LFxuICAgICAgeyBpZDogJ2N1cnNvcicsIG5hbWU6ICdDdXJzb3InIH0sXG4gICAgICB7IGlkOiAnY2xpbmUnLCBuYW1lOiAnQ2xpbmUnIH0sXG4gICAgICB7IGlkOiAnd2luZHN1cmYnLCBuYW1lOiAnV2luZHN1cmYnIH0sXG4gICAgICB7IGlkOiAnbG1zdHVkaW8nLCBuYW1lOiAnTE0gU3R1ZGlvJyB9LFxuICAgICAgeyBpZDogJ2dlbWluaS1jbGknLCBuYW1lOiAnR2VtaW5pIENMSScgfSxcbiAgICAgIHsgaWQ6ICdjb2RleCcsIG5hbWU6ICdDb2RleCcgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgcmVzdWx0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRzLm1hcChhc3luYyAoeyBpZCwgbmFtZSB9KSA9PiB7XG4gICAgICBjb25zdCBkZXRlY3Rpb24gPSBhd2FpdCBkZXRlY3RDbGllbnQoaWQpO1xuICAgICAgaWYgKGRldGVjdGlvbikge1xuICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgc3VwcG9ydDogeyBsZXZlbDogU0VUVVBfU1VQUE9SVF9MRVZFTFNbaWRdIH0sXG4gICAgICAgICAgLi4uZGV0ZWN0aW9uLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaWQgPT09ICdjbGF1ZGUtY29kZScgfHwgaWQgPT09ICdjdXJzb3InIHx8IGlkID09PSAnd2luZHN1cmYnIHx8IGlkID09PSAnZ2VtaW5pLWNsaScgfHwgaWQgPT09ICdjb2RleCcpIHtcbiAgICAgICAgICBjb25zdCBob29rU3RhdHVzID0gYXdhaXQgZ2V0UGVybWlzc2lvbkhvb2tTdGF0dXNBc3luYyh1bmRlZmluZWQsIGlkKTtcbiAgICAgICAgICByZXN1bHQuaG9va0luc3RhbGxlZCA9IGhvb2tTdGF0dXMuaW5zdGFsbGVkO1xuICAgICAgICAgIHJlc3VsdC5ob29rQXNzZXRzUHJlcGFyZWQgPSBob29rU3RhdHVzLmFzc2V0c1ByZXBhcmVkO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdHNbaWRdID0gcmVzdWx0O1xuICAgICAgfVxuICAgIH0pKTtcblxuICAgIHJlcy5qc29uKHJlc3VsdHMpO1xuICB9O1xuXG4gIC8vIOKUgOKUgCBPcGVuIGNvbmZpZyBmaWxlIGluIGVkaXRvciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgY29uc3Qgb3BlbkNvbmZpZ0hhbmRsZXIgPSBhc3luYyAocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZENsaWVudCA9IHZhbGlkYXRlQ2xpZW50KHJlcSwgcmVzLCBPUEVOQUJMRV9DTElFTlRTKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRDbGllbnQpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBnZXRDb25maWdQYXRoKG5vcm1hbGl6ZWRDbGllbnQpO1xuICAgIGlmICghY29uZmlnUGF0aCkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogYENvbmZpZyBwYXRoIHVua25vd24gZm9yOiAke25vcm1hbGl6ZWRDbGllbnR9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIGZpbGUgd2l0aCBlbXB0eSBjb250ZW50IGlmIGl0IGRvZXNuJ3QgZXhpc3QgeWV0XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFjY2Vzcyhjb25maWdQYXRoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUoY29uZmlnUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBjb25zdCBjb250ZW50ID0gY29uZmlnUGF0aC5lbmRzV2l0aCgnLnRvbWwnKSA/ICcnIDogJ3t9JztcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGNvbmZpZ1BhdGgsIGNvbnRlbnQgKyAnXFxuJywgJ3V0Zi04Jyk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBbU2V0dXBdIENyZWF0ZWQgZW1wdHkgY29uZmlnOiAke2NvbmZpZ1BhdGh9YCk7XG4gICAgICB9IGNhdGNoIChta0Vycikge1xuICAgICAgICBjb25zdCBtc2cgPSBta0VyciBpbnN0YW5jZW9mIEVycm9yID8gbWtFcnIubWVzc2FnZSA6IFN0cmluZyhta0Vycik7XG4gICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgZXJyb3I6IGBDb3VsZCBub3QgY3JlYXRlIGNvbmZpZyBmaWxlOiAke21zZ31gIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gT3BlbmluZyBjb25maWcgZm9yICR7bm9ybWFsaXplZENsaWVudH06ICR7Y29uZmlnUGF0aH1gKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBvcGVuSW5FZGl0b3IoY29uZmlnUGF0aCk7XG4gICAgICByZXMuanNvbih7IHN1Y2Nlc3M6IHRydWUsIHBhdGg6IGNvbmZpZ1BhdGggfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IG1lc3NhZ2UsIHBhdGg6IGNvbmZpZ1BhdGggfSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIOKUgOKUgCBBdXRvLWluc3RhbGwgdmlhIGluc3RhbGwtbWNwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBjb25zdCBpbnN0YWxsSGFuZGxlciA9IGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoIXNraXBSYXRlTGltaXQgJiYgIWluc3RhbGxMaW1pdGVyLnRyeUFjcXVpcmUoKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MjkpLmpzb24oeyBlcnJvcjogJ1RvbyBtYW55IGluc3RhbGwgcmVxdWVzdHMuIFRyeSBhZ2FpbiBpbiBhIG1pbnV0ZS4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRDbGllbnQgPSB2YWxpZGF0ZUNsaWVudChyZXEsIHJlcywgQUxMT1dFRF9DTElFTlRTKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRDbGllbnQpIHJldHVybjtcblxuICAgIGNvbnN0IHsgZWZmZWN0aXZlVmVyc2lvbiwgZXJyb3IgfSA9IHJlc29sdmVSZXF1ZXN0ZWRJbnN0YWxsVmVyc2lvbihyZXEuYm9keSk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhZyA9IGVmZmVjdGl2ZVZlcnNpb24gPyBgQCR7ZWZmZWN0aXZlVmVyc2lvbn1gIDogJ0BsYXRlc3QnO1xuICAgIGxvZ2dlci5pbmZvKGBbU2V0dXBdIEluc3RhbGxpbmcgRG9sbGhvdXNlTUNQJHt0YWd9IHRvIGNsaWVudDogJHtub3JtYWxpemVkQ2xpZW50fWApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IG5vcm1hbGl6ZWRDbGllbnQgPT09ICdsbXN0dWRpbydcbiAgICAgICAgPyBhd2FpdCBpbnN0YWxsTG1TdHVkaW9Db25maWcoZWZmZWN0aXZlVmVyc2lvbilcbiAgICAgICAgOiBhd2FpdCBpbnN0YWxsZXIobm9ybWFsaXplZENsaWVudCwgZWZmZWN0aXZlVmVyc2lvbik7XG4gICAgICBsb2dnZXIuaW5mbyhgW1NldHVwXSBTdWNjZXNzZnVsbHkgaW5zdGFsbGVkIHRvICR7bm9ybWFsaXplZENsaWVudH1gKTtcblxuICAgICAgLy8gQmVzdC1lZmZvcnQgTlZNIG1pdGlnYXRpb24gKG1hY09TL0xpbnV4IG9ubHkpLlxuICAgICAgLy8gRXh0cmFjdGVkIGludG8gYXBwbHlOdm1MYXVuY2hlcklmTmVlZGVkIHRvIGtlZXAgdGhpcyBoYW5kbGVyJ3NcbiAgICAgIC8vIGNvZ25pdGl2ZSBjb21wbGV4aXR5IHdpdGhpbiBib3VuZHMgKFNvbmFyQ2xvdWQgUzM3NzYpLlxuICAgICAgY29uc3QgbnZtUmVzdWx0ID0gYXdhaXQgYXBwbHlOdm1MYXVuY2hlcklmTmVlZGVkKG5vcm1hbGl6ZWRDbGllbnQpO1xuXG4gICAgICBjb25zdCBudm1NaXRpZ2F0aW9uQXBwbGllZCA9IHRvTnZtTWl0aWdhdGlvbkFwcGxpZWQobnZtUmVzdWx0KTtcblxuICAgICAgY29uc3QgaG9va0luc3RhbGwgPSBhd2FpdCBwZXJtaXNzaW9uSG9va0luc3RhbGxlcihub3JtYWxpemVkQ2xpZW50KTtcblxuICAgICAgcmVzLmpzb24oe1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBvdXRwdXQsXG4gICAgICAgIGNsaWVudDogbm9ybWFsaXplZENsaWVudCxcbiAgICAgICAgdmVyc2lvbjogZWZmZWN0aXZlVmVyc2lvbiB8fCAnbGF0ZXN0JyxcbiAgICAgICAgbnZtTWl0aWdhdGlvbkFwcGxpZWQsXG4gICAgICAgIGhvb2tJbnN0YWxsLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgbG9nZ2VyLndhcm4oYFtTZXR1cF0gSW5zdGFsbCBmYWlsZWQgZm9yICR7bm9ybWFsaXplZENsaWVudH06ICR7bWVzc2FnZX1gKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBtZXNzYWdlLCBjbGllbnQ6IG5vcm1hbGl6ZWRDbGllbnQgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIOKUgOKUgCBWZXJzaW9uIGluZm8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGNvbnN0IHZlcnNpb25IYW5kbGVyID0gYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBsb2NhbCA9IHtcbiAgICAgIHZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTixcbiAgICAgIG1jcGJVcmw6IGBodHRwczovL2dpdGh1Yi5jb20vJHtHSVRIVUJfUkVQT30vcmVsZWFzZXMvZG93bmxvYWQvdiR7UEFDS0FHRV9WRVJTSU9OfS9kb2xsaG91c2VtY3AtJHtQQUNLQUdFX1ZFUlNJT059Lm1jcGJgLFxuICAgIH07XG5cbiAgICAvLyBRdWVyeSBHaXRIdWIgZm9yIHRoZSBhY3R1YWwgbGF0ZXN0IHJlbGVhc2VcbiAgICBsZXQgbGF0ZXN0ID0gbG9jYWw7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdoUmVzID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtHSVRIVUJfUkVQT30vcmVsZWFzZXMvbGF0ZXN0YCwge1xuICAgICAgICBoZWFkZXJzOiB7ICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yitqc29uJywgJ1VzZXItQWdlbnQnOiAnRG9sbGhvdXNlTUNQLVNldHVwJyB9LFxuICAgICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoNTAwMCksXG4gICAgICB9KTtcbiAgICAgIGlmIChnaFJlcy5vaykge1xuICAgICAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgZ2hSZXMuanNvbigpIGFzIHsgdGFnX25hbWU6IHN0cmluZzsgYXNzZXRzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgYnJvd3Nlcl9kb3dubG9hZF91cmw6IHN0cmluZyB9PiB9O1xuICAgICAgICBjb25zdCBtY3BiQXNzZXQgPSByZWxlYXNlLmFzc2V0cy5maW5kKGEgPT4gTUNQQl9BU1NFVF9QQVRURVJOLnRlc3QoYS5uYW1lKSk7XG4gICAgICAgIGxhdGVzdCA9IHtcbiAgICAgICAgICB2ZXJzaW9uOiByZWxlYXNlLnRhZ19uYW1lLnJlcGxhY2UoL152LywgJycpLFxuICAgICAgICAgIG1jcGJVcmw6IG1jcGJBc3NldD8uYnJvd3Nlcl9kb3dubG9hZF91cmwgfHxcbiAgICAgICAgICAgIGBodHRwczovL2dpdGh1Yi5jb20vJHtHSVRIVUJfUkVQT30vcmVsZWFzZXMvZG93bmxvYWQvJHtyZWxlYXNlLnRhZ19uYW1lfS9kb2xsaG91c2VtY3AtJHtyZWxlYXNlLnRhZ19uYW1lLnJlcGxhY2UoL152LywgJycpfS5tY3BiYCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEdpdEh1YiB1bnJlYWNoYWJsZSDigJQgdXNlIGxvY2FsIHZlcnNpb24gaW5mb1xuICAgIH1cblxuICAgIHJlcy5qc29uKHtcbiAgICAgIHJ1bm5pbmc6IGxvY2FsLFxuICAgICAgbGF0ZXN0LFxuICAgICAgaXNMYXRlc3Q6IGxvY2FsLnZlcnNpb24gPT09IGxhdGVzdC52ZXJzaW9uLFxuICAgIH0pO1xuICB9O1xuXG4gIC8vIOKUgOKUgCAubWNwYiBkb3dubG9hZCByZWRpcmVjdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgY29uc3QgbWNwYlJlZGlyZWN0SGFuZGxlciA9IGFzeW5jIChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgLy8gVHJ5IEdpdEh1YiBBUEkgZm9yIHRoZSBhY3R1YWwgbGF0ZXN0IC5tY3BiIGFzc2V0IFVSTFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBnaFJlcyA9IGF3YWl0IGZldGNoKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7R0lUSFVCX1JFUE99L3JlbGVhc2VzL2xhdGVzdGAsIHtcbiAgICAgICAgaGVhZGVyczogeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbicsICdVc2VyLUFnZW50JzogJ0RvbGxob3VzZU1DUC1TZXR1cCcgfSxcbiAgICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KDUwMDApLFxuICAgICAgfSk7XG4gICAgICBpZiAoZ2hSZXMub2spIHtcbiAgICAgICAgY29uc3QgcmVsZWFzZSA9IGF3YWl0IGdoUmVzLmpzb24oKSBhcyB7IHRhZ19uYW1lOiBzdHJpbmc7IGFzc2V0czogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGJyb3dzZXJfZG93bmxvYWRfdXJsOiBzdHJpbmcgfT4gfTtcbiAgICAgICAgY29uc3QgbWNwYkFzc2V0ID0gcmVsZWFzZS5hc3NldHMuZmluZChhID0+IE1DUEJfQVNTRVRfUEFUVEVSTi50ZXN0KGEubmFtZSkpO1xuICAgICAgICBpZiAobWNwYkFzc2V0KSB7XG4gICAgICAgICAgcmVzLnJlZGlyZWN0KG1jcGJBc3NldC5icm93c2VyX2Rvd25sb2FkX3VybCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBGYWxsIHRocm91Z2ggdG8gY29uc3RydWN0ZWQgVVJMXG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2s6IGNvbnN0cnVjdCBVUkwgZnJvbSBydW5uaW5nIHZlcnNpb25cbiAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly9naXRodWIuY29tLyR7R0lUSFVCX1JFUE99L3JlbGVhc2VzL2Rvd25sb2FkL3Yke1BBQ0tBR0VfVkVSU0lPTn0vZG9sbGhvdXNlbWNwLSR7UEFDS0FHRV9WRVJTSU9OfS5tY3BiYDtcbiAgICByZXMucmVkaXJlY3QodXJsKTtcbiAgfTtcblxuICAvLyDilIDilIAgTGljZW5zZSBzZWxlY3Rpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGNvbnN0IGxpY2Vuc2VDb25maWdQYXRoID0gam9pbihob21lZGlyKCksICcuZG9sbGhvdXNlJywgJ2xpY2Vuc2UuanNvbicpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlYWRMaWNlbnNlKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3ID0gYXdhaXQgcmVhZEZpbGUobGljZW5zZUNvbmZpZ1BhdGgsICd1dGYtOCcpO1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmF3KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB7IHRpZXI6ICdhZ3BsJyB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHdyaXRlTGljZW5zZShkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRpciA9IGpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScpO1xuICAgIGF3YWl0IG1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKGxpY2Vuc2VDb25maWdQYXRoLCBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKSwgeyBtb2RlOiAwbzYwMCB9KTtcbiAgfVxuXG4gIGNvbnN0IGdldExpY2Vuc2VIYW5kbGVyID0gYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBsaWNlbnNlID0gYXdhaXQgcmVhZExpY2Vuc2UoKTtcbiAgICAvLyBOZXZlciBleHBvc2UgdmVyaWZpY2F0aW9uIGludGVybmFscyB0byBjbGllbnRcbiAgICBjb25zdCB7IHZlcmlmaWNhdGlvbkNvZGU6IF9jb2RlLCB2ZXJpZmljYXRpb25BdHRlbXB0czogX2F0dGVtcHRzLCAuLi5wdWJsaWNMaWNlbnNlIH0gPSBsaWNlbnNlO1xuICAgIHJlcy5qc29uKHB1YmxpY0xpY2Vuc2UpO1xuICB9O1xuXG4gIGNvbnN0IGxpY2Vuc2VSYXRlTGltaXRlciA9IG5ldyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIoNSwgNjBfMDAwKTsgLy8gNSByZXF1ZXN0cy9taW51dGVcblxuICBjb25zdCBzZXRMaWNlbnNlSGFuZGxlciA9IGFzeW5jIChyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoIWxpY2Vuc2VSYXRlTGltaXRlci50cnlBY3F1aXJlKCkpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1JBVEVfTElNSVRfRVhDRUVERUQnLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ3NldHVwUm91dGVzLnNldExpY2Vuc2VIYW5kbGVyJyxcbiAgICAgICAgZGV0YWlsczogJ0xpY2Vuc2UgZW5kcG9pbnQgcmF0ZSBsaW1pdCBleGNlZWRlZCAoNSByZXEvbWluKScsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDI5KS5qc29uKHsgZXJyb3I6ICdUb28gbWFueSBsaWNlbnNlIHJlcXVlc3RzLiBQbGVhc2UgdHJ5IGFnYWluIGluIGEgbWludXRlLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IHJlcS5ib2R5ID8/IHt9O1xuICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRlTGljZW5zZUlucHV0KGJvZHkpO1xuICAgIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6IHZhbGlkYXRpb25FcnJvciB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsaWNlbnNlRGF0YSA9IGJ1aWxkTGljZW5zZURhdGEoYm9keSk7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKGxpY2Vuc2VEYXRhLnRpZXIgPT09ICdhZ3BsJykge1xuICAgICAgICAvLyBBR1BMOiBhY3RpdmF0ZSBpbW1lZGlhdGVseSwgbm8gdmVyaWZpY2F0aW9uIG5lZWRlZFxuICAgICAgICBsaWNlbnNlRGF0YS5zdGF0dXMgPSAnYWN0aXZlJztcbiAgICAgICAgYXdhaXQgd3JpdGVMaWNlbnNlKGxpY2Vuc2VEYXRhKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tTZXR1cF0gTGljZW5zZSBzZXQgdG8gQUdQTCAoYWN0aXZlLCBubyB2ZXJpZmljYXRpb24pJyk7XG4gICAgICAgIHJlcy5qc29uKHsgc3VjY2VzczogdHJ1ZSwgbGljZW5zZTogbGljZW5zZURhdGEgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQ29tbWVyY2lhbCB0aWVyczogc2F2ZSBhcyBwZW5kaW5nLCBnZW5lcmF0ZSB2ZXJpZmljYXRpb24gY29kZVxuICAgICAgY29uc3QgY29kZSA9IGdlbmVyYXRlVmVyaWZpY2F0aW9uQ29kZSgpO1xuICAgICAgbGljZW5zZURhdGEuc3RhdHVzID0gJ3BlbmRpbmcnO1xuICAgICAgbGljZW5zZURhdGEudmVyaWZpY2F0aW9uQ29kZSA9IGNvZGU7XG4gICAgICBsaWNlbnNlRGF0YS52ZXJpZmljYXRpb25FeHBpcnkgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgVkVSSUZJQ0FUSU9OX0NPREVfVFRMX01TKS50b0lTT1N0cmluZygpO1xuICAgICAgbGljZW5zZURhdGEudmVyaWZpY2F0aW9uQXR0ZW1wdHMgPSAwO1xuICAgICAgbGljZW5zZURhdGEudmVyaWZpY2F0aW9uUmVxdWVzdGVkQXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICBhd2FpdCB3cml0ZUxpY2Vuc2UobGljZW5zZURhdGEpO1xuXG4gICAgICBsb2dnZXIuaW5mbyhgW1NldHVwXSBMaWNlbnNlIHBlbmRpbmcgdmVyaWZpY2F0aW9uOiAke2xpY2Vuc2VEYXRhLnRpZXJ9ICgke2xpY2Vuc2VEYXRhLmVtYWlsfSlgKTtcblxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnQ09ORklHX1VQREFURUQnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ3NldHVwUm91dGVzLnNldExpY2Vuc2VIYW5kbGVyJyxcbiAgICAgICAgZGV0YWlsczogYExpY2Vuc2UgdmVyaWZpY2F0aW9uIGluaXRpYXRlZDogJHtsaWNlbnNlRGF0YS50aWVyfWAsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7XG4gICAgICAgICAgdGllcjogbGljZW5zZURhdGEudGllcixcbiAgICAgICAgICBlbWFpbDogbGljZW5zZURhdGEuZW1haWwsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gU2VuZCB2ZXJpZmljYXRpb24gZW1haWwgZGlyZWN0bHkgdG8gV29ya2VyIGZvciBpbnN0YW50IGRlbGl2ZXJ5LlxuICAgICAgLy8gUG9zdEhvZyBldmVudCBhbHNvIGZpcmVzIGZvciBhbmFseXRpY3MsIGJ1dCB0aGUgZW1haWwgY2FuJ3Qgd2FpdCBmb3JcbiAgICAgIC8vIFBvc3RIb2cncyBldmVudCBwaXBlbGluZSAoMS01IG1pbiBkZWxheSkuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzZW5kTGljZW5zZVdvcmtlclZlcmlmaWNhdGlvbkVtYWlsKGxpY2Vuc2VEYXRhLCBjb2RlLCAnZGlyZWN0LXZlcmlmaWNhdGlvbicpO1xuICAgICAgICBsb2dnZXIuaW5mbyhgW1NldHVwXSBWZXJpZmljYXRpb24gZW1haWwgc2VudCBkaXJlY3RseSB2aWEgV29ya2VyOiAke2xpY2Vuc2VEYXRhLmVtYWlsfWApO1xuICAgICAgfSBjYXRjaCAod29ya2VyRXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYFtTZXR1cF0gRGlyZWN0IFdvcmtlciBjYWxsIGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIFBvc3RIb2cgcGlwZWxpbmU6ICR7d29ya2VyRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IHdvcmtlckVycm9yLm1lc3NhZ2UgOiBTdHJpbmcod29ya2VyRXJyb3IpfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBBbHNvIGZpcmUgUG9zdEhvZyBldmVudCBmb3IgYW5hbHl0aWNzIChub24tYmxvY2tpbmcsIGRlbGF5IGlzIGZpbmUpXG4gICAgICBjYXB0dXJlUG9zdEhvZ0xpY2Vuc2VFdmVudCh7IC4uLmxpY2Vuc2VEYXRhLCB2ZXJpZmljYXRpb25Db2RlOiBjb2RlLCBldmVudFR5cGU6ICd2ZXJpZmljYXRpb24nIH0pLmNhdGNoKFxuICAgICAgICAoZXJyKSA9PiBsb2dnZXIuZGVidWcoYFtTZXR1cF0gUG9zdEhvZyBjYXB0dXJlIGZhaWxlZDogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCksXG4gICAgICApO1xuXG4gICAgICAvLyBSZXR1cm4gc3VjY2VzcyB3aXRob3V0IGV4cG9zaW5nIHRoZSBjb2RlXG4gICAgICBjb25zdCB7IHZlcmlmaWNhdGlvbkNvZGU6IF9jLCB2ZXJpZmljYXRpb25BdHRlbXB0czogX2EsIC4uLnB1YmxpY0RhdGEgfSA9IGxpY2Vuc2VEYXRhO1xuICAgICAgcmVzLmpzb24oeyBzdWNjZXNzOiB0cnVlLCBsaWNlbnNlOiBwdWJsaWNEYXRhLCB2ZXJpZmljYXRpb25SZXF1aXJlZDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbU2V0dXBdIEZhaWxlZCB0byBzYXZlIGxpY2Vuc2UnLCB7IGVycm9yIH0pO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogJ0ZhaWxlZCB0byBzYXZlIGxpY2Vuc2UgY29uZmlndXJhdGlvbicgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHZlcmlmeVJhdGVMaW1pdGVyID0gbmV3IFNsaWRpbmdXaW5kb3dSYXRlTGltaXRlcig1LCA2MF8wMDApOyAvLyA1IGF0dGVtcHRzL21pbnV0ZVxuXG4gIGNvbnN0IHZlcmlmeUxpY2Vuc2VIYW5kbGVyID0gYXN5bmMgKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICghdmVyaWZ5UmF0ZUxpbWl0ZXIudHJ5QWNxdWlyZSgpKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdSQVRFX0xJTUlUX0VYQ0VFREVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdzZXR1cFJvdXRlcy52ZXJpZnlMaWNlbnNlSGFuZGxlcicsXG4gICAgICAgIGRldGFpbHM6ICdWZXJpZmljYXRpb24gZW5kcG9pbnQgcmF0ZSBsaW1pdCBleGNlZWRlZCAoNSByZXEvbWluKScsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDI5KS5qc29uKHsgZXJyb3I6ICdUb28gbWFueSB2ZXJpZmljYXRpb24gYXR0ZW1wdHMuIFBsZWFzZSB0cnkgYWdhaW4gaW4gYSBtaW51dGUuJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGNvZGUgfSA9IHJlcS5ib2R5ID8/IHt9O1xuICAgIGlmICghY29kZSB8fCB0eXBlb2YgY29kZSAhPT0gJ3N0cmluZycgfHwgIS9eXFxkezZ9JC8udGVzdChjb2RlKSkge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ1BsZWFzZSBlbnRlciBhIHZhbGlkIDYtZGlnaXQgdmVyaWZpY2F0aW9uIGNvZGUnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxpY2Vuc2UgPSBhd2FpdCByZWFkTGljZW5zZSgpO1xuICAgIGlmIChsaWNlbnNlLnN0YXR1cyAhPT0gJ3BlbmRpbmcnKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnTm8gcGVuZGluZyBsaWNlbnNlIHZlcmlmaWNhdGlvbi4gUGxlYXNlIHN1Ym1pdCB0aGUgbGljZW5zZSBmb3JtIGZpcnN0LicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZXhwaXJ5XG4gICAgaWYgKCFsaWNlbnNlLnZlcmlmaWNhdGlvbkV4cGlyeSB8fCBpc0NvZGVFeHBpcmVkKGxpY2Vuc2UudmVyaWZpY2F0aW9uRXhwaXJ5IGFzIHN0cmluZykpIHtcbiAgICAgIGxpY2Vuc2Uuc3RhdHVzID0gJ2V4cGlyZWQnO1xuICAgICAgYXdhaXQgd3JpdGVMaWNlbnNlKGxpY2Vuc2UpO1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ1ZlcmlmaWNhdGlvbiBjb2RlIGhhcyBleHBpcmVkLiBQbGVhc2Ugc3VibWl0IHRoZSBmb3JtIGFnYWluIHRvIHJlY2VpdmUgYSBuZXcgY29kZS4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIG1heCBhdHRlbXB0c1xuICAgIGNvbnN0IGF0dGVtcHRzID0gKChsaWNlbnNlLnZlcmlmaWNhdGlvbkF0dGVtcHRzIGFzIG51bWJlcikgPz8gMCkgKyAxO1xuICAgIGlmIChhdHRlbXB0cyA+IFZFUklGSUNBVElPTl9NQVhfQVRURU1QVFMpIHtcbiAgICAgIGxpY2Vuc2Uuc3RhdHVzID0gJ2V4cGlyZWQnO1xuICAgICAgYXdhaXQgd3JpdGVMaWNlbnNlKGxpY2Vuc2UpO1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnUkFURV9MSU1JVF9FWENFRURFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgIHNvdXJjZTogJ3NldHVwUm91dGVzLnZlcmlmeUxpY2Vuc2VIYW5kbGVyJyxcbiAgICAgICAgZGV0YWlsczogYFZlcmlmaWNhdGlvbiBtYXggYXR0ZW1wdHMgZXhjZWVkZWQgZm9yOiAke2xpY2Vuc2UuZW1haWx9YCxcbiAgICAgIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogJ1RvbyBtYW55IGZhaWxlZCBhdHRlbXB0cy4gUGxlYXNlIHN1Ym1pdCB0aGUgZm9ybSBhZ2FpbiB0byByZWNlaXZlIGEgbmV3IGNvZGUuJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBjb2RlXG4gICAgaWYgKGNvZGUgIT09IGxpY2Vuc2UudmVyaWZpY2F0aW9uQ29kZSkge1xuICAgICAgbGljZW5zZS52ZXJpZmljYXRpb25BdHRlbXB0cyA9IGF0dGVtcHRzO1xuICAgICAgYXdhaXQgd3JpdGVMaWNlbnNlKGxpY2Vuc2UpO1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gVkVSSUZJQ0FUSU9OX01BWF9BVFRFTVBUUyAtIGF0dGVtcHRzO1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogYEluY29ycmVjdCB2ZXJpZmljYXRpb24gY29kZS4gJHtyZW1haW5pbmd9IGF0dGVtcHQke3JlbWFpbmluZyA9PT0gMSA/ICcnIDogJ3MnfSByZW1haW5pbmcuYCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDb2RlIGlzIGNvcnJlY3Qg4oCUIGFjdGl2YXRlIGxpY2Vuc2VcbiAgICBjb25zdCB2ZXJpZmllZEF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIGNvbnN0IHJlcXVlc3RlZEF0ID0gbGljZW5zZS52ZXJpZmljYXRpb25SZXF1ZXN0ZWRBdCBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgdGltZVRvVmVyaWZ5TXMgPSByZXF1ZXN0ZWRBdCA/IERhdGUubm93KCkgLSBuZXcgRGF0ZShyZXF1ZXN0ZWRBdCkuZ2V0VGltZSgpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGF0dGVtcHRzVXNlZCA9ICgobGljZW5zZS52ZXJpZmljYXRpb25BdHRlbXB0cyBhcyBudW1iZXIpID8/IDApICsgMTtcblxuICAgIGxpY2Vuc2Uuc3RhdHVzID0gJ2FjdGl2ZSc7XG4gICAgbGljZW5zZS52ZXJpZmllZEF0ID0gdmVyaWZpZWRBdDtcbiAgICBkZWxldGUgbGljZW5zZS52ZXJpZmljYXRpb25Db2RlO1xuICAgIGRlbGV0ZSBsaWNlbnNlLnZlcmlmaWNhdGlvbkV4cGlyeTtcbiAgICBkZWxldGUgbGljZW5zZS52ZXJpZmljYXRpb25BdHRlbXB0cztcbiAgICBkZWxldGUgbGljZW5zZS52ZXJpZmljYXRpb25SZXF1ZXN0ZWRBdDtcbiAgICBhd2FpdCB3cml0ZUxpY2Vuc2UobGljZW5zZSk7XG5cbiAgICBsb2dnZXIuaW5mbyhgW1NldHVwXSBMaWNlbnNlIHZlcmlmaWVkIGFuZCBhY3RpdmF0ZWQ6ICR7bGljZW5zZS50aWVyfSAoJHtsaWNlbnNlLmVtYWlsfSkg4oCUICR7dGltZVRvVmVyaWZ5TXMgPyBNYXRoLnJvdW5kKHRpbWVUb1ZlcmlmeU1zIC8gMTAwMCkgKyAncycgOiAndW5rbm93bid9LCAke2F0dGVtcHRzVXNlZH0gYXR0ZW1wdChzKWApO1xuXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ0NPTkZJR19VUERBVEVEJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ3NldHVwUm91dGVzLnZlcmlmeUxpY2Vuc2VIYW5kbGVyJyxcbiAgICAgIGRldGFpbHM6IGBMaWNlbnNlIGFjdGl2YXRlZCBhZnRlciBlbWFpbCB2ZXJpZmljYXRpb246ICR7bGljZW5zZS50aWVyfWAsXG4gICAgICBhZGRpdGlvbmFsRGF0YTogeyB0aWVyOiBsaWNlbnNlLnRpZXIsIGVtYWlsOiBsaWNlbnNlLmVtYWlsIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTZW5kIGNvbmZpcm1hdGlvbiBlbWFpbCArIFBvc3RIb2cgYWN0aXZhdGlvbiBldmVudCB3aXRoIGFuYWx5dGljc1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjYXB0dXJlUG9zdEhvZ0xpY2Vuc2VFdmVudCh7XG4gICAgICAgIC4uLmxpY2Vuc2UsXG4gICAgICAgIGV2ZW50VHlwZTogJ2FjdGl2YXRpb24nLFxuICAgICAgICB2ZXJpZmljYXRpb25fdGltZV9tczogdGltZVRvVmVyaWZ5TXMsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9hdHRlbXB0czogYXR0ZW1wdHNVc2VkLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiBjb2RlLmxlbmd0aCA9PT0gNiA/ICdjb2RlX29yX2NsaWNrJyA6ICd1bmtub3duJyxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gTGljZW5zZSBhY3RpdmF0aW9uIGV2ZW50IHNlbnQgdG8gUG9zdEhvZzogJHtsaWNlbnNlLnRpZXJ9YCk7XG4gICAgfSBjYXRjaCAocG9zdGhvZ0Vycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gUG9zdEhvZyBjYXB0dXJlIGZhaWxlZDogJHtwb3N0aG9nRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IHBvc3Rob2dFcnJvci5tZXNzYWdlIDogU3RyaW5nKHBvc3Rob2dFcnJvcil9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyB2ZXJpZmljYXRpb25Db2RlOiBfYywgdmVyaWZpY2F0aW9uQXR0ZW1wdHM6IF9hLCB2ZXJpZmljYXRpb25FeHBpcnk6IF9lLCAuLi5wdWJsaWNMaWNlbnNlIH0gPSBsaWNlbnNlO1xuICAgIHJlcy5qc29uKHsgc3VjY2VzczogdHJ1ZSwgbGljZW5zZTogcHVibGljTGljZW5zZSB9KTtcbiAgfTtcblxuICBjb25zdCByZXNlbmRSYXRlTGltaXRlciA9IG5ldyBTbGlkaW5nV2luZG93UmF0ZUxpbWl0ZXIoMywgMTIwXzAwMCk7IC8vIDMgcmVzZW5kcyBwZXIgMiBtaW51dGVzXG5cbiAgY29uc3QgcmVzZW5kVmVyaWZpY2F0aW9uSGFuZGxlciA9IGFzeW5jIChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgaWYgKCFyZXNlbmRSYXRlTGltaXRlci50cnlBY3F1aXJlKCkpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDI5KS5qc29uKHsgZXJyb3I6ICdQbGVhc2Ugd2FpdCBiZWZvcmUgcmVxdWVzdGluZyBhbm90aGVyIGNvZGUuJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsaWNlbnNlID0gYXdhaXQgcmVhZExpY2Vuc2UoKTtcbiAgICBpZiAobGljZW5zZS5zdGF0dXMgIT09ICdwZW5kaW5nJyAmJiBsaWNlbnNlLnN0YXR1cyAhPT0gJ2V4cGlyZWQnKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMCkuanNvbih7IGVycm9yOiAnTm8gcGVuZGluZyBsaWNlbnNlIHZlcmlmaWNhdGlvbi4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIG5ldyBjb2RlIGFuZCByZXNldFxuICAgIGNvbnN0IGNvZGUgPSBnZW5lcmF0ZVZlcmlmaWNhdGlvbkNvZGUoKTtcbiAgICBsaWNlbnNlLnN0YXR1cyA9ICdwZW5kaW5nJztcbiAgICBsaWNlbnNlLnZlcmlmaWNhdGlvbkNvZGUgPSBjb2RlO1xuICAgIGxpY2Vuc2UudmVyaWZpY2F0aW9uRXhwaXJ5ID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIFZFUklGSUNBVElPTl9DT0RFX1RUTF9NUykudG9JU09TdHJpbmcoKTtcbiAgICBsaWNlbnNlLnZlcmlmaWNhdGlvbkF0dGVtcHRzID0gMDtcbiAgICBhd2FpdCB3cml0ZUxpY2Vuc2UobGljZW5zZSk7XG5cbiAgICAvLyBTZW5kIHZlcmlmaWNhdGlvbiBlbWFpbCBkaXJlY3RseSB0byBXb3JrZXIgZm9yIGluc3RhbnQgZGVsaXZlcnlcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VuZExpY2Vuc2VXb3JrZXJWZXJpZmljYXRpb25FbWFpbChsaWNlbnNlLCBjb2RlLCAnZGlyZWN0LXJlc2VuZCcpO1xuICAgICAgbG9nZ2VyLmluZm8oYFtTZXR1cF0gVmVyaWZpY2F0aW9uIGNvZGUgcmVzZW50IGRpcmVjdGx5IHZpYSBXb3JrZXI6ICR7bGljZW5zZS5lbWFpbH1gKTtcbiAgICB9IGNhdGNoICh3b3JrZXJFcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oYFtTZXR1cF0gRGlyZWN0IFdvcmtlciBjYWxsIGZhaWxlZDogJHt3b3JrZXJFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gd29ya2VyRXJyb3IubWVzc2FnZSA6IFN0cmluZyh3b3JrZXJFcnJvcil9YCk7XG4gICAgfVxuXG4gICAgcmVzLmpzb24oeyBzdWNjZXNzOiB0cnVlLCBtZXNzYWdlOiAnQSBuZXcgdmVyaWZpY2F0aW9uIGNvZGUgaGFzIGJlZW4gc2VudCB0byB5b3VyIGVtYWlsLicgfSk7XG4gIH07XG5cbiAgcmV0dXJuIHsgaW5zdGFsbEhhbmRsZXIsIG9wZW5Db25maWdIYW5kbGVyLCB2ZXJzaW9uSGFuZGxlciwgbWNwYlJlZGlyZWN0SGFuZGxlciwgZGV0ZWN0SGFuZGxlciwgZ2V0TGljZW5zZUhhbmRsZXIsIHNldExpY2Vuc2VIYW5kbGVyLCB2ZXJpZnlMaWNlbnNlSGFuZGxlciwgcmVzZW5kVmVyaWZpY2F0aW9uSGFuZGxlciB9O1xufVxuXG4vLyDilIDilIAgSW5zdGFsbCBhbmFseXRpY3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogRmlyZS1hbmQtZm9yZ2V0IFBvc3RIb2cgZXZlbnQgZm9yIGluc3RhbGxhdGlvbiBhbmFseXRpY3MuXG4gKiBVc2VzIHRoZSBzYW1lIGluc3RhbGwgSUQgYXMgdGhlIGxpY2Vuc2UgdGVsZW1ldHJ5IHN5c3RlbS5cbiAqIFNpbGVudGx5IHN3YWxsb3dzIGFsbCBlcnJvcnMg4oCUIGFuYWx5dGljcyBtdXN0IG5ldmVyIGJyZWFrIGluc3RhbGxzLlxuICovXG5mdW5jdGlvbiBjYXB0dXJlSW5zdGFsbEFuYWx5dGljcyhldmVudDogc3RyaW5nLCBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICBjb25zdCBwb3N0aG9nID0gbmV3IFBvc3RIb2coUE9TVEhPR19QUk9KRUNUX0tFWSwge1xuICAgIGhvc3Q6IHByb2Nlc3MuZW52LlBPU1RIT0dfSE9TVCB8fCAnaHR0cHM6Ly9hcHAucG9zdGhvZy5jb20nLFxuICAgIGZsdXNoQXQ6IDEsXG4gICAgZmx1c2hJbnRlcnZhbDogNTAwMCxcbiAgfSk7XG4gIHJlYWRGaWxlKGpvaW4oaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICcudGVsZW1ldHJ5LWlkJyksICd1dGYtOCcpXG4gICAgLnRoZW4oaWQgPT4gaWQudHJpbSgpKVxuICAgIC5jYXRjaCgoKSA9PiAnYW5vbnltb3VzJylcbiAgICAudGhlbihpbnN0YWxsSWQgPT4ge1xuICAgICAgcG9zdGhvZy5jYXB0dXJlKHsgZGlzdGluY3RJZDogaW5zdGFsbElkLCBldmVudCwgcHJvcGVydGllcyB9KTtcbiAgICAgIHJldHVybiBwb3N0aG9nLnNodXRkb3duKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKCkgPT4geyAvKiB0ZWxlbWV0cnkgbXVzdCBuZXZlciB0aHJvdyAqLyB9KTtcbn1cblxuLy8g4pSA4pSAIE5WTSBtaXRpZ2F0aW9uIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBDbGF1ZGUgRGVza3RvcCBoYXMgYSBidWcgd2hlcmUgaXQgc2NhbnMgfi8ubnZtL3ZlcnNpb25zL25vZGUvLCBidWlsZHMgYSBQQVRIXG4vLyBmcm9tIGFsbCBpbnN0YWxsZWQgdmVyc2lvbnMgaW4gYXNjZW5kaW5nIG9yZGVyIChvbGRlc3QgZmlyc3QpLCBhbmQgcnVucyBucHhcbi8vIHVuZGVyIGFuIG91dGRhdGVkIE5vZGUgZXZlbiB3aGVuIGEgbmV3ZXIgdmVyc2lvbiBpcyBpbnN0YWxsZWQgYW5kIHNlbGVjdGVkLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXIvaXNzdWVzLzE5MDJcbi8vXG4vLyBGaXg6IHdoZW4gTlZNIGlzIHByZXNlbnQsIGNyZWF0ZSBhIHNtYWxsIGJhc2ggbGF1bmNoZXIgdGhhdCBpbml0aWFsaXNlcyBOVk1cbi8vIHByb3Blcmx5IGJlZm9yZSBkZWxlZ2F0aW5nIHRvIG5weCwgdGhlbiBwYXRjaCB0aGUgd3JpdHRlbiBNQ1AgY2xpZW50IGNvbmZpZ1xuLy8gdG8gdXNlIHRoYXQgbGF1bmNoZXIgaW5zdGVhZCBvZiBiYXJlIGBucHhgLlxuXG4vKiogUmVzdWx0IG9mIGF0dGVtcHRpbmcgdG8gYXBwbHkgdGhlIE5WTSBsYXVuY2hlciBtaXRpZ2F0aW9uLiAqL1xuZXhwb3J0IHR5cGUgTnZtTGF1bmNoZXJSZXN1bHQgPSAnYXBwbGllZCcgfCAnbm90LWFwcGxpY2FibGUnIHwgJ2ZhaWxlZCc7XG5cbi8qKiBKU09OLWZvcm1hdCBjbGllbnRzIGVsaWdpYmxlIGZvciBOVk0gbGF1bmNoZXIgcmVwYWlyIG9uIHN0YXJ0dXAuICovXG5jb25zdCBKU09OX0ZPUk1BVF9DTElFTlRTID0gW1xuICAnY2xhdWRlJywgJ2NsYXVkZS1jb2RlJywgJ2N1cnNvcicsICd3aW5kc3VyZicsICdsbXN0dWRpbycsICdnZW1pbmktY2xpJyxcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogT3JjaGVzdHJhdGVzIHRoZSBOVk0gbWl0aWdhdGlvbjogZGV0ZWN0IOKGkiBjcmVhdGUgbGF1bmNoZXIg4oaSIHBhdGNoIGNvbmZpZyDihpIgdGVsZW1ldHJ5LlxuICogRXh0cmFjdGVkIGZyb20gaW5zdGFsbEhhbmRsZXIgdG8ga2VlcCBpdHMgY29nbml0aXZlIGNvbXBsZXhpdHkgd2l0aGluIFNvbmFyQ2xvdWQgbGltaXRzLlxuICogUmV0dXJucyBhIHJlc3VsdCBlbnVtIHJhdGhlciB0aGFuIHRocm93aW5nIHNvIHRoZSBjYWxsZXIgYWx3YXlzIGdldHMgYSBjbGVhbiBzaWduYWwuXG4gKlxuICogQHBhcmFtIGhvbWUgLSBPdmVycmlkZSBob21lIGRpcmVjdG9yeSAoaW5qZWN0YWJsZSBmb3IgdGVzdHMpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseU52bUxhdW5jaGVySWZOZWVkZWQoY2xpZW50OiBzdHJpbmcsIGhvbWUgPSBob21lZGlyKCkpOiBQcm9taXNlPE52bUxhdW5jaGVyUmVzdWx0PiB7XG4gIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBOVk0gbWl0aWdhdGlvbiBjaGVjayBmb3IgY2xpZW50OiAke2NsaWVudH1gKTtcbiAgaWYgKCFhd2FpdCBpc052bVByZXNlbnQoaG9tZSkpIHtcbiAgICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gTlZNIG5vdCBwcmVzZW50IOKAlCBza2lwcGluZyBsYXVuY2hlciBtaXRpZ2F0aW9uIGZvciAke2NsaWVudH1gKTtcbiAgICBjYXB0dXJlSW5zdGFsbEFuYWx5dGljcygnbnZtX2xhdW5jaGVyX25vdF9hcHBsaWNhYmxlJywgeyBjbGllbnQsIHBsYXRmb3JtOiBwbGF0Zm9ybSgpIH0pO1xuICAgIHJldHVybiAnbm90LWFwcGxpY2FibGUnO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3Qgd3JhcHBlclBhdGggPSBhd2FpdCBlbnN1cmVOdm1MYXVuY2hlcihob21lKTtcbiAgICBhd2FpdCBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyKGNsaWVudCwgd3JhcHBlclBhdGgpO1xuICAgIGxvZ2dlci5pbmZvKGBbU2V0dXBdIE5WTS1hd2FyZSBsYXVuY2hlciBhcHBsaWVkIGZvciAke2NsaWVudH1gKTtcbiAgICBjYXB0dXJlSW5zdGFsbEFuYWx5dGljcygnbnZtX2xhdW5jaGVyX2FwcGxpZWQnLCB7IGNsaWVudCwgcGxhdGZvcm06IHBsYXRmb3JtKCkgfSk7XG4gICAgcmV0dXJuICdhcHBsaWVkJztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFtTZXR1cF0gTlZNIGxhdW5jaGVyIHNldHVwIGZhaWxlZCAobm9uLWZhdGFsKTogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCk7XG4gICAgY2FwdHVyZUluc3RhbGxBbmFseXRpY3MoJ252bV9sYXVuY2hlcl9mYWlsZWQnLCB7XG4gICAgICBjbGllbnQsXG4gICAgICBwbGF0Zm9ybTogcGxhdGZvcm0oKSxcbiAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuICdmYWlsZWQnO1xuICB9XG59XG5cbi8qKlxuICogU3RhcnR1cCByZXBhaXI6IHJlLWNyZWF0ZXMgdGhlIHdyYXBwZXIgYW5kIHJlLXBhdGNoZXMgYWxsIGtub3duIEpTT04tZm9ybWF0XG4gKiBjbGllbnQgY29uZmlncyBvbiBldmVyeSBzZXJ2ZXIgc3RhcnQuIEhhbmRsZXMgdHdvIGNhc2VzOlxuICogICAxLiBXcmFwcGVyIHdhcyBkZWxldGVkIOKAlCByZWNyZWF0ZXMgaXQgc28gY29uZmlncyBwb2ludGluZyB0byBpdCBrZWVwIHdvcmtpbmcuXG4gKiAgIDIuIFByZS1leGlzdGluZyBpbnN0YWxsICh1c2VyIGluc3RhbGxlZCBiZWZvcmUgdGhpcyBmaXggc2hpcHBlZCkg4oCUIHBhdGNoZXNcbiAqICAgICAgY29uZmlncyB0aGF0IHN0aWxsIHVzZSBiYXJlIGBucHhgLlxuICpcbiAqIEZpcmUtYW5kLWZvcmdldCBmcm9tIHN0YXJ0V2ViU2VydmVyLiBBbGwgZXJyb3JzIGFyZSBzd2FsbG93ZWQgYW5kIGxvZ2dlZC5cbiAqXG4gKiBAcGFyYW0gaG9tZSAgICAgICAgICAgICAgIC0gT3ZlcnJpZGUgaG9tZSBkaXJlY3RvcnkgKGluamVjdGFibGUgZm9yIHRlc3RzKVxuICogQHBhcmFtIGNvbmZpZ1BhdGhSZXNvbHZlciAtIE92ZXJyaWRlIGNvbmZpZyBwYXRoIGxvb2t1cCAoaW5qZWN0YWJsZSBmb3IgdGVzdHMpLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybiBudWxsIHRvIHNraXAgYSBjbGllbnQgZW50aXJlbHkuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gdGhlIHByb2R1Y3Rpb24gZ2V0Q29uZmlnUGF0aC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGFpck52bUxhdW5jaGVyT25TdGFydHVwKFxuICBob21lID0gaG9tZWRpcigpLFxuICBjb25maWdQYXRoUmVzb2x2ZXI6IChjbGllbnQ6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbCA9IGdldENvbmZpZ1BhdGgsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHBsYXRmb3JtKCkgPT09ICd3aW4zMicpIHJldHVybjtcbiAgbG9nZ2VyLmRlYnVnKCdbU2V0dXBdIE5WTSBsYXVuY2hlciBzdGFydHVwIHJlcGFpcjogY2hlY2tpbmcgZm9yIE5WTS4uLicpO1xuICBpZiAoIWF3YWl0IGlzTnZtUHJlc2VudChob21lKSkge1xuICAgIGxvZ2dlci5kZWJ1ZygnW1NldHVwXSBOVk0gbGF1bmNoZXIgc3RhcnR1cCByZXBhaXI6IE5WTSBub3QgcHJlc2VudCDigJQgbm90aGluZyB0byByZXBhaXInKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgd3JhcHBlclBhdGg6IHN0cmluZztcbiAgdHJ5IHtcbiAgICB3cmFwcGVyUGF0aCA9IGF3YWl0IGVuc3VyZU52bUxhdW5jaGVyKGhvbWUpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgW1NldHVwXSBOVk0gc3RhcnR1cCByZXBhaXI6IGNvdWxkIG5vdCBjcmVhdGUgbGF1bmNoZXI6ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICBKU09OX0ZPUk1BVF9DTElFTlRTLm1hcChjbGllbnQgPT4ge1xuICAgICAgY29uc3QgY29uZmlnUGF0aCA9IGNvbmZpZ1BhdGhSZXNvbHZlcihjbGllbnQpO1xuICAgICAgaWYgKCFjb25maWdQYXRoKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7IC8vIHJlc29sdmVyIHJldHVybmVkIG51bGwg4oCUIHNraXAgdGhpcyBjbGllbnRcbiAgICAgIHJldHVybiBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyKGNsaWVudCwgd3JhcHBlclBhdGgsIGNvbmZpZ1BhdGgpXG4gICAgICAgIC5jYXRjaChlcnIgPT5cbiAgICAgICAgICBsb2dnZXIud2FybihgW1NldHVwXSBOVk0gc3RhcnR1cCByZXBhaXI6IGZhaWxlZCB0byBwYXRjaCAke2NsaWVudH06ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWApXG4gICAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICBsb2dnZXIuaW5mbygnW1NldHVwXSBOVk0gbGF1bmNoZXIgc3RhcnR1cCByZXBhaXIgY29tcGxldGUnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgTlZNIGlzIGluc3RhbGxlZCBvbiB0aGlzIG1hY2hpbmUgKG1hY09TL0xpbnV4IG9ubHkpLlxuICogQ2hlY2tzIHByb2Nlc3MuZW52Lk5WTV9ESVIgZmlyc3QgKGhhbmRsZXMgbm9uLXN0YW5kYXJkIGluc3RhbGwgbG9jYXRpb25zKSxcbiAqIHRoZW4gZmFsbHMgYmFjayB0byB+Ly5udm0uXG4gKlxuICogQHBhcmFtIGhvbWUgLSBPdmVycmlkZSBob21lIGRpcmVjdG9yeSAoZGVmYXVsdHMgdG8gb3MuaG9tZWRpcigpOyBpbmplY3RhYmxlIGZvciB0ZXN0cylcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzTnZtUHJlc2VudChob21lID0gaG9tZWRpcigpKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChwbGF0Zm9ybSgpID09PSAnd2luMzInKSByZXR1cm4gZmFsc2U7XG4gIC8vIENoZWNrIGNhbmRpZGF0ZXMgaW4gb3JkZXI6IGVudiB2YXIgb3ZlcnJpZGUg4oaSIGRlZmF1bHQgbG9jYXRpb25cbiAgY29uc3QgY2FuZGlkYXRlcyA9IFtcbiAgICBwcm9jZXNzLmVudi5OVk1fRElSLFxuICAgIGpvaW4oaG9tZSwgJy5udm0nKSxcbiAgXS5maWx0ZXIoQm9vbGVhbikgYXMgc3RyaW5nW107XG4gIGZvciAoY29uc3QgZGlyIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYWNjZXNzKGpvaW4oZGlyLCAnbnZtLnNoJykpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIE5WTSBkZXRlY3RlZCBhdDogJHtkaXJ9YCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHsgLyogdHJ5IG5leHQgY2FuZGlkYXRlICovIH1cbiAgfVxuICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gTlZNIG5vdCBmb3VuZCAoY2hlY2tlZDogJHtjYW5kaWRhdGVzLmpvaW4oJywgJyl9KWApO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIE5WTSBkaXJlY3Rvcnk6IHByb2Nlc3MuZW52Lk5WTV9ESVIgaWYgc2V0LCBvdGhlcndpc2Ugfi8ubnZtLlxuICogVXNlZCB0byBoYXJkY29kZSB0aGUgcGF0aCBpbiB0aGUgZ2VuZXJhdGVkIHdyYXBwZXIgc28gaXQgd29ya3MgZXZlbiB3aGVuXG4gKiBDbGF1ZGUgRGVza3RvcCBkb2VzIG5vdCBzb3VyY2UgdGhlIHVzZXIncyBzaGVsbCBwcm9maWxlLlxuICpcbiAqIHByb2Nlc3MuZW52Lk5WTV9ESVIgaXMgdmFsaWRhdGVkIGJlZm9yZSB1c2UgdG8gcHJldmVudCBzaGVsbCBpbmplY3Rpb24gaW5cbiAqIHRoZSBnZW5lcmF0ZWQgd3JhcHBlciBzY3JpcHQgKG9ubHkgYWJzb2x1dGUgcGF0aHMgd2l0aCBzYWZlIGNoYXJhY3RlcnMgYXJlXG4gKiBhY2NlcHRlZDsgdW5zYWZlIHZhbHVlcyBmYWxsIGJhY2sgdG8gfi8ubnZtKS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU52bURpcihob21lID0gaG9tZWRpcigpKTogc3RyaW5nIHtcbiAgY29uc3QgZW52RGlyID0gcHJvY2Vzcy5lbnYuTlZNX0RJUjtcbiAgaWYgKGVudkRpciAmJiAvXlxcL1tcXHcuL34tXSskLy50ZXN0KGVudkRpcikpIHtcbiAgICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gTlZNIGRpciByZXNvbHZlZCBmcm9tIE5WTV9ESVIgZW52IHZhcjogJHtlbnZEaXJ9YCk7XG4gICAgcmV0dXJuIGVudkRpcjtcbiAgfVxuICBpZiAoZW52RGlyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIE5WTV9ESVIgZW52IHZhciByZWplY3RlZCAodW5zYWZlIHBhdGgpOiAke2VudkRpcn0g4oCUIGZhbGxpbmcgYmFjayB0byB+Ly5udm1gKTtcbiAgfVxuICBjb25zdCBmYWxsYmFjayA9IGpvaW4oaG9tZSwgJy5udm0nKTtcbiAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIE5WTSBkaXIgcmVzb2x2ZWQgdG8gZGVmYXVsdDogJHtmYWxsYmFja31gKTtcbiAgcmV0dXJuIGZhbGxiYWNrO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgfi8uZG9sbGhvdXNlL2Jpbi9kb2xsaG91c2VtY3AtbnZtLnNoIGFuZCByZXR1cm5zIGl0cyBwYXRoLlxuICpcbiAqIFRoZSBOVk0gZGlyZWN0b3J5IGlzIHJlc29sdmVkIGF0IGdlbmVyYXRpb24gdGltZSBhbmQgaGFyZGNvZGVkIGludG8gdGhlXG4gKiBzY3JpcHQuIFRoaXMgaXMgaW50ZW50aW9uYWw6IENsYXVkZSBEZXNrdG9wIGRvZXMgbm90IHNvdXJjZSB0aGUgdXNlcidzXG4gKiBzaGVsbCBwcm9maWxlLCBzbyAkTlZNX0RJUiB3b3VsZCBiZSB1bnNldCB3aGVuIHRoZSB3cmFwcGVyIHJ1bnMuIEJ5XG4gKiBlbWJlZGRpbmcgdGhlIGFic29sdXRlIHBhdGggd2UgZ3VhcmFudGVlIHRoZSBjb3JyZWN0IE5WTSBpcyBmb3VuZC5cbiAqXG4gKiBUaGUgc2NyaXB0IHNvdXJjZXMgTlZNLCB0aGVuIGNoZWNrcyB0aGUgYWN0aXZlIE5vZGUgbWFqb3IgdmVyc2lvbi4gSWYgaXRcbiAqIGlzIGJlbG93IDE4ICh0aGUgRG9sbGhvdXNlTUNQIG1pbmltdW0pLCBpdCB0cmllcyBgbnZtIHVzZSBub2RlYCAoaGlnaGVzdFxuICogaW5zdGFsbGVkKSB0aGVuIGBudm0gdXNlIC0tbHRzYCBhcyBhIGZhbGxiYWNrLiBBIGZpbmFsIHZlcnNpb24gY2hlY2tcbiAqIHdyaXRlcyBhIHdhcm5pbmcgdG8gc3RkZXJyIGlmIHRoZSBub2RlIGlzIHN0aWxsIHRvbyBvbGQg4oCUIHRoYXQgd2FybmluZ1xuICogd2lsbCBhcHBlYXIgaW4gQ2xhdWRlIERlc2t0b3AncyBlcnJvciBsb2cuXG4gKlxuICogQHBhcmFtIGhvbWUgICAgICAgLSBPdmVycmlkZSBob21lIGRpcmVjdG9yeSAoaW5qZWN0YWJsZSBmb3IgdGVzdHMpXG4gKiBAcGFyYW0gbnZtRGlyT3ZlcnJpZGUgLSBPdmVycmlkZSB0aGUgcmVzb2x2ZWQgTlZNIHBhdGggKGluamVjdGFibGUgZm9yIHRlc3RzKVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTnZtTGF1bmNoZXIoaG9tZSA9IGhvbWVkaXIoKSwgbnZtRGlyT3ZlcnJpZGU/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBiaW5EaXIgPSBqb2luKGhvbWUsICcuZG9sbGhvdXNlJywgJ2JpbicpO1xuICBjb25zdCB3cmFwcGVyUGF0aCA9IGpvaW4oYmluRGlyLCAnZG9sbGhvdXNlbWNwLW52bS5zaCcpO1xuICBjb25zdCBudm1EaXIgPSBudm1EaXJPdmVycmlkZSA/PyByZXNvbHZlTnZtRGlyKGhvbWUpO1xuXG4gIGF3YWl0IG1rZGlyKGJpbkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgLy8gU2luZ2xlLWV4cHJlc3Npb24gaGVscGVyIHJldXNlZCB0d2ljZSB0byBnZXQgdGhlIE5vZGUgbWFqb3IgdmVyc2lvbi5cbiAgY29uc3QgZ2V0TWFqb3IgPSAnbm9kZSAtZSBcInByb2Nlc3Muc3Rkb3V0LndyaXRlKFN0cmluZyhwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoXFwnLlxcJylbMF0pKVwiIDI+L2Rldi9udWxsIHx8IGVjaG8gXCIwXCInO1xuXG4gIGNvbnN0IHNjcmlwdCA9IFtcbiAgICAnIyEvYmluL2Jhc2gnLFxuICAgICcjIERvbGxob3VzZU1DUCBOVk0tYXdhcmUgbGF1bmNoZXInLFxuICAgICcjIEF1dG8tZ2VuZXJhdGVkIGJ5IHRoZSBEb2xsaG91c2VNQ1AgaW5zdGFsbGVyLicsXG4gICAgJyMgRW5zdXJlcyB0aGUgY29ycmVjdCBOb2RlLmpzIHZlcnNpb24gaXMgYWN0aXZlIGJlZm9yZSBydW5uaW5nIG5weCwnLFxuICAgICcjIHdvcmtpbmcgYXJvdW5kIGEgQ2xhdWRlIERlc2t0b3AgYnVnIHdoZXJlIE5WTSBQQVRIIG9yZGVyaW5nIGNhdXNlcycsXG4gICAgJyMgbnB4IHRvIGV4ZWN1dGUgdW5kZXIgYW4gb2xkZXIgTm9kZSB2ZXJzaW9uIChlLmcuIHYxMikgZXZlbiB3aGVuIGEnLFxuICAgICcjIG5ld2VyIHZlcnNpb24gaXMgaW5zdGFsbGVkLicsXG4gICAgJyMgU2VlOiBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXIvaXNzdWVzLzE5MDInLFxuICAgICcnLFxuICAgIGBOVk1fRElSPVwiJHtudm1EaXJ9XCJgLFxuICAgICdpZiBbIC1zIFwiJE5WTV9ESVIvbnZtLnNoXCIgXTsgdGhlbicsXG4gICAgJyAgICAjIHNoZWxsY2hlY2sgc291cmNlPS9kZXYvbnVsbCcsXG4gICAgJyAgICAuIFwiJE5WTV9ESVIvbnZtLnNoXCIgMj4vZGV2L251bGwnLFxuICAgICcgICAgIyBJZiB0aGUgYWN0aXZlIE5vZGUgaXMgYmVsb3cgdjE4IChtaW5pbXVtIGZvciBEb2xsaG91c2VNQ1ApLCcsXG4gICAgYCAgICAjIHRyeSAnbm9kZScgYWxpYXMgKGhpZ2hlc3QgaW5zdGFsbGVkKSB0aGVuIExUUyBhcyBhIGZhbGxiYWNrLmAsXG4gICAgYCAgICBNQUpPUj0kKCR7Z2V0TWFqb3J9KWAsXG4gICAgJyAgICBpZiBbIFwiJE1BSk9SXCIgLWx0IDE4IF07IHRoZW4nLFxuICAgICcgICAgICAgIG52bSB1c2Ugbm9kZSAyPi9kZXYvbnVsbCB8fCBudm0gdXNlIC0tbHRzIDI+L2Rldi9udWxsIHx8IHRydWUnLFxuICAgIGAgICAgICAgIE1BSk9SPSQoJHtnZXRNYWpvcn0pYCxcbiAgICAnICAgICAgICBpZiBbIFwiJE1BSk9SXCIgLWx0IDE4IF07IHRoZW4nLFxuICAgICcgICAgICAgICAgICBlY2hvIFwiW0RvbGxob3VzZU1DUF0gV0FSTklORzogTm9kZS5qcyAkTUFKT1IgaXMgYmVsb3cgdGhlIG1pbmltdW0gKDE4KS4gRG9sbGhvdXNlTUNQIG1heSBub3Qgc3RhcnQgY29ycmVjdGx5LlwiID4mMicsXG4gICAgJyAgICAgICAgZmknLFxuICAgICcgICAgZmknLFxuICAgICdmaScsXG4gICAgJycsXG4gICAgJ2V4ZWMgbnB4IFwiJEBcIicsXG4gIF0uam9pbignXFxuJykgKyAnXFxuJztcblxuICBsb2dnZXIuZGVidWcoYFtTZXR1cF0gV3JpdGluZyBOVk0gbGF1bmNoZXIgd3JhcHBlciB0bzogJHt3cmFwcGVyUGF0aH0gKE5WTV9ESVI9JHtudm1EaXJ9KWApO1xuICBhd2FpdCB3cml0ZUZpbGUod3JhcHBlclBhdGgsIHNjcmlwdCwgJ3V0Zi04Jyk7XG4gIGF3YWl0IGNobW9kKHdyYXBwZXJQYXRoLCAwbzc1NSk7XG4gIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBOVk0gbGF1bmNoZXIgd3JhcHBlciB3cml0dGVuIGFuZCBtYWRlIGV4ZWN1dGFibGVgKTtcbiAgcmV0dXJuIHdyYXBwZXJQYXRoO1xufVxuXG4vKipcbiAqIERldGVjdHMgdGhlIGluZGVudGF0aW9uIHVzZWQgaW4gYSBKU09OIHN0cmluZyBzbyB0aGUgcmVzZXJpYWxpc2VkIG91dHB1dFxuICogcHJlc2VydmVzIHRoZSBvcmlnaW5hbCBzdHlsZSAoYXZvaWRzIG5vaXN5IGRpZmZzIGluIHVzZXItbWFpbnRhaW5lZCBjb25maWdzKS5cbiAqIFJldHVybnMgdGhlIHRhYiBjaGFyYWN0ZXIgZm9yIHRhYi1pbmRlbnRlZCBmaWxlcywgb3IgdGhlIGxlYWRpbmctc3BhY2UgY291bnRcbiAqIChtaW5pbXVtIDIpIGZvciBzcGFjZS1pbmRlbnRlZCBmaWxlcy4gRGVmYXVsdHMgdG8gMiB3aGVuIHVuZGV0ZWN0YWJsZS5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0SW5kZW50KHJhdzogc3RyaW5nKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgZm9yIChjb25zdCBsaW5lIG9mIHJhdy5zcGxpdCgnXFxuJykpIHtcbiAgICBpZiAobGluZS5sZW5ndGggPT09IDAgfHwgbGluZS5zdGFydHNXaXRoKCd7JykgfHwgbGluZS5zdGFydHNXaXRoKCd9JykpIGNvbnRpbnVlO1xuICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJ1xcdCcpKSByZXR1cm4gJ1xcdCc7XG4gICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnICcpKSB7XG4gICAgICBjb25zdCBzcGFjZXMgPSBsaW5lLmxlbmd0aCAtIGxpbmUudHJpbVN0YXJ0KCkubGVuZ3RoO1xuICAgICAgaWYgKHNwYWNlcyA+PSAyKSByZXR1cm4gc3BhY2VzO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMjtcbn1cblxuLyoqXG4gKiBQYXRjaGVzIHRoZSBkb2xsaG91c2VtY3AgZW50cnkgaW4gYW4gTUNQIGNsaWVudCdzIEpTT04gY29uZmlnIHRvIHVzZVxuICogdGhlIE5WTS1hd2FyZSBsYXVuY2hlciBpbnN0ZWFkIG9mIGJhcmUgYG5weGAuXG4gKlxuICogT25seSBhY3RzIG9uIEpTT04tZm9ybWF0IGNvbmZpZ3MuIFRPTUwgY29uZmlncyAoY29kZXgpIGFyZSBza2lwcGVkLlxuICogU2lsZW50bHkgbm8tb3BzIGlmIHRoZSBjb25maWcgZmlsZSBpcyBtaXNzaW5nIG9yIHVucmVhZGFibGUuXG4gKlxuICogQHBhcmFtIGNvbmZpZ1BhdGhPdmVycmlkZSAtIFVzZSB0aGlzIHBhdGggaW5zdGVhZCBvZiB0aGUgcGxhdGZvcm0gZGVmYXVsdCAoaW5qZWN0YWJsZSBmb3IgdGVzdHMpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyKGNsaWVudDogc3RyaW5nLCB3cmFwcGVyUGF0aDogc3RyaW5nLCBjb25maWdQYXRoT3ZlcnJpZGU/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IGNvbmZpZ1BhdGhPdmVycmlkZSA/PyBnZXRDb25maWdQYXRoKGNsaWVudCk7XG4gIGlmICghY29uZmlnUGF0aCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyOiBubyBjb25maWcgcGF0aCBmb3IgJHtjbGllbnR9IOKAlCBza2lwcGluZ2ApO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoY29uZmlnUGF0aC5lbmRzV2l0aCgnLnRvbWwnKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyOiBUT01MIGNvbmZpZyBmb3IgJHtjbGllbnR9IOKAlCBza2lwcGluZyAobm90IEpTT04tZm9ybWF0KWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCByYXc6IHN0cmluZztcbiAgdHJ5IHtcbiAgICByYXcgPSBhd2FpdCByZWFkRmlsZShjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuOyAvLyBDb25maWcgbm90IHJlYWRhYmxlIOKAlCBpbnN0YWxsLW1jcCBtYXkgbm90IGhhdmUgd3JpdHRlbiBpdCB5ZXRcbiAgfVxuXG4gIGxldCBwYXJzZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB0cnkge1xuICAgIHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuOyAvLyBNYWxmb3JtZWQgSlNPTiDigJQgZG9uJ3QgdG91Y2ggaXRcbiAgfVxuXG4gIGxldCBwYXRjaGVkID0gZmFsc2U7XG4gIGZvciAoY29uc3Qga2V5IG9mIFsnbWNwU2VydmVycycsICdzZXJ2ZXJzJ10pIHtcbiAgICBjb25zdCBzZWN0aW9uID0gcGFyc2VkW2tleV0gYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgdW5kZWZpbmVkO1xuICAgIGlmIChzZWN0aW9uPy5kb2xsaG91c2VtY3ApIHtcbiAgICAgIHNlY3Rpb24uZG9sbGhvdXNlbWNwLmNvbW1hbmQgPSB3cmFwcGVyUGF0aDtcbiAgICAgIHBhdGNoZWQgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFwYXRjaGVkKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBbU2V0dXBdIHBhdGNoQ29uZmlnRm9yTnZtTGF1bmNoZXI6IG5vIGRvbGxob3VzZW1jcCBlbnRyeSBpbiAke2NsaWVudH0gY29uZmlnIOKAlCBub3RoaW5nIHRvIHBhdGNoYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaW5kZW50ID0gZGV0ZWN0SW5kZW50KHJhdyk7XG4gIGxvZ2dlci5kZWJ1ZyhgW1NldHVwXSBwYXRjaENvbmZpZ0Zvck52bUxhdW5jaGVyOiB3cml0aW5nICR7Y2xpZW50fSBjb25maWcgKGluZGVudD0ke0pTT04uc3RyaW5naWZ5KGluZGVudCl9KWApO1xuICBhd2FpdCB3cml0ZUZpbGUoY29uZmlnUGF0aCwgSlNPTi5zdHJpbmdpZnkocGFyc2VkLCBudWxsLCBpbmRlbnQpICsgJ1xcbicsICd1dGYtOCcpO1xuICBsb2dnZXIuaW5mbyhgW1NldHVwXSBQYXRjaGVkICR7Y2xpZW50fSBjb25maWcgdG8gdXNlIE5WTS1hd2FyZSBsYXVuY2hlcjogJHt3cmFwcGVyUGF0aH1gKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRNY3BTZXJ2ZXJFbnRyeSh2ZXJzaW9uPzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBjb25zdCB0YWcgPSB2ZXJzaW9uID8gYEAke3ZlcnNpb259YCA6ICdAbGF0ZXN0JztcbiAgcmV0dXJuIHtcbiAgICBjb21tYW5kOiAnbnB4JyxcbiAgICBhcmdzOiBbYEBkb2xsaG91c2VtY3AvbWNwLXNlcnZlciR7dGFnfWBdLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEpzb25NY3BDbGllbnRDb25maWcoXG4gIGNsaWVudDogc3RyaW5nLFxuICB2ZXJzaW9uPzogc3RyaW5nLFxuICBjb25maWdQYXRoT3ZlcnJpZGU/OiBzdHJpbmcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBjb25maWdQYXRoID0gY29uZmlnUGF0aE92ZXJyaWRlID8/IGdldENvbmZpZ1BhdGgoY2xpZW50KTtcbiAgaWYgKCFjb25maWdQYXRoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb25maWcgcGF0aCB1bmtub3duIGZvciBjbGllbnQ6ICR7Y2xpZW50fWApO1xuICB9XG4gIGlmIChjb25maWdQYXRoLmVuZHNXaXRoKCcudG9tbCcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBKU09OIE1DUCBpbnN0YWxsIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFRPTUwgY2xpZW50OiAke2NsaWVudH1gKTtcbiAgfVxuXG4gIGF3YWl0IG1rZGlyKGRpcm5hbWUoY29uZmlnUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGxldCByYXcgPSAnJztcbiAgbGV0IHBhcnNlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgdHJ5IHtcbiAgICByYXcgPSBhd2FpdCByZWFkRmlsZShjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCFpc01pc3NpbmdQYXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwYXJzZSBleGlzdGluZyBjb25maWcgYXQgJHtjb25maWdQYXRofWApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJvb3RLZXkgPSBjbGllbnQgPT09ICd2c2NvZGUnID8gJ3NlcnZlcnMnIDogJ21jcFNlcnZlcnMnO1xuICBjb25zdCBleGlzdGluZ1Jvb3QgPSBwYXJzZWRbcm9vdEtleV07XG4gIGNvbnN0IHJvb3QgPSBleGlzdGluZ1Jvb3QgJiYgdHlwZW9mIGV4aXN0aW5nUm9vdCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZXhpc3RpbmdSb290KVxuICAgID8gZXhpc3RpbmdSb290IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgOiB7fTtcblxuICByb290LmRvbGxob3VzZW1jcCA9IGJ1aWxkTWNwU2VydmVyRW50cnkodmVyc2lvbik7XG4gIHBhcnNlZFtyb290S2V5XSA9IHJvb3Q7XG5cbiAgY29uc3QgaW5kZW50ID0gcmF3ID8gZGV0ZWN0SW5kZW50KHJhdykgOiAyO1xuICBhd2FpdCB3cml0ZUZpbGUoY29uZmlnUGF0aCwgSlNPTi5zdHJpbmdpZnkocGFyc2VkLCBudWxsLCBpbmRlbnQpICsgJ1xcbicsICd1dGYtOCcpO1xuXG4gIHJldHVybiBgSW5zdGFsbGVkIE1DUCBzZXJ2ZXIgXCJkb2xsaG91c2VtY3BcIiBpbiAke2NsaWVudH0gKCR7Y29uZmlnUGF0aH0pYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbExtU3R1ZGlvQ29uZmlnKHZlcnNpb24/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gaW5zdGFsbEpzb25NY3BDbGllbnRDb25maWcoJ2xtc3R1ZGlvJywgdmVyc2lvbik7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgaW5zdGFsbC1tY3AgYmluYXJ5IHBhdGguXG4gKiBVc2VzIHRoZSBsb2NhbCBkZXBlbmRlbmN5IChub2RlX21vZHVsZXMvLmJpbi9pbnN0YWxsLW1jcCkgZmlyc3QsXG4gKiBmYWxscyBiYWNrIHRvIG5weCBpZiBub3QgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVJbnN0YWxsTWNwQmluKCk6IHsgY21kOiBzdHJpbmc7IHByZWZpeEFyZ3M6IHN0cmluZ1tdIH0ge1xuICBjb25zdCBsb2NhbEJpbiA9IGpvaW4oZGlybmFtZShkaXJuYW1lKGRpcm5hbWUoX19kaXJuYW1lKSkpLCAnbm9kZV9tb2R1bGVzJywgJy5iaW4nLCAnaW5zdGFsbC1tY3AnKTtcbiAgdHJ5IHtcbiAgICBhY2Nlc3NTeW5jKGxvY2FsQmluLCBmc0NvbnN0YW50cy5YX09LKTtcbiAgICByZXR1cm4geyBjbWQ6IGxvY2FsQmluLCBwcmVmaXhBcmdzOiBbXSB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyBjbWQ6ICducHgnLCBwcmVmaXhBcmdzOiBbJ2luc3RhbGwtbWNwJ10gfTtcbiAgfVxufVxuXG4vKipcbiAqIFJ1biBpbnN0YWxsLW1jcCB0byBjb25maWd1cmUgYSBzcGVjaWZpYyBNQ1AgY2xpZW50LlxuICpcbiAqIFVzZXMgdGhlIGJ1bmRsZWQgaW5zdGFsbC1tY3AgZGVwZW5kZW5jeSAoTUlULCBodHRwczovL2dpdGh1Yi5jb20vc3VwZXJtZW1vcnlhaS9pbnN0YWxsLW1jcCkuXG4gKiBDb21tYW5kIGFyZ3VtZW50cyBhcmUgZnVsbHkgaGFyZGNvZGVkIOKAlCBubyB1c2VyIGlucHV0IHJlYWNoZXMgdGhlIHNoZWxsLlxuICogZXhlY0ZpbGUgaXMgdXNlZCAobm90IGV4ZWMpIHRvIHByZXZlbnQgc2hlbGwgaW5qZWN0aW9uLlxuICovXG5mdW5jdGlvbiBydW5JbnN0YWxsTWNwKGNsaWVudDogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB7IGNtZCwgcHJlZml4QXJncyB9ID0gcmVzb2x2ZUluc3RhbGxNY3BCaW4oKTtcbiAgICBjb25zdCB0YWcgPSB2ZXJzaW9uID8gYEAke3ZlcnNpb259YCA6ICdAbGF0ZXN0JztcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgLi4ucHJlZml4QXJncyxcbiAgICAgIGBAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXIke3RhZ31gLFxuICAgICAgJy0tY2xpZW50JywgY2xpZW50LFxuICAgICAgJy0tbmFtZScsICdkb2xsaG91c2VtY3AnLFxuICAgICAgJy0teWVzJyxcbiAgICBdO1xuXG4gICAgZXhlY0ZpbGUoY21kLCBhcmdzLCB7IHRpbWVvdXQ6IDMwXzAwMCB9LCAoZXJyLCBzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKHN0ZGVyciB8fCBlcnIubWVzc2FnZSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKHN0ZG91dCB8fCAnSW5zdGFsbGF0aW9uIGNvbXBsZXRlZC4nKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXX0=