testcafe 2.2.0 → 2.3.1

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 (93) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/bin/testcafe-with-v8-flag-filter.js +16 -3
  3. package/lib/api/exportable-lib/index.mjs +27 -0
  4. package/lib/api/structure/fixture.js +7 -3
  5. package/lib/api/structure/test.js +8 -3
  6. package/lib/api/structure/testing-unit.js +15 -1
  7. package/lib/api/test-controller/index.js +4 -4
  8. package/lib/browser/connection/gateway.js +13 -1
  9. package/lib/browser/connection/index.js +10 -1
  10. package/lib/browser/connection/service-routes.js +2 -1
  11. package/lib/browser/provider/built-in/dedicated/chrome/index.js +6 -1
  12. package/lib/browser/provider/index.js +4 -1
  13. package/lib/cli/argument-parser/index.js +58 -59
  14. package/lib/cli/cli.js +3 -2
  15. package/lib/client/automation/index.js +90 -4
  16. package/lib/client/automation/index.min.js +1 -1
  17. package/lib/client/browser/idle-page/index.js +7 -5
  18. package/lib/client/core/deps/hammerhead.js +24 -0
  19. package/lib/client/core/index.js +42 -7
  20. package/lib/client/core/index.min.js +1 -1
  21. package/lib/client/core/utils/values/axis-values.js +43 -0
  22. package/lib/client/driver/index.js +336 -211
  23. package/lib/client/driver/index.min.js +1 -1
  24. package/lib/client/test-run/iframe.js.mustache +2 -1
  25. package/lib/client/test-run/index.js.mustache +30 -28
  26. package/lib/client/ui/index.js +33 -23
  27. package/lib/client/ui/index.min.js +1 -1
  28. package/lib/compiler/babel/load-libs.js +10 -9
  29. package/lib/compiler/compilers.js +7 -7
  30. package/lib/compiler/esm-loader.js +38 -0
  31. package/lib/compiler/index.js +8 -7
  32. package/lib/compiler/interfaces.js +1 -1
  33. package/lib/compiler/prevent-module-caching-suffix.js +6 -0
  34. package/lib/compiler/test-file/add-export-api.js +3 -9
  35. package/lib/compiler/test-file/api-based.js +30 -14
  36. package/lib/compiler/test-file/base.js +4 -1
  37. package/lib/compiler/test-file/formats/coffeescript/compiler.js +5 -4
  38. package/lib/compiler/test-file/formats/es-next/compiler.js +21 -11
  39. package/lib/compiler/test-file/formats/extensions.js +15 -0
  40. package/lib/compiler/test-file/formats/typescript/compiler.js +27 -17
  41. package/lib/compiler/test-file/get-exportable-lib-path.js +17 -0
  42. package/lib/configuration/option-names.js +2 -1
  43. package/lib/custom-client-scripts/get-code.js +4 -3
  44. package/lib/custom-client-scripts/routing.js +3 -3
  45. package/lib/errors/is-internal-stack-frame.js +3 -2
  46. package/lib/errors/process-test-fn-error.js +3 -2
  47. package/lib/errors/runtime/index.js +18 -4
  48. package/lib/errors/runtime/templates.js +2 -1
  49. package/lib/errors/test-run/utils.js +8 -3
  50. package/lib/errors/types.js +2 -1
  51. package/lib/proxyless/api-base.js +25 -0
  52. package/lib/proxyless/client/event-simulator.js +40 -0
  53. package/lib/proxyless/client/types.js +11 -0
  54. package/lib/proxyless/client/utils.js +24 -0
  55. package/lib/proxyless/cookie-provider.js +3 -3
  56. package/lib/proxyless/index.js +20 -2
  57. package/lib/proxyless/request-hooks/event-factory/frame-navigated-event-based.js +40 -0
  58. package/lib/proxyless/request-hooks/event-factory/request-paused-event-based.js +95 -0
  59. package/lib/proxyless/request-hooks/event-provider.js +6 -54
  60. package/lib/proxyless/request-pipeline/context-info.js +55 -0
  61. package/lib/proxyless/request-pipeline/index.js +73 -31
  62. package/lib/proxyless/request-pipeline/resendAuthRequest.js +23 -0
  63. package/lib/proxyless/request-pipeline/special-handlers.js +2 -2
  64. package/lib/proxyless/request-pipeline/test-run-bridge.js +45 -0
  65. package/lib/proxyless/resource-injector.js +41 -29
  66. package/lib/proxyless/session-storage/index.js +39 -0
  67. package/lib/proxyless/storages-provider.js +17 -0
  68. package/lib/proxyless/types.js +8 -1
  69. package/lib/proxyless/utils/cdp.js +29 -2
  70. package/lib/proxyless/utils/get-active-client.js +8 -0
  71. package/lib/runner/bootstrapper.js +3 -2
  72. package/lib/runner/browser-job.js +1 -1
  73. package/lib/runner/task/index.js +2 -2
  74. package/lib/services/compiler/service.js +4 -4
  75. package/lib/services/utils/ipc/interfaces.js +1 -1
  76. package/lib/services/utils/ipc/proxy.js +1 -4
  77. package/lib/shared/utils/is-file-protocol.js +9 -0
  78. package/lib/test-run/commands/actions.js +2 -2
  79. package/lib/test-run/index.js +21 -6
  80. package/lib/test-run/request/send.js +20 -13
  81. package/lib/test-run/storages/base.js +16 -0
  82. package/lib/test-run/storages/factory.js +12 -0
  83. package/lib/testcafe.js +3 -3
  84. package/lib/utils/async-event-emitter.js +1 -1
  85. package/lib/utils/convert-to-best-fit-type.js +1 -1
  86. package/lib/utils/get-options/base.js +1 -1
  87. package/lib/utils/setup-sourcemap-support.js +10 -4
  88. package/package.json +13 -8
  89. package/ts-defs/index.d.ts +4 -4
  90. package/ts-defs/selectors.d.ts +2 -2
  91. package/ts-defs/testcafe-scripts.d.ts +2 -2
  92. package/lib/compiler/test-file/exportble-lib-path.js +0 -7
  93. package/lib/proxyless/request-hooks/event-factory.js +0 -95
package/CHANGELOG.md CHANGED
@@ -1,5 +1,87 @@
1
1
  # Changelog
2
2
 
3
+ ## v2.3.1 (2023-02-09)
4
+ TestCafe v2.3.1 introduces a number of bug fixes.
5
+
6
+ ### Bug Fixes
7
+
8
+ * Client-side code with optional chaining may trigger a TestCafe error ([#7387](https://github.com/DevExpress/testcafe/issues/7387)).
9
+ * TestCafe cannot interact with images from the Shadow DOM ([#7454](https://github.com/DevExpress/testcafe/issues/7454)).
10
+ * TestCafe v2.3.0 fails to launch when the `test.meta` method precedes test code ([#7482](https://github.com/DevExpress/testcafe/issues/7482)).
11
+ * When TestCafe launches a headless instance of Google Chrome in proxyless mode, it cannot interact with elements that are overlapped by the status bar ([#7483](https://github.com/DevExpress/testcafe/issues/7483)).
12
+
13
+ ## v2.3.0 (2023-01-30)
14
+
15
+ TestCafe v2.3.0 introduces `create-testcafe` --- an interactive tool that allows you to initialize a new TestCafe project in seconds. The update also includes *experimental* ECMAScript module support and a number of bug fixes.
16
+
17
+ > **_IMPORTANT:_**
18
+ > TestCafe v2.3.0 ends support for Node.js 14 due to a known vulnerability in the `babel-plugin-module-resolver` module.
19
+ >
20
+ > Install an up-to-date version of the Node.js runtime to use TestCafe v2.3.0 and up.
21
+ >
22
+ > The official maintenance period for Node.js 14 [elapses](https://endoflife.date/nodejs) on April 1st, 2023.
23
+
24
+
25
+ ### create-testcafe
26
+
27
+ Use the [create-testcafe](https://github.com/devexpress/create-testcafe) tool to initialize a new TestCafe project, or *add* TestCafe to an existing Node.js application.
28
+
29
+ Execute the following command to launch `create-testcafe`:
30
+
31
+ ```sh
32
+ npx create-testcafe
33
+ ```
34
+
35
+ ![example](https://testcafe.io/images/create-testcafe/wizard.gif)
36
+
37
+ The `create-testcafe` tool allows you to perform the following actions with a single command:
38
+
39
+ 1. Create a new folder for the TestCafe project *(optional)*.
40
+ 2. Create a new local installation of TestCafe and its dependencies.
41
+ 3. Create and initialize a TestCafe configuration file.
42
+ 4. Create a separate subfolder for tests.
43
+ 5. Populate the test folder with test examples *(optional)*.
44
+ 6. Create a YAML file with a GitLab Actions workflow that runs TestCafe tests *(optional)*.
45
+
46
+ Read the [TestCafe Setup Wizard guide](https://testcafe.io/documentation/404259/guides/best-practices/create-testcafe) for more information on the create-testcafe tool.
47
+
48
+ ### Experimental: ECMAScript module support
49
+
50
+ > **_IMPORTANT:_**
51
+ > ESM module suppport works with Node.js 16 and up.
52
+
53
+ TestCafe has always used *CommonJS* syntax for module imports:
54
+
55
+ ```js
56
+ const { x } = require('y');
57
+ ```
58
+
59
+ An increasing number of Node.JS packages abandon CommonJS in favour of [ECMAScript module syntax](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c):
60
+
61
+ ```js
62
+ import {x} from 'y'
63
+ ```
64
+
65
+ Enable the `--experimental-esm` [CLI flag](https://testcafe.io/documentation/402639/reference/command-line-interface#--experimental-esm) to import modules that do not support CommonJS. Note: tests with ECMASCript module syntax are subject to [additional requirements](https://testcafe.io/404257/release-notes/framework/2023-1-30-testcafe-v2-3-0-released#additional-reuqirements).
66
+
67
+ ```sh
68
+ testcafe chrome test.js --experimental-esm
69
+ ```
70
+
71
+ #### Additional Reuqirements
72
+
73
+ To run tests with ECMAScript `import` statements, make sure that your project meets at least one of the following requirements:
74
+
75
+ 1. The value of the `type` key in your project's [package.json file](https://nodejs.org/api/packages.html#packagejson-and-file-extensions) is `module`.
76
+ 2. The test files in your project use the `.mjs` extension.
77
+
78
+ ### Bug Fixes
79
+
80
+ * TestCafe doesn't delete expired cookies ([#7432](https://github.com/DevExpress/testcafe/issues/7432)).
81
+ * TestCafe cannot handle windows that appear when the user clicks a link with a `_blank` target ([#6926](https://github.com/DevExpress/testcafe/issues/6926)).
82
+ * TestCafe fails to start because it triggers the `dns.setDefaultResultOrder` method in older Node.js environments ([#7447](https://github.com/DevExpress/testcafe/issues/7447)).
83
+ * TestCafe depends on a vulnerable, outdated version of the `babel-plugin-module-resolver` package ([#7456](https://github.com/DevExpress/testcafe/issues/7456)).
84
+
3
85
  ## v2.2.0 (2022-12-29)
4
86
 
5
87
  TestCafe v2.2.0 introduces user-defined custom actions and an important *experimental* capability. Google Chrome users can now enable "proxyless mode" to speed up their test suite.
@@ -3,12 +3,25 @@
3
3
  'use strict';
4
4
 
5
5
  const path = require('path');
6
- const v8FlagsFilter = require('bin-v8-flags-filter');
6
+ const url = require('url');
7
+ const v8FlagsFilter = require('@devexpress/bin-v8-flags-filter');
7
8
 
8
9
  const EXPERIMENTAL_DEBUG_OPTION = '--experimental-debug';
10
+ const EXPERIMENTAL_ESM_OPTION = '--experimental-esm';
9
11
 
10
12
  if (process.argv.slice(2).includes(EXPERIMENTAL_DEBUG_OPTION))
11
13
  require('../lib/cli');
12
14
 
13
- else
14
- v8FlagsFilter(path.join(__dirname, '../lib/cli'), { useShutdownMessage: true });
15
+ else {
16
+ const forcedArgs = [];
17
+
18
+ if (process.argv.slice(2).includes(EXPERIMENTAL_ESM_OPTION)) {
19
+ forcedArgs.push('--no-warnings');
20
+ forcedArgs.push(`--experimental-loader=${url.pathToFileURL(path.join(__dirname, '../lib/compiler/esm-loader.js')).href}`);
21
+ }
22
+
23
+ v8FlagsFilter(path.join(__dirname, '../lib/cli'), {
24
+ useShutdownMessage: true,
25
+ forcedArgs,
26
+ });
27
+ }
@@ -0,0 +1,27 @@
1
+ import exportableLib from './index.js';
2
+
3
+ const {
4
+ Role,
5
+ ClientFunction,
6
+ Selector,
7
+ RequestLogger,
8
+ RequestMock,
9
+ RequestHook,
10
+ t,
11
+ userVariables,
12
+ fixture,
13
+ test,
14
+ } = exportableLib;
15
+
16
+ export {
17
+ Role,
18
+ ClientFunction,
19
+ Selector,
20
+ RequestLogger,
21
+ RequestMock,
22
+ RequestHook,
23
+ t,
24
+ userVariables,
25
+ fixture,
26
+ test,
27
+ };
@@ -16,7 +16,7 @@ const runtime_1 = require("../../errors/runtime");
16
16
  const types_1 = require("../../errors/types");
17
17
  const testcafe_hammerhead_1 = require("testcafe-hammerhead");
18
18
  class Fixture extends testing_unit_1.default {
19
- constructor(testFile, baseUrl) {
19
+ constructor(testFile, baseUrl, returnApiOrigin = true) {
20
20
  const pageUrl = baseUrl || testcafe_hammerhead_1.SPECIAL_BLANK_PAGE;
21
21
  super(testFile, unit_type_1.default.fixture, pageUrl, baseUrl);
22
22
  this.path = testFile.filename;
@@ -26,7 +26,11 @@ class Fixture extends testing_unit_1.default {
26
26
  this.afterFn = null;
27
27
  this.globalBeforeFn = null;
28
28
  this.globalAfterFn = null;
29
- return this.apiOrigin;
29
+ if (returnApiOrigin)
30
+ return this.apiOrigin;
31
+ }
32
+ static init({ testFile, baseUrl }) {
33
+ return super.init(Fixture, testFile, baseUrl);
30
34
  }
31
35
  _add(name, ...rest) {
32
36
  name = (0, handle_tag_args_1.default)(name, rest);
@@ -77,4 +81,4 @@ class Fixture extends testing_unit_1.default {
77
81
  exports.default = Fixture;
78
82
  testing_unit_1.default.makeAPIListForChildClass(Fixture);
79
83
  module.exports = exports.default;
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvc3RydWN0dXJlL2ZpeHR1cmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBZ0Q7QUFDaEQsa0VBQXlDO0FBQ3pDLDREQUFtQztBQUNuQywwRUFBc0U7QUFDdEUsa0ZBQXdEO0FBQ3hELCtFQUFxRDtBQUNyRCwrRUFBaUU7QUFDakUsMEZBQTZFO0FBQzdFLG9GQUE0RDtBQUM1RCxrREFBZ0Q7QUFDaEQsOENBQW9EO0FBSXBELDZEQUF5RDtBQUV6RCxNQUFxQixPQUFRLFNBQVEsc0JBQVc7SUFTNUMsWUFBb0IsUUFBa0IsRUFBRSxPQUFnQjtRQUNwRCxNQUFNLE9BQU8sR0FBRyxPQUFPLElBQUksd0NBQWtCLENBQUM7UUFFOUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxtQkFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFcEQsSUFBSSxDQUFDLElBQUksR0FBYSxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLEdBQUssSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQU0sSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQVMsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQVUsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUksSUFBSSxDQUFDO1FBRTNCLE9BQU8sSUFBSSxDQUFDLFNBQStCLENBQUM7SUFDaEQsQ0FBQztJQUVTLElBQUksQ0FBRSxJQUFZLEVBQUUsR0FBRyxJQUFlO1FBQzVDLElBQUksR0FBRyxJQUFBLHlCQUFhLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWpDLElBQUEsNEJBQVUsRUFBQyxvQkFBRSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFN0QsSUFBSSxDQUFDLElBQUksR0FBc0IsSUFBSSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUVwQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVPLFFBQVEsQ0FBRSxFQUFZO1FBQzFCLElBQUEsNEJBQVUsRUFBQyxvQkFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUseUJBQXlCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFFbkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFTyxPQUFPLENBQUUsRUFBWTtRQUN6QixJQUFBLDRCQUFVLEVBQUMsb0JBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBRWxCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRU8sWUFBWSxDQUFFLEVBQVk7UUFDOUIsSUFBQSw0QkFBVSxFQUFDLG9CQUFFLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSw2QkFBNkIsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUV6RSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUEsNEJBQWdCLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFFekMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFTyxXQUFXLENBQUUsRUFBWTtRQUM3QixJQUFBLDRCQUFVLEVBQUMsb0JBQUUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXZFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBQSw0QkFBZ0IsRUFBQyxFQUFFLENBQUMsQ0FBQztRQUV4QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVPLGNBQWMsQ0FBRSxHQUFHLEtBQW9CO1FBQzNDLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVk7WUFDcEMsTUFBTSxJQUFJLGtCQUFRLENBQUMsc0JBQVksQ0FBQyxZQUFZLEVBQUUsc0JBQWMsQ0FBQyw4QkFBOEIsRUFBRSxzQkFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTVILEtBQUssR0FBRyxJQUFBLG9CQUFPLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkIsSUFBQSxxQkFBcUIsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUU3QixJQUFJLENBQUMsWUFBWSxHQUFzQixLQUFLLENBQUM7UUFDN0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFFNUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFTyxlQUFlLENBQUUsR0FBRyxPQUEyQjtRQUNuRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhO1lBQ3JDLE1BQU0sSUFBSSxrQkFBUSxDQUFDLHNCQUFZLENBQUMsYUFBYSxFQUFFLHNCQUFjLENBQUMsOEJBQThCLEVBQUUsc0JBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUU5SCxPQUFPLEdBQUcsSUFBQSxvQkFBTyxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTNCLElBQUEscUJBQXNCLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFFaEMsSUFBSSxDQUFDLGFBQWEsR0FBc0IsT0FBTyxDQUFDO1FBQ2hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRTdDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0NBQ0o7QUEvRkQsMEJBK0ZDO0FBRUQsc0JBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZsYXR0ZW5EZWVwIGFzIGZsYXR0ZW4gfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFRlc3RpbmdVbml0IGZyb20gJy4vdGVzdGluZy11bml0JztcbmltcG9ydCBVbml0VHlwZSBmcm9tICcuL3VuaXQtdHlwZSc7XG5pbXBvcnQgeyBhc3NlcnRUeXBlLCBpcyB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lL3R5cGUtYXNzZXJ0aW9ucyc7XG5pbXBvcnQgaGFuZGxlVGFnQXJncyBmcm9tICcuLi8uLi91dGlscy9oYW5kbGUtdGFnLWFyZ3MnO1xuaW1wb3J0IHdyYXBUZXN0RnVuY3Rpb24gZnJvbSAnLi4vd3JhcC10ZXN0LWZ1bmN0aW9uJztcbmltcG9ydCBhc3NlcnRSZXF1ZXN0SG9va1R5cGUgZnJvbSAnLi4vcmVxdWVzdC1ob29rcy9hc3NlcnQtdHlwZSc7XG5pbXBvcnQgYXNzZXJ0Q2xpZW50U2NyaXB0VHlwZSBmcm9tICcuLi8uLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvYXNzZXJ0LXR5cGUnO1xuaW1wb3J0IE9QVElPTl9OQU1FUyBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL29wdGlvbi1uYW1lcyc7XG5pbXBvcnQgeyBBUElFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3R5cGVzJztcbmltcG9ydCBUZXN0RmlsZSBmcm9tICcuL3Rlc3QtZmlsZSc7XG5pbXBvcnQgUmVxdWVzdEhvb2sgZnJvbSAnLi4vcmVxdWVzdC1ob29rcy9ob29rJztcbmltcG9ydCBDbGllbnRTY3JpcHRJbml0IGZyb20gJy4uLy4uL2N1c3RvbS1jbGllbnQtc2NyaXB0cy9jbGllbnQtc2NyaXB0LWluaXQnO1xuaW1wb3J0IHsgU1BFQ0lBTF9CTEFOS19QQUdFIH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpeHR1cmUgZXh0ZW5kcyBUZXN0aW5nVW5pdCB7XG4gICAgcHVibGljIHBhdGg6IHN0cmluZztcbiAgICBwdWJsaWMgYmVmb3JlRWFjaEZuOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgcHVibGljIGFmdGVyRWFjaEZuOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgcHVibGljIGJlZm9yZUZuOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgcHVibGljIGFmdGVyRm46IEZ1bmN0aW9uIHwgbnVsbDtcbiAgICBwdWJsaWMgZ2xvYmFsQmVmb3JlRm46IEZ1bmN0aW9uIHwgbnVsbDtcbiAgICBwdWJsaWMgZ2xvYmFsQWZ0ZXJGbjogRnVuY3Rpb24gfCBudWxsO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yICh0ZXN0RmlsZTogVGVzdEZpbGUsIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcGFnZVVybCA9IGJhc2VVcmwgfHwgU1BFQ0lBTF9CTEFOS19QQUdFO1xuXG4gICAgICAgIHN1cGVyKHRlc3RGaWxlLCBVbml0VHlwZS5maXh0dXJlLCBwYWdlVXJsLCBiYXNlVXJsKTtcblxuICAgICAgICB0aGlzLnBhdGggICAgICAgICAgID0gdGVzdEZpbGUuZmlsZW5hbWU7XG4gICAgICAgIHRoaXMuYmVmb3JlRWFjaEZuICAgPSBudWxsO1xuICAgICAgICB0aGlzLmFmdGVyRWFjaEZuICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5iZWZvcmVGbiAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuYWZ0ZXJGbiAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLmdsb2JhbEJlZm9yZUZuID0gbnVsbDtcbiAgICAgICAgdGhpcy5nbG9iYWxBZnRlckZuICA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luIGFzIHVua25vd24gYXMgRml4dHVyZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2FkZCAobmFtZTogc3RyaW5nLCAuLi5yZXN0OiB1bmtub3duW10pOiBGdW5jdGlvbiB7XG4gICAgICAgIG5hbWUgPSBoYW5kbGVUYWdBcmdzKG5hbWUsIHJlc3QpO1xuXG4gICAgICAgIGFzc2VydFR5cGUoaXMuc3RyaW5nLCAnYXBpT3JpZ2luJywgJ1RoZSBmaXh0dXJlIG5hbWUnLCBuYW1lKTtcblxuICAgICAgICB0aGlzLm5hbWUgICAgICAgICAgICAgICAgICAgID0gbmFtZTtcbiAgICAgICAgdGhpcy50ZXN0RmlsZS5jdXJyZW50Rml4dHVyZSA9IHRoaXM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2JlZm9yZSQgKGZuOiBGdW5jdGlvbik6IEZ1bmN0aW9uIHtcbiAgICAgICAgYXNzZXJ0VHlwZShpcy5mdW5jdGlvbiwgJ2JlZm9yZScsICdUaGUgZml4dHVyZS5iZWZvcmUgaG9vaycsIGZuKTtcblxuICAgICAgICB0aGlzLmJlZm9yZUZuID0gZm47XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FmdGVyJCAoZm46IEZ1bmN0aW9uKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKGlzLmZ1bmN0aW9uLCAnYWZ0ZXInLCAnVGhlIGZpeHR1cmUuYWZ0ZXIgaG9vaycsIGZuKTtcblxuICAgICAgICB0aGlzLmFmdGVyRm4gPSBmbjtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYmVmb3JlRWFjaCQgKGZuOiBGdW5jdGlvbik6IEZ1bmN0aW9uIHtcbiAgICAgICAgYXNzZXJ0VHlwZShpcy5mdW5jdGlvbiwgJ2JlZm9yZUVhY2gnLCAnVGhlIGZpeHR1cmUuYmVmb3JlRWFjaCBob29rJywgZm4pO1xuXG4gICAgICAgIHRoaXMuYmVmb3JlRWFjaEZuID0gd3JhcFRlc3RGdW5jdGlvbihmbik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FmdGVyRWFjaCQgKGZuOiBGdW5jdGlvbik6IEZ1bmN0aW9uIHtcbiAgICAgICAgYXNzZXJ0VHlwZShpcy5mdW5jdGlvbiwgJ2FmdGVyRWFjaCcsICdUaGUgZml4dHVyZS5hZnRlckVhY2ggaG9vaycsIGZuKTtcblxuICAgICAgICB0aGlzLmFmdGVyRWFjaEZuID0gd3JhcFRlc3RGdW5jdGlvbihmbik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlcXVlc3RIb29rcyQgKC4uLmhvb2tzOiBSZXF1ZXN0SG9va1tdKTogRnVuY3Rpb24ge1xuICAgICAgICBpZiAodGhpcy5hcGlNZXRob2RXYXNDYWxsZWQucmVxdWVzdEhvb2tzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKE9QVElPTl9OQU1FUy5yZXF1ZXN0SG9va3MsIFJVTlRJTUVfRVJST1JTLm11bHRpcGxlQVBJTWV0aG9kQ2FsbEZvcmJpZGRlbiwgT1BUSU9OX05BTUVTLnJlcXVlc3RIb29rcyk7XG5cbiAgICAgICAgaG9va3MgPSBmbGF0dGVuKGhvb2tzKTtcblxuICAgICAgICBhc3NlcnRSZXF1ZXN0SG9va1R5cGUoaG9va3MpO1xuXG4gICAgICAgIHRoaXMucmVxdWVzdEhvb2tzICAgICAgICAgICAgICAgICAgICA9IGhvb2tzO1xuICAgICAgICB0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZC5yZXF1ZXN0SG9va3MgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jbGllbnRTY3JpcHRzJCAoLi4uc2NyaXB0czogQ2xpZW50U2NyaXB0SW5pdFtdKTogRnVuY3Rpb24ge1xuICAgICAgICBpZiAodGhpcy5hcGlNZXRob2RXYXNDYWxsZWQuY2xpZW50U2NyaXB0cylcbiAgICAgICAgICAgIHRocm93IG5ldyBBUElFcnJvcihPUFRJT05fTkFNRVMuY2xpZW50U2NyaXB0cywgUlVOVElNRV9FUlJPUlMubXVsdGlwbGVBUElNZXRob2RDYWxsRm9yYmlkZGVuLCBPUFRJT05fTkFNRVMuY2xpZW50U2NyaXB0cyk7XG5cbiAgICAgICAgc2NyaXB0cyA9IGZsYXR0ZW4oc2NyaXB0cyk7XG5cbiAgICAgICAgYXNzZXJ0Q2xpZW50U2NyaXB0VHlwZShzY3JpcHRzKTtcblxuICAgICAgICB0aGlzLmNsaWVudFNjcmlwdHMgICAgICAgICAgICAgICAgICAgID0gc2NyaXB0cztcbiAgICAgICAgdGhpcy5hcGlNZXRob2RXYXNDYWxsZWQuY2xpZW50U2NyaXB0cyA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cbn1cblxuVGVzdGluZ1VuaXQubWFrZUFQSUxpc3RGb3JDaGlsZENsYXNzKEZpeHR1cmUpO1xuIl19
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvc3RydWN0dXJlL2ZpeHR1cmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBZ0Q7QUFDaEQsa0VBQXlDO0FBQ3pDLDREQUFtQztBQUNuQywwRUFBc0U7QUFDdEUsa0ZBQXdEO0FBQ3hELCtFQUFxRDtBQUNyRCwrRUFBaUU7QUFDakUsMEZBQTZFO0FBQzdFLG9GQUE0RDtBQUM1RCxrREFBZ0Q7QUFDaEQsOENBQW9EO0FBSXBELDZEQUF5RDtBQU96RCxNQUFxQixPQUFRLFNBQVEsc0JBQVc7SUFTNUMsWUFBb0IsUUFBa0IsRUFBRSxPQUFnQixFQUFFLGVBQWUsR0FBRyxJQUFJO1FBQzVFLE1BQU0sT0FBTyxHQUFHLE9BQU8sSUFBSSx3Q0FBa0IsQ0FBQztRQUU5QyxLQUFLLENBQUMsUUFBUSxFQUFFLG1CQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVwRCxJQUFJLENBQUMsSUFBSSxHQUFhLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDeEMsSUFBSSxDQUFDLFlBQVksR0FBSyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBTSxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBUyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBVSxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBSSxJQUFJLENBQUM7UUFFM0IsSUFBSSxlQUFlO1lBQ2YsT0FBTyxJQUFJLENBQUMsU0FBK0IsQ0FBQztJQUNwRCxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQUksQ0FBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQXNCO1FBQ3pELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9B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QUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7Q0FDSjtBQXBHRCwwQkFvR0M7QUFFRCxzQkFBVyxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmxhdHRlbkRlZXAgYXMgZmxhdHRlbiB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgVGVzdGluZ1VuaXQgZnJvbSAnLi90ZXN0aW5nLXVuaXQnO1xuaW1wb3J0IFVuaXRUeXBlIGZyb20gJy4vdW5pdC10eXBlJztcbmltcG9ydCB7IGFzc2VydFR5cGUsIGlzIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3J1bnRpbWUvdHlwZS1hc3NlcnRpb25zJztcbmltcG9ydCBoYW5kbGVUYWdBcmdzIGZyb20gJy4uLy4uL3V0aWxzL2hhbmRsZS10YWctYXJncyc7XG5pbXBvcnQgd3JhcFRlc3RGdW5jdGlvbiBmcm9tICcuLi93cmFwLXRlc3QtZnVuY3Rpb24nO1xuaW1wb3J0IGFzc2VydFJlcXVlc3RIb29rVHlwZSBmcm9tICcuLi9yZXF1ZXN0LWhvb2tzL2Fzc2VydC10eXBlJztcbmltcG9ydCBhc3NlcnRDbGllbnRTY3JpcHRUeXBlIGZyb20gJy4uLy4uL2N1c3RvbS1jbGllbnQtc2NyaXB0cy9hc3NlcnQtdHlwZSc7XG5pbXBvcnQgT1BUSU9OX05BTUVTIGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb24vb3B0aW9uLW5hbWVzJztcbmltcG9ydCB7IEFQSUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3J1bnRpbWUnO1xuaW1wb3J0IHsgUlVOVElNRV9FUlJPUlMgfSBmcm9tICcuLi8uLi9lcnJvcnMvdHlwZXMnO1xuaW1wb3J0IFRlc3RGaWxlIGZyb20gJy4vdGVzdC1maWxlJztcbmltcG9ydCBSZXF1ZXN0SG9vayBmcm9tICcuLi9yZXF1ZXN0LWhvb2tzL2hvb2snO1xuaW1wb3J0IENsaWVudFNjcmlwdEluaXQgZnJvbSAnLi4vLi4vY3VzdG9tLWNsaWVudC1zY3JpcHRzL2NsaWVudC1zY3JpcHQtaW5pdCc7XG5pbXBvcnQgeyBTUEVDSUFMX0JMQU5LX1BBR0UgfSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcblxuaW50ZXJmYWNlIEZpeHR1cmVJbml0T3B0aW9ucyB7XG4gICAgYmFzZVVybD86IHN0cmluZztcbiAgICB0ZXN0RmlsZTogVGVzdEZpbGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpeHR1cmUgZXh0ZW5kcyBUZXN0aW5nVW5pdCB7XG4gICAgcHVibGljIHBhdGg6IHN0cmluZztcbiAgICBwdWJsaWMgYmVmb3JlRWFjaEZuOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgcHVibGljIGFmdGVyRWFjaEZuOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgcHVibGljIGJlZm9yZUZuOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgcHVibGljIGFmdGVyRm46IEZ1bmN0aW9uIHwgbnVsbDtcbiAgICBwdWJsaWMgZ2xvYmFsQmVmb3JlRm46IEZ1bmN0aW9uIHwgbnVsbDtcbiAgICBwdWJsaWMgZ2xvYmFsQWZ0ZXJGbjogRnVuY3Rpb24gfCBudWxsO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yICh0ZXN0RmlsZTogVGVzdEZpbGUsIGJhc2VVcmw/OiBzdHJpbmcsIHJldHVybkFwaU9yaWdpbiA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgcGFnZVVybCA9IGJhc2VVcmwgfHwgU1BFQ0lBTF9CTEFOS19QQUdFO1xuXG4gICAgICAgIHN1cGVyKHRlc3RGaWxlLCBVbml0VHlwZS5maXh0dXJlLCBwYWdlVXJsLCBiYXNlVXJsKTtcblxuICAgICAgICB0aGlzLnBhdGggICAgICAgICAgID0gdGVzdEZpbGUuZmlsZW5hbWU7XG4gICAgICAgIHRoaXMuYmVmb3JlRWFjaEZuICAgPSBudWxsO1xuICAgICAgICB0aGlzLmFmdGVyRWFjaEZuICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5iZWZvcmVGbiAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuYWZ0ZXJGbiAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLmdsb2JhbEJlZm9yZUZuID0gbnVsbDtcbiAgICAgICAgdGhpcy5nbG9iYWxBZnRlckZuICA9IG51bGw7XG5cbiAgICAgICAgaWYgKHJldHVybkFwaU9yaWdpbilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbiBhcyB1bmtub3duIGFzIEZpeHR1cmU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpbml0ICh7IHRlc3RGaWxlLCBiYXNlVXJsIH06IEZpeHR1cmVJbml0T3B0aW9ucyk6IEZpeHR1cmUge1xuICAgICAgICByZXR1cm4gc3VwZXIuaW5pdChGaXh0dXJlLCB0ZXN0RmlsZSwgYmFzZVVybCkgYXMgdW5rbm93biBhcyBGaXh0dXJlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfYWRkIChuYW1lOiBzdHJpbmcsIC4uLnJlc3Q6IHVua25vd25bXSk6IEZ1bmN0aW9uIHtcbiAgICAgICAgbmFtZSA9IGhhbmRsZVRhZ0FyZ3MobmFtZSwgcmVzdCk7XG5cbiAgICAgICAgYXNzZXJ0VHlwZShpcy5zdHJpbmcsICdhcGlPcmlnaW4nLCAnVGhlIGZpeHR1cmUgbmFtZScsIG5hbWUpO1xuXG4gICAgICAgIHRoaXMubmFtZSAgICAgICAgICAgICAgICAgICAgPSBuYW1lO1xuICAgICAgICB0aGlzLnRlc3RGaWxlLmN1cnJlbnRGaXh0dXJlID0gdGhpcztcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYmVmb3JlJCAoZm46IEZ1bmN0aW9uKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKGlzLmZ1bmN0aW9uLCAnYmVmb3JlJywgJ1RoZSBmaXh0dXJlLmJlZm9yZSBob29rJywgZm4pO1xuXG4gICAgICAgIHRoaXMuYmVmb3JlRm4gPSBmbjtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYWZ0ZXIkIChmbjogRnVuY3Rpb24pOiBGdW5jdGlvbiB7XG4gICAgICAgIGFzc2VydFR5cGUoaXMuZnVuY3Rpb24sICdhZnRlcicsICdUaGUgZml4dHVyZS5hZnRlciBob29rJywgZm4pO1xuXG4gICAgICAgIHRoaXMuYWZ0ZXJGbiA9IGZuO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9iZWZvcmVFYWNoJCAoZm46IEZ1bmN0aW9uKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKGlzLmZ1bmN0aW9uLCAnYmVmb3JlRWFjaCcsICdUaGUgZml4dHVyZS5iZWZvcmVFYWNoIGhvb2snLCBmbik7XG5cbiAgICAgICAgdGhpcy5iZWZvcmVFYWNoRm4gPSB3cmFwVGVzdEZ1bmN0aW9uKGZuKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYWZ0ZXJFYWNoJCAoZm46IEZ1bmN0aW9uKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKGlzLmZ1bmN0aW9uLCAnYWZ0ZXJFYWNoJywgJ1RoZSBmaXh0dXJlLmFmdGVyRWFjaCBob29rJywgZm4pO1xuXG4gICAgICAgIHRoaXMuYWZ0ZXJFYWNoRm4gPSB3cmFwVGVzdEZ1bmN0aW9uKGZuKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVxdWVzdEhvb2tzJCAoLi4uaG9va3M6IFJlcXVlc3RIb29rW10pOiBGdW5jdGlvbiB7XG4gICAgICAgIGlmICh0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZC5yZXF1ZXN0SG9va3MpXG4gICAgICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoT1BUSU9OX05BTUVTLnJlcXVlc3RIb29rcywgUlVOVElNRV9FUlJPUlMubXVsdGlwbGVBUElNZXRob2RDYWxsRm9yYmlkZGVuLCBPUFRJT05fTkFNRVMucmVxdWVzdEhvb2tzKTtcblxuICAgICAgICBob29rcyA9IGZsYXR0ZW4oaG9va3MpO1xuXG4gICAgICAgIGFzc2VydFJlcXVlc3RIb29rVHlwZShob29rcyk7XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0SG9va3MgICAgICAgICAgICAgICAgICAgID0gaG9va3M7XG4gICAgICAgIHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkLnJlcXVlc3RIb29rcyA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NsaWVudFNjcmlwdHMkICguLi5zY3JpcHRzOiBDbGllbnRTY3JpcHRJbml0W10pOiBGdW5jdGlvbiB7XG4gICAgICAgIGlmICh0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZC5jbGllbnRTY3JpcHRzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKE9QVElPTl9OQU1FUy5jbGllbnRTY3JpcHRzLCBSVU5USU1FX0VSUk9SUy5tdWx0aXBsZUFQSU1ldGhvZENhbGxGb3JiaWRkZW4sIE9QVElPTl9OQU1FUy5jbGllbnRTY3JpcHRzKTtcblxuICAgICAgICBzY3JpcHRzID0gZmxhdHRlbihzY3JpcHRzKTtcblxuICAgICAgICBhc3NlcnRDbGllbnRTY3JpcHRUeXBlKHNjcmlwdHMpO1xuXG4gICAgICAgIHRoaXMuY2xpZW50U2NyaXB0cyAgICAgICAgICAgICAgICAgICAgPSBzY3JpcHRzO1xuICAgICAgICB0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZC5jbGllbnRTY3JpcHRzID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxufVxuXG5UZXN0aW5nVW5pdC5tYWtlQVBJTGlzdEZvckNoaWxkQ2xhc3MoRml4dHVyZSk7XG4iXX0=
@@ -17,7 +17,7 @@ const testcafe_hammerhead_1 = require("testcafe-hammerhead");
17
17
  const test_timeout_1 = __importDefault(require("./test-timeout"));
18
18
  const esm_runtime_holder_name_1 = __importDefault(require("../../services/compiler/esm-runtime-holder-name"));
19
19
  class Test extends testing_unit_1.default {
20
- constructor(testFile, isCompilerServiceMode = false, baseUrl) {
20
+ constructor(testFile, isCompilerServiceMode = false, baseUrl, returnApiOrigin = true) {
21
21
  // NOTE: 'fixture' directive can be missing
22
22
  const fixture = testFile.currentFixture;
23
23
  const pageUrl = (fixture === null || fixture === void 0 ? void 0 : fixture.pageUrl) || testcafe_hammerhead_1.SPECIAL_BLANK_PAGE;
@@ -34,12 +34,17 @@ class Test extends testing_unit_1.default {
34
34
  // NOTE: This is internal data of 'esm' module
35
35
  // @ts-ignore
36
36
  this.esmRuntime = global[esm_runtime_holder_name_1.default] || null;
37
- return this.apiOrigin;
37
+ if (returnApiOrigin)
38
+ return this.apiOrigin;
39
+ }
40
+ static init({ testFile, baseUrl, isCompilerServiceMode }) {
41
+ return testing_unit_1.default.init(Test, testFile, isCompilerServiceMode, baseUrl);
38
42
  }
39
43
  _initFixture(testFile) {
40
44
  this.fixture = testFile.currentFixture;
41
45
  if (!this.fixture)
42
46
  return;
47
+ this.pageUrl = this.fixture.pageUrl || testcafe_hammerhead_1.SPECIAL_BLANK_PAGE;
43
48
  this.requestHooks = this.fixture.requestHooks.slice();
44
49
  this.clientScripts = this.fixture.clientScripts.slice();
45
50
  this.skipJsErrorsOptions = this.fixture.skipJsErrorsOptions;
@@ -98,4 +103,4 @@ class Test extends testing_unit_1.default {
98
103
  exports.default = Test;
99
104
  testing_unit_1.default.makeAPIListForChildClass(Test);
100
105
  module.exports = exports.default;
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvc3RydWN0dXJlL3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBdUQ7QUFDdkQsa0VBQXlDO0FBQ3pDLDREQUFtQztBQUNuQywwRUFBc0U7QUFDdEUsK0VBQXFEO0FBQ3JELCtFQUFpRTtBQUNqRSwwRkFBNkU7QUFDN0UsOENBQW9EO0FBQ3BELGtEQUFnRDtBQUNoRCxvRkFBNEQ7QUFLNUQsNkRBQXlEO0FBRXpELGtFQUF5QztBQUN6Qyw4R0FBc0Y7QUFHdEYsTUFBcUIsSUFBSyxTQUFRLHNCQUFXO0lBV3pDLFlBQW9CLFFBQWtCLEVBQUUscUJBQXFCLEdBQUcsS0FBSyxFQUFFLE9BQWdCO1FBQ25GLDJDQUEyQztRQUMzQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsY0FBeUIsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxPQUFPLEtBQUksd0NBQWtCLENBQUM7UUFFdkQsS0FBSyxDQUFDLFFBQVEsRUFBRSxtQkFBUSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFakQsSUFBSSxDQUFDLE9BQU8sR0FBVSxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLEVBQUUsR0FBZSxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBUyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBVSxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBSSxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBUyxJQUFJLENBQUM7UUFFM0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDO1FBRWhELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUIsOENBQThDO1FBQzlDLGFBQWE7UUFDYixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxpQ0FBdUIsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUUxRCxPQUFPLElBQUksQ0FBQyxTQUE0QixDQUFDO0lBQzdDLENBQUM7SUFFTyxZQUFZLENBQUUsUUFBa0I7UUFDcEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO1FBRXZDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUNiLE9BQU87UUFFWCxJQUFJLENBQUMsWUFBWSxHQUFVLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdELElBQUksQ0FBQyxhQUFhLEdBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7SUFDaEUsQ0FBQztJQUVTLElBQUksQ0FBRSxJQUFZLEVBQUUsRUFBWTtRQUN0QyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXJDLElBQUEsNEJBQVUsRUFBQyxvQkFBRSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFELElBQUEsNEJBQVUsRUFBQyxvQkFBRSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFELElBQUEsNEJBQVUsRUFBQyxvQkFBRSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLElBQUksUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV6RixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFLLElBQUEsNEJBQWdCLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRU8sUUFBUSxDQUFFLEVBQVk7UUFDMUIsSUFBQSw0QkFBVSxFQUFDLG9CQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUEsNEJBQWdCLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFFckMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFTyxPQUFPLENBQUUsRUFBWTtRQUN6QixJQUFBLDRCQUFVLEVBQUMsb0JBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTVELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBQSw0QkFBZ0IsRUFBQyxFQUFFLENBQUMsQ0FBQztRQUVwQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVPLGNBQWMsQ0FBRSxHQUFHLEtBQW9CO1FBQzNDLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVk7WUFDcEMsTUFBTSxJQUFJLGtCQUFRLENBQUMsc0JBQVksQ0FBQyxZQUFZLEVBQUUsc0JBQWMsQ0FBQyw4QkFBOEIsRUFBRSxzQkFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTVILEtBQUssR0FBRyxJQUFBLG9CQUFPLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkIsSUFBQSxxQkFBcUIsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUU3QixJQUFJLENBQUMsWUFBWSxHQUFzQixJQUFBLGNBQUssRUFBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBRTVDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRU8sZUFBZSxDQUFFLEdBQUcsT0FBMkI7UUFDbkQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYTtZQUNyQyxNQUFNLElBQUksa0JBQVEsQ0FBQyxzQkFBWSxDQUFDLGFBQWEsRUFBRSxzQkFBYyxDQUFDLDhCQUE4QixFQUFFLHNCQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFOUgsT0FBTyxHQUFHLElBQUEsb0JBQU8sRUFBQyxPQUFPLENBQUMsQ0FBQztRQUUzQixJQUFBLHFCQUFzQixFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWhDLElBQUksQ0FBQyxhQUFhLEdBQXNCLElBQUEsY0FBSyxFQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFFN0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFTyxVQUFVLENBQUUsUUFBc0I7UUFDdEMsSUFBQSw0QkFBVSxFQUFDLG9CQUFFLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFbkUsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBVyxDQUFDO2FBQ25CLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUM7YUFDdEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2YsSUFBQSw0QkFBVSxFQUFDLG9CQUFFLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixPQUFPLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBNkIsQ0FBQyxDQUFDLENBQUM7UUFDdEgsQ0FBQyxDQUFDLENBQUM7UUFFUCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUV6QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztDQUNKO0FBMUhELHVCQTBIQztBQUVELHNCQUFXLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmbGF0dGVuRGVlcCBhcyBmbGF0dGVuLCB1bmlvbiB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgVGVzdGluZ1VuaXQgZnJvbSAnLi90ZXN0aW5nLXVuaXQnO1xuaW1wb3J0IFVuaXRUeXBlIGZyb20gJy4vdW5pdC10eXBlJztcbmltcG9ydCB7IGFzc2VydFR5cGUsIGlzIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3J1bnRpbWUvdHlwZS1hc3NlcnRpb25zJztcbmltcG9ydCB3cmFwVGVzdEZ1bmN0aW9uIGZyb20gJy4uL3dyYXAtdGVzdC1mdW5jdGlvbic7XG5pbXBvcnQgYXNzZXJ0UmVxdWVzdEhvb2tUeXBlIGZyb20gJy4uL3JlcXVlc3QtaG9va3MvYXNzZXJ0LXR5cGUnO1xuaW1wb3J0IGFzc2VydENsaWVudFNjcmlwdFR5cGUgZnJvbSAnLi4vLi4vY3VzdG9tLWNsaWVudC1zY3JpcHRzL2Fzc2VydC10eXBlJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3R5cGVzJztcbmltcG9ydCB7IEFQSUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3J1bnRpbWUnO1xuaW1wb3J0IE9QVElPTl9OQU1FUyBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL29wdGlvbi1uYW1lcyc7XG5pbXBvcnQgVGVzdEZpbGUgZnJvbSAnLi90ZXN0LWZpbGUnO1xuaW1wb3J0IEZpeHR1cmUgZnJvbSAnLi9maXh0dXJlJztcbmltcG9ydCBSZXF1ZXN0SG9vayBmcm9tICcuLi9yZXF1ZXN0LWhvb2tzL2hvb2snO1xuaW1wb3J0IENsaWVudFNjcmlwdEluaXQgZnJvbSAnLi4vLi4vY3VzdG9tLWNsaWVudC1zY3JpcHRzL2NsaWVudC1zY3JpcHQtaW5pdCc7XG5pbXBvcnQgeyBTUEVDSUFMX0JMQU5LX1BBR0UgfSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcbmltcG9ydCB7IFRlc3RUaW1lb3V0cyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgVGVzdFRpbWVvdXQgZnJvbSAnLi90ZXN0LXRpbWVvdXQnO1xuaW1wb3J0IEVTTV9SVU5USU1FX0hPTERFUl9OQU1FIGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbXBpbGVyL2VzbS1ydW50aW1lLWhvbGRlci1uYW1lJztcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXN0IGV4dGVuZHMgVGVzdGluZ1VuaXQge1xuICAgIHB1YmxpYyBmaXh0dXJlOiBGaXh0dXJlIHwgbnVsbDtcbiAgICBwdWJsaWMgZm46IEZ1bmN0aW9uIHwgbnVsbDtcbiAgICBwdWJsaWMgYmVmb3JlRm46IEZ1bmN0aW9uIHwgbnVsbDtcbiAgICBwdWJsaWMgYWZ0ZXJGbjogRnVuY3Rpb24gfCBudWxsO1xuICAgIHB1YmxpYyBnbG9iYWxCZWZvcmVGbjogRnVuY3Rpb24gfCBudWxsO1xuICAgIHB1YmxpYyBnbG9iYWxBZnRlckZuOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgcHVibGljIHRpbWVvdXRzOiBUZXN0VGltZW91dHMgfCBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzQ29tcGlsZXJTZXJ2aWNlOiBib29sZWFuO1xuICAgIHB1YmxpYyByZWFkb25seSBlc21SdW50aW1lOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHRlc3RGaWxlOiBUZXN0RmlsZSwgaXNDb21waWxlclNlcnZpY2VNb2RlID0gZmFsc2UsIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgLy8gTk9URTogJ2ZpeHR1cmUnIGRpcmVjdGl2ZSBjYW4gYmUgbWlzc2luZ1xuICAgICAgICBjb25zdCBmaXh0dXJlID0gdGVzdEZpbGUuY3VycmVudEZpeHR1cmUgYXMgRml4dHVyZTtcbiAgICAgICAgY29uc3QgcGFnZVVybCA9IGZpeHR1cmU/LnBhZ2VVcmwgfHwgU1BFQ0lBTF9CTEFOS19QQUdFO1xuXG4gICAgICAgIHN1cGVyKHRlc3RGaWxlLCBVbml0VHlwZS50ZXN0LCBwYWdlVXJsLCBiYXNlVXJsKTtcblxuICAgICAgICB0aGlzLmZpeHR1cmUgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5mbiAgICAgICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuYmVmb3JlRm4gICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLmFmdGVyRm4gICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5nbG9iYWxCZWZvcmVGbiA9IG51bGw7XG4gICAgICAgIHRoaXMuZ2xvYmFsQWZ0ZXJGbiAgPSBudWxsO1xuICAgICAgICB0aGlzLnRpbWVvdXRzICAgICAgID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9pc0NvbXBpbGVyU2VydmljZSA9IGlzQ29tcGlsZXJTZXJ2aWNlTW9kZTtcblxuICAgICAgICB0aGlzLl9pbml0Rml4dHVyZSh0ZXN0RmlsZSk7XG5cbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBpbnRlcm5hbCBkYXRhIG9mICdlc20nIG1vZHVsZVxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRoaXMuZXNtUnVudGltZSA9IGdsb2JhbFtFU01fUlVOVElNRV9IT0xERVJfTkFNRV0gfHwgbnVsbDtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW4gYXMgdW5rbm93biBhcyBUZXN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRGaXh0dXJlICh0ZXN0RmlsZTogVGVzdEZpbGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maXh0dXJlID0gdGVzdEZpbGUuY3VycmVudEZpeHR1cmU7XG5cbiAgICAgICAgaWYgKCF0aGlzLmZpeHR1cmUpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0SG9va3MgICAgICAgID0gdGhpcy5maXh0dXJlLnJlcXVlc3RIb29rcy5zbGljZSgpO1xuICAgICAgICB0aGlzLmNsaWVudFNjcmlwdHMgICAgICAgPSB0aGlzLmZpeHR1cmUuY2xpZW50U2NyaXB0cy5zbGljZSgpO1xuICAgICAgICB0aGlzLnNraXBKc0Vycm9yc09wdGlvbnMgPSB0aGlzLmZpeHR1cmUuc2tpcEpzRXJyb3JzT3B0aW9ucztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2FkZCAobmFtZTogc3RyaW5nLCBmbjogRnVuY3Rpb24pOiBGdW5jdGlvbiB7XG4gICAgICAgIGlmICh0aGlzLl9pc0NvbXBpbGVyU2VydmljZSAmJiAhdGhpcy5maXh0dXJlKVxuICAgICAgICAgICAgdGhpcy5faW5pdEZpeHR1cmUodGhpcy50ZXN0RmlsZSk7XG5cbiAgICAgICAgYXNzZXJ0VHlwZShpcy5zdHJpbmcsICdhcGlPcmlnaW4nLCAnVGhlIHRlc3QgbmFtZScsIG5hbWUpO1xuICAgICAgICBhc3NlcnRUeXBlKGlzLmZ1bmN0aW9uLCAnYXBpT3JpZ2luJywgJ1RoZSB0ZXN0IGJvZHknLCBmbik7XG4gICAgICAgIGFzc2VydFR5cGUoaXMubm9uTnVsbE9iamVjdCwgJ2FwaU9yaWdpbicsIGBUaGUgZml4dHVyZSBvZiAnJHtuYW1lfScgdGVzdGAsIHRoaXMuZml4dHVyZSk7XG5cbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5mbiAgID0gd3JhcFRlc3RGdW5jdGlvbihmbik7XG5cbiAgICAgICAgaWYgKCF0aGlzLnRlc3RGaWxlLmNvbGxlY3RlZFRlc3RzLmluY2x1ZGVzKHRoaXMpKVxuICAgICAgICAgICAgdGhpcy50ZXN0RmlsZS5jb2xsZWN0ZWRUZXN0cy5wdXNoKHRoaXMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9iZWZvcmUkIChmbjogRnVuY3Rpb24pOiBGdW5jdGlvbiB7XG4gICAgICAgIGFzc2VydFR5cGUoaXMuZnVuY3Rpb24sICdiZWZvcmUnLCAnVGhlIHRlc3QuYmVmb3JlIGhvb2snLCBmbik7XG5cbiAgICAgICAgdGhpcy5iZWZvcmVGbiA9IHdyYXBUZXN0RnVuY3Rpb24oZm4pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hZnRlciQgKGZuOiBGdW5jdGlvbik6IEZ1bmN0aW9uIHtcbiAgICAgICAgYXNzZXJ0VHlwZShpcy5mdW5jdGlvbiwgJ2FmdGVyJywgJ1RoZSB0ZXN0LmFmdGVyIGhvb2snLCBmbik7XG5cbiAgICAgICAgdGhpcy5hZnRlckZuID0gd3JhcFRlc3RGdW5jdGlvbihmbik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlcXVlc3RIb29rcyQgKC4uLmhvb2tzOiBSZXF1ZXN0SG9va1tdKTogRnVuY3Rpb24ge1xuICAgICAgICBpZiAodGhpcy5hcGlNZXRob2RXYXNDYWxsZWQucmVxdWVzdEhvb2tzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKE9QVElPTl9OQU1FUy5yZXF1ZXN0SG9va3MsIFJVTlRJTUVfRVJST1JTLm11bHRpcGxlQVBJTWV0aG9kQ2FsbEZvcmJpZGRlbiwgT1BUSU9OX05BTUVTLnJlcXVlc3RIb29rcyk7XG5cbiAgICAgICAgaG9va3MgPSBmbGF0dGVuKGhvb2tzKTtcblxuICAgICAgICBhc3NlcnRSZXF1ZXN0SG9va1R5cGUoaG9va3MpO1xuXG4gICAgICAgIHRoaXMucmVxdWVzdEhvb2tzICAgICAgICAgICAgICAgICAgICA9IHVuaW9uKHRoaXMucmVxdWVzdEhvb2tzLCBob29rcyk7XG4gICAgICAgIHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkLnJlcXVlc3RIb29rcyA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NsaWVudFNjcmlwdHMkICguLi5zY3JpcHRzOiBDbGllbnRTY3JpcHRJbml0W10pOiBGdW5jdGlvbiB7XG4gICAgICAgIGlmICh0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZC5jbGllbnRTY3JpcHRzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKE9QVElPTl9OQU1FUy5jbGllbnRTY3JpcHRzLCBSVU5USU1FX0VSUk9SUy5tdWx0aXBsZUFQSU1ldGhvZENhbGxGb3JiaWRkZW4sIE9QVElPTl9OQU1FUy5jbGllbnRTY3JpcHRzKTtcblxuICAgICAgICBzY3JpcHRzID0gZmxhdHRlbihzY3JpcHRzKTtcblxuICAgICAgICBhc3NlcnRDbGllbnRTY3JpcHRUeXBlKHNjcmlwdHMpO1xuXG4gICAgICAgIHRoaXMuY2xpZW50U2NyaXB0cyAgICAgICAgICAgICAgICAgICAgPSB1bmlvbih0aGlzLmNsaWVudFNjcmlwdHMsIHNjcmlwdHMpO1xuICAgICAgICB0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZC5jbGllbnRTY3JpcHRzID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdGltZW91dHMkICh0aW1lb3V0czogVGVzdFRpbWVvdXRzKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKGlzLnRlc3RUaW1lb3V0cywgJ3RpbWVvdXRzJywgJ3Rlc3QudGltZW91dHMnLCB0aW1lb3V0cyk7XG5cbiAgICAgICAgT2JqZWN0LmtleXMoVGVzdFRpbWVvdXQpXG4gICAgICAgICAgICAuZmlsdGVyKHRpbWVvdXQgPT4gdGltZW91dCBpbiB0aW1lb3V0cylcbiAgICAgICAgICAgIC5mb3JFYWNoKHRpbWVvdXQgPT4ge1xuICAgICAgICAgICAgICAgIGFzc2VydFR5cGUoaXMubm9uTmVnYXRpdmVOdW1iZXIsICd0aW1lb3V0cycsIGB0ZXN0LnRpbWVvdXRzLiR7dGltZW91dH1gLCB0aW1lb3V0c1t0aW1lb3V0IGFzIGtleW9mIFRlc3RUaW1lb3V0c10pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy50aW1lb3V0cyA9IHRpbWVvdXRzO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG59XG5cblRlc3RpbmdVbml0Lm1ha2VBUElMaXN0Rm9yQ2hpbGRDbGFzcyhUZXN0KTtcbiJdfQ==
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvc3RydWN0dXJlL3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBdUQ7QUFDdkQsa0VBQXlDO0FBQ3pDLDREQUFtQztBQUNuQywwRUFBc0U7QUFDdEUsK0VBQXFEO0FBQ3JELCtFQUFpRTtBQUNqRSwwRkFBNkU7QUFDN0UsOENBQW9EO0FBQ3BELGtEQUFnRDtBQUNoRCxvRkFBNEQ7QUFLNUQsNkRBQXlEO0FBRXpELGtFQUF5QztBQUN6Qyw4R0FBc0Y7QUFRdEYsTUFBcUIsSUFBSyxTQUFRLHNCQUFXO0lBV3pDLFlBQW9CLFFBQWtCLEVBQUUscUJBQXFCLEdBQUcsS0FBSyxFQUFFLE9BQWdCLEVBQUUsZUFBZSxHQUFHLElBQUk7UUFDM0csMkNBQTJDO1FBQzNDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUF5QixDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE9BQU8sS0FBSSx3Q0FBa0IsQ0FBQztRQUV2RCxLQUFLLENBQUMsUUFBUSxFQUFFLG1CQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVqRCxJQUFJLENBQUMsT0FBTyxHQUFVLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsRUFBRSxHQUFlLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFTLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFVLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFJLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFTLElBQUksQ0FBQztRQUUzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcscUJBQXFCLENBQUM7UUFFaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1Qiw4Q0FBOEM7UUFDOUMsYUFBYTtRQUNiLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLGlDQUF1QixDQUFDLElBQUksSUFBSSxDQUFDO1FBRTFELElBQUksZUFBZTtZQUNmLE9BQU8sSUFBSSxDQUFDLFNBQTRCLENBQUM7SUFDakQsQ0FBQztJQUVNLE1BQU0sQ0FBQyxJQUFJLENBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFtQjtRQUM3RSxPQUFPLHNCQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxDQUFvQixDQUFDO0lBQy9GLENBQUM7SUFFTyxZQUFZLENBQUUsUUFBa0I7UUFDcEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO1FBRXZDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUNiLE9BQU87UUFFWCxJQUFJLENBQUMsT0FBTyxHQUFlLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLHdDQUFrQixDQUFDO1FBQ3RFLElBQUksQ0FBQyxZQUFZLEdBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsR0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztJQUNoRSxDQUFDO0lBRVMsSUFBSSxDQUFFLElBQVksRUFBRSxFQUFZO1FBQ3RDLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFckMsSUFBQSw0QkFBVSxFQUFDLG9CQUFFLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUQsSUFBQSw0QkFBVSxFQUFDLG9CQUFFLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUQsSUFBQSw0QkFBVSxFQUFDLG9CQUFFLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsSUFBSSxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXpGLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxFQUFFLEdBQUssSUFBQSw0QkFBZ0IsRUFBQyxFQUFFLENBQUMsQ0FBQztRQUVqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFTyxRQUFRLENBQUUsRUFBWTtRQUMxQixJQUFBLDRCQUFVLEVBQUMsb0JBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTlELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBQSw0QkFBZ0IsRUFBQyxFQUFFLENBQUMsQ0FBQztRQUVyQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVPLE9BQU8sQ0FBRSxFQUFZO1FBQ3pCLElBQUEsNEJBQVUsRUFBQyxvQkFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFNUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFBLDRCQUFnQixFQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXBDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRU8sY0FBYyxDQUFFLEdBQUcsS0FBb0I7UUFDM0MsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWTtZQUNwQyxNQUFNLElBQUksa0JBQVEsQ0FBQyxzQkFBWSxDQUFDLFlBQVksRUFBRSxzQkFBYyxDQUFDLDhCQUE4QixFQUFFLHNCQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFNUgsS0FBSyxHQUFHLElBQUEsb0JBQU8sRUFBQyxLQUFLLENBQUMsQ0FBQztRQUV2QixJQUFBLHFCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdCLElBQUksQ0FBQyxZQUFZLEdBQXNCLElBQUEsY0FBSyxFQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFFNUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFTyxlQUFlLENBQUUsR0FBRyxPQUEyQjtRQUNuRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhO1lBQ3JDLE1BQU0sSUFBSSxrQkFBUSxDQUFDLHNCQUFZLENBQUMsYUFBYSxFQUFFLHNCQUFjLENBQUMsOEJBQThCLEVBQUUsc0JBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUU5SCxPQUFPLEdBQUcsSUFBQSxvQkFBTyxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTNCLElBQUEscUJBQXNCLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFFaEMsSUFBSSxDQUFDLGFBQWEsR0FBc0IsSUFBQSxjQUFLLEVBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUU3QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVPLFVBQVUsQ0FBRSxRQUFzQjtRQUN0QyxJQUFBLDRCQUFVLEVBQUMsb0JBQUUsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVuRSxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFXLENBQUM7YUFDbkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQzthQUN0QyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDZixJQUFBLDRCQUFVLEVBQUMsb0JBQUUsQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLE9BQU8sRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUE2QixDQUFDLENBQUMsQ0FBQztRQUN0SCxDQUFDLENBQUMsQ0FBQztRQUVQLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXpCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0NBQ0o7QUFoSUQsdUJBZ0lDO0FBRUQsc0JBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZsYXR0ZW5EZWVwIGFzIGZsYXR0ZW4sIHVuaW9uIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBUZXN0aW5nVW5pdCBmcm9tICcuL3Rlc3RpbmctdW5pdCc7XG5pbXBvcnQgVW5pdFR5cGUgZnJvbSAnLi91bml0LXR5cGUnO1xuaW1wb3J0IHsgYXNzZXJ0VHlwZSwgaXMgfSBmcm9tICcuLi8uLi9lcnJvcnMvcnVudGltZS90eXBlLWFzc2VydGlvbnMnO1xuaW1wb3J0IHdyYXBUZXN0RnVuY3Rpb24gZnJvbSAnLi4vd3JhcC10ZXN0LWZ1bmN0aW9uJztcbmltcG9ydCBhc3NlcnRSZXF1ZXN0SG9va1R5cGUgZnJvbSAnLi4vcmVxdWVzdC1ob29rcy9hc3NlcnQtdHlwZSc7XG5pbXBvcnQgYXNzZXJ0Q2xpZW50U2NyaXB0VHlwZSBmcm9tICcuLi8uLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvYXNzZXJ0LXR5cGUnO1xuaW1wb3J0IHsgUlVOVElNRV9FUlJPUlMgfSBmcm9tICcuLi8uLi9lcnJvcnMvdHlwZXMnO1xuaW1wb3J0IHsgQVBJRXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvcnMvcnVudGltZSc7XG5pbXBvcnQgT1BUSU9OX05BTUVTIGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb24vb3B0aW9uLW5hbWVzJztcbmltcG9ydCBUZXN0RmlsZSBmcm9tICcuL3Rlc3QtZmlsZSc7XG5pbXBvcnQgRml4dHVyZSBmcm9tICcuL2ZpeHR1cmUnO1xuaW1wb3J0IFJlcXVlc3RIb29rIGZyb20gJy4uL3JlcXVlc3QtaG9va3MvaG9vayc7XG5pbXBvcnQgQ2xpZW50U2NyaXB0SW5pdCBmcm9tICcuLi8uLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvY2xpZW50LXNjcmlwdC1pbml0JztcbmltcG9ydCB7IFNQRUNJQUxfQkxBTktfUEFHRSB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IHsgVGVzdFRpbWVvdXRzIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCBUZXN0VGltZW91dCBmcm9tICcuL3Rlc3QtdGltZW91dCc7XG5pbXBvcnQgRVNNX1JVTlRJTUVfSE9MREVSX05BTUUgZnJvbSAnLi4vLi4vc2VydmljZXMvY29tcGlsZXIvZXNtLXJ1bnRpbWUtaG9sZGVyLW5hbWUnO1xuXG5pbnRlcmZhY2UgVGVzdEluaXRPcHRpb25zIHtcbiAgICB0ZXN0RmlsZTogVGVzdEZpbGU7XG4gICAgYmFzZVVybD86IHN0cmluZztcbiAgICBpc0NvbXBpbGVyU2VydmljZU1vZGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXN0IGV4dGVuZHMgVGVzdGluZ1VuaXQge1xuICAgIHB1YmxpYyBmaXh0dXJlOiBGaXh0dXJlIHwgbnVsbDtcbiAgICBwdWJsaWMgZm46IEZ1bmN0aW9uIHwgbnVsbDtcbiAgICBwdWJsaWMgYmVmb3JlRm46IEZ1bmN0aW9uIHwgbnVsbDtcbiAgICBwdWJsaWMgYWZ0ZXJGbjogRnVuY3Rpb24gfCBudWxsO1xuICAgIHB1YmxpYyBnbG9iYWxCZWZvcmVGbjogRnVuY3Rpb24gfCBudWxsO1xuICAgIHB1YmxpYyBnbG9iYWxBZnRlckZuOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgcHVibGljIHRpbWVvdXRzOiBUZXN0VGltZW91dHMgfCBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzQ29tcGlsZXJTZXJ2aWNlOiBib29sZWFuO1xuICAgIHB1YmxpYyByZWFkb25seSBlc21SdW50aW1lOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHRlc3RGaWxlOiBUZXN0RmlsZSwgaXNDb21waWxlclNlcnZpY2VNb2RlID0gZmFsc2UsIGJhc2VVcmw/OiBzdHJpbmcsIHJldHVybkFwaU9yaWdpbiA9IHRydWUpIHtcbiAgICAgICAgLy8gTk9URTogJ2ZpeHR1cmUnIGRpcmVjdGl2ZSBjYW4gYmUgbWlzc2luZ1xuICAgICAgICBjb25zdCBmaXh0dXJlID0gdGVzdEZpbGUuY3VycmVudEZpeHR1cmUgYXMgRml4dHVyZTtcbiAgICAgICAgY29uc3QgcGFnZVVybCA9IGZpeHR1cmU/LnBhZ2VVcmwgfHwgU1BFQ0lBTF9CTEFOS19QQUdFO1xuXG4gICAgICAgIHN1cGVyKHRlc3RGaWxlLCBVbml0VHlwZS50ZXN0LCBwYWdlVXJsLCBiYXNlVXJsKTtcblxuICAgICAgICB0aGlzLmZpeHR1cmUgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5mbiAgICAgICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuYmVmb3JlRm4gICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLmFmdGVyRm4gICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5nbG9iYWxCZWZvcmVGbiA9IG51bGw7XG4gICAgICAgIHRoaXMuZ2xvYmFsQWZ0ZXJGbiAgPSBudWxsO1xuICAgICAgICB0aGlzLnRpbWVvdXRzICAgICAgID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9pc0NvbXBpbGVyU2VydmljZSA9IGlzQ29tcGlsZXJTZXJ2aWNlTW9kZTtcblxuICAgICAgICB0aGlzLl9pbml0Rml4dHVyZSh0ZXN0RmlsZSk7XG5cbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBpbnRlcm5hbCBkYXRhIG9mICdlc20nIG1vZHVsZVxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRoaXMuZXNtUnVudGltZSA9IGdsb2JhbFtFU01fUlVOVElNRV9IT0xERVJfTkFNRV0gfHwgbnVsbDtcblxuICAgICAgICBpZiAocmV0dXJuQXBpT3JpZ2luKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luIGFzIHVua25vd24gYXMgVGVzdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGluaXQgKHsgdGVzdEZpbGUsIGJhc2VVcmwsIGlzQ29tcGlsZXJTZXJ2aWNlTW9kZSB9OiBUZXN0SW5pdE9wdGlvbnMpOiBUZXN0IHtcbiAgICAgICAgcmV0dXJuIFRlc3RpbmdVbml0LmluaXQoVGVzdCwgdGVzdEZpbGUsIGlzQ29tcGlsZXJTZXJ2aWNlTW9kZSwgYmFzZVVybCkgYXMgdW5rbm93biBhcyBUZXN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRGaXh0dXJlICh0ZXN0RmlsZTogVGVzdEZpbGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maXh0dXJlID0gdGVzdEZpbGUuY3VycmVudEZpeHR1cmU7XG5cbiAgICAgICAgaWYgKCF0aGlzLmZpeHR1cmUpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5wYWdlVXJsICAgICAgICAgICAgID0gdGhpcy5maXh0dXJlLnBhZ2VVcmwgfHwgU1BFQ0lBTF9CTEFOS19QQUdFO1xuICAgICAgICB0aGlzLnJlcXVlc3RIb29rcyAgICAgICAgPSB0aGlzLmZpeHR1cmUucmVxdWVzdEhvb2tzLnNsaWNlKCk7XG4gICAgICAgIHRoaXMuY2xpZW50U2NyaXB0cyAgICAgICA9IHRoaXMuZml4dHVyZS5jbGllbnRTY3JpcHRzLnNsaWNlKCk7XG4gICAgICAgIHRoaXMuc2tpcEpzRXJyb3JzT3B0aW9ucyA9IHRoaXMuZml4dHVyZS5za2lwSnNFcnJvcnNPcHRpb25zO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfYWRkIChuYW1lOiBzdHJpbmcsIGZuOiBGdW5jdGlvbik6IEZ1bmN0aW9uIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29tcGlsZXJTZXJ2aWNlICYmICF0aGlzLmZpeHR1cmUpXG4gICAgICAgICAgICB0aGlzLl9pbml0Rml4dHVyZSh0aGlzLnRlc3RGaWxlKTtcblxuICAgICAgICBhc3NlcnRUeXBlKGlzLnN0cmluZywgJ2FwaU9yaWdpbicsICdUaGUgdGVzdCBuYW1lJywgbmFtZSk7XG4gICAgICAgIGFzc2VydFR5cGUoaXMuZnVuY3Rpb24sICdhcGlPcmlnaW4nLCAnVGhlIHRlc3QgYm9keScsIGZuKTtcbiAgICAgICAgYXNzZXJ0VHlwZShpcy5ub25OdWxsT2JqZWN0LCAnYXBpT3JpZ2luJywgYFRoZSBmaXh0dXJlIG9mICcke25hbWV9JyB0ZXN0YCwgdGhpcy5maXh0dXJlKTtcblxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmZuICAgPSB3cmFwVGVzdEZ1bmN0aW9uKGZuKTtcblxuICAgICAgICBpZiAoIXRoaXMudGVzdEZpbGUuY29sbGVjdGVkVGVzdHMuaW5jbHVkZXModGhpcykpXG4gICAgICAgICAgICB0aGlzLnRlc3RGaWxlLmNvbGxlY3RlZFRlc3RzLnB1c2godGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2JlZm9yZSQgKGZuOiBGdW5jdGlvbik6IEZ1bmN0aW9uIHtcbiAgICAgICAgYXNzZXJ0VHlwZShpcy5mdW5jdGlvbiwgJ2JlZm9yZScsICdUaGUgdGVzdC5iZWZvcmUgaG9vaycsIGZuKTtcblxuICAgICAgICB0aGlzLmJlZm9yZUZuID0gd3JhcFRlc3RGdW5jdGlvbihmbik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FmdGVyJCAoZm46IEZ1bmN0aW9uKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKGlzLmZ1bmN0aW9uLCAnYWZ0ZXInLCAnVGhlIHRlc3QuYWZ0ZXIgaG9vaycsIGZuKTtcblxuICAgICAgICB0aGlzLmFmdGVyRm4gPSB3cmFwVGVzdEZ1bmN0aW9uKGZuKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVxdWVzdEhvb2tzJCAoLi4uaG9va3M6IFJlcXVlc3RIb29rW10pOiBGdW5jdGlvbiB7XG4gICAgICAgIGlmICh0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZC5yZXF1ZXN0SG9va3MpXG4gICAgICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoT1BUSU9OX05BTUVTLnJlcXVlc3RIb29rcywgUlVOVElNRV9FUlJPUlMubXVsdGlwbGVBUElNZXRob2RDYWxsRm9yYmlkZGVuLCBPUFRJT05fTkFNRVMucmVxdWVzdEhvb2tzKTtcblxuICAgICAgICBob29rcyA9IGZsYXR0ZW4oaG9va3MpO1xuXG4gICAgICAgIGFzc2VydFJlcXVlc3RIb29rVHlwZShob29rcyk7XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0SG9va3MgICAgICAgICAgICAgICAgICAgID0gdW5pb24odGhpcy5yZXF1ZXN0SG9va3MsIGhvb2tzKTtcbiAgICAgICAgdGhpcy5hcGlNZXRob2RXYXNDYWxsZWQucmVxdWVzdEhvb2tzID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2xpZW50U2NyaXB0cyQgKC4uLnNjcmlwdHM6IENsaWVudFNjcmlwdEluaXRbXSk6IEZ1bmN0aW9uIHtcbiAgICAgICAgaWYgKHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkLmNsaWVudFNjcmlwdHMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoT1BUSU9OX05BTUVTLmNsaWVudFNjcmlwdHMsIFJVTlRJTUVfRVJST1JTLm11bHRpcGxlQVBJTWV0aG9kQ2FsbEZvcmJpZGRlbiwgT1BUSU9OX05BTUVTLmNsaWVudFNjcmlwdHMpO1xuXG4gICAgICAgIHNjcmlwdHMgPSBmbGF0dGVuKHNjcmlwdHMpO1xuXG4gICAgICAgIGFzc2VydENsaWVudFNjcmlwdFR5cGUoc2NyaXB0cyk7XG5cbiAgICAgICAgdGhpcy5jbGllbnRTY3JpcHRzICAgICAgICAgICAgICAgICAgICA9IHVuaW9uKHRoaXMuY2xpZW50U2NyaXB0cywgc2NyaXB0cyk7XG4gICAgICAgIHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkLmNsaWVudFNjcmlwdHMgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90aW1lb3V0cyQgKHRpbWVvdXRzOiBUZXN0VGltZW91dHMpOiBGdW5jdGlvbiB7XG4gICAgICAgIGFzc2VydFR5cGUoaXMudGVzdFRpbWVvdXRzLCAndGltZW91dHMnLCAndGVzdC50aW1lb3V0cycsIHRpbWVvdXRzKTtcblxuICAgICAgICBPYmplY3Qua2V5cyhUZXN0VGltZW91dClcbiAgICAgICAgICAgIC5maWx0ZXIodGltZW91dCA9PiB0aW1lb3V0IGluIHRpbWVvdXRzKVxuICAgICAgICAgICAgLmZvckVhY2godGltZW91dCA9PiB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0VHlwZShpcy5ub25OZWdhdGl2ZU51bWJlciwgJ3RpbWVvdXRzJywgYHRlc3QudGltZW91dHMuJHt0aW1lb3V0fWAsIHRpbWVvdXRzW3RpbWVvdXQgYXMga2V5b2YgVGVzdFRpbWVvdXRzXSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRpbWVvdXRzID0gdGltZW91dHM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cbn1cblxuVGVzdGluZ1VuaXQubWFrZUFQSUxpc3RGb3JDaGlsZENsYXNzKFRlc3QpO1xuIl19
@@ -94,9 +94,23 @@ class TestingUnit extends base_unit_1.default {
94
94
  //@ts-ignore
95
95
  ChildClass.API_LIST = TestingUnit.API_LIST.concat((0, delegated_api_1.getDelegatedAPIList)(ChildClass.prototype));
96
96
  }
97
+ static init(ChildClass, ...initProps) {
98
+ const fn = (...args) => {
99
+ //@ts-ignore
100
+ const apiOrigin = new ChildClass(...initProps);
101
+ return apiOrigin(...args);
102
+ };
103
+ const getHandler = () => {
104
+ //@ts-ignore
105
+ return new ChildClass(...initProps, false);
106
+ };
107
+ //@ts-ignore
108
+ (0, delegated_api_1.delegateAPI)(fn, ChildClass.API_LIST, { getHandler });
109
+ return fn;
110
+ }
97
111
  }
98
112
  exports.default = TestingUnit;
99
113
  // @ts-ignore
100
114
  TestingUnit.API_LIST = (0, delegated_api_1.getDelegatedAPIList)(TestingUnit.prototype);
101
115
  module.exports = exports.default;
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy11bml0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9zdHJ1Y3R1cmUvdGVzdGluZy11bml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNERBQW1DO0FBQ25DLG9EQUkwQjtBQUMxQixrRkFBd0Q7QUFDeEQsNkRBQTZFO0FBQzdFLDBFQUFzRTtBQUN0RSxzRUFBNkM7QUFDN0Msb0ZBQTREO0FBUzVELCtCQUErQjtBQUMvQiwyRUFBeUY7QUFDekYsa0RBQW9FO0FBRXBFLE1BQThCLFdBQVksU0FBUSxtQkFBUTtJQWlCdEQsWUFBdUIsUUFBa0IsRUFBRSxRQUFrQixFQUFFLE9BQWUsRUFBRSxPQUFnQjtRQUM1RixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFekIsSUFBSSxDQUFDLElBQUksR0FBYyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBVyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBVyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksR0FBYyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBYyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBYyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBTSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsR0FBSyxFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFaEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksbUJBQVEsQ0FBQyxDQUFDLHNCQUFZLENBQUMsYUFBYSxFQUFFLHNCQUFZLENBQUMs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QUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBQSxtQ0FBbUIsRUFBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNqRyxDQUFDO0NBQ0o7QUF0SUQsOEJBc0lDO0FBRUQsYUFBYTtBQUNiLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBQSxtQ0FBbUIsRUFBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmFzZVVuaXQgZnJvbSAnLi9iYXNlLXVuaXQnO1xuaW1wb3J0IHtcbiAgICBhc3NlcnRQYWdlVXJsLFxuICAgIGdldFVybCxcbiAgICBwcmVwYXJlQmFzZVVybCxcbn0gZnJvbSAnLi4vdGVzdC1wYWdlLXVybCc7XG5pbXBvcnQgaGFuZGxlVGFnQXJncyBmcm9tICcuLi8uLi91dGlscy9oYW5kbGUtdGFnLWFyZ3MnO1xuaW1wb3J0IHsgZGVsZWdhdGVBUEksIGdldERlbGVnYXRlZEFQSUxpc3QgfSBmcm9tICcuLi8uLi91dGlscy9kZWxlZ2F0ZWQtYXBpJztcbmltcG9ydCB7IGFzc2VydFR5cGUsIGlzIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3J1bnRpbWUvdHlwZS1hc3NlcnRpb25zJztcbmltcG9ydCBGbGFnTGlzdCBmcm9tICcuLi8uLi91dGlscy9mbGFnLWxpc3QnO1xuaW1wb3J0IE9QVElPTl9OQU1FUyBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL29wdGlvbi1uYW1lcyc7XG5pbXBvcnQgVW5pdFR5cGUgZnJvbSAnLi91bml0LXR5cGUnO1xuaW1wb3J0IFJlcXVlc3RIb29rIGZyb20gJy4uL3JlcXVlc3QtaG9va3MvaG9vayc7XG5pbXBvcnQgQ2xpZW50U2NyaXB0SW5pdCBmcm9tICcuLi8uLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvY2xpZW50LXNjcmlwdC1pbml0JztcbmltcG9ydCBUZXN0RmlsZSBmcm9tICcuL3Rlc3QtZmlsZSc7XG5pbXBvcnQgeyBBdXRoQ3JlZGVudGlhbHMsIE1ldGFkYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gICAgRGljdGlvbmFyeSwgU2tpcEpzRXJyb3JzQ2FsbGJhY2ssIFNraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnNPYmplY3QsXG59IGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb24vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyB2YWxpZGF0ZVNraXBKc0Vycm9yc09wdGlvblZhbHVlIH0gZnJvbSAnLi4vLi4vdXRpbHMvZ2V0LW9wdGlvbnMvc2tpcC1qcy1lcnJvcnMnO1xuaW1wb3J0IHsgU2tpcEpzRXJyb3JzQXJndW1lbnRBcGlFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lJztcblxuZXhwb3J0IGRlZmF1bHQgYWJzdHJhY3QgY2xhc3MgVGVzdGluZ1VuaXQgZXh0ZW5kcyBCYXNlVW5pdCB7XG4gICAgcHVibGljIHJlYWRvbmx5IHRlc3RGaWxlOiBUZXN0RmlsZTtcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaWMgcGFnZVVybDogc3RyaW5nO1xuICAgIHB1YmxpYyBiYXNlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHVibGljIGF1dGhDcmVkZW50aWFsczogbnVsbCB8IEF1dGhDcmVkZW50aWFscztcbiAgICBwdWJsaWMgbWV0YTogTWV0YWRhdGE7XG4gICAgcHVibGljIG9ubHk6IGJvb2xlYW47XG4gICAgcHVibGljIHNraXA6IGJvb2xlYW47XG4gICAgcHVibGljIHJlcXVlc3RIb29rczogUmVxdWVzdEhvb2tbXTtcbiAgICBwdWJsaWMgY2xpZW50U2NyaXB0czogQ2xpZW50U2NyaXB0SW5pdFtdO1xuICAgIHB1YmxpYyBkaXNhYmxlUGFnZVJlbG9hZHM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgcHVibGljIGRpc2FibGVQYWdlQ2FjaGluZzogYm9vbGVhbjtcbiAgICBwdWJsaWMgYXBpTWV0aG9kV2FzQ2FsbGVkOiBGbGFnTGlzdDtcbiAgICBwdWJsaWMgYXBpT3JpZ2luOiBGdW5jdGlvbjtcbiAgICBwdWJsaWMgc2tpcEpzRXJyb3JzT3B0aW9ucz86IGJvb2xlYW4gfCBTa2lwSnNFcnJvcnNPcHRpb25zT2JqZWN0IHwgU2tpcEpzRXJyb3JzQ2FsbGJhY2t8IFNraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnNPYmplY3Q7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IgKHRlc3RGaWxlOiBUZXN0RmlsZSwgdW5pdFR5cGU6IFVuaXRUeXBlLCBwYWdlVXJsOiBzdHJpbmcsIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIodW5pdFR5cGUpO1xuXG4gICAgICAgIHRoaXMudGVzdEZpbGUgPSB0ZXN0RmlsZTtcblxuICAgICAgICB0aGlzLm5hbWUgICAgICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMucGFnZVVybCAgICAgICAgID0gcGFnZVVybDtcbiAgICAgICAgdGhpcy5iYXNlVXJsICAgICAgICAgPSBiYXNlVXJsO1xuICAgICAgICB0aGlzLmF1dGhDcmVkZW50aWFscyA9IG51bGw7XG4gICAgICAgIHRoaXMubWV0YSAgICAgICAgICAgID0ge307XG4gICAgICAgIHRoaXMub25seSAgICAgICAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2tpcCAgICAgICAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVxdWVzdEhvb2tzICAgID0gW107XG4gICAgICAgIHRoaXMuY2xpZW50U2NyaXB0cyAgID0gW107XG5cbiAgICAgICAgdGhpcy5kaXNhYmxlUGFnZVJlbG9hZHMgPSB2b2lkIDA7XG4gICAgICAgIHRoaXMuZGlzYWJsZVBhZ2VDYWNoaW5nID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5hcGlNZXRob2RXYXNDYWxsZWQgPSBuZXcgRmxhZ0xpc3QoW09QVElPTl9OQU1FUy5jbGllbnRTY3JpcHRzLCBPUFRJT05fTkFNRVMucmVxdWVzdEhvb2tzXSk7XG5cbiAgICAgICAgY29uc3QgdW5pdCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5hcGlPcmlnaW4gPSBmdW5jdGlvbiBhcGlPcmlnaW4gKC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuaXQuX2FkZCguLi5hcmdzKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgZGVsZWdhdGVBUEkodGhpcy5hcGlPcmlnaW4sIHRoaXMuY29uc3RydWN0b3IuQVBJX0xJU1QsIHsgaGFuZGxlcjogdGhpcyB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2FkZCAoLi4uYXJnczogdW5rbm93bltdKTogdW5rbm93bjtcblxuICAgIHByaXZhdGUgX29ubHkkZ2V0dGVyICgpOiBGdW5jdGlvbiB7XG4gICAgICAgIHRoaXMub25seSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NraXAkZ2V0dGVyICgpOiBGdW5jdGlvbiB7XG4gICAgICAgIHRoaXMuc2tpcCA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Rpc2FibGVQYWdlUmVsb2FkcyRnZXR0ZXIgKCk6IEZ1bmN0aW9uIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlUGFnZVJlbG9hZHMgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9lbmFibGVQYWdlUmVsb2FkcyRnZXR0ZXIgKCk6IEZ1bmN0aW9uIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlUGFnZVJlbG9hZHMgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGFnZSQgKHVybDogc3RyaW5nLCAuLi5yZXN0OiB1bmtub3duW10pOiBGdW5jdGlvbiB7XG4gICAgICAgIHRoaXMucGFnZVVybCA9IGhhbmRsZVRhZ0FyZ3ModXJsLCByZXN0KTtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gdGhpcy5iYXNlVXJsIHx8IGRpcm5hbWUodGhpcy50ZXN0RmlsZS5maWxlbmFtZSk7XG5cbiAgICAgICAgY29uc3QgYmFzZSA9IHByZXBhcmVCYXNlVXJsKHRoaXMuYmFzZVVybCk7XG5cbiAgICAgICAgYXNzZXJ0VHlwZShpcy5zdHJpbmcsICdwYWdlJywgJ1RoZSBwYWdlIFVSTCcsIHRoaXMucGFnZVVybCk7XG4gICAgICAgIGFzc2VydFBhZ2VVcmwodGhpcy5wYWdlVXJsLCAncGFnZScpO1xuXG4gICAgICAgIHRoaXMucGFnZVVybCA9IGdldFVybCh0aGlzLnBhZ2VVcmwsIGJhc2UpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9za2lwSnNFcnJvcnMkIChvcHRpb25zOiBib29sZWFuIHwgU2tpcEpzRXJyb3JzT3B0aW9uc09iamVjdCB8IFNraXBKc0Vycm9yc0NhbGxiYWNrIHwgU2tpcEpzRXJyb3JzQ2FsbGJhY2tXaXRoT3B0aW9uc09iamVjdCA9IHRydWUpOiBGdW5jdGlvbiB7XG4gICAgICAgIGFzc2VydFR5cGUoWyBpcy5ib29sZWFuLCBpcy5ub25OdWxsT2JqZWN0LCBpcy5mdW5jdGlvbiBdLCAnc2tpcEpzRXJyb3JzJywgJ1RoZSBza2lwSnNFcnJvcnMgb3B0aW9ucyBhcmd1bWVudCcsIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuc2tpcEpzRXJyb3JzT3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICAgICAgdmFsaWRhdGVTa2lwSnNFcnJvcnNPcHRpb25WYWx1ZSh0aGlzLnNraXBKc0Vycm9yc09wdGlvbnMsIFNraXBKc0Vycm9yc0FyZ3VtZW50QXBpRXJyb3IpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9odHRwQXV0aCQgKGNyZWRlbnRpYWxzOiBBdXRoQ3JlZGVudGlhbHMpOiBGdW5jdGlvbiB7XG4gICAgICAgIGFzc2VydFR5cGUoaXMubm9uTnVsbE9iamVjdCwgJ2h0dHBBdXRoJywgJ1RoZSBjcmVkZW50aWFscycsIGNyZWRlbnRpYWxzKTtcbiAgICAgICAgYXNzZXJ0VHlwZShpcy5zdHJpbmcsICdodHRwQXV0aCcsICdjcmVkZW50aWFscy51c2VybmFtZScsIGNyZWRlbnRpYWxzLnVzZXJuYW1lKTtcbiAgICAgICAgYXNzZXJ0VHlwZShpcy5zdHJpbmcsICdodHRwQXV0aCcsICdjcmVkZW50aWFscy5wYXNzd29yZCcsIGNyZWRlbnRpYWxzLnBhc3N3b3JkKTtcblxuICAgICAgICBpZiAoY3JlZGVudGlhbHMuZG9tYWluKVxuICAgICAgICAgICAgYXNzZXJ0VHlwZShpcy5zdHJpbmcsICdodHRwQXV0aCcsICdjcmVkZW50aWFscy5kb21haW4nLCBjcmVkZW50aWFscy5kb21haW4pO1xuICAgICAgICBpZiAoY3JlZGVudGlhbHMud29ya3N0YXRpb24pXG4gICAgICAgICAgICBhc3NlcnRUeXBlKGlzLnN0cmluZywgJ2h0dHBBdXRoJywgJ2NyZWRlbnRpYWxzLndvcmtzdGF0aW9uJywgY3JlZGVudGlhbHMud29ya3N0YXRpb24pO1xuXG4gICAgICAgIHRoaXMuYXV0aENyZWRlbnRpYWxzID0gY3JlZGVudGlhbHM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX21ldGEkIChrZXk6IHN0cmluZyB8IERpY3Rpb25hcnk8c3RyaW5nPiwgdmFsdWU/OiBzdHJpbmcpOiBGdW5jdGlvbiB7XG4gICAgICAgIGFzc2VydFR5cGUoW2lzLnN0cmluZywgaXMubm9uTnVsbE9iamVjdF0sICdtZXRhJywgYCR7dGhpcy51bml0VHlwZX0ubWV0YWAsIGtleSk7XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnID8geyBba2V5XTogdmFsdWUgYXMgc3RyaW5nIH0gOiBrZXkgYXMgRGljdGlvbmFyeTxzdHJpbmc+O1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2gocHJvcE5hbWUgPT4ge1xuICAgICAgICAgICAgdGhpcy5tZXRhW3Byb3BOYW1lXSA9IGRhdGFbcHJvcE5hbWVdO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzYWJsZVBhZ2VDYWNoaW5nJGdldHRlciAoKTogRnVuY3Rpb24ge1xuICAgICAgICB0aGlzLmRpc2FibGVQYWdlQ2FjaGluZyA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgbWFrZUFQSUxpc3RGb3JDaGlsZENsYXNzIChDaGlsZENsYXNzOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICBDaGlsZENsYXNzLkFQSV9MSVNUID0gVGVzdGluZ1VuaXQuQVBJX0xJU1QuY29uY2F0KGdldERlbGVnYXRlZEFQSUxpc3QoQ2hpbGRDbGFzcy5wcm90b3R5cGUpKTtcbiAgICB9XG59XG5cbi8vIEB0cy1pZ25vcmVcblRlc3RpbmdVbml0LkFQSV9MSVNUID0gZ2V0RGVsZWdhdGVkQVBJTGlzdChUZXN0aW5nVW5pdC5wcm90b3R5cGUpO1xuXG5cbiJdfQ==
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy11bml0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9zdHJ1Y3R1cmUvdGVzdGluZy11bml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNERBQW1DO0FBQ25DLG9EQUkwQjtBQUMxQixrRkFBd0Q7QUFDeEQsNkRBQTZFO0FBQzdFLDBFQUFzRTtBQUN0RSxzRUFBNkM7QUFDN0Msb0ZBQTREO0FBUzVELCtCQUErQjtBQUMvQiwyRUFBeUY7QUFDekYsa0RBQW9FO0FBRXBFLE1BQThCLFdBQVksU0FBUSxtQkFBUTtJQWlCdEQsWUFBdUIsUUFBa0IsRUFBRSxRQUFrQixFQUFFLE9BQWUsRUFBRSxPQUFnQjtRQUM1RixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFekIsSUFBSSxDQUFDLElBQUksR0FBYyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBVyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBVyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksR0FBYyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBYyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBYyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBTSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsR0FBSyxFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFaEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksbUJBQVEsQ0FBQyxDQUFDLHNCQUFZLENBQUMsYUFBYSxFQUFFLHNCQUFZLENBQUMs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QUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBQSxtQ0FBbUIsRUFBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQUksQ0FBRSxVQUFtQixFQUFFLEdBQUcsU0FBb0I7UUFDNUQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQWUsRUFBWSxFQUFFO1lBQ3hDLFlBQVk7WUFDWixNQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLFNBQVMsQ0FBd0IsQ0FBQztZQUV0RSxPQUFPLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHLEdBQVksRUFBRTtZQUM3QixZQUFZO1lBQ1osT0FBTyxJQUFJLFVBQVUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUM7UUFFRixZQUFZO1FBQ1osSUFBQSwyQkFBVyxFQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUVyRCxPQUFPLEVBQTRCLENBQUM7SUFDeEMsQ0FBQztDQUNKO0FBekpELDhCQXlKQztBQUVELGFBQWE7QUFDYixXQUFXLENBQUMsUUFBUSxHQUFHLElBQUEsbUNBQW1CLEVBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VVbml0IGZyb20gJy4vYmFzZS11bml0JztcbmltcG9ydCB7XG4gICAgYXNzZXJ0UGFnZVVybCxcbiAgICBnZXRVcmwsXG4gICAgcHJlcGFyZUJhc2VVcmwsXG59IGZyb20gJy4uL3Rlc3QtcGFnZS11cmwnO1xuaW1wb3J0IGhhbmRsZVRhZ0FyZ3MgZnJvbSAnLi4vLi4vdXRpbHMvaGFuZGxlLXRhZy1hcmdzJztcbmltcG9ydCB7IGRlbGVnYXRlQVBJLCBnZXREZWxlZ2F0ZWRBUElMaXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvZGVsZWdhdGVkLWFwaSc7XG5pbXBvcnQgeyBhc3NlcnRUeXBlLCBpcyB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lL3R5cGUtYXNzZXJ0aW9ucyc7XG5pbXBvcnQgRmxhZ0xpc3QgZnJvbSAnLi4vLi4vdXRpbHMvZmxhZy1saXN0JztcbmltcG9ydCBPUFRJT05fTkFNRVMgZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9vcHRpb24tbmFtZXMnO1xuaW1wb3J0IFVuaXRUeXBlIGZyb20gJy4vdW5pdC10eXBlJztcbmltcG9ydCBSZXF1ZXN0SG9vayBmcm9tICcuLi9yZXF1ZXN0LWhvb2tzL2hvb2snO1xuaW1wb3J0IENsaWVudFNjcmlwdEluaXQgZnJvbSAnLi4vLi4vY3VzdG9tLWNsaWVudC1zY3JpcHRzL2NsaWVudC1zY3JpcHQtaW5pdCc7XG5pbXBvcnQgVGVzdEZpbGUgZnJvbSAnLi90ZXN0LWZpbGUnO1xuaW1wb3J0IHsgQXV0aENyZWRlbnRpYWxzLCBNZXRhZGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICAgIERpY3Rpb25hcnksIFNraXBKc0Vycm9yc0NhbGxiYWNrLCBTa2lwSnNFcnJvcnNDYWxsYmFja1dpdGhPcHRpb25zT2JqZWN0LFxufSBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgdmFsaWRhdGVTa2lwSnNFcnJvcnNPcHRpb25WYWx1ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2dldC1vcHRpb25zL3NraXAtanMtZXJyb3JzJztcbmltcG9ydCB7IFNraXBKc0Vycm9yc0FyZ3VtZW50QXBpRXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvcnMvcnVudGltZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGFic3RyYWN0IGNsYXNzIFRlc3RpbmdVbml0IGV4dGVuZHMgQmFzZVVuaXQge1xuICAgIHB1YmxpYyByZWFkb25seSB0ZXN0RmlsZTogVGVzdEZpbGU7XG4gICAgcHVibGljIG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgcHVibGljIHBhZ2VVcmw6IHN0cmluZztcbiAgICBwdWJsaWMgYmFzZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHB1YmxpYyBhdXRoQ3JlZGVudGlhbHM6IG51bGwgfCBBdXRoQ3JlZGVudGlhbHM7XG4gICAgcHVibGljIG1ldGE6IE1ldGFkYXRhO1xuICAgIHB1YmxpYyBvbmx5OiBib29sZWFuO1xuICAgIHB1YmxpYyBza2lwOiBib29sZWFuO1xuICAgIHB1YmxpYyByZXF1ZXN0SG9va3M6IFJlcXVlc3RIb29rW107XG4gICAgcHVibGljIGNsaWVudFNjcmlwdHM6IENsaWVudFNjcmlwdEluaXRbXTtcbiAgICBwdWJsaWMgZGlzYWJsZVBhZ2VSZWxvYWRzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIHB1YmxpYyBkaXNhYmxlUGFnZUNhY2hpbmc6IGJvb2xlYW47XG4gICAgcHVibGljIGFwaU1ldGhvZFdhc0NhbGxlZDogRmxhZ0xpc3Q7XG4gICAgcHVibGljIGFwaU9yaWdpbjogRnVuY3Rpb247XG4gICAgcHVibGljIHNraXBKc0Vycm9yc09wdGlvbnM/OiBib29sZWFuIHwgU2tpcEpzRXJyb3JzT3B0aW9uc09iamVjdCB8IFNraXBKc0Vycm9yc0NhbGxiYWNrfCBTa2lwSnNFcnJvcnNDYWxsYmFja1dpdGhPcHRpb25zT2JqZWN0O1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yICh0ZXN0RmlsZTogVGVzdEZpbGUsIHVuaXRUeXBlOiBVbml0VHlwZSwgcGFnZVVybDogc3RyaW5nLCBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHVuaXRUeXBlKTtcblxuICAgICAgICB0aGlzLnRlc3RGaWxlID0gdGVzdEZpbGU7XG5cbiAgICAgICAgdGhpcy5uYW1lICAgICAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLnBhZ2VVcmwgICAgICAgICA9IHBhZ2VVcmw7XG4gICAgICAgIHRoaXMuYmFzZVVybCAgICAgICAgID0gYmFzZVVybDtcbiAgICAgICAgdGhpcy5hdXRoQ3JlZGVudGlhbHMgPSBudWxsO1xuICAgICAgICB0aGlzLm1ldGEgICAgICAgICAgICA9IHt9O1xuICAgICAgICB0aGlzLm9ubHkgICAgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNraXAgICAgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlcXVlc3RIb29rcyAgICA9IFtdO1xuICAgICAgICB0aGlzLmNsaWVudFNjcmlwdHMgICA9IFtdO1xuXG4gICAgICAgIHRoaXMuZGlzYWJsZVBhZ2VSZWxvYWRzID0gdm9pZCAwO1xuICAgICAgICB0aGlzLmRpc2FibGVQYWdlQ2FjaGluZyA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkID0gbmV3IEZsYWdMaXN0KFtPUFRJT05fTkFNRVMuY2xpZW50U2NyaXB0cywgT1BUSU9OX05BTUVTLnJlcXVlc3RIb29rc10pO1xuXG4gICAgICAgIGNvbnN0IHVuaXQgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuYXBpT3JpZ2luID0gZnVuY3Rpb24gYXBpT3JpZ2luICguLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgICAgICAgIHJldHVybiB1bml0Ll9hZGQoLi4uYXJncyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgIGRlbGVnYXRlQVBJKHRoaXMuYXBpT3JpZ2luLCB0aGlzLmNvbnN0cnVjdG9yLkFQSV9MSVNULCB7IGhhbmRsZXI6IHRoaXMgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IF9hZGQgKC4uLmFyZ3M6IHVua25vd25bXSk6IHVua25vd247XG5cbiAgICBwcml2YXRlIF9vbmx5JGdldHRlciAoKTogRnVuY3Rpb24ge1xuICAgICAgICB0aGlzLm9ubHkgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9za2lwJGdldHRlciAoKTogRnVuY3Rpb24ge1xuICAgICAgICB0aGlzLnNraXAgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kaXNhYmxlUGFnZVJlbG9hZHMkZ2V0dGVyICgpOiBGdW5jdGlvbiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZVBhZ2VSZWxvYWRzID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZW5hYmxlUGFnZVJlbG9hZHMkZ2V0dGVyICgpOiBGdW5jdGlvbiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZVBhZ2VSZWxvYWRzID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3BhZ2UkICh1cmw6IHN0cmluZywgLi4ucmVzdDogdW5rbm93bltdKTogRnVuY3Rpb24ge1xuICAgICAgICB0aGlzLnBhZ2VVcmwgPSBoYW5kbGVUYWdBcmdzKHVybCwgcmVzdCk7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IHRoaXMuYmFzZVVybCB8fCBkaXJuYW1lKHRoaXMudGVzdEZpbGUuZmlsZW5hbWUpO1xuXG4gICAgICAgIGNvbnN0IGJhc2UgPSBwcmVwYXJlQmFzZVVybCh0aGlzLmJhc2VVcmwpO1xuXG4gICAgICAgIGFzc2VydFR5cGUoaXMuc3RyaW5nLCAncGFnZScsICdUaGUgcGFnZSBVUkwnLCB0aGlzLnBhZ2VVcmwpO1xuICAgICAgICBhc3NlcnRQYWdlVXJsKHRoaXMucGFnZVVybCwgJ3BhZ2UnKTtcblxuICAgICAgICB0aGlzLnBhZ2VVcmwgPSBnZXRVcmwodGhpcy5wYWdlVXJsLCBiYXNlKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2tpcEpzRXJyb3JzJCAob3B0aW9uczogYm9vbGVhbiB8IFNraXBKc0Vycm9yc09wdGlvbnNPYmplY3QgfCBTa2lwSnNFcnJvcnNDYWxsYmFjayB8IFNraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnNPYmplY3QgPSB0cnVlKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKFsgaXMuYm9vbGVhbiwgaXMubm9uTnVsbE9iamVjdCwgaXMuZnVuY3Rpb24gXSwgJ3NraXBKc0Vycm9ycycsICdUaGUgc2tpcEpzRXJyb3JzIG9wdGlvbnMgYXJndW1lbnQnLCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLnNraXBKc0Vycm9yc09wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgIHZhbGlkYXRlU2tpcEpzRXJyb3JzT3B0aW9uVmFsdWUodGhpcy5za2lwSnNFcnJvcnNPcHRpb25zLCBTa2lwSnNFcnJvcnNBcmd1bWVudEFwaUVycm9yKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaHR0cEF1dGgkIChjcmVkZW50aWFsczogQXV0aENyZWRlbnRpYWxzKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKGlzLm5vbk51bGxPYmplY3QsICdodHRwQXV0aCcsICdUaGUgY3JlZGVudGlhbHMnLCBjcmVkZW50aWFscyk7XG4gICAgICAgIGFzc2VydFR5cGUoaXMuc3RyaW5nLCAnaHR0cEF1dGgnLCAnY3JlZGVudGlhbHMudXNlcm5hbWUnLCBjcmVkZW50aWFscy51c2VybmFtZSk7XG4gICAgICAgIGFzc2VydFR5cGUoaXMuc3RyaW5nLCAnaHR0cEF1dGgnLCAnY3JlZGVudGlhbHMucGFzc3dvcmQnLCBjcmVkZW50aWFscy5wYXNzd29yZCk7XG5cbiAgICAgICAgaWYgKGNyZWRlbnRpYWxzLmRvbWFpbilcbiAgICAgICAgICAgIGFzc2VydFR5cGUoaXMuc3RyaW5nLCAnaHR0cEF1dGgnLCAnY3JlZGVudGlhbHMuZG9tYWluJywgY3JlZGVudGlhbHMuZG9tYWluKTtcbiAgICAgICAgaWYgKGNyZWRlbnRpYWxzLndvcmtzdGF0aW9uKVxuICAgICAgICAgICAgYXNzZXJ0VHlwZShpcy5zdHJpbmcsICdodHRwQXV0aCcsICdjcmVkZW50aWFscy53b3Jrc3RhdGlvbicsIGNyZWRlbnRpYWxzLndvcmtzdGF0aW9uKTtcblxuICAgICAgICB0aGlzLmF1dGhDcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tZXRhJCAoa2V5OiBzdHJpbmcgfCBEaWN0aW9uYXJ5PHN0cmluZz4sIHZhbHVlPzogc3RyaW5nKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKFtpcy5zdHJpbmcsIGlzLm5vbk51bGxPYmplY3RdLCAnbWV0YScsIGAke3RoaXMudW5pdFR5cGV9Lm1ldGFgLCBrZXkpO1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyA/IHsgW2tleV06IHZhbHVlIGFzIHN0cmluZyB9IDoga2V5IGFzIERpY3Rpb25hcnk8c3RyaW5nPjtcblxuICAgICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKHByb3BOYW1lID0+IHtcbiAgICAgICAgICAgIHRoaXMubWV0YVtwcm9wTmFtZV0gPSBkYXRhW3Byb3BOYW1lXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Rpc2FibGVQYWdlQ2FjaGluZyRnZXR0ZXIgKCk6IEZ1bmN0aW9uIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlUGFnZUNhY2hpbmcgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIG1ha2VBUElMaXN0Rm9yQ2hpbGRDbGFzcyAoQ2hpbGRDbGFzczogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgQ2hpbGRDbGFzcy5BUElfTElTVCA9IFRlc3RpbmdVbml0LkFQSV9MSVNULmNvbmNhdChnZXREZWxlZ2F0ZWRBUElMaXN0KENoaWxkQ2xhc3MucHJvdG90eXBlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpbml0IChDaGlsZENsYXNzOiB1bmtub3duLCAuLi5pbml0UHJvcHM6IHVua25vd25bXSk6IFRlc3RpbmdVbml0IHtcbiAgICAgICAgY29uc3QgZm4gPSAoLi4uYXJnczogdW5rbm93bltdKSA6IHVua25vd24gPT4ge1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCBhcGlPcmlnaW4gPSBuZXcgQ2hpbGRDbGFzcyguLi5pbml0UHJvcHMpIGFzIHVua25vd24gYXMgRnVuY3Rpb247XG5cbiAgICAgICAgICAgIHJldHVybiBhcGlPcmlnaW4oLi4uYXJncyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZ2V0SGFuZGxlciA9ICgpOiB1bmtub3duID0+IHtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGlsZENsYXNzKC4uLmluaXRQcm9wcywgZmFsc2UpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICBkZWxlZ2F0ZUFQSShmbiwgQ2hpbGRDbGFzcy5BUElfTElTVCwgeyBnZXRIYW5kbGVyIH0pO1xuXG4gICAgICAgIHJldHVybiBmbiBhcyB1bmtub3duIGFzIFRlc3RpbmdVbml0O1xuICAgIH1cbn1cblxuLy8gQHRzLWlnbm9yZVxuVGVzdGluZ1VuaXQuQVBJX0xJU1QgPSBnZXREZWxlZ2F0ZWRBUElMaXN0KFRlc3RpbmdVbml0LnByb3RvdHlwZSk7XG5cblxuIl19