aws-cdk 2.175.1 → 2.176.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 (89) hide show
  1. package/CONTRIBUTING.md +4 -4
  2. package/build-info.json +2 -2
  3. package/db.json.gz +0 -0
  4. package/lib/api/aws-auth/credential-plugins.js +5 -5
  5. package/lib/api/aws-auth/sdk-provider.js +3 -2
  6. package/lib/api/aws-auth/sdk.js +3 -2
  7. package/lib/api/cxapp/cloud-assembly.js +4 -4
  8. package/lib/api/deploy-stack.js +11 -10
  9. package/lib/api/deployments.js +4 -4
  10. package/lib/api/environment-access.js +3 -2
  11. package/lib/api/environment-resources.js +3 -2
  12. package/lib/api/garbage-collection/garbage-collector.js +9 -9
  13. package/lib/api/garbage-collection/progress-printer.js +3 -3
  14. package/lib/api/hotswap-deployments.js +11 -10
  15. package/lib/api/logs/find-cloudwatch-logs.js +3 -2
  16. package/lib/api/logs/logs-monitor.js +3 -3
  17. package/lib/api/nested-stack-helpers.js +3 -2
  18. package/lib/api/plugin/plugin.js +1 -1
  19. package/lib/api/util/cloudformation/stack-activity-monitor.d.ts +4 -4
  20. package/lib/api/util/cloudformation/stack-activity-monitor.js +9 -9
  21. package/lib/api/util/cloudformation/stack-event-poller.js +3 -2
  22. package/lib/api/util/cloudformation.js +3 -3
  23. package/lib/cdk-toolkit.js +32 -33
  24. package/lib/cli.js +12 -7
  25. package/lib/commands/context.js +20 -20
  26. package/lib/commands/docs.js +2 -2
  27. package/lib/commands/doctor.js +9 -9
  28. package/lib/commands/migrate.js +16 -16
  29. package/lib/config.d.ts +6 -3
  30. package/lib/config.js +10 -7
  31. package/lib/context-providers/ami.js +2 -2
  32. package/lib/context-providers/index.js +3 -2
  33. package/lib/convert-to-user-input.d.ts +3 -0
  34. package/lib/convert-to-user-input.js +431 -0
  35. package/lib/diff.js +3 -3
  36. package/lib/import.js +6 -6
  37. package/lib/index.js +50 -35
  38. package/lib/init-hooks.js +3 -2
  39. package/lib/init-templates/.init-version.json +1 -1
  40. package/lib/init-templates/.recommended-feature-flags.json +2 -1
  41. package/lib/init-templates/app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj +1 -1
  42. package/lib/init-templates/app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj +1 -1
  43. package/lib/init-templates/sample-app/csharp/src/%name.PascalCased%/%name.PascalCased%.template.csproj +1 -1
  44. package/lib/init-templates/sample-app/fsharp/src/%name.PascalCased%/%name.PascalCased%.template.fsproj +1 -1
  45. package/lib/init.d.ts +1 -1
  46. package/lib/init.js +20 -19
  47. package/lib/logging.d.ts +112 -48
  48. package/lib/logging.js +176 -133
  49. package/lib/notices.js +13 -12
  50. package/lib/parse-command-line-arguments.js +2 -2
  51. package/lib/settings.d.ts +2 -0
  52. package/lib/settings.js +3 -1
  53. package/lib/toolkit/cli-io-host.d.ts +56 -25
  54. package/lib/toolkit/cli-io-host.js +49 -22
  55. package/lib/toolkit/error.js +2 -2
  56. package/lib/{cli-arguments.d.ts → user-input.d.ts} +8 -8
  57. package/lib/user-input.js +3 -0
  58. package/lib/util/archive.js +3 -2
  59. package/lib/util/asset-publishing.js +3 -3
  60. package/lib/util/error.d.ts +9 -0
  61. package/lib/util/error.js +22 -0
  62. package/lib/version.js +2 -2
  63. package/package.json +12 -11
  64. package/scripts/user-input-gen +2 -0
  65. package/scripts/user-input-gen.js +17 -0
  66. package/test/api/exec.test.js +3 -3
  67. package/test/api/fake-sts.js +3 -2
  68. package/test/api/logs/logging.test.js +269 -0
  69. package/test/api/sdk-provider.test.js +3 -3
  70. package/test/api/stack-activity-monitor.test.js +16 -16
  71. package/test/api/util/error.test.d.ts +1 -0
  72. package/test/api/util/error.test.js +26 -0
  73. package/test/cli-arguments.test.js +126 -81
  74. package/test/cli.test.js +8 -8
  75. package/test/init.test.js +5 -5
  76. package/test/jest-bufferedconsole.d.ts +14 -0
  77. package/test/jest-bufferedconsole.js +72 -0
  78. package/test/notices.test.js +14 -14
  79. package/test/toolkit/cli-io-host.test.js +93 -188
  80. package/test/util/silent.js +2 -2
  81. package/test/version.test.js +5 -5
  82. package/lib/cli-arguments.js +0 -3
  83. package/lib/convert-to-cli-args.d.ts +0 -2
  84. package/lib/convert-to-cli-args.js +0 -234
  85. package/scripts/cli-args-gen +0 -2
  86. package/scripts/cli-args-gen.js +0 -16
  87. package/test/api/logs/cli-logging.test.js +0 -135
  88. /package/scripts/{cli-args-gen.d.ts → user-input-gen.d.ts} +0 -0
  89. /package/test/api/logs/{cli-logging.test.d.ts → logging.test.d.ts} +0 -0
@@ -12,7 +12,7 @@ const awscli_compatible_1 = require("../../lib/api/aws-auth/awscli-compatible");
12
12
  const user_agent_1 = require("../../lib/api/aws-auth/user-agent");
13
13
  const plugin_1 = require("../../lib/api/plugin");
14
14
  const mode_1 = require("../../lib/api/plugin/mode");
15
- const logging = require("../../lib/logging");
15
+ const logging_1 = require("../../lib/logging");
16
16
  const util_1 = require("../util");
17
17
  const mock_sdk_1 = require("../util/mock-sdk");
18
18
  let mockFetchMetadataToken = jest.fn();
@@ -37,7 +37,7 @@ beforeEach(() => {
37
37
  // - We have a cache from access key -> account
38
38
  uid = `(${uuid.v4()})`;
39
39
  pluginQueried = false;
40
- logging.setLogLevel(logging.LogLevel.TRACE);
40
+ (0, logging_1.setIoMessageThreshold)('trace');
41
41
  plugin_1.PluginHost.instance.credentialProviderSources.splice(0);
42
42
  plugin_1.PluginHost.instance.credentialProviderSources.push({
43
43
  isAvailable() {
@@ -675,4 +675,4 @@ async function exerciseCredentials(provider, e, mode = mode_1.Mode.ForReading, o
675
675
  const sdk = await provider.forEnvironment(e, mode, options);
676
676
  await sdk.sdk.currentAccount();
677
677
  }
678
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLXByb3ZpZGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzZGstcHJvdmlkZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlCQUF5QjtBQUN6Qiw4REFBa0Q7QUFDbEQseUNBQXlDO0FBQ3pDLG9EQUFrRjtBQUNsRixxQ0FBcUM7QUFDckMsNkJBQTZCO0FBQzdCLHlDQUErRTtBQUMvRSxxREFBb0c7QUFDcEcsZ0ZBQTRFO0FBQzVFLGtFQUF3RTtBQUN4RSxpREFBa0Q7QUFDbEQsb0RBQWlEO0FBQ2pELDZDQUE2QztBQUM3QyxrQ0FBcUM7QUFDckMsK0NBQTJFO0FBRTNFLElBQUksc0JBQXNCLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUU1QixJQUFJLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtJQUM5QyxPQUFPO1FBQ0wsZUFBZSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUU7WUFDakQsT0FBTztnQkFDTCxrQkFBa0IsRUFBRSxzQkFBc0I7Z0JBQzFDLE9BQU8sRUFBRSxXQUFXO2FBQ3JCLENBQUM7UUFDSixDQUFDLENBQUM7S0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLEdBQVcsQ0FBQztBQUNoQixJQUFJLGFBQXNCLENBQUM7QUFFM0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtJQUNkLGlCQUFpQjtJQUNqQiwyQ0FBMkM7SUFDM0MsRUFBRTtJQUNGLGlEQUFpRDtJQUNqRCwrQ0FBK0M7SUFDL0MsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDdkIsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUV0QixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxD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LGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVELE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHsgYm9ja2ZzIH0gZnJvbSAnQGF3cy1jZGsvY2RrLWJ1aWxkLXRvb2xzJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgeyBBc3N1bWVSb2xlQ29tbWFuZCwgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXN0cyc7XG5pbXBvcnQgKiBhcyBwcm9tcHRseSBmcm9tICdwcm9tcHRseSc7XG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgRmFrZVN0cywgUmVnaXN0ZXJSb2xlT3B0aW9ucywgUmVnaXN0ZXJVc2VyT3B0aW9ucyB9IGZyb20gJy4vZmFrZS1zdHMnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbk9wdGlvbnMsIENyZWRlbnRpYWxzT3B0aW9ucywgU0RLLCBTZGtQcm92aWRlciB9IGZyb20gJy4uLy4uL2xpYi9hcGkvYXdzLWF1dGgnO1xuaW1wb3J0IHsgQXdzQ2xpQ29tcGF0aWJsZSB9IGZyb20gJy4uLy4uL2xpYi9hcGkvYXdzLWF1dGgvYXdzY2xpLWNvbXBhdGlibGUnO1xuaW1wb3J0IHsgZGVmYXVsdENsaVVzZXJBZ2VudCB9IGZyb20gJy4uLy4uL2xpYi9hcGkvYXdzLWF1dGgvdXNlci1hZ2VudCc7XG5pbXBvcnQgeyBQbHVnaW5Ib3N0IH0gZnJvbSAnLi4vLi4vbGliL2FwaS9wbHVnaW4nO1xuaW1wb3J0IHsgTW9kZSB9IGZyb20gJy4uLy4uL2xpYi9hcGkvcGx1Z2luL21vZGUnO1xuaW1wb3J0ICogYXMgbG9nZ2luZyBmcm9tICcuLi8uLi9saWIvbG9nZ2luZyc7XG5pbXBvcnQgeyB3aXRoTW9ja2VkIH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgeyBtb2NrU1RTQ2xpZW50LCByZXN0b3JlU2RrTW9ja3NUb0RlZmF1bHQgfSBmcm9tICcuLi91dGlsL21vY2stc2RrJztcblxubGV0IG1vY2tGZXRjaE1ldGFkYXRhVG9rZW4gPSBqZXN0LmZuKCk7XG5sZXQgbW9ja1JlcXVlc3QgPSBqZXN0LmZuKCk7XG5cbmplc3QubW9jaygnQGF3cy1zZGsvZWMyLW1ldGFkYXRhLXNlcnZpY2UnLCAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgTWV0YWRhdGFTZXJ2aWNlOiBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZldGNoTWV0YWRhdGFUb2tlbjogbW9ja0ZldGNoTWV0YWRhdGFUb2tlbixcbiAgICAgICAgcmVxdWVzdDogbW9ja1JlcXVlc3QsXG4gICAgICB9O1xuICAgIH0pLFxuICB9O1xufSk7XG5cbmxldCB1aWQ6IHN0cmluZztcbmxldCBwbHVnaW5RdWVyaWVkOiBib29sZWFuO1xuXG5iZWZvcmVFYWNoKCgpID0+IHtcbiAgLy8gQ2FjaGUgYnVzdGVycyFcbiAgLy8gV2UgcHJlZml4IGV2ZXJ5dGhpbmcgd2l0aCBVVUlEcyBiZWNhdXNlOlxuICAvL1xuICAvLyAtIFdlIGhhdmUgYSBjYWNoZSBmcm9tIGFjY291bnQjIC0+IGNyZWRlbnRpYWxzXG4gIC8vIC0gV2UgaGF2ZSBhIGNhY2hlIGZyb20gYWNjZXNzIGtleSAtPiBhY2NvdW50XG4gIHVpZCA9IGAoJHt1dWlkLnY0KCl9KWA7XG4gIHBsdWdpblF1ZXJpZWQgPSBmYWxzZTtcblxuICBsb2dnaW5nLnNldExvZ0xldmVsKGxvZ2dpbmcuTG9nTGV2ZWwuVFJBQ0UpO1xuXG4gIFBsdWdpbkhvc3QuaW5zdGFuY2UuY3JlZGVudGlhbFByb3ZpZGVyU291cmNlcy5zcGxpY2UoMCk7XG4gIFBsdWdpbkhvc3QuaW5zdGFuY2UuY3JlZGVudGlhbFByb3ZpZGVyU291cmNlcy5wdXNoKHtcbiAgICBpc0F2YWlsYWJsZSgpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gICAgfSxcbiAgICBjYW5Qcm92aWRlQ3JlZGVudGlhbHMoYWNjb3VudCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhY2NvdW50ID09PSB1bmlxKCc5OTk5OScpKTtcbiAgICB9LFxuICAgIGdldFByb3ZpZGVyKCkge1xuICAgICAgcGx1Z2luUXVlcmllZCA9IHRydWU7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgYWNjZXNzS2V5SWQ6IGAke3VpZH1wbHVnaW5fa2V5YCxcbiAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiAncGx1Z2luX3NlY3JldCcsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogJ3BsdWdpbl90b2tlbicsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG5hbWU6ICd0ZXN0IHBsdWdpbicsXG4gIH0pO1xuXG4gIC8vIE1ha2Ugc3VyZSB0aGVzZSBwb2ludCB0byBub25leGlzdGFudCBmaWxlcyB0byBzdGFydCwgaWYgd2UgZG9uJ3QgY2FsbFxuICAvLyBwcmVwYXJlKCkgdGhlbiB3ZSBkb24ndCBhY2NpZGVudGFsbHkgd2FudCB0byBmYWxsIGJhY2sgdG8gc3lzdGVtIGNvbmZpZy5cbiAgcHJvY2Vzcy5lbnYuQVdTX0NPTkZJR19GSUxFID0gJy9kZXYvbnVsbCc7XG4gIHByb2Nlc3MuZW52LkFXU19TSEFSRURfQ1JFREVOVElBTFNfRklMRSA9ICcvZGV2L251bGwnO1xuXG4gIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICByZXN0b3JlU2RrTW9ja3NUb0RlZmF1bHQoKTtcbn0pO1xuXG5hZnRlckVhY2goKCkgPT4ge1xuICBib2NrZnMucmVzdG9yZSgpO1xuICBqZXN0LnJlc3RvcmVBbGxNb2NrcygpO1xufSk7XG5cbmZ1bmN0aW9uIHVuaXEoYWNjb3VudDogc3RyaW5nKSB7XG4gIHJldHVybiBgJHt1aWR9JHthY2NvdW50fWA7XG59XG5cbmZ1bmN0aW9uIGVudihhY2NvdW50OiBzdHJpbmcpIHtcbiAgcmV0dXJuIGN4YXBpLkVudmlyb25tZW50VXRpbHMubWFrZShhY2NvdW50LCAnZGVmJyk7XG59XG5cbmRlc2NyaWJlKCd3aXRoIGludGVyY2VwdGVkIG5ldHdvcmsgY2FsbHMnLCAoKSA9PiB7XG4gIC8vIE1vc3QgdGVzdHMgd2lsbCB1c2UgaW50ZXJjZXB0ZWQgbmV0d29yayBjYWxscywgZXhjZXB0IG9uZSB0ZXN0IHRoYXQgdGVzdHNcbiAgLy8gdGhhdCB0aGUgcmlnaHQgSFRUUCBgQWdlbnRgIGlzIHVzZWQuXG5cbiAgbGV0IGZha2VTdHM6IEZha2VTdHM7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGZha2VTdHMgPSBuZXcgRmFrZVN0cygpO1xuICAgIGZha2VTdHMuYmVnaW4oKTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgS2V5SUQgcmV0dXJuZWQgYnkgdGhlIHBsdWdpbiBpcyByZWNvZ25pemVkXG4gICAgZmFrZVN0cy5yZWdpc3RlclVzZXIodW5pcSgnOTk5OTknKSwgdW5pcSgncGx1Z2luX2tleScpKTtcbiAgICBtb2NrUmVxdWVzdCA9IGplc3QuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZShKU09OLnN0cmluZ2lmeSh7IHJlZ2lvbjogdW5kZWZpbmVkIH0pKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBmYWtlU3RzLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgLy8gU2V0IG9mIHRlc3RzIHdoZXJlIHRoZSBDREsgd2lsbCBub3QgdHJpZ2dlciBhc3N1bWUtcm9sZVxuICAvLyAodGhlIElOSSBmaWxlIG1pZ2h0IHN0aWxsIGRvIGFzc3VtZS1yb2xlKVxuICBkZXNjcmliZSgnd2hlbiBDREsgZG9lcyBub3QgQXNzdW1lUm9sZScsICgpID0+IHtcbiAgICB0ZXN0KCd1c2VzIGRlZmF1bHQgY3JlZGVudGlhbHMgYnkgZGVmYXVsdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IGFjY291bnQgPSB1bmlxKCcxMTExMScpO1xuICAgICAgbW9ja1NUU0NsaWVudC5vbihHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQpLnJlc29sdmVzKHtcbiAgICAgICAgQWNjb3VudDogYWNjb3VudCxcbiAgICAgICAgQXJuOiAnYXJuOmF3cy1oZXJlJyxcbiAgICAgIH0pO1xuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnYWNjZXNzJywgJGFjY291bnQ6ICcxMTExMScsICRmYWtlU3RzT3B0aW9uczogeyBwYXJ0aXRpb246ICdhd3MtaGVyZScgfSB9LFxuICAgICAgICB9LFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IHJlZ2lvbjogJ2V1LWJsYS01JyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRSZWdpb24pLnRvRXF1YWwoJ2V1LWJsYS01Jyk7XG4gICAgICBhd2FpdCBleHBlY3QocHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKSkucmVzb2x2ZXMudG9FcXVhbCh7IGFjY291bnRJZDogYWNjb3VudCwgcGFydGl0aW9uOiAnYXdzLWhlcmUnIH0pO1xuXG4gICAgICAvLyBBc2sgZm9yIGEgZGlmZmVyZW50IHJlZ2lvblxuICAgICAgY29uc3Qgc2RrID0gKGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KHsgLi4uZW52KGFjY291bnQpLCByZWdpb246ICdyZ24nIH0sIE1vZGUuRm9yUmVhZGluZykpLnNkaztcbiAgICAgIGV4cGVjdCgoYXdhaXQgc2RrQ29uZmlnKHNkaykuY3JlZGVudGlhbHMoKSkuYWNjZXNzS2V5SWQpLnRvRXF1YWwodW5pcSgnYWNjZXNzJykpO1xuICAgICAgZXhwZWN0KHNkay5jdXJyZW50UmVnaW9uKS50b0VxdWFsKCdyZ24nKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Rocm93cyBpZiBubyBjcmVkZW50aWFscyBjb3VsZCBiZSBmb3VuZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGFjY291bnQgPSB1bmlxKCcxMTExMScpO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG4gICAgICBhd2FpdCBleHBlY3QoZXhlcmNpc2VDcmVkZW50aWFscyhwcm92aWRlciwgeyAuLi5lbnYoYWNjb3VudCksIHJlZ2lvbjogJ3JnbicgfSkpXG4gICAgICAgIC5yZWplY3RzXG4gICAgICAgIC50b1Rocm93KC9OZWVkIHRvIHBlcmZvcm0gQVdTIGNhbGxzIGZvciBhY2NvdW50IC4qLCBidXQgbm8gY3JlZGVudGlhbHMgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQsIGFuZCBub25lIG9mIHRoZXNlIHBsdWdpbnMgZm91bmQgYW55Lyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdubyBiYXNlIGNyZWRlbnRpYWxzIHBhcnRpdGlvbiBpZiB0b2tlbiBpcyBleHBpcmVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYWNjb3VudCA9IHVuaXEoJzExMTExJyk7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignRXhwaXJlZCBUb2tlbicpO1xuICAgICAgZXJyb3IubmFtZSA9ICdFeHBpcmVkVG9rZW4nO1xuICAgICAgY29uc3QgaWRlbnRpdHlQcm92aWRlciA9ICgpID0+IFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFNka1Byb3ZpZGVyKGlkZW50aXR5UHJvdmlkZXIsICdyZ24nKTtcbiAgICAgIGNvbnN0IGNyZWRzID0gYXdhaXQgcHJvdmlkZXIuYmFzZUNyZWRlbnRpYWxzUGFydGl0aW9uKHsgLi4uZW52KGFjY291bnQpLCByZWdpb246ICdyZ24nIH0sIE1vZGUuRm9yUmVhZGluZyk7XG5cbiAgICAgIGV4cGVjdChjcmVkcykudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndGhyb3dzIGlmIHByb2ZpbGUgY3JlZGVudGlhbHMgYXJlIG5vdCBmb3IgdGhlIHJpZ2h0IGFjY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBXSEVOXG4gICAgICBqZXN0LnNweU9uKEF3c0NsaUNvbXBhdGlibGUsICdyZWdpb24nKS5tb2NrUmVzb2x2ZWRWYWx1ZSgndXMtZWFzdC0xMjMnKTtcbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdwcm9maWxlIGJvbyc6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdhY2Nlc3MnLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2JvbycpO1xuXG4gICAgICBhd2FpdCBleHBlY3QoZXhlcmNpc2VDcmVkZW50aWFscyhwcm92aWRlciwgZW52KHVuaXEoJ3NvbWVfYWNjb3VudF8jJykpKSkucmVqZWN0cy50b1Rocm93KFxuICAgICAgICAnTmVlZCB0byBwZXJmb3JtIEFXUyBjYWxscycsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndXNlIHByb2ZpbGUgYWNjdC9yZWdpb24gaWYgYWdub3N0aWMgZW52IHJlcXVlc3RlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2FjY2VzcycsICRhY2NvdW50OiAnMTExMTEnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgcmVnaW9uOiAnZXUtYmxhLTUnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBjb25zdCBzZGsgPSAoXG4gICAgICAgIGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KFxuICAgICAgICAgIGN4YXBpLkVudmlyb25tZW50VXRpbHMubWFrZShjeGFwaS5VTktOT1dOX0FDQ09VTlQsIGN4YXBpLlVOS05PV05fUkVHSU9OKSxcbiAgICAgICAgICBNb2RlLkZvclJlYWRpbmcsXG4gICAgICAgIClcbiAgICAgICkuc2RrO1xuICAgICAgZXhwZWN0KChhd2FpdCBzZGtDb25maWcoc2RrKS5jcmVkZW50aWFscygpKS5hY2Nlc3NLZXlJZCkudG9FcXVhbCh1bmlxKCdhY2Nlc3MnKSk7XG4gICAgICBleHBlY3QoKGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpKS5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnMTExMTEnKSk7XG4gICAgICBleHBlY3Qoc2RrLmN1cnJlbnRSZWdpb24pLnRvRXF1YWwoJ2V1LWJsYS01Jyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdwYXNzaW5nIHByb2ZpbGUgc2tpcHMgRW52aXJvbm1lbnRDcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBjYWxscyA9IGplc3Quc3B5T24oY29uc29sZSwgJ2RlYnVnJyk7XG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgIGZvbzogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2FjY2VzcycsICRhY2NvdW50OiAnMTExMTEnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnZm9vJyk7XG4gICAgICBhd2FpdCBwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpO1xuICAgICAgLy8gT25seSBjcmVkZW50aWFsLXByb3ZpZGVyLWluaSBpcyB1c2VkLlxuICAgICAgZXhwZWN0KGNhbGxzKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gICAgICBleHBlY3QoY2FsbHMubW9jay5jYWxsc1swXSkudG9FcXVhbChbJ0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pIC0gZnJvbUluaSddKTtcbiAgICAgIGV4cGVjdChjYWxscy5tb2NrLmNhbGxzWzFdKS50b0VxdWFsKFsnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbmkgLSByZXNvbHZlU3RhdGljQ3JlZGVudGlhbHMnXSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzdXBwb3J0cyBwcm9maWxlIHNwcmVhZCBvdmVyIGNvbmZpZ19maWxlIGFuZCBjcmVkZW50aWFsc19maWxlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gV0hFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICBmb286IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb29jY2VzcycsICRhY2NvdW50OiAnMjIyMjInIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdkZWZhdWx0JzogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICAgICAncHJvZmlsZSBmb28nOiB7IHJlZ2lvbjogJ2V1LXdlc3QtMScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKCdmb28nKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRSZWdpb24pLnRvRXF1YWwoJ2V1LXdlc3QtMScpO1xuICAgICAgYXdhaXQgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCkpLnJlc29sdmVzLnRvRXF1YWwoeyBhY2NvdW50SWQ6IHVuaXEoJzIyMjIyJyksIHBhcnRpdGlvbjogJ2F3cycgfSk7XG5cbiAgICAgIGNvbnN0IHNkayA9IChhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnMjIyMjInKSksIE1vZGUuRm9yUmVhZGluZykpLnNkaztcbiAgICAgIGV4cGVjdCgoYXdhaXQgc2RrQ29uZmlnKHNkaykuY3JlZGVudGlhbHMoKSkuYWNjZXNzS2V5SWQpLnRvRXF1YWwodW5pcSgnZm9vY2Nlc3MnKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzdXBwb3J0cyBwcm9maWxlIG9ubHkgaW4gY29uZmlnX2ZpbGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBXSEVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAnZGVmYXVsdCc6IHsgcmVnaW9uOiAnZXUtYmxhLTUnIH0sXG4gICAgICAgICAgJ3Byb2ZpbGUgZm9vJzogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2Zvb2NjZXNzJywgJGFjY291bnQ6ICcyMjIyMicgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKCdmb28nKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRSZWdpb24pLnRvRXF1YWwoJ2V1LWJsYS01Jyk7IC8vIEZhbGwgYmFjayB0byBkZWZhdWx0IGNvbmZpZ1xuICAgICAgYXdhaXQgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCkpLnJlc29sdmVzLnRvRXF1YWwoeyBhY2NvdW50SWQ6IHVuaXEoJzIyMjIyJyksIHBhcnRpdGlvbjogJ2F3cycgfSk7XG5cbiAgICAgIGNvbnN0IHNkayA9IChhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnMjIyMjInKSksIE1vZGUuRm9yUmVhZGluZykpLnNkaztcbiAgICAgIGV4cGVjdCgoYXdhaXQgc2RrQ29uZmlnKHNkaykuY3JlZGVudGlhbHMoKSkuYWNjZXNzS2V5SWQpLnRvRXF1YWwodW5pcSgnZm9vY2Nlc3MnKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjYW4gYXNzdW1lLXJvbGUgY29uZmlndXJlZCBpbiBjb25maWcnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgamVzdC5zcHlPbihjb25zb2xlLCAnZGVidWcnKTtcbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgYXNzdW1lcjogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2Fzc3VtZXInLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAnZGVmYXVsdCc6IHsgcmVnaW9uOiAnZXUtYmxhLTUnIH0sXG4gICAgICAgICAgJ3Byb2ZpbGUgYXNzdW1lcic6IHsgcmVnaW9uOiAndXMtZWFzdC0yJyB9LFxuICAgICAgICAgICdwcm9maWxlIGFzc3VtYWJsZSc6IHtcbiAgICAgICAgICAgIHJvbGVfYXJuOiAnYXJuOmF3czppYW06OjY2NjY2OnJvbGUvQXNzdW1hYmxlJyxcbiAgICAgICAgICAgIHNvdXJjZV9wcm9maWxlOiAnYXNzdW1lcicsXG4gICAgICAgICAgICAkYWNjb3VudDogJzY2NjY2JyxcbiAgICAgICAgICAgICRmYWtlU3RzT3B0aW9uczogeyBhbGxvd2VkQWNjb3VudHM6IFsnMTExMTEnXSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnYXNzdW1hYmxlJyk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHNkayA9IChhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnNjY2NjYnKSksIE1vZGUuRm9yUmVhZGluZykpLnNkaztcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KChhd2FpdCBzZGsuY3VycmVudEFjY291bnQoKSkuYWNjb3VudElkKS50b0VxdWFsKHVuaXEoJzY2NjY2JykpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY2FuIGFzc3VtZSByb2xlIGV2ZW4gaWYgW2RlZmF1bHRdIHByb2ZpbGUgaXMgbWlzc2luZycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgIGFzc3VtZXI6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdhc3N1bWVyJywgJGFjY291bnQ6ICcyMjIyMicgfSxcbiAgICAgICAgICBhc3N1bWFibGU6IHtcbiAgICAgICAgICAgIHJvbGVfYXJuOiAnYXJuOmF3czppYW06OjEyMzU2Nzg5MDEyOnJvbGUvQXNzdW1hYmxlJyxcbiAgICAgICAgICAgIHNvdXJjZV9wcm9maWxlOiAnYXNzdW1lcicsXG4gICAgICAgICAgICAkYWNjb3VudDogJzIyMjIyJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAncHJvZmlsZSBhc3N1bWFibGUnOiB7IHJlZ2lvbjogJ2V1LWJsYS01JyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnYXNzdW1hYmxlJyk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdCgoYXdhaXQgcHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKSk/LmFjY291bnRJZCkudG9FcXVhbCh1bmlxKCcyMjIyMicpKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHByb3ZpZGVyc0Zvck1mYSA9IFtcbiAgICAgICgoKSA9PiBwcm92aWRlckZyb21Qcm9maWxlKCdtZmEtcm9sZScpKSxcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIFRoZSBwcm9maWxlIGlzIG5vdCBwYXNzZWQgZXhwbGljaXRseS4gU2hvdWxkIGJlIHBpY2tlZCBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICAgICAgICBwcm9jZXNzLmVudi5BV1NfUFJPRklMRSA9ICdtZmEtcm9sZSc7XG4gICAgICAgIC8vIEF3YWl0aW5nIHRvIG1ha2Ugc3VyZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgb25seSBkZWxldGVkIGFmdGVyIGl0J3MgdXNlZFxuICAgICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IFNka1Byb3ZpZGVyLndpdGhBd3NDbGlDb21wYXRpYmxlRGVmYXVsdHMoeyBsb2dnZXI6IGNvbnNvbGUgfSk7XG4gICAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5BV1NfUFJPRklMRTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwcm92aWRlcik7XG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgdGVzdC5lYWNoKHByb3ZpZGVyc0Zvck1mYSkoJ21mYV9zZXJpYWwgaW4gcHJvZmlsZSB3aWxsIGFzayB1c2VyIGZvciB0b2tlbicsIGFzeW5jIChtZXRhUHJvdmlkZXI6ICgpID0+IFByb21pc2U8U2RrUHJvdmlkZXI+KSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgbW9ja1Byb21wdCA9IGplc3Quc3B5T24ocHJvbXB0bHksICdwcm9tcHQnKS5tb2NrUmVzb2x2ZWRWYWx1ZSgnMTIzNCcpO1xuXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgIGFzc3VtZXI6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdhc3N1bWVyJywgJGFjY291bnQ6ICc2NjY2NicgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgJ2RlZmF1bHQnOiB7IHJlZ2lvbjogJ2V1LWJsYS01JyB9LFxuICAgICAgICAgICdwcm9maWxlIGFzc3VtZXInOiB7IHJlZ2lvbjogJ3VzLWVhc3QtMicgfSxcbiAgICAgICAgICAncHJvZmlsZSBtZmEtcm9sZSc6IHtcbiAgICAgICAgICAgIHJvbGVfYXJuOiAnYXJuOmF3czppYW06OjY2NjY2OnJvbGUvQXNzdW1hYmxlJyxcbiAgICAgICAgICAgIHNvdXJjZV9wcm9maWxlOiAnYXNzdW1lcicsXG4gICAgICAgICAgICBtZmFfc2VyaWFsOiAnYXJuOmF3czppYW06OmFjY291bnQ6bWZhL3VzZXInLFxuICAgICAgICAgICAgJGFjY291bnQ6ICc2NjY2NicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IG1ldGFQcm92aWRlcigpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBjb25zdCBzZGsgPSAoYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzY2NjY2JykpLCBNb2RlLkZvclJlYWRpbmcpKS5zZGs7XG4gICAgICBleHBlY3QoKGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpKS5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnNjY2NjYnKSk7XG4gICAgICBleHBlY3QobW9ja1NUU0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kV2l0aChBc3N1bWVSb2xlQ29tbWFuZCwge1xuICAgICAgICBSb2xlQXJuOiAnYXJuOmF3czppYW06OjY2NjY2OnJvbGUvQXNzdW1hYmxlJyxcbiAgICAgICAgU2VyaWFsTnVtYmVyOiAnYXJuOmF3czppYW06OmFjY291bnQ6bWZhL3VzZXInLFxuICAgICAgICBUb2tlbkNvZGU6ICcxMjM0JyxcbiAgICAgICAgUm9sZVNlc3Npb25OYW1lOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIE1GQSBtb2NrIHdhcyBjYWxsZWQgZHVyaW5nIHRoaXMgdGVzdCwgb25seSBvbmNlXG4gICAgICAvLyAoQ3JlZGVudGlhbHMgbmVlZCB0byByZW1haW4gY2FjaGVkKVxuICAgICAgZXhwZWN0KG1vY2tQcm9tcHQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gRm9yIERlZmF1bHRTeW50aGVzaXMgd2Ugd2lsbCBkbyBhbiBhc3N1bWUtcm9sZSBhZnRlciBoYXZpbmcgZ290dGVuIGJhc2UgY3JlZGVudGlhbHNcbiAgZGVzY3JpYmUoJ3doZW4gQ0RLIEFzc3VtZVJvbGVzJywgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgLy8gQWxsIHRoZXNlIHRlc3RzIHNoYXJlIHRoYXQgJ2Fybjphd3M6cm9sZScgaXMgYSByb2xlIGludG8gYWNjb3VudCA4ODg4OCB3aGljaCBjYW4gYmUgYXNzdW1lZCBmcm9tIDExMTExXG4gICAgICBmYWtlU3RzLnJlZ2lzdGVyUm9sZSh1bmlxKCc4ODg4OCcpLCAnYXJuOmF3czpyb2xlJywgeyBhbGxvd2VkQWNjb3VudHM6IFt1bmlxKCcxMTExMScpXSB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2Vycm9yIHdlIGdldCBmcm9tIGFzc3VtaW5nIGEgcm9sZSBpcyB1c2VmdWwnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2ZvbycgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja1NUU0NsaWVudC5vbihBc3N1bWVSb2xlQ29tbWFuZCkucmVqZWN0c09uY2UoJ2RvZXNub3RleGlzdC5yb2xlLmFybicpO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHByb21pc2UgPSBleGVyY2lzZUNyZWRlbnRpYWxzKHByb3ZpZGVyLCBlbnYodW5pcSgnODg4ODgnKSksIE1vZGUuRm9yUmVhZGluZywge1xuICAgICAgICBhc3N1bWVSb2xlQXJuOiAnZG9lc25vdGV4aXN0LnJvbGUuYXJuJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUSEVOIC0gZXJyb3IgbWVzc2FnZSBjb250YWlucyBib3RoIGEgaGVscGZ1bCBoaW50IGFuZCB0aGUgdW5kZXJseWluZyBBc3N1bWVSb2xlIG1lc3NhZ2VcbiAgICAgIGF3YWl0IGV4cGVjdChwcm9taXNlKS5yZWplY3RzLnRvVGhyb3coJyhyZSktYm9vdHN0cmFwIHRoZSBlbnZpcm9ubWVudCcpO1xuICAgICAgYXdhaXQgZXhwZWN0KHByb21pc2UpLnJlamVjdHMudG9UaHJvdygnZG9lc25vdGV4aXN0LnJvbGUuYXJuJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdhc3N1bWluZyBhIHJvbGUgc2FuaXRpemVzIHRoZSB1c2VybmFtZSBpbnRvIHRoZSBzZXNzaW9uIG5hbWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgLy8gZmFrZVN0cyxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2ZvbycsICRhY2NvdW50OiAnMTExMTEnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgd2l0aE1vY2tlZChvcywgJ3VzZXJJbmZvJywgYXN5bmMgKHVzZXJJbmZvKSA9PiB7XG4gICAgICAgIHVzZXJJbmZvLm1vY2tSZXR1cm5WYWx1ZSh7IHVzZXJuYW1lOiAnc2vDpWwnLCB1aWQ6IDEsIGdpZDogMSwgaG9tZWRpcjogJy9oZXJlJywgc2hlbGw6ICcvYmluL3NoJyB9KTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgICAgIGNvbnN0IHNkayA9IChcbiAgICAgICAgICBhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnODg4ODgnKSksIE1vZGUuRm9yUmVhZGluZywgeyBhc3N1bWVSb2xlQXJuOiAnYXJuOmF3czpyb2xlJyB9KVxuICAgICAgICApLnNkayBhcyBTREs7XG4gICAgICAgIGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpO1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgZXhwZWN0KG1vY2tTVFNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFdpdGgoQXNzdW1lUm9sZUNvbW1hbmQsIHtcbiAgICAgICAgICBSb2xlQXJuOiAnYXJuOmF3czpyb2xlJyxcbiAgICAgICAgICBSb2xlU2Vzc2lvbk5hbWU6ICdhd3MtY2RrLXNrQGwnLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnc2Vzc2lvbiB0YWdzIGNhbiBiZSBwYXNzZWQgd2hlbiBhc3N1bWluZyBhIHJvbGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2ZvbycsICRhY2NvdW50OiAnMTExMTEnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgd2l0aE1vY2tlZChvcywgJ3VzZXJJbmZvJywgYXN5bmMgKHVzZXJJbmZvKSA9PiB7XG4gICAgICAgIHVzZXJJbmZvLm1vY2tSZXR1cm5WYWx1ZSh7IHVzZXJuYW1lOiAnc2vDpWwnLCB1aWQ6IDEsIGdpZDogMSwgaG9tZWRpcjogJy9oZXJlJywgc2hlbGw6ICcvYmluL3NoJyB9KTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgICAgIGNvbnN0IHNkayA9IChcbiAgICAgICAgICBhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnODg4ODgnKSksIE1vZGUuRm9yUmVhZGluZywge1xuICAgICAgICAgICAgYXNzdW1lUm9sZUFybjogJ2Fybjphd3M6cm9sZScsXG4gICAgICAgICAgICBhc3N1bWVSb2xlRXh0ZXJuYWxJZDogJ2JydWgnLFxuICAgICAgICAgICAgYXNzdW1lUm9sZUFkZGl0aW9uYWxPcHRpb25zOiB7XG4gICAgICAgICAgICAgIFRhZ3M6IFt7IEtleTogJ0RlcGFydG1lbnQnLCBWYWx1ZTogJ0VuZ2luZWVyaW5nJyB9XSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKS5zZGsgYXMgU0RLO1xuICAgICAgICBhd2FpdCBzZGsuY3VycmVudEFjY291bnQoKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGV4cGVjdChtb2NrU1RTQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRXaXRoKEFzc3VtZVJvbGVDb21tYW5kLCB7XG4gICAgICAgICAgVGFnczogW3sgS2V5OiAnRGVwYXJ0bWVudCcsIFZhbHVlOiAnRW5naW5lZXJpbmcnIH1dLFxuICAgICAgICAgIFRyYW5zaXRpdmVUYWdLZXlzOiBbJ0RlcGFydG1lbnQnXSxcbiAgICAgICAgICBSb2xlQXJuOiAnYXJuOmF3czpyb2xlJyxcbiAgICAgICAgICBFeHRlcm5hbElkOiAnYnJ1aCcsXG4gICAgICAgICAgUm9sZVNlc3Npb25OYW1lOiAnYXdzLWNkay1za0BsJyxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2Fzc3VtaW5nIGEgcm9sZSBkb2VzIG5vdCBmYWlsIHdoZW4gT1MgdXNlcm5hbWUgY2Fubm90IGJlIHJlYWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgLy8gZmFrZVN0cyxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2ZvbycsICRhY2NvdW50OiAnMTExMTEnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgd2l0aE1vY2tlZChvcywgJ3VzZXJJbmZvJywgYXN5bmMgKHVzZXJJbmZvKSA9PiB7XG4gICAgICAgIHVzZXJJbmZvLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG4gICAgICAgICAgLy8gU3lzdGVtRXJyb3IgdGhyb3duIGFzIGRvY3VtZW50ZWQ6IGh0dHBzOi8vbm9kZWpzLm9yZy9kb2NzL2xhdGVzdC12MTYueC9hcGkvb3MuaHRtbCNvc3VzZXJpbmZvb3B0aW9uc1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU3lzdGVtRXJyb3Igb24gTGludXg6IHV2X29zX2dldF9wYXNzd2QgcmV0dXJuZWQgRU5PRU5ULiBTZWUgIzE5NDAxIGlzc3VlLicpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgICAgIGF3YWl0IGV4ZXJjaXNlQ3JlZGVudGlhbHMocHJvdmlkZXIsIGVudih1bmlxKCc4ODg4OCcpKSwgTW9kZS5Gb3JSZWFkaW5nLCB7IGFzc3VtZVJvbGVBcm46ICdhcm46YXdzOnJvbGUnIH0pO1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgZXhwZWN0KG1vY2tTVFNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFdpdGgoQXNzdW1lUm9sZUNvbW1hbmQsIHtcbiAgICAgICAgICBSb2xlQXJuOiAnYXJuOmF3czpyb2xlJyxcbiAgICAgICAgICBSb2xlU2Vzc2lvbk5hbWU6ICdhd3MtY2RrLW5vbmFtZScsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdldmVuIGlmIGN1cnJlbnQgY3JlZGVudGlhbHMgYXJlIGZvciB0aGUgd3JvbmcgYWNjb3VudCwgd2Ugd2lsbCBzdGlsbCB1c2UgdGhlbSB0byBBc3N1bWVSb2xlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIC8vIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb28nLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3Qgc2RrID0gKFxuICAgICAgICBhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnODg4ODgnKSksIE1vZGUuRm9yUmVhZGluZywgeyBhc3N1bWVSb2xlQXJuOiAnYXJuOmF3czpyb2xlJyB9KVxuICAgICAgKS5zZGsgYXMgU0RLO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoKGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpKS5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnODg4ODgnKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdpZiBBc3N1bWVSb2xlIGZhaWxzIGJ1dCBjdXJyZW50IGNyZWRlbnRpYWxzIGFyZSBmb3IgdGhlIHJpZ2h0IGFjY291bnQsIHdlIHdpbGwgc3RpbGwgdXNlIHRoZW0nLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgLy8gZmFrZVN0cyxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2ZvbycsICRhY2NvdW50OiAnODg4ODgnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBXSEVOIC0gYXNzdW1lUm9sZSBmYWlscyBiZWNhdXNlIHRoZSByb2xlIGNhbiBvbmx5IGJlIGFzc3VtZWQgZnJvbSBhY2NvdW50IDExMTExXG4gICAgICBjb25zdCBzZGsgPSAoXG4gICAgICAgIGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCc4ODg4OCcpKSwgTW9kZS5Gb3JSZWFkaW5nLCB7IGFzc3VtZVJvbGVBcm46ICdhcm46YXdzOnJvbGUnIH0pXG4gICAgICApLnNkayBhcyBTREs7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdCgoYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCkpLmFjY291bnRJZCkudG9FcXVhbCh1bmlxKCc4ODg4OCcpKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2lmIEFzc3VtZVJvbGUgZmFpbHMgYmVjYXVzZSBvZiBFeHBpcmVkVG9rZW4sIHRoZW4gZmFpbCBjb21wbGV0ZWx5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIC8vIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb28nLCAkYWNjb3VudDogJzg4ODg4JyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignVG9vIGxhdGUnKTtcbiAgICAgIGVycm9yLm5hbWUgPSAnRXhwaXJlZFRva2VuJztcbiAgICAgIG1vY2tTVFNDbGllbnQub24oQXNzdW1lUm9sZUNvbW1hbmQpLnJlamVjdHNPbmNlKGVycm9yKTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBXSEVOIC0gYXNzdW1lUm9sZSBmYWlscyB3aXRoIGEgc3BlY2lmaWMgZXJyb3JcbiAgICAgIGF3YWl0IGV4cGVjdChleGVyY2lzZUNyZWRlbnRpYWxzKHByb3ZpZGVyLCBlbnYodW5pcSgnODg4ODgnKSksIE1vZGUuRm9yUmVhZGluZywgeyBhc3N1bWVSb2xlQXJuOiAnPEZBSUw6RXhwaXJlZFRva2VuPicgfSkpXG4gICAgICAgIC5yZWplY3RzLnRvVGhyb3coZXJyb3IpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUGx1Z2lucycsICgpID0+IHtcbiAgICB0ZXN0KCdkb2VzIG5vdCB1c2UgcGx1Z2lucyBpZiBjdXJyZW50IGNyZWRlbnRpYWxzIGFyZSBmb3IgZXhwZWN0ZWQgYWNjb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb28nLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcbiAgICAgIGF3YWl0IGV4ZXJjaXNlQ3JlZGVudGlhbHMocHJvdmlkZXIsIGVudih1bmlxKCcxMTExMScpKSk7XG4gICAgICBleHBlY3QocGx1Z2luUXVlcmllZCkudG9FcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd1c2VzIHBsdWdpbiBmb3IgYWNjb3VudCA5OTk5OScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuICAgICAgYXdhaXQgZXhlcmNpc2VDcmVkZW50aWFscyhwcm92aWRlciwgZW52KHVuaXEoJzk5OTk5JykpKTtcbiAgICAgIGV4cGVjdChwbHVnaW5RdWVyaWVkKS50b0VxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY2FuIGFzc3VtZSByb2xlIHdpdGggY3JlZGVudGlhbHMgZnJvbSBwbHVnaW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBmYWtlU3RzLnJlZ2lzdGVyUm9sZSh1bmlxKCc5OTk5OScpLCAnYXJuOmF3czppYW06Ojk5OTk5OnJvbGUvQXNzdW1hYmxlJyk7XG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuICAgICAgYXdhaXQgZXhlcmNpc2VDcmVkZW50aWFscyhwcm92aWRlciwgZW52KHVuaXEoJzk5OTk5JykpLCBNb2RlLkZvclJlYWRpbmcsIHtcbiAgICAgICAgYXNzdW1lUm9sZUFybjogJ2Fybjphd3M6aWFtOjo5OTk5OTpyb2xlL0Fzc3VtYWJsZScsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHBsdWdpblF1ZXJpZWQpLnRvRXF1YWwodHJ1ZSk7XG4gICAgICBleHBlY3QobW9ja1NUU0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kV2l0aChBc3N1bWVSb2xlQ29tbWFuZCwge1xuICAgICAgICBSb2xlQXJuOiAnYXJuOmF3czppYW06Ojk5OTk5OnJvbGUvQXNzdW1hYmxlJyxcbiAgICAgICAgUm9sZVNlc3Npb25OYW1lOiBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZXZlbiBpZiBBc3N1bWVSb2xlIGZhaWxzIGJ1dCBjdXJyZW50IGNyZWRlbnRpYWxzIGFyZSBmcm9tIGEgcGx1Z2luLCB3ZSB3aWxsIHN0aWxsIHVzZSB0aGVtJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBzZGsgPSAoXG4gICAgICAgIGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCc5OTk5OScpKSwgTW9kZS5Gb3JSZWFkaW5nLCB7IGFzc3VtZVJvbGVBcm46ICdkb2VzOm5vdDpleGlzdCcgfSlcbiAgICAgICkuc2RrO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoKGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpKS5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnOTk5OTknKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdwbHVnaW5zIGFyZSBzdGlsbCBxdWVyaWVkIGV2ZW4gaWYgY3VycmVudCBjcmVkZW50aWFscyBhcmUgZXhwaXJlZCAob3Igb3RoZXJ3aXNlIGludmFsaWQpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IGFjY291bnQgPSB1bmlxKCcxMTExMScpO1xuICAgICAgbW9ja1NUU0NsaWVudC5vbihHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQpLnJlc29sdmVzKHtcbiAgICAgICAgQWNjb3VudDogYWNjb3VudCxcbiAgICAgICAgQXJuOiAnYXJuOmF3cy1oZXJlJyxcbiAgICAgIH0pO1xuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiBgJHt1aWR9YWtpZGAsICRhY2NvdW50OiAnMTExMTEnLCAkZmFrZVN0c09wdGlvbnM6IHsgcGFydGl0aW9uOiAnYXdzLWhlcmUnIH0gfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgcHJvY2Vzcy5lbnYuQVdTX0FDQ0VTU19LRVlfSUQgPSBgJHt1aWR9YWtpZGA7XG4gICAgICBwcm9jZXNzLmVudi5BV1NfU0VDUkVUX0FDQ0VTU19LRVkgPSAnc2Vrcml0JztcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCBleGVyY2lzZUNyZWRlbnRpYWxzKHByb3ZpZGVyLCBlbnYodW5pcSgnOTk5OTknKSkpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QocGx1Z2luUXVlcmllZCkudG9FcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3N1cHBvcnQgZm9yIGNyZWRlbnRpYWxfc291cmNlJywgKCkgPT4ge1xuICAgIHRlc3QoJ2NhbiBhc3N1bWUgcm9sZSB3aXRoIGVjcyBjcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBjYWxscyA9IGplc3Quc3B5T24oY29uc29sZSwgJ2RlYnVnJyk7XG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAncHJvZmlsZSBlY3MnOiB7XG4gICAgICAgICAgICByb2xlX2FybjogJ2Fybjphd3M6aWFtOjoxMjM1Njc4OTAxMjpyb2xlL0Fzc3VtYWJsZScsXG4gICAgICAgICAgICBjcmVkZW50aWFsX3NvdXJjZTogJ0Vjc0NvbnRhaW5lcicsXG4gICAgICAgICAgICAkYWNjb3VudDogJzIyMjIyJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnZWNzJyk7XG4gICAgICBhd2FpdCBwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoY2FsbHMubW9jay5jYWxscykudG9Db250YWluRXF1YWwoW1xuICAgICAgICAnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbmkgLSBmaW5kaW5nIGNyZWRlbnRpYWwgcmVzb2x2ZXIgdXNpbmcgcHJvZmlsZT1bZWNzXScsXG4gICAgICBdKTtcbiAgICAgIGV4cGVjdChjYWxscy5tb2NrLmNhbGxzKS50b0NvbnRhaW5FcXVhbChbJ0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pIC0gY3JlZGVudGlhbF9zb3VyY2UgaXMgRWNzQ29udGFpbmVyJ10pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY2FuIGFzc3VtZSByb2xlIHdpdGggZWMyIGNyZWRlbnRpYWxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IGNhbGxzID0gamVzdC5zcHlPbihjb25zb2xlLCAnZGVidWcnKTtcbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdwcm9maWxlIGVjcyc6IHtcbiAgICAgICAgICAgIHJvbGVfYXJuOiAnYXJuOmF3czppYW06OjEyMzU2Nzg5MDEyOnJvbGUvQXNzdW1hYmxlJyxcbiAgICAgICAgICAgIGNyZWRlbnRpYWxfc291cmNlOiAnRWMySW5zdGFuY2VNZXRhZGF0YScsXG4gICAgICAgICAgICAkYWNjb3VudDogJzIyMjIyJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnZWNzJyk7XG4gICAgICBhd2FpdCBwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoY2FsbHMubW9jay5jYWxscykudG9Db250YWluRXF1YWwoW1xuICAgICAgICAnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbmkgLSBmaW5kaW5nIGNyZWRlbnRpYWwgcmVzb2x2ZXIgdXNpbmcgcHJvZmlsZT1bZWNzXScsXG4gICAgICBdKTtcbiAgICAgIGV4cGVjdChjYWxscy5tb2NrLmNhbGxzKS50b0NvbnRhaW5FcXVhbChbXG4gICAgICAgICdAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaSAtIGNyZWRlbnRpYWxfc291cmNlIGlzIEVjMkluc3RhbmNlTWV0YWRhdGEnLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjYW4gYXNzdW1lIHJvbGUgd2l0aCBlbnYgY3JlZGVudGlhbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgY2FsbHMgPSBqZXN0LnNweU9uKGNvbnNvbGUsICdkZWJ1ZycpO1xuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgJ3Byb2ZpbGUgZWNzJzoge1xuICAgICAgICAgICAgcm9sZV9hcm46ICdhcm46YXdzOmlhbTo6MTIzNTY3ODkwMTI6cm9sZS9Bc3N1bWFibGUnLFxuICAgICAgICAgICAgY3JlZGVudGlhbF9zb3VyY2U6ICdFbnZpcm9ubWVudCcsXG4gICAgICAgICAgICAkYWNjb3VudDogJzIyMjIyJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnZWNzJyk7XG4gICAgICBhd2FpdCBwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoY2FsbHMubW9jay5jYWxscykudG9Db250YWluRXF1YWwoW1xuICAgICAgICAnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbmkgLSBmaW5kaW5nIGNyZWRlbnRpYWwgcmVzb2x2ZXIgdXNpbmcgcHJvZmlsZT1bZWNzXScsXG4gICAgICBdKTtcbiAgICAgIGV4cGVjdChjYWxscy5tb2NrLmNhbGxzKS50b0NvbnRhaW5FcXVhbChbJ0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pIC0gY3JlZGVudGlhbF9zb3VyY2UgaXMgRW52aXJvbm1lbnQnXSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdhc3N1bWUgZmFpbHMgd2l0aCB1bnN1cHBvcnRlZCBjcmVkZW50aWFsX3NvdXJjZScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAncHJvZmlsZSBlY3MnOiB7XG4gICAgICAgICAgICByb2xlX2FybjogJ2Fybjphd3M6aWFtOjoxMjM1Njc4OTAxMjpyb2xlL0Fzc3VtYWJsZScsXG4gICAgICAgICAgICBjcmVkZW50aWFsX3NvdXJjZTogJ3Vuc3VwcG9ydGVkJyxcbiAgICAgICAgICAgICRhY2NvdW50OiAnMjIyMjInLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnZWNzJyk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IGFjY291bnQgPSBhd2FpdCBwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoYWNjb3VudD8uYWNjb3VudElkKS50b0VxdWFsKHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2RlZmF1bHRBY2NvdW50IHJldHVybnMgdW5kZWZpbmVkIGlmIFNUUyBjYWxsIGZhaWxzJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgbW9ja1NUU0NsaWVudC5vbihBc3N1bWVSb2xlQ29tbWFuZCkucmVqZWN0c09uY2UoJ09vcHMsIGJhZCBzZWtyaXQnKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgIC8vIFRIRU5cbiAgICBhd2FpdCBleHBlY3QocHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKSkucmVzb2x2ZXMudG9CZSh1bmRlZmluZWQpO1xuICB9KTtcblxuICB0ZXN0KCdkZWZhdWx0QWNjb3VudCByZXR1cm5zIHVuZGVmaW5lZCwgZXZlbnQgaWYgU1RTIGNhbGwgZmFpbHMgd2l0aCBFeHBpcmVkVG9rZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignVG9vIGxhdGUnKTtcbiAgICBlcnJvci5uYW1lID0gJ0V4cGlyZWRUb2tlbic7XG4gICAgbW9ja1NUU0NsaWVudC5vbihBc3N1bWVSb2xlQ29tbWFuZCkucmVqZWN0c09uY2UoZXJyb3IpO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgLy8gVEhFTlxuICAgIGF3YWl0IGV4cGVjdChwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpKS5yZXNvbHZlcy50b0JlKHVuZGVmaW5lZCk7XG4gIH0pO1xufSk7XG5cbnRlc3QoJ2RlZmF1bHQgdXNlcmFnZW50IGlzIHJlYXNvbmFibGUnLCAoKSA9PiB7XG4gIGV4cGVjdChkZWZhdWx0Q2xpVXNlckFnZW50KCkpLnRvQ29udGFpbignYXdzLWNkay8nKTtcbn0pO1xuXG4vKipcbiAqIFVzZSBvYmplY3QgaGFja2VyeSB0byBnZXQgdGhlIGNyZWRlbnRpYWxzIG91dCBvZiB0aGUgU0RLIG9iamVjdFxuICovXG5mdW5jdGlvbiBzZGtDb25maWcoc2RrOiBTREspOiBDb25maWd1cmF0aW9uT3B0aW9ucyB7XG4gIHJldHVybiAoc2RrIGFzIGFueSkuY29uZmlnO1xufVxuXG4vKipcbiAqIEZpeHR1cmUgZm9yIFNESyBhdXRoIGZvciB0aGlzIHRlc3Qgc3VpdGVcbiAqXG4gKiBIYXMga25vd2xlZGdlIG9mIHRoZSBjYWNoZSBidXN0ZXIsIHdpbGwgd3JpdGUgcHJvcGVyIGZha2UgY29uZmlnIGZpbGVzIGFuZFxuICogcmVnaXN0ZXIgdXNlcnMgYW5kIHJvbGVzIGluIEZha2VTdHMgYXQgdGhlIHNhbWUgdGltZS5cbiAqL1xuZnVuY3Rpb24gcHJlcGFyZUNyZWRzKG9wdGlvbnM6IFByZXBhcmVDcmVkc09wdGlvbnMpIHtcbiAgZnVuY3Rpb24gY29udmVydFNlY3Rpb25zKHNlY3Rpb25zPzogUmVjb3JkPHN0cmluZywgUHJvZmlsZVVzZXIgfCBQcm9maWxlUm9sZT4pIHtcbiAgICBjb25zdCByZXQgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtwcm9maWxlLCB1c2VyXSBvZiBPYmplY3QuZW50cmllcyhzZWN0aW9ucyA/PyB7fSkpIHtcbiAgICAgIHJldC5wdXNoKGBbJHtwcm9maWxlfV1gKTtcblxuICAgICAgaWYgKGlzUHJvZmlsZVJvbGUodXNlcikpIHtcbiAgICAgICAgcmV0LnB1c2goYHJvbGVfYXJuPSR7dXNlci5yb2xlX2Fybn1gKTtcbiAgICAgICAgaWYgKCdzb3VyY2VfcHJvZmlsZScgaW4gdXNlcikge1xuICAgICAgICAgIHJldC5wdXNoKGBzb3VyY2VfcHJvZmlsZT0ke3VzZXIuc291cmNlX3Byb2ZpbGV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCdjcmVkZW50aWFsX3NvdXJjZScgaW4gdXNlcikge1xuICAgICAgICAgIHJldC5wdXNoKGBjcmVkZW50aWFsX3NvdXJjZT0ke3VzZXIuY3JlZGVudGlhbF9zb3VyY2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXIubWZhX3NlcmlhbCkge1xuICAgICAgICAgIHJldC5wdXNoKGBtZmFfc2VyaWFsPSR7dXNlci5tZmFfc2VyaWFsfWApO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuZmFrZVN0cz8ucmVnaXN0ZXJSb2xlKHVuaXEodXNlci4kYWNjb3VudCA/PyAnMDAwMDAnKSwgdXNlci5yb2xlX2Fybiwge1xuICAgICAgICAgIC4uLnVzZXIuJGZha2VTdHNPcHRpb25zLFxuICAgICAgICAgIGFsbG93ZWRBY2NvdW50czogdXNlci4kZmFrZVN0c09wdGlvbnM/LmFsbG93ZWRBY2NvdW50cz8ubWFwKHVuaXEpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh1c2VyLmF3c19hY2Nlc3Nfa2V5X2lkKSB7XG4gICAgICAgICAgcmV0LnB1c2goYGF3c19hY2Nlc3Nfa2V5X2lkPSR7dW5pcSh1c2VyLmF3c19hY2Nlc3Nfa2V5X2lkKX1gKTtcbiAgICAgICAgICByZXQucHVzaCgnYXdzX3NlY3JldF9hY2Nlc3Nfa2V5PXNlY3JldCcpO1xuICAgICAgICAgIG9wdGlvbnMuZmFrZVN0cz8ucmVnaXN0ZXJVc2VyKFxuICAgICAgICAgICAgdW5pcSh1c2VyLiRhY2NvdW50ID8/ICcwMDAwMCcpLFxuICAgICAgICAgICAgdW5pcSh1c2VyLmF3c19hY2Nlc3Nfa2V5X2lkKSxcbiAgICAgICAgICAgIHVzZXIuJGZha2VTdHNPcHRpb25zLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHVzZXIucmVnaW9uKSB7XG4gICAgICAgIHJldC5wdXNoKGByZWdpb249JHt1c2VyLnJlZ2lvbn1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldC5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGJvY2tmcyh7XG4gICAgJy9ob21lL21lLy5ieHQvY3JlZGVudGlhbHMnOiBjb252ZXJ0U2VjdGlvbnMob3B0aW9ucy5jcmVkZW50aWFscyksXG4gICAgJy9ob21lL21lLy5ieHQvY29uZmlnJzogY29udmVydFNlY3Rpb25zKG9wdGlvbnMuY29uZmlnKSxcbiAgfSk7XG5cbiAgLy8gU2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHdlIHdhbnRcbiAgcHJvY2Vzcy5lbnYuQVdTX0NPTkZJR19GSUxFID0gYm9ja2ZzLnBhdGgoJy9ob21lL21lLy5ieHQvY29uZmlnJyk7XG4gIHByb2Nlc3MuZW52LkFXU19TSEFSRURfQ1JFREVOVElBTFNfRklMRSA9IGJvY2tmcy5wYXRoKCcvaG9tZS9tZS8uYnh0L2NyZWRlbnRpYWxzJyk7XG59XG5cbmludGVyZmFjZSBQcmVwYXJlQ3JlZHNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdyaXRlIHRoZSBhd3MvY3JlZGVudGlhbHMgZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbHM/OiBSZWNvcmQ8c3RyaW5nLCBQcm9maWxlVXNlciB8IFByb2ZpbGVSb2xlPjtcblxuICAvKipcbiAgICogV3JpdGUgdGhlIGF3cy9jb25maWcgZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnPzogUmVjb3JkPHN0cmluZywgUHJvZmlsZVVzZXIgfCBQcm9maWxlUm9sZT47XG5cbiAgLyoqXG4gICAqIElmIGdpdmVuLCBhZGQgdXNlcnMgdG8gRmFrZVNUU1xuICAgKi9cbiAgcmVhZG9ubHkgZmFrZVN0cz86IEZha2VTdHM7XG59XG5cbmludGVyZmFjZSBQcm9maWxlVXNlciB7XG4gIHJlYWRvbmx5IGF3c19hY2Nlc3Nfa2V5X2lkPzogc3RyaW5nO1xuICByZWFkb25seSAkYWNjb3VudD86IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuICByZWFkb25seSAkZmFrZVN0c09wdGlvbnM/OiBSZWdpc3RlclVzZXJPcHRpb25zO1xufVxuXG50eXBlIFByb2ZpbGVSb2xlID0ge1xuICByZWFkb25seSByb2xlX2Fybjogc3RyaW5nO1xuICByZWFkb25seSBtZmFfc2VyaWFsPzogc3RyaW5nO1xuICByZWFkb25seSAkYWNjb3VudDogc3RyaW5nO1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5ICRmYWtlU3RzT3B0aW9ucz86IFJlZ2lzdGVyUm9sZU9wdGlvbnM7XG59ICYgKHsgcmVhZG9ubHkgc291cmNlX3Byb2ZpbGU6IHN0cmluZyB9IHwgeyByZWFkb25seSBjcmVkZW50aWFsX3NvdXJjZTogc3RyaW5nIH0pO1xuXG5mdW5jdGlvbiBpc1Byb2ZpbGVSb2xlKHg6IFByb2ZpbGVVc2VyIHwgUHJvZmlsZVJvbGUpOiB4IGlzIFByb2ZpbGVSb2xlIHtcbiAgcmV0dXJuICdyb2xlX2FybicgaW4geDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvdmlkZXJGcm9tUHJvZmlsZShwcm9maWxlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgcmV0dXJuIFNka1Byb3ZpZGVyLndpdGhBd3NDbGlDb21wYXRpYmxlRGVmYXVsdHMoeyBwcm9maWxlLCBsb2dnZXI6IGNvbnNvbGUgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZXJjaXNlQ3JlZGVudGlhbHMocHJvdmlkZXI6IFNka1Byb3ZpZGVyLCBlOiBjeGFwaS5FbnZpcm9ubWVudCwgbW9kZTogTW9kZSA9IE1vZGUuRm9yUmVhZGluZyxcbiAgb3B0aW9ucz86IENyZWRlbnRpYWxzT3B0aW9ucykge1xuICBjb25zdCBzZGsgPSBhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlLCBtb2RlLCBvcHRpb25zKTtcbiAgYXdhaXQgc2RrLnNkay5jdXJyZW50QWNjb3VudCgpO1xufVxuIl19
678
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLXByb3ZpZGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzZGstcHJvdmlkZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlCQUF5QjtBQUN6Qiw4REFBa0Q7QUFDbEQseUNBQXlDO0FBQ3pDLG9EQUFrRjtBQUNsRixxQ0FBcUM7QUFDckMsNkJBQTZCO0FBQzdCLHlDQUErRTtBQUMvRSxxREFBb0c7QUFDcEcsZ0ZBQTRFO0FBQzVFLGtFQUF3RTtBQUN4RSxpREFBa0Q7QUFDbEQsb0RBQWlEO0FBQ2pELCtDQUEwRDtBQUMxRCxrQ0FBcUM7QUFDckMsK0NBQTJFO0FBRTNFLElBQUksc0JBQXNCLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUU1QixJQUFJLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtJQUM5QyxPQUFPO1FBQ0wsZUFBZSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUU7WUFDakQsT0FBTztnQkFDTCxrQkFBa0IsRUFBRSxzQkFBc0I7Z0JBQzFDLE9BQU8sRUFBRSxXQUFXO2FBQ3JCLENBQUM7UUFDSixDQUFDLENBQUM7S0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLEdBQVcsQ0FBQztBQUNoQixJQUFJLGFBQXNCLENBQUM7QUFFM0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtJQUNkLGlCQUFpQjtJQUNqQiwyQ0FBMkM7SUFDM0MsRUFBRTtJQUNGLGlEQUFpRDtJQUNqRCwrQ0FBK0M7SUFDL0MsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDdkIsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUV0QixJQUFBLCtCQUFxQixFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRS9CLG1CQUFVLENB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QUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1RCxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCB7IGJvY2tmcyB9IGZyb20gJ0Bhd3MtY2RrL2Nkay1idWlsZC10b29scyc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgQXNzdW1lUm9sZUNvbW1hbmQsIEdldENhbGxlcklkZW50aXR5Q29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zdHMnO1xuaW1wb3J0ICogYXMgcHJvbXB0bHkgZnJvbSAncHJvbXB0bHknO1xuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcbmltcG9ydCB7IEZha2VTdHMsIFJlZ2lzdGVyUm9sZU9wdGlvbnMsIFJlZ2lzdGVyVXNlck9wdGlvbnMgfSBmcm9tICcuL2Zha2Utc3RzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25PcHRpb25zLCBDcmVkZW50aWFsc09wdGlvbnMsIFNESywgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9saWIvYXBpL2F3cy1hdXRoJztcbmltcG9ydCB7IEF3c0NsaUNvbXBhdGlibGUgfSBmcm9tICcuLi8uLi9saWIvYXBpL2F3cy1hdXRoL2F3c2NsaS1jb21wYXRpYmxlJztcbmltcG9ydCB7IGRlZmF1bHRDbGlVc2VyQWdlbnQgfSBmcm9tICcuLi8uLi9saWIvYXBpL2F3cy1hdXRoL3VzZXItYWdlbnQnO1xuaW1wb3J0IHsgUGx1Z2luSG9zdCB9IGZyb20gJy4uLy4uL2xpYi9hcGkvcGx1Z2luJztcbmltcG9ydCB7IE1vZGUgfSBmcm9tICcuLi8uLi9saWIvYXBpL3BsdWdpbi9tb2RlJztcbmltcG9ydCB7IHNldElvTWVzc2FnZVRocmVzaG9sZCB9IGZyb20gJy4uLy4uL2xpYi9sb2dnaW5nJztcbmltcG9ydCB7IHdpdGhNb2NrZWQgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IG1vY2tTVFNDbGllbnQsIHJlc3RvcmVTZGtNb2Nrc1RvRGVmYXVsdCB9IGZyb20gJy4uL3V0aWwvbW9jay1zZGsnO1xuXG5sZXQgbW9ja0ZldGNoTWV0YWRhdGFUb2tlbiA9IGplc3QuZm4oKTtcbmxldCBtb2NrUmVxdWVzdCA9IGplc3QuZm4oKTtcblxuamVzdC5tb2NrKCdAYXdzLXNkay9lYzItbWV0YWRhdGEtc2VydmljZScsICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBNZXRhZGF0YVNlcnZpY2U6IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmV0Y2hNZXRhZGF0YVRva2VuOiBtb2NrRmV0Y2hNZXRhZGF0YVRva2VuLFxuICAgICAgICByZXF1ZXN0OiBtb2NrUmVxdWVzdCxcbiAgICAgIH07XG4gICAgfSksXG4gIH07XG59KTtcblxubGV0IHVpZDogc3RyaW5nO1xubGV0IHBsdWdpblF1ZXJpZWQ6IGJvb2xlYW47XG5cbmJlZm9yZUVhY2goKCkgPT4ge1xuICAvLyBDYWNoZSBidXN0ZXJzIVxuICAvLyBXZSBwcmVmaXggZXZlcnl0aGluZyB3aXRoIFVVSURzIGJlY2F1c2U6XG4gIC8vXG4gIC8vIC0gV2UgaGF2ZSBhIGNhY2hlIGZyb20gYWNjb3VudCMgLT4gY3JlZGVudGlhbHNcbiAgLy8gLSBXZSBoYXZlIGEgY2FjaGUgZnJvbSBhY2Nlc3Mga2V5IC0+IGFjY291bnRcbiAgdWlkID0gYCgke3V1aWQudjQoKX0pYDtcbiAgcGx1Z2luUXVlcmllZCA9IGZhbHNlO1xuXG4gIHNldElvTWVzc2FnZVRocmVzaG9sZCgndHJhY2UnKTtcblxuICBQbHVnaW5Ib3N0Lmluc3RhbmNlLmNyZWRlbnRpYWxQcm92aWRlclNvdXJjZXMuc3BsaWNlKDApO1xuICBQbHVnaW5Ib3N0Lmluc3RhbmNlLmNyZWRlbnRpYWxQcm92aWRlclNvdXJjZXMucHVzaCh7XG4gICAgaXNBdmFpbGFibGUoKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgIH0sXG4gICAgY2FuUHJvdmlkZUNyZWRlbnRpYWxzKGFjY291bnQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYWNjb3VudCA9PT0gdW5pcSgnOTk5OTknKSk7XG4gICAgfSxcbiAgICBnZXRQcm92aWRlcigpIHtcbiAgICAgIHBsdWdpblF1ZXJpZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgIGFjY2Vzc0tleUlkOiBgJHt1aWR9cGx1Z2luX2tleWAsXG4gICAgICAgIHNlY3JldEFjY2Vzc0tleTogJ3BsdWdpbl9zZWNyZXQnLFxuICAgICAgICBzZXNzaW9uVG9rZW46ICdwbHVnaW5fdG9rZW4nLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBuYW1lOiAndGVzdCBwbHVnaW4nLFxuICB9KTtcblxuICAvLyBNYWtlIHN1cmUgdGhlc2UgcG9pbnQgdG8gbm9uZXhpc3RhbnQgZmlsZXMgdG8gc3RhcnQsIGlmIHdlIGRvbid0IGNhbGxcbiAgLy8gcHJlcGFyZSgpIHRoZW4gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHdhbnQgdG8gZmFsbCBiYWNrIHRvIHN5c3RlbSBjb25maWcuXG4gIHByb2Nlc3MuZW52LkFXU19DT05GSUdfRklMRSA9ICcvZGV2L251bGwnO1xuICBwcm9jZXNzLmVudi5BV1NfU0hBUkVEX0NSRURFTlRJQUxTX0ZJTEUgPSAnL2Rldi9udWxsJztcblxuICBqZXN0LmNsZWFyQWxsTW9ja3MoKTtcbiAgcmVzdG9yZVNka01vY2tzVG9EZWZhdWx0KCk7XG59KTtcblxuYWZ0ZXJFYWNoKCgpID0+IHtcbiAgYm9ja2ZzLnJlc3RvcmUoKTtcbiAgamVzdC5yZXN0b3JlQWxsTW9ja3MoKTtcbn0pO1xuXG5mdW5jdGlvbiB1bmlxKGFjY291bnQ6IHN0cmluZykge1xuICByZXR1cm4gYCR7dWlkfSR7YWNjb3VudH1gO1xufVxuXG5mdW5jdGlvbiBlbnYoYWNjb3VudDogc3RyaW5nKSB7XG4gIHJldHVybiBjeGFwaS5FbnZpcm9ubWVudFV0aWxzLm1ha2UoYWNjb3VudCwgJ2RlZicpO1xufVxuXG5kZXNjcmliZSgnd2l0aCBpbnRlcmNlcHRlZCBuZXR3b3JrIGNhbGxzJywgKCkgPT4ge1xuICAvLyBNb3N0IHRlc3RzIHdpbGwgdXNlIGludGVyY2VwdGVkIG5ldHdvcmsgY2FsbHMsIGV4Y2VwdCBvbmUgdGVzdCB0aGF0IHRlc3RzXG4gIC8vIHRoYXQgdGhlIHJpZ2h0IEhUVFAgYEFnZW50YCBpcyB1c2VkLlxuXG4gIGxldCBmYWtlU3RzOiBGYWtlU3RzO1xuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBmYWtlU3RzID0gbmV3IEZha2VTdHMoKTtcbiAgICBmYWtlU3RzLmJlZ2luKCk7XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlIEtleUlEIHJldHVybmVkIGJ5IHRoZSBwbHVnaW4gaXMgcmVjb2duaXplZFxuICAgIGZha2VTdHMucmVnaXN0ZXJVc2VyKHVuaXEoJzk5OTk5JyksIHVuaXEoJ3BsdWdpbl9rZXknKSk7XG4gICAgbW9ja1JlcXVlc3QgPSBqZXN0LmZuKCkubW9ja1Jlc29sdmVkVmFsdWUoSlNPTi5zdHJpbmdpZnkoeyByZWdpb246IHVuZGVmaW5lZCB9KSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgZmFrZVN0cy5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIC8vIFNldCBvZiB0ZXN0cyB3aGVyZSB0aGUgQ0RLIHdpbGwgbm90IHRyaWdnZXIgYXNzdW1lLXJvbGVcbiAgLy8gKHRoZSBJTkkgZmlsZSBtaWdodCBzdGlsbCBkbyBhc3N1bWUtcm9sZSlcbiAgZGVzY3JpYmUoJ3doZW4gQ0RLIGRvZXMgbm90IEFzc3VtZVJvbGUnLCAoKSA9PiB7XG4gICAgdGVzdCgndXNlcyBkZWZhdWx0IGNyZWRlbnRpYWxzIGJ5IGRlZmF1bHQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBhY2NvdW50ID0gdW5pcSgnMTExMTEnKTtcbiAgICAgIG1vY2tTVFNDbGllbnQub24oR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kKS5yZXNvbHZlcyh7XG4gICAgICAgIEFjY291bnQ6IGFjY291bnQsXG4gICAgICAgIEFybjogJ2Fybjphd3MtaGVyZScsXG4gICAgICB9KTtcbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2FjY2VzcycsICRhY2NvdW50OiAnMTExMTEnLCAkZmFrZVN0c09wdGlvbnM6IHsgcGFydGl0aW9uOiAnYXdzLWhlcmUnIH0gfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChwcm92aWRlci5kZWZhdWx0UmVnaW9uKS50b0VxdWFsKCdldS1ibGEtNScpO1xuICAgICAgYXdhaXQgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCkpLnJlc29sdmVzLnRvRXF1YWwoeyBhY2NvdW50SWQ6IGFjY291bnQsIHBhcnRpdGlvbjogJ2F3cy1oZXJlJyB9KTtcblxuICAgICAgLy8gQXNrIGZvciBhIGRpZmZlcmVudCByZWdpb25cbiAgICAgIGNvbnN0IHNkayA9IChhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudCh7IC4uLmVudihhY2NvdW50KSwgcmVnaW9uOiAncmduJyB9LCBNb2RlLkZvclJlYWRpbmcpKS5zZGs7XG4gICAgICBleHBlY3QoKGF3YWl0IHNka0NvbmZpZyhzZGspLmNyZWRlbnRpYWxzKCkpLmFjY2Vzc0tleUlkKS50b0VxdWFsKHVuaXEoJ2FjY2VzcycpKTtcbiAgICAgIGV4cGVjdChzZGsuY3VycmVudFJlZ2lvbikudG9FcXVhbCgncmduJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0aHJvd3MgaWYgbm8gY3JlZGVudGlhbHMgY291bGQgYmUgZm91bmQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBhY2NvdW50ID0gdW5pcSgnMTExMTEnKTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuICAgICAgYXdhaXQgZXhwZWN0KGV4ZXJjaXNlQ3JlZGVudGlhbHMocHJvdmlkZXIsIHsgLi4uZW52KGFjY291bnQpLCByZWdpb246ICdyZ24nIH0pKVxuICAgICAgICAucmVqZWN0c1xuICAgICAgICAudG9UaHJvdygvTmVlZCB0byBwZXJmb3JtIEFXUyBjYWxscyBmb3IgYWNjb3VudCAuKiwgYnV0IG5vIGNyZWRlbnRpYWxzIGhhdmUgYmVlbiBjb25maWd1cmVkLCBhbmQgbm9uZSBvZiB0aGVzZSBwbHVnaW5zIGZvdW5kIGFueS8pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnbm8gYmFzZSBjcmVkZW50aWFscyBwYXJ0aXRpb24gaWYgdG9rZW4gaXMgZXhwaXJlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGFjY291bnQgPSB1bmlxKCcxMTExMScpO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ0V4cGlyZWQgVG9rZW4nKTtcbiAgICAgIGVycm9yLm5hbWUgPSAnRXhwaXJlZFRva2VuJztcbiAgICAgIGNvbnN0IGlkZW50aXR5UHJvdmlkZXIgPSAoKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICBjb25zdCBwcm92aWRlciA9IG5ldyBTZGtQcm92aWRlcihpZGVudGl0eVByb3ZpZGVyLCAncmduJyk7XG4gICAgICBjb25zdCBjcmVkcyA9IGF3YWl0IHByb3ZpZGVyLmJhc2VDcmVkZW50aWFsc1BhcnRpdGlvbih7IC4uLmVudihhY2NvdW50KSwgcmVnaW9uOiAncmduJyB9LCBNb2RlLkZvclJlYWRpbmcpO1xuXG4gICAgICBleHBlY3QoY3JlZHMpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Rocm93cyBpZiBwcm9maWxlIGNyZWRlbnRpYWxzIGFyZSBub3QgZm9yIHRoZSByaWdodCBhY2NvdW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gV0hFTlxuICAgICAgamVzdC5zcHlPbihBd3NDbGlDb21wYXRpYmxlLCAncmVnaW9uJykubW9ja1Jlc29sdmVkVmFsdWUoJ3VzLWVhc3QtMTIzJyk7XG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAncHJvZmlsZSBib28nOiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnYWNjZXNzJywgJGFjY291bnQ6ICcxMTExMScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKCdib28nKTtcblxuICAgICAgYXdhaXQgZXhwZWN0KGV4ZXJjaXNlQ3JlZGVudGlhbHMocHJvdmlkZXIsIGVudih1bmlxKCdzb21lX2FjY291bnRfIycpKSkpLnJlamVjdHMudG9UaHJvdyhcbiAgICAgICAgJ05lZWQgdG8gcGVyZm9ybSBBV1MgY2FsbHMnLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3VzZSBwcm9maWxlIGFjY3QvcmVnaW9uIGlmIGFnbm9zdGljIGVudiByZXF1ZXN0ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBXSEVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdhY2Nlc3MnLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IHJlZ2lvbjogJ2V1LWJsYS01JyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgY29uc3Qgc2RrID0gKFxuICAgICAgICBhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChcbiAgICAgICAgICBjeGFwaS5FbnZpcm9ubWVudFV0aWxzLm1ha2UoY3hhcGkuVU5LTk9XTl9BQ0NPVU5ULCBjeGFwaS5VTktOT1dOX1JFR0lPTiksXG4gICAgICAgICAgTW9kZS5Gb3JSZWFkaW5nLFxuICAgICAgICApXG4gICAgICApLnNkaztcbiAgICAgIGV4cGVjdCgoYXdhaXQgc2RrQ29uZmlnKHNkaykuY3JlZGVudGlhbHMoKSkuYWNjZXNzS2V5SWQpLnRvRXF1YWwodW5pcSgnYWNjZXNzJykpO1xuICAgICAgZXhwZWN0KChhd2FpdCBzZGsuY3VycmVudEFjY291bnQoKSkuYWNjb3VudElkKS50b0VxdWFsKHVuaXEoJzExMTExJykpO1xuICAgICAgZXhwZWN0KHNkay5jdXJyZW50UmVnaW9uKS50b0VxdWFsKCdldS1ibGEtNScpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncGFzc2luZyBwcm9maWxlIHNraXBzIEVudmlyb25tZW50Q3JlZGVudGlhbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgY2FsbHMgPSBqZXN0LnNweU9uKGNvbnNvbGUsICdkZWJ1ZycpO1xuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICBmb286IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdhY2Nlc3MnLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2ZvbycpO1xuICAgICAgYXdhaXQgcHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKTtcbiAgICAgIC8vIE9ubHkgY3JlZGVudGlhbC1wcm92aWRlci1pbmkgaXMgdXNlZC5cbiAgICAgIGV4cGVjdChjYWxscykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgICAgZXhwZWN0KGNhbGxzLm1vY2suY2FsbHNbMF0pLnRvRXF1YWwoWydAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaSAtIGZyb21JbmknXSk7XG4gICAgICBleHBlY3QoY2FsbHMubW9jay5jYWxsc1sxXSkudG9FcXVhbChbJ0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pIC0gcmVzb2x2ZVN0YXRpY0NyZWRlbnRpYWxzJ10pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnc3VwcG9ydHMgcHJvZmlsZSBzcHJlYWQgb3ZlciBjb25maWdfZmlsZSBhbmQgY3JlZGVudGlhbHNfZmlsZScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgZm9vOiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnZm9vY2Nlc3MnLCAkYWNjb3VudDogJzIyMjIyJyB9LFxuICAgICAgICB9LFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAnZGVmYXVsdCc6IHsgcmVnaW9uOiAnZXUtYmxhLTUnIH0sXG4gICAgICAgICAgJ3Byb2ZpbGUgZm9vJzogeyByZWdpb246ICdldS13ZXN0LTEnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnZm9vJyk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChwcm92aWRlci5kZWZhdWx0UmVnaW9uKS50b0VxdWFsKCdldS13ZXN0LTEnKTtcbiAgICAgIGF3YWl0IGV4cGVjdChwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpKS5yZXNvbHZlcy50b0VxdWFsKHsgYWNjb3VudElkOiB1bmlxKCcyMjIyMicpLCBwYXJ0aXRpb246ICdhd3MnIH0pO1xuXG4gICAgICBjb25zdCBzZGsgPSAoYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzIyMjIyJykpLCBNb2RlLkZvclJlYWRpbmcpKS5zZGs7XG4gICAgICBleHBlY3QoKGF3YWl0IHNka0NvbmZpZyhzZGspLmNyZWRlbnRpYWxzKCkpLmFjY2Vzc0tleUlkKS50b0VxdWFsKHVuaXEoJ2Zvb2NjZXNzJykpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnc3VwcG9ydHMgcHJvZmlsZSBvbmx5IGluIGNvbmZpZ19maWxlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gV0hFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgJ2RlZmF1bHQnOiB7IHJlZ2lvbjogJ2V1LWJsYS01JyB9LFxuICAgICAgICAgICdwcm9maWxlIGZvbyc6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb29jY2VzcycsICRhY2NvdW50OiAnMjIyMjInIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnZm9vJyk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChwcm92aWRlci5kZWZhdWx0UmVnaW9uKS50b0VxdWFsKCdldS1ibGEtNScpOyAvLyBGYWxsIGJhY2sgdG8gZGVmYXVsdCBjb25maWdcbiAgICAgIGF3YWl0IGV4cGVjdChwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpKS5yZXNvbHZlcy50b0VxdWFsKHsgYWNjb3VudElkOiB1bmlxKCcyMjIyMicpLCBwYXJ0aXRpb246ICdhd3MnIH0pO1xuXG4gICAgICBjb25zdCBzZGsgPSAoYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzIyMjIyJykpLCBNb2RlLkZvclJlYWRpbmcpKS5zZGs7XG4gICAgICBleHBlY3QoKGF3YWl0IHNka0NvbmZpZyhzZGspLmNyZWRlbnRpYWxzKCkpLmFjY2Vzc0tleUlkKS50b0VxdWFsKHVuaXEoJ2Zvb2NjZXNzJykpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY2FuIGFzc3VtZS1yb2xlIGNvbmZpZ3VyZWQgaW4gY29uZmlnJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGplc3Quc3B5T24oY29uc29sZSwgJ2RlYnVnJyk7XG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgIGFzc3VtZXI6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdhc3N1bWVyJywgJGFjY291bnQ6ICcxMTExMScgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgJ2RlZmF1bHQnOiB7IHJlZ2lvbjogJ2V1LWJsYS01JyB9LFxuICAgICAgICAgICdwcm9maWxlIGFzc3VtZXInOiB7IHJlZ2lvbjogJ3VzLWVhc3QtMicgfSxcbiAgICAgICAgICAncHJvZmlsZSBhc3N1bWFibGUnOiB7XG4gICAgICAgICAgICByb2xlX2FybjogJ2Fybjphd3M6aWFtOjo2NjY2Njpyb2xlL0Fzc3VtYWJsZScsXG4gICAgICAgICAgICBzb3VyY2VfcHJvZmlsZTogJ2Fzc3VtZXInLFxuICAgICAgICAgICAgJGFjY291bnQ6ICc2NjY2NicsXG4gICAgICAgICAgICAkZmFrZVN0c09wdGlvbnM6IHsgYWxsb3dlZEFjY291bnRzOiBbJzExMTExJ10gfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2Fzc3VtYWJsZScpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBzZGsgPSAoYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzY2NjY2JykpLCBNb2RlLkZvclJlYWRpbmcpKS5zZGs7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdCgoYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCkpLmFjY291bnRJZCkudG9FcXVhbCh1bmlxKCc2NjY2NicpKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhbiBhc3N1bWUgcm9sZSBldmVuIGlmIFtkZWZhdWx0XSBwcm9maWxlIGlzIG1pc3NpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICBhc3N1bWVyOiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnYXNzdW1lcicsICRhY2NvdW50OiAnMjIyMjInIH0sXG4gICAgICAgICAgYXNzdW1hYmxlOiB7XG4gICAgICAgICAgICByb2xlX2FybjogJ2Fybjphd3M6aWFtOjoxMjM1Njc4OTAxMjpyb2xlL0Fzc3VtYWJsZScsXG4gICAgICAgICAgICBzb3VyY2VfcHJvZmlsZTogJ2Fzc3VtZXInLFxuICAgICAgICAgICAgJGFjY291bnQ6ICcyMjIyMicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgJ3Byb2ZpbGUgYXNzdW1hYmxlJzogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2Fzc3VtYWJsZScpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoKGF3YWl0IHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCkpPy5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnMjIyMjInKSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcm92aWRlcnNGb3JNZmEgPSBbXG4gICAgICAoKCkgPT4gcHJvdmlkZXJGcm9tUHJvZmlsZSgnbWZhLXJvbGUnKSksXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBUaGUgcHJvZmlsZSBpcyBub3QgcGFzc2VkIGV4cGxpY2l0bHkuIFNob3VsZCBiZSBwaWNrZWQgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVcbiAgICAgICAgcHJvY2Vzcy5lbnYuQVdTX1BST0ZJTEUgPSAnbWZhLXJvbGUnO1xuICAgICAgICAvLyBBd2FpdGluZyB0byBtYWtlIHN1cmUgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG9ubHkgZGVsZXRlZCBhZnRlciBpdCdzIHVzZWRcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBTZGtQcm92aWRlci53aXRoQXdzQ2xpQ29tcGF0aWJsZURlZmF1bHRzKHsgbG9nZ2VyOiBjb25zb2xlIH0pO1xuICAgICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQVdTX1BST0ZJTEU7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocHJvdmlkZXIpO1xuICAgICAgfSksXG4gICAgXTtcblxuICAgIHRlc3QuZWFjaChwcm92aWRlcnNGb3JNZmEpKCdtZmFfc2VyaWFsIGluIHByb2ZpbGUgd2lsbCBhc2sgdXNlciBmb3IgdG9rZW4nLCBhc3luYyAobWV0YVByb3ZpZGVyOiAoKSA9PiBQcm9taXNlPFNka1Byb3ZpZGVyPikgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IG1vY2tQcm9tcHQgPSBqZXN0LnNweU9uKHByb21wdGx5LCAncHJvbXB0JykubW9ja1Jlc29sdmVkVmFsdWUoJzEyMzQnKTtcblxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICBhc3N1bWVyOiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnYXNzdW1lcicsICRhY2NvdW50OiAnNjY2NjYnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdkZWZhdWx0JzogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICAgICAncHJvZmlsZSBhc3N1bWVyJzogeyByZWdpb246ICd1cy1lYXN0LTInIH0sXG4gICAgICAgICAgJ3Byb2ZpbGUgbWZhLXJvbGUnOiB7XG4gICAgICAgICAgICByb2xlX2FybjogJ2Fybjphd3M6aWFtOjo2NjY2Njpyb2xlL0Fzc3VtYWJsZScsXG4gICAgICAgICAgICBzb3VyY2VfcHJvZmlsZTogJ2Fzc3VtZXInLFxuICAgICAgICAgICAgbWZhX3NlcmlhbDogJ2Fybjphd3M6aWFtOjphY2NvdW50Om1mYS91c2VyJyxcbiAgICAgICAgICAgICRhY2NvdW50OiAnNjY2NjYnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBtZXRhUHJvdmlkZXIoKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgY29uc3Qgc2RrID0gKGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCc2NjY2NicpKSwgTW9kZS5Gb3JSZWFkaW5nKSkuc2RrO1xuICAgICAgZXhwZWN0KChhd2FpdCBzZGsuY3VycmVudEFjY291bnQoKSkuYWNjb3VudElkKS50b0VxdWFsKHVuaXEoJzY2NjY2JykpO1xuICAgICAgZXhwZWN0KG1vY2tTVFNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFdpdGgoQXNzdW1lUm9sZUNvbW1hbmQsIHtcbiAgICAgICAgUm9sZUFybjogJ2Fybjphd3M6aWFtOjo2NjY2Njpyb2xlL0Fzc3VtYWJsZScsXG4gICAgICAgIFNlcmlhbE51bWJlcjogJ2Fybjphd3M6aWFtOjphY2NvdW50Om1mYS91c2VyJyxcbiAgICAgICAgVG9rZW5Db2RlOiAnMTIzNCcsXG4gICAgICAgIFJvbGVTZXNzaW9uTmFtZTogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICB9KTtcblxuICAgICAgLy8gTWFrZSBzdXJlIHRoZSBNRkEgbW9jayB3YXMgY2FsbGVkIGR1cmluZyB0aGlzIHRlc3QsIG9ubHkgb25jZVxuICAgICAgLy8gKENyZWRlbnRpYWxzIG5lZWQgdG8gcmVtYWluIGNhY2hlZClcbiAgICAgIGV4cGVjdChtb2NrUHJvbXB0KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIEZvciBEZWZhdWx0U3ludGhlc2lzIHdlIHdpbGwgZG8gYW4gYXNzdW1lLXJvbGUgYWZ0ZXIgaGF2aW5nIGdvdHRlbiBiYXNlIGNyZWRlbnRpYWxzXG4gIGRlc2NyaWJlKCd3aGVuIENESyBBc3N1bWVSb2xlcycsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIC8vIEFsbCB0aGVzZSB0ZXN0cyBzaGFyZSB0aGF0ICdhcm46YXdzOnJvbGUnIGlzIGEgcm9sZSBpbnRvIGFjY291bnQgODg4ODggd2hpY2ggY2FuIGJlIGFzc3VtZWQgZnJvbSAxMTExMVxuICAgICAgZmFrZVN0cy5yZWdpc3RlclJvbGUodW5pcSgnODg4ODgnKSwgJ2Fybjphd3M6cm9sZScsIHsgYWxsb3dlZEFjY291bnRzOiBbdW5pcSgnMTExMTEnKV0gfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdlcnJvciB3ZSBnZXQgZnJvbSBhc3N1bWluZyBhIHJvbGUgaXMgdXNlZnVsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb28nIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tTVFNDbGllbnQub24oQXNzdW1lUm9sZUNvbW1hbmQpLnJlamVjdHNPbmNlKCdkb2Vzbm90ZXhpc3Qucm9sZS5hcm4nKTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBwcm9taXNlID0gZXhlcmNpc2VDcmVkZW50aWFscyhwcm92aWRlciwgZW52KHVuaXEoJzg4ODg4JykpLCBNb2RlLkZvclJlYWRpbmcsIHtcbiAgICAgICAgYXNzdW1lUm9sZUFybjogJ2RvZXNub3RleGlzdC5yb2xlLmFybicsXG4gICAgICB9KTtcblxuICAgICAgLy8gVEhFTiAtIGVycm9yIG1lc3NhZ2UgY29udGFpbnMgYm90aCBhIGhlbHBmdWwgaGludCBhbmQgdGhlIHVuZGVybHlpbmcgQXNzdW1lUm9sZSBtZXNzYWdlXG4gICAgICBhd2FpdCBleHBlY3QocHJvbWlzZSkucmVqZWN0cy50b1Rocm93KCcocmUpLWJvb3RzdHJhcCB0aGUgZW52aXJvbm1lbnQnKTtcbiAgICAgIGF3YWl0IGV4cGVjdChwcm9taXNlKS5yZWplY3RzLnRvVGhyb3coJ2RvZXNub3RleGlzdC5yb2xlLmFybicpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnYXNzdW1pbmcgYSByb2xlIHNhbml0aXplcyB0aGUgdXNlcm5hbWUgaW50byB0aGUgc2Vzc2lvbiBuYW1lJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIC8vIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb28nLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdpdGhNb2NrZWQob3MsICd1c2VySW5mbycsIGFzeW5jICh1c2VySW5mbykgPT4ge1xuICAgICAgICB1c2VySW5mby5tb2NrUmV0dXJuVmFsdWUoeyB1c2VybmFtZTogJ3Nrw6VsJywgdWlkOiAxLCBnaWQ6IDEsIGhvbWVkaXI6ICcvaGVyZScsIHNoZWxsOiAnL2Jpbi9zaCcgfSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgICBjb25zdCBzZGsgPSAoXG4gICAgICAgICAgYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzg4ODg4JykpLCBNb2RlLkZvclJlYWRpbmcsIHsgYXNzdW1lUm9sZUFybjogJ2Fybjphd3M6cm9sZScgfSlcbiAgICAgICAgKS5zZGsgYXMgU0RLO1xuICAgICAgICBhd2FpdCBzZGsuY3VycmVudEFjY291bnQoKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGV4cGVjdChtb2NrU1RTQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRXaXRoKEFzc3VtZVJvbGVDb21tYW5kLCB7XG4gICAgICAgICAgUm9sZUFybjogJ2Fybjphd3M6cm9sZScsXG4gICAgICAgICAgUm9sZVNlc3Npb25OYW1lOiAnYXdzLWNkay1za0BsJyxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Nlc3Npb24gdGFncyBjYW4gYmUgcGFzc2VkIHdoZW4gYXNzdW1pbmcgYSByb2xlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb28nLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdpdGhNb2NrZWQob3MsICd1c2VySW5mbycsIGFzeW5jICh1c2VySW5mbykgPT4ge1xuICAgICAgICB1c2VySW5mby5tb2NrUmV0dXJuVmFsdWUoeyB1c2VybmFtZTogJ3Nrw6VsJywgdWlkOiAxLCBnaWQ6IDEsIGhvbWVkaXI6ICcvaGVyZScsIHNoZWxsOiAnL2Jpbi9zaCcgfSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgICBjb25zdCBzZGsgPSAoXG4gICAgICAgICAgYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzg4ODg4JykpLCBNb2RlLkZvclJlYWRpbmcsIHtcbiAgICAgICAgICAgIGFzc3VtZVJvbGVBcm46ICdhcm46YXdzOnJvbGUnLFxuICAgICAgICAgICAgYXNzdW1lUm9sZUV4dGVybmFsSWQ6ICdicnVoJyxcbiAgICAgICAgICAgIGFzc3VtZVJvbGVBZGRpdGlvbmFsT3B0aW9uczoge1xuICAgICAgICAgICAgICBUYWdzOiBbeyBLZXk6ICdEZXBhcnRtZW50JywgVmFsdWU6ICdFbmdpbmVlcmluZycgfV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICkuc2RrIGFzIFNESztcbiAgICAgICAgYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICBleHBlY3QobW9ja1NUU0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kV2l0aChBc3N1bWVSb2xlQ29tbWFuZCwge1xuICAgICAgICAgIFRhZ3M6IFt7IEtleTogJ0RlcGFydG1lbnQnLCBWYWx1ZTogJ0VuZ2luZWVyaW5nJyB9XSxcbiAgICAgICAgICBUcmFuc2l0aXZlVGFnS2V5czogWydEZXBhcnRtZW50J10sXG4gICAgICAgICAgUm9sZUFybjogJ2Fybjphd3M6cm9sZScsXG4gICAgICAgICAgRXh0ZXJuYWxJZDogJ2JydWgnLFxuICAgICAgICAgIFJvbGVTZXNzaW9uTmFtZTogJ2F3cy1jZGstc2tAbCcsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdhc3N1bWluZyBhIHJvbGUgZG9lcyBub3QgZmFpbCB3aGVuIE9TIHVzZXJuYW1lIGNhbm5vdCBiZSByZWFkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIC8vIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb28nLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdpdGhNb2NrZWQob3MsICd1c2VySW5mbycsIGFzeW5jICh1c2VySW5mbykgPT4ge1xuICAgICAgICB1c2VySW5mby5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuICAgICAgICAgIC8vIFN5c3RlbUVycm9yIHRocm93biBhcyBkb2N1bWVudGVkOiBodHRwczovL25vZGVqcy5vcmcvZG9jcy9sYXRlc3QtdjE2LngvYXBpL29zLmh0bWwjb3N1c2VyaW5mb29wdGlvbnNcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5c3RlbUVycm9yIG9uIExpbnV4OiB1dl9vc19nZXRfcGFzc3dkIHJldHVybmVkIEVOT0VOVC4gU2VlICMxOTQwMSBpc3N1ZS4nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgICBhd2FpdCBleGVyY2lzZUNyZWRlbnRpYWxzKHByb3ZpZGVyLCBlbnYodW5pcSgnODg4ODgnKSksIE1vZGUuRm9yUmVhZGluZywgeyBhc3N1bWVSb2xlQXJuOiAnYXJuOmF3czpyb2xlJyB9KTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGV4cGVjdChtb2NrU1RTQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRXaXRoKEFzc3VtZVJvbGVDb21tYW5kLCB7XG4gICAgICAgICAgUm9sZUFybjogJ2Fybjphd3M6cm9sZScsXG4gICAgICAgICAgUm9sZVNlc3Npb25OYW1lOiAnYXdzLWNkay1ub25hbWUnLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZXZlbiBpZiBjdXJyZW50IGNyZWRlbnRpYWxzIGFyZSBmb3IgdGhlIHdyb25nIGFjY291bnQsIHdlIHdpbGwgc3RpbGwgdXNlIHRoZW0gdG8gQXNzdW1lUm9sZScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICAvLyBmYWtlU3RzLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnZm9vJywgJGFjY291bnQ6ICcxMTExMScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHNkayA9IChcbiAgICAgICAgYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzg4ODg4JykpLCBNb2RlLkZvclJlYWRpbmcsIHsgYXNzdW1lUm9sZUFybjogJ2Fybjphd3M6cm9sZScgfSlcbiAgICAgICkuc2RrIGFzIFNESztcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KChhd2FpdCBzZGsuY3VycmVudEFjY291bnQoKSkuYWNjb3VudElkKS50b0VxdWFsKHVuaXEoJzg4ODg4JykpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnaWYgQXNzdW1lUm9sZSBmYWlscyBidXQgY3VycmVudCBjcmVkZW50aWFscyBhcmUgZm9yIHRoZSByaWdodCBhY2NvdW50LCB3ZSB3aWxsIHN0aWxsIHVzZSB0aGVtJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIC8vIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb28nLCAkYWNjb3VudDogJzg4ODg4JyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgLy8gV0hFTiAtIGFzc3VtZVJvbGUgZmFpbHMgYmVjYXVzZSB0aGUgcm9sZSBjYW4gb25seSBiZSBhc3N1bWVkIGZyb20gYWNjb3VudCAxMTExMVxuICAgICAgY29uc3Qgc2RrID0gKFxuICAgICAgICBhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnODg4ODgnKSksIE1vZGUuRm9yUmVhZGluZywgeyBhc3N1bWVSb2xlQXJuOiAnYXJuOmF3czpyb2xlJyB9KVxuICAgICAgKS5zZGsgYXMgU0RLO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoKGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpKS5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnODg4ODgnKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdpZiBBc3N1bWVSb2xlIGZhaWxzIGJlY2F1c2Ugb2YgRXhwaXJlZFRva2VuLCB0aGVuIGZhaWwgY29tcGxldGVseScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICAvLyBmYWtlU3RzLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnZm9vJywgJGFjY291bnQ6ICc4ODg4OCcgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ1RvbyBsYXRlJyk7XG4gICAgICBlcnJvci5uYW1lID0gJ0V4cGlyZWRUb2tlbic7XG4gICAgICBtb2NrU1RTQ2xpZW50Lm9uKEFzc3VtZVJvbGVDb21tYW5kKS5yZWplY3RzT25jZShlcnJvcik7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgLy8gV0hFTiAtIGFzc3VtZVJvbGUgZmFpbHMgd2l0aCBhIHNwZWNpZmljIGVycm9yXG4gICAgICBhd2FpdCBleHBlY3QoZXhlcmNpc2VDcmVkZW50aWFscyhwcm92aWRlciwgZW52KHVuaXEoJzg4ODg4JykpLCBNb2RlLkZvclJlYWRpbmcsIHsgYXNzdW1lUm9sZUFybjogJzxGQUlMOkV4cGlyZWRUb2tlbj4nIH0pKVxuICAgICAgICAucmVqZWN0cy50b1Rocm93KGVycm9yKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1BsdWdpbnMnLCAoKSA9PiB7XG4gICAgdGVzdCgnZG9lcyBub3QgdXNlIHBsdWdpbnMgaWYgY3VycmVudCBjcmVkZW50aWFscyBhcmUgZm9yIGV4cGVjdGVkIGFjY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnZm9vJywgJGFjY291bnQ6ICcxMTExMScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG4gICAgICBhd2FpdCBleGVyY2lzZUNyZWRlbnRpYWxzKHByb3ZpZGVyLCBlbnYodW5pcSgnMTExMTEnKSkpO1xuICAgICAgZXhwZWN0KHBsdWdpblF1ZXJpZWQpLnRvRXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndXNlcyBwbHVnaW4gZm9yIGFjY291bnQgOTk5OTknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcbiAgICAgIGF3YWl0IGV4ZXJjaXNlQ3JlZGVudGlhbHMocHJvdmlkZXIsIGVudih1bmlxKCc5OTk5OScpKSk7XG4gICAgICBleHBlY3QocGx1Z2luUXVlcmllZCkudG9FcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhbiBhc3N1bWUgcm9sZSB3aXRoIGNyZWRlbnRpYWxzIGZyb20gcGx1Z2luJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZmFrZVN0cy5yZWdpc3RlclJvbGUodW5pcSgnOTk5OTknKSwgJ2Fybjphd3M6aWFtOjo5OTk5OTpyb2xlL0Fzc3VtYWJsZScpO1xuXG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcbiAgICAgIGF3YWl0IGV4ZXJjaXNlQ3JlZGVudGlhbHMocHJvdmlkZXIsIGVudih1bmlxKCc5OTk5OScpKSwgTW9kZS5Gb3JSZWFkaW5nLCB7XG4gICAgICAgIGFzc3VtZVJvbGVBcm46ICdhcm46YXdzOmlhbTo6OTk5OTk6cm9sZS9Bc3N1bWFibGUnLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChwbHVnaW5RdWVyaWVkKS50b0VxdWFsKHRydWUpO1xuICAgICAgZXhwZWN0KG1vY2tTVFNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFdpdGgoQXNzdW1lUm9sZUNvbW1hbmQsIHtcbiAgICAgICAgUm9sZUFybjogJ2Fybjphd3M6aWFtOjo5OTk5OTpyb2xlL0Fzc3VtYWJsZScsXG4gICAgICAgIFJvbGVTZXNzaW9uTmFtZTogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2V2ZW4gaWYgQXNzdW1lUm9sZSBmYWlscyBidXQgY3VycmVudCBjcmVkZW50aWFscyBhcmUgZnJvbSBhIHBsdWdpbiwgd2Ugd2lsbCBzdGlsbCB1c2UgdGhlbScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuICAgICAgY29uc3Qgc2RrID0gKFxuICAgICAgICBhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnOTk5OTknKSksIE1vZGUuRm9yUmVhZGluZywgeyBhc3N1bWVSb2xlQXJuOiAnZG9lczpub3Q6ZXhpc3QnIH0pXG4gICAgICApLnNkaztcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KChhd2FpdCBzZGsuY3VycmVudEFjY291bnQoKSkuYWNjb3VudElkKS50b0VxdWFsKHVuaXEoJzk5OTk5JykpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncGx1Z2lucyBhcmUgc3RpbGwgcXVlcmllZCBldmVuIGlmIGN1cnJlbnQgY3JlZGVudGlhbHMgYXJlIGV4cGlyZWQgKG9yIG90aGVyd2lzZSBpbnZhbGlkKScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBhY2NvdW50ID0gdW5pcSgnMTExMTEnKTtcbiAgICAgIG1vY2tTVFNDbGllbnQub24oR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kKS5yZXNvbHZlcyh7XG4gICAgICAgIEFjY291bnQ6IGFjY291bnQsXG4gICAgICAgIEFybjogJ2Fybjphd3MtaGVyZScsXG4gICAgICB9KTtcbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyBhd3NfYWNjZXNzX2tleV9pZDogYCR7dWlkfWFraWRgLCAkYWNjb3VudDogJzExMTExJywgJGZha2VTdHNPcHRpb25zOiB7IHBhcnRpdGlvbjogJ2F3cy1oZXJlJyB9IH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgcmVnaW9uOiAnZXUtYmxhLTUnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHByb2Nlc3MuZW52LkFXU19BQ0NFU1NfS0VZX0lEID0gYCR7dWlkfWFraWRgO1xuICAgICAgcHJvY2Vzcy5lbnYuQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZID0gJ3Nla3JpdCc7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgZXhlcmNpc2VDcmVkZW50aWFscyhwcm92aWRlciwgZW52KHVuaXEoJzk5OTk5JykpKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KHBsdWdpblF1ZXJpZWQpLnRvRXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdXBwb3J0IGZvciBjcmVkZW50aWFsX3NvdXJjZScsICgpID0+IHtcbiAgICB0ZXN0KCdjYW4gYXNzdW1lIHJvbGUgd2l0aCBlY3MgY3JlZGVudGlhbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgY2FsbHMgPSBqZXN0LnNweU9uKGNvbnNvbGUsICdkZWJ1ZycpO1xuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgJ3Byb2ZpbGUgZWNzJzoge1xuICAgICAgICAgICAgcm9sZV9hcm46ICdhcm46YXdzOmlhbTo6MTIzNTY3ODkwMTI6cm9sZS9Bc3N1bWFibGUnLFxuICAgICAgICAgICAgY3JlZGVudGlhbF9zb3VyY2U6ICdFY3NDb250YWluZXInLFxuICAgICAgICAgICAgJGFjY291bnQ6ICcyMjIyMicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2VjcycpO1xuICAgICAgYXdhaXQgcHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KGNhbGxzLm1vY2suY2FsbHMpLnRvQ29udGFpbkVxdWFsKFtcbiAgICAgICAgJ0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pIC0gZmluZGluZyBjcmVkZW50aWFsIHJlc29sdmVyIHVzaW5nIHByb2ZpbGU9W2Vjc10nLFxuICAgICAgXSk7XG4gICAgICBleHBlY3QoY2FsbHMubW9jay5jYWxscykudG9Db250YWluRXF1YWwoWydAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaSAtIGNyZWRlbnRpYWxfc291cmNlIGlzIEVjc0NvbnRhaW5lciddKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhbiBhc3N1bWUgcm9sZSB3aXRoIGVjMiBjcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBjYWxscyA9IGplc3Quc3B5T24oY29uc29sZSwgJ2RlYnVnJyk7XG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAncHJvZmlsZSBlY3MnOiB7XG4gICAgICAgICAgICByb2xlX2FybjogJ2Fybjphd3M6aWFtOjoxMjM1Njc4OTAxMjpyb2xlL0Fzc3VtYWJsZScsXG4gICAgICAgICAgICBjcmVkZW50aWFsX3NvdXJjZTogJ0VjMkluc3RhbmNlTWV0YWRhdGEnLFxuICAgICAgICAgICAgJGFjY291bnQ6ICcyMjIyMicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2VjcycpO1xuICAgICAgYXdhaXQgcHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KGNhbGxzLm1vY2suY2FsbHMpLnRvQ29udGFpbkVxdWFsKFtcbiAgICAgICAgJ0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pIC0gZmluZGluZyBjcmVkZW50aWFsIHJlc29sdmVyIHVzaW5nIHByb2ZpbGU9W2Vjc10nLFxuICAgICAgXSk7XG4gICAgICBleHBlY3QoY2FsbHMubW9jay5jYWxscykudG9Db250YWluRXF1YWwoW1xuICAgICAgICAnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbmkgLSBjcmVkZW50aWFsX3NvdXJjZSBpcyBFYzJJbnN0YW5jZU1ldGFkYXRhJyxcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY2FuIGFzc3VtZSByb2xlIHdpdGggZW52IGNyZWRlbnRpYWxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IGNhbGxzID0gamVzdC5zcHlPbihjb25zb2xlLCAnZGVidWcnKTtcbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdwcm9maWxlIGVjcyc6IHtcbiAgICAgICAgICAgIHJvbGVfYXJuOiAnYXJuOmF3czppYW06OjEyMzU2Nzg5MDEyOnJvbGUvQXNzdW1hYmxlJyxcbiAgICAgICAgICAgIGNyZWRlbnRpYWxfc291cmNlOiAnRW52aXJvbm1lbnQnLFxuICAgICAgICAgICAgJGFjY291bnQ6ICcyMjIyMicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2VjcycpO1xuICAgICAgYXdhaXQgcHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KGNhbGxzLm1vY2suY2FsbHMpLnRvQ29udGFpbkVxdWFsKFtcbiAgICAgICAgJ0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pIC0gZmluZGluZyBjcmVkZW50aWFsIHJlc29sdmVyIHVzaW5nIHByb2ZpbGU9W2Vjc10nLFxuICAgICAgXSk7XG4gICAgICBleHBlY3QoY2FsbHMubW9jay5jYWxscykudG9Db250YWluRXF1YWwoWydAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaSAtIGNyZWRlbnRpYWxfc291cmNlIGlzIEVudmlyb25tZW50J10pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnYXNzdW1lIGZhaWxzIHdpdGggdW5zdXBwb3J0ZWQgY3JlZGVudGlhbF9zb3VyY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgJ3Byb2ZpbGUgZWNzJzoge1xuICAgICAgICAgICAgcm9sZV9hcm46ICdhcm46YXdzOmlhbTo6MTIzNTY3ODkwMTI6cm9sZS9Bc3N1bWFibGUnLFxuICAgICAgICAgICAgY3JlZGVudGlhbF9zb3VyY2U6ICd1bnN1cHBvcnRlZCcsXG4gICAgICAgICAgICAkYWNjb3VudDogJzIyMjIyJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2VjcycpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBhY2NvdW50ID0gYXdhaXQgcHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KGFjY291bnQ/LmFjY291bnRJZCkudG9FcXVhbCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdkZWZhdWx0QWNjb3VudCByZXR1cm5zIHVuZGVmaW5lZCBpZiBTVFMgY2FsbCBmYWlscycsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIG1vY2tTVFNDbGllbnQub24oQXNzdW1lUm9sZUNvbW1hbmQpLnJlamVjdHNPbmNlKCdPb3BzLCBiYWQgc2Vrcml0Jyk7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG5cbiAgICAvLyBUSEVOXG4gICAgYXdhaXQgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCkpLnJlc29sdmVzLnRvQmUodW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgdGVzdCgnZGVmYXVsdEFjY291bnQgcmV0dXJucyB1bmRlZmluZWQsIGV2ZW50IGlmIFNUUyBjYWxsIGZhaWxzIHdpdGggRXhwaXJlZFRva2VuJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ1RvbyBsYXRlJyk7XG4gICAgZXJyb3IubmFtZSA9ICdFeHBpcmVkVG9rZW4nO1xuICAgIG1vY2tTVFNDbGllbnQub24oQXNzdW1lUm9sZUNvbW1hbmQpLnJlamVjdHNPbmNlKGVycm9yKTtcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgIC8vIFRIRU5cbiAgICBhd2FpdCBleHBlY3QocHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKSkucmVzb2x2ZXMudG9CZSh1bmRlZmluZWQpO1xuICB9KTtcbn0pO1xuXG50ZXN0KCdkZWZhdWx0IHVzZXJhZ2VudCBpcyByZWFzb25hYmxlJywgKCkgPT4ge1xuICBleHBlY3QoZGVmYXVsdENsaVVzZXJBZ2VudCgpKS50b0NvbnRhaW4oJ2F3cy1jZGsvJyk7XG59KTtcblxuLyoqXG4gKiBVc2Ugb2JqZWN0IGhhY2tlcnkgdG8gZ2V0IHRoZSBjcmVkZW50aWFscyBvdXQgb2YgdGhlIFNESyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gc2RrQ29uZmlnKHNkazogU0RLKTogQ29uZmlndXJhdGlvbk9wdGlvbnMge1xuICByZXR1cm4gKHNkayBhcyBhbnkpLmNvbmZpZztcbn1cblxuLyoqXG4gKiBGaXh0dXJlIGZvciBTREsgYXV0aCBmb3IgdGhpcyB0ZXN0IHN1aXRlXG4gKlxuICogSGFzIGtub3dsZWRnZSBvZiB0aGUgY2FjaGUgYnVzdGVyLCB3aWxsIHdyaXRlIHByb3BlciBmYWtlIGNvbmZpZyBmaWxlcyBhbmRcbiAqIHJlZ2lzdGVyIHVzZXJzIGFuZCByb2xlcyBpbiBGYWtlU3RzIGF0IHRoZSBzYW1lIHRpbWUuXG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVDcmVkcyhvcHRpb25zOiBQcmVwYXJlQ3JlZHNPcHRpb25zKSB7XG4gIGZ1bmN0aW9uIGNvbnZlcnRTZWN0aW9ucyhzZWN0aW9ucz86IFJlY29yZDxzdHJpbmcsIFByb2ZpbGVVc2VyIHwgUHJvZmlsZVJvbGU+KSB7XG4gICAgY29uc3QgcmV0ID0gW107XG4gICAgZm9yIChjb25zdCBbcHJvZmlsZSwgdXNlcl0gb2YgT2JqZWN0LmVudHJpZXMoc2VjdGlvbnMgPz8ge30pKSB7XG4gICAgICByZXQucHVzaChgWyR7cHJvZmlsZX1dYCk7XG5cbiAgICAgIGlmIChpc1Byb2ZpbGVSb2xlKHVzZXIpKSB7XG4gICAgICAgIHJldC5wdXNoKGByb2xlX2Fybj0ke3VzZXIucm9sZV9hcm59YCk7XG4gICAgICAgIGlmICgnc291cmNlX3Byb2ZpbGUnIGluIHVzZXIpIHtcbiAgICAgICAgICByZXQucHVzaChgc291cmNlX3Byb2ZpbGU9JHt1c2VyLnNvdXJjZV9wcm9maWxlfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICgnY3JlZGVudGlhbF9zb3VyY2UnIGluIHVzZXIpIHtcbiAgICAgICAgICByZXQucHVzaChgY3JlZGVudGlhbF9zb3VyY2U9JHt1c2VyLmNyZWRlbnRpYWxfc291cmNlfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1c2VyLm1mYV9zZXJpYWwpIHtcbiAgICAgICAgICByZXQucHVzaChgbWZhX3NlcmlhbD0ke3VzZXIubWZhX3NlcmlhbH1gKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmZha2VTdHM/LnJlZ2lzdGVyUm9sZSh1bmlxKHVzZXIuJGFjY291bnQgPz8gJzAwMDAwJyksIHVzZXIucm9sZV9hcm4sIHtcbiAgICAgICAgICAuLi51c2VyLiRmYWtlU3RzT3B0aW9ucyxcbiAgICAgICAgICBhbGxvd2VkQWNjb3VudHM6IHVzZXIuJGZha2VTdHNPcHRpb25zPy5hbGxvd2VkQWNjb3VudHM/Lm1hcCh1bmlxKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodXNlci5hd3NfYWNjZXNzX2tleV9pZCkge1xuICAgICAgICAgIHJldC5wdXNoKGBhd3NfYWNjZXNzX2tleV9pZD0ke3VuaXEodXNlci5hd3NfYWNjZXNzX2tleV9pZCl9YCk7XG4gICAgICAgICAgcmV0LnB1c2goJ2F3c19zZWNyZXRfYWNjZXNzX2tleT1zZWNyZXQnKTtcbiAgICAgICAgICBvcHRpb25zLmZha2VTdHM/LnJlZ2lzdGVyVXNlcihcbiAgICAgICAgICAgIHVuaXEodXNlci4kYWNjb3VudCA/PyAnMDAwMDAnKSxcbiAgICAgICAgICAgIHVuaXEodXNlci5hd3NfYWNjZXNzX2tleV9pZCksXG4gICAgICAgICAgICB1c2VyLiRmYWtlU3RzT3B0aW9ucyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh1c2VyLnJlZ2lvbikge1xuICAgICAgICByZXQucHVzaChgcmVnaW9uPSR7dXNlci5yZWdpb259YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQuam9pbignXFxuJyk7XG4gIH1cblxuICBib2NrZnMoe1xuICAgICcvaG9tZS9tZS8uYnh0L2NyZWRlbnRpYWxzJzogY29udmVydFNlY3Rpb25zKG9wdGlvbnMuY3JlZGVudGlhbHMpLFxuICAgICcvaG9tZS9tZS8uYnh0L2NvbmZpZyc6IGNvbnZlcnRTZWN0aW9ucyhvcHRpb25zLmNvbmZpZyksXG4gIH0pO1xuXG4gIC8vIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB3ZSB3YW50XG4gIHByb2Nlc3MuZW52LkFXU19DT05GSUdfRklMRSA9IGJvY2tmcy5wYXRoKCcvaG9tZS9tZS8uYnh0L2NvbmZpZycpO1xuICBwcm9jZXNzLmVudi5BV1NfU0hBUkVEX0NSRURFTlRJQUxTX0ZJTEUgPSBib2NrZnMucGF0aCgnL2hvbWUvbWUvLmJ4dC9jcmVkZW50aWFscycpO1xufVxuXG5pbnRlcmZhY2UgUHJlcGFyZUNyZWRzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgYXdzL2NyZWRlbnRpYWxzIGZpbGVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxzPzogUmVjb3JkPHN0cmluZywgUHJvZmlsZVVzZXIgfCBQcm9maWxlUm9sZT47XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRoZSBhd3MvY29uZmlnIGZpbGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZz86IFJlY29yZDxzdHJpbmcsIFByb2ZpbGVVc2VyIHwgUHJvZmlsZVJvbGU+O1xuXG4gIC8qKlxuICAgKiBJZiBnaXZlbiwgYWRkIHVzZXJzIHRvIEZha2VTVFNcbiAgICovXG4gIHJlYWRvbmx5IGZha2VTdHM/OiBGYWtlU3RzO1xufVxuXG5pbnRlcmZhY2UgUHJvZmlsZVVzZXIge1xuICByZWFkb25seSBhd3NfYWNjZXNzX2tleV9pZD86IHN0cmluZztcbiAgcmVhZG9ubHkgJGFjY291bnQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgJGZha2VTdHNPcHRpb25zPzogUmVnaXN0ZXJVc2VyT3B0aW9ucztcbn1cblxudHlwZSBQcm9maWxlUm9sZSA9IHtcbiAgcmVhZG9ubHkgcm9sZV9hcm46IHN0cmluZztcbiAgcmVhZG9ubHkgbWZhX3NlcmlhbD86IHN0cmluZztcbiAgcmVhZG9ubHkgJGFjY291bnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuICByZWFkb25seSAkZmFrZVN0c09wdGlvbnM/OiBSZWdpc3RlclJvbGVPcHRpb25zO1xufSAmICh7IHJlYWRvbmx5IHNvdXJjZV9wcm9maWxlOiBzdHJpbmcgfSB8IHsgcmVhZG9ubHkgY3JlZGVudGlhbF9zb3VyY2U6IHN0cmluZyB9KTtcblxuZnVuY3Rpb24gaXNQcm9maWxlUm9sZSh4OiBQcm9maWxlVXNlciB8IFByb2ZpbGVSb2xlKTogeCBpcyBQcm9maWxlUm9sZSB7XG4gIHJldHVybiAncm9sZV9hcm4nIGluIHg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb3ZpZGVyRnJvbVByb2ZpbGUocHJvZmlsZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gIHJldHVybiBTZGtQcm92aWRlci53aXRoQXdzQ2xpQ29tcGF0aWJsZURlZmF1bHRzKHsgcHJvZmlsZSwgbG9nZ2VyOiBjb25zb2xlIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleGVyY2lzZUNyZWRlbnRpYWxzKHByb3ZpZGVyOiBTZGtQcm92aWRlciwgZTogY3hhcGkuRW52aXJvbm1lbnQsIG1vZGU6IE1vZGUgPSBNb2RlLkZvclJlYWRpbmcsXG4gIG9wdGlvbnM/OiBDcmVkZW50aWFsc09wdGlvbnMpIHtcbiAgY29uc3Qgc2RrID0gYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZSwgbW9kZSwgb3B0aW9ucyk7XG4gIGF3YWl0IHNkay5zZGsuY3VycmVudEFjY291bnQoKTtcbn1cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  /* eslint-disable import/order */
4
- const chalk_1 = require("chalk");
4
+ const chalk = require("chalk");
5
5
  const console_listener_1 = require("./console-listener");
6
6
  const stack_activity_monitor_1 = require("../../lib/api/util/cloudformation/stack-activity-monitor");
7
7
  const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
@@ -31,7 +31,7 @@ test('prints 0/4 progress report, when addActivity is called with an "IN_PROGRES
31
31
  parentStackLogicalIds: [],
32
32
  });
33
33
  });
34
- expect(output[0].trim()).toStrictEqual(`stack-name | 0/4 | ${HUMAN_TIME} | ${(0, chalk_1.reset)('CREATE_IN_PROGRESS ')} | AWS::CloudFormation::Stack | ${(0, chalk_1.reset)((0, chalk_1.bold)('stack1'))}`);
34
+ expect(output[0].trim()).toStrictEqual(`stack-name | 0/4 | ${HUMAN_TIME} | ${chalk.reset('CREATE_IN_PROGRESS ')} | AWS::CloudFormation::Stack | ${chalk.reset(chalk.bold('stack1'))}`);
35
35
  });
36
36
  test('prints 1/4 progress report, when addActivity is called with an "UPDATE_COMPLETE" ResourceStatus', () => {
37
37
  const historyActivityPrinter = new stack_activity_monitor_1.HistoryActivityPrinter({
@@ -53,7 +53,7 @@ test('prints 1/4 progress report, when addActivity is called with an "UPDATE_COM
53
53
  parentStackLogicalIds: [],
54
54
  });
55
55
  });
56
- expect(output[0].trim()).toStrictEqual(`stack-name | 1/4 | ${HUMAN_TIME} | ${(0, chalk_1.green)('UPDATE_COMPLETE ')} | AWS::CloudFormation::Stack | ${(0, chalk_1.green)((0, chalk_1.bold)('stack1'))}`);
56
+ expect(output[0].trim()).toStrictEqual(`stack-name | 1/4 | ${HUMAN_TIME} | ${chalk.green('UPDATE_COMPLETE ')} | AWS::CloudFormation::Stack | ${chalk.green(chalk.bold('stack1'))}`);
57
57
  });
58
58
  test('prints 1/4 progress report, when addActivity is called with an "UPDATE_COMPLETE" ResourceStatus', () => {
59
59
  const historyActivityPrinter = new stack_activity_monitor_1.HistoryActivityPrinter({
@@ -75,7 +75,7 @@ test('prints 1/4 progress report, when addActivity is called with an "UPDATE_COM
75
75
  parentStackLogicalIds: [],
76
76
  });
77
77
  });
78
- expect(output[0].trim()).toStrictEqual(`stack-name | 1/4 | ${HUMAN_TIME} | ${(0, chalk_1.green)('UPDATE_COMPLETE ')} | AWS::CloudFormation::Stack | ${(0, chalk_1.green)((0, chalk_1.bold)('stack1'))}`);
78
+ expect(output[0].trim()).toStrictEqual(`stack-name | 1/4 | ${HUMAN_TIME} | ${chalk.green('UPDATE_COMPLETE ')} | AWS::CloudFormation::Stack | ${chalk.green(chalk.bold('stack1'))}`);
79
79
  });
80
80
  test('prints 1/4 progress report, when addActivity is called with an "ROLLBACK_COMPLETE" ResourceStatus', () => {
81
81
  const historyActivityPrinter = new stack_activity_monitor_1.HistoryActivityPrinter({
@@ -97,7 +97,7 @@ test('prints 1/4 progress report, when addActivity is called with an "ROLLBACK_C
97
97
  parentStackLogicalIds: [],
98
98
  });
99
99
  });
100
- expect(output[0].trim()).toStrictEqual(`stack-name | 1/4 | ${HUMAN_TIME} | ${(0, chalk_1.yellow)('ROLLBACK_COMPLETE ')} | AWS::CloudFormation::Stack | ${(0, chalk_1.yellow)((0, chalk_1.bold)('stack1'))}`);
100
+ expect(output[0].trim()).toStrictEqual(`stack-name | 1/4 | ${HUMAN_TIME} | ${chalk.yellow('ROLLBACK_COMPLETE ')} | AWS::CloudFormation::Stack | ${chalk.yellow(chalk.bold('stack1'))}`);
101
101
  });
102
102
  test('prints 0/4 progress report, when addActivity is called with an "UPDATE_FAILED" ResourceStatus', () => {
103
103
  const historyActivityPrinter = new stack_activity_monitor_1.HistoryActivityPrinter({
@@ -119,7 +119,7 @@ test('prints 0/4 progress report, when addActivity is called with an "UPDATE_FAI
119
119
  parentStackLogicalIds: [],
120
120
  });
121
121
  });
122
- expect(output[0].trim()).toStrictEqual(`stack-name | 0/4 | ${HUMAN_TIME} | ${(0, chalk_1.red)('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${(0, chalk_1.red)((0, chalk_1.bold)('stack1'))}`);
122
+ expect(output[0].trim()).toStrictEqual(`stack-name | 0/4 | ${HUMAN_TIME} | ${chalk.red('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${chalk.red(chalk.bold('stack1'))}`);
123
123
  });
124
124
  test('does not print "Failed Resources:" list, when all deployments are successful', () => {
125
125
  const historyActivityPrinter = new stack_activity_monitor_1.HistoryActivityPrinter({
@@ -167,9 +167,9 @@ test('does not print "Failed Resources:" list, when all deployments are successf
167
167
  historyActivityPrinter.stop();
168
168
  });
169
169
  expect(output.length).toStrictEqual(3);
170
- expect(output[0].trim()).toStrictEqual(`stack-name | 0/2 | ${HUMAN_TIME} | ${(0, chalk_1.reset)('UPDATE_IN_PROGRESS ')} | AWS::CloudFormation::Stack | ${(0, chalk_1.reset)((0, chalk_1.bold)('stack1'))}`);
171
- expect(output[1].trim()).toStrictEqual(`stack-name | 1/2 | ${HUMAN_TIME} | ${(0, chalk_1.green)('UPDATE_COMPLETE ')} | AWS::CloudFormation::Stack | ${(0, chalk_1.green)((0, chalk_1.bold)('stack1'))}`);
172
- expect(output[2].trim()).toStrictEqual(`stack-name | 2/2 | ${HUMAN_TIME} | ${(0, chalk_1.green)('UPDATE_COMPLETE ')} | AWS::CloudFormation::Stack | ${(0, chalk_1.green)((0, chalk_1.bold)('stack2'))}`);
170
+ expect(output[0].trim()).toStrictEqual(`stack-name | 0/2 | ${HUMAN_TIME} | ${chalk.reset('UPDATE_IN_PROGRESS ')} | AWS::CloudFormation::Stack | ${chalk.reset(chalk.bold('stack1'))}`);
171
+ expect(output[1].trim()).toStrictEqual(`stack-name | 1/2 | ${HUMAN_TIME} | ${chalk.green('UPDATE_COMPLETE ')} | AWS::CloudFormation::Stack | ${chalk.green(chalk.bold('stack1'))}`);
172
+ expect(output[2].trim()).toStrictEqual(`stack-name | 2/2 | ${HUMAN_TIME} | ${chalk.green('UPDATE_COMPLETE ')} | AWS::CloudFormation::Stack | ${chalk.green(chalk.bold('stack2'))}`);
173
173
  });
174
174
  test('prints "Failed Resources:" list, when at least one deployment fails', () => {
175
175
  const historyActivityPrinter = new stack_activity_monitor_1.HistoryActivityPrinter({
@@ -205,10 +205,10 @@ test('prints "Failed Resources:" list, when at least one deployment fails', () =
205
205
  historyActivityPrinter.stop();
206
206
  });
207
207
  expect(output.length).toStrictEqual(4);
208
- expect(output[0].trim()).toStrictEqual(`stack-name | 0/2 | ${HUMAN_TIME} | ${(0, chalk_1.reset)('UPDATE_IN_PROGRESS ')} | AWS::CloudFormation::Stack | ${(0, chalk_1.reset)((0, chalk_1.bold)('stack1'))}`);
209
- expect(output[1].trim()).toStrictEqual(`stack-name | 0/2 | ${HUMAN_TIME} | ${(0, chalk_1.red)('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${(0, chalk_1.red)((0, chalk_1.bold)('stack1'))}`);
208
+ expect(output[0].trim()).toStrictEqual(`stack-name | 0/2 | ${HUMAN_TIME} | ${chalk.reset('UPDATE_IN_PROGRESS ')} | AWS::CloudFormation::Stack | ${chalk.reset(chalk.bold('stack1'))}`);
209
+ expect(output[1].trim()).toStrictEqual(`stack-name | 0/2 | ${HUMAN_TIME} | ${chalk.red('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${chalk.red(chalk.bold('stack1'))}`);
210
210
  expect(output[2].trim()).toStrictEqual('Failed resources:');
211
- expect(output[3].trim()).toStrictEqual(`stack-name | ${HUMAN_TIME} | ${(0, chalk_1.red)('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${(0, chalk_1.red)((0, chalk_1.bold)('stack1'))}`);
211
+ expect(output[3].trim()).toStrictEqual(`stack-name | ${HUMAN_TIME} | ${chalk.red('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${chalk.red(chalk.bold('stack1'))}`);
212
212
  });
213
213
  test('print failed resources because of hook failures', () => {
214
214
  const historyActivityPrinter = new stack_activity_monitor_1.HistoryActivityPrinter({
@@ -248,9 +248,9 @@ test('print failed resources because of hook failures', () => {
248
248
  historyActivityPrinter.stop();
249
249
  });
250
250
  expect(output.length).toStrictEqual(4);
251
- expect(output[0].trim()).toStrictEqual(`stack-name | 0/2 | ${HUMAN_TIME} | ${(0, chalk_1.reset)('UPDATE_IN_PROGRESS ')} | AWS::CloudFormation::Stack | ${(0, chalk_1.reset)((0, chalk_1.bold)('stack1'))}`);
252
- expect(output[1].trim()).toStrictEqual(`stack-name | 0/2 | ${HUMAN_TIME} | ${(0, chalk_1.red)('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${(0, chalk_1.red)((0, chalk_1.bold)('stack1'))} ${(0, chalk_1.red)((0, chalk_1.bold)('The following hook(s) failed: hook1 : stack1 must obey certain rules'))}`);
251
+ expect(output[0].trim()).toStrictEqual(`stack-name | 0/2 | ${HUMAN_TIME} | ${chalk.reset('UPDATE_IN_PROGRESS ')} | AWS::CloudFormation::Stack | ${chalk.reset(chalk.bold('stack1'))}`);
252
+ expect(output[1].trim()).toStrictEqual(`stack-name | 0/2 | ${HUMAN_TIME} | ${chalk.red('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${chalk.red(chalk.bold('stack1'))} ${chalk.red(chalk.bold('The following hook(s) failed: hook1 : stack1 must obey certain rules'))}`);
253
253
  expect(output[2].trim()).toStrictEqual('Failed resources:');
254
- expect(output[3].trim()).toStrictEqual(`stack-name | ${HUMAN_TIME} | ${(0, chalk_1.red)('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${(0, chalk_1.red)((0, chalk_1.bold)('stack1'))} ${(0, chalk_1.red)((0, chalk_1.bold)('The following hook(s) failed: hook1 : stack1 must obey certain rules'))}`);
254
+ expect(output[3].trim()).toStrictEqual(`stack-name | ${HUMAN_TIME} | ${chalk.red('UPDATE_FAILED ')} | AWS::CloudFormation::Stack | ${chalk.red(chalk.bold('stack1'))} ${chalk.red(chalk.bold('The following hook(s) failed: hook1 : stack1 must obey certain rules'))}`);
255
255
  });
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stYWN0aXZpdHktbW9uaXRvci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhY2stYWN0aXZpdHktbW9uaXRvci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUNBQWlDO0FBQ2pDLGlDQUF3RDtBQUN4RCx5REFBNEM7QUFDNUMscUdBQWtHO0FBQ2xHLDBFQUFnRTtBQUVoRSxJQUFJLFNBQWlCLENBQUM7QUFDdEIsSUFBSSxVQUFrQixDQUFDO0FBRXZCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7SUFDYixTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQyxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUN4RCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyw2RkFBNkYsRUFBRSxHQUFHLEVBQUU7SUFDdkcsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLCtDQUFzQixDQUFDO1FBQ3hELHVCQUF1QixFQUFFLEVBQUU7UUFDM0IsY0FBYyxFQUFFLENBQUM7UUFDakIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0tBQ3ZCLENBQUMsQ0FBQztJQUVILE1BQU0sTUFBTSxHQUFHLHlCQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtRQUNyQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUM7WUFDakMsS0FBSyxFQUFFO2dCQUNMLGlCQUFpQixFQUFFLFFBQVE7Z0JBQzNCLGNBQWMsRUFBRSxzQ0FBYyxDQUFDLGtCQUFrQjtnQkFDakQsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDOUIsWUFBWSxFQUFFLDRCQUE0QjtnQkFDMUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsU0FBUyxFQUFFLFlBQVk7YUFDeEI7WUFDRCxxQkFBcUIsRUFBRSxFQUFFO1NBQzFCLENBQUMsQ0FB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Q0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L29yZGVyICovXG5pbXBvcnQgeyBib2xkLCByZXNldCwgZ3JlZW4sIHllbGxvdywgcmVkIH0gZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgc3RkZXJyIH0gZnJvbSAnLi9jb25zb2xlLWxpc3RlbmVyJztcbmltcG9ydCB7IEhpc3RvcnlBY3Rpdml0eVByaW50ZXIgfSBmcm9tICcuLi8uLi9saWIvYXBpL3V0aWwvY2xvdWRmb3JtYXRpb24vc3RhY2stYWN0aXZpdHktbW9uaXRvcic7XG5pbXBvcnQgeyBSZXNvdXJjZVN0YXR1cyB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5cbmxldCBUSU1FU1RBTVA6IG51bWJlcjtcbmxldCBIVU1BTl9USU1FOiBzdHJpbmc7XG5cbmJlZm9yZUFsbCgoKSA9PiB7XG4gIFRJTUVTVEFNUCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICBIVU1BTl9USU1FID0gbmV3IERhdGUoVElNRVNUQU1QKS50b0xvY2FsZVRpbWVTdHJpbmcoKTtcbn0pO1xuXG50ZXN0KCdwcmludHMgMC80IHByb2dyZXNzIHJlcG9ydCwgd2hlbiBhZGRBY3Rpdml0eSBpcyBjYWxsZWQgd2l0aCBhbiBcIklOX1BST0dSRVNTXCIgUmVzb3VyY2VTdGF0dXMnLCAoKSA9PiB7XG4gIGNvbnN0IGhpc3RvcnlBY3Rpdml0eVByaW50ZXIgPSBuZXcgSGlzdG9yeUFjdGl2aXR5UHJpbnRlcih7XG4gICAgcmVzb3VyY2VUeXBlQ29sdW1uV2lkdGg6IDIzLFxuICAgIHJlc291cmNlc1RvdGFsOiAzLFxuICAgIHN0cmVhbTogcHJvY2Vzcy5zdGRlcnIsXG4gIH0pO1xuXG4gIGNvbnN0IG91dHB1dCA9IHN0ZGVyci5pbnNwZWN0U3luYygoKSA9PiB7XG4gICAgaGlzdG9yeUFjdGl2aXR5UHJpbnRlci5hZGRBY3Rpdml0eSh7XG4gICAgICBldmVudDoge1xuICAgICAgICBMb2dpY2FsUmVzb3VyY2VJZDogJ3N0YWNrMScsXG4gICAgICAgIFJlc291cmNlU3RhdHVzOiBSZXNvdXJjZVN0YXR1cy5DUkVBVEVfSU5fUFJPR1JFU1MsXG4gICAgICAgIFRpbWVzdGFtcDogbmV3IERhdGUoVElNRVNUQU1QKSxcbiAgICAgICAgUmVzb3VyY2VUeXBlOiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snLFxuICAgICAgICBTdGFja0lkOiAnJyxcbiAgICAgICAgRXZlbnRJZDogJycsXG4gICAgICAgIFN0YWNrTmFtZTogJ3N0YWNrLW5hbWUnLFxuICAgICAgfSxcbiAgICAgIHBhcmVudFN0YWNrTG9naWNhbElkczogW10sXG4gICAgfSk7XG4gIH0pO1xuXG4gIGV4cGVjdChvdXRwdXRbMF0udHJpbSgpKS50b1N0cmljdEVxdWFsKFxuICAgIGBzdGFjay1uYW1lIHwgMC80IHwgJHtIVU1BTl9USU1FfSB8ICR7cmVzZXQoJ0NSRUFURV9JTl9QUk9HUkVTUyAgJyl9IHwgQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2sgfCAke3Jlc2V0KGJvbGQoJ3N0YWNrMScpKX1gLFxuICApO1xufSk7XG5cbnRlc3QoJ3ByaW50cyAxLzQgcHJvZ3Jlc3MgcmVwb3J0LCB3aGVuIGFkZEFjdGl2aXR5IGlzIGNhbGxlZCB3aXRoIGFuIFwiVVBEQVRFX0NPTVBMRVRFXCIgUmVzb3VyY2VTdGF0dXMnLCAoKSA9PiB7XG4gIGNvbnN0IGhpc3RvcnlBY3Rpdml0eVByaW50ZXIgPSBuZXcgSGlzdG9yeUFjdGl2aXR5UHJpbnRlcih7XG4gICAgcmVzb3VyY2VUeXBlQ29sdW1uV2lkdGg6IDIzLFxuICAgIHJlc291cmNlc1RvdGFsOiAzLFxuICAgIHN0cmVhbTogcHJvY2Vzcy5zdGRlcnIsXG4gIH0pO1xuXG4gIGNvbnN0IG91dHB1dCA9IHN0ZGVyci5pbnNwZWN0U3luYygoKSA9PiB7XG4gICAgaGlzdG9yeUFjdGl2aXR5UHJpbnRlci5hZGRBY3Rpdml0eSh7XG4gICAgICBldmVudDoge1xuICAgICAgICBMb2dpY2FsUmVzb3VyY2VJZDogJ3N0YWNrMScsXG4gICAgICAgIFJlc291cmNlU3RhdHVzOiBSZXNvdXJjZVN0YXR1cy5VUERBVEVfQ09NUExFVEUsXG4gICAgICAgIFRpbWVzdGFtcDogbmV3IERhdGUoVElNRVNUQU1QKSxcbiAgICAgICAgUmVzb3VyY2VUeXBlOiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snLFxuICAgICAgICBTdGFja0lkOiAnJyxcbiAgICAgICAgRXZlbnRJZDogJycsXG4gICAgICAgIFN0YWNrTmFtZTogJ3N0YWNrLW5hbWUnLFxuICAgICAgfSxcbiAgICAgIHBhcmVudFN0YWNrTG9naWNhbElkczogW10sXG4gICAgfSk7XG4gIH0pO1xuXG4gIGV4cGVjdChvdXRwdXRbMF0udHJpbSgpKS50b1N0cmljdEVxdWFsKFxuICAgIGBzdGFjay1uYW1lIHwgMS80IHwgJHtIVU1BTl9USU1FfSB8ICR7Z3JlZW4oJ1VQREFURV9DT01QTEVURSAgICAgJyl9IHwgQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2sgfCAke2dyZWVuKGJvbGQoJ3N0YWNrMScpKX1gLFxuICApO1xufSk7XG5cbnRlc3QoJ3ByaW50cyAxLzQgcHJvZ3Jlc3MgcmVwb3J0LCB3aGVuIGFkZEFjdGl2aXR5IGlzIGNhbGxlZCB3aXRoIGFuIFwiVVBEQVRFX0NPTVBMRVRFXCIgUmVzb3VyY2VTdGF0dXMnLCAoKSA9PiB7XG4gIGNvbnN0IGhpc3RvcnlBY3Rpdml0eVByaW50ZXIgPSBuZXcgSGlzdG9yeUFjdGl2aXR5UHJpbnRlcih7XG4gICAgcmVzb3VyY2VUeXBlQ29sdW1uV2lkdGg6IDIzLFxuICAgIHJlc291cmNlc1RvdGFsOiAzLFxuICAgIHN0cmVhbTogcHJvY2Vzcy5zdGRlcnIsXG4gIH0pO1xuXG4gIGNvbnN0IG91dHB1dCA9IHN0ZGVyci5pbnNwZWN0U3luYygoKSA9PiB7XG4gICAgaGlzdG9yeUFjdGl2aXR5UHJpbnRlci5hZGRBY3Rpdml0eSh7XG4gICAgICBldmVudDoge1xuICAgICAgICBMb2dpY2FsUmVzb3VyY2VJZDogJ3N0YWNrMScsXG4gICAgICAgIFJlc291cmNlU3RhdHVzOiBSZXNvdXJjZVN0YXR1cy5VUERBVEVfQ09NUExFVEUsXG4gICAgICAgIFRpbWVzdGFtcDogbmV3IERhdGUoVElNRVNUQU1QKSxcbiAgICAgICAgUmVzb3VyY2VUeXBlOiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snLFxuICAgICAgICBTdGFja0lkOiAnJyxcbiAgICAgICAgRXZlbnRJZDogJycsXG4gICAgICAgIFN0YWNrTmFtZTogJ3N0YWNrLW5hbWUnLFxuICAgICAgfSxcbiAgICAgIHBhcmVudFN0YWNrTG9naWNhbElkczogW10sXG4gICAgfSk7XG4gIH0pO1xuXG4gIGV4cGVjdChvdXRwdXRbMF0udHJpbSgpKS50b1N0cmljdEVxdWFsKFxuICAgIGBzdGFjay1uYW1lIHwgMS80IHwgJHtIVU1BTl9USU1FfSB8ICR7Z3JlZW4oJ1VQREFURV9DT01QTEVURSAgICAgJyl9IHwgQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2sgfCAke2dyZWVuKGJvbGQoJ3N0YWNrMScpKX1gLFxuICApO1xufSk7XG5cbnRlc3QoJ3ByaW50cyAxLzQgcHJvZ3Jlc3MgcmVwb3J0LCB3aGVuIGFkZEFjdGl2aXR5IGlzIGNhbGxlZCB3aXRoIGFuIFwiUk9MTEJBQ0tfQ09NUExFVEVcIiBSZXNvdXJjZVN0YXR1cycsICgpID0+IHtcbiAgY29uc3QgaGlzdG9yeUFjdGl2aXR5UHJpbnRlciA9IG5ldyBIaXN0b3J5QWN0aXZpdHlQcmludGVyKHtcbiAgICByZXNvdXJjZVR5cGVDb2x1bW5XaWR0aDogMjMsXG4gICAgcmVzb3VyY2VzVG90YWw6IDMsXG4gICAgc3RyZWFtOiBwcm9jZXNzLnN0ZGVycixcbiAgfSk7XG5cbiAgY29uc3Qgb3V0cHV0ID0gc3RkZXJyLmluc3BlY3RTeW5jKCgpID0+IHtcbiAgICBoaXN0b3J5QWN0aXZpdHlQcmludGVyLmFkZEFjdGl2aXR5KHtcbiAgICAgIGV2ZW50OiB7XG4gICAgICAgIExvZ2ljYWxSZXNvdXJjZUlkOiAnc3RhY2sxJyxcbiAgICAgICAgUmVzb3VyY2VTdGF0dXM6IFJlc291cmNlU3RhdHVzLlJPTExCQUNLX0NPTVBMRVRFLFxuICAgICAgICBUaW1lc3RhbXA6IG5ldyBEYXRlKFRJTUVTVEFNUCksXG4gICAgICAgIFJlc291cmNlVHlwZTogJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyxcbiAgICAgICAgU3RhY2tJZDogJycsXG4gICAgICAgIEV2ZW50SWQ6ICcnLFxuICAgICAgICBTdGFja05hbWU6ICdzdGFjay1uYW1lJyxcbiAgICAgIH0sXG4gICAgICBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IFtdLFxuICAgIH0pO1xuICB9KTtcblxuICBleHBlY3Qob3V0cHV0WzBdLnRyaW0oKSkudG9TdHJpY3RFcXVhbChcbiAgICBgc3RhY2stbmFtZSB8IDEvNCB8ICR7SFVNQU5fVElNRX0gfCAke3llbGxvdygnUk9MTEJBQ0tfQ09NUExFVEUgICAnKX0gfCBBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjayB8ICR7eWVsbG93KGJvbGQoJ3N0YWNrMScpKX1gLFxuICApO1xufSk7XG5cbnRlc3QoJ3ByaW50cyAwLzQgcHJvZ3Jlc3MgcmVwb3J0LCB3aGVuIGFkZEFjdGl2aXR5IGlzIGNhbGxlZCB3aXRoIGFuIFwiVVBEQVRFX0ZBSUxFRFwiIFJlc291cmNlU3RhdHVzJywgKCkgPT4ge1xuICBjb25zdCBoaXN0b3J5QWN0aXZpdHlQcmludGVyID0gbmV3IEhpc3RvcnlBY3Rpdml0eVByaW50ZXIoe1xuICAgIHJlc291cmNlVHlwZUNvbHVtbldpZHRoOiAyMyxcbiAgICByZXNvdXJjZXNUb3RhbDogMyxcbiAgICBzdHJlYW06IHByb2Nlc3Muc3RkZXJyLFxuICB9KTtcblxuICBjb25zdCBvdXRwdXQgPSBzdGRlcnIuaW5zcGVjdFN5bmMoKCkgPT4ge1xuICAgIGhpc3RvcnlBY3Rpdml0eVByaW50ZXIuYWRkQWN0aXZpdHkoe1xuICAgICAgZXZlbnQ6IHtcbiAgICAgICAgTG9naWNhbFJlc291cmNlSWQ6ICdzdGFjazEnLFxuICAgICAgICBSZXNvdXJjZVN0YXR1czogUmVzb3VyY2VTdGF0dXMuVVBEQVRFX0ZBSUxFRCxcbiAgICAgICAgVGltZXN0YW1wOiBuZXcgRGF0ZShUSU1FU1RBTVApLFxuICAgICAgICBSZXNvdXJjZVR5cGU6ICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjaycsXG4gICAgICAgIFN0YWNrSWQ6ICcnLFxuICAgICAgICBFdmVudElkOiAnJyxcbiAgICAgICAgU3RhY2tOYW1lOiAnc3RhY2stbmFtZScsXG4gICAgICB9LFxuICAgICAgcGFyZW50U3RhY2tMb2dpY2FsSWRzOiBbXSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgZXhwZWN0KG91dHB1dFswXS50cmltKCkpLnRvU3RyaWN0RXF1YWwoXG4gICAgYHN0YWNrLW5hbWUgfCAwLzQgfCAke0hVTUFOX1RJTUV9IHwgJHtyZWQoJ1VQREFURV9GQUlMRUQgICAgICAgJyl9IHwgQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2sgfCAke3JlZChib2xkKCdzdGFjazEnKSl9YCxcbiAgKTtcbn0pO1xuXG50ZXN0KCdkb2VzIG5vdCBwcmludCBcIkZhaWxlZCBSZXNvdXJjZXM6XCIgbGlzdCwgd2hlbiBhbGwgZGVwbG95bWVudHMgYXJlIHN1Y2Nlc3NmdWwnLCAoKSA9PiB7XG4gIGNvbnN0IGhpc3RvcnlBY3Rpdml0eVByaW50ZXIgPSBuZXcgSGlzdG9yeUFjdGl2aXR5UHJpbnRlcih7XG4gICAgcmVzb3VyY2VUeXBlQ29sdW1uV2lkdGg6IDIzLFxuICAgIHJlc291cmNlc1RvdGFsOiAxLFxuICAgIHN0cmVhbTogcHJvY2Vzcy5zdGRlcnIsXG4gIH0pO1xuXG4gIGNvbnN0IG91dHB1dCA9IHN0ZGVyci5pbnNwZWN0U3luYygoKSA9PiB7XG4gICAgaGlzdG9yeUFjdGl2aXR5UHJpbnRlci5hZGRBY3Rpdml0eSh7XG4gICAgICBldmVudDoge1xuICAgICAgICBMb2dpY2FsUmVzb3VyY2VJZDogJ3N0YWNrMScsXG4gICAgICAgIFJlc291cmNlU3RhdHVzOiBSZXNvdXJjZVN0YXR1cy5VUERBVEVfSU5fUFJPR1JFU1MsXG4gICAgICAgIFRpbWVzdGFtcDogbmV3IERhdGUoVElNRVNUQU1QKSxcbiAgICAgICAgUmVzb3VyY2VUeXBlOiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snLFxuICAgICAgICBTdGFja0lkOiAnJyxcbiAgICAgICAgRXZlbnRJZDogJycsXG4gICAgICAgIFN0YWNrTmFtZTogJ3N0YWNrLW5hbWUnLFxuICAgICAgfSxcbiAgICAgIHBhcmVudFN0YWNrTG9naWNhbElkczogW10sXG4gICAgfSk7XG4gICAgaGlzdG9yeUFjdGl2aXR5UHJpbnRlci5hZGRBY3Rpdml0eSh7XG4gICAgICBldmVudDoge1xuICAgICAgICBMb2dpY2FsUmVzb3VyY2VJZDogJ3N0YWNrMScsXG4gICAgICAgIFJlc291cmNlU3RhdHVzOiBSZXNvdXJjZVN0YXR1cy5VUERBVEVfQ09NUExFVEUsXG4gICAgICAgIFRpbWVzdGFtcDogbmV3IERhdGUoVElNRVNUQU1QKSxcbiAgICAgICAgUmVzb3VyY2VUeXBlOiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snLFxuICAgICAgICBTdGFja0lkOiAnJyxcbiAgICAgICAgRXZlbnRJZDogJycsXG4gICAgICAgIFN0YWNrTmFtZTogJ3N0YWNrLW5hbWUnLFxuICAgICAgfSxcbiAgICAgIHBhcmVudFN0YWNrTG9naWNhbElkczogW10sXG4gICAgfSk7XG4gICAgaGlzdG9yeUFjdGl2aXR5UHJpbnRlci5hZGRBY3Rpdml0eSh7XG4gICAgICBldmVudDoge1xuICAgICAgICBMb2dpY2FsUmVzb3VyY2VJZDogJ3N0YWNrMicsXG4gICAgICAgIFJlc291cmNlU3RhdHVzOiBSZXNvdXJjZVN0YXR1cy5VUERBVEVfQ09NUExFVEUsXG4gICAgICAgIFRpbWVzdGFtcDogbmV3IERhdGUoVElNRVNUQU1QKSxcbiAgICAgICAgUmVzb3VyY2VUeXBlOiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snLFxuICAgICAgICBTdGFja0lkOiAnJyxcbiAgICAgICAgRXZlbnRJZDogJycsXG4gICAgICAgIFN0YWNrTmFtZTogJ3N0YWNrLW5hbWUnLFxuICAgICAgfSxcbiAgICAgIHBhcmVudFN0YWNrTG9naWNhbElkczogW10sXG4gICAgfSk7XG4gICAgaGlzdG9yeUFjdGl2aXR5UHJpbnRlci5zdG9wKCk7XG4gIH0pO1xuXG4gIGV4cGVjdChvdXRwdXQubGVuZ3RoKS50b1N0cmljdEVxdWFsKDMpO1xuICBleHBlY3Qob3V0cHV0WzBdLnRyaW0oKSkudG9TdHJpY3RFcXVhbChcbiAgICBgc3RhY2stbmFtZSB8IDAvMiB8ICR7SFVNQU5fVElNRX0gfCAke3Jlc2V0KCdVUERBVEVfSU5fUFJPR1JFU1MgICcpfSB8IEFXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrIHwgJHtyZXNldChib2xkKCdzdGFjazEnKSl9YCxcbiAgKTtcbiAgZXhwZWN0KG91dHB1dFsxXS50cmltKCkpLnRvU3RyaWN0RXF1YWwoXG4gICAgYHN0YWNrLW5hbWUgfCAxLzIgfCAke0hVTUFOX1RJTUV9IHwgJHtncmVlbignVVBEQVRFX0NPTVBMRVRFICAgICAnKX0gfCBBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjayB8ICR7Z3JlZW4oYm9sZCgnc3RhY2sxJykpfWAsXG4gICk7XG4gIGV4cGVjdChvdXRwdXRbMl0udHJpbSgpKS50b1N0cmljdEVxdWFsKFxuICAgIGBzdGFjay1uYW1lIHwgMi8yIHwgJHtIVU1BTl9USU1FfSB8ICR7Z3JlZW4oJ1VQREFURV9DT01QTEVURSAgICAgJyl9IHwgQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2sgfCAke2dyZWVuKGJvbGQoJ3N0YWNrMicpKX1gLFxuICApO1xufSk7XG5cbnRlc3QoJ3ByaW50cyBcIkZhaWxlZCBSZXNvdXJjZXM6XCIgbGlzdCwgd2hlbiBhdCBsZWFzdCBvbmUgZGVwbG95bWVudCBmYWlscycsICgpID0+IHtcbiAgY29uc3QgaGlzdG9yeUFjdGl2aXR5UHJpbnRlciA9IG5ldyBIaXN0b3J5QWN0aXZpdHlQcmludGVyKHtcbiAgICByZXNvdXJjZVR5cGVDb2x1bW5XaWR0aDogMjMsXG4gICAgcmVzb3VyY2VzVG90YWw6IDEsXG4gICAgc3RyZWFtOiBwcm9jZXNzLnN0ZGVycixcbiAgfSk7XG5cbiAgY29uc3Qgb3V0cHV0ID0gc3RkZXJyLmluc3BlY3RTeW5jKCgpID0+IHtcbiAgICBoaXN0b3J5QWN0aXZpdHlQcmludGVyLmFkZEFjdGl2aXR5KHtcbiAgICAgIGV2ZW50OiB7XG4gICAgICAgIExvZ2ljYWxSZXNvdXJjZUlkOiAnc3RhY2sxJyxcbiAgICAgICAgUmVzb3VyY2VTdGF0dXM6IFJlc291cmNlU3RhdHVzLlVQREFURV9JTl9QUk9HUkVTUyxcbiAgICAgICAgVGltZXN0YW1wOiBuZXcgRGF0ZShUSU1FU1RBTVApLFxuICAgICAgICBSZXNvdXJjZVR5cGU6ICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjaycsXG4gICAgICAgIFN0YWNrSWQ6ICcnLFxuICAgICAgICBFdmVudElkOiAnJyxcbiAgICAgICAgU3RhY2tOYW1lOiAnc3RhY2stbmFtZScsXG4gICAgICB9LFxuICAgICAgcGFyZW50U3RhY2tMb2dpY2FsSWRzOiBbXSxcbiAgICB9KTtcbiAgICBoaXN0b3J5QWN0aXZpdHlQcmludGVyLmFkZEFjdGl2aXR5KHtcbiAgICAgIGV2ZW50OiB7XG4gICAgICAgIExvZ2ljYWxSZXNvdXJjZUlkOiAnc3RhY2sxJyxcbiAgICAgICAgUmVzb3VyY2VTdGF0dXM6IFJlc291cmNlU3RhdHVzLlVQREFURV9GQUlMRUQsXG4gICAgICAgIFRpbWVzdGFtcDogbmV3IERhdGUoVElNRVNUQU1QKSxcbiAgICAgICAgUmVzb3VyY2VUeXBlOiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snLFxuICAgICAgICBTdGFja0lkOiAnJyxcbiAgICAgICAgRXZlbnRJZDogJycsXG4gICAgICAgIFN0YWNrTmFtZTogJ3N0YWNrLW5hbWUnLFxuICAgICAgfSxcbiAgICAgIHBhcmVudFN0YWNrTG9naWNhbElkczogW10sXG4gICAgfSk7XG4gICAgaGlzdG9yeUFjdGl2aXR5UHJpbnRlci5zdG9wKCk7XG4gIH0pO1xuXG4gIGV4cGVjdChvdXRwdXQubGVuZ3RoKS50b1N0cmljdEVxdWFsKDQpO1xuICBleHBlY3Qob3V0cHV0WzBdLnRyaW0oKSkudG9TdHJpY3RFcXVhbChcbiAgICBgc3RhY2stbmFtZSB8IDAvMiB8ICR7SFVNQU5fVElNRX0gfCAke3Jlc2V0KCdVUERBVEVfSU5fUFJPR1JFU1MgICcpfSB8IEFXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrIHwgJHtyZXNldChib2xkKCdzdGFjazEnKSl9YCxcbiAgKTtcbiAgZXhwZWN0KG91dHB1dFsxXS50cmltKCkpLnRvU3RyaWN0RXF1YWwoXG4gICAgYHN0YWNrLW5hbWUgfCAwLzIgfCAke0hVTUFOX1RJTUV9IHwgJHtyZWQoJ1VQREFURV9GQUlMRUQgICAgICAgJyl9IHwgQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2sgfCAke3JlZChib2xkKCdzdGFjazEnKSl9YCxcbiAgKTtcbiAgZXhwZWN0KG91dHB1dFsyXS50cmltKCkpLnRvU3RyaWN0RXF1YWwoJ0ZhaWxlZCByZXNvdXJjZXM6Jyk7XG4gIGV4cGVjdChvdXRwdXRbM10udHJpbSgpKS50b1N0cmljdEVxdWFsKFxuICAgIGBzdGFjay1uYW1lIHwgJHtIVU1BTl9USU1FfSB8ICR7cmVkKCdVUERBVEVfRkFJTEVEICAgICAgICcpfSB8IEFXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrIHwgJHtyZWQoYm9sZCgnc3RhY2sxJykpfWAsXG4gICk7XG59KTtcblxudGVzdCgncHJpbnQgZmFpbGVkIHJlc291cmNlcyBiZWNhdXNlIG9mIGhvb2sgZmFpbHVyZXMnLCAoKSA9PiB7XG4gIGNvbnN0IGhpc3RvcnlBY3Rpdml0eVByaW50ZXIgPSBuZXcgSGlzdG9yeUFjdGl2aXR5UHJpbnRlcih7XG4gICAgcmVzb3VyY2VUeXBlQ29sdW1uV2lkdGg6IDIzLFxuICAgIHJlc291cmNlc1RvdGFsOiAxLFxuICAgIHN0cmVhbTogcHJvY2Vzcy5zdGRlcnIsXG4gIH0pO1xuXG4gIGNvbnN0IG91dHB1dCA9IHN0ZGVyci5pbnNwZWN0U3luYygoKSA9PiB7XG4gICAgaGlzdG9yeUFjdGl2aXR5UHJpbnRlci5hZGRBY3Rpdml0eSh7XG4gICAgICBldmVudDoge1xuICAgICAgICBMb2dpY2FsUmVzb3VyY2VJZDogJ3N0YWNrMScsXG4gICAgICAgIFJlc291cmNlU3RhdHVzOiBSZXNvdXJjZVN0YXR1cy5VUERBVEVfSU5fUFJPR1JFU1MsXG4gICAgICAgIFRpbWVzdGFtcDogbmV3IERhdGUoVElNRVNUQU1QKSxcbiAgICAgICAgUmVzb3VyY2VUeXBlOiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snLFxuICAgICAgICBTdGFja0lkOiAnJyxcbiAgICAgICAgRXZlbnRJZDogJycsXG4gICAgICAgIFN0YWNrTmFtZTogJ3N0YWNrLW5hbWUnLFxuICAgICAgICBIb29rU3RhdHVzOiAnSE9PS19DT01QTEVURV9GQUlMRUQnLFxuICAgICAgICBIb29rVHlwZTogJ2hvb2sxJyxcbiAgICAgICAgSG9va1N0YXR1c1JlYXNvbjogJ3N0YWNrMSBtdXN0IG9iZXkgY2VydGFpbiBydWxlcycsXG4gICAgICB9LFxuICAgICAgcGFyZW50U3RhY2tMb2dpY2FsSWRzOiBbXSxcbiAgICB9KTtcbiAgICBoaXN0b3J5QWN0aXZpdHlQcmludGVyLmFkZEFjdGl2aXR5KHtcbiAgICAgIGV2ZW50OiB7XG4gICAgICAgIExvZ2ljYWxSZXNvdXJjZUlkOiAnc3RhY2sxJyxcbiAgICAgICAgUmVzb3VyY2VTdGF0dXM6IFJlc291cmNlU3RhdHVzLlVQREFURV9GQUlMRUQsXG4gICAgICAgIFRpbWVzdGFtcDogbmV3IERhdGUoVElNRVNUQU1QKSxcbiAgICAgICAgUmVzb3VyY2VUeXBlOiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snLFxuICAgICAgICBTdGFja0lkOiAnJyxcbiAgICAgICAgRXZlbnRJZDogJycsXG4gICAgICAgIFN0YWNrTmFtZTogJ3N0YWNrLW5hbWUnLFxuICAgICAgICBSZXNvdXJjZVN0YXR1c1JlYXNvbjogJ1RoZSBmb2xsb3dpbmcgaG9vayhzKSBmYWlsZWQ6IGhvb2sxJyxcbiAgICAgIH0sXG4gICAgICBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IFtdLFxuICAgIH0pO1xuICAgIGhpc3RvcnlBY3Rpdml0eVByaW50ZXIuc3RvcCgpO1xuICB9KTtcblxuICBleHBlY3Qob3V0cHV0Lmxlbmd0aCkudG9TdHJpY3RFcXVhbCg0KTtcbiAgZXhwZWN0KG91dHB1dFswXS50cmltKCkpLnRvU3RyaWN0RXF1YWwoXG4gICAgYHN0YWNrLW5hbWUgfCAwLzIgfCAke0hVTUFOX1RJTUV9IHwgJHtyZXNldCgnVVBEQVRFX0lOX1BST0dSRVNTICAnKX0gfCBBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjayB8ICR7cmVzZXQoYm9sZCgnc3RhY2sxJykpfWAsXG4gICk7XG4gIGV4cGVjdChvdXRwdXRbMV0udHJpbSgpKS50b1N0cmljdEVxdWFsKFxuICAgIGBzdGFjay1uYW1lIHwgMC8yIHwgJHtIVU1BTl9USU1FfSB8ICR7cmVkKCdVUERBVEVfRkFJTEVEICAgICAgICcpfSB8IEFXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrIHwgJHtyZWQoYm9sZCgnc3RhY2sxJykpfSAke3JlZChib2xkKCdUaGUgZm9sbG93aW5nIGhvb2socykgZmFpbGVkOiBob29rMSA6IHN0YWNrMSBtdXN0IG9iZXkgY2VydGFpbiBydWxlcycpKX1gLFxuICApO1xuICBleHBlY3Qob3V0cHV0WzJdLnRyaW0oKSkudG9TdHJpY3RFcXVhbCgnRmFpbGVkIHJlc291cmNlczonKTtcbiAgZXhwZWN0KG91dHB1dFszXS50cmltKCkpLnRvU3RyaWN0RXF1YWwoXG4gICAgYHN0YWNrLW5hbWUgfCAke0hVTUFOX1RJTUV9IHwgJHtyZWQoJ1VQREFURV9GQUlMRUQgICAgICAgJyl9IHwgQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2sgfCAke3JlZChib2xkKCdzdGFjazEnKSl9ICR7cmVkKGJvbGQoJ1RoZSBmb2xsb3dpbmcgaG9vayhzKSBmYWlsZWQ6IGhvb2sxIDogc3RhY2sxIG11c3Qgb2JleSBjZXJ0YWluIHJ1bGVzJykpfWAsXG4gICk7XG59KTtcbiJdfQ==
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stYWN0aXZpdHktbW9uaXRvci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhY2stYWN0aXZpdHktbW9uaXRvci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUNBQWlDO0FBQ2pDLCtCQUErQjtBQUMvQix5REFBNEM7QUFDNUMscUdBQWtHO0FBQ2xHLDBFQUFnRTtBQUVoRSxJQUFJLFNBQWlCLENBQUM7QUFDdEIsSUFBSSxVQUFrQixDQUFDO0FBRXZCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7SUFDYixTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQyxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUN4RCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyw2RkFBNkYsRUFBRSxHQUFHLEVBQUU7SUFDdkcsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLCtDQUFzQixDQUFDO1FBQ3hELHVCQUF1QixFQUFFLEVBQUU7UUFDM0IsY0FBYyxFQUFFLENBQUM7UUFDakIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0tBQ3ZCLENBQUMsQ0FBQztJQUVILE1BQU0sTUFBTSxHQUFHLHlCQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtRQUNyQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUM7WUFDakMsS0FBSyxFQUFFO2dCQUNMLGlCQUFpQixFQUFFLFFBQVE7Z0JBQzNCLGNBQWMsRUFBRSxzQ0FBYyxDQUFDLGtCQUFrQjtnQkFDakQsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDOUIsWUFBWSxFQUFFLDRCQUE0QjtnQkFDMUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsU0FBUyxFQUFFLFlBQVk7YUFDeEI7WUFDRCxxQkFBcUIsRUFBRSxFQUFFO1NBQzFCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FDcEMsc0JBQXNCLFVBQVUsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLG1DQUFtQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUNoSixDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsaUdBQWlHLEVBQUUsR0FBRyxFQUFFO0lBQzNHLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSwrQ0FBc0IsQ0FBQztRQUN4RCx1QkFBdUIsRUFBRSxFQUFFO1FBQzNCLGNBQWMsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtLQUN2QixDQUFDLENBQUM7SUFFSCxNQUFNLE1BQU0sR0FBRyx5QkFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUU7UUFDckMsc0JBQXNCLENBQUMsV0FBVyxDQUFDO1lBQ2pDLEtBQUssRUFBRTtnQkFDTCxpQkFBaUIsRUFBRSxRQUFRO2dCQUMzQixjQUFjLEVBQUUsc0NBQWMsQ0FBQyxlQUFlO2dCQUM5QyxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUM5QixZQUFZLEVBQUUsNEJBQTRCO2dCQUMxQyxPQUFPLEVBQUUsRUFBRTtnQkFDWCxPQUFPLEVBQUUsRUFBRTtnQkFDWCxTQUFTLEVBQUUsWUFBWTthQUN4QjtZQUNELHFCQUFxQixFQUFFLEVBQUU7U0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsYUFBYSxDQUNwQyxzQkFBc0IsVUFBVSxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsbUNBQW1DLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQ2hKLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxpR0FBaUcsRUFBRSxHQUFHLEVBQUU7SUFDM0csTUFBTSxzQkFBc0IsR0FBRyxJQUFJLCtDQUFzQixDQUFDO1FBQ3hELHVCQUF1QixFQUFFLEVBQUU7UUFDM0IsY0FBYyxFQUFFLENBQUM7UUFDakIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0tBQ3ZCLENBQUMsQ0FBQztJQUVILE1BQU0sTUFBTSxHQUFHLHlCQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtRQUNyQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUM7WUFDakMsS0FBSyxFQUFFO2dCQUNMLGlCQUFpQixFQUFFLFFBQVE7Z0JBQzNCLGNBQWMsRUFBRSxzQ0FBYyxDQUFDLGVBQWU7Z0JBQzlDLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzlCLFlBQVksRUFBRSw0QkFBNEI7Z0JBQzFDLE9BQU8sRUFBRSxFQUFFO2dCQUNYLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFNBQVMsRUFBRSxZQUFZO2FBQ3hCO1lBQ0QscUJBQXFCLEVBQUUsRUFBRTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQ3BDLHNCQUFzQixVQUFVLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxtQ0FBbUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FDaEosQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLG1HQUFtRyxFQUFFLEdBQUcsRUFBRTtJQUM3RyxNQUFNLHNCQUFzQixHQUFHLElBQUksK0NBQXNCLENBQUM7UUFDeEQsdUJBQXVCLEVBQUUsRUFBRTtRQUMzQixjQUFjLEVBQUUsQ0FBQztRQUNqQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxNQUFNLEdBQUcseUJBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ3JDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQztZQUNqQyxLQUFLLEVBQUU7Z0JBQ0wsaUJBQWlCLEVBQUUsUUFBUTtnQkFDM0IsY0FBYyxFQUFFLHNDQUFjLENBQUMsaUJBQWlCO2dCQUNoRCxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUM5QixZQUFZLEVBQUUsNEJBQTRCO2dCQUMxQyxPQUFPLEVBQUUsRUFBRTtnQkFDWCxPQUFPLEVBQUUsRUFBRTtnQkFDWCxTQUFTLEVBQUUsWUFBWTthQUN4QjtZQUNELHFCQUFxQixFQUFFLEVBQUU7U0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsYUFBYSxDQUNwQyxzQkFBc0IsVUFBVSxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsbUNBQW1DLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQ2xKLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQywrRkFBK0YsRUFBRSxHQUFHLEVBQUU7SUFDekcsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLCtDQUFzQixDQUFDO1FBQ3hELHVCQUF1QixFQUFFLEVBQUU7UUFDM0IsY0FBYyxFQUFFLENBQUM7UUFDakIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0tBQ3ZCLENBQUMsQ0FBQztJQUVILE1BQU0sTUFBTSxHQUFHLHlCQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtRQUNyQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUM7WUFDakMsS0FBSyxFQUFFO2dCQUNMLGlCQUFpQixFQUFFLFFBQVE7Z0JBQzNCLGNBQWMsRUFBRSxzQ0FBYyxDQUFDLGFBQWE7Z0JBQzVDLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzlCLFlBQVksRUFBRSw0QkFBNEI7Z0JBQzFDLE9BQU8sRUFBRSxFQUFFO2dCQUNYLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFNBQVMsRUFBRSxZQUFZO2FBQ3hCO1lBQ0QscUJBQXFCLEVBQUUsRUFBRTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQ3BDLHNCQUFzQixVQUFVLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxtQ0FBbUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FDNUksQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLDhFQUE4RSxFQUFFLEdBQUcsRUFBRTtJQUN4RixNQUFNLHNCQUFzQixHQUFHLElBQUksK0NBQXNCLENBQUM7UUFDeEQsdUJBQXVCLEVBQUUsRUFBRTtRQUMzQixjQUFjLEVBQUUsQ0FBQztRQUNqQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxNQUFNLEdBQUcseUJBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ3JDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQztZQUNqQyxLQUFLLEVBQUU7Z0JBQ0wsaUJBQWlCLEVBQUUsUUFBUTtnQkFDM0IsY0FBYyxFQUFFLHNDQUFjLENBQUMsa0JBQWtCO2dCQUNqRCxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUM5QixZQUFZLEVBQUUsNEJBQTRCO2dCQUMxQyxPQUFPLEVBQUUsRUFBRTtnQkFDWCxPQUFPLEVBQUUsRUFBRTtnQkFDWCxTQUFTLEVBQUUsWUFBWTthQUN4QjtZQUNELHFCQUFxQixFQUFFLEVBQUU7U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsc0JBQXNCLENBQUMsV0FBVyxDQUFDO1lBQ2pDLEtBQUssRUFBRTtnQkFDTCxpQkFBaUIsRUFBRSxRQUFRO2dCQUMzQixjQUFjLEVBQUUsc0NBQWMsQ0FBQyxlQUFlO2dCQUM5QyxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUM5QixZQUFZLEVBQUUsNEJBQTRCO2dCQUMxQyxPQUFPLEVBQUUsRUFBRTtnQkFDWCxPQUFPLEVBQUUsRUFBRTtnQkFDWCxTQUFTLEVBQUUsWUFBWTthQUN4QjtZQUNELHFCQUFxQixFQUFFLEVBQUU7U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsc0JBQXNCLENBQUMsV0FBVyxDQUFDO1lBQ2pDLEtBQUssRUFBRTtnQkFDTCxpQkFBaUIsRUFBRSxRQUFRO2dCQUMzQixjQUFjLEVBQUUsc0NBQWMsQ0FBQyxlQUFlO2dCQUM5QyxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUM5QixZQUFZLEVBQUUsNEJBQTRCO2dCQUMxQyxPQUFPLEVBQUUsRUFBRTtnQkFDWCxPQUFPLEVBQUUsRUFBRTtnQkFDWCxTQUFTLEVBQUUsWUFBWTthQUN4QjtZQUNELHFCQUFxQixFQUFFLEVBQUU7U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsc0JBQXNCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsYUFBYSxDQUNwQyxzQkFBc0IsVUFBVSxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsbUNBQW1DLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQ2hKLENBQUM7SUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsYUFBYSxDQUNwQyxzQkFBc0IsVUFBVSxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsbUNBQW1DLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQ2hKLENBQUM7SUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsYUFBYSxDQUNwQyxzQkFBc0IsVUFBVSxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsbUNBQW1DLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQ2hKLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxxRUFBcUUsRUFBRSxHQUFHLEVBQUU7SUFDL0UsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLCtDQUFzQixDQUFDO1FBQ3hELHVCQUF1QixFQUFFLEVBQUU7UUFDM0IsY0FBYyxFQUFFLENBQUM7UUFDakIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0tBQ3ZCLENBQUMsQ0FBQztJQUVILE1BQU0sTUFBTSxHQUFHLHlCQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtRQUNyQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUM7WUFDakMsS0FBSyxFQUFFO2dCQUNMLGlCQUFpQixFQUFFLFFBQVE7Z0JBQzNCLGNBQWMsRUFBRSxzQ0FBYyxDQUFDLGtCQUFrQjtnQkFDakQsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDOUIsWUFBWSxFQUFFLDRCQUE0QjtnQkFDMUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsU0FBUyxFQUFFLFlBQVk7YUFDeEI7WUFDRCxxQkFBcUIsRUFBRSxFQUFFO1NBQzFCLENBQUMsQ0FBQztRQUNILHNCQUFzQixDQUFDLFdBQVcsQ0FBQztZQUNqQyxLQUFLLEVBQUU7Z0JBQ0wsaUJBQWlCLEVBQUUsUUFBUTtnQkFDM0IsY0FBYyxFQUFFLHNDQUFjLENBQUMsYUFBYTtnQkFDNUMsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDOUIsWUFBWSxFQUFFLDRCQUE0QjtnQkFDMUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsU0FBUyxFQUFFLFlBQVk7YUFDeEI7WUFDRCxxQkFBcUIsRUFBRSxFQUFFO1NBQzFCLENBQUMsQ0FBQztRQUNILHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FDcEMsc0JBQXNCLFVBQVUsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLG1DQUFtQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUNoSixDQUFDO0lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FDcEMsc0JBQXNCLFVBQVUsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLG1DQUFtQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUM1SSxDQUFDO0lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzVELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQ3BDLGdCQUFnQixVQUFVLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxtQ0FBbUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FDdEksQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtJQUMzRCxNQUFNLHNCQUFzQixHQUFHLElBQUksK0NBQXNCLENBQUM7UUFDeEQsdUJBQXVCLEVBQUUsRUFBRTtRQUMzQixjQUFjLEVBQUUsQ0FBQztRQUNqQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxNQUFNLEdBQUcseUJBQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ3JDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQztZQUNqQyxLQUFLLEVBQUU7Z0JBQ0wsaUJBQWlCLEVBQUUsUUFBUTtnQkFDM0IsY0FBYyxFQUFFLHNDQUFjLENBQUMsa0JBQWtCO2dCQUNqRCxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUM5QixZQUFZLEVBQUUsNEJBQTRCO2dCQUMxQyxPQUFPLEVBQUUsRUFBRTtnQkFDWCxPQUFPLEVBQUUsRUFBRTtnQkFDWCxTQUFTLEVBQUUsWUFBWTtnQkFDdkIsVUFBVSxFQUFFLHNCQUFzQjtnQkFDbEMsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLGdCQUFnQixFQUFFLGdDQUFnQzthQUNuRDtZQUNELHFCQUFxQixFQUFFLEVBQUU7U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsc0JBQXNCLENBQUMsV0FBVyxDQUFDO1lBQ2pDLEtBQUssRUFBRTtnQkFDTCxpQkFBaUIsRUFBRSxRQUFRO2dCQUMzQixjQUFjLEVBQUUsc0NBQWMsQ0FBQyxhQUFhO2dCQUM1QyxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUM5QixZQUFZLEVBQUUsNEJBQTRCO2dCQUMxQyxPQUFPLEVBQUUsRUFBRTtnQkFDWCxPQUFPLEVBQUUsRUFBRTtnQkFDWCxTQUFTLEVBQUUsWUFBWTtnQkFDdkIsb0JBQW9CLEVBQUUscUNBQXFDO2FBQzVEO1lBQ0QscUJBQXFCLEVBQUUsRUFBRTtTQUMxQixDQUFDLENBQUM7UUFDSCxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQ3BDLHNCQUFzQixVQUFVLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxtQ0FBbUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FDaEosQ0FBQztJQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQ3BDLHNCQUFzQixVQUFVLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxtQ0FBbUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHNFQUFzRSxDQUFDLENBQUMsRUFBRSxDQUM3TyxDQUFDO0lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzVELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQ3BDLGdCQUFnQixVQUFVLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxtQ0FBbUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHNFQUFzRSxDQUFDLENBQUMsRUFBRSxDQUN2TyxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvb3JkZXIgKi9cbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHN0ZGVyciB9IGZyb20gJy4vY29uc29sZS1saXN0ZW5lcic7XG5pbXBvcnQgeyBIaXN0b3J5QWN0aXZpdHlQcmludGVyIH0gZnJvbSAnLi4vLi4vbGliL2FwaS91dGlsL2Nsb3VkZm9ybWF0aW9uL3N0YWNrLWFjdGl2aXR5LW1vbml0b3InO1xuaW1wb3J0IHsgUmVzb3VyY2VTdGF0dXMgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuXG5sZXQgVElNRVNUQU1QOiBudW1iZXI7XG5sZXQgSFVNQU5fVElNRTogc3RyaW5nO1xuXG5iZWZvcmVBbGwoKCkgPT4ge1xuICBUSU1FU1RBTVAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgSFVNQU5fVElNRSA9IG5ldyBEYXRlKFRJTUVTVEFNUCkudG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG59KTtcblxudGVzdCgncHJpbnRzIDAvNCBwcm9ncmVzcyByZXBvcnQsIHdoZW4gYWRkQWN0aXZpdHkgaXMgY2FsbGVkIHdpdGggYW4gXCJJTl9QUk9HUkVTU1wiIFJlc291cmNlU3RhdHVzJywgKCkgPT4ge1xuICBjb25zdCBoaXN0b3J5QWN0aXZpdHlQcmludGVyID0gbmV3IEhpc3RvcnlBY3Rpdml0eVByaW50ZXIoe1xuICAgIHJlc291cmNlVHlwZUNvbHVtbldpZHRoOiAyMyxcbiAgICByZXNvdXJjZXNUb3RhbDogMyxcbiAgICBzdHJlYW06IHByb2Nlc3Muc3RkZXJyLFxuICB9KTtcblxuICBjb25zdCBvdXRwdXQgPSBzdGRlcnIuaW5zcGVjdFN5bmMoKCkgPT4ge1xuICAgIGhpc3RvcnlBY3Rpdml0eVByaW50ZXIuYWRkQWN0aXZpdHkoe1xuICAgICAgZXZlbnQ6IHtcbiAgICAgICAgTG9naWNhbFJlc291cmNlSWQ6ICdzdGFjazEnLFxuICAgICAgICBSZXNvdXJjZVN0YXR1czogUmVzb3VyY2VTdGF0dXMuQ1JFQVRFX0lOX1BST0dSRVNTLFxuICAgICAgICBUaW1lc3RhbXA6IG5ldyBEYXRlKFRJTUVTVEFNUCksXG4gICAgICAgIFJlc291cmNlVHlwZTogJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyxcbiAgICAgICAgU3RhY2tJZDogJycsXG4gICAgICAgIEV2ZW50SWQ6ICcnLFxuICAgICAgICBTdGFja05hbWU6ICdzdGFjay1uYW1lJyxcbiAgICAgIH0sXG4gICAgICBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IFtdLFxuICAgIH0pO1xuICB9KTtcblxuICBleHBlY3Qob3V0cHV0WzBdLnRyaW0oKSkudG9TdHJpY3RFcXVhbChcbiAgICBgc3RhY2stbmFtZSB8IDAvNCB8ICR7SFVNQU5fVElNRX0gfCAke2NoYWxrLnJlc2V0KCdDUkVBVEVfSU5fUFJPR1JFU1MgICcpfSB8IEFXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrIHwgJHtjaGFsay5yZXNldChjaGFsay5ib2xkKCdzdGFjazEnKSl9YCxcbiAgKTtcbn0pO1xuXG50ZXN0KCdwcmludHMgMS80IHByb2dyZXNzIHJlcG9ydCwgd2hlbiBhZGRBY3Rpdml0eSBpcyBjYWxsZWQgd2l0aCBhbiBcIlVQREFURV9DT01QTEVURVwiIFJlc291cmNlU3RhdHVzJywgKCkgPT4ge1xuICBjb25zdCBoaXN0b3J5QWN0aXZpdHlQcmludGVyID0gbmV3IEhpc3RvcnlBY3Rpdml0eVByaW50ZXIoe1xuICAgIHJlc291cmNlVHlwZUNvbHVtbldpZHRoOiAyMyxcbiAgICByZXNvdXJjZXNUb3RhbDogMyxcbiAgICBzdHJlYW06IHByb2Nlc3Muc3RkZXJyLFxuICB9KTtcblxuICBjb25zdCBvdXRwdXQgPSBzdGRlcnIuaW5zcGVjdFN5bmMoKCkgPT4ge1xuICAgIGhpc3RvcnlBY3Rpdml0eVByaW50ZXIuYWRkQWN0aXZpdHkoe1xuICAgICAgZXZlbnQ6IHtcbiAgICAgICAgTG9naWNhbFJlc291cmNlSWQ6ICdzdGFjazEnLFxuICAgICAgICBSZXNvdXJjZVN0YXR1czogUmVzb3VyY2VTdGF0dXMuVVBEQVRFX0NPTVBMRVRFLFxuICAgICAgICBUaW1lc3RhbXA6IG5ldyBEYXRlKFRJTUVTVEFNUCksXG4gICAgICAgIFJlc291cmNlVHlwZTogJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyxcbiAgICAgICAgU3RhY2tJZDogJycsXG4gICAgICAgIEV2ZW50SWQ6ICcnLFxuICAgICAgICBTdGFja05hbWU6ICdzdGFjay1uYW1lJyxcbiAgICAgIH0sXG4gICAgICBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IFtdLFxuICAgIH0pO1xuICB9KTtcblxuICBleHBlY3Qob3V0cHV0WzBdLnRyaW0oKSkudG9TdHJpY3RFcXVhbChcbiAgICBgc3RhY2stbmFtZSB8IDEvNCB8ICR7SFVNQU5fVElNRX0gfCAke2NoYWxrLmdyZWVuKCdVUERBVEVfQ09NUExFVEUgICAgICcpfSB8IEFXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrIHwgJHtjaGFsay5ncmVlbihjaGFsay5ib2xkKCdzdGFjazEnKSl9YCxcbiAgKTtcbn0pO1xuXG50ZXN0KCdwcmludHMgMS80IHByb2dyZXNzIHJlcG9ydCwgd2hlbiBhZGRBY3Rpdml0eSBpcyBjYWxsZWQgd2l0aCBhbiBcIlVQREFURV9DT01QTEVURVwiIFJlc291cmNlU3RhdHVzJywgKCkgPT4ge1xuICBjb25zdCBoaXN0b3J5QWN0aXZpdHlQcmludGVyID0gbmV3IEhpc3RvcnlBY3Rpdml0eVByaW50ZXIoe1xuICAgIHJlc291cmNlVHlwZUNvbHVtbldpZHRoOiAyMyxcbiAgICByZXNvdXJjZXNUb3RhbDogMyxcbiAgICBzdHJlYW06IHByb2Nlc3Muc3RkZXJyLFxuICB9KTtcblxuICBjb25zdCBvdXRwdXQgPSBzdGRlcnIuaW5zcGVjdFN5bmMoKCkgPT4ge1xuICAgIGhpc3RvcnlBY3Rpdml0eVByaW50ZXIuYWRkQWN0aXZpdHkoe1xuICAgICAgZXZlbnQ6IHtcbiAgICAgICAgTG9naWNhbFJlc291cmNlSWQ6ICdzdGFjazEnLFxuICAgICAgICBSZXNvdXJjZVN0YXR1czogUmVzb3VyY2VTdGF0dXMuVVBEQVRFX0NPTVBMRVRFLFxuICAgICAgICBUaW1lc3RhbXA6IG5ldyBEYXRlKFRJTUVTVEFNUCksXG4gICAgICAgIFJlc291cmNlVHlwZTogJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyxcbiAgICAgICAgU3RhY2tJZDogJycsXG4gICAgICAgIEV2ZW50SWQ6ICcnLFxuICAgICAgICBTdGFja05hbWU6ICdzdGFjay1uYW1lJyxcbiAgICAgIH0sXG4gICAgICBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IFtdLFxuICAgIH0pO1xuICB9KTtcblxuICBleHBlY3Qob3V0cHV0WzBdLnRyaW0oKSkudG9TdHJpY3RFcXVhbChcbiAgICBgc3RhY2stbmFtZSB8IDEvNCB8ICR7SFVNQU5fVElNRX0gfCAke2NoYWxrLmdyZWVuKCdVUERBVEVfQ09NUExFVEUgICAgICcpfSB8IEFXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrIHwgJHtjaGFsay5ncmVlbihjaGFsay5ib2xkKCdzdGFjazEnKSl9YCxcbiAgKTtcbn0pO1xuXG50ZXN0KCdwcmludHMgMS80IHByb2dyZXNzIHJlcG9ydCwgd2hlbiBhZGRBY3Rpdml0eSBpcyBjYWxsZWQgd2l0aCBhbiBcIlJPTExCQUNLX0NPTVBMRVRFXCIgUmVzb3VyY2VTdGF0dXMnLCAoKSA9PiB7XG4gIGNvbnN0IGhpc3RvcnlBY3Rpdml0eVByaW50ZXIgPSBuZXcgSGlzdG9yeUFjdGl2aXR5UHJpbnRlcih7XG4gICAgcmVzb3VyY2VUeXBlQ29sdW1uV2lkdGg6IDIzLFxuICAgIHJlc291cmNlc1RvdGFsOiAzLFxuICAgIHN0cmVhbTogcHJvY2Vzcy5zdGRlcnIsXG4gIH0pO1xuXG4gIGNvbnN0IG91dHB1dCA9IHN0ZGVyci5pbnNwZWN0U3luYygoKSA9PiB7XG4gICAgaGlzdG9yeUFjdGl2aXR5UHJpbnRlci5hZGRBY3Rpdml0eSh7XG4gICAgICBldmVudDoge1xuICAgICAgICBMb2dpY2FsUmVzb3VyY2VJZDogJ3N0YWNrMScsXG4gICAgICAgIFJlc291cmNlU3RhdHVzOiBSZXNvdXJjZVN0YXR1cy5ST0xMQkFDS19DT01QTEVURSxcbiAgICAgICAgVGltZXN0YW1wOiBuZXcgRGF0ZShUSU1FU1RBTVApLFxuICAgICAgICBSZXNvdXJjZVR5cGU6ICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjaycsXG4gICAgICAgIFN0YWNrSWQ6ICcnLFxuICAgICAgICBFdmVudElkOiAnJyxcbiAgICAgICAgU3RhY2tOYW1lOiAnc3RhY2stbmFtZScsXG4gICAgICB9LFxuICAgICAgcGFyZW50U3RhY2tMb2dpY2FsSWRzOiBbXSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgZXhwZWN0KG91dHB1dFswXS50cmltKCkpLnRvU3RyaWN0RXF1YWwoXG4gICAgYHN0YWNrLW5hbWUgfCAxLzQgfCAke0hVTUFOX1RJTUV9IHwgJHtjaGFsay55ZWxsb3coJ1JPTExCQUNLX0NPTVBMRVRFICAgJyl9IHwgQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2sgfCAke2NoYWxrLnllbGxvdyhjaGFsay5ib2xkKCdzdGFjazEnKSl9YCxcbiAgKTtcbn0pO1xuXG50ZXN0KCdwcmludHMgMC80IHByb2dyZXNzIHJlcG9ydCwgd2hlbiBhZGRBY3Rpdml0eSBpcyBjYWxsZWQgd2l0aCBhbiBcIlVQREFURV9GQUlMRURcIiBSZXNvdXJjZVN0YXR1cycsICgpID0+IHtcbiAgY29uc3QgaGlzdG9yeUFjdGl2aXR5UHJpbnRlciA9IG5ldyBIaXN0b3J5QWN0aXZpdHlQcmludGVyKHtcbiAgICByZXNvdXJjZVR5cGVDb2x1bW5XaWR0aDogMjMsXG4gICAgcmVzb3VyY2VzVG90YWw6IDMsXG4gICAgc3RyZWFtOiBwcm9jZXNzLnN0ZGVycixcbiAgfSk7XG5cbiAgY29uc3Qgb3V0cHV0ID0gc3RkZXJyLmluc3BlY3RTeW5jKCgpID0+IHtcbiAgICBoaXN0b3J5QWN0aXZpdHlQcmludGVyLmFkZEFjdGl2aXR5KHtcbiAgICAgIGV2ZW50OiB7XG4gICAgICAgIExvZ2ljYWxSZXNvdXJjZUlkOiAnc3RhY2sxJyxcbiAgICAgICAgUmVzb3VyY2VTdGF0dXM6IFJlc291cmNlU3RhdHVzLlVQREFURV9GQUlMRUQsXG4gICAgICAgIFRpbWVzdGFtcDogbmV3IERhdGUoVElNRVNUQU1QKSxcbiAgICAgICAgUmVzb3VyY2VUeXBlOiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snLFxuICAgICAgICBTdGFja0lkOiAnJyxcbiAgICAgICAgRXZlbnRJZDogJycsXG4gICAgICAgIFN0YWNrTmFtZTogJ3N0YWNrLW5hbWUnLFxuICAgICAgfSxcbiAgICAgIHBhcmVudFN0YWNrTG9naWNhbElkczogW10sXG4gICAgfSk7XG4gIH0pO1xuXG4gIGV4cGVjdChvdXRwdXRbMF0udHJpbSgpKS50b1N0cmljdEVxdWFsKFxuICAgIGBzdGFjay1uYW1lIHwgMC80IHwgJHtIVU1BTl9USU1FfSB8ICR7Y2hhbGsucmVkKCdVUERBVEVfRkFJTEVEICAgICAgICcpfSB8IEFXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrIHwgJHtjaGFsay5yZWQoY2hhbGsuYm9sZCgnc3RhY2sxJykpfWAsXG4gICk7XG59KTtcblxudGVzdCgnZG9lcyBub3QgcHJpbnQgXCJGYWlsZWQgUmVzb3VyY2VzOlwiIGxpc3QsIHdoZW4gYWxsIGRlcGxveW1lbnRzIGFyZSBzdWNjZXNzZnVsJywgKCkgPT4ge1xuICBjb25zdCBoaXN0b3J5QWN0aXZpdHlQcmludGVyID0gbmV3IEhpc3RvcnlBY3Rpdml0eVByaW50ZXIoe1xuICAgIHJlc291cmNlVHlwZUNvbHVtbldpZHRoOiAyMyxcbiAgICByZXNvdXJjZXNUb3RhbDogMSxcbiAgICBzdHJlYW06IHByb2Nlc3Muc3RkZXJyLFxuICB9KTtcblxuICBjb25zdCBvdXRwdXQgPSBzdGRlcnIuaW5zcGVjdFN5bmMoKCkgPT4ge1xuICAgIGhpc3RvcnlBY3Rpdml0eVByaW50ZXIuYWRkQWN0aXZpdHkoe1xuICAgICAgZXZlbnQ6IHtcbiAgICAgICAgTG9naWNhbFJlc291cmNlSWQ6ICdzdGFjazEnLFxuICAgICAgICBSZXNvdXJjZVN0YXR1czogUmVzb3VyY2VTdGF0dXMuVVBEQVRFX0lOX1BST0dSRVNTLFxuICAgICAgICBUaW1lc3RhbXA6IG5ldyBEYXRlKFRJTUVTVEFNUCksXG4gICAgICAgIFJlc291cmNlVHlwZTogJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyxcbiAgICAgICAgU3RhY2tJZDogJycsXG4gICAgICAgIEV2ZW50SWQ6ICcnLFxuICAgICAgICBTdGFja05hbWU6ICdzdGFjay1uYW1lJyxcbiAgICAgIH0sXG4gICAgICBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IFtdLFxuICAgIH0pO1xuICAgIGhpc3RvcnlBY3Rpdml0eVByaW50ZXIuYWRkQWN0aXZpdHkoe1xuICAgICAgZXZlbnQ6IHtcbiAgICAgICAgTG9naWNhbFJlc291cmNlSWQ6ICdzdGFjazEnLFxuICAgICAgICBSZXNvdXJjZVN0YXR1czogUmVzb3VyY2VTdGF0dXMuVVBEQVRFX0NPTVBMRVRFLFxuICAgICAgICBUaW1lc3RhbXA6IG5ldyBEYXRlKFRJTUVTVEFNUCksXG4gICAgICAgIFJlc291cmNlVHlwZTogJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyxcbiAgICAgICAgU3RhY2tJZDogJycsXG4gICAgICAgIEV2ZW50SWQ6ICcnLFxuICAgICAgICBTdGFja05hbWU6ICdzdGFjay1uYW1lJyxcbiAgICAgIH0sXG4gICAgICBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IFtdLFxuICAgIH0pO1xuICAgIGhpc3RvcnlBY3Rpdml0eVByaW50ZXIuYWRkQWN0aXZpdHkoe1xuICAgICAgZXZlbnQ6IHtcbiAgICAgICAgTG9naWNhbFJlc291cmNlSWQ6ICdzdGFjazInLFxuICAgICAgICBSZXNvdXJjZVN0YXR1czogUmVzb3VyY2VTdGF0dXMuVVBEQVRFX0NPTVBMRVRFLFxuICAgICAgICBUaW1lc3RhbXA6IG5ldyBEYXRlKFRJTUVTVEFNUCksXG4gICAgICAgIFJlc291cmNlVHlwZTogJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyxcbiAgICAgICAgU3RhY2tJZDogJycsXG4gICAgICAgIEV2ZW50SWQ6ICcnLFxuICAgICAgICBTdGFja05hbWU6ICdzdGFjay1uYW1lJyxcbiAgICAgIH0sXG4gICAgICBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IFtdLFxuICAgIH0pO1xuICAgIGhpc3RvcnlBY3Rpdml0eVByaW50ZXIuc3RvcCgpO1xuICB9KTtcblxuICBleHBlY3Qob3V0cHV0Lmxlbmd0aCkudG9TdHJpY3RFcXVhbCgzKTtcbiAgZXhwZWN0KG91dHB1dFswXS50cmltKCkpLnRvU3RyaWN0RXF1YWwoXG4gICAgYHN0YWNrLW5hbWUgfCAwLzIgfCAke0hVTUFOX1RJTUV9IHwgJHtjaGFsay5yZXNldCgnVVBEQVRFX0lOX1BST0dSRVNTICAnKX0gfCBBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjayB8ICR7Y2hhbGsucmVzZXQoY2hhbGsuYm9sZCgnc3RhY2sxJykpfWAsXG4gICk7XG4gIGV4cGVjdChvdXRwdXRbMV0udHJpbSgpKS50b1N0cmljdEVxdWFsKFxuICAgIGBzdGFjay1uYW1lIHwgMS8yIHwgJHtIVU1BTl9USU1FfSB8ICR7Y2hhbGsuZ3JlZW4oJ1VQREFURV9DT01QTEVURSAgICAgJyl9IHwgQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2sgfCAke2NoYWxrLmdyZWVuKGNoYWxrLmJvbGQoJ3N0YWNrMScpKX1gLFxuICApO1xuICBleHBlY3Qob3V0cHV0WzJdLnRyaW0oKSkudG9TdHJpY3RFcXVhbChcbiAgICBgc3RhY2stbmFtZSB8IDIvMiB8ICR7SFVNQU5fVElNRX0gfCAke2NoYWxrLmdyZWVuKCdVUERBVEVfQ09NUExFVEUgICAgICcpfSB8IEFXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrIHwgJHtjaGFsay5ncmVlbihjaGFsay5ib2xkKCdzdGFjazInKSl9YCxcbiAgKTtcbn0pO1xuXG50ZXN0KCdwcmludHMgXCJGYWlsZWQgUmVzb3VyY2VzOlwiIGxpc3QsIHdoZW4gYXQgbGVhc3Qgb25lIGRlcGxveW1lbnQgZmFpbHMnLCAoKSA9PiB7XG4gIGNvbnN0IGhpc3RvcnlBY3Rpdml0eVByaW50ZXIgPSBuZXcgSGlzdG9yeUFjdGl2aXR5UHJpbnRlcih7XG4gICAgcmVzb3VyY2VUeXBlQ29sdW1uV2lkdGg6IDIzLFxuICAgIHJlc291cmNlc1RvdGFsOiAxLFxuICAgIHN0cmVhbTogcHJvY2Vzcy5zdGRlcnIsXG4gIH0pO1xuXG4gIGNvbnN0IG91dHB1dCA9IHN0ZGVyci5pbnNwZWN0U3luYygoKSA9PiB7XG4gICAgaGlzdG9yeUFjdGl2aXR5UHJpbnRlci5hZGRBY3Rpdml0eSh7XG4gICAgICBldmVudDoge1xuICAgICAgICBMb2dpY2FsUmVzb3VyY2VJZDogJ3N0YWNrMScsXG4gICAgICAgIFJlc291cmNlU3RhdHVzOiBSZXNvdXJjZVN0YXR1cy5VUERBVEVfSU5fUFJPR1JFU1MsXG4gICAgICAgIFRpbWVzdGFtcDogbmV3IERhdGUoVElNRVNUQU1QKSxcbiAgICAgICAgUmVzb3VyY2VUeXBlOiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snLFxuICAgICAgICBTdGFja0lkOiAnJyxcbiAgICAgICAgRXZlbnRJZDogJycsXG4gICAgICAgIFN0YWNrTmFtZTogJ3N0YWNrLW5hbWUnLFxuICAgICAgfSxcbiAgICAgIHBhcmVudFN0YWNrTG9naWNhbElkczogW10sXG4gICAgfSk7XG4gICAgaGlzdG9yeUFjdGl2aXR5UHJpbnRlci5hZGRBY3Rpdml0eSh7XG4gICAgICBldmVudDoge1xuICAgICAgICBMb2dpY2FsUmVzb3VyY2VJZDogJ3N0YWNrMScsXG4gICAgICAgIFJlc291cmNlU3RhdHVzOiBSZXNvdXJjZVN0YXR1cy5VUERBVEVfRkFJTEVELFxuICAgICAgICBUaW1lc3RhbXA6IG5ldyBEYXRlKFRJTUVTVEFNUCksXG4gICAgICAgIFJlc291cmNlVHlwZTogJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyxcbiAgICAgICAgU3RhY2tJZDogJycsXG4gICAgICAgIEV2ZW50SWQ6ICcnLFxuICAgICAgICBTdGFja05hbWU6ICdzdGFjay1uYW1lJyxcbiAgICAgIH0sXG4gICAgICBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IFtdLFxuICAgIH0pO1xuICAgIGhpc3RvcnlBY3Rpdml0eVByaW50ZXIuc3RvcCgpO1xuICB9KTtcblxuICBleHBlY3Qob3V0cHV0Lmxlbmd0aCkudG9TdHJpY3RFcXVhbCg0KTtcbiAgZXhwZWN0KG91dHB1dFswXS50cmltKCkpLnRvU3RyaWN0RXF1YWwoXG4gICAgYHN0YWNrLW5hbWUgfCAwLzIgfCAke0hVTUFOX1RJTUV9IHwgJHtjaGFsay5yZXNldCgnVVBEQVRFX0lOX1BST0dSRVNTICAnKX0gfCBBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjayB8ICR7Y2hhbGsucmVzZXQoY2hhbGsuYm9sZCgnc3RhY2sxJykpfWAsXG4gICk7XG4gIGV4cGVjdChvdXRwdXRbMV0udHJpbSgpKS50b1N0cmljdEVxdWFsKFxuICAgIGBzdGFjay1uYW1lIHwgMC8yIHwgJHtIVU1BTl9USU1FfSB8ICR7Y2hhbGsucmVkKCdVUERBVEVfRkFJTEVEICAgICAgICcpfSB8IEFXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrIHwgJHtjaGFsay5yZWQoY2hhbGsuYm9sZCgnc3RhY2sxJykpfWAsXG4gICk7XG4gIGV4cGVjdChvdXRwdXRbMl0udHJpbSgpKS50b1N0cmljdEVxdWFsKCdGYWlsZWQgcmVzb3VyY2VzOicpO1xuICBleHBlY3Qob3V0cHV0WzNdLnRyaW0oKSkudG9TdHJpY3RFcXVhbChcbiAgICBgc3RhY2stbmFtZSB8ICR7SFVNQU5fVElNRX0gfCAke2NoYWxrLnJlZCgnVVBEQVRFX0ZBSUxFRCAgICAgICAnKX0gfCBBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjayB8ICR7Y2hhbGsucmVkKGNoYWxrLmJvbGQoJ3N0YWNrMScpKX1gLFxuICApO1xufSk7XG5cbnRlc3QoJ3ByaW50IGZhaWxlZCByZXNvdXJjZXMgYmVjYXVzZSBvZiBob29rIGZhaWx1cmVzJywgKCkgPT4ge1xuICBjb25zdCBoaXN0b3J5QWN0aXZpdHlQcmludGVyID0gbmV3IEhpc3RvcnlBY3Rpdml0eVByaW50ZXIoe1xuICAgIHJlc291cmNlVHlwZUNvbHVtbldpZHRoOiAyMyxcbiAgICByZXNvdXJjZXNUb3RhbDogMSxcbiAgICBzdHJlYW06IHByb2Nlc3Muc3RkZXJyLFxuICB9KTtcblxuICBjb25zdCBvdXRwdXQgPSBzdGRlcnIuaW5zcGVjdFN5bmMoKCkgPT4ge1xuICAgIGhpc3RvcnlBY3Rpdml0eVByaW50ZXIuYWRkQWN0aXZpdHkoe1xuICAgICAgZXZlbnQ6IHtcbiAgICAgICAgTG9naWNhbFJlc291cmNlSWQ6ICdzdGFjazEnLFxuICAgICAgICBSZXNvdXJjZVN0YXR1czogUmVzb3VyY2VTdGF0dXMuVVBEQVRFX0lOX1BST0dSRVNTLFxuICAgICAgICBUaW1lc3RhbXA6IG5ldyBEYXRlKFRJTUVTVEFNUCksXG4gICAgICAgIFJlc291cmNlVHlwZTogJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyxcbiAgICAgICAgU3RhY2tJZDogJycsXG4gICAgICAgIEV2ZW50SWQ6ICcnLFxuICAgICAgICBTdGFja05hbWU6ICdzdGFjay1uYW1lJyxcbiAgICAgICAgSG9va1N0YXR1czogJ0hPT0tfQ09NUExFVEVfRkFJTEVEJyxcbiAgICAgICAgSG9va1R5cGU6ICdob29rMScsXG4gICAgICAgIEhvb2tTdGF0dXNSZWFzb246ICdzdGFjazEgbXVzdCBvYmV5IGNlcnRhaW4gcnVsZXMnLFxuICAgICAgfSxcbiAgICAgIHBhcmVudFN0YWNrTG9naWNhbElkczogW10sXG4gICAgfSk7XG4gICAgaGlzdG9yeUFjdGl2aXR5UHJpbnRlci5hZGRBY3Rpdml0eSh7XG4gICAgICBldmVudDoge1xuICAgICAgICBMb2dpY2FsUmVzb3VyY2VJZDogJ3N0YWNrMScsXG4gICAgICAgIFJlc291cmNlU3RhdHVzOiBSZXNvdXJjZVN0YXR1cy5VUERBVEVfRkFJTEVELFxuICAgICAgICBUaW1lc3RhbXA6IG5ldyBEYXRlKFRJTUVTVEFNUCksXG4gICAgICAgIFJlc291cmNlVHlwZTogJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyxcbiAgICAgICAgU3RhY2tJZDogJycsXG4gICAgICAgIEV2ZW50SWQ6ICcnLFxuICAgICAgICBTdGFja05hbWU6ICdzdGFjay1uYW1lJyxcbiAgICAgICAgUmVzb3VyY2VTdGF0dXNSZWFzb246ICdUaGUgZm9sbG93aW5nIGhvb2socykgZmFpbGVkOiBob29rMScsXG4gICAgICB9LFxuICAgICAgcGFyZW50U3RhY2tMb2dpY2FsSWRzOiBbXSxcbiAgICB9KTtcbiAgICBoaXN0b3J5QWN0aXZpdHlQcmludGVyLnN0b3AoKTtcbiAgfSk7XG5cbiAgZXhwZWN0KG91dHB1dC5sZW5ndGgpLnRvU3RyaWN0RXF1YWwoNCk7XG4gIGV4cGVjdChvdXRwdXRbMF0udHJpbSgpKS50b1N0cmljdEVxdWFsKFxuICAgIGBzdGFjay1uYW1lIHwgMC8yIHwgJHtIVU1BTl9USU1FfSB8ICR7Y2hhbGsucmVzZXQoJ1VQREFURV9JTl9QUk9HUkVTUyAgJyl9IHwgQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2sgfCAke2NoYWxrLnJlc2V0KGNoYWxrLmJvbGQoJ3N0YWNrMScpKX1gLFxuICApO1xuICBleHBlY3Qob3V0cHV0WzFdLnRyaW0oKSkudG9TdHJpY3RFcXVhbChcbiAgICBgc3RhY2stbmFtZSB8IDAvMiB8ICR7SFVNQU5fVElNRX0gfCAke2NoYWxrLnJlZCgnVVBEQVRFX0ZBSUxFRCAgICAgICAnKX0gfCBBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjayB8ICR7Y2hhbGsucmVkKGNoYWxrLmJvbGQoJ3N0YWNrMScpKX0gJHtjaGFsay5yZWQoY2hhbGsuYm9sZCgnVGhlIGZvbGxvd2luZyBob29rKHMpIGZhaWxlZDogaG9vazEgOiBzdGFjazEgbXVzdCBvYmV5IGNlcnRhaW4gcnVsZXMnKSl9YCxcbiAgKTtcbiAgZXhwZWN0KG91dHB1dFsyXS50cmltKCkpLnRvU3RyaWN0RXF1YWwoJ0ZhaWxlZCByZXNvdXJjZXM6Jyk7XG4gIGV4cGVjdChvdXRwdXRbM10udHJpbSgpKS50b1N0cmljdEVxdWFsKFxuICAgIGBzdGFjay1uYW1lIHwgJHtIVU1BTl9USU1FfSB8ICR7Y2hhbGsucmVkKCdVUERBVEVfRkFJTEVEICAgICAgICcpfSB8IEFXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrIHwgJHtjaGFsay5yZWQoY2hhbGsuYm9sZCgnc3RhY2sxJykpfSAke2NoYWxrLnJlZChjaGFsay5ib2xkKCdUaGUgZm9sbG93aW5nIGhvb2socykgZmFpbGVkOiBob29rMSA6IHN0YWNrMSBtdXN0IG9iZXkgY2VydGFpbiBydWxlcycpKX1gLFxuICApO1xufSk7XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};