testcafe 2.2.0 → 2.3.0-rc.2

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 (78) hide show
  1. package/bin/testcafe-with-v8-flag-filter.js +16 -3
  2. package/lib/api/exportable-lib/index.mjs +27 -0
  3. package/lib/api/skip-js-errors/index.js +36 -12
  4. package/lib/api/structure/fixture.js +6 -1
  5. package/lib/api/structure/test.js +7 -1
  6. package/lib/browser/connection/gateway.js +13 -1
  7. package/lib/browser/connection/index.js +6 -1
  8. package/lib/browser/connection/service-routes.js +2 -1
  9. package/lib/browser/provider/built-in/dedicated/chrome/index.js +6 -1
  10. package/lib/browser/provider/index.js +4 -1
  11. package/lib/cli/argument-parser/index.js +58 -59
  12. package/lib/cli/cli.js +3 -2
  13. package/lib/client/automation/index.js +88 -4
  14. package/lib/client/automation/index.min.js +1 -1
  15. package/lib/client/browser/idle-page/index.js +7 -5
  16. package/lib/client/core/deps/hammerhead.js +24 -0
  17. package/lib/client/core/index.js +21 -6
  18. package/lib/client/core/index.min.js +1 -1
  19. package/lib/client/driver/index.js +140 -52
  20. package/lib/client/driver/index.min.js +1 -1
  21. package/lib/client/test-run/iframe.js.mustache +2 -1
  22. package/lib/client/test-run/index.js.mustache +30 -28
  23. package/lib/client/ui/index.js +30 -23
  24. package/lib/client/ui/index.min.js +1 -1
  25. package/lib/compiler/babel/load-libs.js +10 -9
  26. package/lib/compiler/compilers.js +7 -7
  27. package/lib/compiler/esm-loader.js +38 -0
  28. package/lib/compiler/index.js +8 -7
  29. package/lib/compiler/interfaces.js +1 -1
  30. package/lib/compiler/prevent-module-caching-suffix.js +6 -0
  31. package/lib/compiler/test-file/add-export-api.js +3 -9
  32. package/lib/compiler/test-file/api-based.js +30 -14
  33. package/lib/compiler/test-file/base.js +4 -1
  34. package/lib/compiler/test-file/formats/coffeescript/compiler.js +5 -4
  35. package/lib/compiler/test-file/formats/es-next/compiler.js +23 -11
  36. package/lib/compiler/test-file/formats/extensions.js +15 -0
  37. package/lib/compiler/test-file/formats/typescript/compiler.js +27 -17
  38. package/lib/compiler/test-file/get-exportable-lib-path.js +17 -0
  39. package/lib/configuration/option-names.js +2 -1
  40. package/lib/errors/is-internal-stack-frame.js +3 -2
  41. package/lib/errors/process-test-fn-error.js +3 -2
  42. package/lib/errors/runtime/index.js +18 -4
  43. package/lib/errors/runtime/templates.js +2 -1
  44. package/lib/errors/test-run/utils.js +8 -3
  45. package/lib/errors/types.js +2 -1
  46. package/lib/proxyless/api-base.js +25 -0
  47. package/lib/proxyless/client/event-simulator.js +35 -0
  48. package/lib/proxyless/client/types.js +11 -0
  49. package/lib/proxyless/client/utils.js +24 -0
  50. package/lib/proxyless/console-messages/formatter.js +23 -0
  51. package/lib/proxyless/console-messages/index.js +56 -0
  52. package/lib/proxyless/console-messages/types.js +5 -0
  53. package/lib/proxyless/index.js +29 -2
  54. package/lib/proxyless/js-error-handling/index.js +70 -0
  55. package/lib/proxyless/native-dialogs/index.js +40 -0
  56. package/lib/proxyless/request-pipeline/index.js +6 -3
  57. package/lib/proxyless/resource-injector.js +7 -3
  58. package/lib/proxyless/session-storage/index.js +30 -0
  59. package/lib/proxyless/types.js +8 -1
  60. package/lib/proxyless/utils/cdp.js +19 -2
  61. package/lib/runner/bootstrapper.js +3 -2
  62. package/lib/runner/browser-job.js +1 -1
  63. package/lib/services/compiler/service.js +4 -4
  64. package/lib/services/utils/ipc/interfaces.js +1 -1
  65. package/lib/services/utils/ipc/proxy.js +1 -4
  66. package/lib/shared/utils/is-file-protocol.js +9 -0
  67. package/lib/test-run/commands/actions.js +2 -2
  68. package/lib/test-run/index.js +36 -9
  69. package/lib/testcafe.js +3 -3
  70. package/lib/utils/async-event-emitter.js +1 -1
  71. package/lib/utils/convert-to-best-fit-type.js +1 -1
  72. package/lib/utils/get-options/base.js +1 -1
  73. package/lib/utils/setup-sourcemap-support.js +10 -4
  74. package/package.json +11 -7
  75. package/ts-defs/index.d.ts +4 -4
  76. package/ts-defs/selectors.d.ts +2 -2
  77. package/ts-defs/testcafe-scripts.d.ts +2 -2
  78. package/lib/compiler/test-file/exportble-lib-path.js +0 -7
@@ -29,7 +29,11 @@ class ResourceInjector {
29
29
  get _currentTestRun() {
30
30
  return this._browserConnection.getCurrentTestRun();
31
31
  }
32
- async _prepareInjectableResources({ isIframe, restoringStorages }) {
32
+ _getRestoreContextStorageScript(contextStorage) {
33
+ contextStorage = JSON.stringify(contextStorage || '');
34
+ return `Object.defineProperty(window, '%proxylessContextStorage%', { configurable: true, value: ${contextStorage} });`;
35
+ }
36
+ async _prepareInjectableResources({ isIframe, restoringStorages, contextStorage }) {
33
37
  const proxy = this._browserConnection.browserConnectionGateway.proxy;
34
38
  const windowId = this._browserConnection.activeWindowId;
35
39
  if (!this._currentTestRun)
@@ -51,7 +55,7 @@ class ResourceInjector {
51
55
  ...testcafe_hammerhead_1.INJECTABLE_SCRIPTS.map(hs => (0, testcafe_hammerhead_1.getAssetPath)(hs, proxy.options.developmentMode)),
52
56
  ...injectables_1.SCRIPTS.map(s => (0, testcafe_hammerhead_1.getAssetPath)(s, proxy.options.developmentMode)),
53
57
  ],
54
- embeddedScripts: [taskScript],
58
+ embeddedScripts: [this._getRestoreContextStorageScript(contextStorage), taskScript],
55
59
  };
56
60
  injectableResources.scripts = injectableResources.scripts.map(script => proxy.resolveRelativeServiceUrl(script));
57
61
  injectableResources.stylesheets = injectableResources.stylesheets.map(style => proxy.resolveRelativeServiceUrl(style));
@@ -147,4 +151,4 @@ class ResourceInjector {
147
151
  }
148
152
  exports.default = ResourceInjector;
149
153
  module.exports = exports.default;
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtaW5qZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJveHlsZXNzL3Jlc291cmNlLWluamVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBUUEsNkRBTTZCO0FBQzdCLHVFQUFzRDtBQUN0RCx1REFBb0U7QUFDcEUsNEVBQW9EO0FBQ3BELHlEQUFnRDtBQUNoRCxpREFBbUQ7QUFDbkQscUNBQW1EO0FBUW5ELDBEQUFnRTtBQUNoRSwyQ0FJd0I7QUFDeEIsMERBQWlFO0FBR2pFLE1BQU0sd0JBQXdCLEdBQUc7SUFDN0IsOEJBQThCO0lBQzlCLDRCQUE0QjtJQUM1Qiw4QkFBOEI7Q0FDakMsQ0FBQztBQUVGLE1BQXFCLGdCQUFnQjtJQUlqQyxZQUFvQixTQUFpQixFQUFFLG9CQUEwQztRQUM3RSxJQUFJLENBQUMsVUFBVSxHQUFjLFNBQVMsQ0FBQztRQUN2QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsb0JBQW9CLENBQUM7SUFDdEQsQ0FBQztJQUVELElBQVksa0JBQWtCO1FBQzFCLE9BQU8sb0JBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQXNCLENBQUM7SUFDM0UsQ0FBQztJQUVELElBQVksZUFBZTtRQUN2QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFTyxLQUFLLENBQUMsMkJBQTJCLENBQUUsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQThCO1FBQ2xHLE1BQU0sS0FBSyxHQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUM7UUFDeEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQztRQUV4RCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWU7WUFDckIsT0FBTyxJQUFJLENBQUM7UUFFaEIsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENB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aUJBQWlCLEVBQUUsR0FBRywwQkFBMEIsQ0FBQztRQUU5RCxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsRUFBRTtZQUMxQixPQUFPO2dCQUNILElBQUksRUFBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJO2dCQUM1QixTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRTthQUM3QyxDQUFDO1NBQ0w7UUFFRCxPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ2xCLENBQUM7Q0FDSjtBQTNLRCxtQ0EyS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm90b2NvbEFwaSB9IGZyb20gJ2Nocm9tZS1yZW1vdGUtaW50ZXJmYWNlJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFRlc3RSdW4gYXMgTGVnYWN5VGVzdFJ1biB9IGZyb20gJ3Rlc3RjYWZlLWxlZ2FjeS1hcGknO1xuaW1wb3J0IFByb3RvY29sIGZyb20gJ2RldnRvb2xzLXByb3RvY29sJztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnQgPSBQcm90b2NvbC5GZXRjaC5SZXF1ZXN0UGF1c2VkRXZlbnQ7XG5pbXBvcnQgRnJhbWVOYXZpZ2F0ZWRFdmVudCA9IFByb3RvY29sLlBhZ2UuRnJhbWVOYXZpZ2F0ZWRFdmVudDtcbmltcG9ydCBGdWxmaWxsUmVxdWVzdFJlcXVlc3QgPSBQcm90b2NvbC5GZXRjaC5GdWxmaWxsUmVxdWVzdFJlcXVlc3Q7XG5pbXBvcnQgSGVhZGVyRW50cnkgPSBQcm90b2NvbC5GZXRjaC5IZWFkZXJFbnRyeTtcbmltcG9ydCB7XG4gICAgaW5qZWN0UmVzb3VyY2VzLFxuICAgIFBhZ2VJbmplY3RhYmxlUmVzb3VyY2VzLFxuICAgIElOSkVDVEFCTEVfU0NSSVBUUyBhcyBIQU1NRVJIRUFEX0lOSkVDVEFCTEVfU0NSSVBUUyxcbiAgICBnZXRBc3NldFBhdGgsXG4gICAgUGFnZVJlc3RvcmVTdG9yYWdlc09wdGlvbnMsXG59IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IEJyb3dzZXJDb25uZWN0aW9uIGZyb20gJy4uL2Jyb3dzZXIvY29ubmVjdGlvbic7XG5pbXBvcnQgeyBTQ1JJUFRTLCBURVNUQ0FGRV9VSV9TVFlMRVMgfSBmcm9tICcuLi9hc3NldHMvaW5qZWN0YWJsZXMnO1xuaW1wb3J0IEVNUFRZX1BBR0VfTUFSS1VQIGZyb20gJy4vZW1wdHktcGFnZS1tYXJrdXAnO1xuaW1wb3J0IHsgU3RhdHVzQ29kZXMgfSBmcm9tICdodHRwLXN0YXR1cy1jb2Rlcyc7XG5pbXBvcnQgeyBQYWdlTG9hZEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL3Rlc3QtcnVuJztcbmltcG9ydCB7IHJlZGlyZWN0LCBuYXZpZ2F0ZVRvIH0gZnJvbSAnLi91dGlscy9jZHAnO1xuXG5pbXBvcnQge1xuICAgIERvY3VtZW50UmVzb3VyY2VJbmZvLFxuICAgIEluamVjdGFibGVSZXNvdXJjZXNPcHRpb25zLFxuICAgIFNwZWNpYWxTZXJ2aWNlUm91dGVzLFxufSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHsgcmVzb3VyY2VJbmplY3RvckxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2RlYnVnLWxvZ2dlcnMnO1xuaW1wb3J0IHtcbiAgICBnZXRSZXNwb25zZUFzU3RyaW5nLFxuICAgIHN0cmluZ2lmeUhlYWRlclZhbHVlcyxcbiAgICB0b0Jhc2U2NFN0cmluZyxcbn0gZnJvbSAnLi91dGlscy9zdHJpbmcnO1xuaW1wb3J0IHsgc2FmZUZ1bGZpbGxSZXF1ZXN0IH0gZnJvbSAnLi9yZXF1ZXN0LXBpcGVsaW5lL3NhZmUtYXBpJztcbmltcG9ydCBUZXN0UnVuIGZyb20gJy4uL3Rlc3QtcnVuJztcblxuY29uc3QgUkVTUE9OU0VfUkVNT1ZFRF9IRUFERVJTID0gW1xuICAgICdjcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5JyxcbiAgICAnY3Jvc3Mtb3JpZ2luLW9wZW5lci1wb2xpY3knLFxuICAgICdjcm9zcy1vcmlnaW4tcmVzb3VyY2UtcG9saWN5Jyxcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlc291cmNlSW5qZWN0b3Ige1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Jyb3dzZXJJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NwZWNpYWxTZXJ2aWNlUm91dGVzOiBTcGVjaWFsU2VydmljZVJvdXRlcztcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoYnJvd3NlcklkOiBzdHJpbmcsIHNwZWNpYWxTZXJ2aWNlUm91dGVzOiBTcGVjaWFsU2VydmljZVJvdXRlcykge1xuICAgICAgICB0aGlzLl9icm93c2VySWQgICAgICAgICAgICA9IGJyb3dzZXJJZDtcbiAgICAgICAgdGhpcy5fc3BlY2lhbFNlcnZpY2VSb3V0ZXMgPSBzcGVjaWFsU2VydmljZVJvdXRlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBfYnJvd3NlckNvbm5lY3Rpb24gKCk6IEJyb3dzZXJDb25uZWN0aW9uIHtcbiAgICAgICAgcmV0dXJuIEJyb3dzZXJDb25uZWN0aW9uLmdldEJ5SWQodGhpcy5fYnJvd3NlcklkKSBhcyBCcm93c2VyQ29ubmVjdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBfY3VycmVudFRlc3RSdW4gKCk6IExlZ2FjeVRlc3RSdW4gfCBUZXN0UnVuIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9icm93c2VyQ29ubmVjdGlvbi5nZXRDdXJyZW50VGVzdFJ1bigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3ByZXBhcmVJbmplY3RhYmxlUmVzb3VyY2VzICh7IGlzSWZyYW1lLCByZXN0b3JpbmdTdG9yYWdlcyB9OiBJbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9ucyk6IFByb21pc2U8UGFnZUluamVjdGFibGVSZXNvdXJjZXMgfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IHByb3h5ICAgID0gdGhpcy5fYnJvd3NlckNvbm5lY3Rpb24uYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LnByb3h5O1xuICAgICAgICBjb25zdCB3aW5kb3dJZCA9IHRoaXMuX2Jyb3dzZXJDb25uZWN0aW9uLmFjdGl2ZVdpbmRvd0lkO1xuXG4gICAgICAgIGlmICghdGhpcy5fY3VycmVudFRlc3RSdW4pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCB0YXNrU2NyaXB0ID0gYXdhaXQgdGhpcy5fY3VycmVudFRlc3RSdW4uc2Vzc2lvbi5nZXRUYXNrU2NyaXB0KHtcbiAgICAgICAgICAgIHJlZmVyZXI6ICAgICAnJyxcbiAgICAgICAgICAgIGNvb2tpZVVybDogICAnJyxcbiAgICAgICAgICAgIHdpdGhQYXlsb2FkOiB0cnVlLFxuICAgICAgICAgICAgc2VydmVySW5mbzogIHByb3h5LnNlcnZlcjFJbmZvLFxuICAgICAgICAgICAgd2luZG93SWQsXG4gICAgICAgICAgICBpc0lmcmFtZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaW5qZWN0YWJsZVJlc291cmNlcyA9IHtcbiAgICAgICAgICAgIHN0b3JhZ2VzOiAgICByZXN0b3JpbmdTdG9yYWdlcyxcbiAgICAgICAgICAgIHN0eWxlc2hlZXRzOiBbXG4gICAgICAgICAgICAgICAgVEVTVENBRkVfVUlfU1RZTEVTLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHNjcmlwdHM6IFtcbiAgICAgICAgICAgICAgICAuLi5IQU1NRVJIRUFEX0lOSkVDVEFCTEVfU0NSSVBUUy5tYXAoaHMgPT4gZ2V0QXNzZXRQYXRoKGhzLCBwcm94eS5vcHRpb25zLmRldmVsb3BtZW50TW9kZSkpLFxuICAgICAgICAgICAgICAgIC4uLlNDUklQVFMubWFwKHMgPT4gZ2V0QXNzZXRQYXRoKHMsIHByb3h5Lm9wdGlvbnMuZGV2ZWxvcG1lbnRNb2RlKSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZW1iZWRkZWRTY3JpcHRzOiBbdGFza1NjcmlwdF0sXG4gICAgICAgIH07XG5cbiAgICAgICAgaW5qZWN0YWJsZVJlc291cmNlcy5zY3JpcHRzICAgICA9IGluamVjdGFibGVSZXNvdXJjZXMuc2NyaXB0cy5tYXAoc2NyaXB0ID0+IHByb3h5LnJlc29sdmVSZWxhdGl2ZVNlcnZpY2VVcmwoc2NyaXB0KSk7XG4gICAgICAgIGluamVjdGFibGVSZXNvdXJjZXMuc3R5bGVzaGVldHMgPSBpbmplY3RhYmxlUmVzb3VyY2VzLnN0eWxlc2hlZXRzLm1hcChzdHlsZSA9PiBwcm94eS5yZXNvbHZlUmVsYXRpdmVTZXJ2aWNlVXJsKHN0eWxlKSk7XG5cbiAgICAgICAgcmV0dXJuIGluamVjdGFibGVSZXNvdXJjZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJvY2Vzc1Jlc3BvbnNlSGVhZGVycyAoaGVhZGVyczogSGVhZGVyRW50cnlbXSB8IHVuZGVmaW5lZCk6IEhlYWRlckVudHJ5W10ge1xuICAgICAgICBpZiAoIWhlYWRlcnMpXG4gICAgICAgICAgICByZXR1cm4gW107XG5cbiAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuZmlsdGVyKGhlYWRlciA9PiAhUkVTUE9OU0VfUkVNT1ZFRF9IRUFERVJTLmluY2x1ZGVzKGhlYWRlci5uYW1lLnRvTG93ZXJDYXNlKCkpKTtcblxuICAgICAgICByZXR1cm4gc3RyaW5naWZ5SGVhZGVyVmFsdWVzKGhlYWRlcnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2Z1bGZpbGxSZXF1ZXN0IChjbGllbnQ6IFByb3RvY29sQXBpLCBmdWxmaWxsUmVxdWVzdEluZm86IEZ1bGZpbGxSZXF1ZXN0UmVxdWVzdCwgYm9keTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHNhZmVGdWxmaWxsUmVxdWVzdChjbGllbnQsIHtcbiAgICAgICAgICAgIHJlcXVlc3RJZDogICAgICAgZnVsZmlsbFJlcXVlc3RJbmZvLnJlcXVlc3RJZCxcbiAgICAgICAgICAgIHJlc3BvbnNlQ29kZTogICAgZnVsZmlsbFJlcXVlc3RJbmZvLnJlc3BvbnNlQ29kZSB8fCBTdGF0dXNDb2Rlcy5PSyxcbiAgICAgICAgICAgIHJlc3BvbnNlUGhyYXNlOiAgZnVsZmlsbFJlcXVlc3RJbmZvLnJlc3BvbnNlUGhyYXNlLFxuICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzOiB0aGlzLl9wcm9jZXNzUmVzcG9uc2VIZWFkZXJzKGZ1bGZpbGxSZXF1ZXN0SW5mby5yZXNwb25zZUhlYWRlcnMpLFxuICAgICAgICAgICAgYm9keTogICAgICAgICAgICB0b0Jhc2U2NFN0cmluZyhib2R5KSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlZGlyZWN0VG9FcnJvclBhZ2UgKGNsaWVudDogUHJvdG9jb2xBcGksIGVycjogRXJyb3IsIHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJDb25uZWN0aW9uID0gQnJvd3NlckNvbm5lY3Rpb24uZ2V0QnlJZCh0aGlzLl9icm93c2VySWQpIGFzIEJyb3dzZXJDb25uZWN0aW9uO1xuICAgICAgICBjb25zdCBjdXJyZW50VGVzdFJ1biAgICA9IGJyb3dzZXJDb25uZWN0aW9uLmdldEN1cnJlbnRUZXN0UnVuKCk7XG5cbiAgICAgICAgaWYgKCFjdXJyZW50VGVzdFJ1bilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjdXJyZW50VGVzdFJ1bi5wZW5kaW5nUGFnZUVycm9yID0gbmV3IFBhZ2VMb2FkRXJyb3IoZXJyLCB1cmwpO1xuXG4gICAgICAgIGF3YWl0IG5hdmlnYXRlVG8oY2xpZW50LCB0aGlzLl9zcGVjaWFsU2VydmljZVJvdXRlcy5lcnJvclBhZ2UxKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RG9jdW1lbnRSZXNvdXJjZUluZm8gKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGNsaWVudDogUHJvdG9jb2xBcGkpOiBQcm9taXNlPERvY3VtZW50UmVzb3VyY2VJbmZvPiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICByZXNwb25zZUVycm9yUmVhc29uLFxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlLFxuICAgICAgICB9ID0gZXZlbnQ7XG5cbiAgICAgICAgaWYgKHJlc291cmNlVHlwZSAhPT0gJ0RvY3VtZW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICBib2R5OiAgbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlRXJyb3JSZWFzb24gPT09ICdOYW1lTm90UmVzb2x2ZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBGYWlsZWQgdG8gZmluZCBhIEROUy1yZWNvcmQgZm9yIHRoZSByZXNvdXJjZSBhdCBcIiR7ZXZlbnQucmVxdWVzdC51cmx9XCJgKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnIsXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6ICBudWxsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlT2JqID0gYXdhaXQgY2xpZW50LkZldGNoLmdldFJlc3BvbnNlQm9keSh7IHJlcXVlc3RJZCB9KTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlU3RyID0gZ2V0UmVzcG9uc2VBc1N0cmluZyhyZXNwb25zZU9iaik7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgYm9keTogIEJ1ZmZlci5mcm9tKHJlc3BvbnNlU3RyKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmVzb3VyY2VJbmplY3RvckxvZ2dlcignRmFpbGVkIHRvIHByb2Nlc3MgcmVxdWVzdDogJXMnLCByZXF1ZXN0LnVybCk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycixcbiAgICAgICAgICAgICAgICBib2R5OiAgbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcHJvY2Vzc0Fib3V0QmxhbmtQYWdlIChldmVudDogRnJhbWVOYXZpZ2F0ZWRFdmVudCwgY2xpZW50OiBQcm90b2NvbEFwaSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXNvdXJjZUluamVjdG9yTG9nZ2VyKCdIYW5kbGUgcGFnZSBhcyBhYm91dDpibGFuay4gT3JpZ2luIHVybDogJXMnLCBldmVudC5mcmFtZS51cmwpO1xuXG4gICAgICAgIGNvbnN0IGluamVjdGFibGVSZXNvdXJjZXMgPSBhd2FpdCB0aGlzLl9wcmVwYXJlSW5qZWN0YWJsZVJlc291cmNlcyh7IGlzSWZyYW1lOiBmYWxzZSB9KSBhcyBQYWdlSW5qZWN0YWJsZVJlc291cmNlcztcbiAgICAgICAgY29uc3QgaHRtbCAgICAgICAgICAgICAgICA9IGluamVjdFJlc291cmNlcyhFTVBUWV9QQUdFX01BUktVUCwgaW5qZWN0YWJsZVJlc291cmNlcyk7XG5cbiAgICAgICAgYXdhaXQgY2xpZW50LlBhZ2Uuc2V0RG9jdW1lbnRDb250ZW50KHtcbiAgICAgICAgICAgIGZyYW1lSWQ6IGV2ZW50LmZyYW1lLmlkLFxuICAgICAgICAgICAgaHRtbCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHByb2Nlc3NIVE1MUGFnZUNvbnRlbnQgKGZ1bGZpbGxSZXF1ZXN0SW5mbzogRnVsZmlsbFJlcXVlc3RSZXF1ZXN0LCBpbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9uczogSW5qZWN0YWJsZVJlc291cmNlc09wdGlvbnMsIGNsaWVudDogUHJvdG9jb2xBcGkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgaW5qZWN0YWJsZVJlc291cmNlcyA9IGF3YWl0IHRoaXMuX3ByZXBhcmVJbmplY3RhYmxlUmVzb3VyY2VzKGluamVjdGFibGVSZXNvdXJjZXNPcHRpb25zKTtcblxuICAgICAgICAvLyBOT1RFOiBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uIGludGVycnVwdHMgdGhlIHRlc3QgZXhlY3V0aW9uLFxuICAgICAgICAvLyBhbmQgd2UgYXJlIGZvcmNlIHRvIHJlZGlyZWN0IG1hbnVhbGx5IHRvIHRoZSBpZGxlIHBhZ2UuXG4gICAgICAgIGlmICghaW5qZWN0YWJsZVJlc291cmNlcylcbiAgICAgICAgICAgIGF3YWl0IHJlZGlyZWN0KGNsaWVudCwgZnVsZmlsbFJlcXVlc3RJbmZvLnJlcXVlc3RJZCwgdGhpcy5fc3BlY2lhbFNlcnZpY2VSb3V0ZXMuaWRsZVBhZ2UpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRSZXNwb25zZVN0ciA9IGluamVjdFJlc291cmNlcyhcbiAgICAgICAgICAgICAgICBmdWxmaWxsUmVxdWVzdEluZm8uYm9keSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgaW5qZWN0YWJsZVJlc291cmNlcyxcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRQYWdlSW5qZWN0YWJsZVJlc291cmNlc09wdGlvbnMoaW5qZWN0YWJsZVJlc291cmNlc09wdGlvbnMpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZnVsZmlsbFJlcXVlc3QoY2xpZW50LCBmdWxmaWxsUmVxdWVzdEluZm8sIHVwZGF0ZWRSZXNwb25zZVN0cik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcHJvY2Vzc05vblByb3hpZWRDb250ZW50IChmdWxmaWxsUmVxdWVzdEluZm86IEZ1bGZpbGxSZXF1ZXN0UmVxdWVzdCwgY2xpZW50OiBQcm90b2NvbEFwaSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLl9mdWxmaWxsUmVxdWVzdChjbGllbnQsIGZ1bGZpbGxSZXF1ZXN0SW5mbywgZnVsZmlsbFJlcXVlc3RJbmZvLmJvZHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRQYWdlSW5qZWN0YWJsZVJlc291cmNlc09wdGlvbnMgKGluamVjdGFibGVSZXNvdXJjZXNPcHRpb25zOiBJbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9ucyk6IFBhZ2VSZXN0b3JlU3RvcmFnZXNPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgeyB1cmwsIHJlc3RvcmluZ1N0b3JhZ2VzIH0gPSBpbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9ucztcblxuICAgICAgICBpZiAodXJsICYmIHJlc3RvcmluZ1N0b3JhZ2VzKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGhvc3Q6ICAgICAgbmV3IFVSTCh1cmwpLmhvc3QsXG4gICAgICAgICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLl9jdXJyZW50VGVzdFJ1bi5zZXNzaW9uLmlkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxufVxuIl19
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtaW5qZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJveHlsZXNzL3Jlc291cmNlLWluamVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBUUEsNkRBTTZCO0FBQzdCLHVFQUFzRDtBQUN0RCx1REFBb0U7QUFDcEUsNEVBQW9EO0FBQ3BELHlEQUFnRDtBQUNoRCxpREFBbUQ7QUFDbkQscUNBQW1EO0FBUW5ELDBEQUFnRTtBQUNoRSwyQ0FJd0I7QUFDeEIsMERBQWlFO0FBR2pFLE1BQU0sd0JBQXdCLEdBQUc7SUFDN0IsOEJBQThCO0lBQzlCLDRCQUE0QjtJQUM1Qiw4QkFBOEI7Q0FDakMsQ0FBQztBQUVGLE1BQXFCLGdCQUFnQjtJQUlqQyxZQUFvQixTQUFpQixFQUFFLG9CQUEwQztRQUM3RSxJQUFJLENBQUMsVUFBVSxHQUFjLFNBQVMsQ0FBQztRQUN2QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsb0JBQW9CLENBQUM7SUFDdEQsQ0FBQztJQUVELElBQVksa0JBQWtCO1FBQzFCLE9BQU8sb0JBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQXNCLENBQUM7SUFDM0UsQ0FBQztJQUVELElBQVksZUFBZTtRQUN2QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFTywrQkFBK0IsQ0FBRSxjQUF1QjtRQUM1RCxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUM7UUFFdEQsT0FBTywyRkFBMkYsY0FBYyxNQUFNLENBQUM7SUFDM0gsQ0FBQztJQUVPLEtBQUssQ0FBQywyQkFBMkIsQ0FBRSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQThCO1FBQ2xILE1BQU0sS0FBSyxHQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUM7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QUFDLHdCQUF3QixDQUFFLGtCQUF5QyxFQUFFLE1BQW1CO1FBQ2pHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsSUFBYyxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVPLGtDQUFrQyxDQUFFLDBCQUFzRDtRQUM5RixNQUFNLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsMEJBQTBCLENBQUM7UUFFOUQsSUFBSSxHQUFHLElBQUksaUJBQWlCLEVBQUU7WUFDMUIsT0FBTztnQkFDSCxJQUFJLEVBQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSTtnQkFDNUIsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUU7YUFDN0MsQ0FBQztTQUNMO1FBRUQsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNsQixDQUFDO0NBQ0o7QUFqTEQsbUNBaUxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdG9jb2xBcGkgfSBmcm9tICdjaHJvbWUtcmVtb3RlLWludGVyZmFjZSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBUZXN0UnVuIGFzIExlZ2FjeVRlc3RSdW4gfSBmcm9tICd0ZXN0Y2FmZS1sZWdhY3ktYXBpJztcbmltcG9ydCBQcm90b2NvbCBmcm9tICdkZXZ0b29scy1wcm90b2NvbCc7XG5pbXBvcnQgUmVxdWVzdFBhdXNlZEV2ZW50ID0gUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdXNlZEV2ZW50O1xuaW1wb3J0IEZyYW1lTmF2aWdhdGVkRXZlbnQgPSBQcm90b2NvbC5QYWdlLkZyYW1lTmF2aWdhdGVkRXZlbnQ7XG5pbXBvcnQgRnVsZmlsbFJlcXVlc3RSZXF1ZXN0ID0gUHJvdG9jb2wuRmV0Y2guRnVsZmlsbFJlcXVlc3RSZXF1ZXN0O1xuaW1wb3J0IEhlYWRlckVudHJ5ID0gUHJvdG9jb2wuRmV0Y2guSGVhZGVyRW50cnk7XG5pbXBvcnQge1xuICAgIGluamVjdFJlc291cmNlcyxcbiAgICBQYWdlSW5qZWN0YWJsZVJlc291cmNlcyxcbiAgICBJTkpFQ1RBQkxFX1NDUklQVFMgYXMgSEFNTUVSSEVBRF9JTkpFQ1RBQkxFX1NDUklQVFMsXG4gICAgZ2V0QXNzZXRQYXRoLFxuICAgIFBhZ2VSZXN0b3JlU3RvcmFnZXNPcHRpb25zLFxufSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcbmltcG9ydCBCcm93c2VyQ29ubmVjdGlvbiBmcm9tICcuLi9icm93c2VyL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IHsgU0NSSVBUUywgVEVTVENBRkVfVUlfU1RZTEVTIH0gZnJvbSAnLi4vYXNzZXRzL2luamVjdGFibGVzJztcbmltcG9ydCBFTVBUWV9QQUdFX01BUktVUCBmcm9tICcuL2VtcHR5LXBhZ2UtbWFya3VwJztcbmltcG9ydCB7IFN0YXR1c0NvZGVzIH0gZnJvbSAnaHR0cC1zdGF0dXMtY29kZXMnO1xuaW1wb3J0IHsgUGFnZUxvYWRFcnJvciB9IGZyb20gJy4uL2Vycm9ycy90ZXN0LXJ1bic7XG5pbXBvcnQgeyByZWRpcmVjdCwgbmF2aWdhdGVUbyB9IGZyb20gJy4vdXRpbHMvY2RwJztcblxuaW1wb3J0IHtcbiAgICBEb2N1bWVudFJlc291cmNlSW5mbyxcbiAgICBJbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9ucyxcbiAgICBTcGVjaWFsU2VydmljZVJvdXRlcyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmltcG9ydCB7IHJlc291cmNlSW5qZWN0b3JMb2dnZXIgfSBmcm9tICcuLi91dGlscy9kZWJ1Zy1sb2dnZXJzJztcbmltcG9ydCB7XG4gICAgZ2V0UmVzcG9uc2VBc1N0cmluZyxcbiAgICBzdHJpbmdpZnlIZWFkZXJWYWx1ZXMsXG4gICAgdG9CYXNlNjRTdHJpbmcsXG59IGZyb20gJy4vdXRpbHMvc3RyaW5nJztcbmltcG9ydCB7IHNhZmVGdWxmaWxsUmVxdWVzdCB9IGZyb20gJy4vcmVxdWVzdC1waXBlbGluZS9zYWZlLWFwaSc7XG5pbXBvcnQgVGVzdFJ1biBmcm9tICcuLi90ZXN0LXJ1bic7XG5cbmNvbnN0IFJFU1BPTlNFX1JFTU9WRURfSEVBREVSUyA9IFtcbiAgICAnY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeScsXG4gICAgJ2Nyb3NzLW9yaWdpbi1vcGVuZXItcG9saWN5JyxcbiAgICAnY3Jvc3Mtb3JpZ2luLXJlc291cmNlLXBvbGljeScsXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXNvdXJjZUluamVjdG9yIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9icm93c2VySWQ6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zcGVjaWFsU2VydmljZVJvdXRlczogU3BlY2lhbFNlcnZpY2VSb3V0ZXM7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGJyb3dzZXJJZDogc3RyaW5nLCBzcGVjaWFsU2VydmljZVJvdXRlczogU3BlY2lhbFNlcnZpY2VSb3V0ZXMpIHtcbiAgICAgICAgdGhpcy5fYnJvd3NlcklkICAgICAgICAgICAgPSBicm93c2VySWQ7XG4gICAgICAgIHRoaXMuX3NwZWNpYWxTZXJ2aWNlUm91dGVzID0gc3BlY2lhbFNlcnZpY2VSb3V0ZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgX2Jyb3dzZXJDb25uZWN0aW9uICgpOiBCcm93c2VyQ29ubmVjdGlvbiB7XG4gICAgICAgIHJldHVybiBCcm93c2VyQ29ubmVjdGlvbi5nZXRCeUlkKHRoaXMuX2Jyb3dzZXJJZCkgYXMgQnJvd3NlckNvbm5lY3Rpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgX2N1cnJlbnRUZXN0UnVuICgpOiBMZWdhY3lUZXN0UnVuIHwgVGVzdFJ1biB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fYnJvd3NlckNvbm5lY3Rpb24uZ2V0Q3VycmVudFRlc3RSdW4oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRSZXN0b3JlQ29udGV4dFN0b3JhZ2VTY3JpcHQgKGNvbnRleHRTdG9yYWdlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29udGV4dFN0b3JhZ2UgPSBKU09OLnN0cmluZ2lmeShjb250ZXh0U3RvcmFnZSB8fCAnJyk7XG5cbiAgICAgICAgcmV0dXJuIGBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnJXByb3h5bGVzc0NvbnRleHRTdG9yYWdlJScsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogJHtjb250ZXh0U3RvcmFnZX0gfSk7YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9wcmVwYXJlSW5qZWN0YWJsZVJlc291cmNlcyAoeyBpc0lmcmFtZSwgcmVzdG9yaW5nU3RvcmFnZXMsIGNvbnRleHRTdG9yYWdlIH06IEluamVjdGFibGVSZXNvdXJjZXNPcHRpb25zKTogUHJvbWlzZTxQYWdlSW5qZWN0YWJsZVJlc291cmNlcyB8IG51bGw+IHtcbiAgICAgICAgY29uc3QgcHJveHkgICAgPSB0aGlzLl9icm93c2VyQ29ubmVjdGlvbi5icm93c2VyQ29ubmVjdGlvbkdhdGV3YXkucHJveHk7XG4gICAgICAgIGNvbnN0IHdpbmRvd0lkID0gdGhpcy5fYnJvd3NlckNvbm5lY3Rpb24uYWN0aXZlV2luZG93SWQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jdXJyZW50VGVzdFJ1bilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHRhc2tTY3JpcHQgPSBhd2FpdCB0aGlzLl9jdXJyZW50VGVzdFJ1bi5zZXNzaW9uLmdldFRhc2tTY3JpcHQoe1xuICAgICAgICAgICAgcmVmZXJlcjogICAgICcnLFxuICAgICAgICAgICAgY29va2llVXJsOiAgICcnLFxuICAgICAgICAgICAgd2l0aFBheWxvYWQ6IHRydWUsXG4gICAgICAgICAgICBzZXJ2ZXJJbmZvOiAgcHJveHkuc2VydmVyMUluZm8sXG4gICAgICAgICAgICB3aW5kb3dJZCxcbiAgICAgICAgICAgIGlzSWZyYW1lLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBpbmplY3RhYmxlUmVzb3VyY2VzID0ge1xuICAgICAgICAgICAgc3RvcmFnZXM6ICAgIHJlc3RvcmluZ1N0b3JhZ2VzLFxuICAgICAgICAgICAgc3R5bGVzaGVldHM6IFtcbiAgICAgICAgICAgICAgICBURVNUQ0FGRV9VSV9TVFlMRVMsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc2NyaXB0czogW1xuICAgICAgICAgICAgICAgIC4uLkhBTU1FUkhFQURfSU5KRUNUQUJMRV9TQ1JJUFRTLm1hcChocyA9PiBnZXRBc3NldFBhdGgoaHMsIHByb3h5Lm9wdGlvbnMuZGV2ZWxvcG1lbnRNb2RlKSksXG4gICAgICAgICAgICAgICAgLi4uU0NSSVBUUy5tYXAocyA9PiBnZXRBc3NldFBhdGgocywgcHJveHkub3B0aW9ucy5kZXZlbG9wbWVudE1vZGUpKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBlbWJlZGRlZFNjcmlwdHM6IFt0aGlzLl9nZXRSZXN0b3JlQ29udGV4dFN0b3JhZ2VTY3JpcHQoY29udGV4dFN0b3JhZ2UpLCB0YXNrU2NyaXB0XSxcbiAgICAgICAgfTtcblxuICAgICAgICBpbmplY3RhYmxlUmVzb3VyY2VzLnNjcmlwdHMgICAgID0gaW5qZWN0YWJsZVJlc291cmNlcy5zY3JpcHRzLm1hcChzY3JpcHQgPT4gcHJveHkucmVzb2x2ZVJlbGF0aXZlU2VydmljZVVybChzY3JpcHQpKTtcbiAgICAgICAgaW5qZWN0YWJsZVJlc291cmNlcy5zdHlsZXNoZWV0cyA9IGluamVjdGFibGVSZXNvdXJjZXMuc3R5bGVzaGVldHMubWFwKHN0eWxlID0+IHByb3h5LnJlc29sdmVSZWxhdGl2ZVNlcnZpY2VVcmwoc3R5bGUpKTtcblxuICAgICAgICByZXR1cm4gaW5qZWN0YWJsZVJlc291cmNlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcm9jZXNzUmVzcG9uc2VIZWFkZXJzIChoZWFkZXJzOiBIZWFkZXJFbnRyeVtdIHwgdW5kZWZpbmVkKTogSGVhZGVyRW50cnlbXSB7XG4gICAgICAgIGlmICghaGVhZGVycylcbiAgICAgICAgICAgIHJldHVybiBbXTtcblxuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5maWx0ZXIoaGVhZGVyID0+ICFSRVNQT05TRV9SRU1PVkVEX0hFQURFUlMuaW5jbHVkZXMoaGVhZGVyLm5hbWUudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgICAgIHJldHVybiBzdHJpbmdpZnlIZWFkZXJWYWx1ZXMoaGVhZGVycyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZnVsZmlsbFJlcXVlc3QgKGNsaWVudDogUHJvdG9jb2xBcGksIGZ1bGZpbGxSZXF1ZXN0SW5mbzogRnVsZmlsbFJlcXVlc3RSZXF1ZXN0LCBib2R5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgc2FmZUZ1bGZpbGxSZXF1ZXN0KGNsaWVudCwge1xuICAgICAgICAgICAgcmVxdWVzdElkOiAgICAgICBmdWxmaWxsUmVxdWVzdEluZm8ucmVxdWVzdElkLFxuICAgICAgICAgICAgcmVzcG9uc2VDb2RlOiAgICBmdWxmaWxsUmVxdWVzdEluZm8ucmVzcG9uc2VDb2RlIHx8IFN0YXR1c0NvZGVzLk9LLFxuICAgICAgICAgICAgcmVzcG9uc2VQaHJhc2U6ICBmdWxmaWxsUmVxdWVzdEluZm8ucmVzcG9uc2VQaHJhc2UsXG4gICAgICAgICAgICByZXNwb25zZUhlYWRlcnM6IHRoaXMuX3Byb2Nlc3NSZXNwb25zZUhlYWRlcnMoZnVsZmlsbFJlcXVlc3RJbmZvLnJlc3BvbnNlSGVhZGVycyksXG4gICAgICAgICAgICBib2R5OiAgICAgICAgICAgIHRvQmFzZTY0U3RyaW5nKGJvZHkpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVkaXJlY3RUb0Vycm9yUGFnZSAoY2xpZW50OiBQcm90b2NvbEFwaSwgZXJyOiBFcnJvciwgdXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgYnJvd3NlckNvbm5lY3Rpb24gPSBCcm93c2VyQ29ubmVjdGlvbi5nZXRCeUlkKHRoaXMuX2Jyb3dzZXJJZCkgYXMgQnJvd3NlckNvbm5lY3Rpb247XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUZXN0UnVuICAgID0gYnJvd3NlckNvbm5lY3Rpb24uZ2V0Q3VycmVudFRlc3RSdW4oKTtcblxuICAgICAgICBpZiAoIWN1cnJlbnRUZXN0UnVuKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGN1cnJlbnRUZXN0UnVuLnBlbmRpbmdQYWdlRXJyb3IgPSBuZXcgUGFnZUxvYWRFcnJvcihlcnIsIHVybCk7XG5cbiAgICAgICAgYXdhaXQgbmF2aWdhdGVUbyhjbGllbnQsIHRoaXMuX3NwZWNpYWxTZXJ2aWNlUm91dGVzLmVycm9yUGFnZTEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXREb2N1bWVudFJlc291cmNlSW5mbyAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgY2xpZW50OiBQcm90b2NvbEFwaSk6IFByb21pc2U8RG9jdW1lbnRSZXNvdXJjZUluZm8+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgIHJlc3BvbnNlRXJyb3JSZWFzb24sXG4gICAgICAgICAgICByZXNvdXJjZVR5cGUsXG4gICAgICAgIH0gPSBldmVudDtcblxuICAgICAgICBpZiAocmVzb3VyY2VUeXBlICE9PSAnRG9jdW1lbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgICAgIGJvZHk6ICBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VFcnJvclJlYXNvbiA9PT0gJ05hbWVOb3RSZXNvbHZlZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYEZhaWxlZCB0byBmaW5kIGEgRE5TLXJlY29yZCBmb3IgdGhlIHJlc291cmNlIGF0IFwiJHtldmVudC5yZXF1ZXN0LnVybH1cImApO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycixcbiAgICAgICAgICAgICAgICAgICAgYm9keTogIG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VPYmogPSBhd2FpdCBjbGllbnQuRmV0Y2guZ2V0UmVzcG9uc2VCb2R5KHsgcmVxdWVzdElkIH0pO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VTdHIgPSBnZXRSZXNwb25zZUFzU3RyaW5nKHJlc3BvbnNlT2JqKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICBib2R5OiAgQnVmZmVyLmZyb20ocmVzcG9uc2VTdHIpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXNvdXJjZUluamVjdG9yTG9nZ2VyKCdGYWlsZWQgdG8gcHJvY2VzcyByZXF1ZXN0OiAlcycsIHJlcXVlc3QudXJsKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyLFxuICAgICAgICAgICAgICAgIGJvZHk6ICBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcm9jZXNzQWJvdXRCbGFua1BhZ2UgKGV2ZW50OiBGcmFtZU5hdmlnYXRlZEV2ZW50LCBjbGllbnQ6IFByb3RvY29sQXBpKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJlc291cmNlSW5qZWN0b3JMb2dnZXIoJ0hhbmRsZSBwYWdlIGFzIGFib3V0OmJsYW5rLiBPcmlnaW4gdXJsOiAlcycsIGV2ZW50LmZyYW1lLnVybCk7XG5cbiAgICAgICAgY29uc3QgaW5qZWN0YWJsZVJlc291cmNlcyA9IGF3YWl0IHRoaXMuX3ByZXBhcmVJbmplY3RhYmxlUmVzb3VyY2VzKHsgaXNJZnJhbWU6IGZhbHNlIH0pIGFzIFBhZ2VJbmplY3RhYmxlUmVzb3VyY2VzO1xuICAgICAgICBjb25zdCBodG1sICAgICAgICAgICAgICAgID0gaW5qZWN0UmVzb3VyY2VzKEVNUFRZX1BBR0VfTUFSS1VQLCBpbmplY3RhYmxlUmVzb3VyY2VzKTtcblxuICAgICAgICBhd2FpdCBjbGllbnQuUGFnZS5zZXREb2N1bWVudENvbnRlbnQoe1xuICAgICAgICAgICAgZnJhbWVJZDogZXZlbnQuZnJhbWUuaWQsXG4gICAgICAgICAgICBodG1sLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcHJvY2Vzc0hUTUxQYWdlQ29udGVudCAoZnVsZmlsbFJlcXVlc3RJbmZvOiBGdWxmaWxsUmVxdWVzdFJlcXVlc3QsIGluamVjdGFibGVSZXNvdXJjZXNPcHRpb25zOiBJbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9ucywgY2xpZW50OiBQcm90b2NvbEFwaSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBpbmplY3RhYmxlUmVzb3VyY2VzID0gYXdhaXQgdGhpcy5fcHJlcGFyZUluamVjdGFibGVSZXNvdXJjZXMoaW5qZWN0YWJsZVJlc291cmNlc09wdGlvbnMpO1xuXG4gICAgICAgIC8vIE5PVEU6IGFuIHVuaGFuZGxlZCBleGNlcHRpb24gaW50ZXJydXB0cyB0aGUgdGVzdCBleGVjdXRpb24sXG4gICAgICAgIC8vIGFuZCB3ZSBhcmUgZm9yY2UgdG8gcmVkaXJlY3QgbWFudWFsbHkgdG8gdGhlIGlkbGUgcGFnZS5cbiAgICAgICAgaWYgKCFpbmplY3RhYmxlUmVzb3VyY2VzKVxuICAgICAgICAgICAgYXdhaXQgcmVkaXJlY3QoY2xpZW50LCBmdWxmaWxsUmVxdWVzdEluZm8ucmVxdWVzdElkLCB0aGlzLl9zcGVjaWFsU2VydmljZVJvdXRlcy5pZGxlUGFnZSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFJlc3BvbnNlU3RyID0gaW5qZWN0UmVzb3VyY2VzKFxuICAgICAgICAgICAgICAgIGZ1bGZpbGxSZXF1ZXN0SW5mby5ib2R5IGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICBpbmplY3RhYmxlUmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgIHRoaXMuX2dldFBhZ2VJbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9ucyhpbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9ucyksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9mdWxmaWxsUmVxdWVzdChjbGllbnQsIGZ1bGZpbGxSZXF1ZXN0SW5mbywgdXBkYXRlZFJlc3BvbnNlU3RyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcm9jZXNzTm9uUHJveGllZENvbnRlbnQgKGZ1bGZpbGxSZXF1ZXN0SW5mbzogRnVsZmlsbFJlcXVlc3RSZXF1ZXN0LCBjbGllbnQ6IFByb3RvY29sQXBpKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2Z1bGZpbGxSZXF1ZXN0KGNsaWVudCwgZnVsZmlsbFJlcXVlc3RJbmZvLCBmdWxmaWxsUmVxdWVzdEluZm8uYm9keSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFBhZ2VJbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9ucyAoaW5qZWN0YWJsZVJlc291cmNlc09wdGlvbnM6IEluamVjdGFibGVSZXNvdXJjZXNPcHRpb25zKTogUGFnZVJlc3RvcmVTdG9yYWdlc09wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCB7IHVybCwgcmVzdG9yaW5nU3RvcmFnZXMgfSA9IGluamVjdGFibGVSZXNvdXJjZXNPcHRpb25zO1xuXG4gICAgICAgIGlmICh1cmwgJiYgcmVzdG9yaW5nU3RvcmFnZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaG9zdDogICAgICBuZXcgVVJMKHVybCkuaG9zdCxcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuX2N1cnJlbnRUZXN0UnVuLnNlc3Npb24uaWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const api_base_1 = __importDefault(require("../api-base"));
7
+ const async_event_emitter_1 = __importDefault(require("../../utils/async-event-emitter"));
8
+ const PROXYLESS_STORAGE_BINDING = 'PROXYLESS_STORAGE_BINDING';
9
+ class SessionStorage extends api_base_1.default {
10
+ constructor(browserId, client) {
11
+ super(browserId, client);
12
+ this.sessionStorage = '';
13
+ this._eventEmitter = new async_event_emitter_1.default();
14
+ }
15
+ on(eventName, listener) {
16
+ return this._eventEmitter.on(eventName, listener);
17
+ }
18
+ async init() {
19
+ await this._client.Runtime.addBinding({ name: PROXYLESS_STORAGE_BINDING });
20
+ await this._client.Runtime.on('bindingCalled', (event) => {
21
+ if (event.name === 'PROXYLESS_STORAGE_BINDING') {
22
+ this.sessionStorage = event.payload;
23
+ this._eventEmitter.emit('contextStorageModified', this.sessionStorage);
24
+ }
25
+ });
26
+ }
27
+ }
28
+ exports.default = SessionStorage;
29
+ module.exports = exports.default;
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJveHlsZXNzL3Nlc3Npb24tc3RvcmFnZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLDJEQUEyQztBQUUzQywwRkFBZ0U7QUFHaEUsTUFBTSx5QkFBeUIsR0FBRywyQkFBMkIsQ0FBQztBQUU5RCxNQUFxQixjQUFlLFNBQVEsa0JBQWdCO0lBSXhELFlBQWEsU0FBaUIsRUFBRSxNQUFtQjtRQUMvQyxLQUFLLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXpCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSw2QkFBaUIsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFTSxFQUFFLENBQUUsU0FBaUIsRUFBRSxRQUFrQztRQUM1RCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUk7UUFDYixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRSxDQUFDLENBQUM7UUFFM0UsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUMsS0FBeUIsRUFBRSxFQUFFO1lBQ3pFLElBQUksS0FBSyxDQUFDLElBQUksS0FBSywyQkFBMkIsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUVwQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDMUU7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQTFCRCxpQ0EwQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm90b2NvbEFwaSB9IGZyb20gJ2Nocm9tZS1yZW1vdGUtaW50ZXJmYWNlJztcbmltcG9ydCBQcm90b2NvbCBmcm9tICdkZXZ0b29scy1wcm90b2NvbCc7XG5pbXBvcnQgUHJveHlsZXNzQXBpQmFzZSBmcm9tICcuLi9hcGktYmFzZSc7XG5pbXBvcnQgQmluZGluZ0NhbGxlZEV2ZW50ID0gUHJvdG9jb2wuUnVudGltZS5CaW5kaW5nQ2FsbGVkRXZlbnQ7XG5pbXBvcnQgQXN5bmNFdmVudEVtaXR0ZXIgZnJvbSAnLi4vLi4vdXRpbHMvYXN5bmMtZXZlbnQtZW1pdHRlcic7XG5pbXBvcnQgRW1pdHRlcnkgZnJvbSAnZW1pdHRlcnknO1xuXG5jb25zdCBQUk9YWUxFU1NfU1RPUkFHRV9CSU5ESU5HID0gJ1BST1hZTEVTU19TVE9SQUdFX0JJTkRJTkcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXNzaW9uU3RvcmFnZSBleHRlbmRzIFByb3h5bGVzc0FwaUJhc2Uge1xuICAgIHB1YmxpYyBzZXNzaW9uU3RvcmFnZTogc3RyaW5nO1xuICAgIHByaXZhdGUgX2V2ZW50RW1pdHRlcjogQXN5bmNFdmVudEVtaXR0ZXI7XG5cbiAgICBjb25zdHJ1Y3RvciAoYnJvd3NlcklkOiBzdHJpbmcsIGNsaWVudDogUHJvdG9jb2xBcGkpIHtcbiAgICAgICAgc3VwZXIoYnJvd3NlcklkLCBjbGllbnQpO1xuXG4gICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2UgPSAnJztcbiAgICAgICAgdGhpcy5fZXZlbnRFbWl0dGVyID0gbmV3IEFzeW5jRXZlbnRFbWl0dGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uIChldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudERhdGE/OiBhbnkpID0+IGFueSk6IEVtaXR0ZXJ5LlVuc3Vic2NyaWJlRm4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRFbWl0dGVyLm9uKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBpbml0ICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LlJ1bnRpbWUuYWRkQmluZGluZyh7IG5hbWU6IFBST1hZTEVTU19TVE9SQUdFX0JJTkRJTkcgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LlJ1bnRpbWUub24oJ2JpbmRpbmdDYWxsZWQnLCAoZXZlbnQ6IEJpbmRpbmdDYWxsZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50Lm5hbWUgPT09ICdQUk9YWUxFU1NfU1RPUkFHRV9CSU5ESU5HJykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2UgPSBldmVudC5wYXlsb2FkO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRFbWl0dGVyLmVtaXQoJ2NvbnRleHRTdG9yYWdlTW9kaWZpZWQnLCB0aGlzLnNlc3Npb25TdG9yYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
@@ -1,3 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJveHlsZXNzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCB7IFByb3RvY29sQXBpIH0gZnJvbSAnY2hyb21lLXJlbW90ZS1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUHJveHlsZXNzU2V0dXBPcHRpb25zIH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IFN0b3JhZ2VzU25hcHNob3QgfSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcblxuZXhwb3J0IGludGVyZmFjZSBTcGVjaWFsU2VydmljZVJvdXRlcyB7XG4gICAgZXJyb3JQYWdlMTogc3RyaW5nO1xuICAgIGVycm9yUGFnZTI6IHN0cmluZztcbiAgICBvcGVuRmlsZVByb3RvY29sVXJsOiBzdHJpbmc7XG4gICAgaWRsZVBhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb2N1bWVudFJlc291cmNlSW5mbyB7XG4gICAgZXJyb3I6IGFueTtcbiAgICBib2R5OiBCdWZmZXIgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RIYW5kbGVyIHtcbiAgICBjb25kaXRpb246IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBvcHRpb25zPzogUHJveHlsZXNzU2V0dXBPcHRpb25zLCBzZXJ2aWNlUm91dGVzPzogU3BlY2lhbFNlcnZpY2VSb3V0ZXMpID0+IGJvb2xlYW47XG4gICAgaGFuZGxlcjogKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGNsaWVudDogUHJvdG9jb2xBcGksIG9wdGlvbnM/OiBQcm94eWxlc3NTZXR1cE9wdGlvbnMpID0+IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5qZWN0YWJsZVJlc291cmNlc09wdGlvbnMge1xuICAgIGlzSWZyYW1lOiBib29sZWFuO1xuICAgIHVybD86IHN0cmluZztcbiAgICByZXN0b3JpbmdTdG9yYWdlcz86IFN0b3JhZ2VzU25hcHNob3QgfCBudWxsO1xufVxuIl19
3
+ exports.EventType = void 0;
4
+ var EventType;
5
+ (function (EventType) {
6
+ EventType[EventType["Mouse"] = 0] = "Mouse";
7
+ EventType[EventType["Key"] = 1] = "Key";
8
+ EventType[EventType["Touch"] = 2] = "Touch";
9
+ })(EventType = exports.EventType || (exports.EventType = {}));
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJveHlsZXNzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThCQSxJQUFZLFNBSVg7QUFKRCxXQUFZLFNBQVM7SUFDakIsMkNBQUssQ0FBQTtJQUNMLHVDQUFHLENBQUE7SUFDSCwyQ0FBSyxDQUFBO0FBQ1QsQ0FBQyxFQUpXLFNBQVMsR0FBVCxpQkFBUyxLQUFULGlCQUFTLFFBSXBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFByb3RvY29sIGZyb20gJ2RldnRvb2xzLXByb3RvY29sJztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnQgPSBQcm90b2NvbC5GZXRjaC5SZXF1ZXN0UGF1c2VkRXZlbnQ7XG5pbXBvcnQgeyBQcm90b2NvbEFwaSB9IGZyb20gJ2Nocm9tZS1yZW1vdGUtaW50ZXJmYWNlJztcbmltcG9ydCB7IFByb3h5bGVzc1NldHVwT3B0aW9ucyB9IGZyb20gJy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBTdG9yYWdlc1NuYXBzaG90IH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlY2lhbFNlcnZpY2VSb3V0ZXMge1xuICAgIGVycm9yUGFnZTE6IHN0cmluZztcbiAgICBlcnJvclBhZ2UyOiBzdHJpbmc7XG4gICAgb3BlbkZpbGVQcm90b2NvbFVybDogc3RyaW5nO1xuICAgIGlkbGVQYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9jdW1lbnRSZXNvdXJjZUluZm8ge1xuICAgIGVycm9yOiBhbnk7XG4gICAgYm9keTogQnVmZmVyIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0SGFuZGxlciB7XG4gICAgY29uZGl0aW9uOiAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgb3B0aW9ucz86IFByb3h5bGVzc1NldHVwT3B0aW9ucywgc2VydmljZVJvdXRlcz86IFNwZWNpYWxTZXJ2aWNlUm91dGVzKSA9PiBib29sZWFuO1xuICAgIGhhbmRsZXI6IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBjbGllbnQ6IFByb3RvY29sQXBpLCBvcHRpb25zPzogUHJveHlsZXNzU2V0dXBPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluamVjdGFibGVSZXNvdXJjZXNPcHRpb25zIHtcbiAgICBpc0lmcmFtZTogYm9vbGVhbjtcbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgcmVzdG9yaW5nU3RvcmFnZXM/OiBTdG9yYWdlc1NuYXBzaG90IHwgbnVsbDtcbiAgICBjb250ZXh0U3RvcmFnZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gRXZlbnRUeXBlIHtcbiAgICBNb3VzZSxcbiAgICBLZXksXG4gICAgVG91Y2gsXG59XG4iXX0=
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createRequestPausedEventForResponse = exports.isPreflightRequest = exports.isRequestPausedEvent = exports.isRequest = exports.navigateTo = exports.redirect = void 0;
3
+ exports.createRequestPausedEventForResponse = exports.isPreflightRequest = exports.isRequestPausedEvent = exports.isRequest = exports.dispatchEvent = exports.navigateTo = exports.redirect = void 0;
4
4
  const http_status_codes_1 = require("http-status-codes");
5
5
  const headers_1 = require("./headers");
6
+ const types_1 = require("../types");
6
7
  async function redirect(client, requestId, url) {
7
8
  await client.Fetch.fulfillRequest({
8
9
  requestId,
@@ -17,6 +18,22 @@ async function navigateTo(client, url) {
17
18
  await client.Page.navigate({ url });
18
19
  }
19
20
  exports.navigateTo = navigateTo;
21
+ async function dispatchEvent(client, type, options) {
22
+ switch (+type) {
23
+ case types_1.EventType.Mouse:
24
+ await client.Input.dispatchMouseEvent(options);
25
+ break;
26
+ case types_1.EventType.Key:
27
+ await client.Input.dispatchKeyEvent(options);
28
+ break;
29
+ case types_1.EventType.Touch:
30
+ await client.Input.dispatchTouchEvent(options);
31
+ break;
32
+ default:
33
+ throw new Error(`Unknown "${options.type}" event type`);
34
+ }
35
+ }
36
+ exports.dispatchEvent = dispatchEvent;
20
37
  function isRequest(event) {
21
38
  return event.responseStatusCode === void 0;
22
39
  }
@@ -36,4 +53,4 @@ function createRequestPausedEventForResponse(mockedResponse, requestEvent) {
36
53
  });
37
54
  }
38
55
  exports.createRequestPausedEventForResponse = createRequestPausedEventForResponse;
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3h5bGVzcy91dGlscy9jZHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseURBQWdEO0FBSWhELHVDQUFtRDtBQUc1QyxLQUFLLFVBQVUsUUFBUSxDQUFFLE1BQW1CLEVBQUUsU0FBaUIsRUFBRSxHQUFXO0lBQy9FLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDOUIsU0FBUztRQUNULFlBQVksRUFBSywrQkFBVyxDQUFDLGlCQUFpQjtRQUM5QyxlQUFlLEVBQUU7WUFDYixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtTQUNuQztLQUNKLENBQUMsQ0FBQztBQUNQLENBQUM7QUFSRCw0QkFRQztBQUVNLEtBQUssVUFBVSxVQUFVLENBQUUsTUFBbUIsRUFBRSxHQUFXO0lBQzlELE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFGRCxnQ0FFQztBQUVELFNBQWdCLFNBQVMsQ0FBRSxLQUF5QjtJQUNoRCxPQUFPLEtBQUssQ0FBQyxrQkFBa0IsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRkQsOEJBRUM7QUFFRCxTQUFnQixvQkFBb0IsQ0FBRSxHQUFRO0lBQzFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksT0FBTyxHQUFHLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQztBQUNqRSxDQUFDO0FBRkQsb0RBRUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBRSxLQUF5QjtJQUN6RCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQztBQUM5QyxDQUFDO0FBRkQsZ0RBRUM7QUFFRCxTQUFnQixtQ0FBbUMsQ0FBRSxjQUFtQyxFQUFFLFlBQWdDO0lBQ3RILE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFO1FBQ25DLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxVQUFVO1FBQzdDLGVBQWUsRUFBSyxJQUFBLGdDQUFzQixFQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7S0FDckUsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUxELGtGQUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdG9jb2xBcGkgfSBmcm9tICdjaHJvbWUtcmVtb3RlLWludGVyZmFjZSc7XG5pbXBvcnQgeyBTdGF0dXNDb2RlcyB9IGZyb20gJ2h0dHAtc3RhdHVzLWNvZGVzJztcbmltcG9ydCBQcm90b2NvbCBmcm9tICdkZXZ0b29scy1wcm90b2NvbCc7XG5pbXBvcnQgUmVxdWVzdFBhdXNlZEV2ZW50ID0gUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdXNlZEV2ZW50O1xuaW1wb3J0IHsgSW5jb21pbmdNZXNzYWdlTGlrZSB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IHsgY29udmVydFRvSGVhZGVyRW50cmllcyB9IGZyb20gJy4vaGVhZGVycyc7XG5cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZGlyZWN0IChjbGllbnQ6IFByb3RvY29sQXBpLCByZXF1ZXN0SWQ6IHN0cmluZywgdXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBjbGllbnQuRmV0Y2guZnVsZmlsbFJlcXVlc3Qoe1xuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIHJlc3BvbnNlQ29kZTogICAgU3RhdHVzQ29kZXMuTU9WRURfUEVSTUFORU5UTFksXG4gICAgICAgIHJlc3BvbnNlSGVhZGVyczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnbG9jYXRpb24nLCB2YWx1ZTogdXJsIH0sXG4gICAgICAgIF0sXG4gICAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBuYXZpZ2F0ZVRvIChjbGllbnQ6IFByb3RvY29sQXBpLCB1cmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGNsaWVudC5QYWdlLm5hdmlnYXRlKHsgdXJsIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZXF1ZXN0IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV2ZW50LnJlc3BvbnNlU3RhdHVzQ29kZSA9PT0gdm9pZCAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZXF1ZXN0UGF1c2VkRXZlbnQgKHZhbDogYW55KTogdmFsIGlzIFJlcXVlc3RQYXVzZWRFdmVudCB7XG4gICAgcmV0dXJuIHZhbCAmJiB2YWwuZnJhbWVJZCAmJiB0eXBlb2YgdmFsLnJlcXVlc3QgPT09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcmVmbGlnaHRSZXF1ZXN0IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV2ZW50LnJlcXVlc3QubWV0aG9kID09PSAnT1BUSU9OUyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0UGF1c2VkRXZlbnRGb3JSZXNwb25zZSAobW9ja2VkUmVzcG9uc2U6IEluY29taW5nTWVzc2FnZUxpa2UsIHJlcXVlc3RFdmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogUmVxdWVzdFBhdXNlZEV2ZW50IHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcmVxdWVzdEV2ZW50LCB7XG4gICAgICAgIHJlc3BvbnNlU3RhdHVzQ29kZTogbW9ja2VkUmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgcmVzcG9uc2VIZWFkZXJzOiAgICBjb252ZXJ0VG9IZWFkZXJFbnRyaWVzKG1vY2tlZFJlc3BvbnNlLmhlYWRlcnMpLFxuICAgIH0pO1xufVxuIl19
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3h5bGVzcy91dGlscy9jZHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseURBQWdEO0FBSWhELHVDQUFtRDtBQUNuRCxvQ0FBcUM7QUFHOUIsS0FBSyxVQUFVLFFBQVEsQ0FBRSxNQUFtQixFQUFFLFNBQWlCLEVBQUUsR0FBVztJQUMvRSxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQzlCLFNBQVM7UUFDVCxZQUFZLEVBQUssK0JBQVcsQ0FBQyxpQkFBaUI7UUFDOUMsZUFBZSxFQUFFO1lBQ2IsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7U0FDbkM7S0FDSixDQUFDLENBQUM7QUFDUCxDQUFDO0FBUkQsNEJBUUM7QUFFTSxLQUFLLFVBQVUsVUFBVSxDQUFFLE1BQW1CLEVBQUUsR0FBVztJQUM5RCxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRkQsZ0NBRUM7QUFFTSxLQUFLLFVBQVUsYUFBYSxDQUFFLE1BQW1CLEVBQUUsSUFBZSxFQUFFLE9BQVk7SUFDbkYsUUFBUSxDQUFDLElBQUksRUFBRTtRQUNYLEtBQUssaUJBQVMsQ0FBQyxLQUFLO1lBQ2hCLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQyxNQUFNO1FBQ1YsS0FBSyxpQkFBUyxDQUFDLEdBQUc7WUFDZCxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0MsTUFBTTtRQUNWLEtBQUssaUJBQVMsQ0FBQyxLQUFLO1lBQ2hCLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQyxNQUFNO1FBQ1Y7WUFDSSxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksT0FBTyxDQUFDLElBQUksY0FBYyxDQUFDLENBQUM7S0FDL0Q7QUFDTCxDQUFDO0FBZEQsc0NBY0M7QUFFRCxTQUFnQixTQUFTLENBQUUsS0FBeUI7SUFDaEQsT0FBTyxLQUFLLENBQUMsa0JBQWtCLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUZELDhCQUVDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQUUsR0FBUTtJQUMxQyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLE9BQU8sR0FBRyxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUM7QUFDakUsQ0FBQztBQUZELG9EQUVDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUUsS0FBeUI7SUFDekQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUM7QUFDOUMsQ0FBQztBQUZELGdEQUVDO0FBRUQsU0FBZ0IsbUNBQW1DLENBQUUsY0FBbUMsRUFBRSxZQUFnQztJQUN0SCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRTtRQUNuQyxrQkFBa0IsRUFBRSxjQUFjLENBQUMsVUFBVTtRQUM3QyxlQUFlLEVBQUssSUFBQSxnQ0FBc0IsRUFBQyxjQUFjLENBQUMsT0FBTyxDQUFDO0tBQ3JFLENBQUMsQ0FBQztBQUNQLENBQUM7QUFMRCxrRkFLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3RvY29sQXBpIH0gZnJvbSAnY2hyb21lLXJlbW90ZS1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU3RhdHVzQ29kZXMgfSBmcm9tICdodHRwLXN0YXR1cy1jb2Rlcyc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCB7IEluY29taW5nTWVzc2FnZUxpa2UgfSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcbmltcG9ydCB7IGNvbnZlcnRUb0hlYWRlckVudHJpZXMgfSBmcm9tICcuL2hlYWRlcnMnO1xuaW1wb3J0IHsgRXZlbnRUeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWRpcmVjdCAoY2xpZW50OiBQcm90b2NvbEFwaSwgcmVxdWVzdElkOiBzdHJpbmcsIHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgY2xpZW50LkZldGNoLmZ1bGZpbGxSZXF1ZXN0KHtcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICByZXNwb25zZUNvZGU6ICAgIFN0YXR1c0NvZGVzLk1PVkVEX1BFUk1BTkVOVExZLFxuICAgICAgICByZXNwb25zZUhlYWRlcnM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ2xvY2F0aW9uJywgdmFsdWU6IHVybCB9LFxuICAgICAgICBdLFxuICAgIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmF2aWdhdGVUbyAoY2xpZW50OiBQcm90b2NvbEFwaSwgdXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBjbGllbnQuUGFnZS5uYXZpZ2F0ZSh7IHVybCB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQgKGNsaWVudDogUHJvdG9jb2xBcGksIHR5cGU6IEV2ZW50VHlwZSwgb3B0aW9uczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoICgrdHlwZSkge1xuICAgICAgICBjYXNlIEV2ZW50VHlwZS5Nb3VzZTpcbiAgICAgICAgICAgIGF3YWl0IGNsaWVudC5JbnB1dC5kaXNwYXRjaE1vdXNlRXZlbnQob3B0aW9ucyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFdmVudFR5cGUuS2V5OlxuICAgICAgICAgICAgYXdhaXQgY2xpZW50LklucHV0LmRpc3BhdGNoS2V5RXZlbnQob3B0aW9ucyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFdmVudFR5cGUuVG91Y2g6XG4gICAgICAgICAgICBhd2FpdCBjbGllbnQuSW5wdXQuZGlzcGF0Y2hUb3VjaEV2ZW50KG9wdGlvbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gXCIke29wdGlvbnMudHlwZX1cIiBldmVudCB0eXBlYCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZXF1ZXN0IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV2ZW50LnJlc3BvbnNlU3RhdHVzQ29kZSA9PT0gdm9pZCAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZXF1ZXN0UGF1c2VkRXZlbnQgKHZhbDogYW55KTogdmFsIGlzIFJlcXVlc3RQYXVzZWRFdmVudCB7XG4gICAgcmV0dXJuIHZhbCAmJiB2YWwuZnJhbWVJZCAmJiB0eXBlb2YgdmFsLnJlcXVlc3QgPT09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcmVmbGlnaHRSZXF1ZXN0IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV2ZW50LnJlcXVlc3QubWV0aG9kID09PSAnT1BUSU9OUyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0UGF1c2VkRXZlbnRGb3JSZXNwb25zZSAobW9ja2VkUmVzcG9uc2U6IEluY29taW5nTWVzc2FnZUxpa2UsIHJlcXVlc3RFdmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogUmVxdWVzdFBhdXNlZEV2ZW50IHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcmVxdWVzdEV2ZW50LCB7XG4gICAgICAgIHJlc3BvbnNlU3RhdHVzQ29kZTogbW9ja2VkUmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgcmVzcG9uc2VIZWFkZXJzOiAgICBjb252ZXJ0VG9IZWFkZXJFbnRyaWVzKG1vY2tlZFJlc3BvbnNlLmhlYWRlcnMpLFxuICAgIH0pO1xufVxuIl19
@@ -99,12 +99,13 @@ class Bootstrapper {
99
99
  }
100
100
  async _compileTests({ sourceList, compilerOptions, runnableConfigurationId }) {
101
101
  const baseUrl = this.configuration.getOption(option_names_1.default.baseUrl);
102
+ const experimentalEsm = this.configuration.getOption(option_names_1.default.experimentalEsm);
102
103
  if (this.compilerService) {
103
104
  await this.compilerService.init();
104
105
  await this.compilerService.setUserVariables(user_variables_1.default.value);
105
106
  return this.compilerService.getTests({ sourceList, compilerOptions, runnableConfigurationId }, baseUrl);
106
107
  }
107
- const compiler = new compiler_1.default(sourceList, compilerOptions, { baseUrl, isCompilerServiceMode: false });
108
+ const compiler = new compiler_1.default(sourceList, compilerOptions, { baseUrl, isCompilerServiceMode: false, experimentalEsm });
108
109
  return compiler.getTests();
109
110
  }
110
111
  _assertGlobalHooks() {
@@ -239,4 +240,4 @@ class Bootstrapper {
239
240
  }
240
241
  exports.default = Bootstrapper;
241
242
  module.exports = exports.default;
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bm5lci9ib290c3RyYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FNZ0I7QUFFaEIsa0RBQTBCO0FBQzFCLGtFQUF1QztBQUN2QywyREFBbUM7QUFDbkMsdUVBQXVFO0FBQ3ZFLGdFQUF1QztBQUN2QywrQ0FBaUQ7QUFDakQsMkNBQWlEO0FBQ2pELDhEQUFxQztBQUNyQywrRUFBcUQ7QUFDckQseUVBQThEO0FBQzlELDRDQUE4RDtBQVM5RCwrRUFBc0Q7QUFDdEQsdUZBQWdFO0FBQ2hFLHlGQUErRDtBQUMvRCx5RUFBZ0Q7QUFHaEQsbUZBQXlEO0FBQ3pELHVFQUFtRTtBQUNuRSw2REFBdUQ7QUFDdkQsbUZBQXFFO0FBQ3JFLDJFQUFrRDtBQUVsRCxpRkFBeUQ7QUFFekQsTUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUM7QUEyQjVDLFNBQVMsY0FBYyxDQUE4QixLQUEwQjtJQUMzRSxPQUFRLEtBQXlCLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFhRCxNQUFxQixZQUFZO0lBeUI3QixZQUFvQixFQUFFLHdCQUF3QixFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFvQjtRQUMxRyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsd0JBQXdCLENBQUM7UUFDekQsSUFBSSxDQUFDLFdBQVcsR0FBZ0IsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQW9CLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFtQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBa0IsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQXFCLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLEdBQWlCLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZ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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBjaHVuayxcbiAgICB0aW1lcyxcbiAgICB1bmlvbixcbiAgICBjYXN0QXJyYXksXG4gICAgZmxhdHRlbkRlZXAgYXMgZmxhdHRlbixcbn0gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBwcmV0dHlUaW1lIGZyb20gJ3ByZXR0eS1ocnRpbWUnO1xuaW1wb3J0IENvbXBpbGVyIGZyb20gJy4uL2NvbXBpbGVyJztcbmltcG9ydCBCcm93c2VyQ29ubmVjdGlvbiwgeyBCcm93c2VySW5mbyB9IGZyb20gJy4uL2Jyb3dzZXIvY29ubmVjdGlvbic7XG5pbXBvcnQgQnJvd3NlclNldCBmcm9tICcuL2Jyb3dzZXItc2V0JztcbmltcG9ydCB7IEdlbmVyYWxFcnJvciB9IGZyb20gJy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vZXJyb3JzL3R5cGVzJztcbmltcG9ydCBUZXN0ZWRBcHAgZnJvbSAnLi90ZXN0ZWQtYXBwJztcbmltcG9ydCBwYXJzZUZpbGVMaXN0IGZyb20gJy4uL3V0aWxzL3BhcnNlLWZpbGUtbGlzdCc7XG5pbXBvcnQgbG9hZENsaWVudFNjcmlwdHMgZnJvbSAnLi4vY3VzdG9tLWNsaWVudC1zY3JpcHRzL2xvYWQnO1xuaW1wb3J0IHsgZ2V0Q29uY2F0ZW5hdGVkVmFsdWVzU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMvc3RyaW5nJztcbmltcG9ydCB7IFJlcG9ydGVyU291cmNlIH0gZnJvbSAnLi4vcmVwb3J0ZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgQ2xpZW50U2NyaXB0IGZyb20gJy4uL2N1c3RvbS1jbGllbnQtc2NyaXB0cy9jbGllbnQtc2NyaXB0JztcbmltcG9ydCBDbGllbnRTY3JpcHRJbml0IGZyb20gJy4uL2N1c3RvbS1jbGllbnQtc2NyaXB0cy9jbGllbnQtc2NyaXB0LWluaXQnO1xuaW1wb3J0IEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheSBmcm9tICcuLi9icm93c2VyL2Nvbm5lY3Rpb24vZ2F0ZXdheSc7XG5pbXBvcnQgeyBDb21waWxlckFyZ3VtZW50cyB9IGZyb20gJy4uL2NvbXBpbGVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IENvbXBpbGVyU2VydmljZSBmcm9tICcuLi9zZXJ2aWNlcy9jb21waWxlci9ob3N0JztcbmltcG9ydCBUZXN0IGZyb20gJy4uL2FwaS9zdHJ1Y3R1cmUvdGVzdCc7XG5pbXBvcnQgeyBCb290c3RyYXBwZXJJbml0LCBCcm93c2VyU2V0T3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgV2FybmluZ0xvZyBmcm9tICcuLi9ub3RpZmljYXRpb25zL3dhcm5pbmctbG9nJztcbmltcG9ydCBXQVJOSU5HX01FU1NBR0VTIGZyb20gJy4uL25vdGlmaWNhdGlvbnMvd2FybmluZy1tZXNzYWdlJztcbmltcG9ydCBndWFyZFRpbWVFeGVjdXRpb24gZnJvbSAnLi4vdXRpbHMvZ3VhcmQtdGltZS1leGVjdXRpb24nO1xuaW1wb3J0IGFzeW5jRmlsdGVyIGZyb20gJy4uL3V0aWxzL2FzeW5jLWZpbHRlcic7XG5pbXBvcnQgRml4dHVyZSBmcm9tICcuLi9hcGkvc3RydWN0dXJlL2ZpeHR1cmUnO1xuaW1wb3J0IE1lc3NhZ2VCdXMgZnJvbSAnLi4vdXRpbHMvbWVzc2FnZS1idXMnO1xuaW1wb3J0IHdyYXBUZXN0RnVuY3Rpb24gZnJvbSAnLi4vYXBpL3dyYXAtdGVzdC1mdW5jdGlvbic7XG5pbXBvcnQgeyBhc3NlcnRUeXBlLCBpcyB9IGZyb20gJy4uL2Vycm9ycy9ydW50aW1lL3R5cGUtYXNzZXJ0aW9ucyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVVuaXF1ZUlkIH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgYXNzZXJ0UmVxdWVzdEhvb2tUeXBlIGZyb20gJy4uL2FwaS9yZXF1ZXN0LWhvb2tzL2Fzc2VydC10eXBlJztcbmltcG9ydCB1c2VyVmFyaWFibGVzIGZyb20gJy4uL2FwaS91c2VyLXZhcmlhYmxlcyc7XG5pbXBvcnQgQ29uZmlndXJhdGlvbiBmcm9tICcuLi9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24tYmFzZSc7XG5pbXBvcnQgT1BUSU9OX05BTUVTIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24vb3B0aW9uLW5hbWVzJztcblxuY29uc3QgREVCVUdfU0NPUEUgPSAndGVzdGNhZmU6Ym9vdHN0cmFwcGVyJztcblxudHlwZSBUZXN0U291cmNlID0gdW5rbm93bjtcblxudHlwZSBCcm93c2VySW5mb1NvdXJjZSA9IEJyb3dzZXJJbmZvIHwgQnJvd3NlckNvbm5lY3Rpb247XG5cbmludGVyZmFjZSBQcm9taXNlU3VjY2VzczxUPiB7XG4gICAgcmVzdWx0OiBUO1xufVxuXG5pbnRlcmZhY2UgUHJvbWlzZUVycm9yPEUgZXh0ZW5kcyBFcnJvciA9IEVycm9yPiB7XG4gICAgZXJyb3I6IEU7XG59XG5cbmludGVyZmFjZSBCYXNpY1J1bnRpbWVSZXNvdXJjZXMge1xuICAgIGJyb3dzZXJTZXQ6IEJyb3dzZXJTZXQ7XG4gICAgdGVzdHM6IFRlc3RbXTtcbiAgICB0ZXN0ZWRBcHA/OiBUZXN0ZWRBcHA7XG59XG5cbmludGVyZmFjZSBSdW5uYWJsZUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNpY1J1bnRpbWVSZXNvdXJjZXMge1xuICAgIGNvbW1vbkNsaWVudFNjcmlwdHM6IENsaWVudFNjcmlwdFtdO1xuICAgIGlkOiBzdHJpbmc7XG59XG5cbnR5cGUgUHJvbWlzZVJlc3VsdDxULCBFIGV4dGVuZHMgRXJyb3IgPSBFcnJvcj4gPSBQcm9taXNlU3VjY2VzczxUPiB8IFByb21pc2VFcnJvcjxFPjtcblxuZnVuY3Rpb24gaXNQcm9taXNlRXJyb3I8VCwgRSBleHRlbmRzIEVycm9yID0gRXJyb3I+ICh2YWx1ZTogUHJvbWlzZVJlc3VsdDxULCBFPik6IHZhbHVlIGlzIFByb21pc2VFcnJvcjxFPiB7XG4gICAgcmV0dXJuICh2YWx1ZSBhcyBQcm9taXNlRXJyb3I8RT4pLmVycm9yICE9PSB2b2lkIDA7XG59XG5cbmludGVyZmFjZSBTZXBhcmF0ZWRCcm93c2VySW5mbyB7XG4gICAgcmVtb3RlczogQnJvd3NlckNvbm5lY3Rpb25bXTtcbiAgICBhdXRvbWF0ZWQ6IEJyb3dzZXJJbmZvW107XG59XG5cbnR5cGUgUHJvbWlzZUNvbGxlY3Rpb248VD4gPSB7XG4gICAgW0sgaW4ga2V5b2YgVF06IFByb21pc2U8VFtLXT5cbn1cblxudHlwZSBSZXN1bHRDb2xsZWN0aW9uPFQ+ID0geyBbUCBpbiBrZXlvZiBUXTogUHJvbWlzZVJlc3VsdDxUW1BdPiB9O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb290c3RyYXBwZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5OiBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXk7XG4gICAgcHVibGljIGNvbmN1cnJlbmN5OiBudW1iZXI7XG4gICAgcHVibGljIHNvdXJjZXM6IFRlc3RTb3VyY2VbXTtcbiAgICBwdWJsaWMgYnJvd3NlcnM6IEJyb3dzZXJJbmZvU291cmNlW107XG4gICAgcHVibGljIHJlcG9ydGVyczogUmVwb3J0ZXJTb3VyY2VbXTtcbiAgICBwdWJsaWMgZmlsdGVyPzogRmlsdGVyRnVuY3Rpb247XG4gICAgcHVibGljIGFwcENvbW1hbmQ/OiBzdHJpbmc7XG4gICAgcHVibGljIGFwcEluaXREZWxheT86IG51bWJlcjtcbiAgICBwdWJsaWMgdHNDb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHB1YmxpYyBjbGllbnRTY3JpcHRzOiBDbGllbnRTY3JpcHRJbml0W107XG4gICAgcHVibGljIGRpc2FibGVNdWx0aXBsZVdpbmRvd3M6IGJvb2xlYW47XG4gICAgcHVibGljIHByb3h5bGVzczogYm9vbGVhbjtcbiAgICBwdWJsaWMgY29tcGlsZXJPcHRpb25zPzogQ29tcGlsZXJPcHRpb25zO1xuICAgIHB1YmxpYyBicm93c2VySW5pdFRpbWVvdXQ/OiBudW1iZXI7XG4gICAgcHVibGljIGhvb2tzPzogR2xvYmFsSG9va3M7XG4gICAgcHVibGljIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb247XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBpbGVyU2VydmljZT86IENvbXBpbGVyU2VydmljZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlYnVnTG9nZ2VyOiBkZWJ1Zy5EZWJ1Z2dlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdhcm5pbmdMb2c6IFdhcm5pbmdMb2c7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlQnVzOiBNZXNzYWdlQnVzO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBURVNUU19DT01QSUxBVElPTl9VUFBFUkJPVU5EOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHsgYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LCBjb21waWxlclNlcnZpY2UsIG1lc3NhZ2VCdXMsIGNvbmZpZ3VyYXRpb24gfTogQm9vdHN0cmFwcGVySW5pdCkge1xuICAgICAgICB0aGlzLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheSA9IGJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheTtcbiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSAgICAgICAgICAgICAgPSAxO1xuICAgICAgICB0aGlzLnNvdXJjZXMgICAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmJyb3dzZXJzICAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLnJlcG9ydGVycyAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmZpbHRlciAgICAgICAgICAgICAgICAgICA9IHZvaWQgMDtcbiAgICAgICAgdGhpcy5hcHBDb21tYW5kICAgICAgICAgICAgICAgPSB2b2lkIDA7XG4gICAgICAgIHRoaXMuYXBwSW5pdERlbGF5ICAgICAgICAgICAgID0gdm9pZCAwO1xuICAgICAgICB0aGlzLnRzQ29uZmlnUGF0aCAgICAgICAgICAgICA9IHZvaWQgMDtcbiAgICAgICAgdGhpcy5jbGllbnRTY3JpcHRzICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlwbGVXaW5kb3dzICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wcm94eWxlc3MgICAgICAgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21waWxlck9wdGlvbnMgICAgICAgICAgPSB2b2lkIDA7XG4gICAgICAgIHRoaXMuZGVidWdMb2dnZXIgICAgICAgICAgICAgID0gZGVidWcoREVCVUdfU0NPUEUpO1xuICAgICAgICB0aGlzLndhcm5pbmdMb2cgICAgICAgICAgICAgICA9IG5ldyBXYXJuaW5nTG9nKG51bGwsIFdhcm5pbmdMb2cuY3JlYXRlQWRkV2FybmluZ0NhbGxiYWNrKG1lc3NhZ2VCdXMpKTtcbiAgICAgICAgdGhpcy5jb21waWxlclNlcnZpY2UgICAgICAgICAgPSBjb21waWxlclNlcnZpY2U7XG4gICAgICAgIHRoaXMubWVzc2FnZUJ1cyAgICAgICAgICAgICAgID0gbWVzc2FnZUJ1cztcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uICAgICAgICAgICAgPSBjb25maWd1cmF0aW9uO1xuXG4gICAgICAgIHRoaXMuVEVTVFNfQ09NUElMQVRJT05fVVBQRVJCT1VORCA9IDYwO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9nZXRCcm93c2VyTmFtZSAoYnJvd3NlcjogQnJvd3NlckluZm9Tb3VyY2UpOiBzdHJpbmcge1xuICAgICAgICBpZiAoYnJvd3NlciBpbnN0YW5jZW9mIEJyb3dzZXJDb25uZWN0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIGJyb3dzZXIuYnJvd3NlckluZm8uYnJvd3Nlck5hbWU7XG5cbiAgICAgICAgcmV0dXJuIGJyb3dzZXIuYnJvd3Nlck5hbWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX3NwbGl0QnJvd3NlckluZm8gKGJyb3dzZXJJbmZvOiBCcm93c2VySW5mb1NvdXJjZVtdKTogU2VwYXJhdGVkQnJvd3NlckluZm8ge1xuICAgICAgICBjb25zdCByZW1vdGVzOiBCcm93c2VyQ29ubmVjdGlvbltdICA9IFtdO1xuICAgICAgICBjb25zdCBhdXRvbWF0ZWQ6IEJyb3dzZXJJbmZvW10gICAgICA9IFtdO1xuXG4gICAgICAgIGJyb3dzZXJJbmZvLmZvckVhY2goYnJvd3NlciA9PiB7XG4gICAgICAgICAgICBpZiAoYnJvd3NlciBpbnN0YW5jZW9mIEJyb3dzZXJDb25uZWN0aW9uKVxuICAgICAgICAgICAgICAgIHJlbW90ZXMucHVzaChicm93c2VyKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBhdXRvbWF0ZWQucHVzaChicm93c2VyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHsgcmVtb3RlcywgYXV0b21hdGVkIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlQXV0b21hdGVkQ29ubmVjdGlvbnMgKGJyb3dzZXJJbmZvOiBCcm93c2VySW5mb1tdKTogQnJvd3NlckNvbm5lY3Rpb25bXVtdIHtcbiAgICAgICAgaWYgKCFicm93c2VySW5mbylcbiAgICAgICAgICAgIHJldHVybiBbXTtcblxuICAgICAgICByZXR1cm4gYnJvd3NlckluZm9cbiAgICAgICAgICAgIC5tYXAoYnJvd3NlciA9PiB0aW1lcyh0aGlzLmNvbmN1cnJlbmN5LCAoKSA9PiBuZXcgQnJvd3NlckNvbm5lY3Rpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbkdhdGV3YXksIHsgLi4uYnJvd3NlciB9LCBmYWxzZSwgdGhpcy5kaXNhYmxlTXVsdGlwbGVXaW5kb3dzLCB0aGlzLnByb3h5bGVzcywgdGhpcy5tZXNzYWdlQnVzKSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldEJyb3dzZXJTZXRPcHRpb25zICgpOiBCcm93c2VyU2V0T3B0aW9ucyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeTogICAgICAgIHRoaXMuY29uY3VycmVuY3ksXG4gICAgICAgICAgICBicm93c2VySW5pdFRpbWVvdXQ6IHRoaXMuYnJvd3NlckluaXRUaW1lb3V0LFxuICAgICAgICAgICAgd2FybmluZ0xvZzogICAgICAgICB0aGlzLndhcm5pbmdMb2csXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0QnJvd3NlckNvbm5lY3Rpb25zIChicm93c2VySW5mbzogQnJvd3NlckluZm9Tb3VyY2VbXSk6IFByb21pc2U8QnJvd3NlclNldD4ge1xuICAgICAgICBjb25zdCB7IGF1dG9tYXRlZCwgcmVtb3RlcyB9ID0gQm9vdHN0cmFwcGVyLl9zcGxpdEJyb3dzZXJJbmZvKGJyb3dzZXJJbmZvKTtcblxuICAgICAgICBpZiAocmVtb3RlcyAmJiByZW1vdGVzLmxlbmd0aCAlIHRoaXMuY29uY3VycmVuY3kpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLmNhbm5vdERpdmlkZVJlbW90ZXNDb3VudEJ5Q29uY3VycmVuY3kpO1xuXG4gICAgICAgIGxldCBicm93c2VyQ29ubmVjdGlvbnMgPSB0aGlzLl9jcmVhdGVBdXRvbWF0ZWRDb25uZWN0aW9ucyhhdXRvbWF0ZWQpO1xuXG4gICAgICAgIHJlbW90ZXMuZm9yRWFjaChyZW1vdGVDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIHJlbW90ZUNvbm5lY3Rpb24ubWVzc2FnZUJ1cyA9IHRoaXMubWVzc2FnZUJ1cztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYnJvd3NlckNvbm5lY3Rpb25zID0gYnJvd3NlckNvbm5lY3Rpb25zLmNvbmNhdChjaHVuayhyZW1vdGVzLCB0aGlzLmNvbmN1cnJlbmN5KSk7XG5cbiAgICAgICAgcmV0dXJuIEJyb3dzZXJTZXQuZnJvbShicm93c2VyQ29ubmVjdGlvbnMsIHRoaXMuX2dldEJyb3dzZXJTZXRPcHRpb25zKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2ZpbHRlclRlc3RzICh0ZXN0czogVGVzdFtdLCBwcmVkaWNhdGU6IEZpbHRlckZ1bmN0aW9uKTogUHJvbWlzZTxUZXN0W10+IHtcbiAgICAgICAgcmV0dXJuIGFzeW5jRmlsdGVyKHRlc3RzLCB0ZXN0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RGaXh0dXJlID0gdGVzdC5maXh0dXJlIGFzIEZpeHR1cmU7XG5cbiAgICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUoXG4gICAgICAgICAgICAgICAgdGVzdC5uYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICB0ZXN0Rml4dHVyZS5uYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICB0ZXN0Rml4dHVyZS5wYXRoLFxuICAgICAgICAgICAgICAgIHRlc3QubWV0YSxcbiAgICAgICAgICAgICAgICB0ZXN0Rml4dHVyZS5tZXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfY29tcGlsZVRlc3RzICh7IHNvdXJjZUxpc3QsIGNvbXBpbGVyT3B0aW9ucywgcnVubmFibGVDb25maWd1cmF0aW9uSWQgfTogQ29tcGlsZXJBcmd1bWVudHMpOiBQcm9taXNlPFRlc3RbXT4ge1xuICAgICAgICBjb25zdCBiYXNlVXJsICA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmJhc2VVcmwpIGFzIHN0cmluZztcblxuICAgICAgICBpZiAodGhpcy5jb21waWxlclNlcnZpY2UpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29tcGlsZXJTZXJ2aWNlLmluaXQoKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29tcGlsZXJTZXJ2aWNlLnNldFVzZXJWYXJpYWJsZXModXNlclZhcmlhYmxlcy52YWx1ZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVyU2VydmljZS5nZXRUZXN0cyh7IHNvdXJjZUxpc3QsIGNvbXBpbGVyT3B0aW9ucywgcnVubmFibGVDb25maWd1cmF0aW9uSWQgfSwgYmFzZVVybCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb21waWxlciA9IG5ldyBDb21waWxlcihzb3VyY2VMaXN0LCBjb21waWxlck9wdGlvbnMsIHsgYmFzZVVybCwgaXNDb21waWxlclNlcnZpY2VNb2RlOiBmYWxzZSB9KTtcblxuICAgICAgICByZXR1cm4gY29tcGlsZXIuZ2V0VGVzdHMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hc3NlcnRHbG9iYWxIb29rcyAoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5ob29rcylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAodGhpcy5ob29rcy5maXh0dXJlPy5iZWZvcmUpXG4gICAgICAgICAgICBhc3NlcnRUeXBlKGlzLmZ1bmN0aW9uLCAnZ2xvYmFsQmVmb3JlJywgJ1RoZSBmaXh0dXJlLmdsb2JhbEJlZm9yZSBob29rJywgdGhpcy5ob29rcy5maXh0dXJlLmJlZm9yZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaG9va3MuZml4dHVyZT8uYWZ0ZXIpXG4gICAgICAgICAgICBhc3NlcnRUeXBlKGlzLmZ1bmN0aW9uLCAnZ2xvYmFsQWZ0ZXInLCAnVGhlIGZpeHR1cmUuZ2xvYmFsQWZ0ZXIgaG9vaycsIHRoaXMuaG9va3MuZml4dHVyZS5hZnRlcik7XG5cbiAgICAgICAgaWYgKHRoaXMuaG9va3MudGVzdD8uYmVmb3JlKVxuICAgICAgICAgICAgYXNzZXJ0VHlwZShpcy5mdW5jdGlvbiwgJ2dsb2JhbEJlZm9yZScsICdUaGUgdGVzdC5nbG9iYWxCZWZvcmUgaG9vaycsIHRoaXMuaG9va3MudGVzdC5iZWZvcmUpO1xuXG4gICAgICAgIGlmICh0aGlzLmhvb2tzLnRlc3Q/LmFmdGVyKVxuICAgICAgICAgICAgYXNzZXJ0VHlwZShpcy5mdW5jdGlvbiwgJ2dsb2JhbEFmdGVyJywgJ1RoZSB0ZXN0Lmdsb2JhbEFmdGVyIGhvb2snLCB0aGlzLmhvb2tzLnRlc3QuYWZ0ZXIpO1xuXG4gICAgICAgIGlmICh0aGlzLmhvb2tzLnJlcXVlc3QpXG4gICAgICAgICAgICBhc3NlcnRSZXF1ZXN0SG9va1R5cGUoZmxhdHRlbihjYXN0QXJyYXkodGhpcy5ob29rcy5yZXF1ZXN0KSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldEdsb2JhbEhvb2tzVG9UZXN0cyAodGVzdHM6IFRlc3RbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaG9va3MpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5fYXNzZXJ0R2xvYmFsSG9va3MoKTtcblxuICAgICAgICBjb25zdCBmaXh0dXJlQmVmb3JlID0gdGhpcy5ob29rcy5maXh0dXJlPy5iZWZvcmUgfHwgbnVsbDtcbiAgICAgICAgY29uc3QgZml4dHVyZUFmdGVyICA9IHRoaXMuaG9va3MuZml4dHVyZT8uYWZ0ZXIgfHwgbnVsbDtcbiAgICAgICAgY29uc3QgdGVzdEJlZm9yZSAgICA9IHRoaXMuaG9va3MudGVzdD8uYmVmb3JlID8gd3JhcFRlc3RGdW5jdGlvbih0aGlzLmhvb2tzLnRlc3QuYmVmb3JlKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IHRlc3RBZnRlciAgICAgPSB0aGlzLmhvb2tzLnRlc3Q/LmFmdGVyID8gd3JhcFRlc3RGdW5jdGlvbih0aGlzLmhvb2tzLnRlc3QuYWZ0ZXIpIDogbnVsbDtcbiAgICAgICAgY29uc3QgcmVxdWVzdCAgICAgICA9IHRoaXMuaG9va3MucmVxdWVzdCB8fCBbXTtcblxuICAgICAgICB0ZXN0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uZml4dHVyZSkge1xuICAgICAgICAgICAgICAgIGl0ZW0uZml4dHVyZS5nbG9iYWxCZWZvcmVGbiA9IGl0ZW0uZml4dHVyZS5nbG9iYWxCZWZvcmVGbiB8fCBmaXh0dXJlQmVmb3JlO1xuICAgICAgICAgICAgICAgIGl0ZW0uZml4dHVyZS5nbG9iYWxBZnRlckZuICA9IGl0ZW0uZml4dHVyZS5nbG9iYWxBZnRlckZuIHx8IGZpeHR1cmVBZnRlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5nbG9iYWxCZWZvcmVGbiA9IHRlc3RCZWZvcmU7XG4gICAgICAgICAgICBpdGVtLmdsb2JhbEFmdGVyRm4gID0gdGVzdEFmdGVyO1xuICAgICAgICAgICAgaXRlbS5yZXF1ZXN0SG9va3MgICA9IHVuaW9uKGZsYXR0ZW4oY2FzdEFycmF5KHJlcXVlc3QpKSwgaXRlbS5yZXF1ZXN0SG9va3MpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXRUZXN0cyAoaWQ6IHN0cmluZyk6IFByb21pc2U8VGVzdFtdPiB7XG4gICAgICAgIGNvbnN0IGN3ZCAgICAgICAgPSBwcm9jZXNzLmN3ZCgpO1xuICAgICAgICBjb25zdCBzb3VyY2VMaXN0ID0gYXdhaXQgcGFyc2VGaWxlTGlzdCh0aGlzLnNvdXJjZXMsIGN3ZCk7XG5cbiAgICAgICAgaWYgKCFzb3VyY2VMaXN0Lmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMudGVzdEZpbGVzTm90Rm91bmQsIGN3ZCwgZ2V0Q29uY2F0ZW5hdGVkVmFsdWVzU3RyaW5nKHRoaXMuc291cmNlcywgJ1xcbicsICcnKSk7XG5cbiAgICAgICAgbGV0IHRlc3RzID0gYXdhaXQgZ3VhcmRUaW1lRXhlY3V0aW9uKFxuICAgICAgICAgICAgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5fY29tcGlsZVRlc3RzKHsgc291cmNlTGlzdCwgY29tcGlsZXJPcHRpb25zOiB0aGlzLmNvbXBpbGVyT3B0aW9ucywgcnVubmFibGVDb25maWd1cmF0aW9uSWQ6IGlkIH0pLFxuICAgICAgICAgICAgZWxhcHNlZFRpbWUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdMb2dnZXIoYHRlc3RzIGNvbXBpbGF0aW9uIHRvb2sgJHtwcmV0dHlUaW1lKGVsYXBzZWRUaW1lKX1gKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IFsgZWxhcHNlZFNlY29uZHMgXSA9IGVsYXBzZWRUaW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVsYXBzZWRTZWNvbmRzID4gdGhpcy5URVNUU19DT01QSUxBVElPTl9VUFBFUkJPVU5EKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdMb2cuYWRkV2FybmluZyhXQVJOSU5HX01FU1NBR0VTLnRlc3RzQ29tcGlsYXRpb25UYWtlc1Rvb0xvbmcsIHByZXR0eVRpbWUoZWxhcHNlZFRpbWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB0ZXN0c1dpdGhPbmx5RmxhZyA9IHRlc3RzLmZpbHRlcih0ZXN0ID0+IHRlc3Qub25seSk7XG5cbiAgICAgICAgaWYgKHRlc3RzV2l0aE9ubHlGbGFnLmxlbmd0aClcbiAgICAgICAgICAgIHRlc3RzID0gdGVzdHNXaXRoT25seUZsYWc7XG5cbiAgICAgICAgaWYgKCF0ZXN0cy5sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLm5vVGVzdHNUb1J1bik7XG5cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyKVxuICAgICAgICAgICAgdGVzdHMgPSBhd2FpdCB0aGlzLl9maWx0ZXJUZXN0cyh0ZXN0cywgdGhpcy5maWx0ZXIpO1xuXG4gICAgICAgIGlmICghdGVzdHMubGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5ub1Rlc3RzVG9SdW5EdWVGaWx0ZXJpbmcpO1xuXG4gICAgICAgIHRoaXMuX3NldEdsb2JhbEhvb2tzVG9UZXN0cyh0ZXN0cyk7XG5cbiAgICAgICAgcmV0dXJuIHRlc3RzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3N0YXJ0VGVzdGVkQXBwICgpOiBQcm9taXNlPFRlc3RlZEFwcHx1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmFwcENvbW1hbmQpXG4gICAgICAgICAgICByZXR1cm4gdm9pZCAwO1xuXG4gICAgICAgIGNvbnN0IHRlc3RlZEFwcCA9IG5ldyBUZXN0ZWRBcHAoKTtcblxuICAgICAgICBhd2FpdCB0ZXN0ZWRBcHAuc3RhcnQodGhpcy5hcHBDb21tYW5kLCB0aGlzLmFwcEluaXREZWxheSBhcyBudW1iZXIpO1xuXG4gICAgICAgIHJldHVybiB0ZXN0ZWRBcHA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfY2FuVXNlUGFyYWxsZWxCb290c3RyYXBwaW5nIChicm93c2VySW5mbzogQnJvd3NlckluZm9Tb3VyY2VbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCBpc0xvY2FsUHJvbWlzZXMgPSBicm93c2VySW5mby5tYXAoYnJvd3NlciA9PiBicm93c2VyLnByb3ZpZGVyLmlzTG9jYWxCcm93c2VyKHZvaWQgMCwgQm9vdHN0cmFwcGVyLl9nZXRCcm93c2VyTmFtZShicm93c2VyKSkpO1xuICAgICAgICBjb25zdCBpc0xvY2FsQnJvd3NlcnMgPSBhd2FpdCBQcm9taXNlLmFsbChpc0xvY2FsUHJvbWlzZXMpO1xuXG4gICAgICAgIHJldHVybiBpc0xvY2FsQnJvd3NlcnMuZXZlcnkocmVzdWx0ID0+IHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfYm9vdHN0cmFwU2VxdWVuY2UgKGJyb3dzZXJJbmZvOiBCcm93c2VySW5mb1NvdXJjZVtdLCBpZDogc3RyaW5nKTogUHJvbWlzZTxCYXNpY1J1bnRpbWVSZXNvdXJjZXM+IHtcbiAgICAgICAgY29uc3QgdGVzdHMgICAgICAgPSBhd2FpdCB0aGlzLl9nZXRUZXN0cyhpZCk7XG4gICAgICAgIGNvbnN0IHRlc3RlZEFwcCAgID0gYXdhaXQgdGhpcy5fc3RhcnRUZXN0ZWRBcHAoKTtcbiAgICAgICAgY29uc3QgYnJvd3NlclNldCAgPSBhd2FpdCB0aGlzLl9nZXRCcm93c2VyQ29ubmVjdGlvbnMoYnJvd3NlckluZm8pO1xuXG4gICAgICAgIHJldHVybiB7IHRlc3RzLCB0ZXN0ZWRBcHAsIGJyb3dzZXJTZXQgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF93cmFwQm9vdHN0cmFwcGluZ1Byb21pc2U8VD4gKHByb21pc2U6IFByb21pc2U8VD4pOiBQcm9taXNlPFByb21pc2VSZXN1bHQ8VD4+IHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiAoeyBlcnJvcjogdm9pZCAwLCByZXN1bHQgfSkpXG4gICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gKHsgcmVzdWx0OiB2b2lkIDAsIGVycm9yIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXRCb290c3RyYXBwaW5nRXJyb3IgKGJyb3dzZXJTZXRTdGF0dXM6IFByb21pc2VSZXN1bHQ8QnJvd3NlclNldD4sIHRlc3RzU3RhdHVzOiBQcm9taXNlUmVzdWx0PFRlc3RbXT4sIHRlc3RlZEFwcFN0YXR1czogUHJvbWlzZVJlc3VsdDxUZXN0ZWRBcHB8dW5kZWZpbmVkPik6IFByb21pc2U8RXJyb3I+IHtcbiAgICAgICAgaWYgKCFpc1Byb21pc2VFcnJvcihicm93c2VyU2V0U3RhdHVzKSlcbiAgICAgICAgICAgIGF3YWl0IGJyb3dzZXJTZXRTdGF0dXMucmVzdWx0LmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIWlzUHJvbWlzZUVycm9yKGJyb3dzZXJTZXRTdGF0dXMpICYmICFpc1Byb21pc2VFcnJvcih0ZXN0ZWRBcHBTdGF0dXMpICYmIHRlc3RlZEFwcFN0YXR1cy5yZXN1bHQpXG4gICAgICAgICAgICBhd2FpdCB0ZXN0ZWRBcHBTdGF0dXMucmVzdWx0LmtpbGwoKTtcblxuICAgICAgICBpZiAoaXNQcm9taXNlRXJyb3IodGVzdHNTdGF0dXMpKVxuICAgICAgICAgICAgcmV0dXJuIHRlc3RzU3RhdHVzLmVycm9yO1xuXG4gICAgICAgIGlmIChpc1Byb21pc2VFcnJvcih0ZXN0ZWRBcHBTdGF0dXMpKVxuICAgICAgICAgICAgcmV0dXJuIHRlc3RlZEFwcFN0YXR1cy5lcnJvcjtcblxuICAgICAgICBpZiAoaXNQcm9taXNlRXJyb3IoYnJvd3NlclNldFN0YXR1cykpXG4gICAgICAgICAgICByZXR1cm4gYnJvd3NlclNldFN0YXR1cy5lcnJvcjtcblxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdVbmV4cGVjdGVkIGNhbGwnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRCb290c3RyYXBwaW5nUHJvbWlzZXM8VD4gKGFyZzogUHJvbWlzZUNvbGxlY3Rpb248VD4pOiBQcm9taXNlQ29sbGVjdGlvbjxSZXN1bHRDb2xsZWN0aW9uPFQ+PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIHVua25vd24gYXMgUHJvbWlzZUNvbGxlY3Rpb248UmVzdWx0Q29sbGVjdGlvbjxUPj47XG5cbiAgICAgICAgZm9yIChjb25zdCBrIGluIGFyZylcbiAgICAgICAgICAgIHJlc3VsdFtrXSA9IHRoaXMuX3dyYXBCb290c3RyYXBwaW5nUHJvbWlzZShhcmdba10pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfYm9vdHN0cmFwUGFyYWxsZWwgKGJyb3dzZXJJbmZvOiBCcm93c2VySW5mb1NvdXJjZVtdLCBpZDogc3RyaW5nKTogUHJvbWlzZTxCYXNpY1J1bnRpbWVSZXNvdXJjZXM+IHtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwcGluZ1Byb21pc2VzID0ge1xuICAgICAgICAgICAgYnJvd3NlclNldDogdGhpcy5fZ2V0QnJvd3NlckNvbm5lY3Rpb25zKGJyb3dzZXJJbmZvKSxcbiAgICAgICAgICAgIHRlc3RzOiAgICAgIHRoaXMuX2dldFRlc3RzKGlkKSxcbiAgICAgICAgICAgIGFwcDogICAgICAgIHRoaXMuX3N0YXJ0VGVzdGVkQXBwKCksXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYm9vdHN0cmFwcGluZ1Jlc3VsdFByb21pc2VzID0gdGhpcy5fZ2V0Qm9vdHN0cmFwcGluZ1Byb21pc2VzKGJvb3RzdHJhcHBpbmdQcm9taXNlcyk7XG5cbiAgICAgICAgY29uc3QgYm9vdHN0cmFwcGluZ1Jlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICBib290c3RyYXBwaW5nUmVzdWx0UHJvbWlzZXMuYnJvd3NlclNldCxcbiAgICAgICAgICAgIGJvb3RzdHJhcHBpbmdSZXN1bHRQcm9taXNlcy50ZXN0cyxcbiAgICAgICAgICAgIGJvb3RzdHJhcHBpbmdSZXN1bHRQcm9taXNlcy5hcHAsXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGNvbnN0IFticm93c2VyU2V0UmVzdWx0cywgdGVzdFJlc3VsdHMsIGFwcFJlc3VsdHNdID0gYm9vdHN0cmFwcGluZ1Jlc3VsdHM7XG5cbiAgICAgICAgaWYgKGlzUHJvbWlzZUVycm9yKGJyb3dzZXJTZXRSZXN1bHRzKSB8fCBpc1Byb21pc2VFcnJvcih0ZXN0UmVzdWx0cykgfHwgaXNQcm9taXNlRXJyb3IoYXBwUmVzdWx0cykpXG4gICAgICAgICAgICB0aHJvdyBhd2FpdCB0aGlzLl9nZXRCb290c3RyYXBwaW5nRXJyb3IoLi4uYm9vdHN0cmFwcGluZ1Jlc3VsdHMpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBicm93c2VyU2V0OiBicm93c2VyU2V0UmVzdWx0cy5yZXN1bHQsXG4gICAgICAgICAgICB0ZXN0czogICAgICB0ZXN0UmVzdWx0cy5yZXN1bHQsXG4gICAgICAgICAgICB0ZXN0ZWRBcHA6ICBhcHBSZXN1bHRzLnJlc3VsdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBBUElcbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlUnVubmFibGVDb25maWd1cmF0aW9uICgpOiBQcm9taXNlPFJ1bm5hYmxlQ29uZmlndXJhdGlvbj4ge1xuICAgICAgICBjb25zdCBpZCAgICAgICAgICAgICAgICAgID0gZ2VuZXJhdGVVbmlxdWVJZCgpO1xuICAgICAgICBjb25zdCBjb21tb25DbGllbnRTY3JpcHRzID0gYXdhaXQgbG9hZENsaWVudFNjcmlwdHModGhpcy5jbGllbnRTY3JpcHRzKTtcblxuICAgICAgICBpZiAoYXdhaXQgdGhpcy5fY2FuVXNlUGFyYWxsZWxCb290c3RyYXBwaW5nKHRoaXMuYnJvd3NlcnMpKVxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYXdhaXQgdGhpcy5fYm9vdHN0cmFwUGFyYWxsZWwodGhpcy5icm93c2VycywgaWQpLCBjb21tb25DbGllbnRTY3JpcHRzLCBpZCB9O1xuXG4gICAgICAgIHJldHVybiB7IC4uLmF3YWl0IHRoaXMuX2Jvb3RzdHJhcFNlcXVlbmNlKHRoaXMuYnJvd3NlcnMsIGlkKSwgY29tbW9uQ2xpZW50U2NyaXB0cywgaWQgfTtcbiAgICB9XG59XG4iXX0=
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bm5lci9ib290c3RyYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FNZ0I7QUFFaEIsa0RBQTBCO0FBQzFCLGtFQUF1QztBQUN2QywyREFBbUM7QUFDbkMsdUVBQXVFO0FBQ3ZFLGdFQUF1QztBQUN2QywrQ0FBaUQ7QUFDakQsMkNBQWlEO0FBQ2pELDhEQUFxQztBQUNyQywrRUFBcUQ7QUFDckQseUVBQThEO0FBQzlELDRDQUE4RDtBQVM5RCwrRUFBc0Q7QUFDdEQsdUZBQWdFO0FBQ2hFLHlGQUErRDtBQUMvRCx5RUFBZ0Q7QUFHaEQsbUZBQXlEO0FBQ3pELHVFQUFtRTtBQUNuRSw2REFBdUQ7QUFDdkQsbUZBQXFFO0FBQ3JFLDJFQUFrRDtBQUVsRCxpRkFBeUQ7QUFFekQsTUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUM7QUEyQjVDLFNBQVMsY0FBYyxDQUE4QixLQUEwQjtJQUMzRSxPQUFRLEtBQXlCLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFhRCxNQUFxQixZQUFZO0lBeUI3QixZQUFvQixFQUFFLHdCQUF3QixFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFvQjtRQUMxRyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsd0JBQXdCLENBQUM7UUFDekQsSUFBSSxDQUFDLFdBQVcsR0FBZ0IsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQW9CLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFtQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBa0IsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQXFCLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLEdBQWlCLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZ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QUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFFLG1CQUFtQixFQUFFLEVBQUUsSUFBRztJQUM1RixDQUFDO0NBQ0o7QUF2VEQsK0JBdVRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBjaHVuayxcbiAgICB0aW1lcyxcbiAgICB1bmlvbixcbiAgICBjYXN0QXJyYXksXG4gICAgZmxhdHRlbkRlZXAgYXMgZmxhdHRlbixcbn0gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBwcmV0dHlUaW1lIGZyb20gJ3ByZXR0eS1ocnRpbWUnO1xuaW1wb3J0IENvbXBpbGVyIGZyb20gJy4uL2NvbXBpbGVyJztcbmltcG9ydCBCcm93c2VyQ29ubmVjdGlvbiwgeyBCcm93c2VySW5mbyB9IGZyb20gJy4uL2Jyb3dzZXIvY29ubmVjdGlvbic7XG5pbXBvcnQgQnJvd3NlclNldCBmcm9tICcuL2Jyb3dzZXItc2V0JztcbmltcG9ydCB7IEdlbmVyYWxFcnJvciB9IGZyb20gJy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vZXJyb3JzL3R5cGVzJztcbmltcG9ydCBUZXN0ZWRBcHAgZnJvbSAnLi90ZXN0ZWQtYXBwJztcbmltcG9ydCBwYXJzZUZpbGVMaXN0IGZyb20gJy4uL3V0aWxzL3BhcnNlLWZpbGUtbGlzdCc7XG5pbXBvcnQgbG9hZENsaWVudFNjcmlwdHMgZnJvbSAnLi4vY3VzdG9tLWNsaWVudC1zY3JpcHRzL2xvYWQnO1xuaW1wb3J0IHsgZ2V0Q29uY2F0ZW5hdGVkVmFsdWVzU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMvc3RyaW5nJztcbmltcG9ydCB7IFJlcG9ydGVyU291cmNlIH0gZnJvbSAnLi4vcmVwb3J0ZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgQ2xpZW50U2NyaXB0IGZyb20gJy4uL2N1c3RvbS1jbGllbnQtc2NyaXB0cy9jbGllbnQtc2NyaXB0JztcbmltcG9ydCBDbGllbnRTY3JpcHRJbml0IGZyb20gJy4uL2N1c3RvbS1jbGllbnQtc2NyaXB0cy9jbGllbnQtc2NyaXB0LWluaXQnO1xuaW1wb3J0IEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheSBmcm9tICcuLi9icm93c2VyL2Nvbm5lY3Rpb24vZ2F0ZXdheSc7XG5pbXBvcnQgeyBDb21waWxlckFyZ3VtZW50cyB9IGZyb20gJy4uL2NvbXBpbGVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IENvbXBpbGVyU2VydmljZSBmcm9tICcuLi9zZXJ2aWNlcy9jb21waWxlci9ob3N0JztcbmltcG9ydCBUZXN0IGZyb20gJy4uL2FwaS9zdHJ1Y3R1cmUvdGVzdCc7XG5pbXBvcnQgeyBCb290c3RyYXBwZXJJbml0LCBCcm93c2VyU2V0T3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgV2FybmluZ0xvZyBmcm9tICcuLi9ub3RpZmljYXRpb25zL3dhcm5pbmctbG9nJztcbmltcG9ydCBXQVJOSU5HX01FU1NBR0VTIGZyb20gJy4uL25vdGlmaWNhdGlvbnMvd2FybmluZy1tZXNzYWdlJztcbmltcG9ydCBndWFyZFRpbWVFeGVjdXRpb24gZnJvbSAnLi4vdXRpbHMvZ3VhcmQtdGltZS1leGVjdXRpb24nO1xuaW1wb3J0IGFzeW5jRmlsdGVyIGZyb20gJy4uL3V0aWxzL2FzeW5jLWZpbHRlcic7XG5pbXBvcnQgRml4dHVyZSBmcm9tICcuLi9hcGkvc3RydWN0dXJlL2ZpeHR1cmUnO1xuaW1wb3J0IE1lc3NhZ2VCdXMgZnJvbSAnLi4vdXRpbHMvbWVzc2FnZS1idXMnO1xuaW1wb3J0IHdyYXBUZXN0RnVuY3Rpb24gZnJvbSAnLi4vYXBpL3dyYXAtdGVzdC1mdW5jdGlvbic7XG5pbXBvcnQgeyBhc3NlcnRUeXBlLCBpcyB9IGZyb20gJy4uL2Vycm9ycy9ydW50aW1lL3R5cGUtYXNzZXJ0aW9ucyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVVuaXF1ZUlkIH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgYXNzZXJ0UmVxdWVzdEhvb2tUeXBlIGZyb20gJy4uL2FwaS9yZXF1ZXN0LWhvb2tzL2Fzc2VydC10eXBlJztcbmltcG9ydCB1c2VyVmFyaWFibGVzIGZyb20gJy4uL2FwaS91c2VyLXZhcmlhYmxlcyc7XG5pbXBvcnQgQ29uZmlndXJhdGlvbiBmcm9tICcuLi9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24tYmFzZSc7XG5pbXBvcnQgT1BUSU9OX05BTUVTIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24vb3B0aW9uLW5hbWVzJztcblxuY29uc3QgREVCVUdfU0NPUEUgPSAndGVzdGNhZmU6Ym9vdHN0cmFwcGVyJztcblxudHlwZSBUZXN0U291cmNlID0gdW5rbm93bjtcblxudHlwZSBCcm93c2VySW5mb1NvdXJjZSA9IEJyb3dzZXJJbmZvIHwgQnJvd3NlckNvbm5lY3Rpb247XG5cbmludGVyZmFjZSBQcm9taXNlU3VjY2VzczxUPiB7XG4gICAgcmVzdWx0OiBUO1xufVxuXG5pbnRlcmZhY2UgUHJvbWlzZUVycm9yPEUgZXh0ZW5kcyBFcnJvciA9IEVycm9yPiB7XG4gICAgZXJyb3I6IEU7XG59XG5cbmludGVyZmFjZSBCYXNpY1J1bnRpbWVSZXNvdXJjZXMge1xuICAgIGJyb3dzZXJTZXQ6IEJyb3dzZXJTZXQ7XG4gICAgdGVzdHM6IFRlc3RbXTtcbiAgICB0ZXN0ZWRBcHA/OiBUZXN0ZWRBcHA7XG59XG5cbmludGVyZmFjZSBSdW5uYWJsZUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNpY1J1bnRpbWVSZXNvdXJjZXMge1xuICAgIGNvbW1vbkNsaWVudFNjcmlwdHM6IENsaWVudFNjcmlwdFtdO1xuICAgIGlkOiBzdHJpbmc7XG59XG5cbnR5cGUgUHJvbWlzZVJlc3VsdDxULCBFIGV4dGVuZHMgRXJyb3IgPSBFcnJvcj4gPSBQcm9taXNlU3VjY2VzczxUPiB8IFByb21pc2VFcnJvcjxFPjtcblxuZnVuY3Rpb24gaXNQcm9taXNlRXJyb3I8VCwgRSBleHRlbmRzIEVycm9yID0gRXJyb3I+ICh2YWx1ZTogUHJvbWlzZVJlc3VsdDxULCBFPik6IHZhbHVlIGlzIFByb21pc2VFcnJvcjxFPiB7XG4gICAgcmV0dXJuICh2YWx1ZSBhcyBQcm9taXNlRXJyb3I8RT4pLmVycm9yICE9PSB2b2lkIDA7XG59XG5cbmludGVyZmFjZSBTZXBhcmF0ZWRCcm93c2VySW5mbyB7XG4gICAgcmVtb3RlczogQnJvd3NlckNvbm5lY3Rpb25bXTtcbiAgICBhdXRvbWF0ZWQ6IEJyb3dzZXJJbmZvW107XG59XG5cbnR5cGUgUHJvbWlzZUNvbGxlY3Rpb248VD4gPSB7XG4gICAgW0sgaW4ga2V5b2YgVF06IFByb21pc2U8VFtLXT5cbn1cblxudHlwZSBSZXN1bHRDb2xsZWN0aW9uPFQ+ID0geyBbUCBpbiBrZXlvZiBUXTogUHJvbWlzZVJlc3VsdDxUW1BdPiB9O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb290c3RyYXBwZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5OiBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXk7XG4gICAgcHVibGljIGNvbmN1cnJlbmN5OiBudW1iZXI7XG4gICAgcHVibGljIHNvdXJjZXM6IFRlc3RTb3VyY2VbXTtcbiAgICBwdWJsaWMgYnJvd3NlcnM6IEJyb3dzZXJJbmZvU291cmNlW107XG4gICAgcHVibGljIHJlcG9ydGVyczogUmVwb3J0ZXJTb3VyY2VbXTtcbiAgICBwdWJsaWMgZmlsdGVyPzogRmlsdGVyRnVuY3Rpb247XG4gICAgcHVibGljIGFwcENvbW1hbmQ/OiBzdHJpbmc7XG4gICAgcHVibGljIGFwcEluaXREZWxheT86IG51bWJlcjtcbiAgICBwdWJsaWMgdHNDb25maWdQYXRoPzogc3RyaW5nO1xuICAgIHB1YmxpYyBjbGllbnRTY3JpcHRzOiBDbGllbnRTY3JpcHRJbml0W107XG4gICAgcHVibGljIGRpc2FibGVNdWx0aXBsZVdpbmRvd3M6IGJvb2xlYW47XG4gICAgcHVibGljIHByb3h5bGVzczogYm9vbGVhbjtcbiAgICBwdWJsaWMgY29tcGlsZXJPcHRpb25zPzogQ29tcGlsZXJPcHRpb25zO1xuICAgIHB1YmxpYyBicm93c2VySW5pdFRpbWVvdXQ/OiBudW1iZXI7XG4gICAgcHVibGljIGhvb2tzPzogR2xvYmFsSG9va3M7XG4gICAgcHVibGljIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb247XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBpbGVyU2VydmljZT86IENvbXBpbGVyU2VydmljZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlYnVnTG9nZ2VyOiBkZWJ1Zy5EZWJ1Z2dlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdhcm5pbmdMb2c6IFdhcm5pbmdMb2c7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlQnVzOiBNZXNzYWdlQnVzO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBURVNUU19DT01QSUxBVElPTl9VUFBFUkJPVU5EOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHsgYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LCBjb21waWxlclNlcnZpY2UsIG1lc3NhZ2VCdXMsIGNvbmZpZ3VyYXRpb24gfTogQm9vdHN0cmFwcGVySW5pdCkge1xuICAgICAgICB0aGlzLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheSA9IGJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheTtcbiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSAgICAgICAgICAgICAgPSAxO1xuICAgICAgICB0aGlzLnNvdXJjZXMgICAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmJyb3dzZXJzICAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLnJlcG9ydGVycyAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmZpbHRlciAgICAgICAgICAgICAgICAgICA9IHZvaWQgMDtcbiAgICAgICAgdGhpcy5hcHBDb21tYW5kICAgICAgICAgICAgICAgPSB2b2lkIDA7XG4gICAgICAgIHRoaXMuYXBwSW5pdERlbGF5ICAgICAgICAgICAgID0gdm9pZCAwO1xuICAgICAgICB0aGlzLnRzQ29uZmlnUGF0aCAgICAgICAgICAgICA9IHZvaWQgMDtcbiAgICAgICAgdGhpcy5jbGllbnRTY3JpcHRzICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlwbGVXaW5kb3dzICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wcm94eWxlc3MgICAgICAgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21waWxlck9wdGlvbnMgICAgICAgICAgPSB2b2lkIDA7XG4gICAgICAgIHRoaXMuZGVidWdMb2dnZXIgICAgICAgICAgICAgID0gZGVidWcoREVCVUdfU0NPUEUpO1xuICAgICAgICB0aGlzLndhcm5pbmdMb2cgICAgICAgICAgICAgICA9IG5ldyBXYXJuaW5nTG9nKG51bGwsIFdhcm5pbmdMb2cuY3JlYXRlQWRkV2FybmluZ0NhbGxiYWNrKG1lc3NhZ2VCdXMpKTtcbiAgICAgICAgdGhpcy5jb21waWxlclNlcnZpY2UgICAgICAgICAgPSBjb21waWxlclNlcnZpY2U7XG4gICAgICAgIHRoaXMubWVzc2FnZUJ1cyAgICAgICAgICAgICAgID0gbWVzc2FnZUJ1cztcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uICAgICAgICAgICAgPSBjb25maWd1cmF0aW9uO1xuXG4gICAgICAgIHRoaXMuVEVTVFNfQ09NUElMQVRJT05fVVBQRVJCT1VORCA9IDYwO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9nZXRCcm93c2VyTmFtZSAoYnJvd3NlcjogQnJvd3NlckluZm9Tb3VyY2UpOiBzdHJpbmcge1xuICAgICAgICBpZiAoYnJvd3NlciBpbnN0YW5jZW9mIEJyb3dzZXJDb25uZWN0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIGJyb3dzZXIuYnJvd3NlckluZm8uYnJvd3Nlck5hbWU7XG5cbiAgICAgICAgcmV0dXJuIGJyb3dzZXIuYnJvd3Nlck5hbWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX3NwbGl0QnJvd3NlckluZm8gKGJyb3dzZXJJbmZvOiBCcm93c2VySW5mb1NvdXJjZVtdKTogU2VwYXJhdGVkQnJvd3NlckluZm8ge1xuICAgICAgICBjb25zdCByZW1vdGVzOiBCcm93c2VyQ29ubmVjdGlvbltdICA9IFtdO1xuICAgICAgICBjb25zdCBhdXRvbWF0ZWQ6IEJyb3dzZXJJbmZvW10gICAgICA9IFtdO1xuXG4gICAgICAgIGJyb3dzZXJJbmZvLmZvckVhY2goYnJvd3NlciA9PiB7XG4gICAgICAgICAgICBpZiAoYnJvd3NlciBpbnN0YW5jZW9mIEJyb3dzZXJDb25uZWN0aW9uKVxuICAgICAgICAgICAgICAgIHJlbW90ZXMucHVzaChicm93c2VyKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBhdXRvbWF0ZWQucHVzaChicm93c2VyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHsgcmVtb3RlcywgYXV0b21hdGVkIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlQXV0b21hdGVkQ29ubmVjdGlvbnMgKGJyb3dzZXJJbmZvOiBCcm93c2VySW5mb1tdKTogQnJvd3NlckNvbm5lY3Rpb25bXVtdIHtcbiAgICAgICAgaWYgKCFicm93c2VySW5mbylcbiAgICAgICAgICAgIHJldHVybiBbXTtcblxuICAgICAgICByZXR1cm4gYnJvd3NlckluZm9cbiAgICAgICAgICAgIC5tYXAoYnJvd3NlciA9PiB0aW1lcyh0aGlzLmNvbmN1cnJlbmN5LCAoKSA9PiBuZXcgQnJvd3NlckNvbm5lY3Rpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbkdhdGV3YXksIHsgLi4uYnJvd3NlciB9LCBmYWxzZSwgdGhpcy5kaXNhYmxlTXVsdGlwbGVXaW5kb3dzLCB0aGlzLnByb3h5bGVzcywgdGhpcy5tZXNzYWdlQnVzKSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldEJyb3dzZXJTZXRPcHRpb25zICgpOiBCcm93c2VyU2V0T3B0aW9ucyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25jdXJyZW5jeTogICAgICAgIHRoaXMuY29uY3VycmVuY3ksXG4gICAgICAgICAgICBicm93c2VySW5pdFRpbWVvdXQ6IHRoaXMuYnJvd3NlckluaXRUaW1lb3V0LFxuICAgICAgICAgICAgd2FybmluZ0xvZzogICAgICAgICB0aGlzLndhcm5pbmdMb2csXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0QnJvd3NlckNvbm5lY3Rpb25zIChicm93c2VySW5mbzogQnJvd3NlckluZm9Tb3VyY2VbXSk6IFByb21pc2U8QnJvd3NlclNldD4ge1xuICAgICAgICBjb25zdCB7IGF1dG9tYXRlZCwgcmVtb3RlcyB9ID0gQm9vdHN0cmFwcGVyLl9zcGxpdEJyb3dzZXJJbmZvKGJyb3dzZXJJbmZvKTtcblxuICAgICAgICBpZiAocmVtb3RlcyAmJiByZW1vdGVzLmxlbmd0aCAlIHRoaXMuY29uY3VycmVuY3kpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLmNhbm5vdERpdmlkZVJlbW90ZXNDb3VudEJ5Q29uY3VycmVuY3kpO1xuXG4gICAgICAgIGxldCBicm93c2VyQ29ubmVjdGlvbnMgPSB0aGlzLl9jcmVhdGVBdXRvbWF0ZWRDb25uZWN0aW9ucyhhdXRvbWF0ZWQpO1xuXG4gICAgICAgIHJlbW90ZXMuZm9yRWFjaChyZW1vdGVDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIHJlbW90ZUNvbm5lY3Rpb24ubWVzc2FnZUJ1cyA9IHRoaXMubWVzc2FnZUJ1cztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYnJvd3NlckNvbm5lY3Rpb25zID0gYnJvd3NlckNvbm5lY3Rpb25zLmNvbmNhdChjaHVuayhyZW1vdGVzLCB0aGlzLmNvbmN1cnJlbmN5KSk7XG5cbiAgICAgICAgcmV0dXJuIEJyb3dzZXJTZXQuZnJvbShicm93c2VyQ29ubmVjdGlvbnMsIHRoaXMuX2dldEJyb3dzZXJTZXRPcHRpb25zKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2ZpbHRlclRlc3RzICh0ZXN0czogVGVzdFtdLCBwcmVkaWNhdGU6IEZpbHRlckZ1bmN0aW9uKTogUHJvbWlzZTxUZXN0W10+IHtcbiAgICAgICAgcmV0dXJuIGFzeW5jRmlsdGVyKHRlc3RzLCB0ZXN0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RGaXh0dXJlID0gdGVzdC5maXh0dXJlIGFzIEZpeHR1cmU7XG5cbiAgICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUoXG4gICAgICAgICAgICAgICAgdGVzdC5uYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICB0ZXN0Rml4dHVyZS5uYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICB0ZXN0Rml4dHVyZS5wYXRoLFxuICAgICAgICAgICAgICAgIHRlc3QubWV0YSxcbiAgICAgICAgICAgICAgICB0ZXN0Rml4dHVyZS5tZXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfY29tcGlsZVRlc3RzICh7IHNvdXJjZUxpc3QsIGNvbXBpbGVyT3B0aW9ucywgcnVubmFibGVDb25maWd1cmF0aW9uSWQgfTogQ29tcGlsZXJBcmd1bWVudHMpOiBQcm9taXNlPFRlc3RbXT4ge1xuICAgICAgICBjb25zdCBiYXNlVXJsICAgICAgICAgID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuYmFzZVVybCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBleHBlcmltZW50YWxFc20gID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMuZXhwZXJpbWVudGFsRXNtKSBhcyBib29sZWFuO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbXBpbGVyU2VydmljZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21waWxlclNlcnZpY2UuaW5pdCgpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21waWxlclNlcnZpY2Uuc2V0VXNlclZhcmlhYmxlcyh1c2VyVmFyaWFibGVzLnZhbHVlKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZXJTZXJ2aWNlLmdldFRlc3RzKHsgc291cmNlTGlzdCwgY29tcGlsZXJPcHRpb25zLCBydW5uYWJsZUNvbmZpZ3VyYXRpb25JZCB9LCBiYXNlVXJsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbXBpbGVyID0gbmV3IENvbXBpbGVyKHNvdXJjZUxpc3QsIGNvbXBpbGVyT3B0aW9ucywgeyBiYXNlVXJsLCBpc0NvbXBpbGVyU2VydmljZU1vZGU6IGZhbHNlLCBleHBlcmltZW50YWxFc20gfSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbXBpbGVyLmdldFRlc3RzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYXNzZXJ0R2xvYmFsSG9va3MgKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaG9va3MpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMuaG9va3MuZml4dHVyZT8uYmVmb3JlKVxuICAgICAgICAgICAgYXNzZXJ0VHlwZShpcy5mdW5jdGlvbiwgJ2dsb2JhbEJlZm9yZScsICdUaGUgZml4dHVyZS5nbG9iYWxCZWZvcmUgaG9vaycsIHRoaXMuaG9va3MuZml4dHVyZS5iZWZvcmUpO1xuXG4gICAgICAgIGlmICh0aGlzLmhvb2tzLmZpeHR1cmU/LmFmdGVyKVxuICAgICAgICAgICAgYXNzZXJ0VHlwZShpcy5mdW5jdGlvbiwgJ2dsb2JhbEFmdGVyJywgJ1RoZSBmaXh0dXJlLmdsb2JhbEFmdGVyIGhvb2snLCB0aGlzLmhvb2tzLmZpeHR1cmUuYWZ0ZXIpO1xuXG4gICAgICAgIGlmICh0aGlzLmhvb2tzLnRlc3Q/LmJlZm9yZSlcbiAgICAgICAgICAgIGFzc2VydFR5cGUoaXMuZnVuY3Rpb24sICdnbG9iYWxCZWZvcmUnLCAnVGhlIHRlc3QuZ2xvYmFsQmVmb3JlIGhvb2snLCB0aGlzLmhvb2tzLnRlc3QuYmVmb3JlKTtcblxuICAgICAgICBpZiAodGhpcy5ob29rcy50ZXN0Py5hZnRlcilcbiAgICAgICAgICAgIGFzc2VydFR5cGUoaXMuZnVuY3Rpb24sICdnbG9iYWxBZnRlcicsICdUaGUgdGVzdC5nbG9iYWxBZnRlciBob29rJywgdGhpcy5ob29rcy50ZXN0LmFmdGVyKTtcblxuICAgICAgICBpZiAodGhpcy5ob29rcy5yZXF1ZXN0KVxuICAgICAgICAgICAgYXNzZXJ0UmVxdWVzdEhvb2tUeXBlKGZsYXR0ZW4oY2FzdEFycmF5KHRoaXMuaG9va3MucmVxdWVzdCkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRHbG9iYWxIb29rc1RvVGVzdHMgKHRlc3RzOiBUZXN0W10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmhvb2tzKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuX2Fzc2VydEdsb2JhbEhvb2tzKCk7XG5cbiAgICAgICAgY29uc3QgZml4dHVyZUJlZm9yZSA9IHRoaXMuaG9va3MuZml4dHVyZT8uYmVmb3JlIHx8IG51bGw7XG4gICAgICAgIGNvbnN0IGZpeHR1cmVBZnRlciAgPSB0aGlzLmhvb2tzLmZpeHR1cmU/LmFmdGVyIHx8IG51bGw7XG4gICAgICAgIGNvbnN0IHRlc3RCZWZvcmUgICAgPSB0aGlzLmhvb2tzLnRlc3Q/LmJlZm9yZSA/IHdyYXBUZXN0RnVuY3Rpb24odGhpcy5ob29rcy50ZXN0LmJlZm9yZSkgOiBudWxsO1xuICAgICAgICBjb25zdCB0ZXN0QWZ0ZXIgICAgID0gdGhpcy5ob29rcy50ZXN0Py5hZnRlciA/IHdyYXBUZXN0RnVuY3Rpb24odGhpcy5ob29rcy50ZXN0LmFmdGVyKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgICAgICAgPSB0aGlzLmhvb2tzLnJlcXVlc3QgfHwgW107XG5cbiAgICAgICAgdGVzdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmZpeHR1cmUpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmZpeHR1cmUuZ2xvYmFsQmVmb3JlRm4gPSBpdGVtLmZpeHR1cmUuZ2xvYmFsQmVmb3JlRm4gfHwgZml4dHVyZUJlZm9yZTtcbiAgICAgICAgICAgICAgICBpdGVtLmZpeHR1cmUuZ2xvYmFsQWZ0ZXJGbiAgPSBpdGVtLmZpeHR1cmUuZ2xvYmFsQWZ0ZXJGbiB8fCBmaXh0dXJlQWZ0ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0ZW0uZ2xvYmFsQmVmb3JlRm4gPSB0ZXN0QmVmb3JlO1xuICAgICAgICAgICAgaXRlbS5nbG9iYWxBZnRlckZuICA9IHRlc3RBZnRlcjtcbiAgICAgICAgICAgIGl0ZW0ucmVxdWVzdEhvb2tzICAgPSB1bmlvbihmbGF0dGVuKGNhc3RBcnJheShyZXF1ZXN0KSksIGl0ZW0ucmVxdWVzdEhvb2tzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0VGVzdHMgKGlkOiBzdHJpbmcpOiBQcm9taXNlPFRlc3RbXT4ge1xuICAgICAgICBjb25zdCBjd2QgICAgICAgID0gcHJvY2Vzcy5jd2QoKTtcbiAgICAgICAgY29uc3Qgc291cmNlTGlzdCA9IGF3YWl0IHBhcnNlRmlsZUxpc3QodGhpcy5zb3VyY2VzLCBjd2QpO1xuXG4gICAgICAgIGlmICghc291cmNlTGlzdC5sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLnRlc3RGaWxlc05vdEZvdW5kLCBjd2QsIGdldENvbmNhdGVuYXRlZFZhbHVlc1N0cmluZyh0aGlzLnNvdXJjZXMsICdcXG4nLCAnJykpO1xuXG4gICAgICAgIGxldCB0ZXN0cyA9IGF3YWl0IGd1YXJkVGltZUV4ZWN1dGlvbihcbiAgICAgICAgICAgIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuX2NvbXBpbGVUZXN0cyh7IHNvdXJjZUxpc3QsIGNvbXBpbGVyT3B0aW9uczogdGhpcy5jb21waWxlck9wdGlvbnMsIHJ1bm5hYmxlQ29uZmlndXJhdGlvbklkOiBpZCB9KSxcbiAgICAgICAgICAgIGVsYXBzZWRUaW1lID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnTG9nZ2VyKGB0ZXN0cyBjb21waWxhdGlvbiB0b29rICR7cHJldHR5VGltZShlbGFwc2VkVGltZSl9YCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBbIGVsYXBzZWRTZWNvbmRzIF0gPSBlbGFwc2VkVGltZTtcblxuICAgICAgICAgICAgICAgIGlmIChlbGFwc2VkU2Vjb25kcyA+IHRoaXMuVEVTVFNfQ09NUElMQVRJT05fVVBQRVJCT1VORClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53YXJuaW5nTG9nLmFkZFdhcm5pbmcoV0FSTklOR19NRVNTQUdFUy50ZXN0c0NvbXBpbGF0aW9uVGFrZXNUb29Mb25nLCBwcmV0dHlUaW1lKGVsYXBzZWRUaW1lKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdGVzdHNXaXRoT25seUZsYWcgPSB0ZXN0cy5maWx0ZXIodGVzdCA9PiB0ZXN0Lm9ubHkpO1xuXG4gICAgICAgIGlmICh0ZXN0c1dpdGhPbmx5RmxhZy5sZW5ndGgpXG4gICAgICAgICAgICB0ZXN0cyA9IHRlc3RzV2l0aE9ubHlGbGFnO1xuXG4gICAgICAgIGlmICghdGVzdHMubGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5ub1Rlc3RzVG9SdW4pO1xuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlcilcbiAgICAgICAgICAgIHRlc3RzID0gYXdhaXQgdGhpcy5fZmlsdGVyVGVzdHModGVzdHMsIHRoaXMuZmlsdGVyKTtcblxuICAgICAgICBpZiAoIXRlc3RzLmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMubm9UZXN0c1RvUnVuRHVlRmlsdGVyaW5nKTtcblxuICAgICAgICB0aGlzLl9zZXRHbG9iYWxIb29rc1RvVGVzdHModGVzdHMpO1xuXG4gICAgICAgIHJldHVybiB0ZXN0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9zdGFydFRlc3RlZEFwcCAoKTogUHJvbWlzZTxUZXN0ZWRBcHB8dW5kZWZpbmVkPiB7XG4gICAgICAgIGlmICghdGhpcy5hcHBDb21tYW5kKVxuICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcblxuICAgICAgICBjb25zdCB0ZXN0ZWRBcHAgPSBuZXcgVGVzdGVkQXBwKCk7XG5cbiAgICAgICAgYXdhaXQgdGVzdGVkQXBwLnN0YXJ0KHRoaXMuYXBwQ29tbWFuZCwgdGhpcy5hcHBJbml0RGVsYXkgYXMgbnVtYmVyKTtcblxuICAgICAgICByZXR1cm4gdGVzdGVkQXBwO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2NhblVzZVBhcmFsbGVsQm9vdHN0cmFwcGluZyAoYnJvd3NlckluZm86IEJyb3dzZXJJbmZvU291cmNlW10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgaXNMb2NhbFByb21pc2VzID0gYnJvd3NlckluZm8ubWFwKGJyb3dzZXIgPT4gYnJvd3Nlci5wcm92aWRlci5pc0xvY2FsQnJvd3Nlcih2b2lkIDAsIEJvb3RzdHJhcHBlci5fZ2V0QnJvd3Nlck5hbWUoYnJvd3NlcikpKTtcbiAgICAgICAgY29uc3QgaXNMb2NhbEJyb3dzZXJzID0gYXdhaXQgUHJvbWlzZS5hbGwoaXNMb2NhbFByb21pc2VzKTtcblxuICAgICAgICByZXR1cm4gaXNMb2NhbEJyb3dzZXJzLmV2ZXJ5KHJlc3VsdCA9PiByZXN1bHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2Jvb3RzdHJhcFNlcXVlbmNlIChicm93c2VySW5mbzogQnJvd3NlckluZm9Tb3VyY2VbXSwgaWQ6IHN0cmluZyk6IFByb21pc2U8QmFzaWNSdW50aW1lUmVzb3VyY2VzPiB7XG4gICAgICAgIGNvbnN0IHRlc3RzICAgICAgID0gYXdhaXQgdGhpcy5fZ2V0VGVzdHMoaWQpO1xuICAgICAgICBjb25zdCB0ZXN0ZWRBcHAgICA9IGF3YWl0IHRoaXMuX3N0YXJ0VGVzdGVkQXBwKCk7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJTZXQgID0gYXdhaXQgdGhpcy5fZ2V0QnJvd3NlckNvbm5lY3Rpb25zKGJyb3dzZXJJbmZvKTtcblxuICAgICAgICByZXR1cm4geyB0ZXN0cywgdGVzdGVkQXBwLCBicm93c2VyU2V0IH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfd3JhcEJvb3RzdHJhcHBpbmdQcm9taXNlPFQ+IChwcm9taXNlOiBQcm9taXNlPFQ+KTogUHJvbWlzZTxQcm9taXNlUmVzdWx0PFQ+PiB7XG4gICAgICAgIHJldHVybiBwcm9taXNlXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gKHsgZXJyb3I6IHZvaWQgMCwgcmVzdWx0IH0pKVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+ICh7IHJlc3VsdDogdm9pZCAwLCBlcnJvciB9KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0Qm9vdHN0cmFwcGluZ0Vycm9yIChicm93c2VyU2V0U3RhdHVzOiBQcm9taXNlUmVzdWx0PEJyb3dzZXJTZXQ+LCB0ZXN0c1N0YXR1czogUHJvbWlzZVJlc3VsdDxUZXN0W10+LCB0ZXN0ZWRBcHBTdGF0dXM6IFByb21pc2VSZXN1bHQ8VGVzdGVkQXBwfHVuZGVmaW5lZD4pOiBQcm9taXNlPEVycm9yPiB7XG4gICAgICAgIGlmICghaXNQcm9taXNlRXJyb3IoYnJvd3NlclNldFN0YXR1cykpXG4gICAgICAgICAgICBhd2FpdCBicm93c2VyU2V0U3RhdHVzLnJlc3VsdC5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCFpc1Byb21pc2VFcnJvcihicm93c2VyU2V0U3RhdHVzKSAmJiAhaXNQcm9taXNlRXJyb3IodGVzdGVkQXBwU3RhdHVzKSAmJiB0ZXN0ZWRBcHBTdGF0dXMucmVzdWx0KVxuICAgICAgICAgICAgYXdhaXQgdGVzdGVkQXBwU3RhdHVzLnJlc3VsdC5raWxsKCk7XG5cbiAgICAgICAgaWYgKGlzUHJvbWlzZUVycm9yKHRlc3RzU3RhdHVzKSlcbiAgICAgICAgICAgIHJldHVybiB0ZXN0c1N0YXR1cy5lcnJvcjtcblxuICAgICAgICBpZiAoaXNQcm9taXNlRXJyb3IodGVzdGVkQXBwU3RhdHVzKSlcbiAgICAgICAgICAgIHJldHVybiB0ZXN0ZWRBcHBTdGF0dXMuZXJyb3I7XG5cbiAgICAgICAgaWYgKGlzUHJvbWlzZUVycm9yKGJyb3dzZXJTZXRTdGF0dXMpKVxuICAgICAgICAgICAgcmV0dXJuIGJyb3dzZXJTZXRTdGF0dXMuZXJyb3I7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignVW5leHBlY3RlZCBjYWxsJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0Qm9vdHN0cmFwcGluZ1Byb21pc2VzPFQ+IChhcmc6IFByb21pc2VDb2xsZWN0aW9uPFQ+KTogUHJvbWlzZUNvbGxlY3Rpb248UmVzdWx0Q29sbGVjdGlvbjxUPj4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fSBhcyB1bmtub3duIGFzIFByb21pc2VDb2xsZWN0aW9uPFJlc3VsdENvbGxlY3Rpb248VD4+O1xuXG4gICAgICAgIGZvciAoY29uc3QgayBpbiBhcmcpXG4gICAgICAgICAgICByZXN1bHRba10gPSB0aGlzLl93cmFwQm9vdHN0cmFwcGluZ1Byb21pc2UoYXJnW2tdKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2Jvb3RzdHJhcFBhcmFsbGVsIChicm93c2VySW5mbzogQnJvd3NlckluZm9Tb3VyY2VbXSwgaWQ6IHN0cmluZyk6IFByb21pc2U8QmFzaWNSdW50aW1lUmVzb3VyY2VzPiB7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcHBpbmdQcm9taXNlcyA9IHtcbiAgICAgICAgICAgIGJyb3dzZXJTZXQ6IHRoaXMuX2dldEJyb3dzZXJDb25uZWN0aW9ucyhicm93c2VySW5mbyksXG4gICAgICAgICAgICB0ZXN0czogICAgICB0aGlzLl9nZXRUZXN0cyhpZCksXG4gICAgICAgICAgICBhcHA6ICAgICAgICB0aGlzLl9zdGFydFRlc3RlZEFwcCgpLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcHBpbmdSZXN1bHRQcm9taXNlcyA9IHRoaXMuX2dldEJvb3RzdHJhcHBpbmdQcm9taXNlcyhib290c3RyYXBwaW5nUHJvbWlzZXMpO1xuXG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcHBpbmdSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgYm9vdHN0cmFwcGluZ1Jlc3VsdFByb21pc2VzLmJyb3dzZXJTZXQsXG4gICAgICAgICAgICBib290c3RyYXBwaW5nUmVzdWx0UHJvbWlzZXMudGVzdHMsXG4gICAgICAgICAgICBib290c3RyYXBwaW5nUmVzdWx0UHJvbWlzZXMuYXBwLFxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCBbYnJvd3NlclNldFJlc3VsdHMsIHRlc3RSZXN1bHRzLCBhcHBSZXN1bHRzXSA9IGJvb3RzdHJhcHBpbmdSZXN1bHRzO1xuXG4gICAgICAgIGlmIChpc1Byb21pc2VFcnJvcihicm93c2VyU2V0UmVzdWx0cykgfHwgaXNQcm9taXNlRXJyb3IodGVzdFJlc3VsdHMpIHx8IGlzUHJvbWlzZUVycm9yKGFwcFJlc3VsdHMpKVxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgdGhpcy5fZ2V0Qm9vdHN0cmFwcGluZ0Vycm9yKC4uLmJvb3RzdHJhcHBpbmdSZXN1bHRzKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnJvd3NlclNldDogYnJvd3NlclNldFJlc3VsdHMucmVzdWx0LFxuICAgICAgICAgICAgdGVzdHM6ICAgICAgdGVzdFJlc3VsdHMucmVzdWx0LFxuICAgICAgICAgICAgdGVzdGVkQXBwOiAgYXBwUmVzdWx0cy5yZXN1bHQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQVBJXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZVJ1bm5hYmxlQ29uZmlndXJhdGlvbiAoKTogUHJvbWlzZTxSdW5uYWJsZUNvbmZpZ3VyYXRpb24+IHtcbiAgICAgICAgY29uc3QgaWQgICAgICAgICAgICAgICAgICA9IGdlbmVyYXRlVW5pcXVlSWQoKTtcbiAgICAgICAgY29uc3QgY29tbW9uQ2xpZW50U2NyaXB0cyA9IGF3YWl0IGxvYWRDbGllbnRTY3JpcHRzKHRoaXMuY2xpZW50U2NyaXB0cyk7XG5cbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuX2NhblVzZVBhcmFsbGVsQm9vdHN0cmFwcGluZyh0aGlzLmJyb3dzZXJzKSlcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmF3YWl0IHRoaXMuX2Jvb3RzdHJhcFBhcmFsbGVsKHRoaXMuYnJvd3NlcnMsIGlkKSwgY29tbW9uQ2xpZW50U2NyaXB0cywgaWQgfTtcblxuICAgICAgICByZXR1cm4geyAuLi5hd2FpdCB0aGlzLl9ib290c3RyYXBTZXF1ZW5jZSh0aGlzLmJyb3dzZXJzLCBpZCksIGNvbW1vbkNsaWVudFNjcmlwdHMsIGlkIH07XG4gICAgfVxufVxuIl19
@@ -172,4 +172,4 @@ class BrowserJob extends async_event_emitter_1.default {
172
172
  }
173
173
  exports.default = BrowserJob;
174
174
  module.exports = exports.default;
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1qb2IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVubmVyL2Jyb3dzZXItam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQXdDO0FBQ3hDLHVGQUE2RDtBQUM3RCxnRkFBc0Q7QUFDdEQsd0ZBQStEO0FBUS9ELDhFQUFvRDtBQUlwRCwwRkFBK0Q7QUFXL0QsSUFBSyxnQkFBbUQ7QUFBeEQsV0FBSyxnQkFBZ0I7SUFBRyxxRUFBVyxDQUFBO0lBQUUsK0RBQVEsQ0FBQTtJQUFFLDZEQUFPLENBQUE7QUFBQyxDQUFDLEVBQW5ELGdCQUFnQixLQUFoQixnQkFBZ0IsUUFBbUM7QUFFeEQsTUFBcUIsVUFBVyxTQUFRLDZCQUFpQjtJQW9CckQsWUFBb0IsRUFDaEIsS0FBSyxFQUNMLGtCQUFrQixFQUNsQixLQUFLLEVBQ0wsV0FBVyxFQUNYLFVBQVUsRUFDVixxQkFBcUIsRUFDckIsSUFBSSxFQUNKLGVBQWUsRUFDZixVQUFVLEdBQ0c7O1FBQ2IsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFN0IsSUFBSSxDQUFDLE1BQU0sR0FBa0IsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQWlCLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFtQixJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBa0IsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxrQkFBa0IsR0FBTSxrQkFBa0IsQ0FBQztRQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFZLFdBQVcsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxHQUFjLFVBQVUsQ0FBQztRQUN4QyxJQUFJLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7UUFDbkQsSUFBSSxD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QUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO2FBQzNDO1lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUU5RSxJQUFJLFVBQVUsRUFBRTtnQkFDWixPQUFPO29CQUNILFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDdkMsR0FBRyxFQUFRLFVBQVU7aUJBQ3hCLENBQUM7YUFDTDtTQUNKO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLEtBQUs7UUFDUixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyw0QkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FDSjtBQXJPRCw2QkFxT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwdWxsIGFzIHJlbW92ZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQXN5bmNFdmVudEVtaXR0ZXIgZnJvbSAnLi4vdXRpbHMvYXN5bmMtZXZlbnQtZW1pdHRlcic7XG5pbXBvcnQgVGVzdFJ1bkNvbnRyb2xsZXIgZnJvbSAnLi90ZXN0LXJ1bi1jb250cm9sbGVyJztcbmltcG9ydCBTZXNzaW9uQ29udHJvbGxlciBmcm9tICcuLi90ZXN0LXJ1bi9zZXNzaW9uLWNvbnRyb2xsZXInO1xuaW1wb3J0IEJyb3dzZXJDb25uZWN0aW9uIGZyb20gJy4uL2Jyb3dzZXIvY29ubmVjdGlvbic7XG5pbXBvcnQgeyBQcm94eSB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IFRlc3QgZnJvbSAnLi4vYXBpL3N0cnVjdHVyZS90ZXN0JztcbmltcG9ydCBTY3JlZW5zaG90cyBmcm9tICcuLi9zY3JlZW5zaG90cyc7XG5pbXBvcnQgV2FybmluZ0xvZyBmcm9tICcuLi9ub3RpZmljYXRpb25zL3dhcm5pbmctbG9nJztcbmltcG9ydCBGaXh0dXJlSG9va0NvbnRyb2xsZXIgZnJvbSAnLi9maXh0dXJlLWhvb2stY29udHJvbGxlcic7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vY29uZmlndXJhdGlvbi9pbnRlcmZhY2VzJztcbmltcG9ydCBCcm93c2VySm9iUmVzdWx0IGZyb20gJy4vYnJvd3Nlci1qb2ItcmVzdWx0JztcbmltcG9ydCBDb21waWxlclNlcnZpY2UgZnJvbSAnLi4vc2VydmljZXMvY29tcGlsZXIvaG9zdCc7XG5pbXBvcnQgeyBCcm93c2VySm9iSW5pdCB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgTWVzc2FnZUJ1cyBmcm9tICcuLi91dGlscy9tZXNzYWdlLWJ1cyc7XG5pbXBvcnQgVGVzdFJ1bkhvb2tDb250cm9sbGVyIGZyb20gJy4vdGVzdC1ydW4taG9vay1jb250cm9sbGVyJztcbmltcG9ydCBUZXN0UnVuIGZyb20gJy4uL3Rlc3QtcnVuJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFRlc3RSdW4gYXMgTGVnYWN5VGVzdFJ1biB9IGZyb20gJ3Rlc3RjYWZlLWxlZ2FjeS1hcGknO1xuaW1wb3J0IHsgTmV4dFRlc3RSdW5JbmZvIH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcblxuaW50ZXJmYWNlIEJyb3dzZXJKb2JSZXN1bHRJbmZvIHtcbiAgICBzdGF0dXM6IEJyb3dzZXJKb2JSZXN1bHQ7XG4gICAgZGF0YT86IGFueTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59XG5cbmVudW0gQnJvd3NlckpvYlN0YXR1cyB7IGluaXRpYWxpemVkLCBzdGFydGluZywgc3RhcnRlZCB9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJKb2IgZXh0ZW5kcyBBc3luY0V2ZW50RW1pdHRlciB7XG4gICAgcHJpdmF0ZSBfc3RhdHVzOiBCcm93c2VySm9iU3RhdHVzO1xuICAgIHByaXZhdGUgX3N0YXJ0VGltZTogRGF0ZTtcbiAgICBwcml2YXRlIF90b3RhbDogbnVtYmVyO1xuICAgIHByaXZhdGUgX3Bhc3NlZDogbnVtYmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29wdHM6IERpY3Rpb25hcnk8T3B0aW9uVmFsdWU+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Byb3h5OiBQcm94eTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYnJvd3NlckNvbm5lY3Rpb25zOiBCcm93c2VyQ29ubmVjdGlvbltdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NjcmVlbnNob3RzOiBTY3JlZW5zaG90cztcbiAgICBwdWJsaWMgcmVhZG9ubHkgd2FybmluZ0xvZzogV2FybmluZ0xvZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgZml4dHVyZUhvb2tDb250cm9sbGVyOiBGaXh0dXJlSG9va0NvbnRyb2xsZXI7XG4gICAgcHJpdmF0ZSBfcmVzdWx0OiBCcm93c2VySm9iUmVzdWx0SW5mbyB8IG51bGw7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGVzdFJ1bkNvbnRyb2xsZXJRdWV1ZTogVGVzdFJ1bkNvbnRyb2xsZXJbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yZXBvcnRzUGVuZGluZzogVGVzdFJ1bkNvbnRyb2xsZXJbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb25uZWN0aW9uRXJyb3JMaXN0ZW5lcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb21wbGV0aW9uUXVldWU6IFRlc3RSdW5Db250cm9sbGVyW107XG4gICAgcHJpdmF0ZSBfcmVzb2x2ZVdhaXRpbmdMYXN0VGVzdEluRml4dHVyZTogRnVuY3Rpb24gfCBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2VCdXM6IE1lc3NhZ2VCdXM7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGVzdFJ1bkhvb2s6IFRlc3RSdW5Ib29rQ29udHJvbGxlcjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoe1xuICAgICAgICB0ZXN0cyxcbiAgICAgICAgYnJvd3NlckNvbm5lY3Rpb25zLFxuICAgICAgICBwcm94eSxcbiAgICAgICAgc2NyZWVuc2hvdHMsXG4gICAgICAgIHdhcm5pbmdMb2csXG4gICAgICAgIGZpeHR1cmVIb29rQ29udHJvbGxlcixcbiAgICAgICAgb3B0cyxcbiAgICAgICAgY29tcGlsZXJTZXJ2aWNlLFxuICAgICAgICBtZXNzYWdlQnVzLFxuICAgIH06IEJyb3dzZXJKb2JJbml0KSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5fc3RhdHVzID0gQnJvd3NlckpvYlN0YXR1cy5pbml0aWFsaXplZDtcbiAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gbmV3IERhdGUoKTtcblxuICAgICAgICB0aGlzLl90b3RhbCAgICAgICAgICAgICAgICA9IDA7XG4gICAgICAgIHRoaXMuX3Bhc3NlZCAgICAgICAgICAgICAgID0gMDtcbiAgICAgICAgdGhpcy5fb3B0cyAgICAgICAgICAgICAgICAgPSBvcHRzO1xuICAgICAgICB0aGlzLl9wcm94eSAgICAgICAgICAgICAgICA9IHByb3h5O1xuICAgICAgICB0aGlzLmJyb3dzZXJDb25uZWN0aW9ucyAgICA9IGJyb3dzZXJDb25uZWN0aW9ucztcbiAgICAgICAgdGhpcy5fc2NyZWVuc2hvdHMgICAgICAgICAgPSBzY3JlZW5zaG90cztcbiAgICAgICAgdGhpcy53YXJuaW5nTG9nICAgICAgICAgICAgPSB3YXJuaW5nTG9nO1xuICAgICAgICB0aGlzLmZpeHR1cmVIb29rQ29udHJvbGxlciA9IGZpeHR1cmVIb29rQ29udHJvbGxlcjtcbiAgICAgICAgdGhpcy5fcmVzdWx0ICAgICAgICAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLl9tZXNzYWdlQnVzICAgICAgICAgICA9IG1lc3NhZ2VCdXM7XG4gICAgICAgIHRoaXMuX3Rlc3RSdW5Ib29rICAgICAgICAgID0gbmV3IFRlc3RSdW5Ib29rQ29udHJvbGxlcih0ZXN0cywgKG9wdHMuaG9va3MgYXMgR2xvYmFsSG9va3MpPy50ZXN0UnVuKTtcblxuICAgICAgICB0aGlzLl90ZXN0UnVuQ29udHJvbGxlclF1ZXVlID0gdGVzdHMubWFwKCh0ZXN0LCBpbmRleCkgPT4gdGhpcy5fY3JlYXRlVGVzdFJ1bkNvbnRyb2xsZXIodGVzdCwgaW5kZXgsIGNvbXBpbGVyU2VydmljZSkpO1xuXG4gICAgICAgIHRoaXMuX2NvbXBsZXRpb25RdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLl9yZXBvcnRzUGVuZGluZyAgPSBbXTtcblxuICAgICAgICB0aGlzLl9jb25uZWN0aW9uRXJyb3JMaXN0ZW5lciA9IChlcnJvcjogRXJyb3IpID0+IHRoaXMuX3NldFJlc3VsdChCcm93c2VySm9iUmVzdWx0LmVycm9yZWQsIGVycm9yKTtcblxuICAgICAgICB0aGlzLl9yZXNvbHZlV2FpdGluZ0xhc3RUZXN0SW5GaXh0dXJlID0gbnVsbDtcblxuICAgICAgICB0aGlzLmJyb3dzZXJDb25uZWN0aW9ucy5tYXAoYmMgPT4gYmMub25jZSgnZXJyb3InLCB0aGlzLl9jb25uZWN0aW9uRXJyb3JMaXN0ZW5lcikpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZVRlc3RSdW5Db250cm9sbGVyICh0ZXN0OiBUZXN0LCBpbmRleDogbnVtYmVyLCBjb21waWxlclNlcnZpY2U/OiBDb21waWxlclNlcnZpY2UpOiBUZXN0UnVuQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0IHRlc3RSdW5Db250cm9sbGVyID0gbmV3IFRlc3RSdW5Db250cm9sbGVyKHtcbiAgICAgICAgICAgIHRlc3QsXG4gICAgICAgICAgICBpbmRleDogICAgICAgICAgICAgICAgIGluZGV4ICsgMSxcbiAgICAgICAgICAgIHByb3h5OiAgICAgICAgICAgICAgICAgdGhpcy5fcHJveHksXG4gICAgICAgICAgICBzY3JlZW5zaG90czogICAgICAgICAgIHRoaXMuX3NjcmVlbnNob3RzLFxuICAgICAgICAgICAgd2FybmluZ0xvZzogICAgICAgICAgICB0aGlzLndhcm5pbmdMb2csXG4gICAgICAgICAgICBmaXh0dXJlSG9va0NvbnRyb2xsZXI6IHRoaXMuZml4dHVyZUhvb2tDb250cm9sbGVyLFxuICAgICAgICAgICAgb3B0czogICAgICAgICAgICAgICAgICB0aGlzLl9vcHRzLFxuICAgICAgICAgICAgbWVzc2FnZUJ1czogICAgICAgICAgICB0aGlzLl9tZXNzYWdlQnVzLFxuICAgICAgICAgICAgY29tcGlsZXJTZXJ2aWNlLFxuICAgICAgICAgICAgdGVzdFJ1bkhvb2s6ICAgICAgICAgICB0aGlzLl90ZXN0UnVuSG9vayxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGVzdFJ1bkNvbnRyb2xsZXIub24oJ3Rlc3QtcnVuLWNyZWF0ZScsIGFzeW5jIHRlc3RSdW5JbmZvID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdCgndGVzdC1ydW4tY3JlYXRlJywgdGVzdFJ1bkluZm8pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGVzdFJ1bkNvbnRyb2xsZXIub24oJ3Rlc3QtcnVuLXJlYWR5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCd0ZXN0LXJ1bi1yZWFkeScsIHRlc3RSdW5Db250cm9sbGVyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRlc3RSdW5Db250cm9sbGVyLm9uKCd0ZXN0LXJ1bi1yZXN0YXJ0JywgYXN5bmMgKCkgPT4gdGhpcy5fb25UZXN0UnVuUmVzdGFydCh0ZXN0UnVuQ29udHJvbGxlcikpO1xuICAgICAgICB0ZXN0UnVuQ29udHJvbGxlci5vbigndGVzdC1ydW4tYmVmb3JlLWRvbmUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ3Rlc3QtcnVuLWJlZm9yZS1kb25lJywgdGVzdFJ1bkNvbnRyb2xsZXIpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGVzdFJ1bkNvbnRyb2xsZXIub24oJ3Rlc3QtcnVuLWRvbmUnLCBhc3luYyAoKSA9PiB0aGlzLl9vblRlc3RSdW5Eb25lKHRlc3RSdW5Db250cm9sbGVyKSk7XG5cbiAgICAgICAgdGVzdFJ1bkNvbnRyb2xsZXIub24oJ3Rlc3QtYWN0aW9uLWRvbmUnLCBhc3luYyBhcmdzID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdCgndGVzdC1hY3Rpb24tZG9uZScsIGFyZ3MpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGVzdFJ1bkNvbnRyb2xsZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0UmVzdWx0IChzdGF0dXM6IEJyb3dzZXJKb2JSZXN1bHQsIGRhdGE/OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGlmICh0aGlzLl9yZXN1bHQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5fcmVzdWx0ID0geyBzdGF0dXMsIGRhdGEgfTtcblxuICAgICAgICB0aGlzLmJyb3dzZXJDb25uZWN0aW9ucy5mb3JFYWNoKGJjID0+IGJjLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIHRoaXMuX2Nvbm5lY3Rpb25FcnJvckxpc3RlbmVyKSk7XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5icm93c2VyQ29ubmVjdGlvbnMubWFwKGJjID0+IGJjLnJlcG9ydEpvYlJlc3VsdCgodGhpcy5fcmVzdWx0IGFzIEJyb3dzZXJKb2JSZXN1bHRJbmZvKS5zdGF0dXMsICh0aGlzLl9yZXN1bHQgYXMgQnJvd3NlckpvYlJlc3VsdEluZm8pLmRhdGEpKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYWRkVG9Db21wbGV0aW9uUXVldWUgKHRlc3RSdW5JbmZvOiBUZXN0UnVuQ29udHJvbGxlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb21wbGV0aW9uUXVldWUucHVzaCh0ZXN0UnVuSW5mbyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVtb3ZlRnJvbUNvbXBsZXRpb25RdWV1ZSAodGVzdFJ1bkluZm86IFRlc3RSdW5Db250cm9sbGVyKTogdm9pZCB7XG4gICAgICAgIHJlbW92ZSh0aGlzLl9jb21wbGV0aW9uUXVldWUsIHRlc3RSdW5JbmZvKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9vblRlc3RSdW5SZXN0YXJ0ICh0ZXN0UnVuQ29udHJvbGxlcjogVGVzdFJ1bkNvbnRyb2xsZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlRnJvbUNvbXBsZXRpb25RdWV1ZSh0ZXN0UnVuQ29udHJvbGxlcik7XG4gICAgICAgIHRoaXMuX3Rlc3RSdW5Db250cm9sbGVyUXVldWUudW5zaGlmdCh0ZXN0UnVuQ29udHJvbGxlcik7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCd0ZXN0LXJ1bi1yZXN0YXJ0JywgdGVzdFJ1bkNvbnRyb2xsZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX29uVGVzdFJ1bkRvbmUgKHRlc3RSdW5Db250cm9sbGVyOiBUZXN0UnVuQ29udHJvbGxlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl90b3RhbCsrO1xuXG4gICAgICAgIGlmICghdGVzdFJ1bkNvbnRyb2xsZXIudGVzdFJ1bi5lcnJzLmxlbmd0aClcbiAgICAgICAgICAgIHRoaXMuX3Bhc3NlZCsrO1xuXG4gICAgICAgIHdoaWxlICh0aGlzLl9jb21wbGV0aW9uUXVldWUubGVuZ3RoICYmIHRoaXMuX2NvbXBsZXRpb25RdWV1ZVswXS5kb25lKSB7XG4gICAgICAgICAgICB0ZXN0UnVuQ29udHJvbGxlciA9IHRoaXMuX2NvbXBsZXRpb25RdWV1ZS5zaGlmdCgpIGFzIFRlc3RSdW5Db250cm9sbGVyO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ3Rlc3QtcnVuLWRvbmUnLCB0ZXN0UnVuQ29udHJvbGxlci50ZXN0UnVuKTtcblxuICAgICAgICAgICAgcmVtb3ZlKHRoaXMuX3JlcG9ydHNQZW5kaW5nLCB0ZXN0UnVuQ29udHJvbGxlcik7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcmVwb3J0c1BlbmRpbmcubGVuZ3RoICYmIHRoaXMuX3Jlc29sdmVXYWl0aW5nTGFzdFRlc3RJbkZpeHR1cmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNvbHZlV2FpdGluZ0xhc3RUZXN0SW5GaXh0dXJlKCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNvbHZlV2FpdGluZ0xhc3RUZXN0SW5GaXh0dXJlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY29tcGxldGlvblF1ZXVlLmxlbmd0aCAmJiAhdGhpcy5oYXNRdWV1ZWRUZXN0UnVucykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9vcHRzLmxpdmUpXG4gICAgICAgICAgICAgICAgU2Vzc2lvbkNvbnRyb2xsZXIuY2xvc2VTZXNzaW9uKHRlc3RSdW5Db250cm9sbGVyLnRlc3RSdW4pO1xuXG4gICAgICAgICAgICB0aGlzXG4gICAgICAgICAgICAgICAgLl9zZXRSZXN1bHQoQnJvd3NlckpvYlJlc3VsdC5kb25lLCB7IHRvdGFsOiB0aGlzLl90b3RhbCwgcGFzc2VkOiB0aGlzLl9wYXNzZWQgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmVtaXQoJ2RvbmUnKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9pc05leHRUZXN0UnVuQXZhaWxhYmxlICh0ZXN0UnVuQ29udHJvbGxlcjogVGVzdFJ1bkNvbnRyb2xsZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgLy8gTk9URTogZXZlbnQgdGFzayBzdGFydCBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLFxuICAgICAgICAvLyBzbyB0ZXN0IHJ1biBpcyB0ZW1wb3JhcnkgYmxvY2tlZFxuICAgICAgICBpZiAodGhpcy5fc3RhdHVzID09PSBCcm93c2VySm9iU3RhdHVzLnN0YXJ0aW5nKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIC8vIE5PVEU6IGJlZm9yZSBob29rIGZvciB0ZXN0IHJ1biBmaXh0dXJlIGlzIGN1cnJlbnRseVxuICAgICAgICAvLyBleGVjdXRpbmcsIHNvIHRlc3QgcnVuIGlzIHRlbXBvcmFyeSBibG9ja2VkXG4gICAgICAgIGNvbnN0IGlzQmxvY2tlZCAgICAgICAgICAgICAgICAgPSB0ZXN0UnVuQ29udHJvbGxlci5ibG9ja2VkO1xuICAgICAgICBjb25zdCBpc0NvbmN1cnJlbmN5ICAgICAgICAgICAgID0gdGhpcy5fb3B0cy5jb25jdXJyZW5jeSBhcyBudW1iZXIgPiAxO1xuICAgICAgICBjb25zdCBoYXNJbmNvbXBsZXRlVGVzdFJ1bnMgICAgID0gdGhpcy5fY29tcGxldGlvblF1ZXVlLnNvbWUoY29udHJvbGxlciA9PiAhY29udHJvbGxlci5kb25lKTtcbiAgICAgICAgY29uc3QgbmVlZFdhaXRMYXN0VGVzdEluRml4dHVyZSA9IHRoaXMuX3JlcG9ydHNQZW5kaW5nLnNvbWUoY29udHJvbGxlciA9PiBjb250cm9sbGVyLnRlc3QuZml4dHVyZSAhPT0gdGVzdFJ1bkNvbnRyb2xsZXIudGVzdC5maXh0dXJlKTtcblxuICAgICAgICBpZiAoaXNCbG9ja2VkIHx8IChoYXNJbmNvbXBsZXRlVGVzdFJ1bnMgfHwgbmVlZFdhaXRMYXN0VGVzdEluRml4dHVyZSkgJiYgIWlzQ29uY3VycmVuY3kpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc2FibGVQYWdlUmVsb2FkcyA9IHRlc3RSdW5Db250cm9sbGVyLnRlc3QuZGlzYWJsZVBhZ2VSZWxvYWRzIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5fb3B0cy5kaXNhYmxlUGFnZVJlbG9hZHMgJiYgdGVzdFJ1bkNvbnRyb2xsZXIudGVzdC5kaXNhYmxlUGFnZVJlbG9hZHMgIT09IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoIW5lZWRXYWl0TGFzdFRlc3RJbkZpeHR1cmUgfHwgIWRpc2FibGVQYWdlUmVsb2FkcylcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIE5PVEU6IGlmIHdlIGhhdmUgYGRpc2FibGVQYWdlUmVsb2Fkc2AgZW5hYmxlZCBhbmQgdGhlIG5leHQgdGVzdCBpcyBmcm9tIG5leHRcbiAgICAgICAgICAgIC8vIGZpeHR1cmUsIHRoZW4gd2UgbmVlZCB0byB3YWl0IHVudGlsIGFsbCByZXBvcnRlcnMgZmluaXNoZWQgdG8gcHJldmVudFxuICAgICAgICAgICAgLy8gcmVkaXJlY3RpbmcgdG8gdGhlIGBpZGxlYCBwYWdlXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNvbHZlV2FpdGluZ0xhc3RUZXN0SW5GaXh0dXJlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gQVBJXG4gICAgcHVibGljIGdldCBoYXNRdWV1ZWRUZXN0UnVucyAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX3Rlc3RSdW5Db250cm9sbGVyUXVldWUubGVuZ3RoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VycmVudFRlc3RSdW4gKCk6IExlZ2FjeVRlc3RSdW4gfCBUZXN0UnVuIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb21wbGV0aW9uUXVldWUubGVuZ3RoID8gdGhpcy5fY29tcGxldGlvblF1ZXVlWzBdLnRlc3RSdW4gOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwb3BOZXh0VGVzdFJ1bkluZm8gKGNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uKTogUHJvbWlzZTxOZXh0VGVzdFJ1bkluZm8gfCBudWxsPiB7XG4gICAgICAgIHdoaWxlICh0aGlzLl90ZXN0UnVuQ29udHJvbGxlclF1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdGVzdFJ1bkNvbnRyb2xsZXIgPSB0aGlzLl90ZXN0UnVuQ29udHJvbGxlclF1ZXVlWzBdO1xuXG4gICAgICAgICAgICBjb25zdCBpc05leHRUZXN0UnVuQXZhaWxhYmxlID0gYXdhaXQgdGhpcy5faXNOZXh0VGVzdFJ1bkF2YWlsYWJsZSh0ZXN0UnVuQ29udHJvbGxlcik7XG5cbiAgICAgICAgICAgIGlmICghaXNOZXh0VGVzdFJ1bkF2YWlsYWJsZSlcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0c1BlbmRpbmcucHVzaCh0ZXN0UnVuQ29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLl90ZXN0UnVuQ29udHJvbGxlclF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICB0aGlzLl9hZGRUb0NvbXBsZXRpb25RdWV1ZSh0ZXN0UnVuQ29udHJvbGxlcik7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0dXMgPT09IEJyb3dzZXJKb2JTdGF0dXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0dXMgPSBCcm93c2VySm9iU3RhdHVzLnN0YXJ0aW5nO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0VGltZSAgID0gbmV3IERhdGUoKTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdCgnc3RhcnQnLCB0aGlzLl9zdGFydFRpbWUpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdHVzID0gQnJvd3NlckpvYlN0YXR1cy5zdGFydGVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0ZXN0UnVuVXJsID0gYXdhaXQgdGVzdFJ1bkNvbnRyb2xsZXIuc3RhcnQoY29ubmVjdGlvbiwgdGhpcy5fc3RhcnRUaW1lKTtcblxuICAgICAgICAgICAgaWYgKHRlc3RSdW5VcmwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0ZXN0UnVuSWQ6IHRlc3RSdW5Db250cm9sbGVyLnRlc3RSdW4uaWQsXG4gICAgICAgICAgICAgICAgICAgIHVybDogICAgICAgdGVzdFJ1blVybCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGFib3J0ICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhckxpc3RlbmVycygpO1xuICAgICAgICB0aGlzLl9zZXRSZXN1bHQoQnJvd3NlckpvYlJlc3VsdC5hYm9ydGVkKTtcbiAgICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbnMubWFwKGJjID0+IGJjLnJlbW92ZUpvYih0aGlzKSk7XG4gICAgfVxufVxuIl19
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1qb2IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVubmVyL2Jyb3dzZXItam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQXdDO0FBQ3hDLHVGQUE2RDtBQUM3RCxnRkFBc0Q7QUFDdEQsd0ZBQStEO0FBUS9ELDhFQUFvRDtBQUlwRCwwRkFBK0Q7QUFXL0QsSUFBSyxnQkFBbUQ7QUFBeEQsV0FBSyxnQkFBZ0I7SUFBRyxxRUFBVyxDQUFBO0lBQUUsK0RBQVEsQ0FBQTtJQUFFLDZEQUFPLENBQUE7QUFBQyxDQUFDLEVBQW5ELGdCQUFnQixLQUFoQixnQkFBZ0IsUUFBbUM7QUFFeEQsTUFBcUIsVUFBVyxTQUFRLDZCQUFpQjtJQW9CckQsWUFBb0IsRUFDaEIsS0FBSyxFQUNMLGtCQUFrQixFQUNsQixLQUFLLEVBQ0wsV0FBVyxFQUNYLFVBQVUsRUFDVixxQkFBcUIsRUFDckIsSUFBSSxFQUNKLGVBQWUsRUFDZixVQUFVLEdBQ0c7O1FBQ2IsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFN0IsSUFBSSxDQUFDLE1BQU0sR0FBa0IsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQWlCLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFtQixJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBa0IsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxrQkFBa0IsR0FBTSxrQkFBa0IsQ0FBQztRQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFZLFdBQVcsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxHQUFjLFVBQVUsQ0FBQztRQUN4QyxJQUFJLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sR0FBaUIsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQWEsVUFBVSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLEdBQVksSUFBSSxrQ0FBcUIsQ0FBQyxLQUFLLEVBQUUsTUFBQyxJQUFJLENBQUMsS0FBcUIsMENBQUUsT0FBTyxDQUFDLENBQUM7UUFFcEcsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBRXZILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBSSxFQUFFLENBQUM7UUFFM0IsSUFBSSxDQUFDLHdCQUF3QixHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLDRCQUFnQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVuRyxJQUFJLENBQUMsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDO1FBRTdDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFTyx3QkFBd0IsQ0FBRSxJQUFVLEVBQUUsS0FBYSxFQUFFLGVBQWlDO1FBQzFGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSw2QkFBaUIsQ0FBQztZQUM1QyxJQUFJO1lBQ0osS0FBSyxFQUFrQixLQUFLLEdBQUcsQ0FBQztZQUNoQyxLQUFLLEVBQWtCLElBQUksQ0FBQyxNQUFNO1lBQ2xDLFdBQVcsRUFBWSxJQUFJLENBQUMsWUFBWTtZQUN4QyxVQUFVLEVBQWEsSUFBSSxDQUFDLFVBQVU7WUFDdEMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtZQUNqRCxJQUFJLEVBQW1CLElBQUksQ0FBQyxLQUFLO1lBQ2pDLFVBQVUsRUFBYSxJQUFJLENBQUMsV0FBVztZQUN2QyxlQUFlO1lBQ2YsV0FBVyxFQUFZLElBQUksQ0FBQyxZQUFZO1NBQzNDLENBQUMsQ0FBQztRQUVILGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLEVBQUMsV0FBVyxFQUFDLEVBQUU7WUFDeEQsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO1FBQ0gsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzlDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO1FBQ0gsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUNoRyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDcEQsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFDSCxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFFMUYsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBQyxJQUFJLEVBQUMsRUFBRTtZQUNsRCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLGlCQUFpQixDQUFDO0lBQzdCLENBQUM7SUFFTyxLQUFLLENBQUMsVUFBVSxDQUFFLE1BQXdCLEVBQUUsSUFBVTtRQUMxRCxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQ1osT0FBTztRQUVYLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFaEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7UUFFakcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFFLElBQUksQ0FBQyxPQUFnQyxDQUFDLE1BQU0sRUFBRyxJQUFJLENBQUMsT0FBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekssQ0FBQztJQUVPLHFCQUFxQixDQUFFLFdBQThCO1FBQ3pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLDBCQUEwQixDQUFFLFdBQThCO1FBQzlELElBQUEsYUFBTSxFQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU8sS0FBSyxDQUFDLGlCQUFpQixDQUFFLGlCQUFvQztRQUNqRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFeEQsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVPLEtBQUssQ0FBQyxjQUFjLENBQUUsaUJBQW9DO1FBQzlELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU07WUFDdEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRW5CLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ2xFLGlCQUFpQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQXVCLENBQUM7WUFFdkUsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUU1RCxJQUFBLGFBQU0sRUFBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFFaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRTtnQkFDdkUsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7Z0JBRXhDLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxJQUFJLENBQUM7YUFDaEQ7U0FDSjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7Z0JBQ2hCLDRCQUFpQixDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUU5RCxJQUFJO2lCQUNDLFVBQVUsQ0FBQyw0QkFBZ0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUMvRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyx1QkFBdUIsQ0FBRSxpQkFBb0M7UUFDdkUsaURBQWlEO1FBQ2pELG1DQUFtQztRQUNuQyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssZ0JBQWdCLENBQUMsUUFBUTtZQUMxQyxPQUFPLEtBQUssQ0FBQztRQUVqQixzREFBc0Q7UUFDdEQsOENBQThDO1FBQzlDLE1BQU0sU0FBUyxHQUFtQixpQkFBaUIsQ0FBQyxPQUFPLENBQUM7UUFDNUQsTUFBTSxhQUFhLEdBQWUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFxQixHQUFHLENBQUMsQ0FBQztRQUN2RSxNQUFNLHFCQUFxQixHQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RixNQUFNLHlCQUF5QixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXRJLElBQUksU0FBUyxJQUFJLENBQUMscUJBQXFCLElBQUkseUJBQXlCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNyRixNQUFNLGtCQUFrQixHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxrQkFBa0I7Z0JBQ2hFLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixLQUFLLEtBQUssQ0FBQztZQUV6RixJQUFJLENBQUMseUJBQXlCLElBQUksQ0FBQyxrQkFBa0I7Z0JBQ2pELE9BQU8sS0FBSyxDQUFDO1lBRWpCLCtFQUErRTtZQUMvRSx3RUFBd0U7WUFDeEUsaUNBQWlDO1lBQ2pDLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxPQUFPLENBQUM7WUFDcEQsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNO0lBQ04sSUFBVyxpQkFBaUI7UUFDeEIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2xGLENBQUM7SUFFTSxLQUFLLENBQUMsa0JBQWtCLENBQUUsVUFBNkI7UUFDMUQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFO1lBQ3hDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTFELE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUVyRixJQUFJLENBQUMsc0JBQXNCO2dCQUN2QixNQUFNO1lBRVYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFFOUMsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLGdCQUFnQixDQUFDLFdBQVcsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxVQUFVLEdBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFFL0IsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBRTFDLElBQUksQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO2FBQzNDO1lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUU5RSxJQUFJLFVBQVUsRUFBRTtnQkFDWixPQUFPO29CQUNILFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDdkMsR0FBRyxFQUFRLFVBQVU7aUJBQ3hCLENBQUM7YUFDTDtTQUNKO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLEtBQUs7UUFDUixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyw0QkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FDSjtBQXJPRCw2QkFxT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwdWxsIGFzIHJlbW92ZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQXN5bmNFdmVudEVtaXR0ZXIgZnJvbSAnLi4vdXRpbHMvYXN5bmMtZXZlbnQtZW1pdHRlcic7XG5pbXBvcnQgVGVzdFJ1bkNvbnRyb2xsZXIgZnJvbSAnLi90ZXN0LXJ1bi1jb250cm9sbGVyJztcbmltcG9ydCBTZXNzaW9uQ29udHJvbGxlciBmcm9tICcuLi90ZXN0LXJ1bi9zZXNzaW9uLWNvbnRyb2xsZXInO1xuaW1wb3J0IEJyb3dzZXJDb25uZWN0aW9uIGZyb20gJy4uL2Jyb3dzZXIvY29ubmVjdGlvbic7XG5pbXBvcnQgeyBQcm94eSB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IFRlc3QgZnJvbSAnLi4vYXBpL3N0cnVjdHVyZS90ZXN0JztcbmltcG9ydCBTY3JlZW5zaG90cyBmcm9tICcuLi9zY3JlZW5zaG90cyc7XG5pbXBvcnQgV2FybmluZ0xvZyBmcm9tICcuLi9ub3RpZmljYXRpb25zL3dhcm5pbmctbG9nJztcbmltcG9ydCBGaXh0dXJlSG9va0NvbnRyb2xsZXIgZnJvbSAnLi9maXh0dXJlLWhvb2stY29udHJvbGxlcic7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vY29uZmlndXJhdGlvbi9pbnRlcmZhY2VzJztcbmltcG9ydCBCcm93c2VySm9iUmVzdWx0IGZyb20gJy4vYnJvd3Nlci1qb2ItcmVzdWx0JztcbmltcG9ydCBDb21waWxlclNlcnZpY2UgZnJvbSAnLi4vc2VydmljZXMvY29tcGlsZXIvaG9zdCc7XG5pbXBvcnQgeyBCcm93c2VySm9iSW5pdCB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgTWVzc2FnZUJ1cyBmcm9tICcuLi91dGlscy9tZXNzYWdlLWJ1cyc7XG5pbXBvcnQgVGVzdFJ1bkhvb2tDb250cm9sbGVyIGZyb20gJy4vdGVzdC1ydW4taG9vay1jb250cm9sbGVyJztcbmltcG9ydCBUZXN0UnVuIGZyb20gJy4uL3Rlc3QtcnVuJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFRlc3RSdW4gYXMgTGVnYWN5VGVzdFJ1biB9IGZyb20gJ3Rlc3RjYWZlLWxlZ2FjeS1hcGknO1xuaW1wb3J0IHsgTmV4dFRlc3RSdW5JbmZvIH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcblxuaW50ZXJmYWNlIEJyb3dzZXJKb2JSZXN1bHRJbmZvIHtcbiAgICBzdGF0dXM6IEJyb3dzZXJKb2JSZXN1bHQ7XG4gICAgZGF0YT86IGFueTtcbn1cblxuZW51bSBCcm93c2VySm9iU3RhdHVzIHsgaW5pdGlhbGl6ZWQsIHN0YXJ0aW5nLCBzdGFydGVkIH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlckpvYiBleHRlbmRzIEFzeW5jRXZlbnRFbWl0dGVyIHtcbiAgICBwcml2YXRlIF9zdGF0dXM6IEJyb3dzZXJKb2JTdGF0dXM7XG4gICAgcHJpdmF0ZSBfc3RhcnRUaW1lOiBEYXRlO1xuICAgIHByaXZhdGUgX3RvdGFsOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfcGFzc2VkOiBudW1iZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfb3B0czogRGljdGlvbmFyeTxPcHRpb25WYWx1ZT47XG4gICAgcHJpdmF0ZSByZWFkb25seSBfcHJveHk6IFByb3h5O1xuICAgIHB1YmxpYyByZWFkb25seSBicm93c2VyQ29ubmVjdGlvbnM6IEJyb3dzZXJDb25uZWN0aW9uW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfc2NyZWVuc2hvdHM6IFNjcmVlbnNob3RzO1xuICAgIHB1YmxpYyByZWFkb25seSB3YXJuaW5nTG9nOiBXYXJuaW5nTG9nO1xuICAgIHB1YmxpYyByZWFkb25seSBmaXh0dXJlSG9va0NvbnRyb2xsZXI6IEZpeHR1cmVIb29rQ29udHJvbGxlcjtcbiAgICBwcml2YXRlIF9yZXN1bHQ6IEJyb3dzZXJKb2JSZXN1bHRJbmZvIHwgbnVsbDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZXN0UnVuQ29udHJvbGxlclF1ZXVlOiBUZXN0UnVuQ29udHJvbGxlcltdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlcG9ydHNQZW5kaW5nOiBUZXN0UnVuQ29udHJvbGxlcltdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Nvbm5lY3Rpb25FcnJvckxpc3RlbmVyOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbXBsZXRpb25RdWV1ZTogVGVzdFJ1bkNvbnRyb2xsZXJbXTtcbiAgICBwcml2YXRlIF9yZXNvbHZlV2FpdGluZ0xhc3RUZXN0SW5GaXh0dXJlOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWVzc2FnZUJ1czogTWVzc2FnZUJ1cztcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZXN0UnVuSG9vazogVGVzdFJ1bkhvb2tDb250cm9sbGVyO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yICh7XG4gICAgICAgIHRlc3RzLFxuICAgICAgICBicm93c2VyQ29ubmVjdGlvbnMsXG4gICAgICAgIHByb3h5LFxuICAgICAgICBzY3JlZW5zaG90cyxcbiAgICAgICAgd2FybmluZ0xvZyxcbiAgICAgICAgZml4dHVyZUhvb2tDb250cm9sbGVyLFxuICAgICAgICBvcHRzLFxuICAgICAgICBjb21waWxlclNlcnZpY2UsXG4gICAgICAgIG1lc3NhZ2VCdXMsXG4gICAgfTogQnJvd3NlckpvYkluaXQpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLl9zdGF0dXMgPSBCcm93c2VySm9iU3RhdHVzLmluaXRpYWxpemVkO1xuICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgICAgIHRoaXMuX3RvdGFsICAgICAgICAgICAgICAgID0gMDtcbiAgICAgICAgdGhpcy5fcGFzc2VkICAgICAgICAgICAgICAgPSAwO1xuICAgICAgICB0aGlzLl9vcHRzICAgICAgICAgICAgICAgICA9IG9wdHM7XG4gICAgICAgIHRoaXMuX3Byb3h5ICAgICAgICAgICAgICAgID0gcHJveHk7XG4gICAgICAgIHRoaXMuYnJvd3NlckNvbm5lY3Rpb25zICAgID0gYnJvd3NlckNvbm5lY3Rpb25zO1xuICAgICAgICB0aGlzLl9zY3JlZW5zaG90cyAgICAgICAgICA9IHNjcmVlbnNob3RzO1xuICAgICAgICB0aGlzLndhcm5pbmdMb2cgICAgICAgICAgICA9IHdhcm5pbmdMb2c7XG4gICAgICAgIHRoaXMuZml4dHVyZUhvb2tDb250cm9sbGVyID0gZml4dHVyZUhvb2tDb250cm9sbGVyO1xuICAgICAgICB0aGlzLl9yZXN1bHQgICAgICAgICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VCdXMgICAgICAgICAgID0gbWVzc2FnZUJ1cztcbiAgICAgICAgdGhpcy5fdGVzdFJ1bkhvb2sgICAgICAgICAgPSBuZXcgVGVzdFJ1bkhvb2tDb250cm9sbGVyKHRlc3RzLCAob3B0cy5ob29rcyBhcyBHbG9iYWxIb29rcyk/LnRlc3RSdW4pO1xuXG4gICAgICAgIHRoaXMuX3Rlc3RSdW5Db250cm9sbGVyUXVldWUgPSB0ZXN0cy5tYXAoKHRlc3QsIGluZGV4KSA9PiB0aGlzLl9jcmVhdGVUZXN0UnVuQ29udHJvbGxlcih0ZXN0LCBpbmRleCwgY29tcGlsZXJTZXJ2aWNlKSk7XG5cbiAgICAgICAgdGhpcy5fY29tcGxldGlvblF1ZXVlID0gW107XG4gICAgICAgIHRoaXMuX3JlcG9ydHNQZW5kaW5nICA9IFtdO1xuXG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rpb25FcnJvckxpc3RlbmVyID0gKGVycm9yOiBFcnJvcikgPT4gdGhpcy5fc2V0UmVzdWx0KEJyb3dzZXJKb2JSZXN1bHQuZXJyb3JlZCwgZXJyb3IpO1xuXG4gICAgICAgIHRoaXMuX3Jlc29sdmVXYWl0aW5nTGFzdFRlc3RJbkZpeHR1cmUgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuYnJvd3NlckNvbm5lY3Rpb25zLm1hcChiYyA9PiBiYy5vbmNlKCdlcnJvcicsIHRoaXMuX2Nvbm5lY3Rpb25FcnJvckxpc3RlbmVyKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlVGVzdFJ1bkNvbnRyb2xsZXIgKHRlc3Q6IFRlc3QsIGluZGV4OiBudW1iZXIsIGNvbXBpbGVyU2VydmljZT86IENvbXBpbGVyU2VydmljZSk6IFRlc3RSdW5Db250cm9sbGVyIHtcbiAgICAgICAgY29uc3QgdGVzdFJ1bkNvbnRyb2xsZXIgPSBuZXcgVGVzdFJ1bkNvbnRyb2xsZXIoe1xuICAgICAgICAgICAgdGVzdCxcbiAgICAgICAgICAgIGluZGV4OiAgICAgICAgICAgICAgICAgaW5kZXggKyAxLFxuICAgICAgICAgICAgcHJveHk6ICAgICAgICAgICAgICAgICB0aGlzLl9wcm94eSxcbiAgICAgICAgICAgIHNjcmVlbnNob3RzOiAgICAgICAgICAgdGhpcy5fc2NyZWVuc2hvdHMsXG4gICAgICAgICAgICB3YXJuaW5nTG9nOiAgICAgICAgICAgIHRoaXMud2FybmluZ0xvZyxcbiAgICAgICAgICAgIGZpeHR1cmVIb29rQ29udHJvbGxlcjogdGhpcy5maXh0dXJlSG9va0NvbnRyb2xsZXIsXG4gICAgICAgICAgICBvcHRzOiAgICAgICAgICAgICAgICAgIHRoaXMuX29wdHMsXG4gICAgICAgICAgICBtZXNzYWdlQnVzOiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VCdXMsXG4gICAgICAgICAgICBjb21waWxlclNlcnZpY2UsXG4gICAgICAgICAgICB0ZXN0UnVuSG9vazogICAgICAgICAgIHRoaXMuX3Rlc3RSdW5Ib29rLFxuICAgICAgICB9KTtcblxuICAgICAgICB0ZXN0UnVuQ29udHJvbGxlci5vbigndGVzdC1ydW4tY3JlYXRlJywgYXN5bmMgdGVzdFJ1bkluZm8gPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCd0ZXN0LXJ1bi1jcmVhdGUnLCB0ZXN0UnVuSW5mbyk7XG4gICAgICAgIH0pO1xuICAgICAgICB0ZXN0UnVuQ29udHJvbGxlci5vbigndGVzdC1ydW4tcmVhZHknLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ3Rlc3QtcnVuLXJlYWR5JywgdGVzdFJ1bkNvbnRyb2xsZXIpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGVzdFJ1bkNvbnRyb2xsZXIub24oJ3Rlc3QtcnVuLXJlc3RhcnQnLCBhc3luYyAoKSA9PiB0aGlzLl9vblRlc3RSdW5SZXN0YXJ0KHRlc3RSdW5Db250cm9sbGVyKSk7XG4gICAgICAgIHRlc3RSdW5Db250cm9sbGVyLm9uKCd0ZXN0LXJ1bi1iZWZvcmUtZG9uZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdCgndGVzdC1ydW4tYmVmb3JlLWRvbmUnLCB0ZXN0UnVuQ29udHJvbGxlcik7XG4gICAgICAgIH0pO1xuICAgICAgICB0ZXN0UnVuQ29udHJvbGxlci5vbigndGVzdC1ydW4tZG9uZScsIGFzeW5jICgpID0+IHRoaXMuX29uVGVzdFJ1bkRvbmUodGVzdFJ1bkNvbnRyb2xsZXIpKTtcblxuICAgICAgICB0ZXN0UnVuQ29udHJvbGxlci5vbigndGVzdC1hY3Rpb24tZG9uZScsIGFzeW5jIGFyZ3MgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCd0ZXN0LWFjdGlvbi1kb25lJywgYXJncyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0ZXN0UnVuQ29udHJvbGxlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9zZXRSZXN1bHQgKHN0YXR1czogQnJvd3NlckpvYlJlc3VsdCwgZGF0YT86IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5fcmVzdWx0KVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuX3Jlc3VsdCA9IHsgc3RhdHVzLCBkYXRhIH07XG5cbiAgICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbnMuZm9yRWFjaChiYyA9PiBiYy5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCB0aGlzLl9jb25uZWN0aW9uRXJyb3JMaXN0ZW5lcikpO1xuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYnJvd3NlckNvbm5lY3Rpb25zLm1hcChiYyA9PiBiYy5yZXBvcnRKb2JSZXN1bHQoKHRoaXMuX3Jlc3VsdCBhcyBCcm93c2VySm9iUmVzdWx0SW5mbykuc3RhdHVzLCAodGhpcy5fcmVzdWx0IGFzIEJyb3dzZXJKb2JSZXN1bHRJbmZvKS5kYXRhKSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FkZFRvQ29tcGxldGlvblF1ZXVlICh0ZXN0UnVuSW5mbzogVGVzdFJ1bkNvbnRyb2xsZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29tcGxldGlvblF1ZXVlLnB1c2godGVzdFJ1bkluZm8pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlbW92ZUZyb21Db21wbGV0aW9uUXVldWUgKHRlc3RSdW5JbmZvOiBUZXN0UnVuQ29udHJvbGxlcik6IHZvaWQge1xuICAgICAgICByZW1vdmUodGhpcy5fY29tcGxldGlvblF1ZXVlLCB0ZXN0UnVuSW5mbyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfb25UZXN0UnVuUmVzdGFydCAodGVzdFJ1bkNvbnRyb2xsZXI6IFRlc3RSdW5Db250cm9sbGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUZyb21Db21wbGV0aW9uUXVldWUodGVzdFJ1bkNvbnRyb2xsZXIpO1xuICAgICAgICB0aGlzLl90ZXN0UnVuQ29udHJvbGxlclF1ZXVlLnVuc2hpZnQodGVzdFJ1bkNvbnRyb2xsZXIpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdCgndGVzdC1ydW4tcmVzdGFydCcsIHRlc3RSdW5Db250cm9sbGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9vblRlc3RSdW5Eb25lICh0ZXN0UnVuQ29udHJvbGxlcjogVGVzdFJ1bkNvbnRyb2xsZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5fdG90YWwrKztcblxuICAgICAgICBpZiAoIXRlc3RSdW5Db250cm9sbGVyLnRlc3RSdW4uZXJycy5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzLl9wYXNzZWQrKztcblxuICAgICAgICB3aGlsZSAodGhpcy5fY29tcGxldGlvblF1ZXVlLmxlbmd0aCAmJiB0aGlzLl9jb21wbGV0aW9uUXVldWVbMF0uZG9uZSkge1xuICAgICAgICAgICAgdGVzdFJ1bkNvbnRyb2xsZXIgPSB0aGlzLl9jb21wbGV0aW9uUXVldWUuc2hpZnQoKSBhcyBUZXN0UnVuQ29udHJvbGxlcjtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0KCd0ZXN0LXJ1bi1kb25lJywgdGVzdFJ1bkNvbnRyb2xsZXIudGVzdFJ1bik7XG5cbiAgICAgICAgICAgIHJlbW92ZSh0aGlzLl9yZXBvcnRzUGVuZGluZywgdGVzdFJ1bkNvbnRyb2xsZXIpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3JlcG9ydHNQZW5kaW5nLmxlbmd0aCAmJiB0aGlzLl9yZXNvbHZlV2FpdGluZ0xhc3RUZXN0SW5GaXh0dXJlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZVdhaXRpbmdMYXN0VGVzdEluRml4dHVyZSgpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZVdhaXRpbmdMYXN0VGVzdEluRml4dHVyZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2NvbXBsZXRpb25RdWV1ZS5sZW5ndGggJiYgIXRoaXMuaGFzUXVldWVkVGVzdFJ1bnMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fb3B0cy5saXZlKVxuICAgICAgICAgICAgICAgIFNlc3Npb25Db250cm9sbGVyLmNsb3NlU2Vzc2lvbih0ZXN0UnVuQ29udHJvbGxlci50ZXN0UnVuKTtcblxuICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgICAgIC5fc2V0UmVzdWx0KEJyb3dzZXJKb2JSZXN1bHQuZG9uZSwgeyB0b3RhbDogdGhpcy5fdG90YWwsIHBhc3NlZDogdGhpcy5fcGFzc2VkIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5lbWl0KCdkb25lJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfaXNOZXh0VGVzdFJ1bkF2YWlsYWJsZSAodGVzdFJ1bkNvbnRyb2xsZXI6IFRlc3RSdW5Db250cm9sbGVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIC8vIE5PVEU6IGV2ZW50IHRhc2sgc3RhcnQgaXMgY3VycmVudGx5IGV4ZWN1dGluZyxcbiAgICAgICAgLy8gc28gdGVzdCBydW4gaXMgdGVtcG9yYXJ5IGJsb2NrZWRcbiAgICAgICAgaWYgKHRoaXMuX3N0YXR1cyA9PT0gQnJvd3NlckpvYlN0YXR1cy5zdGFydGluZylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICAvLyBOT1RFOiBiZWZvcmUgaG9vayBmb3IgdGVzdCBydW4gZml4dHVyZSBpcyBjdXJyZW50bHlcbiAgICAgICAgLy8gZXhlY3V0aW5nLCBzbyB0ZXN0IHJ1biBpcyB0ZW1wb3JhcnkgYmxvY2tlZFxuICAgICAgICBjb25zdCBpc0Jsb2NrZWQgICAgICAgICAgICAgICAgID0gdGVzdFJ1bkNvbnRyb2xsZXIuYmxvY2tlZDtcbiAgICAgICAgY29uc3QgaXNDb25jdXJyZW5jeSAgICAgICAgICAgICA9IHRoaXMuX29wdHMuY29uY3VycmVuY3kgYXMgbnVtYmVyID4gMTtcbiAgICAgICAgY29uc3QgaGFzSW5jb21wbGV0ZVRlc3RSdW5zICAgICA9IHRoaXMuX2NvbXBsZXRpb25RdWV1ZS5zb21lKGNvbnRyb2xsZXIgPT4gIWNvbnRyb2xsZXIuZG9uZSk7XG4gICAgICAgIGNvbnN0IG5lZWRXYWl0TGFzdFRlc3RJbkZpeHR1cmUgPSB0aGlzLl9yZXBvcnRzUGVuZGluZy5zb21lKGNvbnRyb2xsZXIgPT4gY29udHJvbGxlci50ZXN0LmZpeHR1cmUgIT09IHRlc3RSdW5Db250cm9sbGVyLnRlc3QuZml4dHVyZSk7XG5cbiAgICAgICAgaWYgKGlzQmxvY2tlZCB8fCAoaGFzSW5jb21wbGV0ZVRlc3RSdW5zIHx8IG5lZWRXYWl0TGFzdFRlc3RJbkZpeHR1cmUpICYmICFpc0NvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBjb25zdCBkaXNhYmxlUGFnZVJlbG9hZHMgPSB0ZXN0UnVuQ29udHJvbGxlci50ZXN0LmRpc2FibGVQYWdlUmVsb2FkcyB8fFxuICAgICAgICAgICAgICAgIHRoaXMuX29wdHMuZGlzYWJsZVBhZ2VSZWxvYWRzICYmIHRlc3RSdW5Db250cm9sbGVyLnRlc3QuZGlzYWJsZVBhZ2VSZWxvYWRzICE9PSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKCFuZWVkV2FpdExhc3RUZXN0SW5GaXh0dXJlIHx8ICFkaXNhYmxlUGFnZVJlbG9hZHMpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBOT1RFOiBpZiB3ZSBoYXZlIGBkaXNhYmxlUGFnZVJlbG9hZHNgIGVuYWJsZWQgYW5kIHRoZSBuZXh0IHRlc3QgaXMgZnJvbSBuZXh0XG4gICAgICAgICAgICAvLyBmaXh0dXJlLCB0aGVuIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBhbGwgcmVwb3J0ZXJzIGZpbmlzaGVkIHRvIHByZXZlbnRcbiAgICAgICAgICAgIC8vIHJlZGlyZWN0aW5nIHRvIHRoZSBgaWRsZWAgcGFnZVxuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZVdhaXRpbmdMYXN0VGVzdEluRml4dHVyZSA9IHJlc29sdmU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEFQSVxuICAgIHB1YmxpYyBnZXQgaGFzUXVldWVkVGVzdFJ1bnMgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl90ZXN0UnVuQ29udHJvbGxlclF1ZXVlLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRUZXN0UnVuICgpOiBMZWdhY3lUZXN0UnVuIHwgVGVzdFJ1biB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29tcGxldGlvblF1ZXVlLmxlbmd0aCA/IHRoaXMuX2NvbXBsZXRpb25RdWV1ZVswXS50ZXN0UnVuIDogbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcG9wTmV4dFRlc3RSdW5JbmZvIChjb25uZWN0aW9uOiBCcm93c2VyQ29ubmVjdGlvbik6IFByb21pc2U8TmV4dFRlc3RSdW5JbmZvIHwgbnVsbD4ge1xuICAgICAgICB3aGlsZSAodGhpcy5fdGVzdFJ1bkNvbnRyb2xsZXJRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RSdW5Db250cm9sbGVyID0gdGhpcy5fdGVzdFJ1bkNvbnRyb2xsZXJRdWV1ZVswXTtcblxuICAgICAgICAgICAgY29uc3QgaXNOZXh0VGVzdFJ1bkF2YWlsYWJsZSA9IGF3YWl0IHRoaXMuX2lzTmV4dFRlc3RSdW5BdmFpbGFibGUodGVzdFJ1bkNvbnRyb2xsZXIpO1xuXG4gICAgICAgICAgICBpZiAoIWlzTmV4dFRlc3RSdW5BdmFpbGFibGUpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydHNQZW5kaW5nLnB1c2godGVzdFJ1bkNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5fdGVzdFJ1bkNvbnRyb2xsZXJRdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgdGhpcy5fYWRkVG9Db21wbGV0aW9uUXVldWUodGVzdFJ1bkNvbnRyb2xsZXIpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fc3RhdHVzID09PSBCcm93c2VySm9iU3RhdHVzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdHVzID0gQnJvd3NlckpvYlN0YXR1cy5zdGFydGluZztcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgICA9IG5ldyBEYXRlKCk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ3N0YXJ0JywgdGhpcy5fc3RhcnRUaW1lKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXR1cyA9IEJyb3dzZXJKb2JTdGF0dXMuc3RhcnRlZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGVzdFJ1blVybCA9IGF3YWl0IHRlc3RSdW5Db250cm9sbGVyLnN0YXJ0KGNvbm5lY3Rpb24sIHRoaXMuX3N0YXJ0VGltZSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXN0UnVuVXJsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bklkOiB0ZXN0UnVuQ29udHJvbGxlci50ZXN0UnVuLmlkLFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICAgICAgIHRlc3RSdW5VcmwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBhYm9ydCAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXJMaXN0ZW5lcnMoKTtcbiAgICAgICAgdGhpcy5fc2V0UmVzdWx0KEJyb3dzZXJKb2JSZXN1bHQuYWJvcnRlZCk7XG4gICAgICAgIHRoaXMuYnJvd3NlckNvbm5lY3Rpb25zLm1hcChiYyA9PiBiYy5yZW1vdmVKb2IodGhpcykpO1xuICAgIH1cbn1cbiJdfQ==