aws-cdk 2.1001.0 → 2.1003.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/README.md +15 -0
  2. package/THIRD_PARTY_LICENSES +42 -49
  3. package/build-info.json +2 -2
  4. package/db.json.gz +0 -0
  5. package/lib/api/aws-auth/account-cache.js +3 -3
  6. package/lib/api/aws-auth/credential-plugins.js +4 -4
  7. package/lib/api/aws-auth/sdk-logger.js +3 -3
  8. package/lib/api/aws-auth/sdk-provider.js +3 -3
  9. package/lib/api/aws-auth/sdk.js +3 -3
  10. package/lib/api/aws-auth/user-agent.js +3 -3
  11. package/lib/api/bootstrap/bootstrap-environment.js +5 -6
  12. package/lib/api/bootstrap/bootstrap-template.yaml +16 -1
  13. package/lib/api/cxapp/exec.js +3 -3
  14. package/lib/api/deployments/cloudformation.js +4 -5
  15. package/lib/api/deployments/deploy-stack.d.ts +0 -22
  16. package/lib/api/deployments/deploy-stack.js +27 -22
  17. package/lib/api/deployments/deployments.d.ts +0 -30
  18. package/lib/api/deployments/deployments.js +17 -19
  19. package/lib/api/deployments/hotswap-deployments.js +3 -3
  20. package/lib/api/deployments/nested-stack-helpers.js +3 -3
  21. package/lib/api/environment/environment-access.js +3 -3
  22. package/lib/api/environment/environment-resources.js +3 -3
  23. package/lib/api/logs/find-cloudwatch-logs.js +3 -3
  24. package/lib/api/logs/logs-monitor.js +3 -3
  25. package/lib/api/resource-import/importer.d.ts +0 -8
  26. package/lib/api/resource-import/importer.js +1 -1
  27. package/lib/api/resource-import/migrator.js +3 -4
  28. package/lib/api/settings.js +2 -2
  29. package/lib/api/stack-events/stack-activity-monitor.d.ts +87 -165
  30. package/lib/api/stack-events/stack-activity-monitor.js +61 -445
  31. package/lib/api/stack-events/stack-event-poller.d.ts +6 -0
  32. package/lib/api/stack-events/stack-event-poller.js +3 -3
  33. package/lib/api/stack-events/stack-progress-monitor.d.ts +61 -0
  34. package/lib/api/stack-events/stack-progress-monitor.js +94 -0
  35. package/lib/api/util/placeholders.d.ts +1 -1
  36. package/lib/api/util/placeholders.js +1 -1
  37. package/lib/api/util/template-body-parameter.js +4 -5
  38. package/lib/api/work-graph/work-graph-builder.js +9 -9
  39. package/lib/api/work-graph/work-graph.js +3 -3
  40. package/lib/cli/activity-printer/base.d.ts +51 -0
  41. package/lib/cli/activity-printer/base.js +115 -0
  42. package/lib/cli/activity-printer/current.d.ts +25 -0
  43. package/lib/cli/activity-printer/current.js +122 -0
  44. package/lib/cli/activity-printer/history.d.ts +31 -0
  45. package/lib/cli/activity-printer/history.js +109 -0
  46. package/lib/cli/activity-printer/index.d.ts +3 -0
  47. package/lib/cli/activity-printer/index.js +20 -0
  48. package/lib/cli/cdk-toolkit.d.ts +1 -7
  49. package/lib/cli/cdk-toolkit.js +23 -28
  50. package/lib/cli/cli-config.js +5 -4
  51. package/lib/cli/cli.d.ts +0 -1
  52. package/lib/cli/cli.js +3 -3
  53. package/lib/cli/convert-to-user-input.js +18 -16
  54. package/lib/cli/parse-command-line-arguments.js +7 -1
  55. package/lib/cli/root-dir.d.ts +10 -0
  56. package/lib/cli/root-dir.js +23 -0
  57. package/lib/cli/user-input.d.ts +8 -0
  58. package/lib/cli/user-input.js +1 -1
  59. package/lib/cli/version.js +6 -5
  60. package/lib/commands/deploy.d.ts +13 -0
  61. package/lib/commands/deploy.js +18 -0
  62. package/lib/commands/migrate.js +3 -3
  63. package/lib/context-providers/cc-api-provider.js +6 -6
  64. package/lib/context-providers/index.js +3 -3
  65. package/lib/index.js +11775 -10730
  66. package/lib/init-hooks.js +3 -3
  67. package/lib/init-templates/.init-version.json +1 -1
  68. package/lib/init.d.ts +5 -1
  69. package/lib/init.js +18 -16
  70. package/lib/legacy-exports-source.d.ts +2 -5
  71. package/lib/legacy-exports-source.js +7 -10
  72. package/lib/list-stacks.d.ts +0 -1
  73. package/lib/list-stacks.js +1 -2
  74. package/lib/notices.js +7 -8
  75. package/lib/toolkit/cli-io-host.d.ts +28 -0
  76. package/lib/toolkit/cli-io-host.js +74 -2
  77. package/lib/toolkit/error.d.ts +1 -44
  78. package/lib/toolkit/error.js +16 -76
  79. package/lib/util.d.ts +1 -0
  80. package/lib/util.js +18 -0
  81. package/package.json +30 -30
  82. package/lib/util/archive.d.ts +0 -1
  83. package/lib/util/archive.js +0 -86
  84. package/lib/util/arrays.d.ts +0 -14
  85. package/lib/util/arrays.js +0 -36
  86. package/lib/util/bool.d.ts +0 -7
  87. package/lib/util/bool.js +0 -13
  88. package/lib/util/bytes.d.ts +0 -8
  89. package/lib/util/bytes.js +0 -21
  90. package/lib/util/cloudformation.d.ts +0 -4
  91. package/lib/util/cloudformation.js +0 -10
  92. package/lib/util/content-hash.d.ts +0 -5
  93. package/lib/util/content-hash.js +0 -43
  94. package/lib/util/directories.d.ts +0 -23
  95. package/lib/util/directories.js +0 -58
  96. package/lib/util/format-error.d.ts +0 -9
  97. package/lib/util/format-error.js +0 -22
  98. package/lib/util/index.d.ts +0 -15
  99. package/lib/util/index.js +0 -32
  100. package/lib/util/json.d.ts +0 -48
  101. package/lib/util/json.js +0 -68
  102. package/lib/util/objects.d.ts +0 -52
  103. package/lib/util/objects.js +0 -183
  104. package/lib/util/parallel.d.ts +0 -6
  105. package/lib/util/parallel.js +0 -48
  106. package/lib/util/serialize.d.ts +0 -27
  107. package/lib/util/serialize.js +0 -86
  108. package/lib/util/string-manipulation.d.ts +0 -10
  109. package/lib/util/string-manipulation.js +0 -33
  110. package/lib/util/type-brands.d.ts +0 -39
  111. package/lib/util/type-brands.js +0 -38
  112. package/lib/util/types.d.ts +0 -27
  113. package/lib/util/types.js +0 -25
  114. package/lib/util/version-range.d.ts +0 -2
  115. package/lib/util/version-range.js +0 -36
  116. package/lib/util/yaml-cfn.d.ts +0 -15
  117. package/lib/util/yaml-cfn.js +0 -58
  118. /package/lib/{api/stack-events → cli/activity-printer}/display.d.ts +0 -0
  119. /package/lib/{api/stack-events → cli/activity-printer}/display.js +0 -0
package/lib/notices.js CHANGED
@@ -10,9 +10,8 @@ const version_1 = require("./cli/version");
10
10
  const logging_1 = require("./logging");
11
11
  const error_1 = require("./toolkit/error");
12
12
  const tree_1 = require("./tree");
13
- const directories_1 = require("./util/directories");
14
- const format_error_1 = require("./util/format-error");
15
- const CACHE_FILE_PATH = path.join((0, directories_1.cdkCacheDir)(), 'notices.json');
13
+ const util_1 = require("./util");
14
+ const CACHE_FILE_PATH = path.join((0, util_1.cdkCacheDir)(), 'notices.json');
16
15
  class NoticesFilter {
17
16
  static filter(options) {
18
17
  const components = [
@@ -64,7 +63,7 @@ class NoticesFilter {
64
63
  // Return the actual components we found so that we can inject their dynamic values. A single filter
65
64
  // component can match more than one actual component
66
65
  for (const ands of ors) {
67
- const matched = ands.map(affected => actualComponents.filter(actual => NoticesFilter.componentNameMatches(affected, actual) && semver.satisfies(actual.version, affected.version)));
66
+ const matched = ands.map(affected => actualComponents.filter(actual => NoticesFilter.componentNameMatches(affected, actual) && semver.satisfies(actual.version, affected.version, { includePrerelease: true })));
68
67
  // For every clause in the filter we matched one or more components
69
68
  if (matched.every(xs => xs.length > 0)) {
70
69
  const ret = new FilteredNotice(notice);
@@ -332,11 +331,11 @@ class WebsiteNoticeDataSource {
332
331
  resolve(data !== null && data !== void 0 ? data : []);
333
332
  }
334
333
  catch (e) {
335
- reject(new error_1.ToolkitError(`Failed to parse notices: ${(0, format_error_1.formatErrorMessage)(e)}`));
334
+ reject(new error_1.ToolkitError(`Failed to parse notices: ${(0, util_1.formatErrorMessage)(e)}`));
336
335
  }
337
336
  });
338
337
  res.on('error', e => {
339
- reject(new error_1.ToolkitError(`Failed to fetch notices: ${(0, format_error_1.formatErrorMessage)(e)}`));
338
+ reject(new error_1.ToolkitError(`Failed to fetch notices: ${(0, util_1.formatErrorMessage)(e)}`));
340
339
  });
341
340
  }
342
341
  else {
@@ -346,7 +345,7 @@ class WebsiteNoticeDataSource {
346
345
  req.on('error', reject);
347
346
  }
348
347
  catch (e) {
349
- reject(new error_1.ToolkitError(`HTTPS 'get' call threw an error: ${(0, format_error_1.formatErrorMessage)(e)}`));
348
+ reject(new error_1.ToolkitError(`HTTPS 'get' call threw an error: ${(0, util_1.formatErrorMessage)(e)}`));
350
349
  }
351
350
  });
352
351
  }
@@ -415,4 +414,4 @@ class CachedDataSource {
415
414
  }
416
415
  }
417
416
  exports.CachedDataSource = CachedDataSource;
418
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm5vdGljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsb0NBQW9DO0FBQ3BDLDZCQUE2QjtBQUU3QiwrQkFBK0I7QUFDL0IsaUNBQWlDO0FBRWpDLHdFQUFvRTtBQUVwRSwyQ0FBOEM7QUFDOUMsdUNBQXdEO0FBQ3hELDJDQUErQztBQUMvQyxpQ0FBNEQ7QUFDNUQsb0RBQWlEO0FBQ2pELHNEQUF5RDtBQUV6RCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUEseUJBQVcsR0FBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBb0VqRSxNQUFzQixhQUFhO0lBQzFCLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBbUM7UUFDdEQsTUFBTSxVQUFVLEdBQUc7WUFDakIsR0FBRyxhQUFhLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUN4RCxHQUFHLGFBQWEsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDO1NBQzFDLENBQUM7UUFFRixPQUFPLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7T0FFRztJQUNLLE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBbUM7UUFDaEUsT0FBTztZQUNMLE1BQU07WUFDTjtnQkFDRSxJQUFJLEVBQUUsS0FBSztnQkFDWCxPQUFPLEVBQUUsT0FBTyxDQUFDLFVBQVU7YUFDNUI7WUFFRCxlQUFlO1lBQ2Y7Z0JBQ0UsSUFBSSxFQUFFLE1BQU07Z0JBQ1osT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSx5QkFBeUI7Z0JBQ3JFLFdBQVcsRUFBRSxNQUFNO2FBQ3BCO1lBRUQseUJBQXlCO1lBQ3pCLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxHQUFH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Q0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsSUFBSTtRQUNoQixNQUFNLFlBQVksR0FBRztZQUNuQixVQUFVLEVBQUUsQ0FBQztZQUNiLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQztRQUVGLElBQUksQ0FBQztZQUNILE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUNqQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQWtCO2dCQUNuRCxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ25CLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBQSxlQUFLLEVBQUMsc0NBQXNDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakQsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQXFCO1FBQ3RDLElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBQSxlQUFLLEVBQUMseUNBQXlDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTVERCw0Q0E0REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbGllbnRSZXF1ZXN0IH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgeyBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJ2h0dHBzJztcbmltcG9ydCAqIGFzIGh0dHBzIGZyb20gJ25vZGU6aHR0cHMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnQgfSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0ICogYXMgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgeyBTZGtIdHRwT3B0aW9ucyB9IGZyb20gJy4vYXBpJztcbmltcG9ydCB7IEF3c0NsaUNvbXBhdGlibGUgfSBmcm9tICcuL2FwaS9hd3MtYXV0aC9hd3NjbGktY29tcGF0aWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQgfSBmcm9tICcuL2FwaS9jb250ZXh0JztcbmltcG9ydCB7IHZlcnNpb25OdW1iZXIgfSBmcm9tICcuL2NsaS92ZXJzaW9uJztcbmltcG9ydCB7IGRlYnVnLCBpbmZvLCB3YXJuaW5nLCBlcnJvciB9IGZyb20gJy4vbG9nZ2luZyc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuL3Rvb2xraXQvZXJyb3InO1xuaW1wb3J0IHsgQ29uc3RydWN0VHJlZU5vZGUsIGxvYWRUcmVlRnJvbURpciB9IGZyb20gJy4vdHJlZSc7XG5pbXBvcnQgeyBjZGtDYWNoZURpciB9IGZyb20gJy4vdXRpbC9kaXJlY3Rvcmllcyc7XG5pbXBvcnQgeyBmb3JtYXRFcnJvck1lc3NhZ2UgfSBmcm9tICcuL3V0aWwvZm9ybWF0LWVycm9yJztcblxuY29uc3QgQ0FDSEVfRklMRV9QQVRIID0gcGF0aC5qb2luKGNka0NhY2hlRGlyKCksICdub3RpY2VzLmpzb24nKTtcblxuZXhwb3J0IGludGVyZmFjZSBOb3RpY2VzUHJvcHMge1xuICAvKipcbiAgICogQ0RLIGNvbnRleHRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IENvbnRleHQ7XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgbm90aWNlcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFja25vd2xlZGdlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVBY2tub3dsZWRnZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBHbG9iYWwgQ0xJIG9wdGlvbiBmb3Igb3V0cHV0IGRpcmVjdG9yeSBmb3Igc3ludGhlc2l6ZWQgY2xvdWQgYXNzZW1ibHlcbiAgICpcbiAgICogQGRlZmF1bHQgJ2Nkay5vdXQnXG4gICAqL1xuICByZWFkb25seSBvdXRwdXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdsb2JhbCBDTEkgb3B0aW9uIGZvciB3aGV0aGVyIHdlIHNob3cgbm90aWNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBzaG91bGREaXNwbGF5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgdGhlIEhUVFAgcmVxdWVzdFxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cE9wdGlvbnM/OiBTZGtIdHRwT3B0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpY2VzUHJpbnRPcHRpb25zIHtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhcHBlbmQgdGhlIHRvdGFsIG51bWJlciBvZiB1bmFja25vd2xlZGdlZCBub3RpY2VzIHRvIHRoZSBkaXNwbGF5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd1RvdGFsPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpY2VzUmVmcmVzaE9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byBmb3JjZSBhIGNhY2hlIHJlZnJlc2ggcmVnYXJkbGVzcyBvZiBleHBpcmF0aW9uIHRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBmb3JjZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERhdGEgc291cmNlIGZvciBmZXRjaCBub3RpY2VzIGZyb20uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gV2Vic2l0ZU5vdGljZURhdGFTb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFTb3VyY2U/OiBOb3RpY2VEYXRhU291cmNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGljZXNGaWx0ZXJGaWx0ZXJPcHRpb25zIHtcbiAgcmVhZG9ubHkgZGF0YTogTm90aWNlW107XG4gIHJlYWRvbmx5IGNsaVZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgb3V0RGlyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGJvb3RzdHJhcHBlZEVudmlyb25tZW50czogQm9vdHN0cmFwcGVkRW52aXJvbm1lbnRbXTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5vdGljZXNGaWx0ZXIge1xuICBwdWJsaWMgc3RhdGljIGZpbHRlcihvcHRpb25zOiBOb3RpY2VzRmlsdGVyRmlsdGVyT3B0aW9ucyk6IEZpbHRlcmVkTm90aWNlW10ge1xuICAgIGNvbnN0IGNvbXBvbmVudHMgPSBbXG4gICAgICAuLi5Ob3RpY2VzRmlsdGVyLmNvbnN0cnVjdFRyZWVDb21wb25lbnRzKG9wdGlvbnMub3V0RGlyKSxcbiAgICAgIC4uLk5vdGljZXNGaWx0ZXIub3RoZXJDb21wb25lbnRzKG9wdGlvbnMpLFxuICAgIF07XG5cbiAgICByZXR1cm4gTm90aWNlc0ZpbHRlci5maW5kRm9yTmFtZWRDb21wb25lbnRzKG9wdGlvbnMuZGF0YSwgY29tcG9uZW50cyk7XG4gIH1cblxuICAvKipcbiAgICogRnJvbSBhIHNldCBvZiBpbnB1dCBvcHRpb25zLCByZXR1cm4gdGhlIG5vdGljZXMgY29tcG9uZW50cyB3ZSBhcmUgc2VhcmNoaW5nIGZvclxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgb3RoZXJDb21wb25lbnRzKG9wdGlvbnM6IE5vdGljZXNGaWx0ZXJGaWx0ZXJPcHRpb25zKTogQWN0dWFsQ29tcG9uZW50W10ge1xuICAgIHJldHVybiBbXG4gICAgICAvLyBDTElcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NsaScsXG4gICAgICAgIHZlcnNpb246IG9wdGlvbnMuY2xpVmVyc2lvbixcbiAgICAgIH0sXG5cbiAgICAgIC8vIE5vZGUgdmVyc2lvblxuICAgICAge1xuICAgICAgICBuYW1lOiAnbm9kZScsXG4gICAgICAgIHZlcnNpb246IHByb2Nlc3MudmVyc2lvbi5yZXBsYWNlKC9edi8sICcnKSwgLy8gcmVtb3ZlIHRoZSAndicgcHJlZml4LlxuICAgICAgICBkeW5hbWljTmFtZTogJ25vZGUnLFxuICAgICAgfSxcblxuICAgICAgLy8gQm9vdHN0cmFwIGVudmlyb25tZW50c1xuICAgICAgLi4ub3B0aW9ucy5ib290c3RyYXBwZWRFbnZpcm9ubWVudHMuZmxhdE1hcChlbnYgPT4ge1xuICAgICAgICBjb25zdCBzZW12ZXJCb290c3RyYXBWZXJzaW9uID0gc2VtdmVyLmNvZXJjZShlbnYuYm9vdHN0cmFwU3RhY2tWZXJzaW9uKTtcbiAgICAgICAgaWYgKCFzZW12ZXJCb290c3RyYXBWZXJzaW9uKSB7XG4gICAgICAgICAgLy8gd2UgZG9uJ3QgdGhyb3cgYmVjYXVzZSBub3RpY2VzIHNob3VsZCBuZXZlciBjcmFzaCB0aGUgY2xpLlxuICAgICAgICAgIHdhcm5pbmcoYFdoaWxlIGZpbHRlcmluZyBub3RpY2VzLCBjb3VsZCBub3QgY29lcmNlIGJvb3RzdHJhcCB2ZXJzaW9uICcke2Vudi5ib290c3RyYXBTdGFja1ZlcnNpb259JyBpbnRvIHNlbXZlcmApO1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbe1xuICAgICAgICAgIG5hbWU6ICdib290c3RyYXAnLFxuICAgICAgICAgIHZlcnNpb246IGAke3NlbXZlckJvb3RzdHJhcFZlcnNpb259YCxcbiAgICAgICAgICBkeW5hbWljTmFtZTogJ0VOVklST05NRU5UUycsXG4gICAgICAgICAgZHluYW1pY1ZhbHVlOiBlbnYuZW52aXJvbm1lbnQubmFtZSxcbiAgICAgICAgfV07XG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEJhc2VkIG9uIGEgc2V0IG9mIGNvbXBvbmVudCBuYW1lcywgZmluZCBhbGwgbm90aWNlcyB0aGF0IG1hdGNoIG9uZSBvZiB0aGUgZ2l2ZW4gY29tcG9uZW50c1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZmluZEZvck5hbWVkQ29tcG9uZW50cyhkYXRhOiBOb3RpY2VbXSwgYWN0dWFsQ29tcG9uZW50czogQWN0dWFsQ29tcG9uZW50W10pOiBGaWx0ZXJlZE5vdGljZVtdIHtcbiAgICByZXR1cm4gZGF0YS5mbGF0TWFwKG5vdGljZSA9PiB7XG4gICAgICBjb25zdCBvcnMgPSB0aGlzLnJlc29sdmVBbGlhc2VzKG5vcm1hbGl6ZUNvbXBvbmVudHMobm90aWNlLmNvbXBvbmVudHMpKTtcblxuICAgICAgLy8gRmluZCB0aGUgZmlyc3Qgc2V0IG9mIHRoZSBkaXNqdW5jdGlvbnMgb2Ygd2hpY2ggYWxsIGNvbXBvbmVudHMgbWF0Y2ggYWdhaW5zdCB0aGUgYWN0dWFsIGNvbXBvbmVudHMuXG4gICAgICAvLyBSZXR1cm4gdGhlIGFjdHVhbCBjb21wb25lbnRzIHdlIGZvdW5kIHNvIHRoYXQgd2UgY2FuIGluamVjdCB0aGVpciBkeW5hbWljIHZhbHVlcy4gQSBzaW5nbGUgZmlsdGVyXG4gICAgICAvLyBjb21wb25lbnQgY2FuIG1hdGNoIG1vcmUgdGhhbiBvbmUgYWN0dWFsIGNvbXBvbmVudFxuICAgICAgZm9yIChjb25zdCBhbmRzIG9mIG9ycykge1xuICAgICAgICBjb25zdCBtYXRjaGVkID0gYW5kcy5tYXAoYWZmZWN0ZWQgPT4gYWN0dWFsQ29tcG9uZW50cy5maWx0ZXIoYWN0dWFsID0+XG4gICAgICAgICAgTm90aWNlc0ZpbHRlci5jb21wb25lbnROYW1lTWF0Y2hlcyhhZmZlY3RlZCwgYWN0dWFsKSAmJiBzZW12ZXIuc2F0aXNmaWVzKGFjdHVhbC52ZXJzaW9uLCBhZmZlY3RlZC52ZXJzaW9uKSkpO1xuXG4gICAgICAgIC8vIEZvciBldmVyeSBjbGF1c2UgaW4gdGhlIGZpbHRlciB3ZSBtYXRjaGVkIG9uZSBvciBtb3JlIGNvbXBvbmVudHNcbiAgICAgICAgaWYgKG1hdGNoZWQuZXZlcnkoeHMgPT4geHMubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICBjb25zdCByZXQgPSBuZXcgRmlsdGVyZWROb3RpY2Uobm90aWNlKTtcbiAgICAgICAgICBOb3RpY2VzRmlsdGVyLmFkZER5bmFtaWNWYWx1ZXMobWF0Y2hlZC5mbGF0TWFwKHggPT4geCksIHJldCk7XG4gICAgICAgICAgcmV0dXJuIFtyZXRdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBnaXZlbiBcImFmZmVjdGVkIGNvbXBvbmVudFwiIG5hbWUgYXBwbGllcyB0byB0aGUgZ2l2ZW4gYWN0dWFsIGNvbXBvbmVudCBuYW1lLlxuICAgKlxuICAgKiBUaGUgbmFtZSBtYXRjaGVzIGlmIHRoZSBuYW1lIGlzIGV4YWN0bHkgdGhlIHNhbWUsIG9yIHRoZSBuYW1lIGluIHRoZSBub3RpY2VcbiAgICogaXMgYSBwcmVmaXggb2YgdGhlIG5vZGUgbmFtZSB3aGVuIHRoZSBxdWVyeSBlbmRzIGluICcuJy5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGNvbXBvbmVudE5hbWVNYXRjaGVzKHBhdHRlcm46IENvbXBvbmVudCwgYWN0dWFsOiBBY3R1YWxDb21wb25lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGF0dGVybi5uYW1lLmVuZHNXaXRoKCcuJykgPyBhY3R1YWwubmFtZS5zdGFydHNXaXRoKHBhdHRlcm4ubmFtZSkgOiBwYXR0ZXJuLm5hbWUgPT09IGFjdHVhbC5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZHluYW1pYyB2YWx1ZXMgZnJvbSB0aGUgZ2l2ZW4gQWN0dWFsQ29tcG9uZW50c1xuICAgKlxuICAgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29tcG9uZW50cyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbmFtZSwgdGhleSBhcmUgam9pbmVkXG4gICAqIGJ5IGEgY29tbWEuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBhZGREeW5hbWljVmFsdWVzKGNvbXBzOiBBY3R1YWxDb21wb25lbnRbXSwgbm90aWNlOiBGaWx0ZXJlZE5vdGljZSkge1xuICAgIGNvbnN0IGR5bmFtaWNWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICAgIGZvciAoY29uc3QgY29tcCBvZiBjb21wcykge1xuICAgICAgaWYgKGNvbXAuZHluYW1pY05hbWUpIHtcbiAgICAgICAgZHluYW1pY1ZhbHVlc1tjb21wLmR5bmFtaWNOYW1lXSA9IGR5bmFtaWNWYWx1ZXNbY29tcC5keW5hbWljTmFtZV0gPz8gW107XG4gICAgICAgIGR5bmFtaWNWYWx1ZXNbY29tcC5keW5hbWljTmFtZV0ucHVzaChjb21wLmR5bmFtaWNWYWx1ZSA/PyBjb21wLnZlcnNpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlc10gb2YgT2JqZWN0LmVudHJpZXMoZHluYW1pY1ZhbHVlcykpIHtcbiAgICAgIG5vdGljZS5hZGREeW5hbWljVmFsdWUoa2V5LCB2YWx1ZXMuam9pbignLCcpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJlYXQgJ2ZyYW1ld29yaycgYXMgYW4gYWxpYXMgZm9yIGVpdGhlciBgYXdzLWNkay1saWIuYCBvciBgQGF3cy1jZGsvY29yZS5gLlxuICAgKlxuICAgKiBCZWNhdXNlIGl0J3MgRUlUSEVSIGBhd3MtY2RrLWxpYmAgb3IgYEBhd3MtY2RrL2NvcmVgLCB3ZSBuZWVkIHRvIGFkZCBtdWx0aXBsZVxuICAgKiBhcnJheXMgYXQgdGhlIHRvcCBsZXZlbC5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlc29sdmVBbGlhc2VzKG9yczogQ29tcG9uZW50W11bXSk6IENvbXBvbmVudFtdW10ge1xuICAgIHJldHVybiBvcnMuZmxhdE1hcChhbmRzID0+IHtcbiAgICAgIGNvbnN0IGhhc0ZyYW1ld29yayA9IGFuZHMuZmluZChjID0+IGMubmFtZSA9PT0gJ2ZyYW1ld29yaycpO1xuICAgICAgaWYgKCFoYXNGcmFtZXdvcmspIHtcbiAgICAgICAgcmV0dXJuIFthbmRzXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYW5kcy5tYXAoYyA9PiBjLm5hbWUgPT09ICdmcmFtZXdvcmsnID8geyAuLi5jLCBuYW1lOiAnQGF3cy1jZGsvY29yZS4nIH0gOiBjKSxcbiAgICAgICAgYW5kcy5tYXAoYyA9PiBjLm5hbWUgPT09ICdmcmFtZXdvcmsnID8geyAuLi5jLCBuYW1lOiAnYXdzLWNkay1saWIuJyB9IDogYyksXG4gICAgICBdO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGNvbnN0cnVjdCB0cmVlIGZyb20gdGhlIGdpdmVuIGRpcmVjdG9yeSBhbmQgcmV0dXJuIGl0cyBjb21wb25lbnRzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBjb25zdHJ1Y3RUcmVlQ29tcG9uZW50cyhtYW5pZmVzdERpcjogc3RyaW5nKTogQWN0dWFsQ29tcG9uZW50W10ge1xuICAgIGNvbnN0IHRyZWUgPSBsb2FkVHJlZUZyb21EaXIobWFuaWZlc3REaXIpO1xuICAgIGlmICghdHJlZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJldDogQWN0dWFsQ29tcG9uZW50W10gPSBbXTtcbiAgICByZWN1cnNlKHRyZWUpO1xuICAgIHJldHVybiByZXQ7XG5cbiAgICBmdW5jdGlvbiByZWN1cnNlKHg6IENvbnN0cnVjdFRyZWVOb2RlKSB7XG4gICAgICBpZiAoeC5jb25zdHJ1Y3RJbmZvPy5mcW4gJiYgeC5jb25zdHJ1Y3RJbmZvPy52ZXJzaW9uKSB7XG4gICAgICAgIHJldC5wdXNoKHtcbiAgICAgICAgICBuYW1lOiB4LmNvbnN0cnVjdEluZm8/LmZxbixcbiAgICAgICAgICB2ZXJzaW9uOiB4LmNvbnN0cnVjdEluZm8/LnZlcnNpb24sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIE9iamVjdC52YWx1ZXMoeC5jaGlsZHJlbiA/PyB7fSkpIHtcbiAgICAgICAgcmVjdXJzZShjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmludGVyZmFjZSBBY3R1YWxDb21wb25lbnQge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBtYXRjaGVkLCB1bmRlciB3aGF0IG5hbWUgc2hvdWxkIGl0IGJlIGFkZGVkIHRvIHRoZSBzZXQgb2YgZHluYW1pYyB2YWx1ZXNcbiAgICpcbiAgICogVGhlc2Ugd2lsbCBiZSB1c2VkIHRvIHN1YnN0aXR1dGUgcGxhY2Vob2xkZXJzIGluIHRoZSBtZXNzYWdlIHN0cmluZywgd2hlcmVcbiAgICogcGxhY2Vob2xkZXJzIGxvb2sgbGlrZSBge3Jlc29sdmU6WFlafWAuXG4gICAqXG4gICAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgY29tcG9uZW50IHdpdGggdGhlIHNhbWUgZHluYW1pYyBuYW1lLCB0aGV5IGFyZVxuICAgKiBqb2luZWQgYnkgJywnLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERvbid0IGFkZCB0byB0aGUgc2V0IG9mIGR5bmFtaWMgdmFsdWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZHluYW1pY05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIG1hdGNoZWQsIHdoYXQgd2Ugc2hvdWxkIHB1dCBpbiB0aGUgc2V0IG9mIGR5bmFtaWMgdmFsdWVzIGluc3N0ZWFkIG9mIHRoZSB2ZXJzaW9uLlxuICAgKlxuICAgKiBPbmx5IHVzZWQgaWYgYGR5bmFtaWNOYW1lYCBpcyBzZXQ7IGJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIGFjdHVhbCB2ZXJzaW9uXG4gICAqIG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSBkeW5hbWljVmFsdWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gYWJvdXQgYSBib290c3RyYXBwZWQgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwcGVkRW52aXJvbm1lbnQge1xuICByZWFkb25seSBib290c3RyYXBTdGFja1ZlcnNpb246IG51bWJlcjtcbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50O1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIGFjY2VzcyB0byBub3RpY2VzIHRoZSBDTEkgY2FuIGRpc3BsYXkuXG4gKi9cbmV4cG9ydCBjbGFzcyBOb3RpY2VzIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnN0YW5jZS4gTm90ZSB0aGF0IHRoaXMgcmVwbGFjZXMgdGhlIHNpbmdsZXRvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKHByb3BzOiBOb3RpY2VzUHJvcHMpOiBOb3RpY2VzIHtcbiAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBOb3RpY2VzKHByb3BzKTtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuIE1heSByZXR1cm4gYHVuZGVmaW5lZGAgaWYgYGNyZWF0ZWAgaGFzIG5vdCBiZWVuIGNhbGxlZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0KCk6IE5vdGljZXMgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogTm90aWNlcyB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQ6IENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3V0cHV0OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvdWxkRGlzcGxheTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBhY2tub3dsZWRnZWRJc3N1ZU51bWJlcnM6IFNldDxOdW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IGluY2x1ZGVBY2tub3dsZWdkZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cE9wdGlvbnM6IFNka0h0dHBPcHRpb25zO1xuXG4gIHByaXZhdGUgZGF0YTogU2V0PE5vdGljZT4gPSBuZXcgU2V0KCk7XG5cbiAgLy8gc2V0cyBkb24ndCBkZWR1cGxpY2F0ZSBpbnRlcmZhY2VzLCBzbyB3ZSB1c2UgYSBtYXAuXG4gIHByaXZhdGUgcmVhZG9ubHkgYm9vdHN0cmFwcGVkRW52aXJvbm1lbnRzOiBNYXA8c3RyaW5nLCBCb290c3RyYXBwZWRFbnZpcm9ubWVudD4gPSBuZXcgTWFwKCk7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihwcm9wczogTm90aWNlc1Byb3BzKSB7XG4gICAgdGhpcy5jb250ZXh0ID0gcHJvcHMuY29udGV4dDtcbiAgICB0aGlzLmFja25vd2xlZGdlZElzc3VlTnVtYmVycyA9IG5ldyBTZXQodGhpcy5jb250ZXh0LmdldCgnYWNrbm93bGVkZ2VkLWlzc3VlLW51bWJlcnMnKSA/PyBbXSk7XG4gICAgdGhpcy5pbmNsdWRlQWNrbm93bGVnZGVkID0gcHJvcHMuaW5jbHVkZUFja25vd2xlZGdlZCA/PyBmYWxzZTtcbiAgICB0aGlzLm91dHB1dCA9IHByb3BzLm91dHB1dCA/PyAnY2RrLm91dCc7XG4gICAgdGhpcy5zaG91bGREaXNwbGF5ID0gcHJvcHMuc2hvdWxkRGlzcGxheSA/PyB0cnVlO1xuICAgIHRoaXMuaHR0cE9wdGlvbnMgPSBwcm9wcy5odHRwT3B0aW9ucyA/PyB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBib290c3RyYXAgaW5mb3JtYXRpb24gdG8gZmlsdGVyIG9uLiBDYW4gaGF2ZSBtdWx0aXBsZSB2YWx1ZXNcbiAgICogaW4gY2FzZSBvZiBtdWx0aS1lbnZpcm9ubWVudCBkZXBsb3ltZW50cy5cbiAgICovXG4gIHB1YmxpYyBhZGRCb290c3RyYXBwZWRFbnZpcm9ubWVudChib290c3RyYXBwZWQ6IEJvb3RzdHJhcHBlZEVudmlyb25tZW50KSB7XG4gICAgY29uc3Qga2V5ID0gW1xuICAgICAgYm9vdHN0cmFwcGVkLmJvb3RzdHJhcFN0YWNrVmVyc2lvbixcbiAgICAgIGJvb3RzdHJhcHBlZC5lbnZpcm9ubWVudC5hY2NvdW50LFxuICAgICAgYm9vdHN0cmFwcGVkLmVudmlyb25tZW50LnJlZ2lvbixcbiAgICAgIGJvb3RzdHJhcHBlZC5lbnZpcm9ubWVudC5uYW1lLFxuICAgIF0uam9pbignOicpO1xuICAgIHRoaXMuYm9vdHN0cmFwcGVkRW52aXJvbm1lbnRzLnNldChrZXksIGJvb3RzdHJhcHBlZCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCB0aGUgbGlzdCBvZiBub3RpY2VzIHRoaXMgaW5zdGFuY2UgaXMgYXdhcmUgb2YuXG4gICAqIFRvIG1ha2Ugc3VyZSB0aGlzIG5ldmVyIGNyYXNoZXMgdGhlIENMSSBwcm9jZXNzLCBhbGwgZmFpbHVyZXMgYXJlIGNhdWdodCBhbmRcbiAgICogc2lsZW50bHkgbG9nZ2VkLlxuICAgKlxuICAgKiBJZiBjb250ZXh0IGlzIGNvbmZpZ3VyZWQgdG8gbm90IGRpc3BsYXkgbm90aWNlcywgdGhpcyB3aWxsIG5vLW9wLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZnJlc2gob3B0aW9uczogTm90aWNlc1JlZnJlc2hPcHRpb25zID0ge30pIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkRGlzcGxheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB1bmRlcmx5aW5nRGF0YVNvdXJjZSA9IG9wdGlvbnMuZGF0YVNvdXJjZSA/PyBuZXcgV2Vic2l0ZU5vdGljZURhdGFTb3VyY2UodGhpcy5odHRwT3B0aW9ucyk7XG4gICAgICBjb25zdCBkYXRhU291cmNlID0gbmV3IENhY2hlZERhdGFTb3VyY2UoQ0FDSEVfRklMRV9QQVRILCB1bmRlcmx5aW5nRGF0YVNvdXJjZSwgb3B0aW9ucy5mb3JjZSA/PyBmYWxzZSk7XG4gICAgICBjb25zdCBub3RpY2VzID0gYXdhaXQgZGF0YVNvdXJjZS5mZXRjaCgpO1xuICAgICAgdGhpcy5kYXRhID0gbmV3IFNldCh0aGlzLmluY2x1ZGVBY2tub3dsZWdkZWQgPyBub3RpY2VzIDogbm90aWNlcy5maWx0ZXIobiA9PiAhdGhpcy5hY2tub3dsZWRnZWRJc3N1ZU51bWJlcnMuaGFzKG4uaXNzdWVOdW1iZXIpKSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBkZWJ1ZyhgQ291bGQgbm90IHJlZnJlc2ggbm90aWNlczogJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSByZWxldmFudCBub3RpY2VzICh1bmxlc3MgY29udGV4dCBkaWN0YXRlcyB3ZSBzaG91bGRuJ3QpLlxuICAgKi9cbiAgcHVibGljIGRpc3BsYXkob3B0aW9uczogTm90aWNlc1ByaW50T3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLnNob3VsZERpc3BsYXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJlZE5vdGljZXMgPSBOb3RpY2VzRmlsdGVyLmZpbHRlcih7XG4gICAgICBkYXRhOiBBcnJheS5mcm9tKHRoaXMuZGF0YSksXG4gICAgICBjbGlWZXJzaW9uOiB2ZXJzaW9uTnVtYmVyKCksXG4gICAgICBvdXREaXI6IHRoaXMub3V0cHV0LFxuICAgICAgYm9vdHN0cmFwcGVkRW52aXJvbm1lbnRzOiBBcnJheS5mcm9tKHRoaXMuYm9vdHN0cmFwcGVkRW52aXJvbm1lbnRzLnZhbHVlcygpKSxcbiAgICB9KTtcblxuICAgIGlmIChmaWx0ZXJlZE5vdGljZXMubGVuZ3RoID4gMCkge1xuICAgICAgaW5mbygnJyk7XG4gICAgICBpbmZvKCdOT1RJQ0VTICAgICAgICAgKFdoYXRcXCdzIHRoaXM/IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay93aWtpL0NMSS1Ob3RpY2VzKScpO1xuICAgICAgaW5mbygnJyk7XG4gICAgICBmb3IgKGNvbnN0IGZpbHRlcmVkIG9mIGZpbHRlcmVkTm90aWNlcykge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmaWx0ZXJlZC5mb3JtYXQoKTtcbiAgICAgICAgc3dpdGNoIChmaWx0ZXJlZC5ub3RpY2Uuc2V2ZXJpdHkpIHtcbiAgICAgICAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgICAgICAgIHdhcm5pbmcoZm9ybWF0dGVkKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgIGVycm9yKGZvcm1hdHRlZCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaW5mbyhmb3JtYXR0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIGluZm8oJycpO1xuICAgICAgfVxuICAgICAgaW5mbyhgSWYgeW91IGRvbuKAmXQgd2FudCB0byBzZWUgYSBub3RpY2UgYW55bW9yZSwgdXNlIFwiY2RrIGFja25vd2xlZGdlIDxpZD5cIi4gRm9yIGV4YW1wbGUsIFwiY2RrIGFja25vd2xlZGdlICR7ZmlsdGVyZWROb3RpY2VzWzBdLm5vdGljZS5pc3N1ZU51bWJlcn1cIi5gKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zaG93VG90YWwgPz8gZmFsc2UpIHtcbiAgICAgIGluZm8oJycpO1xuICAgICAgaW5mbyhgVGhlcmUgYXJlICR7ZmlsdGVyZWROb3RpY2VzLmxlbmd0aH0gdW5hY2tub3dsZWRnZWQgbm90aWNlKHMpLmApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudCB7XG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJhbmdlIG9mIGFmZmVjdGVkIHZlcnNpb25zXG4gICAqL1xuICB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWNlIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgaXNzdWVOdW1iZXI6IG51bWJlcjtcbiAgb3ZlcnZpZXc6IHN0cmluZztcbiAgLyoqXG4gICAqIEEgc2V0IG9mIGFmZmVjdGVkIGNvbXBvbmVudHNcbiAgICpcbiAgICogVGhlIGNhbm9uaWNhbCBmb3JtIG9mIGEgbGlzdCBvZiBjb21wb25lbnRzIGlzIGluIERpc2p1bmN0aXZlIE5vcm1hbCBGb3JtXG4gICAqIChpLmUuLCBhbiBPUiBvZiBBTkRzKS4gVGhpcyBpcyB0aGUgZm9ybSB3aGVuIHRoZSBsaXN0IG9mIGNvbXBvbmVudHMgaXMgYVxuICAgKiBkb3VibHkgbmVzdGVkIGFycmF5OiB0aGUgbm90aWNlIG1hdGNoZXMgaWYgYWxsIGNvbXBvbmVudHMgb2YgYXQgbGVhc3Qgb25lXG4gICAqIG9mIHRoZSB0b3AtbGV2ZWwgYXJyYXkgbWF0Y2hlcy5cbiAgICpcbiAgICogSWYgdGhlIGBjb21wb25lbnRzYCBpcyBhIHNpbmdsZS1sZXZlbCBhcnJheSwgaXQgaXMgZXZhbHVhdGVkIGFzIGFuIE9SOyBpdFxuICAgKiBtYXRjaGVzIGlmIGFueSBvZiB0aGUgY29tcG9uZW50cyBtYXRjaGVzLlxuICAgKi9cbiAgY29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50IHwgQ29tcG9uZW50W10+O1xuICBzY2hlbWFWZXJzaW9uOiBzdHJpbmc7XG4gIHNldmVyaXR5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgdGhlIGdpdmVuIGNvbXBvbmVudHMgc3RydWN0dXJlIGludG8gRE5GIGZvcm1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50cyh4czogQXJyYXk8Q29tcG9uZW50IHwgQ29tcG9uZW50W10+KTogQ29tcG9uZW50W11bXSB7XG4gIHJldHVybiB4cy5tYXAoeCA9PiBBcnJheS5pc0FycmF5KHgpID8geCA6IFt4XSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvbmp1bmN0aW9uKHhzOiBDb21wb25lbnRbXSk6IHN0cmluZyB7XG4gIHJldHVybiB4cy5tYXAoYyA9PiBgJHtjLm5hbWV9OiAke2MudmVyc2lvbn1gKS5qb2luKCcgQU5EICcpO1xufVxuXG4vKipcbiAqIE5vdGljZSBhZnRlciBwYXNzaW5nIHRoZSBmaWx0ZXIuIEEgZmlsdGVyIGNhbiBhdWdtZW50IGEgbm90aWNlIHdpdGhcbiAqIGR5bmFtaWMgdmFsdWVzIGFzIGl0IGhhcyBhY2Nlc3MgdG8gdGhlIGR5bmFtaWMgbWF0Y2hpbmcgZGF0YS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZpbHRlcmVkTm90aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkeW5hbWljVmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBub3RpY2U6IE5vdGljZSkge1xuICB9XG5cbiAgcHVibGljIGFkZER5bmFtaWNWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZHluYW1pY1ZhbHVlc1tge3Jlc29sdmU6JHtrZXl9fWBdID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29tcG9uZW50c1ZhbHVlID0gbm9ybWFsaXplQ29tcG9uZW50cyh0aGlzLm5vdGljZS5jb21wb25lbnRzKS5tYXAocmVuZGVyQ29uanVuY3Rpb24pLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZUR5bmFtaWNWYWx1ZXMoW1xuICAgICAgYCR7dGhpcy5ub3RpY2UuaXNzdWVOdW1iZXJ9XFx0JHt0aGlzLm5vdGljZS50aXRsZX1gLFxuICAgICAgdGhpcy5mb3JtYXRPdmVydmlldygpLFxuICAgICAgYFxcdEFmZmVjdGVkIHZlcnNpb25zOiAke2NvbXBvbmVudHNWYWx1ZX1gLFxuICAgICAgYFxcdE1vcmUgaW5mb3JtYXRpb24gYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvJHt0aGlzLm5vdGljZS5pc3N1ZU51bWJlcn1gLFxuICAgIF0uam9pbignXFxuXFxuJykgKyAnXFxuJyk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdE92ZXJ2aWV3KCkge1xuICAgIGNvbnN0IHdyYXAgPSAoczogc3RyaW5nKSA9PiBzLnJlcGxhY2UoLyg/IVteXFxuXXsxLDYwfSQpKFteXFxuXXsxLDYwfSlcXHMvZywgJyQxXFxuJyk7XG5cbiAgICBjb25zdCBoZWFkaW5nID0gJ092ZXJ2aWV3OiAnO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IGBcXG5cXHQkeycgJy5yZXBlYXQoaGVhZGluZy5sZW5ndGgpfWA7XG4gICAgY29uc3QgY29udGVudCA9IHdyYXAodGhpcy5ub3RpY2Uub3ZlcnZpZXcpXG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAuam9pbihzZXBhcmF0b3IpO1xuXG4gICAgcmV0dXJuICdcXHQnICsgaGVhZGluZyArIGNvbnRlbnQ7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVEeW5hbWljVmFsdWVzKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKHRoaXMuZHluYW1pY1ZhbHVlcykuam9pbignfCcpLCAnZycpO1xuICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKHBhdHRlcm4sIChtYXRjaGVkKSA9PiB0aGlzLmR5bmFtaWNWYWx1ZXNbbWF0Y2hlZF0gPz8gbWF0Y2hlZCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpY2VEYXRhU291cmNlIHtcbiAgZmV0Y2goKTogUHJvbWlzZTxOb3RpY2VbXT47XG59XG5cbmV4cG9ydCBjbGFzcyBXZWJzaXRlTm90aWNlRGF0YVNvdXJjZSBpbXBsZW1lbnRzIE5vdGljZURhdGFTb3VyY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFNka0h0dHBPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFNka0h0dHBPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgZmV0Y2goKTogUHJvbWlzZTxOb3RpY2VbXT4ge1xuICAgIGNvbnN0IHRpbWVvdXQgPSAzMDAwO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgcmVxOiBDbGllbnRSZXF1ZXN0IHwgdW5kZWZpbmVkO1xuXG4gICAgICBsZXQgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHJlcSkge1xuICAgICAgICAgIHJlcS5kZXN0cm95KG5ldyBUb29sa2l0RXJyb3IoJ1JlcXVlc3QgdGltZWQgb3V0JykpO1xuICAgICAgICB9XG4gICAgICB9LCB0aW1lb3V0KTtcblxuICAgICAgdGltZXIudW5yZWYoKTtcblxuICAgICAgY29uc3Qgb3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgIGFnZW50OiBBd3NDbGlDb21wYXRpYmxlLnByb3h5QWdlbnQodGhpcy5vcHRpb25zKSxcbiAgICAgIH07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcSA9IGh0dHBzLmdldCgnaHR0cHM6Ly9jbGkuY2RrLmRldi10b29scy5hd3MuZGV2L25vdGljZXMuanNvbicsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgICAgcmVzLnNldEVuY29kaW5nKCd1dGY4Jyk7XG4gICAgICAgICAgICAgIGxldCByYXdEYXRhID0gJyc7XG4gICAgICAgICAgICAgIHJlcy5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICAgIHJhd0RhdGEgKz0gY2h1bms7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UocmF3RGF0YSkubm90aWNlcyBhcyBOb3RpY2VbXTtcbiAgICAgICAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFwiJ25vdGljZXMnIGtleSBpcyBtaXNzaW5nXCIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVidWcoJ05vdGljZXMgcmVmcmVzaGVkJyk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEgPz8gW10pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBUb29sa2l0RXJyb3IoYEZhaWxlZCB0byBwYXJzZSBub3RpY2VzOiAke2Zvcm1hdEVycm9yTWVzc2FnZShlKX1gKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmVzLm9uKCdlcnJvcicsIGUgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgVG9vbGtpdEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggbm90aWNlczogJHtmb3JtYXRFcnJvck1lc3NhZ2UoZSl9YCkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlamVjdChuZXcgVG9vbGtpdEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggbm90aWNlcy4gU3RhdHVzIGNvZGU6ICR7cmVzLnN0YXR1c0NvZGV9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICByZXEub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICByZWplY3QobmV3IFRvb2xraXRFcnJvcihgSFRUUFMgJ2dldCcgY2FsbCB0aHJldyBhbiBlcnJvcjogJHtmb3JtYXRFcnJvck1lc3NhZ2UoZSl9YCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmludGVyZmFjZSBDYWNoZWROb3RpY2VzIHtcbiAgZXhwaXJhdGlvbjogbnVtYmVyO1xuICBub3RpY2VzOiBOb3RpY2VbXTtcbn1cblxuY29uc3QgVElNRV9UT19MSVZFX1NVQ0NFU1MgPSA2MCAqIDYwICogMTAwMDsgLy8gMSBob3VyXG5jb25zdCBUSU1FX1RPX0xJVkVfRVJST1IgPSAxICogNjAgKiAxMDAwOyAvLyAxIG1pbnV0ZVxuXG5leHBvcnQgY2xhc3MgQ2FjaGVkRGF0YVNvdXJjZSBpbXBsZW1lbnRzIE5vdGljZURhdGFTb3VyY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRhU291cmNlOiBOb3RpY2VEYXRhU291cmNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2tpcENhY2hlPzogYm9vbGVhbikge1xuICB9XG5cbiAgYXN5bmMgZmV0Y2goKTogUHJvbWlzZTxOb3RpY2VbXT4ge1xuICAgIGNvbnN0IGNhY2hlZERhdGEgPSBhd2FpdCB0aGlzLmxvYWQoKTtcbiAgICBjb25zdCBkYXRhID0gY2FjaGVkRGF0YS5ub3RpY2VzO1xuICAgIGNvbnN0IGV4cGlyYXRpb24gPSBjYWNoZWREYXRhLmV4cGlyYXRpb24gPz8gMDtcblxuICAgIGlmIChEYXRlLm5vdygpID4gZXhwaXJhdGlvbiB8fCB0aGlzLnNraXBDYWNoZSkge1xuICAgICAgY29uc3QgZnJlc2hEYXRhID0gYXdhaXQgdGhpcy5mZXRjaElubmVyKCk7XG4gICAgICBhd2FpdCB0aGlzLnNhdmUoZnJlc2hEYXRhKTtcbiAgICAgIHJldHVybiBmcmVzaERhdGEubm90aWNlcztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoYFJlYWRpbmcgY2FjaGVkIG5vdGljZXMgZnJvbSAke3RoaXMuZmlsZU5hbWV9YCk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoSW5uZXIoKTogUHJvbWlzZTxDYWNoZWROb3RpY2VzPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4cGlyYXRpb246IERhdGUubm93KCkgKyBUSU1FX1RPX0xJVkVfU1VDQ0VTUyxcbiAgICAgICAgbm90aWNlczogYXdhaXQgdGhpcy5kYXRhU291cmNlLmZldGNoKCksXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGRlYnVnKGBDb3VsZCBub3QgcmVmcmVzaCBub3RpY2VzOiAke2V9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHBpcmF0aW9uOiBEYXRlLm5vdygpICsgVElNRV9UT19MSVZFX0VSUk9SLFxuICAgICAgICBub3RpY2VzOiBbXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkKCk6IFByb21pc2U8Q2FjaGVkTm90aWNlcz4ge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHtcbiAgICAgIGV4cGlyYXRpb246IDAsXG4gICAgICBub3RpY2VzOiBbXSxcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmcy5leGlzdHNTeW5jKHRoaXMuZmlsZU5hbWUpXG4gICAgICAgID8gYXdhaXQgZnMucmVhZEpTT04odGhpcy5maWxlTmFtZSkgYXMgQ2FjaGVkTm90aWNlc1xuICAgICAgICA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBkZWJ1ZyhgRmFpbGVkIHRvIGxvYWQgbm90aWNlcyBmcm9tIGNhY2hlOiAke2V9YCk7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2F2ZShjYWNoZWQ6IENhY2hlZE5vdGljZXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMud3JpdGVKU09OKHRoaXMuZmlsZU5hbWUsIGNhY2hlZCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZGVidWcoYEZhaWxlZCB0byBzdG9yZSBub3RpY2VzIGluIHRoZSBjYWNoZTogJHtlfWApO1xuICAgIH1cbiAgfVxufVxuIl19
417
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm5vdGljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsb0NBQW9DO0FBQ3BDLDZCQUE2QjtBQUU3QiwrQkFBK0I7QUFDL0IsaUNBQWlDO0FBRWpDLHdFQUFvRTtBQUVwRSwyQ0FBOEM7QUFDOUMsdUNBQXdEO0FBQ3hELDJDQUErQztBQUMvQyxpQ0FBNEQ7QUFDNUQsaUNBQXlEO0FBRXpELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBQSxrQkFBVyxHQUFFLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFvRWpFLE1BQXNCLGFBQWE7SUFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFtQztRQUN0RCxNQUFNLFVBQVUsR0FBRztZQUNqQixHQUFHLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3hELEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUM7U0FDMUMsQ0FBQztRQUVGLE9BQU8sYUFBYSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVEOztPQUVHO0lBQ0ssTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFtQztRQUNoRSxPQUFPO1lBQ0wsTUFBTTtZQUNOO2dCQUNFLElBQUksRUFBRSxLQUFLO2dCQUNYLE9BQU8sRUFBRSxPQUFPLENBQUMsVUFBVTthQUM1QjtZQUVELGVBQWU7WUFDZjtnQkFDRSxJQUFJLEVBQUUsTUFBTTtnQkFDWixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLHlCQUF5QjtnQkFDckUsV0FBVyxFQUFFLE1BQU07YUFDcEI7WUFFRCx5QkFBeUI7WUFDekIsR0FBRyxPQUFPLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dC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QUFFO2FBQ1osQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLElBQUk7UUFDaEIsTUFBTSxZQUFZLEdBQUc7WUFDbkIsVUFBVSxFQUFFLENBQUM7WUFDYixPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7UUFFRixJQUFJLENBQUM7WUFDSCxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFrQjtnQkFDbkQsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUNuQixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLElBQUEsZUFBSyxFQUFDLHNDQUFzQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFxQjtRQUN0QyxJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLElBQUEsZUFBSyxFQUFDLHlDQUF5QyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUE1REQsNENBNERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2xpZW50UmVxdWVzdCB9IGZyb20gJ2h0dHAnO1xuaW1wb3J0IHsgUmVxdWVzdE9wdGlvbnMgfSBmcm9tICdodHRwcyc7XG5pbXBvcnQgKiBhcyBodHRwcyBmcm9tICdub2RlOmh0dHBzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50IH0gZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCAqIGFzIHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHsgU2RrSHR0cE9wdGlvbnMgfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgeyBBd3NDbGlDb21wYXRpYmxlIH0gZnJvbSAnLi9hcGkvYXdzLWF1dGgvYXdzY2xpLWNvbXBhdGlibGUnO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0IH0gZnJvbSAnLi9hcGkvY29udGV4dCc7XG5pbXBvcnQgeyB2ZXJzaW9uTnVtYmVyIH0gZnJvbSAnLi9jbGkvdmVyc2lvbic7XG5pbXBvcnQgeyBkZWJ1ZywgaW5mbywgd2FybmluZywgZXJyb3IgfSBmcm9tICcuL2xvZ2dpbmcnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi90b29sa2l0L2Vycm9yJztcbmltcG9ydCB7IENvbnN0cnVjdFRyZWVOb2RlLCBsb2FkVHJlZUZyb21EaXIgfSBmcm9tICcuL3RyZWUnO1xuaW1wb3J0IHsgY2RrQ2FjaGVEaXIsIGZvcm1hdEVycm9yTWVzc2FnZSB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IENBQ0hFX0ZJTEVfUEFUSCA9IHBhdGguam9pbihjZGtDYWNoZURpcigpLCAnbm90aWNlcy5qc29uJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWNlc1Byb3BzIHtcbiAgLyoqXG4gICAqIENESyBjb250ZXh0XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIG5vdGljZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBhY2tub3dsZWRnZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlQWNrbm93bGVkZ2VkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogR2xvYmFsIENMSSBvcHRpb24gZm9yIG91dHB1dCBkaXJlY3RvcnkgZm9yIHN5bnRoZXNpemVkIGNsb3VkIGFzc2VtYmx5XG4gICAqXG4gICAqIEBkZWZhdWx0ICdjZGsub3V0J1xuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHbG9iYWwgQ0xJIG9wdGlvbiBmb3Igd2hldGhlciB3ZSBzaG93IG5vdGljZXNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRGlzcGxheT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHRoZSBIVFRQIHJlcXVlc3RcbiAgICovXG4gIHJlYWRvbmx5IGh0dHBPcHRpb25zPzogU2RrSHR0cE9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWNlc1ByaW50T3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXBwZW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgdW5hY2tub3dsZWRnZWQgbm90aWNlcyB0byB0aGUgZGlzcGxheS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNob3dUb3RhbD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWNlc1JlZnJlc2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZm9yY2UgYSBjYWNoZSByZWZyZXNoIHJlZ2FyZGxlc3Mgb2YgZXhwaXJhdGlvbiB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZm9yY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEYXRhIHNvdXJjZSBmb3IgZmV0Y2ggbm90aWNlcyBmcm9tLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFdlYnNpdGVOb3RpY2VEYXRhU291cmNlXG4gICAqL1xuICByZWFkb25seSBkYXRhU291cmNlPzogTm90aWNlRGF0YVNvdXJjZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpY2VzRmlsdGVyRmlsdGVyT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGRhdGE6IE5vdGljZVtdO1xuICByZWFkb25seSBjbGlWZXJzaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dERpcjogc3RyaW5nO1xuICByZWFkb25seSBib290c3RyYXBwZWRFbnZpcm9ubWVudHM6IEJvb3RzdHJhcHBlZEVudmlyb25tZW50W107XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOb3RpY2VzRmlsdGVyIHtcbiAgcHVibGljIHN0YXRpYyBmaWx0ZXIob3B0aW9uczogTm90aWNlc0ZpbHRlckZpbHRlck9wdGlvbnMpOiBGaWx0ZXJlZE5vdGljZVtdIHtcbiAgICBjb25zdCBjb21wb25lbnRzID0gW1xuICAgICAgLi4uTm90aWNlc0ZpbHRlci5jb25zdHJ1Y3RUcmVlQ29tcG9uZW50cyhvcHRpb25zLm91dERpciksXG4gICAgICAuLi5Ob3RpY2VzRmlsdGVyLm90aGVyQ29tcG9uZW50cyhvcHRpb25zKSxcbiAgICBdO1xuXG4gICAgcmV0dXJuIE5vdGljZXNGaWx0ZXIuZmluZEZvck5hbWVkQ29tcG9uZW50cyhvcHRpb25zLmRhdGEsIGNvbXBvbmVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZyb20gYSBzZXQgb2YgaW5wdXQgb3B0aW9ucywgcmV0dXJuIHRoZSBub3RpY2VzIGNvbXBvbmVudHMgd2UgYXJlIHNlYXJjaGluZyBmb3JcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIG90aGVyQ29tcG9uZW50cyhvcHRpb25zOiBOb3RpY2VzRmlsdGVyRmlsdGVyT3B0aW9ucyk6IEFjdHVhbENvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgLy8gQ0xJXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjbGknLFxuICAgICAgICB2ZXJzaW9uOiBvcHRpb25zLmNsaVZlcnNpb24sXG4gICAgICB9LFxuXG4gICAgICAvLyBOb2RlIHZlcnNpb25cbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ25vZGUnLFxuICAgICAgICB2ZXJzaW9uOiBwcm9jZXNzLnZlcnNpb24ucmVwbGFjZSgvXnYvLCAnJyksIC8vIHJlbW92ZSB0aGUgJ3YnIHByZWZpeC5cbiAgICAgICAgZHluYW1pY05hbWU6ICdub2RlJyxcbiAgICAgIH0sXG5cbiAgICAgIC8vIEJvb3RzdHJhcCBlbnZpcm9ubWVudHNcbiAgICAgIC4uLm9wdGlvbnMuYm9vdHN0cmFwcGVkRW52aXJvbm1lbnRzLmZsYXRNYXAoZW52ID0+IHtcbiAgICAgICAgY29uc3Qgc2VtdmVyQm9vdHN0cmFwVmVyc2lvbiA9IHNlbXZlci5jb2VyY2UoZW52LmJvb3RzdHJhcFN0YWNrVmVyc2lvbik7XG4gICAgICAgIGlmICghc2VtdmVyQm9vdHN0cmFwVmVyc2lvbikge1xuICAgICAgICAgIC8vIHdlIGRvbid0IHRocm93IGJlY2F1c2Ugbm90aWNlcyBzaG91bGQgbmV2ZXIgY3Jhc2ggdGhlIGNsaS5cbiAgICAgICAgICB3YXJuaW5nKGBXaGlsZSBmaWx0ZXJpbmcgbm90aWNlcywgY291bGQgbm90IGNvZXJjZSBib290c3RyYXAgdmVyc2lvbiAnJHtlbnYuYm9vdHN0cmFwU3RhY2tWZXJzaW9ufScgaW50byBzZW12ZXJgKTtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICBuYW1lOiAnYm9vdHN0cmFwJyxcbiAgICAgICAgICB2ZXJzaW9uOiBgJHtzZW12ZXJCb290c3RyYXBWZXJzaW9ufWAsXG4gICAgICAgICAgZHluYW1pY05hbWU6ICdFTlZJUk9OTUVOVFMnLFxuICAgICAgICAgIGR5bmFtaWNWYWx1ZTogZW52LmVudmlyb25tZW50Lm5hbWUsXG4gICAgICAgIH1dO1xuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCYXNlZCBvbiBhIHNldCBvZiBjb21wb25lbnQgbmFtZXMsIGZpbmQgYWxsIG5vdGljZXMgdGhhdCBtYXRjaCBvbmUgb2YgdGhlIGdpdmVuIGNvbXBvbmVudHNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGZpbmRGb3JOYW1lZENvbXBvbmVudHMoZGF0YTogTm90aWNlW10sIGFjdHVhbENvbXBvbmVudHM6IEFjdHVhbENvbXBvbmVudFtdKTogRmlsdGVyZWROb3RpY2VbXSB7XG4gICAgcmV0dXJuIGRhdGEuZmxhdE1hcChub3RpY2UgPT4ge1xuICAgICAgY29uc3Qgb3JzID0gdGhpcy5yZXNvbHZlQWxpYXNlcyhub3JtYWxpemVDb21wb25lbnRzKG5vdGljZS5jb21wb25lbnRzKSk7XG5cbiAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IHNldCBvZiB0aGUgZGlzanVuY3Rpb25zIG9mIHdoaWNoIGFsbCBjb21wb25lbnRzIG1hdGNoIGFnYWluc3QgdGhlIGFjdHVhbCBjb21wb25lbnRzLlxuICAgICAgLy8gUmV0dXJuIHRoZSBhY3R1YWwgY29tcG9uZW50cyB3ZSBmb3VuZCBzbyB0aGF0IHdlIGNhbiBpbmplY3QgdGhlaXIgZHluYW1pYyB2YWx1ZXMuIEEgc2luZ2xlIGZpbHRlclxuICAgICAgLy8gY29tcG9uZW50IGNhbiBtYXRjaCBtb3JlIHRoYW4gb25lIGFjdHVhbCBjb21wb25lbnRcbiAgICAgIGZvciAoY29uc3QgYW5kcyBvZiBvcnMpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZCA9IGFuZHMubWFwKGFmZmVjdGVkID0+IGFjdHVhbENvbXBvbmVudHMuZmlsdGVyKGFjdHVhbCA9PlxuICAgICAgICAgIE5vdGljZXNGaWx0ZXIuY29tcG9uZW50TmFtZU1hdGNoZXMoYWZmZWN0ZWQsIGFjdHVhbCkgJiYgc2VtdmVyLnNhdGlzZmllcyhhY3R1YWwudmVyc2lvbiwgYWZmZWN0ZWQudmVyc2lvbiwgeyBpbmNsdWRlUHJlcmVsZWFzZTogdHJ1ZSB9KSkpO1xuXG4gICAgICAgIC8vIEZvciBldmVyeSBjbGF1c2UgaW4gdGhlIGZpbHRlciB3ZSBtYXRjaGVkIG9uZSBvciBtb3JlIGNvbXBvbmVudHNcbiAgICAgICAgaWYgKG1hdGNoZWQuZXZlcnkoeHMgPT4geHMubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICBjb25zdCByZXQgPSBuZXcgRmlsdGVyZWROb3RpY2Uobm90aWNlKTtcbiAgICAgICAgICBOb3RpY2VzRmlsdGVyLmFkZER5bmFtaWNWYWx1ZXMobWF0Y2hlZC5mbGF0TWFwKHggPT4geCksIHJldCk7XG4gICAgICAgICAgcmV0dXJuIFtyZXRdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBnaXZlbiBcImFmZmVjdGVkIGNvbXBvbmVudFwiIG5hbWUgYXBwbGllcyB0byB0aGUgZ2l2ZW4gYWN0dWFsIGNvbXBvbmVudCBuYW1lLlxuICAgKlxuICAgKiBUaGUgbmFtZSBtYXRjaGVzIGlmIHRoZSBuYW1lIGlzIGV4YWN0bHkgdGhlIHNhbWUsIG9yIHRoZSBuYW1lIGluIHRoZSBub3RpY2VcbiAgICogaXMgYSBwcmVmaXggb2YgdGhlIG5vZGUgbmFtZSB3aGVuIHRoZSBxdWVyeSBlbmRzIGluICcuJy5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGNvbXBvbmVudE5hbWVNYXRjaGVzKHBhdHRlcm46IENvbXBvbmVudCwgYWN0dWFsOiBBY3R1YWxDb21wb25lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGF0dGVybi5uYW1lLmVuZHNXaXRoKCcuJykgPyBhY3R1YWwubmFtZS5zdGFydHNXaXRoKHBhdHRlcm4ubmFtZSkgOiBwYXR0ZXJuLm5hbWUgPT09IGFjdHVhbC5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZHluYW1pYyB2YWx1ZXMgZnJvbSB0aGUgZ2l2ZW4gQWN0dWFsQ29tcG9uZW50c1xuICAgKlxuICAgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29tcG9uZW50cyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbmFtZSwgdGhleSBhcmUgam9pbmVkXG4gICAqIGJ5IGEgY29tbWEuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBhZGREeW5hbWljVmFsdWVzKGNvbXBzOiBBY3R1YWxDb21wb25lbnRbXSwgbm90aWNlOiBGaWx0ZXJlZE5vdGljZSkge1xuICAgIGNvbnN0IGR5bmFtaWNWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICAgIGZvciAoY29uc3QgY29tcCBvZiBjb21wcykge1xuICAgICAgaWYgKGNvbXAuZHluYW1pY05hbWUpIHtcbiAgICAgICAgZHluYW1pY1ZhbHVlc1tjb21wLmR5bmFtaWNOYW1lXSA9IGR5bmFtaWNWYWx1ZXNbY29tcC5keW5hbWljTmFtZV0gPz8gW107XG4gICAgICAgIGR5bmFtaWNWYWx1ZXNbY29tcC5keW5hbWljTmFtZV0ucHVzaChjb21wLmR5bmFtaWNWYWx1ZSA/PyBjb21wLnZlcnNpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlc10gb2YgT2JqZWN0LmVudHJpZXMoZHluYW1pY1ZhbHVlcykpIHtcbiAgICAgIG5vdGljZS5hZGREeW5hbWljVmFsdWUoa2V5LCB2YWx1ZXMuam9pbignLCcpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJlYXQgJ2ZyYW1ld29yaycgYXMgYW4gYWxpYXMgZm9yIGVpdGhlciBgYXdzLWNkay1saWIuYCBvciBgQGF3cy1jZGsvY29yZS5gLlxuICAgKlxuICAgKiBCZWNhdXNlIGl0J3MgRUlUSEVSIGBhd3MtY2RrLWxpYmAgb3IgYEBhd3MtY2RrL2NvcmVgLCB3ZSBuZWVkIHRvIGFkZCBtdWx0aXBsZVxuICAgKiBhcnJheXMgYXQgdGhlIHRvcCBsZXZlbC5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlc29sdmVBbGlhc2VzKG9yczogQ29tcG9uZW50W11bXSk6IENvbXBvbmVudFtdW10ge1xuICAgIHJldHVybiBvcnMuZmxhdE1hcChhbmRzID0+IHtcbiAgICAgIGNvbnN0IGhhc0ZyYW1ld29yayA9IGFuZHMuZmluZChjID0+IGMubmFtZSA9PT0gJ2ZyYW1ld29yaycpO1xuICAgICAgaWYgKCFoYXNGcmFtZXdvcmspIHtcbiAgICAgICAgcmV0dXJuIFthbmRzXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYW5kcy5tYXAoYyA9PiBjLm5hbWUgPT09ICdmcmFtZXdvcmsnID8geyAuLi5jLCBuYW1lOiAnQGF3cy1jZGsvY29yZS4nIH0gOiBjKSxcbiAgICAgICAgYW5kcy5tYXAoYyA9PiBjLm5hbWUgPT09ICdmcmFtZXdvcmsnID8geyAuLi5jLCBuYW1lOiAnYXdzLWNkay1saWIuJyB9IDogYyksXG4gICAgICBdO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGNvbnN0cnVjdCB0cmVlIGZyb20gdGhlIGdpdmVuIGRpcmVjdG9yeSBhbmQgcmV0dXJuIGl0cyBjb21wb25lbnRzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBjb25zdHJ1Y3RUcmVlQ29tcG9uZW50cyhtYW5pZmVzdERpcjogc3RyaW5nKTogQWN0dWFsQ29tcG9uZW50W10ge1xuICAgIGNvbnN0IHRyZWUgPSBsb2FkVHJlZUZyb21EaXIobWFuaWZlc3REaXIpO1xuICAgIGlmICghdHJlZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJldDogQWN0dWFsQ29tcG9uZW50W10gPSBbXTtcbiAgICByZWN1cnNlKHRyZWUpO1xuICAgIHJldHVybiByZXQ7XG5cbiAgICBmdW5jdGlvbiByZWN1cnNlKHg6IENvbnN0cnVjdFRyZWVOb2RlKSB7XG4gICAgICBpZiAoeC5jb25zdHJ1Y3RJbmZvPy5mcW4gJiYgeC5jb25zdHJ1Y3RJbmZvPy52ZXJzaW9uKSB7XG4gICAgICAgIHJldC5wdXNoKHtcbiAgICAgICAgICBuYW1lOiB4LmNvbnN0cnVjdEluZm8/LmZxbixcbiAgICAgICAgICB2ZXJzaW9uOiB4LmNvbnN0cnVjdEluZm8/LnZlcnNpb24sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIE9iamVjdC52YWx1ZXMoeC5jaGlsZHJlbiA/PyB7fSkpIHtcbiAgICAgICAgcmVjdXJzZShjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmludGVyZmFjZSBBY3R1YWxDb21wb25lbnQge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBtYXRjaGVkLCB1bmRlciB3aGF0IG5hbWUgc2hvdWxkIGl0IGJlIGFkZGVkIHRvIHRoZSBzZXQgb2YgZHluYW1pYyB2YWx1ZXNcbiAgICpcbiAgICogVGhlc2Ugd2lsbCBiZSB1c2VkIHRvIHN1YnN0aXR1dGUgcGxhY2Vob2xkZXJzIGluIHRoZSBtZXNzYWdlIHN0cmluZywgd2hlcmVcbiAgICogcGxhY2Vob2xkZXJzIGxvb2sgbGlrZSBge3Jlc29sdmU6WFlafWAuXG4gICAqXG4gICAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgY29tcG9uZW50IHdpdGggdGhlIHNhbWUgZHluYW1pYyBuYW1lLCB0aGV5IGFyZVxuICAgKiBqb2luZWQgYnkgJywnLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERvbid0IGFkZCB0byB0aGUgc2V0IG9mIGR5bmFtaWMgdmFsdWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZHluYW1pY05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIG1hdGNoZWQsIHdoYXQgd2Ugc2hvdWxkIHB1dCBpbiB0aGUgc2V0IG9mIGR5bmFtaWMgdmFsdWVzIGluc3N0ZWFkIG9mIHRoZSB2ZXJzaW9uLlxuICAgKlxuICAgKiBPbmx5IHVzZWQgaWYgYGR5bmFtaWNOYW1lYCBpcyBzZXQ7IGJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIGFjdHVhbCB2ZXJzaW9uXG4gICAqIG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSBkeW5hbWljVmFsdWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gYWJvdXQgYSBib290c3RyYXBwZWQgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwcGVkRW52aXJvbm1lbnQge1xuICByZWFkb25seSBib290c3RyYXBTdGFja1ZlcnNpb246IG51bWJlcjtcbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50O1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIGFjY2VzcyB0byBub3RpY2VzIHRoZSBDTEkgY2FuIGRpc3BsYXkuXG4gKi9cbmV4cG9ydCBjbGFzcyBOb3RpY2VzIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnN0YW5jZS4gTm90ZSB0aGF0IHRoaXMgcmVwbGFjZXMgdGhlIHNpbmdsZXRvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKHByb3BzOiBOb3RpY2VzUHJvcHMpOiBOb3RpY2VzIHtcbiAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBOb3RpY2VzKHByb3BzKTtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuIE1heSByZXR1cm4gYHVuZGVmaW5lZGAgaWYgYGNyZWF0ZWAgaGFzIG5vdCBiZWVuIGNhbGxlZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0KCk6IE5vdGljZXMgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogTm90aWNlcyB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQ6IENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3V0cHV0OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvdWxkRGlzcGxheTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBhY2tub3dsZWRnZWRJc3N1ZU51bWJlcnM6IFNldDxOdW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IGluY2x1ZGVBY2tub3dsZWdkZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cE9wdGlvbnM6IFNka0h0dHBPcHRpb25zO1xuXG4gIHByaXZhdGUgZGF0YTogU2V0PE5vdGljZT4gPSBuZXcgU2V0KCk7XG5cbiAgLy8gc2V0cyBkb24ndCBkZWR1cGxpY2F0ZSBpbnRlcmZhY2VzLCBzbyB3ZSB1c2UgYSBtYXAuXG4gIHByaXZhdGUgcmVhZG9ubHkgYm9vdHN0cmFwcGVkRW52aXJvbm1lbnRzOiBNYXA8c3RyaW5nLCBCb290c3RyYXBwZWRFbnZpcm9ubWVudD4gPSBuZXcgTWFwKCk7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihwcm9wczogTm90aWNlc1Byb3BzKSB7XG4gICAgdGhpcy5jb250ZXh0ID0gcHJvcHMuY29udGV4dDtcbiAgICB0aGlzLmFja25vd2xlZGdlZElzc3VlTnVtYmVycyA9IG5ldyBTZXQodGhpcy5jb250ZXh0LmdldCgnYWNrbm93bGVkZ2VkLWlzc3VlLW51bWJlcnMnKSA/PyBbXSk7XG4gICAgdGhpcy5pbmNsdWRlQWNrbm93bGVnZGVkID0gcHJvcHMuaW5jbHVkZUFja25vd2xlZGdlZCA/PyBmYWxzZTtcbiAgICB0aGlzLm91dHB1dCA9IHByb3BzLm91dHB1dCA/PyAnY2RrLm91dCc7XG4gICAgdGhpcy5zaG91bGREaXNwbGF5ID0gcHJvcHMuc2hvdWxkRGlzcGxheSA/PyB0cnVlO1xuICAgIHRoaXMuaHR0cE9wdGlvbnMgPSBwcm9wcy5odHRwT3B0aW9ucyA/PyB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBib290c3RyYXAgaW5mb3JtYXRpb24gdG8gZmlsdGVyIG9uLiBDYW4gaGF2ZSBtdWx0aXBsZSB2YWx1ZXNcbiAgICogaW4gY2FzZSBvZiBtdWx0aS1lbnZpcm9ubWVudCBkZXBsb3ltZW50cy5cbiAgICovXG4gIHB1YmxpYyBhZGRCb290c3RyYXBwZWRFbnZpcm9ubWVudChib290c3RyYXBwZWQ6IEJvb3RzdHJhcHBlZEVudmlyb25tZW50KSB7XG4gICAgY29uc3Qga2V5ID0gW1xuICAgICAgYm9vdHN0cmFwcGVkLmJvb3RzdHJhcFN0YWNrVmVyc2lvbixcbiAgICAgIGJvb3RzdHJhcHBlZC5lbnZpcm9ubWVudC5hY2NvdW50LFxuICAgICAgYm9vdHN0cmFwcGVkLmVudmlyb25tZW50LnJlZ2lvbixcbiAgICAgIGJvb3RzdHJhcHBlZC5lbnZpcm9ubWVudC5uYW1lLFxuICAgIF0uam9pbignOicpO1xuICAgIHRoaXMuYm9vdHN0cmFwcGVkRW52aXJvbm1lbnRzLnNldChrZXksIGJvb3RzdHJhcHBlZCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCB0aGUgbGlzdCBvZiBub3RpY2VzIHRoaXMgaW5zdGFuY2UgaXMgYXdhcmUgb2YuXG4gICAqIFRvIG1ha2Ugc3VyZSB0aGlzIG5ldmVyIGNyYXNoZXMgdGhlIENMSSBwcm9jZXNzLCBhbGwgZmFpbHVyZXMgYXJlIGNhdWdodCBhbmRcbiAgICogc2lsZW50bHkgbG9nZ2VkLlxuICAgKlxuICAgKiBJZiBjb250ZXh0IGlzIGNvbmZpZ3VyZWQgdG8gbm90IGRpc3BsYXkgbm90aWNlcywgdGhpcyB3aWxsIG5vLW9wLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZnJlc2gob3B0aW9uczogTm90aWNlc1JlZnJlc2hPcHRpb25zID0ge30pIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkRGlzcGxheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB1bmRlcmx5aW5nRGF0YVNvdXJjZSA9IG9wdGlvbnMuZGF0YVNvdXJjZSA/PyBuZXcgV2Vic2l0ZU5vdGljZURhdGFTb3VyY2UodGhpcy5odHRwT3B0aW9ucyk7XG4gICAgICBjb25zdCBkYXRhU291cmNlID0gbmV3IENhY2hlZERhdGFTb3VyY2UoQ0FDSEVfRklMRV9QQVRILCB1bmRlcmx5aW5nRGF0YVNvdXJjZSwgb3B0aW9ucy5mb3JjZSA/PyBmYWxzZSk7XG4gICAgICBjb25zdCBub3RpY2VzID0gYXdhaXQgZGF0YVNvdXJjZS5mZXRjaCgpO1xuICAgICAgdGhpcy5kYXRhID0gbmV3IFNldCh0aGlzLmluY2x1ZGVBY2tub3dsZWdkZWQgPyBub3RpY2VzIDogbm90aWNlcy5maWx0ZXIobiA9PiAhdGhpcy5hY2tub3dsZWRnZWRJc3N1ZU51bWJlcnMuaGFzKG4uaXNzdWVOdW1iZXIpKSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBkZWJ1ZyhgQ291bGQgbm90IHJlZnJlc2ggbm90aWNlczogJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSByZWxldmFudCBub3RpY2VzICh1bmxlc3MgY29udGV4dCBkaWN0YXRlcyB3ZSBzaG91bGRuJ3QpLlxuICAgKi9cbiAgcHVibGljIGRpc3BsYXkob3B0aW9uczogTm90aWNlc1ByaW50T3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLnNob3VsZERpc3BsYXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJlZE5vdGljZXMgPSBOb3RpY2VzRmlsdGVyLmZpbHRlcih7XG4gICAgICBkYXRhOiBBcnJheS5mcm9tKHRoaXMuZGF0YSksXG4gICAgICBjbGlWZXJzaW9uOiB2ZXJzaW9uTnVtYmVyKCksXG4gICAgICBvdXREaXI6IHRoaXMub3V0cHV0LFxuICAgICAgYm9vdHN0cmFwcGVkRW52aXJvbm1lbnRzOiBBcnJheS5mcm9tKHRoaXMuYm9vdHN0cmFwcGVkRW52aXJvbm1lbnRzLnZhbHVlcygpKSxcbiAgICB9KTtcblxuICAgIGlmIChmaWx0ZXJlZE5vdGljZXMubGVuZ3RoID4gMCkge1xuICAgICAgaW5mbygnJyk7XG4gICAgICBpbmZvKCdOT1RJQ0VTICAgICAgICAgKFdoYXRcXCdzIHRoaXM/IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay93aWtpL0NMSS1Ob3RpY2VzKScpO1xuICAgICAgaW5mbygnJyk7XG4gICAgICBmb3IgKGNvbnN0IGZpbHRlcmVkIG9mIGZpbHRlcmVkTm90aWNlcykge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmaWx0ZXJlZC5mb3JtYXQoKTtcbiAgICAgICAgc3dpdGNoIChmaWx0ZXJlZC5ub3RpY2Uuc2V2ZXJpdHkpIHtcbiAgICAgICAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgICAgICAgIHdhcm5pbmcoZm9ybWF0dGVkKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgIGVycm9yKGZvcm1hdHRlZCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaW5mbyhmb3JtYXR0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIGluZm8oJycpO1xuICAgICAgfVxuICAgICAgaW5mbyhgSWYgeW91IGRvbuKAmXQgd2FudCB0byBzZWUgYSBub3RpY2UgYW55bW9yZSwgdXNlIFwiY2RrIGFja25vd2xlZGdlIDxpZD5cIi4gRm9yIGV4YW1wbGUsIFwiY2RrIGFja25vd2xlZGdlICR7ZmlsdGVyZWROb3RpY2VzWzBdLm5vdGljZS5pc3N1ZU51bWJlcn1cIi5gKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zaG93VG90YWwgPz8gZmFsc2UpIHtcbiAgICAgIGluZm8oJycpO1xuICAgICAgaW5mbyhgVGhlcmUgYXJlICR7ZmlsdGVyZWROb3RpY2VzLmxlbmd0aH0gdW5hY2tub3dsZWRnZWQgbm90aWNlKHMpLmApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudCB7XG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJhbmdlIG9mIGFmZmVjdGVkIHZlcnNpb25zXG4gICAqL1xuICB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWNlIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgaXNzdWVOdW1iZXI6IG51bWJlcjtcbiAgb3ZlcnZpZXc6IHN0cmluZztcbiAgLyoqXG4gICAqIEEgc2V0IG9mIGFmZmVjdGVkIGNvbXBvbmVudHNcbiAgICpcbiAgICogVGhlIGNhbm9uaWNhbCBmb3JtIG9mIGEgbGlzdCBvZiBjb21wb25lbnRzIGlzIGluIERpc2p1bmN0aXZlIE5vcm1hbCBGb3JtXG4gICAqIChpLmUuLCBhbiBPUiBvZiBBTkRzKS4gVGhpcyBpcyB0aGUgZm9ybSB3aGVuIHRoZSBsaXN0IG9mIGNvbXBvbmVudHMgaXMgYVxuICAgKiBkb3VibHkgbmVzdGVkIGFycmF5OiB0aGUgbm90aWNlIG1hdGNoZXMgaWYgYWxsIGNvbXBvbmVudHMgb2YgYXQgbGVhc3Qgb25lXG4gICAqIG9mIHRoZSB0b3AtbGV2ZWwgYXJyYXkgbWF0Y2hlcy5cbiAgICpcbiAgICogSWYgdGhlIGBjb21wb25lbnRzYCBpcyBhIHNpbmdsZS1sZXZlbCBhcnJheSwgaXQgaXMgZXZhbHVhdGVkIGFzIGFuIE9SOyBpdFxuICAgKiBtYXRjaGVzIGlmIGFueSBvZiB0aGUgY29tcG9uZW50cyBtYXRjaGVzLlxuICAgKi9cbiAgY29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50IHwgQ29tcG9uZW50W10+O1xuICBzY2hlbWFWZXJzaW9uOiBzdHJpbmc7XG4gIHNldmVyaXR5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgdGhlIGdpdmVuIGNvbXBvbmVudHMgc3RydWN0dXJlIGludG8gRE5GIGZvcm1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50cyh4czogQXJyYXk8Q29tcG9uZW50IHwgQ29tcG9uZW50W10+KTogQ29tcG9uZW50W11bXSB7XG4gIHJldHVybiB4cy5tYXAoeCA9PiBBcnJheS5pc0FycmF5KHgpID8geCA6IFt4XSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvbmp1bmN0aW9uKHhzOiBDb21wb25lbnRbXSk6IHN0cmluZyB7XG4gIHJldHVybiB4cy5tYXAoYyA9PiBgJHtjLm5hbWV9OiAke2MudmVyc2lvbn1gKS5qb2luKCcgQU5EICcpO1xufVxuXG4vKipcbiAqIE5vdGljZSBhZnRlciBwYXNzaW5nIHRoZSBmaWx0ZXIuIEEgZmlsdGVyIGNhbiBhdWdtZW50IGEgbm90aWNlIHdpdGhcbiAqIGR5bmFtaWMgdmFsdWVzIGFzIGl0IGhhcyBhY2Nlc3MgdG8gdGhlIGR5bmFtaWMgbWF0Y2hpbmcgZGF0YS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZpbHRlcmVkTm90aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkeW5hbWljVmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBub3RpY2U6IE5vdGljZSkge1xuICB9XG5cbiAgcHVibGljIGFkZER5bmFtaWNWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZHluYW1pY1ZhbHVlc1tge3Jlc29sdmU6JHtrZXl9fWBdID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29tcG9uZW50c1ZhbHVlID0gbm9ybWFsaXplQ29tcG9uZW50cyh0aGlzLm5vdGljZS5jb21wb25lbnRzKS5tYXAocmVuZGVyQ29uanVuY3Rpb24pLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZUR5bmFtaWNWYWx1ZXMoW1xuICAgICAgYCR7dGhpcy5ub3RpY2UuaXNzdWVOdW1iZXJ9XFx0JHt0aGlzLm5vdGljZS50aXRsZX1gLFxuICAgICAgdGhpcy5mb3JtYXRPdmVydmlldygpLFxuICAgICAgYFxcdEFmZmVjdGVkIHZlcnNpb25zOiAke2NvbXBvbmVudHNWYWx1ZX1gLFxuICAgICAgYFxcdE1vcmUgaW5mb3JtYXRpb24gYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvJHt0aGlzLm5vdGljZS5pc3N1ZU51bWJlcn1gLFxuICAgIF0uam9pbignXFxuXFxuJykgKyAnXFxuJyk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdE92ZXJ2aWV3KCkge1xuICAgIGNvbnN0IHdyYXAgPSAoczogc3RyaW5nKSA9PiBzLnJlcGxhY2UoLyg/IVteXFxuXXsxLDYwfSQpKFteXFxuXXsxLDYwfSlcXHMvZywgJyQxXFxuJyk7XG5cbiAgICBjb25zdCBoZWFkaW5nID0gJ092ZXJ2aWV3OiAnO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IGBcXG5cXHQkeycgJy5yZXBlYXQoaGVhZGluZy5sZW5ndGgpfWA7XG4gICAgY29uc3QgY29udGVudCA9IHdyYXAodGhpcy5ub3RpY2Uub3ZlcnZpZXcpXG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAuam9pbihzZXBhcmF0b3IpO1xuXG4gICAgcmV0dXJuICdcXHQnICsgaGVhZGluZyArIGNvbnRlbnQ7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVEeW5hbWljVmFsdWVzKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKHRoaXMuZHluYW1pY1ZhbHVlcykuam9pbignfCcpLCAnZycpO1xuICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKHBhdHRlcm4sIChtYXRjaGVkKSA9PiB0aGlzLmR5bmFtaWNWYWx1ZXNbbWF0Y2hlZF0gPz8gbWF0Y2hlZCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpY2VEYXRhU291cmNlIHtcbiAgZmV0Y2goKTogUHJvbWlzZTxOb3RpY2VbXT47XG59XG5cbmV4cG9ydCBjbGFzcyBXZWJzaXRlTm90aWNlRGF0YVNvdXJjZSBpbXBsZW1lbnRzIE5vdGljZURhdGFTb3VyY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFNka0h0dHBPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFNka0h0dHBPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgZmV0Y2goKTogUHJvbWlzZTxOb3RpY2VbXT4ge1xuICAgIGNvbnN0IHRpbWVvdXQgPSAzMDAwO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgcmVxOiBDbGllbnRSZXF1ZXN0IHwgdW5kZWZpbmVkO1xuXG4gICAgICBsZXQgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHJlcSkge1xuICAgICAgICAgIHJlcS5kZXN0cm95KG5ldyBUb29sa2l0RXJyb3IoJ1JlcXVlc3QgdGltZWQgb3V0JykpO1xuICAgICAgICB9XG4gICAgICB9LCB0aW1lb3V0KTtcblxuICAgICAgdGltZXIudW5yZWYoKTtcblxuICAgICAgY29uc3Qgb3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgIGFnZW50OiBBd3NDbGlDb21wYXRpYmxlLnByb3h5QWdlbnQodGhpcy5vcHRpb25zKSxcbiAgICAgIH07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcSA9IGh0dHBzLmdldCgnaHR0cHM6Ly9jbGkuY2RrLmRldi10b29scy5hd3MuZGV2L25vdGljZXMuanNvbicsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgICAgcmVzLnNldEVuY29kaW5nKCd1dGY4Jyk7XG4gICAgICAgICAgICAgIGxldCByYXdEYXRhID0gJyc7XG4gICAgICAgICAgICAgIHJlcy5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICAgIHJhd0RhdGEgKz0gY2h1bms7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UocmF3RGF0YSkubm90aWNlcyBhcyBOb3RpY2VbXTtcbiAgICAgICAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFwiJ25vdGljZXMnIGtleSBpcyBtaXNzaW5nXCIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVidWcoJ05vdGljZXMgcmVmcmVzaGVkJyk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEgPz8gW10pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBUb29sa2l0RXJyb3IoYEZhaWxlZCB0byBwYXJzZSBub3RpY2VzOiAke2Zvcm1hdEVycm9yTWVzc2FnZShlKX1gKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmVzLm9uKCdlcnJvcicsIGUgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgVG9vbGtpdEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggbm90aWNlczogJHtmb3JtYXRFcnJvck1lc3NhZ2UoZSl9YCkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlamVjdChuZXcgVG9vbGtpdEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggbm90aWNlcy4gU3RhdHVzIGNvZGU6ICR7cmVzLnN0YXR1c0NvZGV9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICByZXEub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICByZWplY3QobmV3IFRvb2xraXRFcnJvcihgSFRUUFMgJ2dldCcgY2FsbCB0aHJldyBhbiBlcnJvcjogJHtmb3JtYXRFcnJvck1lc3NhZ2UoZSl9YCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmludGVyZmFjZSBDYWNoZWROb3RpY2VzIHtcbiAgZXhwaXJhdGlvbjogbnVtYmVyO1xuICBub3RpY2VzOiBOb3RpY2VbXTtcbn1cblxuY29uc3QgVElNRV9UT19MSVZFX1NVQ0NFU1MgPSA2MCAqIDYwICogMTAwMDsgLy8gMSBob3VyXG5jb25zdCBUSU1FX1RPX0xJVkVfRVJST1IgPSAxICogNjAgKiAxMDAwOyAvLyAxIG1pbnV0ZVxuXG5leHBvcnQgY2xhc3MgQ2FjaGVkRGF0YVNvdXJjZSBpbXBsZW1lbnRzIE5vdGljZURhdGFTb3VyY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRhU291cmNlOiBOb3RpY2VEYXRhU291cmNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2tpcENhY2hlPzogYm9vbGVhbikge1xuICB9XG5cbiAgYXN5bmMgZmV0Y2goKTogUHJvbWlzZTxOb3RpY2VbXT4ge1xuICAgIGNvbnN0IGNhY2hlZERhdGEgPSBhd2FpdCB0aGlzLmxvYWQoKTtcbiAgICBjb25zdCBkYXRhID0gY2FjaGVkRGF0YS5ub3RpY2VzO1xuICAgIGNvbnN0IGV4cGlyYXRpb24gPSBjYWNoZWREYXRhLmV4cGlyYXRpb24gPz8gMDtcblxuICAgIGlmIChEYXRlLm5vdygpID4gZXhwaXJhdGlvbiB8fCB0aGlzLnNraXBDYWNoZSkge1xuICAgICAgY29uc3QgZnJlc2hEYXRhID0gYXdhaXQgdGhpcy5mZXRjaElubmVyKCk7XG4gICAgICBhd2FpdCB0aGlzLnNhdmUoZnJlc2hEYXRhKTtcbiAgICAgIHJldHVybiBmcmVzaERhdGEubm90aWNlcztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoYFJlYWRpbmcgY2FjaGVkIG5vdGljZXMgZnJvbSAke3RoaXMuZmlsZU5hbWV9YCk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoSW5uZXIoKTogUHJvbWlzZTxDYWNoZWROb3RpY2VzPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4cGlyYXRpb246IERhdGUubm93KCkgKyBUSU1FX1RPX0xJVkVfU1VDQ0VTUyxcbiAgICAgICAgbm90aWNlczogYXdhaXQgdGhpcy5kYXRhU291cmNlLmZldGNoKCksXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGRlYnVnKGBDb3VsZCBub3QgcmVmcmVzaCBub3RpY2VzOiAke2V9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHBpcmF0aW9uOiBEYXRlLm5vdygpICsgVElNRV9UT19MSVZFX0VSUk9SLFxuICAgICAgICBub3RpY2VzOiBbXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkKCk6IFByb21pc2U8Q2FjaGVkTm90aWNlcz4ge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHtcbiAgICAgIGV4cGlyYXRpb246IDAsXG4gICAgICBub3RpY2VzOiBbXSxcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmcy5leGlzdHNTeW5jKHRoaXMuZmlsZU5hbWUpXG4gICAgICAgID8gYXdhaXQgZnMucmVhZEpTT04odGhpcy5maWxlTmFtZSkgYXMgQ2FjaGVkTm90aWNlc1xuICAgICAgICA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBkZWJ1ZyhgRmFpbGVkIHRvIGxvYWQgbm90aWNlcyBmcm9tIGNhY2hlOiAke2V9YCk7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2F2ZShjYWNoZWQ6IENhY2hlZE5vdGljZXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMud3JpdGVKU09OKHRoaXMuZmlsZU5hbWUsIGNhY2hlZCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZGVidWcoYEZhaWxlZCB0byBzdG9yZSBub3RpY2VzIGluIHRoZSBjYWNoZTogJHtlfWApO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,3 +1,4 @@
1
+ import { StackActivityProgress } from '../commands/deploy';
1
2
  export type IoMessageCodeCategory = 'TOOLKIT' | 'SDK' | 'ASSETS';
2
3
  export type IoCodeLevel = 'E' | 'W' | 'I';
3
4
  export type IoMessageSpecificCode<L extends IoCodeLevel> = `CDK_${IoMessageCodeCategory}_${L}${number}${number}${number}${number}`;
@@ -111,6 +112,12 @@ export interface CliIoHostProps {
111
112
  * @default - determined from the environment, specifically based on `process.env.CI`
112
113
  */
113
114
  readonly isCI?: boolean;
115
+ /**
116
+ * The initial Toolkit action the hosts starts with.
117
+ *
118
+ * @default StackActivityProgress.BAR
119
+ */
120
+ readonly stackProgress?: StackActivityProgress;
114
121
  }
115
122
  /**
116
123
  * A simple IO host for the CLI that writes messages to the console.
@@ -129,6 +136,8 @@ export declare class CliIoHost implements IIoHost {
129
136
  private _isTTY;
130
137
  private _logLevel;
131
138
  private _internalIoHost?;
139
+ private _progress;
140
+ private activityPrinter?;
132
141
  private corkedCounter;
133
142
  private readonly corkedLoggingBuffer;
134
143
  private constructor();
@@ -136,6 +145,17 @@ export declare class CliIoHost implements IIoHost {
136
145
  * Returns the singleton instance
137
146
  */
138
147
  registerIoHost(ioHost: IIoHost): void;
148
+ /**
149
+ * Update the stackProgress preference.
150
+ */
151
+ set stackProgress(type: StackActivityProgress);
152
+ /**
153
+ * Gets the stackProgress value.
154
+ *
155
+ * This takes into account other state of the ioHost,
156
+ * like if isTTY and isCI.
157
+ */
158
+ get stackProgress(): StackActivityProgress;
139
159
  /**
140
160
  * The current action being performed by the CLI.
141
161
  */
@@ -188,6 +208,10 @@ export declare class CliIoHost implements IIoHost {
188
208
  * The caller waits until the notification completes.
189
209
  */
190
210
  notify<T>(msg: IoMessage<T>): Promise<void>;
211
+ /**
212
+ * Detect stack activity messages so they can be send to the printer.
213
+ */
214
+ private isStackActivity;
191
215
  /**
192
216
  * Determines the output stream, based on message level and configuration.
193
217
  */
@@ -207,6 +231,10 @@ export declare class CliIoHost implements IIoHost {
207
231
  * Formats date to HH:MM:SS
208
232
  */
209
233
  private formatTime;
234
+ /**
235
+ * Get an instance of the ActivityPrinter
236
+ */
237
+ private makeActivityPrinter;
210
238
  }
211
239
  /**
212
240
  * Returns true if the current process is running in a CI environment
@@ -6,6 +6,8 @@ const util = require("node:util");
6
6
  const chalk = require("chalk");
7
7
  const promptly = require("promptly");
8
8
  const error_1 = require("./error");
9
+ const activity_printer_1 = require("../cli/activity-printer");
10
+ const deploy_1 = require("../commands/deploy");
9
11
  exports.levelPriority = {
10
12
  error: 0,
11
13
  result: 1,
@@ -28,7 +30,8 @@ class CliIoHost {
28
30
  return CliIoHost._instance;
29
31
  }
30
32
  constructor(props = {}) {
31
- var _a, _b, _c, _d, _e;
33
+ var _a, _b, _c, _d, _e, _f;
34
+ this._progress = deploy_1.StackActivityProgress.BAR;
32
35
  // Corked Logging
33
36
  this.corkedCounter = 0;
34
37
  this.corkedLoggingBuffer = [];
@@ -36,6 +39,7 @@ class CliIoHost {
36
39
  this._isTTY = (_c = (_b = props.isTTY) !== null && _b !== void 0 ? _b : process.stdout.isTTY) !== null && _c !== void 0 ? _c : false;
37
40
  this._logLevel = (_d = props.logLevel) !== null && _d !== void 0 ? _d : 'info';
38
41
  this._isCI = (_e = props.isCI) !== null && _e !== void 0 ? _e : isCI();
42
+ this.stackProgress = (_f = props.stackProgress) !== null && _f !== void 0 ? _f : deploy_1.StackActivityProgress.BAR;
39
43
  }
40
44
  /**
41
45
  * Returns the singleton instance
@@ -45,6 +49,43 @@ class CliIoHost {
45
49
  this._internalIoHost = ioHost;
46
50
  }
47
51
  }
52
+ /**
53
+ * Update the stackProgress preference.
54
+ */
55
+ set stackProgress(type) {
56
+ this._progress = type;
57
+ }
58
+ /**
59
+ * Gets the stackProgress value.
60
+ *
61
+ * This takes into account other state of the ioHost,
62
+ * like if isTTY and isCI.
63
+ */
64
+ get stackProgress() {
65
+ // We can always use EVENTS
66
+ if (this._progress === deploy_1.StackActivityProgress.EVENTS) {
67
+ return this._progress;
68
+ }
69
+ // if log level is tracing or debug, we default to the full history printer
70
+ const verboseLogging = exports.levelPriority[this.logLevel] > exports.levelPriority.info;
71
+ if (verboseLogging) {
72
+ return deploy_1.StackActivityProgress.EVENTS;
73
+ }
74
+ // On Windows we cannot use fancy output
75
+ const isWindows = process.platform === 'win32';
76
+ if (isWindows) {
77
+ return deploy_1.StackActivityProgress.EVENTS;
78
+ }
79
+ // On some CI systems (such as CircleCI) output still reports as a TTY so we also
80
+ // need an individual check for whether we're running on CI.
81
+ // see: https://discuss.circleci.com/t/circleci-terminal-is-a-tty-but-term-is-not-set/9965
82
+ const fancyOutputAvailable = this.isTTY && !this.isCI;
83
+ if (!fancyOutputAvailable) {
84
+ return deploy_1.StackActivityProgress.EVENTS;
85
+ }
86
+ // Use the user preference
87
+ return this._progress;
88
+ }
48
89
  /**
49
90
  * The current action being performed by the CLI.
50
91
  */
@@ -132,6 +173,13 @@ class CliIoHost {
132
173
  if (this._internalIoHost) {
133
174
  return this._internalIoHost.notify(msg);
134
175
  }
176
+ if (this.isStackActivity(msg)) {
177
+ if (!this.activityPrinter) {
178
+ this.activityPrinter = this.makeActivityPrinter();
179
+ }
180
+ await this.activityPrinter.notify(msg);
181
+ return;
182
+ }
135
183
  if (exports.levelPriority[msg.level] > exports.levelPriority[this.logLevel]) {
136
184
  return;
137
185
  }
@@ -143,6 +191,16 @@ class CliIoHost {
143
191
  const stream = this.selectStream(msg.level);
144
192
  stream.write(output);
145
193
  }
194
+ /**
195
+ * Detect stack activity messages so they can be send to the printer.
196
+ */
197
+ isStackActivity(msg) {
198
+ return [
199
+ 'CDK_TOOLKIT_I5501',
200
+ 'CDK_TOOLKIT_I5502',
201
+ 'CDK_TOOLKIT_I5503',
202
+ ].includes(msg.code);
203
+ }
146
204
  /**
147
205
  * Determines the output stream, based on message level and configuration.
148
206
  */
@@ -235,6 +293,20 @@ class CliIoHost {
235
293
  const pad = (n) => n.toString().padStart(2, '0');
236
294
  return `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
237
295
  }
296
+ /**
297
+ * Get an instance of the ActivityPrinter
298
+ */
299
+ makeActivityPrinter() {
300
+ const props = {
301
+ stream: this.selectStream('info'),
302
+ };
303
+ switch (this.stackProgress) {
304
+ case deploy_1.StackActivityProgress.EVENTS:
305
+ return new activity_printer_1.HistoryActivityPrinter(props);
306
+ case deploy_1.StackActivityProgress.BAR:
307
+ return new activity_printer_1.CurrentActivityPrinter(props);
308
+ }
309
+ }
238
310
  }
239
311
  exports.CliIoHost = CliIoHost;
240
312
  /**
@@ -279,4 +351,4 @@ const styleMap = {
279
351
  function isCI() {
280
352
  return process.env.CI !== undefined && process.env.CI !== 'false' && process.env.CI !== '0';
281
353
  }
282
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLWlvLWhvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbGktaW8taG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF5ZEEsb0JBRUM7QUEzZEQsa0NBQWtDO0FBQ2xDLCtCQUErQjtBQUMvQixxQ0FBcUM7QUFDckMsbUNBQXVDO0FBaUUxQixRQUFBLGFBQWEsR0FBbUM7SUFDM0QsS0FBSyxFQUFFLENBQUM7SUFDUixNQUFNLEVBQUUsQ0FBQztJQUNULElBQUksRUFBRSxDQUFDO0lBQ1AsSUFBSSxFQUFFLENBQUM7SUFDUCxLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssRUFBRSxDQUFDO0NBQ1QsQ0FBQztBQXdGRjs7R0FFRztBQUNILE1BQWEsU0FBUztJQUNwQjs7T0FFRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBd0IsRUFBRSxFQUFFLFFBQVEsR0FBRyxLQUFLO1FBQzFELElBQUksUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBa0JELFlBQW9CLFFBQXdCLEVBQUU7O1FBSjlDLGlCQUFpQjtRQUNULGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ1Qsd0JBQW1CLEdBQXFCLEVBQUUsQ0FBQztRQUcxRCxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQUEsS0FBSyxDQUFDLGFBQWEsbUNBQUksTUFBdUIsQ0FBQztRQUNyRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQUEsTUFBQSxLQUFLLENBQUMsS0FBSyxtQ0FBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssbUNBQUksS0FBSyxDQUFDO1FBQzNELElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBQSxLQUFLLENBQUMsUUFBUSxtQ0FBSSxNQUFNLENBQUM7UUFDMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFBLEtBQUssQ0FBQyxJQUFJLG1DQUFJLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNJLGNBQWMsQ0FBQyxNQUFlO1FBQ25DLElBQUksTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBVyxhQUFhLENBQUMsTUFBcUI7UUFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBVyxLQUFLLENBQUMsS0FBYztRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsSUFBSSxDQUFDLEtBQWM7UUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxRQUFRLENBQUMsS0FBcUI7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsaUJBQWlCLENBQUksS0FBdUI7UUFDdkQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxLQUFLLEVBQUUsQ0FBQztRQUN2QixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM3QiwrQ0FBK0M7Z0JBQy9DLEtBQUssTUFBTSxTQUFTLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7b0JBQ2pELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDL0IsQ0FBQztnQkFDRCx3Q0FBd0M7Z0JBQ3hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLE1BQU0sQ0FBSSxHQUFpQjtRQUN0QyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLHFCQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLHFCQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDNUQsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZLENBQUMsS0FBcUI7UUFDeEMsNERBQTREO1FBQzVELEVBQUU7UUFDRix5REFBeUQ7UUFDekQseURBQXlEO1FBQ3pELGdEQUFnRDtRQUNoRCxzRUFBc0U7UUFDdEUsRUFBRTtRQUNGLFFBQVEsS0FBSyxFQUFFLENBQUM7WUFDZCxLQUFLLE9BQU87Z0JBQ1YsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3hCLEtBQUssUUFBUTtnQkFDWCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDeEI7Z0JBQ0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsZUFBZSxDQUF5QixHQUFzQztRQUN6Rix5REFBeUQ7UUFDekQsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQscUZBQXFGO1FBQ3JGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixPQUFPLEdBQUcsQ0FBQyxlQUFlLENBQUM7UUFDN0IsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssSUFBcUMsRUFBRTs7WUFDeEYsc0JBQXNCO1lBQ3RCLGdFQUFnRTtZQUNoRSxNQUFNLElBQUksR0FHTixNQUFBLEdBQUcsQ0FBQyxJQUFJLG1DQUFJLEVBQUUsQ0FBQztZQUVuQixNQUFNLFVBQVUsR0FBRyxNQUFBLElBQUksQ0FBQyxVQUFVLG1DQUFJLHNCQUFzQixDQUFDO1lBQzdELE1BQU0sV0FBVyxHQUFHLE1BQUEsSUFBSSxDQUFDLFdBQVcsbUNBQUksQ0FBQyxDQUFDO1lBRTFDLDZEQUE2RDtZQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoQixNQUFNLElBQUksb0JBQVksQ0FBQyxHQUFHLFVBQVUsMkZBQTJGLENBQUMsQ0FBQztZQUNuSSxDQUFDO1lBRUQsMERBQTBEO1lBQzFELElBQUksV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNwQixNQUFNLElBQUksb0JBQVksQ0FBQyxHQUFHLFVBQVUsMEZBQTBGLENBQUMsQ0FBQztZQUNsSSxDQUFDO1lBRUQsNEJBQTRCO1lBQzVCLHdFQUF3RTtZQUN4RSxJQUFJLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sU0FBUyxHQUFHLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDN0UsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNmLE1BQU0sSUFBSSxvQkFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQzVDLENBQUM7Z0JBQ0QsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUVELDhCQUE4QjtZQUM5QixNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QyxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ3JGLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTzthQUN4QixDQUFDLENBQUM7WUFDSCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFSCwyRUFBMkU7UUFDM0UsOEVBQThFO1FBQzlFLHFFQUFxRTtRQUNyRSxPQUFPLFFBQXdCLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssYUFBYSxDQUFDLEdBQW1CO1FBQ3ZDLCtEQUErRDtRQUMvRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTTtZQUM1QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBRWhCLDZFQUE2RTtRQUM3RSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLE9BQU8sSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQztZQUN0RCxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxZQUFZLEVBQUU7WUFDbEQsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxVQUFVLENBQUMsQ0FBTztRQUN4QixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQVMsRUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakUsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDOUUsQ0FBQztDQUNGO0FBblFELDhCQW1RQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLG1CQUFtQixDQUFDLEdBQXdCO0lBQ25ELE9BQU8sb0JBQW9CLENBQUMsR0FBRyxDQUFDO1dBQzNCLE9BQU8sR0FBRyxDQUFDLGVBQWUsS0FBSyxRQUFRO1dBQ3ZDLE9BQU8sR0FBRyxDQUFDLGVBQWUsS0FBSyxRQUFRLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsb0JBQW9CLENBQUMsR0FBd0I7SUFDcEQsT0FBTyxPQUFPLEdBQUcsQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDO0FBQ2xELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsaUJBQWlCLENBQUMsR0FBd0I7SUFJakQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxlQUFlLEtBQUssUUFBUSxDQUFDLENBQUM7SUFDM0QsT0FBTztRQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7UUFDekMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDOUQsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFFBQVEsR0FBb0Q7SUFDaEUsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHO0lBQ2hCLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTTtJQUNsQixNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUs7SUFDbkIsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLO0lBQ2pCLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSTtJQUNqQixLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUk7Q0FDbEIsQ0FBQztBQUVGOzs7R0FHRztBQUNILFNBQWdCLElBQUk7SUFDbEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQztBQUM5RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXRpbCBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgcHJvbXB0bHkgZnJvbSAncHJvbXB0bHknO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi9lcnJvcic7XG5cbmV4cG9ydCB0eXBlIElvTWVzc2FnZUNvZGVDYXRlZ29yeSA9ICdUT09MS0lUJyB8ICdTREsnIHwgJ0FTU0VUUyc7XG5leHBvcnQgdHlwZSBJb0NvZGVMZXZlbCA9ICdFJyB8ICdXJyB8ICdJJztcbmV4cG9ydCB0eXBlIElvTWVzc2FnZVNwZWNpZmljQ29kZTxMIGV4dGVuZHMgSW9Db2RlTGV2ZWw+ID0gYENES18ke0lvTWVzc2FnZUNvZGVDYXRlZ29yeX1fJHtMfSR7bnVtYmVyfSR7bnVtYmVyfSR7bnVtYmVyfSR7bnVtYmVyfWA7XG5leHBvcnQgdHlwZSBJb01lc3NhZ2VDb2RlID0gSW9NZXNzYWdlU3BlY2lmaWNDb2RlPElvQ29kZUxldmVsPjtcblxuLyoqXG4gKiBCYXNpYyBtZXNzYWdlIHN0cnVjdHVyZSBmb3IgdG9vbGtpdCBub3RpZmljYXRpb25zLlxuICogTWVzc2FnZXMgYXJlIGVtaXR0ZWQgYnkgdGhlIHRvb2xraXQgYW5kIGhhbmRsZWQgYnkgdGhlIElvSG9zdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJb01lc3NhZ2U8VD4ge1xuICAvKipcbiAgICogVGhlIHRpbWUgdGhlIG1lc3NhZ2Ugd2FzIGVtaXR0ZWQuXG4gICAqL1xuICByZWFkb25seSB0aW1lOiBEYXRlO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nIGxldmVsIG9mIHRoZSBtZXNzYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGV2ZWw6IElvTWVzc2FnZUxldmVsO1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoZSBtZXNzYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uOiBUb29sa2l0QWN0aW9uO1xuXG4gIC8qKlxuICAgKiBBIHNob3J0IG1lc3NhZ2UgY29kZSB1bmlxdWVseSBpZGVudGlmeWluZyBhIG1lc3NhZ2UgdHlwZSB1c2luZyB0aGUgZm9ybWF0IENES19bQ0FURUdPUlldX1tFL1cvSV1bMDAwLTk5OV0uXG4gICAqXG4gICAqIFRoZSBsZXZlbCBpbmRpY2F0b3IgZm9sbG93cyB0aGVzZSBydWxlczpcbiAgICogLSAnRScgZm9yIGVycm9yIGxldmVsIG1lc3NhZ2VzXG4gICAqIC0gJ1cnIGZvciB3YXJuaW5nIGxldmVsIG1lc3NhZ2VzXG4gICAqIC0gJ0knIGZvciBpbmZvL2RlYnVnL3RyYWNlIGxldmVsIG1lc3NhZ2VzXG4gICAqXG4gICAqIENvZGVzIGVuZGluZyBpbiAwMDAgYXJlIGdlbmVyaWMgbWVzc2FnZXMsIHdoaWxlIGNvZGVzIGVuZGluZyBpbiAwMDEtOTk5IGFyZSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgbWVzc2FnZS5cbiAgICogVGhlIGZvbGxvd2luZyBhcmUgZXhhbXBsZXMgb2YgdmFsaWQgYW5kIGludmFsaWQgbWVzc2FnZSBjb2RlczpcbiAgICogYGBgdHNcbiAgICogJ0NES19BU1NFVFNfSTAwMCcgICAgICAgLy8gdmFsaWQ6IGdlbmVyaWMgYXNzZXRzIGluZm8gbWVzc2FnZVxuICAgKiAnQ0RLX1RPT0xLSVRfRTAwMicgICAgICAvLyB2YWxpZDogc3BlY2lmaWMgdG9vbGtpdCBlcnJvciBtZXNzYWdlXG4gICAqICdDREtfU0RLX1cwMjMnICAgICAgICAgIC8vIHZhbGlkOiBzcGVjaWZpYyBzZGsgd2FybmluZyBtZXNzYWdlXG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgY29kZTogSW9NZXNzYWdlQ29kZTtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRhdGEgYXR0YWNoZWQgdG8gdGhlIG1lc3NhZ2UuXG4gICAqL1xuICByZWFkb25seSBkYXRhPzogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJb1JlcXVlc3Q8VCwgVT4gZXh0ZW5kcyBJb01lc3NhZ2U8VD4ge1xuICAvKipcbiAgICogVGhlIGRlZmF1bHQgcmVzcG9uc2UgdGhhdCB3aWxsIGJlIHVzZWQgaWYgbm8gZGF0YSBpcyByZXR1cm5lZC5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRSZXNwb25zZTogVTtcbn1cblxuZXhwb3J0IHR5cGUgSW9NZXNzYWdlTGV2ZWwgPSAnZXJyb3InIHwgJ3Jlc3VsdCcgfCAnd2FybicgfCAnaW5mbycgfCAnZGVidWcnIHwgJ3RyYWNlJztcblxuZXhwb3J0IGNvbnN0IGxldmVsUHJpb3JpdHk6IFJlY29yZDxJb01lc3NhZ2VMZXZlbCwgbnVtYmVyPiA9IHtcbiAgZXJyb3I6IDAsXG4gIHJlc3VsdDogMSxcbiAgd2FybjogMixcbiAgaW5mbzogMyxcbiAgZGVidWc6IDQsXG4gIHRyYWNlOiA1LFxufTtcblxuLyoqXG4gKiBUZW1wb3JhcnkgaGVscGVyIHRvIGdyb3VwIHJlcXVpcmVkIHByb3BzIGZvciBJb01lc3NhZ2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW9NZXNzYWdpbmcge1xuICBpb0hvc3Q6IElJb0hvc3Q7XG4gIGFjdGlvbjogVG9vbGtpdEFjdGlvbjtcbn1cblxuLyoqXG4gKiBUaGUgY3VycmVudCBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkIGJ5IHRoZSBDTEkuICdub25lJyByZXByZXNlbnRzIHRoZSBhYnNlbmNlIG9mIGFuIGFjdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgVG9vbGtpdEFjdGlvbiA9XG58ICdhc3NlbWJseSdcbnwgJ2Jvb3RzdHJhcCdcbnwgJ3N5bnRoJ1xufCAnbGlzdCdcbnwgJ2RpZmYnXG58ICdkZXBsb3knXG58ICdyb2xsYmFjaydcbnwgJ3dhdGNoJ1xufCAnZGVzdHJveSdcbnwgJ2NvbnRleHQnXG58ICdkb2NzJ1xufCAnZG9jdG9yJ1xufCAnZ2MnXG58ICdpbXBvcnQnXG58ICdtZXRhZGF0YSdcbnwgJ25vdGljZXMnXG58ICdpbml0J1xufCAnbWlncmF0ZSdcbnwgJ3ZlcnNpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIElJb0hvc3Qge1xuICAvKipcbiAgICogTm90aWZpZXMgdGhlIGhvc3Qgb2YgYSBtZXNzYWdlLlxuICAgKiBUaGUgY2FsbGVyIHdhaXRzIHVudGlsIHRoZSBub3RpZmljYXRpb24gY29tcGxldGVzLlxuICAgKi9cbiAgbm90aWZ5PFQ+KG1zZzogSW9NZXNzYWdlPFQ+KTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogTm90aWZpZXMgdGhlIGhvc3Qgb2YgYSBtZXNzYWdlIHRoYXQgcmVxdWlyZXMgYSByZXNwb25zZS5cbiAgICpcbiAgICogSWYgdGhlIGhvc3QgZG9lcyBub3QgcmV0dXJuIGEgcmVzcG9uc2UgdGhlIHN1Z2dlc3RlZFxuICAgKiBkZWZhdWx0IHJlc3BvbnNlIGZyb20gdGhlIGlucHV0IG1lc3NhZ2Ugd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgcmVxdWVzdFJlc3BvbnNlPFQsIFU+KG1zZzogSW9SZXF1ZXN0PFQsIFU+KTogUHJvbWlzZTxVPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGlJb0hvc3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCBUb29sa2l0IGFjdGlvbiB0aGUgaG9zdHMgc3RhcnRzIHdpdGguXG4gICAqXG4gICAqIEBkZWZhdWx0ICdub25lJ1xuICAgKi9cbiAgcmVhZG9ubHkgY3VycmVudEFjdGlvbj86IFRvb2xraXRBY3Rpb247XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIHZlcmJvc2l0eSBvZiB0aGUgb3V0cHV0LlxuICAgKlxuICAgKiBUaGUgQ2xpSW9Ib3N0IHdpbGwgc3RpbGwgcmVjZWl2ZSBhbGwgbWVzc2FnZXMgYW5kIHJlcXVlc3RzLFxuICAgKiBidXQgb25seSB0aGUgbWVzc2FnZXMgaW5jbHVkZWQgaW4gdGhpcyBsZXZlbCB3aWxsIGJlIHByaW50ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdpbmZvJ1xuICAgKi9cbiAgcmVhZG9ubHkgbG9nTGV2ZWw/OiBJb01lc3NhZ2VMZXZlbDtcblxuICAvKipcbiAgICogT3ZlcnJpZGVzIHRoZSBhdXRvbWF0aWMgVFRZIGRldGVjdGlvbi5cbiAgICpcbiAgICogV2hlbiBUVFkgaXMgZGlzYWJsZWQsIHRoZSBDTEkgd2lsbCBoYXZlIG5vIGludGVyYWN0aW9ucyBvciBjb2xvci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXRlcm1pbmVkIGZyb20gdGhlIGN1cnJlbnQgcHJvY2Vzc1xuICAgKi9cbiAgcmVhZG9ubHkgaXNUVFk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBDbGlJb0hvc3QgaXMgcnVubmluZyBpbiBDSSBtb2RlLlxuICAgKlxuICAgKiBJbiBDSSBtb2RlLCBhbGwgbm9uLWVycm9yIG91dHB1dCBnb2VzIHRvIHN0ZG91dCBpbnN0ZWFkIG9mIHN0ZGVyci5cbiAgICogU2V0IHRvIGZhbHNlIGluIHRoZSBDbGlJb0hvc3QgY29uc3RydWN0b3IgaXQgd2lsbCBiZSBvdmVyd3JpdHRlbiBpZiB0aGUgQ0xJIENJIGFyZ3VtZW50IGlzIHBhc3NlZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRldGVybWluZWQgZnJvbSB0aGUgZW52aXJvbm1lbnQsIHNwZWNpZmljYWxseSBiYXNlZCBvbiBgcHJvY2Vzcy5lbnYuQ0lgXG4gICAqL1xuICByZWFkb25seSBpc0NJPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIHNpbXBsZSBJTyBob3N0IGZvciB0aGUgQ0xJIHRoYXQgd3JpdGVzIG1lc3NhZ2VzIHRvIHRoZSBjb25zb2xlLlxuICovXG5leHBvcnQgY2xhc3MgQ2xpSW9Ib3N0IGltcGxlbWVudHMgSUlvSG9zdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBpbnN0YW5jZShwcm9wczogQ2xpSW9Ib3N0UHJvcHMgPSB7fSwgZm9yY2VOZXcgPSBmYWxzZSk6IENsaUlvSG9zdCB7XG4gICAgaWYgKGZvcmNlTmV3IHx8ICFDbGlJb0hvc3QuX2luc3RhbmNlKSB7XG4gICAgICBDbGlJb0hvc3QuX2luc3RhbmNlID0gbmV3IENsaUlvSG9zdChwcm9wcyk7XG4gICAgfVxuICAgIHJldHVybiBDbGlJb0hvc3QuX2luc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgQ2xpSW9Ib3N0XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IENsaUlvSG9zdCB8IHVuZGVmaW5lZDtcblxuICAvLyBpbnRlcm5hbCBzdGF0ZSBmb3IgZ2V0dGVycy9zZXR0ZXJcbiAgcHJpdmF0ZSBfY3VycmVudEFjdGlvbjogVG9vbGtpdEFjdGlvbjtcbiAgcHJpdmF0ZSBfaXNDSTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfaXNUVFk6IGJvb2xlYW47XG4gIHByaXZhdGUgX2xvZ0xldmVsOiBJb01lc3NhZ2VMZXZlbDtcbiAgcHJpdmF0ZSBfaW50ZXJuYWxJb0hvc3Q/OiBJSW9Ib3N0O1xuXG4gIC8vIENvcmtlZCBMb2dnaW5nXG4gIHByaXZhdGUgY29ya2VkQ291bnRlciA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29ya2VkTG9nZ2luZ0J1ZmZlcjogSW9NZXNzYWdlPGFueT5bXSA9IFtdO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJvcHM6IENsaUlvSG9zdFByb3BzID0ge30pIHtcbiAgICB0aGlzLl9jdXJyZW50QWN0aW9uID0gcHJvcHMuY3VycmVudEFjdGlvbiA/PyAnbm9uZScgYXMgVG9vbGtpdEFjdGlvbjtcbiAgICB0aGlzLl9pc1RUWSA9IHByb3BzLmlzVFRZID8/IHByb2Nlc3Muc3Rkb3V0LmlzVFRZID8/IGZhbHNlO1xuICAgIHRoaXMuX2xvZ0xldmVsID0gcHJvcHMubG9nTGV2ZWwgPz8gJ2luZm8nO1xuICAgIHRoaXMuX2lzQ0kgPSBwcm9wcy5pc0NJID8/IGlzQ0koKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyByZWdpc3RlcklvSG9zdChpb0hvc3Q6IElJb0hvc3QpIHtcbiAgICBpZiAoaW9Ib3N0ICE9PSB0aGlzKSB7XG4gICAgICB0aGlzLl9pbnRlcm5hbElvSG9zdCA9IGlvSG9zdDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZCBieSB0aGUgQ0xJLlxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50QWN0aW9uKCk6IFRvb2xraXRBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50QWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGN1cnJlbnQgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZCBieSB0aGUgQ0xJLlxuICAgKlxuICAgKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkIGJ5IHRoZSBDTEkuXG4gICAqL1xuICBwdWJsaWMgc2V0IGN1cnJlbnRBY3Rpb24oYWN0aW9uOiBUb29sa2l0QWN0aW9uKSB7XG4gICAgdGhpcy5fY3VycmVudEFjdGlvbiA9IGFjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBob3N0IGNhbiB1c2UgaW50ZXJhY3Rpb25zIGFuZCBtZXNzYWdlIHN0eWxpbmcuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzVFRZKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1RUWTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgVFRZIG1vZGUsIGkuZSBjYW4gdGhlIGhvc3QgdXNlIGludGVyYWN0aW9ucyBhbmQgbWVzc2FnZSBzdHlsaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgc2V0IFRUWSBtb2RlXG4gICAqL1xuICBwdWJsaWMgc2V0IGlzVFRZKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNUVFkgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBDbGlJb0hvc3QgaXMgcnVubmluZyBpbiBDSSBtb2RlLiBJbiBDSSBtb2RlLCBhbGwgbm9uLWVycm9yIG91dHB1dCBnb2VzIHRvIHN0ZG91dCBpbnN0ZWFkIG9mIHN0ZGVyci5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNDSSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNDSTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIENJIG1vZGUuIEluIENJIG1vZGUsIGFsbCBub24tZXJyb3Igb3V0cHV0IGdvZXMgdG8gc3Rkb3V0IGluc3RlYWQgb2Ygc3RkZXJyLlxuICAgKiBAcGFyYW0gdmFsdWUgc2V0IHRoZSBDSSBtb2RlXG4gICAqL1xuICBwdWJsaWMgc2V0IGlzQ0kodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc0NJID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgdGhyZXNob2xkLiBNZXNzYWdlcyB3aXRoIGEgbG93ZXIgcHJpb3JpdHkgbGV2ZWwgd2lsbCBiZSBpZ25vcmVkLlxuICAgKi9cbiAgcHVibGljIGdldCBsb2dMZXZlbCgpOiBJb01lc3NhZ2VMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ0xldmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGN1cnJlbnQgdGhyZXNob2xkLiBNZXNzYWdlcyB3aXRoIGEgbG93ZXIgcHJpb3JpdHkgbGV2ZWwgd2lsbCBiZSBpZ25vcmVkLlxuICAgKiBAcGFyYW0gbGV2ZWwgVGhlIG5ldyBsb2cgbGV2ZWwgdGhyZXNob2xkXG4gICAqL1xuICBwdWJsaWMgc2V0IGxvZ0xldmVsKGxldmVsOiBJb01lc3NhZ2VMZXZlbCkge1xuICAgIHRoaXMuX2xvZ0xldmVsID0gbGV2ZWw7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSBibG9jayBvZiBjb2RlIHdpdGggY29ya2VkIGxvZ2dpbmcuIEFsbCBsb2cgbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvblxuICAgKiBhcmUgYnVmZmVyZWQgYW5kIG9ubHkgd3JpdHRlbiB3aGVuIGFsbCBuZXN0ZWQgY29yayBibG9ja3MgY29tcGxldGUgKHdoZW4gQ09SS19DT1VOVEVSIHJlYWNoZXMgMCkuXG4gICAqIFRoZSBjb3JraW5nIGlzIGJvdW5kIHRvIHRoZSBzcGVjaWZpYyBpbnN0YW5jZSBvZiB0aGUgQ2xpSW9Ib3N0LlxuICAgKlxuICAgKiBAcGFyYW0gYmxvY2sgLSBBc3luYyBmdW5jdGlvbiB0byBleGVjdXRlIHdpdGggY29ya2VkIGxvZ2dpbmdcbiAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGJsb2NrJ3MgcmV0dXJuIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgd2l0aENvcmtlZExvZ2dpbmc8VD4oYmxvY2s6ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICB0aGlzLmNvcmtlZENvdW50ZXIrKztcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGJsb2NrKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuY29ya2VkQ291bnRlci0tO1xuICAgICAgaWYgKHRoaXMuY29ya2VkQ291bnRlciA9PT0gMCkge1xuICAgICAgICAvLyBQcm9jZXNzIGVhY2ggYnVmZmVyZWQgbWVzc2FnZSB0aHJvdWdoIG5vdGlmeVxuICAgICAgICBmb3IgKGNvbnN0IGlvTWVzc2FnZSBvZiB0aGlzLmNvcmtlZExvZ2dpbmdCdWZmZXIpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLm5vdGlmeShpb01lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlbW92ZSBhbGwgYnVmZmVyZWQgbWVzc2FnZXMgaW4tcGxhY2VcbiAgICAgICAgdGhpcy5jb3JrZWRMb2dnaW5nQnVmZmVyLnNwbGljZSgwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhlIGhvc3Qgb2YgYSBtZXNzYWdlLlxuICAgKiBUaGUgY2FsbGVyIHdhaXRzIHVudGlsIHRoZSBub3RpZmljYXRpb24gY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG5vdGlmeTxUPihtc2c6IElvTWVzc2FnZTxUPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9pbnRlcm5hbElvSG9zdCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ludGVybmFsSW9Ib3N0Lm5vdGlmeShtc2cpO1xuICAgIH1cblxuICAgIGlmIChsZXZlbFByaW9yaXR5W21zZy5sZXZlbF0gPiBsZXZlbFByaW9yaXR5W3RoaXMubG9nTGV2ZWxdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29ya2VkQ291bnRlciA+IDApIHtcbiAgICAgIHRoaXMuY29ya2VkTG9nZ2luZ0J1ZmZlci5wdXNoKG1zZyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5mb3JtYXRNZXNzYWdlKG1zZyk7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zZWxlY3RTdHJlYW0obXNnLmxldmVsKTtcbiAgICBzdHJlYW0ud3JpdGUob3V0cHV0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBvdXRwdXQgc3RyZWFtLCBiYXNlZCBvbiBtZXNzYWdlIGxldmVsIGFuZCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBzZWxlY3RTdHJlYW0obGV2ZWw6IElvTWVzc2FnZUxldmVsKSB7XG4gICAgLy8gVGhlIHN0cmVhbSBzZWxlY3Rpb24gcG9saWN5IGZvciB0aGUgQ0xJIGlzIHRoZSBmb2xsb3dpbmc6XG4gICAgLy9cbiAgICAvLyAgICgxKSBNZXNzYWdlcyBvZiBsZXZlbCBgcmVzdWx0YCBhbHdheXMgZ28gdG8gYHN0ZG91dGBcbiAgICAvLyAgICgyKSBNZXNzYWdlcyBvZiBsZXZlbCBgZXJyb3JgIGFsd2F5cyBnbyB0byBgc3RkZXJyYC5cbiAgICAvLyAgICgzYSkgQWxsIHJlbWFpbmluZyBtZXNzYWdlcyBnbyB0byBgc3RkZXJyYC5cbiAgICAvLyAgICgzYikgSWYgd2UgYXJlIGluIENJIG1vZGUsIGFsbCByZW1haW5pbmcgbWVzc2FnZXMgZ28gdG8gYHN0ZG91dGAuXG4gICAgLy9cbiAgICBzd2l0Y2ggKGxldmVsKSB7XG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHJldHVybiBwcm9jZXNzLnN0ZGVycjtcbiAgICAgIGNhc2UgJ3Jlc3VsdCc6XG4gICAgICAgIHJldHVybiBwcm9jZXNzLnN0ZG91dDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ0kgPyBwcm9jZXNzLnN0ZG91dCA6IHByb2Nlc3Muc3RkZXJyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZmllcyB0aGUgaG9zdCBvZiBhIG1lc3NhZ2UgdGhhdCByZXF1aXJlcyBhIHJlc3BvbnNlLlxuICAgKlxuICAgKiBJZiB0aGUgaG9zdCBkb2VzIG5vdCByZXR1cm4gYSByZXNwb25zZSB0aGUgc3VnZ2VzdGVkXG4gICAqIGRlZmF1bHQgcmVzcG9uc2UgZnJvbSB0aGUgaW5wdXQgbWVzc2FnZSB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVxdWVzdFJlc3BvbnNlPERhdGFUeXBlLCBSZXNwb25zZVR5cGU+KG1zZzogSW9SZXF1ZXN0PERhdGFUeXBlLCBSZXNwb25zZVR5cGU+KTogUHJvbWlzZTxSZXNwb25zZVR5cGU+IHtcbiAgICAvLyBGaXJzdCBjYWxsIG91dCB0byBhIHJlZ2lzdGVyZWQgaW5zdGFuY2UgaWYgd2UgaGF2ZSBvbmVcbiAgICBpZiAodGhpcy5faW50ZXJuYWxJb0hvc3QpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbElvSG9zdC5yZXF1ZXN0UmVzcG9uc2UobXNnKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgcmVxdWVzdCBjYW5ub3QgYmUgcHJvbXB0ZWQgZm9yIGJ5IHRoZSBDbGlJb0hvc3QsIHdlIGp1c3QgYWNjZXB0IHRoZSBkZWZhdWx0XG4gICAgaWYgKCFpc1Byb21wdGFibGVSZXF1ZXN0KG1zZykpIHtcbiAgICAgIGF3YWl0IHRoaXMubm90aWZ5KG1zZyk7XG4gICAgICByZXR1cm4gbXNnLmRlZmF1bHRSZXNwb25zZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMud2l0aENvcmtlZExvZ2dpbmcoYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nIHwgbnVtYmVyIHwgdHJ1ZT4gPT4ge1xuICAgICAgLy8gcHJlcGFyZSBwcm9tcHQgZGF0YVxuICAgICAgLy8gQHRvZG8gdGhpcyBmb3JtYXQgaXMgbm90IGRlZmluZWQgYW55d2hlcmUsIHByb2JhYmx5IHNob3VsZCBiZVxuICAgICAgY29uc3QgZGF0YToge1xuICAgICAgICBtb3RpdmF0aW9uPzogc3RyaW5nO1xuICAgICAgICBjb25jdXJyZW5jeT86IG51bWJlcjtcbiAgICAgIH0gPSBtc2cuZGF0YSA/PyB7fTtcblxuICAgICAgY29uc3QgbW90aXZhdGlvbiA9IGRhdGEubW90aXZhdGlvbiA/PyAnVXNlciBpbnB1dCBpcyBuZWVkZWQnO1xuICAgICAgY29uc3QgY29uY3VycmVuY3kgPSBkYXRhLmNvbmN1cnJlbmN5ID8/IDA7XG5cbiAgICAgIC8vIG9ubHkgdGFsayB0byB1c2VyIGlmIFNURElOIGlzIGEgdGVybWluYWwgKG90aGVyd2lzZSwgZmFpbClcbiAgICAgIGlmICghdGhpcy5pc1RUWSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGAke21vdGl2YXRpb259LCBidXQgdGVybWluYWwgKFRUWSkgaXMgbm90IGF0dGFjaGVkIHNvIHdlIGFyZSB1bmFibGUgdG8gZ2V0IGEgY29uZmlybWF0aW9uIGZyb20gdGhlIHVzZXJgKTtcbiAgICAgIH1cblxuICAgICAgLy8gb25seSB0YWxrIHRvIHVzZXIgaWYgY29uY3VycmVuY3kgaXMgMSAob3RoZXJ3aXNlLCBmYWlsKVxuICAgICAgaWYgKGNvbmN1cnJlbmN5ID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGAke21vdGl2YXRpb259LCBidXQgY29uY3VycmVuY3kgaXMgZ3JlYXRlciB0aGFuIDEgc28gd2UgYXJlIHVuYWJsZSB0byBnZXQgYSBjb25maXJtYXRpb24gZnJvbSB0aGUgdXNlcmApO1xuICAgICAgfVxuXG4gICAgICAvLyBCYXNpYyBjb25maXJtYXRpb24gcHJvbXB0XG4gICAgICAvLyBXZSB0cmVhdCBhbGwgcmVxdWVzdHMgd2l0aCBhIGJvb2xlYW4gcmVzcG9uc2UgYXMgY29uZmlybWF0aW9uIHByb21wdHNcbiAgICAgIGlmIChpc0NvbmZpcm1hdGlvblByb21wdChtc2cpKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHByb21wdGx5LmNvbmZpcm0oYCR7Y2hhbGsuY3lhbihtc2cubWVzc2FnZSl9ICh5L24pYCk7XG4gICAgICAgIGlmICghY29uZmlybWVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignQWJvcnRlZCBieSB1c2VyJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbmZpcm1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQXNraW5nIGZvciBhIHNwZWNpZmljIHZhbHVlXG4gICAgICBjb25zdCBwcm9tcHQgPSBleHRyYWN0UHJvbXB0SW5mbyhtc2cpO1xuICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgcHJvbXB0bHkucHJvbXB0KGAke2NoYWxrLmN5YW4obXNnLm1lc3NhZ2UpfSAoJHtwcm9tcHQuZGVmYXVsdH0pYCwge1xuICAgICAgICBkZWZhdWx0OiBwcm9tcHQuZGVmYXVsdCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHByb21wdC5jb252ZXJ0QW5zd2VyKGFuc3dlcik7XG4gICAgfSk7XG5cbiAgICAvLyBXZSBuZWVkIHRvIGNhc3QgdGhpcyBiZWNhdXNlIGl0IGlzIGltcG9zc2libGUgdG8gbmFycm93IHRoZSBnZW5lcmljIHR5cGVcbiAgICAvLyBpc1Byb21wdGFibGVSZXF1ZXN0IGVuc3VyZXMgdGhhdCB0aGUgcmVzcG9uc2UgdHlwZSBpcyBvbmUgd2UgY2FuIHByb21wdCBmb3JcbiAgICAvLyB0aGUgcmVtYWluaW5nIGNvZGUgZW5zdXJlIHdlIGFyZSBpbmRlZWQgcmV0dXJuaW5nIHRoZSBjb3JyZWN0IHR5cGVcbiAgICByZXR1cm4gcmVzcG9uc2UgYXMgUmVzcG9uc2VUeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBtZXNzYWdlIGZvciBjb25zb2xlIG91dHB1dCB3aXRoIG9wdGlvbmFsIGNvbG9yIHN1cHBvcnRcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0TWVzc2FnZShtc2c6IElvTWVzc2FnZTxhbnk+KTogc3RyaW5nIHtcbiAgICAvLyBhcHBseSBwcm92aWRlZCBzdHlsZSBvciBhIGRlZmF1bHQgc3R5bGUgaWYgd2UncmUgaW4gVFRZIG1vZGVcbiAgICBsZXQgbWVzc2FnZV90ZXh0ID0gdGhpcy5faXNUVFlcbiAgICAgID8gc3R5bGVNYXBbbXNnLmxldmVsXShtc2cubWVzc2FnZSlcbiAgICAgIDogbXNnLm1lc3NhZ2U7XG5cbiAgICAvLyBwcmVwZW5kIHRpbWVzdGFtcCBpZiBJb01lc3NhZ2VMZXZlbCBpcyBERUJVRyBvciBUUkFDRS4gUG9zdHBlbmQgYSBuZXdsaW5lLlxuICAgIHJldHVybiAoKG1zZy5sZXZlbCA9PT0gJ2RlYnVnJyB8fCBtc2cubGV2ZWwgPT09ICd0cmFjZScpXG4gICAgICA/IGBbJHt0aGlzLmZvcm1hdFRpbWUobXNnLnRpbWUpfV0gJHttZXNzYWdlX3RleHR9YFxuICAgICAgOiBtZXNzYWdlX3RleHQpICsgJ1xcbic7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0cyBkYXRlIHRvIEhIOk1NOlNTXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdFRpbWUoZDogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFkID0gKG46IG51bWJlcik6IHN0cmluZyA9PiBuLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICByZXR1cm4gYCR7cGFkKGQuZ2V0SG91cnMoKSl9OiR7cGFkKGQuZ2V0TWludXRlcygpKX06JHtwYWQoZC5nZXRTZWNvbmRzKCkpfWA7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIElvSG9zdCBpbXBsZW1lbnRhdGlvbiBjb25zaWRlcnMgYSByZXF1ZXN0IHByb21wdGFibGUsIGlmOlxuICogLSBpdCdzIGEgeWVzL25vIGNvbmZpcm1hdGlvblxuICogLSBhc2tpbmcgZm9yIGEgc3RyaW5nIG9yIG51bWJlciB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc1Byb21wdGFibGVSZXF1ZXN0KG1zZzogSW9SZXF1ZXN0PGFueSwgYW55Pik6IG1zZyBpcyBJb1JlcXVlc3Q8YW55LCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiB7XG4gIHJldHVybiBpc0NvbmZpcm1hdGlvblByb21wdChtc2cpXG4gICAgfHwgdHlwZW9mIG1zZy5kZWZhdWx0UmVzcG9uc2UgPT09ICdzdHJpbmcnXG4gICAgfHwgdHlwZW9mIG1zZy5kZWZhdWx0UmVzcG9uc2UgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSByZXF1ZXN0IGlzIGEgY29uZmlybWF0aW9uIHByb21wdFxuICogV2UgdHJlYXQgYWxsIHJlcXVlc3RzIHdpdGggYSBib29sZWFuIHJlc3BvbnNlIGFzIGNvbmZpcm1hdGlvbiBwcm9tcHRzXG4gKi9cbmZ1bmN0aW9uIGlzQ29uZmlybWF0aW9uUHJvbXB0KG1zZzogSW9SZXF1ZXN0PGFueSwgYW55Pik6IG1zZyBpcyBJb1JlcXVlc3Q8YW55LCBib29sZWFuPiB7XG4gIHJldHVybiB0eXBlb2YgbXNnLmRlZmF1bHRSZXNwb25zZSA9PT0gJ2Jvb2xlYW4nO1xufVxuXG4vKipcbiAqIEhlbHBlciB0byBleHRyYWN0IGluZm9ybWF0aW9uIGZvciBwcm9tcHRseSBmcm9tIHRoZSByZXF1ZXN0XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RQcm9tcHRJbmZvKG1zZzogSW9SZXF1ZXN0PGFueSwgYW55Pik6IHtcbiAgZGVmYXVsdDogc3RyaW5nO1xuICBjb252ZXJ0QW5zd2VyOiAoaW5wdXQ6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVtYmVyO1xufSB7XG4gIGNvbnN0IGlzTnVtYmVyID0gKHR5cGVvZiBtc2cuZGVmYXVsdFJlc3BvbnNlID09PSAnbnVtYmVyJyk7XG4gIHJldHVybiB7XG4gICAgZGVmYXVsdDogdXRpbC5mb3JtYXQobXNnLmRlZmF1bHRSZXNwb25zZSksXG4gICAgY29udmVydEFuc3dlcjogaXNOdW1iZXIgPyAodikgPT4gTnVtYmVyKHYpIDogKHYpID0+IFN0cmluZyh2KSxcbiAgfTtcbn1cblxuY29uc3Qgc3R5bGVNYXA6IFJlY29yZDxJb01lc3NhZ2VMZXZlbCwgKHN0cjogc3RyaW5nKSA9PiBzdHJpbmc+ID0ge1xuICBlcnJvcjogY2hhbGsucmVkLFxuICB3YXJuOiBjaGFsay55ZWxsb3csXG4gIHJlc3VsdDogY2hhbGsud2hpdGUsXG4gIGluZm86IGNoYWxrLndoaXRlLFxuICBkZWJ1ZzogY2hhbGsuZ3JheSxcbiAgdHJhY2U6IGNoYWxrLmdyYXksXG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBwcm9jZXNzIGlzIHJ1bm5pbmcgaW4gYSBDSSBlbnZpcm9ubWVudFxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBwcm9jZXNzIGlzIHJ1bm5pbmcgaW4gYSBDSSBlbnZpcm9ubWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDSSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52LkNJICE9PSB1bmRlZmluZWQgJiYgcHJvY2Vzcy5lbnYuQ0kgIT09ICdmYWxzZScgJiYgcHJvY2Vzcy5lbnYuQ0kgIT09ICcwJztcbn1cbiJdfQ==
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLWlvLWhvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbGktaW8taG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFzakJBLG9CQUVDO0FBeGpCRCxrQ0FBa0M7QUFDbEMsK0JBQStCO0FBQy9CLHFDQUFxQztBQUNyQyxtQ0FBdUM7QUFDdkMsOERBQWlJO0FBQ2pJLCtDQUEyRDtBQWlFOUMsUUFBQSxhQUFhLEdBQW1DO0lBQzNELEtBQUssRUFBRSxDQUFDO0lBQ1IsTUFBTSxFQUFFLENBQUM7SUFDVCxJQUFJLEVBQUUsQ0FBQztJQUNQLElBQUksRUFBRSxDQUFDO0lBQ1AsS0FBSyxFQUFFLENBQUM7SUFDUixLQUFLLEVBQUUsQ0FBQztDQUNULENBQUM7QUErRkY7O0dBRUc7QUFDSCxNQUFhLFNBQVM7SUFDcEI7O09BRUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQXdCLEVBQUUsRUFBRSxRQUFRLEdBQUcsS0FBSztRQUMxRCxJQUFJLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQyxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQXNCRCxZQUFvQixRQUF3QixFQUFFOztRQVR0QyxjQUFTLEdBQTBCLDhCQUFxQixDQUFDLEdBQUcsQ0FBQztRQUtyRSxpQkFBaUI7UUFDVCxrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNULHdCQUFtQixHQUFxQixFQUFFLENBQUM7UUFHMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFBLEtBQUssQ0FBQyxhQUFhLG1DQUFJLE1BQXVCLENBQUM7UUFDckUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssbUNBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLG1DQUFJLEtBQUssQ0FBQztR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QUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQztRQUN6QyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUM5RCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sUUFBUSxHQUFvRDtJQUNoRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUc7SUFDaEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNO0lBQ2xCLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSztJQUNuQixJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUs7SUFDakIsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJO0lBQ2pCLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSTtDQUNsQixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsU0FBZ0IsSUFBSTtJQUNsQixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDO0FBQzlGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dGlsIGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyBwcm9tcHRseSBmcm9tICdwcm9tcHRseSc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuL2Vycm9yJztcbmltcG9ydCB7IEFjdGl2aXR5UHJpbnRlclByb3BzLCBDdXJyZW50QWN0aXZpdHlQcmludGVyLCBIaXN0b3J5QWN0aXZpdHlQcmludGVyLCBJQWN0aXZpdHlQcmludGVyIH0gZnJvbSAnLi4vY2xpL2FjdGl2aXR5LXByaW50ZXInO1xuaW1wb3J0IHsgU3RhY2tBY3Rpdml0eVByb2dyZXNzIH0gZnJvbSAnLi4vY29tbWFuZHMvZGVwbG95JztcblxuZXhwb3J0IHR5cGUgSW9NZXNzYWdlQ29kZUNhdGVnb3J5ID0gJ1RPT0xLSVQnIHwgJ1NESycgfCAnQVNTRVRTJztcbmV4cG9ydCB0eXBlIElvQ29kZUxldmVsID0gJ0UnIHwgJ1cnIHwgJ0knO1xuZXhwb3J0IHR5cGUgSW9NZXNzYWdlU3BlY2lmaWNDb2RlPEwgZXh0ZW5kcyBJb0NvZGVMZXZlbD4gPSBgQ0RLXyR7SW9NZXNzYWdlQ29kZUNhdGVnb3J5fV8ke0x9JHtudW1iZXJ9JHtudW1iZXJ9JHtudW1iZXJ9JHtudW1iZXJ9YDtcbmV4cG9ydCB0eXBlIElvTWVzc2FnZUNvZGUgPSBJb01lc3NhZ2VTcGVjaWZpY0NvZGU8SW9Db2RlTGV2ZWw+O1xuXG4vKipcbiAqIEJhc2ljIG1lc3NhZ2Ugc3RydWN0dXJlIGZvciB0b29sa2l0IG5vdGlmaWNhdGlvbnMuXG4gKiBNZXNzYWdlcyBhcmUgZW1pdHRlZCBieSB0aGUgdG9vbGtpdCBhbmQgaGFuZGxlZCBieSB0aGUgSW9Ib3N0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElvTWVzc2FnZTxUPiB7XG4gIC8qKlxuICAgKiBUaGUgdGltZSB0aGUgbWVzc2FnZSB3YXMgZW1pdHRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHRpbWU6IERhdGU7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2cgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UuXG4gICAqL1xuICByZWFkb25seSBsZXZlbDogSW9NZXNzYWdlTGV2ZWw7XG5cbiAgLyoqXG4gICAqIFRoZSBhY3Rpb24gdGhhdCB0cmlnZ2VyZWQgdGhlIG1lc3NhZ2UuXG4gICAqL1xuICByZWFkb25seSBhY3Rpb246IFRvb2xraXRBY3Rpb247XG5cbiAgLyoqXG4gICAqIEEgc2hvcnQgbWVzc2FnZSBjb2RlIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGEgbWVzc2FnZSB0eXBlIHVzaW5nIHRoZSBmb3JtYXQgQ0RLX1tDQVRFR09SWV1fW0UvVy9JXVswMDAtOTk5XS5cbiAgICpcbiAgICogVGhlIGxldmVsIGluZGljYXRvciBmb2xsb3dzIHRoZXNlIHJ1bGVzOlxuICAgKiAtICdFJyBmb3IgZXJyb3IgbGV2ZWwgbWVzc2FnZXNcbiAgICogLSAnVycgZm9yIHdhcm5pbmcgbGV2ZWwgbWVzc2FnZXNcbiAgICogLSAnSScgZm9yIGluZm8vZGVidWcvdHJhY2UgbGV2ZWwgbWVzc2FnZXNcbiAgICpcbiAgICogQ29kZXMgZW5kaW5nIGluIDAwMCBhcmUgZ2VuZXJpYyBtZXNzYWdlcywgd2hpbGUgY29kZXMgZW5kaW5nIGluIDAwMS05OTkgYXJlIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBtZXNzYWdlLlxuICAgKiBUaGUgZm9sbG93aW5nIGFyZSBleGFtcGxlcyBvZiB2YWxpZCBhbmQgaW52YWxpZCBtZXNzYWdlIGNvZGVzOlxuICAgKiBgYGB0c1xuICAgKiAnQ0RLX0FTU0VUU19JMDAwJyAgICAgICAvLyB2YWxpZDogZ2VuZXJpYyBhc3NldHMgaW5mbyBtZXNzYWdlXG4gICAqICdDREtfVE9PTEtJVF9FMDAyJyAgICAgIC8vIHZhbGlkOiBzcGVjaWZpYyB0b29sa2l0IGVycm9yIG1lc3NhZ2VcbiAgICogJ0NES19TREtfVzAyMycgICAgICAgICAgLy8gdmFsaWQ6IHNwZWNpZmljIHNkayB3YXJuaW5nIG1lc3NhZ2VcbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSBjb2RlOiBJb01lc3NhZ2VDb2RlO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0YSBhdHRhY2hlZCB0byB0aGUgbWVzc2FnZS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGE/OiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElvUmVxdWVzdDxULCBVPiBleHRlbmRzIElvTWVzc2FnZTxUPiB7XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCByZXNwb25zZSB0aGF0IHdpbGwgYmUgdXNlZCBpZiBubyBkYXRhIGlzIHJldHVybmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFJlc3BvbnNlOiBVO1xufVxuXG5leHBvcnQgdHlwZSBJb01lc3NhZ2VMZXZlbCA9ICdlcnJvcicgfCAncmVzdWx0JyB8ICd3YXJuJyB8ICdpbmZvJyB8ICdkZWJ1ZycgfCAndHJhY2UnO1xuXG5leHBvcnQgY29uc3QgbGV2ZWxQcmlvcml0eTogUmVjb3JkPElvTWVzc2FnZUxldmVsLCBudW1iZXI+ID0ge1xuICBlcnJvcjogMCxcbiAgcmVzdWx0OiAxLFxuICB3YXJuOiAyLFxuICBpbmZvOiAzLFxuICBkZWJ1ZzogNCxcbiAgdHJhY2U6IDUsXG59O1xuXG4vKipcbiAqIFRlbXBvcmFyeSBoZWxwZXIgdG8gZ3JvdXAgcmVxdWlyZWQgcHJvcHMgZm9yIElvTWVzc2FnZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJb01lc3NhZ2luZyB7XG4gIGlvSG9zdDogSUlvSG9zdDtcbiAgYWN0aW9uOiBUb29sa2l0QWN0aW9uO1xufVxuXG4vKipcbiAqIFRoZSBjdXJyZW50IGFjdGlvbiBiZWluZyBwZXJmb3JtZWQgYnkgdGhlIENMSS4gJ25vbmUnIHJlcHJlc2VudHMgdGhlIGFic2VuY2Ugb2YgYW4gYWN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBUb29sa2l0QWN0aW9uID1cbnwgJ2Fzc2VtYmx5J1xufCAnYm9vdHN0cmFwJ1xufCAnc3ludGgnXG58ICdsaXN0J1xufCAnZGlmZidcbnwgJ2RlcGxveSdcbnwgJ3JvbGxiYWNrJ1xufCAnd2F0Y2gnXG58ICdkZXN0cm95J1xufCAnY29udGV4dCdcbnwgJ2RvY3MnXG58ICdkb2N0b3InXG58ICdnYydcbnwgJ2ltcG9ydCdcbnwgJ21ldGFkYXRhJ1xufCAnbm90aWNlcydcbnwgJ2luaXQnXG58ICdtaWdyYXRlJ1xufCAndmVyc2lvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUlvSG9zdCB7XG4gIC8qKlxuICAgKiBOb3RpZmllcyB0aGUgaG9zdCBvZiBhIG1lc3NhZ2UuXG4gICAqIFRoZSBjYWxsZXIgd2FpdHMgdW50aWwgdGhlIG5vdGlmaWNhdGlvbiBjb21wbGV0ZXMuXG4gICAqL1xuICBub3RpZnk8VD4obXNnOiBJb01lc3NhZ2U8VD4pOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBOb3RpZmllcyB0aGUgaG9zdCBvZiBhIG1lc3NhZ2UgdGhhdCByZXF1aXJlcyBhIHJlc3BvbnNlLlxuICAgKlxuICAgKiBJZiB0aGUgaG9zdCBkb2VzIG5vdCByZXR1cm4gYSByZXNwb25zZSB0aGUgc3VnZ2VzdGVkXG4gICAqIGRlZmF1bHQgcmVzcG9uc2UgZnJvbSB0aGUgaW5wdXQgbWVzc2FnZSB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZXF1ZXN0UmVzcG9uc2U8VCwgVT4obXNnOiBJb1JlcXVlc3Q8VCwgVT4pOiBQcm9taXNlPFU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsaUlvSG9zdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIFRvb2xraXQgYWN0aW9uIHRoZSBob3N0cyBzdGFydHMgd2l0aC5cbiAgICpcbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICByZWFkb25seSBjdXJyZW50QWN0aW9uPzogVG9vbGtpdEFjdGlvbjtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgdmVyYm9zaXR5IG9mIHRoZSBvdXRwdXQuXG4gICAqXG4gICAqIFRoZSBDbGlJb0hvc3Qgd2lsbCBzdGlsbCByZWNlaXZlIGFsbCBtZXNzYWdlcyBhbmQgcmVxdWVzdHMsXG4gICAqIGJ1dCBvbmx5IHRoZSBtZXNzYWdlcyBpbmNsdWRlZCBpbiB0aGlzIGxldmVsIHdpbGwgYmUgcHJpbnRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgJ2luZm8nXG4gICAqL1xuICByZWFkb25seSBsb2dMZXZlbD86IElvTWVzc2FnZUxldmVsO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgdGhlIGF1dG9tYXRpYyBUVFkgZGV0ZWN0aW9uLlxuICAgKlxuICAgKiBXaGVuIFRUWSBpcyBkaXNhYmxlZCwgdGhlIENMSSB3aWxsIGhhdmUgbm8gaW50ZXJhY3Rpb25zIG9yIGNvbG9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRldGVybWluZWQgZnJvbSB0aGUgY3VycmVudCBwcm9jZXNzXG4gICAqL1xuICByZWFkb25seSBpc1RUWT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIENsaUlvSG9zdCBpcyBydW5uaW5nIGluIENJIG1vZGUuXG4gICAqXG4gICAqIEluIENJIG1vZGUsIGFsbCBub24tZXJyb3Igb3V0cHV0IGdvZXMgdG8gc3Rkb3V0IGluc3RlYWQgb2Ygc3RkZXJyLlxuICAgKiBTZXQgdG8gZmFsc2UgaW4gdGhlIENsaUlvSG9zdCBjb25zdHJ1Y3RvciBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGlmIHRoZSBDTEkgQ0kgYXJndW1lbnQgaXMgcGFzc2VkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGV0ZXJtaW5lZCBmcm9tIHRoZSBlbnZpcm9ubWVudCwgc3BlY2lmaWNhbGx5IGJhc2VkIG9uIGBwcm9jZXNzLmVudi5DSWBcbiAgICovXG4gIHJlYWRvbmx5IGlzQ0k/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCBUb29sa2l0IGFjdGlvbiB0aGUgaG9zdHMgc3RhcnRzIHdpdGguXG4gICAqXG4gICAqIEBkZWZhdWx0IFN0YWNrQWN0aXZpdHlQcm9ncmVzcy5CQVJcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrUHJvZ3Jlc3M/OiBTdGFja0FjdGl2aXR5UHJvZ3Jlc3M7XG59XG5cbi8qKlxuICogQSBzaW1wbGUgSU8gaG9zdCBmb3IgdGhlIENMSSB0aGF0IHdyaXRlcyBtZXNzYWdlcyB0byB0aGUgY29uc29sZS5cbiAqL1xuZXhwb3J0IGNsYXNzIENsaUlvSG9zdCBpbXBsZW1lbnRzIElJb0hvc3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgaW5zdGFuY2UocHJvcHM6IENsaUlvSG9zdFByb3BzID0ge30sIGZvcmNlTmV3ID0gZmFsc2UpOiBDbGlJb0hvc3Qge1xuICAgIGlmIChmb3JjZU5ldyB8fCAhQ2xpSW9Ib3N0Ll9pbnN0YW5jZSkge1xuICAgICAgQ2xpSW9Ib3N0Ll9pbnN0YW5jZSA9IG5ldyBDbGlJb0hvc3QocHJvcHMpO1xuICAgIH1cbiAgICByZXR1cm4gQ2xpSW9Ib3N0Ll9pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIENsaUlvSG9zdFxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBDbGlJb0hvc3QgfCB1bmRlZmluZWQ7XG5cbiAgLy8gaW50ZXJuYWwgc3RhdGUgZm9yIGdldHRlcnMvc2V0dGVyXG4gIHByaXZhdGUgX2N1cnJlbnRBY3Rpb246IFRvb2xraXRBY3Rpb247XG4gIHByaXZhdGUgX2lzQ0k6IGJvb2xlYW47XG4gIHByaXZhdGUgX2lzVFRZOiBib29sZWFuO1xuICBwcml2YXRlIF9sb2dMZXZlbDogSW9NZXNzYWdlTGV2ZWw7XG4gIHByaXZhdGUgX2ludGVybmFsSW9Ib3N0PzogSUlvSG9zdDtcbiAgcHJpdmF0ZSBfcHJvZ3Jlc3M6IFN0YWNrQWN0aXZpdHlQcm9ncmVzcyA9IFN0YWNrQWN0aXZpdHlQcm9ncmVzcy5CQVI7XG5cbiAgLy8gU3RhY2sgQWN0aXZpdHkgUHJpbnRlclxuICBwcml2YXRlIGFjdGl2aXR5UHJpbnRlcj86IElBY3Rpdml0eVByaW50ZXI7XG5cbiAgLy8gQ29ya2VkIExvZ2dpbmdcbiAgcHJpdmF0ZSBjb3JrZWRDb3VudGVyID0gMDtcbiAgcHJpdmF0ZSByZWFkb25seSBjb3JrZWRMb2dnaW5nQnVmZmVyOiBJb01lc3NhZ2U8YW55PltdID0gW107XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihwcm9wczogQ2xpSW9Ib3N0UHJvcHMgPSB7fSkge1xuICAgIHRoaXMuX2N1cnJlbnRBY3Rpb24gPSBwcm9wcy5jdXJyZW50QWN0aW9uID8/ICdub25lJyBhcyBUb29sa2l0QWN0aW9uO1xuICAgIHRoaXMuX2lzVFRZID0gcHJvcHMuaXNUVFkgPz8gcHJvY2Vzcy5zdGRvdXQuaXNUVFkgPz8gZmFsc2U7XG4gICAgdGhpcy5fbG9nTGV2ZWwgPSBwcm9wcy5sb2dMZXZlbCA/PyAnaW5mbyc7XG4gICAgdGhpcy5faXNDSSA9IHByb3BzLmlzQ0kgPz8gaXNDSSgpO1xuXG4gICAgdGhpcy5zdGFja1Byb2dyZXNzID0gcHJvcHMuc3RhY2tQcm9ncmVzcyA/PyBTdGFja0FjdGl2aXR5UHJvZ3Jlc3MuQkFSO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVySW9Ib3N0KGlvSG9zdDogSUlvSG9zdCkge1xuICAgIGlmIChpb0hvc3QgIT09IHRoaXMpIHtcbiAgICAgIHRoaXMuX2ludGVybmFsSW9Ib3N0ID0gaW9Ib3N0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHN0YWNrUHJvZ3Jlc3MgcHJlZmVyZW5jZS5cbiAgICovXG4gIHB1YmxpYyBzZXQgc3RhY2tQcm9ncmVzcyh0eXBlOiBTdGFja0FjdGl2aXR5UHJvZ3Jlc3MpIHtcbiAgICB0aGlzLl9wcm9ncmVzcyA9IHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc3RhY2tQcm9ncmVzcyB2YWx1ZS5cbiAgICpcbiAgICogVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgb3RoZXIgc3RhdGUgb2YgdGhlIGlvSG9zdCxcbiAgICogbGlrZSBpZiBpc1RUWSBhbmQgaXNDSS5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhY2tQcm9ncmVzcygpOiBTdGFja0FjdGl2aXR5UHJvZ3Jlc3Mge1xuICAgIC8vIFdlIGNhbiBhbHdheXMgdXNlIEVWRU5UU1xuICAgIGlmICh0aGlzLl9wcm9ncmVzcyA9PT0gU3RhY2tBY3Rpdml0eVByb2dyZXNzLkVWRU5UUykge1xuICAgICAgcmV0dXJuIHRoaXMuX3Byb2dyZXNzO1xuICAgIH1cblxuICAgIC8vIGlmIGxvZyBsZXZlbCBpcyB0cmFjaW5nIG9yIGRlYnVnLCB3ZSBkZWZhdWx0IHRvIHRoZSBmdWxsIGhpc3RvcnkgcHJpbnRlclxuICAgIGNvbnN0IHZlcmJvc2VMb2dnaW5nID0gbGV2ZWxQcmlvcml0eVt0aGlzLmxvZ0xldmVsXSA+IGxldmVsUHJpb3JpdHkuaW5mbztcbiAgICBpZiAodmVyYm9zZUxvZ2dpbmcpIHtcbiAgICAgIHJldHVybiBTdGFja0FjdGl2aXR5UHJvZ3Jlc3MuRVZFTlRTO1xuICAgIH1cblxuICAgIC8vIE9uIFdpbmRvd3Mgd2UgY2Fubm90IHVzZSBmYW5jeSBvdXRwdXRcbiAgICBjb25zdCBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgIGlmIChpc1dpbmRvd3MpIHtcbiAgICAgIHJldHVybiBTdGFja0FjdGl2aXR5UHJvZ3Jlc3MuRVZFTlRTO1xuICAgIH1cblxuICAgIC8vIE9uIHNvbWUgQ0kgc3lzdGVtcyAoc3VjaCBhcyBDaXJjbGVDSSkgb3V0cHV0IHN0aWxsIHJlcG9ydHMgYXMgYSBUVFkgc28gd2UgYWxzb1xuICAgIC8vIG5lZWQgYW4gaW5kaXZpZHVhbCBjaGVjayBmb3Igd2hldGhlciB3ZSdyZSBydW5uaW5nIG9uIENJLlxuICAgIC8vIHNlZTogaHR0cHM6Ly9kaXNjdXNzLmNpcmNsZWNpLmNvbS90L2NpcmNsZWNpLXRlcm1pbmFsLWlzLWEtdHR5LWJ1dC10ZXJtLWlzLW5vdC1zZXQvOTk2NVxuICAgIGNvbnN0IGZhbmN5T3V0cHV0QXZhaWxhYmxlID0gdGhpcy5pc1RUWSAmJiAhdGhpcy5pc0NJO1xuICAgIGlmICghZmFuY3lPdXRwdXRBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBTdGFja0FjdGl2aXR5UHJvZ3Jlc3MuRVZFTlRTO1xuICAgIH1cblxuICAgIC8vIFVzZSB0aGUgdXNlciBwcmVmZXJlbmNlXG4gICAgcmV0dXJuIHRoaXMuX3Byb2dyZXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGFjdGlvbiBiZWluZyBwZXJmb3JtZWQgYnkgdGhlIENMSS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY3VycmVudEFjdGlvbigpOiBUb29sa2l0QWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEFjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjdXJyZW50IGFjdGlvbiBiZWluZyBwZXJmb3JtZWQgYnkgdGhlIENMSS5cbiAgICpcbiAgICogQHBhcmFtIGFjdGlvbiBUaGUgYWN0aW9uIGJlaW5nIHBlcmZvcm1lZCBieSB0aGUgQ0xJLlxuICAgKi9cbiAgcHVibGljIHNldCBjdXJyZW50QWN0aW9uKGFjdGlvbjogVG9vbGtpdEFjdGlvbikge1xuICAgIHRoaXMuX2N1cnJlbnRBY3Rpb24gPSBhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgaG9zdCBjYW4gdXNlIGludGVyYWN0aW9ucyBhbmQgbWVzc2FnZSBzdHlsaW5nLlxuICAgKi9cbiAgcHVibGljIGdldCBpc1RUWSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNUVFk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IFRUWSBtb2RlLCBpLmUgY2FuIHRoZSBob3N0IHVzZSBpbnRlcmFjdGlvbnMgYW5kIG1lc3NhZ2Ugc3R5bGluZy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIHNldCBUVFkgbW9kZVxuICAgKi9cbiAgcHVibGljIHNldCBpc1RUWSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzVFRZID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgQ2xpSW9Ib3N0IGlzIHJ1bm5pbmcgaW4gQ0kgbW9kZS4gSW4gQ0kgbW9kZSwgYWxsIG5vbi1lcnJvciBvdXRwdXQgZ29lcyB0byBzdGRvdXQgaW5zdGVhZCBvZiBzdGRlcnIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQ0koKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQ0k7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBDSSBtb2RlLiBJbiBDSSBtb2RlLCBhbGwgbm9uLWVycm9yIG91dHB1dCBnb2VzIHRvIHN0ZG91dCBpbnN0ZWFkIG9mIHN0ZGVyci5cbiAgICogQHBhcmFtIHZhbHVlIHNldCB0aGUgQ0kgbW9kZVxuICAgKi9cbiAgcHVibGljIHNldCBpc0NJKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNDSSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHRocmVzaG9sZC4gTWVzc2FnZXMgd2l0aCBhIGxvd2VyIHByaW9yaXR5IGxldmVsIHdpbGwgYmUgaWdub3JlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgbG9nTGV2ZWwoKTogSW9NZXNzYWdlTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl9sb2dMZXZlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjdXJyZW50IHRocmVzaG9sZC4gTWVzc2FnZXMgd2l0aCBhIGxvd2VyIHByaW9yaXR5IGxldmVsIHdpbGwgYmUgaWdub3JlZC5cbiAgICogQHBhcmFtIGxldmVsIFRoZSBuZXcgbG9nIGxldmVsIHRocmVzaG9sZFxuICAgKi9cbiAgcHVibGljIHNldCBsb2dMZXZlbChsZXZlbDogSW9NZXNzYWdlTGV2ZWwpIHtcbiAgICB0aGlzLl9sb2dMZXZlbCA9IGxldmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGEgYmxvY2sgb2YgY29kZSB3aXRoIGNvcmtlZCBsb2dnaW5nLiBBbGwgbG9nIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb25cbiAgICogYXJlIGJ1ZmZlcmVkIGFuZCBvbmx5IHdyaXR0ZW4gd2hlbiBhbGwgbmVzdGVkIGNvcmsgYmxvY2tzIGNvbXBsZXRlICh3aGVuIENPUktfQ09VTlRFUiByZWFjaGVzIDApLlxuICAgKiBUaGUgY29ya2luZyBpcyBib3VuZCB0byB0aGUgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgdGhlIENsaUlvSG9zdC5cbiAgICpcbiAgICogQHBhcmFtIGJsb2NrIC0gQXN5bmMgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aXRoIGNvcmtlZCBsb2dnaW5nXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBibG9jaydzIHJldHVybiB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHdpdGhDb3JrZWRMb2dnaW5nPFQ+KGJsb2NrOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgdGhpcy5jb3JrZWRDb3VudGVyKys7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBibG9jaygpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmNvcmtlZENvdW50ZXItLTtcbiAgICAgIGlmICh0aGlzLmNvcmtlZENvdW50ZXIgPT09IDApIHtcbiAgICAgICAgLy8gUHJvY2VzcyBlYWNoIGJ1ZmZlcmVkIG1lc3NhZ2UgdGhyb3VnaCBub3RpZnlcbiAgICAgICAgZm9yIChjb25zdCBpb01lc3NhZ2Ugb2YgdGhpcy5jb3JrZWRMb2dnaW5nQnVmZmVyKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5ub3RpZnkoaW9NZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgYWxsIGJ1ZmZlcmVkIG1lc3NhZ2VzIGluLXBsYWNlXG4gICAgICAgIHRoaXMuY29ya2VkTG9nZ2luZ0J1ZmZlci5zcGxpY2UoMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmaWVzIHRoZSBob3N0IG9mIGEgbWVzc2FnZS5cbiAgICogVGhlIGNhbGxlciB3YWl0cyB1bnRpbCB0aGUgbm90aWZpY2F0aW9uIGNvbXBsZXRlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBub3RpZnk8VD4obXNnOiBJb01lc3NhZ2U8VD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5faW50ZXJuYWxJb0hvc3QpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbElvSG9zdC5ub3RpZnkobXNnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1N0YWNrQWN0aXZpdHkobXNnKSkge1xuICAgICAgaWYgKCF0aGlzLmFjdGl2aXR5UHJpbnRlcikge1xuICAgICAgICB0aGlzLmFjdGl2aXR5UHJpbnRlciA9IHRoaXMubWFrZUFjdGl2aXR5UHJpbnRlcigpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hY3Rpdml0eVByaW50ZXIubm90aWZ5KG1zZyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGxldmVsUHJpb3JpdHlbbXNnLmxldmVsXSA+IGxldmVsUHJpb3JpdHlbdGhpcy5sb2dMZXZlbF0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb3JrZWRDb3VudGVyID4gMCkge1xuICAgICAgdGhpcy5jb3JrZWRMb2dnaW5nQnVmZmVyLnB1c2gobXNnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSB0aGlzLmZvcm1hdE1lc3NhZ2UobXNnKTtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnNlbGVjdFN0cmVhbShtc2cubGV2ZWwpO1xuICAgIHN0cmVhbS53cml0ZShvdXRwdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdCBzdGFjayBhY3Rpdml0eSBtZXNzYWdlcyBzbyB0aGV5IGNhbiBiZSBzZW5kIHRvIHRoZSBwcmludGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBpc1N0YWNrQWN0aXZpdHkobXNnOiBJb01lc3NhZ2U8YW55Pikge1xuICAgIHJldHVybiBbXG4gICAgICAnQ0RLX1RPT0xLSVRfSTU1MDEnLFxuICAgICAgJ0NES19UT09MS0lUX0k1NTAyJyxcbiAgICAgICdDREtfVE9PTEtJVF9JNTUwMycsXG4gICAgXS5pbmNsdWRlcyhtc2cuY29kZSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgb3V0cHV0IHN0cmVhbSwgYmFzZWQgb24gbWVzc2FnZSBsZXZlbCBhbmQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgc2VsZWN0U3RyZWFtKGxldmVsOiBJb01lc3NhZ2VMZXZlbCkge1xuICAgIC8vIFRoZSBzdHJlYW0gc2VsZWN0aW9uIHBvbGljeSBmb3IgdGhlIENMSSBpcyB0aGUgZm9sbG93aW5nOlxuICAgIC8vXG4gICAgLy8gICAoMSkgTWVzc2FnZXMgb2YgbGV2ZWwgYHJlc3VsdGAgYWx3YXlzIGdvIHRvIGBzdGRvdXRgXG4gICAgLy8gICAoMikgTWVzc2FnZXMgb2YgbGV2ZWwgYGVycm9yYCBhbHdheXMgZ28gdG8gYHN0ZGVycmAuXG4gICAgLy8gICAoM2EpIEFsbCByZW1haW5pbmcgbWVzc2FnZXMgZ28gdG8gYHN0ZGVycmAuXG4gICAgLy8gICAoM2IpIElmIHdlIGFyZSBpbiBDSSBtb2RlLCBhbGwgcmVtYWluaW5nIG1lc3NhZ2VzIGdvIHRvIGBzdGRvdXRgLlxuICAgIC8vXG4gICAgc3dpdGNoIChsZXZlbCkge1xuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICByZXR1cm4gcHJvY2Vzcy5zdGRlcnI7XG4gICAgICBjYXNlICdyZXN1bHQnOlxuICAgICAgICByZXR1cm4gcHJvY2Vzcy5zdGRvdXQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5pc0NJID8gcHJvY2Vzcy5zdGRvdXQgOiBwcm9jZXNzLnN0ZGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhlIGhvc3Qgb2YgYSBtZXNzYWdlIHRoYXQgcmVxdWlyZXMgYSByZXNwb25zZS5cbiAgICpcbiAgICogSWYgdGhlIGhvc3QgZG9lcyBub3QgcmV0dXJuIGEgcmVzcG9uc2UgdGhlIHN1Z2dlc3RlZFxuICAgKiBkZWZhdWx0IHJlc3BvbnNlIGZyb20gdGhlIGlucHV0IG1lc3NhZ2Ugd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlcXVlc3RSZXNwb25zZTxEYXRhVHlwZSwgUmVzcG9uc2VUeXBlPihtc2c6IElvUmVxdWVzdDxEYXRhVHlwZSwgUmVzcG9uc2VUeXBlPik6IFByb21pc2U8UmVzcG9uc2VUeXBlPiB7XG4gICAgLy8gRmlyc3QgY2FsbCBvdXQgdG8gYSByZWdpc3RlcmVkIGluc3RhbmNlIGlmIHdlIGhhdmUgb25lXG4gICAgaWYgKHRoaXMuX2ludGVybmFsSW9Ib3N0KSB7XG4gICAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxJb0hvc3QucmVxdWVzdFJlc3BvbnNlKG1zZyk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHJlcXVlc3QgY2Fubm90IGJlIHByb21wdGVkIGZvciBieSB0aGUgQ2xpSW9Ib3N0LCB3ZSBqdXN0IGFjY2VwdCB0aGUgZGVmYXVsdFxuICAgIGlmICghaXNQcm9tcHRhYmxlUmVxdWVzdChtc2cpKSB7XG4gICAgICBhd2FpdCB0aGlzLm5vdGlmeShtc2cpO1xuICAgICAgcmV0dXJuIG1zZy5kZWZhdWx0UmVzcG9uc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLndpdGhDb3JrZWRMb2dnaW5nKGFzeW5jICgpOiBQcm9taXNlPHN0cmluZyB8IG51bWJlciB8IHRydWU+ID0+IHtcbiAgICAgIC8vIHByZXBhcmUgcHJvbXB0IGRhdGFcbiAgICAgIC8vIEB0b2RvIHRoaXMgZm9ybWF0IGlzIG5vdCBkZWZpbmVkIGFueXdoZXJlLCBwcm9iYWJseSBzaG91bGQgYmVcbiAgICAgIGNvbnN0IGRhdGE6IHtcbiAgICAgICAgbW90aXZhdGlvbj86IHN0cmluZztcbiAgICAgICAgY29uY3VycmVuY3k/OiBudW1iZXI7XG4gICAgICB9ID0gbXNnLmRhdGEgPz8ge307XG5cbiAgICAgIGNvbnN0IG1vdGl2YXRpb24gPSBkYXRhLm1vdGl2YXRpb24gPz8gJ1VzZXIgaW5wdXQgaXMgbmVlZGVkJztcbiAgICAgIGNvbnN0IGNvbmN1cnJlbmN5ID0gZGF0YS5jb25jdXJyZW5jeSA/PyAwO1xuXG4gICAgICAvLyBvbmx5IHRhbGsgdG8gdXNlciBpZiBTVERJTiBpcyBhIHRlcm1pbmFsIChvdGhlcndpc2UsIGZhaWwpXG4gICAgICBpZiAoIXRoaXMuaXNUVFkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgJHttb3RpdmF0aW9ufSwgYnV0IHRlcm1pbmFsIChUVFkpIGlzIG5vdCBhdHRhY2hlZCBzbyB3ZSBhcmUgdW5hYmxlIHRvIGdldCBhIGNvbmZpcm1hdGlvbiBmcm9tIHRoZSB1c2VyYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIG9ubHkgdGFsayB0byB1c2VyIGlmIGNvbmN1cnJlbmN5IGlzIDEgKG90aGVyd2lzZSwgZmFpbClcbiAgICAgIGlmIChjb25jdXJyZW5jeSA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgJHttb3RpdmF0aW9ufSwgYnV0IGNvbmN1cnJlbmN5IGlzIGdyZWF0ZXIgdGhhbiAxIHNvIHdlIGFyZSB1bmFibGUgdG8gZ2V0IGEgY29uZmlybWF0aW9uIGZyb20gdGhlIHVzZXJgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQmFzaWMgY29uZmlybWF0aW9uIHByb21wdFxuICAgICAgLy8gV2UgdHJlYXQgYWxsIHJlcXVlc3RzIHdpdGggYSBib29sZWFuIHJlc3BvbnNlIGFzIGNvbmZpcm1hdGlvbiBwcm9tcHRzXG4gICAgICBpZiAoaXNDb25maXJtYXRpb25Qcm9tcHQobXNnKSkge1xuICAgICAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCBwcm9tcHRseS5jb25maXJtKGAke2NoYWxrLmN5YW4obXNnLm1lc3NhZ2UpfSAoeS9uKWApO1xuICAgICAgICBpZiAoIWNvbmZpcm1lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0Fib3J0ZWQgYnkgdXNlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25maXJtZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIEFza2luZyBmb3IgYSBzcGVjaWZpYyB2YWx1ZVxuICAgICAgY29uc3QgcHJvbXB0ID0gZXh0cmFjdFByb21wdEluZm8obXNnKTtcbiAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IHByb21wdGx5LnByb21wdChgJHtjaGFsay5jeWFuKG1zZy5tZXNzYWdlKX0gKCR7cHJvbXB0LmRlZmF1bHR9KWAsIHtcbiAgICAgICAgZGVmYXVsdDogcHJvbXB0LmRlZmF1bHQsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwcm9tcHQuY29udmVydEFuc3dlcihhbnN3ZXIpO1xuICAgIH0pO1xuXG4gICAgLy8gV2UgbmVlZCB0byBjYXN0IHRoaXMgYmVjYXVzZSBpdCBpcyBpbXBvc3NpYmxlIHRvIG5hcnJvdyB0aGUgZ2VuZXJpYyB0eXBlXG4gICAgLy8gaXNQcm9tcHRhYmxlUmVxdWVzdCBlbnN1cmVzIHRoYXQgdGhlIHJlc3BvbnNlIHR5cGUgaXMgb25lIHdlIGNhbiBwcm9tcHQgZm9yXG4gICAgLy8gdGhlIHJlbWFpbmluZyBjb2RlIGVuc3VyZSB3ZSBhcmUgaW5kZWVkIHJldHVybmluZyB0aGUgY29ycmVjdCB0eXBlXG4gICAgcmV0dXJuIHJlc3BvbnNlIGFzIFJlc3BvbnNlVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIGEgbWVzc2FnZSBmb3IgY29uc29sZSBvdXRwdXQgd2l0aCBvcHRpb25hbCBjb2xvciBzdXBwb3J0XG4gICAqL1xuICBwcml2YXRlIGZvcm1hdE1lc3NhZ2UobXNnOiBJb01lc3NhZ2U8YW55Pik6IHN0cmluZyB7XG4gICAgLy8gYXBwbHkgcHJvdmlkZWQgc3R5bGUgb3IgYSBkZWZhdWx0IHN0eWxlIGlmIHdlJ3JlIGluIFRUWSBtb2RlXG4gICAgbGV0IG1lc3NhZ2VfdGV4dCA9IHRoaXMuX2lzVFRZXG4gICAgICA/IHN0eWxlTWFwW21zZy5sZXZlbF0obXNnLm1lc3NhZ2UpXG4gICAgICA6IG1zZy5tZXNzYWdlO1xuXG4gICAgLy8gcHJlcGVuZCB0aW1lc3RhbXAgaWYgSW9NZXNzYWdlTGV2ZWwgaXMgREVCVUcgb3IgVFJBQ0UuIFBvc3RwZW5kIGEgbmV3bGluZS5cbiAgICByZXR1cm4gKChtc2cubGV2ZWwgPT09ICdkZWJ1ZycgfHwgbXNnLmxldmVsID09PSAndHJhY2UnKVxuICAgICAgPyBgWyR7dGhpcy5mb3JtYXRUaW1lKG1zZy50aW1lKX1dICR7bWVzc2FnZV90ZXh0fWBcbiAgICAgIDogbWVzc2FnZV90ZXh0KSArICdcXG4nO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgZGF0ZSB0byBISDpNTTpTU1xuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRUaW1lKGQ6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhZCA9IChuOiBudW1iZXIpOiBzdHJpbmcgPT4gbi50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgcmV0dXJuIGAke3BhZChkLmdldEhvdXJzKCkpfToke3BhZChkLmdldE1pbnV0ZXMoKSl9OiR7cGFkKGQuZ2V0U2Vjb25kcygpKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBpbnN0YW5jZSBvZiB0aGUgQWN0aXZpdHlQcmludGVyXG4gICAqL1xuICBwcml2YXRlIG1ha2VBY3Rpdml0eVByaW50ZXIoKSB7XG4gICAgY29uc3QgcHJvcHM6IEFjdGl2aXR5UHJpbnRlclByb3BzID0ge1xuICAgICAgc3RyZWFtOiB0aGlzLnNlbGVjdFN0cmVhbSgnaW5mbycpLFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHRoaXMuc3RhY2tQcm9ncmVzcykge1xuICAgICAgY2FzZSBTdGFja0FjdGl2aXR5UHJvZ3Jlc3MuRVZFTlRTOlxuICAgICAgICByZXR1cm4gbmV3IEhpc3RvcnlBY3Rpdml0eVByaW50ZXIocHJvcHMpO1xuICAgICAgY2FzZSBTdGFja0FjdGl2aXR5UHJvZ3Jlc3MuQkFSOlxuICAgICAgICByZXR1cm4gbmV3IEN1cnJlbnRBY3Rpdml0eVByaW50ZXIocHJvcHMpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgSW9Ib3N0IGltcGxlbWVudGF0aW9uIGNvbnNpZGVycyBhIHJlcXVlc3QgcHJvbXB0YWJsZSwgaWY6XG4gKiAtIGl0J3MgYSB5ZXMvbm8gY29uZmlybWF0aW9uXG4gKiAtIGFza2luZyBmb3IgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzUHJvbXB0YWJsZVJlcXVlc3QobXNnOiBJb1JlcXVlc3Q8YW55LCBhbnk+KTogbXNnIGlzIElvUmVxdWVzdDxhbnksIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+IHtcbiAgcmV0dXJuIGlzQ29uZmlybWF0aW9uUHJvbXB0KG1zZylcbiAgICB8fCB0eXBlb2YgbXNnLmRlZmF1bHRSZXNwb25zZSA9PT0gJ3N0cmluZydcbiAgICB8fCB0eXBlb2YgbXNnLmRlZmF1bHRSZXNwb25zZSA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlcXVlc3QgaXMgYSBjb25maXJtYXRpb24gcHJvbXB0XG4gKiBXZSB0cmVhdCBhbGwgcmVxdWVzdHMgd2l0aCBhIGJvb2xlYW4gcmVzcG9uc2UgYXMgY29uZmlybWF0aW9uIHByb21wdHNcbiAqL1xuZnVuY3Rpb24gaXNDb25maXJtYXRpb25Qcm9tcHQobXNnOiBJb1JlcXVlc3Q8YW55LCBhbnk+KTogbXNnIGlzIElvUmVxdWVzdDxhbnksIGJvb2xlYW4+IHtcbiAgcmV0dXJuIHR5cGVvZiBtc2cuZGVmYXVsdFJlc3BvbnNlID09PSAnYm9vbGVhbic7XG59XG5cbi8qKlxuICogSGVscGVyIHRvIGV4dHJhY3QgaW5mb3JtYXRpb24gZm9yIHByb21wdGx5IGZyb20gdGhlIHJlcXVlc3RcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFByb21wdEluZm8obXNnOiBJb1JlcXVlc3Q8YW55LCBhbnk+KToge1xuICBkZWZhdWx0OiBzdHJpbmc7XG4gIGNvbnZlcnRBbnN3ZXI6IChpbnB1dDogc3RyaW5nKSA9PiBzdHJpbmcgfCBudW1iZXI7XG59IHtcbiAgY29uc3QgaXNOdW1iZXIgPSAodHlwZW9mIG1zZy5kZWZhdWx0UmVzcG9uc2UgPT09ICdudW1iZXInKTtcbiAgcmV0dXJuIHtcbiAgICBkZWZhdWx0OiB1dGlsLmZvcm1hdChtc2cuZGVmYXVsdFJlc3BvbnNlKSxcbiAgICBjb252ZXJ0QW5zd2VyOiBpc051bWJlciA/ICh2KSA9PiBOdW1iZXIodikgOiAodikgPT4gU3RyaW5nKHYpLFxuICB9O1xufVxuXG5jb25zdCBzdHlsZU1hcDogUmVjb3JkPElvTWVzc2FnZUxldmVsLCAoc3RyOiBzdHJpbmcpID0+IHN0cmluZz4gPSB7XG4gIGVycm9yOiBjaGFsay5yZWQsXG4gIHdhcm46IGNoYWxrLnllbGxvdyxcbiAgcmVzdWx0OiBjaGFsay53aGl0ZSxcbiAgaW5mbzogY2hhbGsud2hpdGUsXG4gIGRlYnVnOiBjaGFsay5ncmF5LFxuICB0cmFjZTogY2hhbGsuZ3JheSxcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgcnVubmluZyBpbiBhIENJIGVudmlyb25tZW50XG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgcnVubmluZyBpbiBhIENJIGVudmlyb25tZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NJKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuQ0kgIT09IHVuZGVmaW5lZCAmJiBwcm9jZXNzLmVudi5DSSAhPT0gJ2ZhbHNlJyAmJiBwcm9jZXNzLmVudi5DSSAhPT0gJzAnO1xufVxuXG4iXX0=
@@ -1,44 +1 @@
1
- /**
2
- * Represents a general toolkit error in the AWS CDK Toolkit.
3
- */
4
- export declare class ToolkitError extends Error {
5
- /**
6
- * Determines if a given error is an instance of ToolkitError.
7
- */
8
- static isToolkitError(x: any): x is ToolkitError;
9
- /**
10
- * Determines if a given error is an instance of AuthenticationError.
11
- */
12
- static isAuthenticationError(x: any): x is AuthenticationError;
13
- /**
14
- * Determines if a given error is an instance of AssemblyError.
15
- */
16
- static isAssemblyError(x: any): x is AssemblyError;
17
- /**
18
- * Determines if a given error is an instance of AssemblyError.
19
- */
20
- static isContextProviderError(x: any): x is ContextProviderError;
21
- /**
22
- * The type of the error, defaults to "toolkit".
23
- */
24
- readonly type: string;
25
- constructor(message: string, type?: string);
26
- }
27
- /**
28
- * Represents an authentication-specific error in the AWS CDK Toolkit.
29
- */
30
- export declare class AuthenticationError extends ToolkitError {
31
- constructor(message: string);
32
- }
33
- /**
34
- * Represents an authentication-specific error in the AWS CDK Toolkit.
35
- */
36
- export declare class AssemblyError extends ToolkitError {
37
- constructor(message: string);
38
- }
39
- /**
40
- * Represents an error originating from a Context Provider
41
- */
42
- export declare class ContextProviderError extends ToolkitError {
43
- constructor(message: string);
44
- }
1
+ export * from '../../../@aws-cdk/tmp-toolkit-helpers/src/api/toolkit-error';