testcafe 2.3.1-rc.2 → 2.4.0-rc.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 (57) hide show
  1. package/CHANGELOG.md +15 -1
  2. package/LICENSE +1 -1
  3. package/README.md +40 -46
  4. package/lib/api/test-controller/execution-context.js +4 -2
  5. package/lib/browser/connection/gateway.js +43 -1
  6. package/lib/browser/connection/index.js +24 -10
  7. package/lib/browser/connection/service-routes.js +3 -1
  8. package/lib/browser/provider/built-in/dedicated/chrome/index.js +19 -5
  9. package/lib/browser/provider/index.js +4 -1
  10. package/lib/client/automation/deps/hammerhead.js +24 -0
  11. package/lib/client/automation/deps/testcafe-core.js +24 -0
  12. package/lib/client/automation/index.js +251 -54
  13. package/lib/client/automation/index.min.js +1 -1
  14. package/lib/client/automation/playback/press/get-key-info.js +44 -0
  15. package/lib/client/automation/playback/press/utils.js +142 -0
  16. package/lib/client/automation/utils/get-key-code.js +15 -0
  17. package/lib/client/automation/utils/get-key-identifier.js +14 -0
  18. package/lib/client/automation/utils/is-letter.js +7 -0
  19. package/lib/client/automation/utils/key-identifier-maps.js +93 -0
  20. package/lib/client/browser/idle-page/index.js +7 -2
  21. package/lib/client/core/index.js +46 -3
  22. package/lib/client/core/index.min.js +1 -1
  23. package/lib/client/driver/index.js +45 -17
  24. package/lib/client/driver/index.min.js +1 -1
  25. package/lib/client/test-run/index.js.mustache +34 -30
  26. package/lib/client/ui/index.js +3230 -48
  27. package/lib/client/ui/index.min.js +1 -1
  28. package/lib/client/ui/sprite.svg +15 -0
  29. package/lib/client/ui/styles.css +183 -41
  30. package/lib/live/test-runner.js +4 -2
  31. package/lib/proxyless/api-base.js +3 -2
  32. package/lib/proxyless/client/event-descriptor.js +67 -0
  33. package/lib/proxyless/client/input.js +36 -0
  34. package/lib/proxyless/client/key-press/utils.js +31 -0
  35. package/lib/proxyless/client/types.js +1 -1
  36. package/lib/proxyless/client/utils.js +32 -2
  37. package/lib/proxyless/cookie-provider.js +31 -3
  38. package/lib/proxyless/errors.js +20 -0
  39. package/lib/proxyless/index.js +2 -10
  40. package/lib/proxyless/request-pipeline/index.js +32 -3
  41. package/lib/proxyless/resource-injector.js +5 -4
  42. package/lib/proxyless/types.js +3 -2
  43. package/lib/proxyless/utils/cdp.js +4 -3
  44. package/lib/reporter/index.js +2 -1
  45. package/lib/runner/bootstrapper.js +8 -1
  46. package/lib/runner/index.js +57 -44
  47. package/lib/shared/utils/is-file-protocol.js +2 -2
  48. package/lib/test-run/commands/actions.js +2 -2
  49. package/lib/test-run/cookies/base.js +4 -1
  50. package/lib/test-run/cookies/provider.js +9 -2
  51. package/lib/test-run/execute-js-expression/index.js +4 -2
  52. package/lib/test-run/index.js +17 -12
  53. package/lib/test-run/request/create-request-options.js +23 -12
  54. package/lib/test-run/request/send.js +2 -3
  55. package/lib/utils/check-is-vm.js +58 -0
  56. package/package.json +9 -6
  57. package/lib/proxyless/client/event-simulator.js +0 -40
@@ -76,10 +76,7 @@ async function prepareHeaders(headers, currentPageUrl, url, body, testRun, withC
76
76
  if ((_a = options.proxy) === null || _a === void 0 ? void 0 : _a.auth)
77
77
  preparedHeaders[http_headers_1.default.proxyAuthorization] = getAuthString(options.proxy.auth);
78
78
  if (withCredentials) {
79
- const currentPageCookies = testRun.session.cookies.getHeader({
80
- url: currentPageUrl.href,
81
- hostname: currentPageUrl.hostname,
82
- });
79
+ const currentPageCookies = await testRun.cookieProvider.getCookieHeader(currentPageUrl.href, currentPageUrl.hostname);
83
80
  if (currentPageCookies)
84
81
  preparedHeaders[http_headers_1.default.cookie] = currentPageCookies;
85
82
  }
@@ -123,15 +120,29 @@ function getProxyUrl(testRun, url, withCredentials) {
123
120
  options: { credentials: withCredentials ? interfaces_1.Credentials.include : interfaces_1.Credentials.omit },
124
121
  }, testRun, true));
125
122
  }
123
+ async function resolvePoxylessUrlParts(url) {
124
+ const { href, hostname, port, pathname, search, } = url;
125
+ const partAfterHost = [pathname, search].join('');
126
+ return { partAfterHost, href, hostname, port };
127
+ }
128
+ async function resolvePoxyUrlParts(testRun, url, withCredentials) {
129
+ const href = await getProxyUrl(testRun, url.href, withCredentials);
130
+ const urlObj = await (0, testcafe_hammerhead_1.parseProxyUrl)(href);
131
+ const { partAfterHost } = urlObj;
132
+ const { hostname, port } = urlObj.proxy;
133
+ return { partAfterHost, href, hostname, port };
134
+ }
135
+ function resolveUrlParts(testRun, url, withCredentials) {
136
+ return testRun.isProxyless() ? resolvePoxylessUrlParts(url) : resolvePoxyUrlParts(testRun, url, withCredentials);
137
+ }
126
138
  async function createRequestOptions(currentPageUrl, testRun, options, callsite) {
127
139
  options.headers = options.headers || {};
128
140
  const url = await prepareUrl(testRun, currentPageUrl, options.url, callsite);
129
141
  const withCredentials = !currentPageUrl.host || (0, testcafe_hammerhead_1.sameOriginCheck)(currentPageUrl.href, url.href) || options.withCredentials || false;
130
142
  const body = transformBody(options.headers, options.body);
131
143
  const headers = await prepareHeaders(options.headers, currentPageUrl, url, body, testRun, withCredentials, options);
132
- const proxyUrl = await getProxyUrl(testRun, url.href, withCredentials);
133
- const proxyUrlObj = (0, testcafe_hammerhead_1.parseProxyUrl)(proxyUrl);
134
144
  let auth = options.auth;
145
+ const { hostname, port, href, partAfterHost, } = await resolveUrlParts(testRun, url, withCredentials);
135
146
  if (!auth && url.username && url.password) {
136
147
  auth = {
137
148
  username: url.username,
@@ -140,12 +151,12 @@ async function createRequestOptions(currentPageUrl, testRun, options, callsite)
140
151
  }
141
152
  const requestParams = {
142
153
  method: options.method || DEFAULT_REQUEST_METHOD,
143
- url: proxyUrl,
154
+ url: href,
144
155
  protocol: DEFAULT_PROTOCOL,
145
- hostname: proxyUrlObj.proxy.hostname,
146
- host: proxyUrlObj.proxy.hostname,
147
- port: proxyUrlObj.proxy.port,
148
- path: prepareSearchParams(proxyUrlObj.partAfterHost, options.params),
156
+ hostname: hostname,
157
+ host: hostname,
158
+ port: port,
159
+ path: prepareSearchParams(partAfterHost, options.params),
149
160
  auth: auth && withCredentials ? `${auth.username}:${auth.password}` : void 0,
150
161
  headers: headers,
151
162
  credentials: withCredentials ? testRun.session.getAuthCredentials() : void 0,
@@ -172,4 +183,4 @@ async function createRequestOptions(currentPageUrl, testRun, options, callsite)
172
183
  return new testcafe_hammerhead_1.RequestOptions(requestParams);
173
184
  }
174
185
  exports.createRequestOptions = createRequestOptions;
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXJlcXVlc3Qtb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0LXJ1bi9yZXF1ZXN0L2NyZWF0ZS1yZXF1ZXN0LW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsbUNBTWdCO0FBQ2hCLDBEQUFpQztBQUNqQyw2Q0FLc0I7QUFDdEIsNkRBSzZCO0FBRTdCLCtFQUF1RDtBQUN2RCw0RUFBb0Q7QUFDcEQsOENBQW9EO0FBQ3BELGtEQUFnRDtBQUNoRCxpREFBeUQ7QUFHekQsTUFBTSxjQUFjLEdBQWMsRUFBRSxDQUFDLHNCQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyx1QkFBYSxDQUFDLElBQUksS0FBSyx1QkFBYSxDQUFDLFNBQVMsS0FBSyx1QkFBYSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDdkksTUFBTSx5QkFBeUIsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0QsTUFBTSxzQkFBc0IsR0FBTSxLQUFLLENBQUM7QUFDeEMsTUFBTSxnQkFBZ0IsR0FBWSxPQUFPLENBQUM7QUFFMUMsU0FBUyx5QkFBeUIsQ0FBRSxPQUE0QixFQUFFLEtBQWE7SUFDM0UsSUFBSSxDQUFDLElBQUEsb0JBQVcsRUFBQyxPQUFPLENBQUMsSUFBSSxJQUFBLG9CQUFXLEVBQUMsT0FBTyxDQUFDLHNCQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkUsT0FBTyxDQUFDLHNCQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2xELENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBRSxLQUFjO0lBQzNCLElBQUksS0FBSyxLQUFLLElBQUk7UUFDZCxPQUFPLE1BQU0sQ0FBQztJQUVsQixJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ2xDLE9BQU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FB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QUU7UUFDakQsY0FBYyxFQUFFO1lBQ1osSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3JCLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTztTQUN4QjtLQUNKLENBQUM7SUFFRixJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7UUFDZixhQUFhLENBQUMscUJBQXFCLEdBQUc7WUFDbEMsSUFBSSxFQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUM3QixRQUFRLEVBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQzdCLElBQUksRUFBTyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDeEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQzNHLENBQUM7UUFFRixhQUFhLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDdEMsYUFBYSxDQUFDLElBQUksR0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ2xDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUN0QyxhQUFhLENBQUMsSUFBSSxHQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDbEMsYUFBYSxDQUFDLElBQUksR0FBTyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzNGO0lBRUQsT0FBTyxJQUFJLG9DQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQXJERCxvREFxREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPdXRnb2luZ0h0dHBIZWFkZXJzIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQge1xuICAgIGNhc3RBcnJheSxcbiAgICBpc0FycmF5QnVmZmVyLFxuICAgIGlzQnVmZmVyLFxuICAgIGlzT2JqZWN0LFxuICAgIGlzVW5kZWZpbmVkLFxufSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGlzU3RyZWFtIGZyb20gJ2lzLXN0cmVhbSc7XG5pbXBvcnQge1xuICAgIEF1dGhPcHRpb25zLFxuICAgIENyZWRlbnRpYWxzLFxuICAgIEV4dGVybmFsUmVxdWVzdE9wdGlvbnMsXG4gICAgUGFyYW1zLFxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgICBSZXF1ZXN0T3B0aW9ucyxcbiAgICBwYXJzZVByb3h5VXJsLFxuICAgIFJlcXVlc3RPcHRpb25zUGFyYW1zLFxuICAgIHNhbWVPcmlnaW5DaGVjayxcbn0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgVGVzdFJ1biBmcm9tICcuLi9pbmRleCc7XG5pbXBvcnQgQ09OVEVOVF9UWVBFUyBmcm9tICcuLi8uLi9hc3NldHMvY29udGVudC10eXBlcyc7XG5pbXBvcnQgSFRUUF9IRUFERVJTIGZyb20gJy4uLy4uL3V0aWxzL2h0dHAtaGVhZGVycyc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4uLy4uL2Vycm9ycy90eXBlcyc7XG5pbXBvcnQgeyBBUElFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IEdldFByb3h5VXJsQ29tbWFuZCB9IGZyb20gJy4uL2NvbW1hbmRzL2FjdGlvbnMnO1xuaW1wb3J0IHsgQ2FsbHNpdGVSZWNvcmQgfSBmcm9tICdjYWxsc2l0ZS1yZWNvcmQnO1xuXG5jb25zdCBERUZBVUxUX0FDQ0VQVCAgICAgICAgICAgID0geyBbSFRUUF9IRUFERVJTLmFjY2VwdF06IGAke0NPTlRFTlRfVFlQRVMuanNvbn0sICR7Q09OVEVOVF9UWVBFUy50ZXh0UGxhaW59LCAke0NPTlRFTlRfVFlQRVMuYWxsfWAgfTtcbmNvbnN0IE1FVEhPRFNfV0lUSF9DT05URU5UX1RZUEUgPSBbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ107XG5jb25zdCBERUZBVUxUX1JFUVVFU1RfTUVUSE9EICAgID0gJ0dFVCc7XG5jb25zdCBERUZBVUxUX1BST1RPQ09MICAgICAgICAgID0gJ2h0dHA6JztcblxuZnVuY3Rpb24gc2V0Q29udGVudFR5cGVJZk5vdEV4aXN0cyAoaGVhZGVyczogT3V0Z29pbmdIdHRwSGVhZGVycywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghaXNVbmRlZmluZWQoaGVhZGVycykgJiYgaXNVbmRlZmluZWQoaGVhZGVyc1tIVFRQX0hFQURFUlMuY29udGVudFR5cGVdKSlcbiAgICAgICAgaGVhZGVyc1tIVFRQX0hFQURFUlMuY29udGVudFR5cGVdID0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZiAodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuICdudWxsJztcblxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKVxuICAgICAgICByZXR1cm4gdmFsdWUuY29uc3RydWN0b3IubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQm9keSAoaGVhZGVyczogT3V0Z29pbmdIdHRwSGVhZGVycywgYm9keT86IGFueSk6IEJ1ZmZlciB7XG4gICAgaWYgKCFib2R5KVxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oJycpO1xuXG4gICAgaWYgKHR5cGVPZihib2R5KSA9PT0gJ2Zvcm1kYXRhJyB8fFxuICAgICAgICB0eXBlT2YoYm9keSkgPT09ICdmaWxlJyB8fFxuICAgICAgICB0eXBlT2YoYm9keSkgPT09ICdibG9iJyB8fFxuICAgICAgICBpc0FycmF5QnVmZmVyKGJvZHkpIHx8XG4gICAgICAgIGlzQnVmZmVyKGJvZHkpIHx8XG4gICAgICAgIGlzU3RyZWFtKGJvZHkpXG4gICAgKVxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYm9keSk7XG4gICAgZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKVxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYm9keS5idWZmZXIpO1xuXG4gICAgZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgICAgICBzZXRDb250ZW50VHlwZUlmTm90RXhpc3RzKGhlYWRlcnMsIGAke0NPTlRFTlRfVFlQRVMudXJsZW5jb2RlZH07Y2hhcnNldD11dGYtOGApO1xuXG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShib2R5LnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdChib2R5KSB8fCBoZWFkZXJzICYmIGhlYWRlcnNbSFRUUF9IRUFERVJTLmNvbnRlbnRUeXBlXSA9PT0gQ09OVEVOVF9UWVBFUy5qc29uKSB7XG4gICAgICAgIHNldENvbnRlbnRUeXBlSWZOb3RFeGlzdHMoaGVhZGVycywgQ09OVEVOVF9UWVBFUy5qc29uKTtcblxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpXG4gICAgICAgIHNldENvbnRlbnRUeXBlSWZOb3RFeGlzdHMoaGVhZGVycywgQ09OVEVOVF9UWVBFUy50ZXh0UGxhaW4pO1xuXG4gICAgcmV0dXJuIGJvZHk7XG59XG5cbmZ1bmN0aW9uIGdldEF1dGhTdHJpbmcgKGF1dGg6IEF1dGhPcHRpb25zKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0Jhc2ljICcgKyBCdWZmZXIuZnJvbShhdXRoLnVzZXJuYW1lICsgJzonICsgYXV0aC5wYXNzd29yZCwgJ3V0ZjgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUhlYWRlck5hbWVzVG9Mb3dlcmNhc2UgKGhlYWRlcnM6IE91dGdvaW5nSHR0cEhlYWRlcnMpOiBPdXRnb2luZ0h0dHBIZWFkZXJzIHtcbiAgICBjb25zdCBsb3dlckNhc2VIZWFkZXJzOiBPdXRnb2luZ0h0dHBIZWFkZXJzID0ge307XG5cbiAgICBPYmplY3Qua2V5cyhoZWFkZXJzKS5mb3JFYWNoKGhlYWRlck5hbWUgPT4ge1xuICAgICAgICBsb3dlckNhc2VIZWFkZXJzW2hlYWRlck5hbWUudG9Mb3dlckNhc2UoKV0gPSBoZWFkZXJzW2hlYWRlck5hbWVdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxvd2VyQ2FzZUhlYWRlcnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByZXBhcmVIZWFkZXJzIChoZWFkZXJzOiBPdXRnb2luZ0h0dHBIZWFkZXJzLCBjdXJyZW50UGFnZVVybDogVVJMLCB1cmw6IFVSTCwgYm9keTogQnVmZmVyLCB0ZXN0UnVuOiBUZXN0UnVuLCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW4sIG9wdGlvbnM6IEV4dGVybmFsUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPE91dGdvaW5nSHR0cEhlYWRlcnM+IHtcbiAgICBjb25zdCB7IGhvc3QsIG9yaWdpbiB9ID0gdXJsO1xuXG4gICAgY29uc3QgcHJlcGFyZWRIZWFkZXJzOiBPdXRnb2luZ0h0dHBIZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BQ0NFUFQsIGNoYW5nZUhlYWRlck5hbWVzVG9Mb3dlcmNhc2UoaGVhZGVycykpO1xuXG5cbiAgICBwcmVwYXJlZEhlYWRlcnNbSFRUUF9IRUFERVJTLmhvc3RdID0gaG9zdDtcbiAgICBwcmVwYXJlZEhlYWRlcnNbSFRUUF9IRUFERVJTLm9yaWdpbl0gPSBvcmlnaW47XG4gICAgcHJlcGFyZWRIZWFkZXJzW0hUVFBfSEVBREVSUy5jb250ZW50TGVuZ3RoXSA9IGJvZHkubGVuZ3RoO1xuXG4gICAgaWYgKGhlYWRlcnMubWV0aG9kICYmIE1FVEhPRFNfV0lUSF9DT05URU5UX1RZUEUuaW5jbHVkZXMoU3RyaW5nKGhlYWRlcnMubWV0aG9kKSkpXG4gICAgICAgIHByZXBhcmVkSGVhZGVyc1tIVFRQX0hFQURFUlMuY29udGVudFR5cGVdID0gQ09OVEVOVF9UWVBFUy51cmxlbmNvZGVkO1xuXG4gICAgaWYgKG9wdGlvbnMuYXV0aCAmJiB3aXRoQ3JlZGVudGlhbHMpXG4gICAgICAgIHByZXBhcmVkSGVhZGVyc1tIVFRQX0hFQURFUlMuYXV0aG9yaXphdGlvbl0gPSBnZXRBdXRoU3RyaW5nKG9wdGlvbnMuYXV0aCk7XG5cbiAgICBpZiAob3B0aW9ucy5wcm94eT8uYXV0aClcbiAgICAgICAgcHJlcGFyZWRIZWFkZXJzW0hUVFBfSEVBREVSUy5wcm94eUF1dGhvcml6YXRpb25dID0gZ2V0QXV0aFN0cmluZyhvcHRpb25zLnByb3h5LmF1dGgpO1xuXG4gICAgaWYgKHdpdGhDcmVkZW50aWFscykge1xuICAgICAgICBjb25zdCBjdXJyZW50UGFnZUNvb2tpZXMgPSB0ZXN0UnVuLnNlc3Npb24uY29va2llcy5nZXRIZWFkZXIoe1xuICAgICAgICAgICAgdXJsOiAgICAgIGN1cnJlbnRQYWdlVXJsLmhyZWYsXG4gICAgICAgICAgICBob3N0bmFtZTogY3VycmVudFBhZ2VVcmwuaG9zdG5hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChjdXJyZW50UGFnZUNvb2tpZXMpXG4gICAgICAgICAgICBwcmVwYXJlZEhlYWRlcnNbSFRUUF9IRUFERVJTLmNvb2tpZV0gPSBjdXJyZW50UGFnZUNvb2tpZXM7XG4gICAgfVxuXG4gICAgLy9OT1RFOiBBZGRpdGlvbmFsIGhlYWRlciB0byByZWNvZ25pemUgQVBJIHJlcXVlc3RzIGluIHRoZSBoYW1tZXJoZWFkXG4gICAgcHJlcGFyZWRIZWFkZXJzW0hUVFBfSEVBREVSUy5pc0FwaVJlcXVlc3RdID0gJ3RydWUnO1xuXG4gICAgcmV0dXJuIHByZXBhcmVkSGVhZGVycztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJlcGFyZVVybCAodGVzdFJ1bjogVGVzdFJ1biwgY3VycmVudFBhZ2VVcmw6IFVSTCwgdXJsOiBzdHJpbmcgfCBVUkwsIGNhbGxzaXRlOiBDYWxsc2l0ZVJlY29yZCB8IG51bGwpOiBQcm9taXNlPFVSTD4ge1xuICAgIGxldCBwcmVwYXJlZFVybDogVVJMO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgcHJlcGFyZWRVcmwgPSB1cmwgaW5zdGFuY2VvZiBVUkxcbiAgICAgICAgICAgID8gdXJsXG4gICAgICAgICAgICA6IG5ldyBVUkwodXJsLCBjdXJyZW50UGFnZVVybC5ob3N0bmFtZSA/IGN1cnJlbnRQYWdlVXJsLm9yaWdpbiA6IHZvaWQgMCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBBUElFcnJvcihjYWxsc2l0ZSwgUlVOVElNRV9FUlJPUlMucmVxdWVzdFVybEludmFsaWRWYWx1ZUVycm9yLCB1cmwpO1xuICAgIH1cblxuICAgIHJldHVybiBwcmVwYXJlZFVybDtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVNlYXJjaFBhcmFtcyAodXJsOiBzdHJpbmcsIHBhcmFtcz86IFBhcmFtcyk6IHN0cmluZyB7XG4gICAgaWYgKCFwYXJhbXMpXG4gICAgICAgIHJldHVybiB1cmw7XG5cbiAgICBsZXQgc2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXM7XG5cbiAgICBpZiAocGFyYW1zIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKVxuICAgICAgICBzZWFyY2hQYXJhbXMgPSBwYXJhbXM7XG4gICAgZWxzZSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbXMpIHtcbiAgICAgICAgICAgIGlmICghcGFyYW1zW2tleV0pXG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIGNhc3RBcnJheShwYXJhbXNba2V5XSkuZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgICAgICAgICBzZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgdHlwZW9mIHYgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkodikgOiBTdHJpbmcodikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYCR7dXJsfSR7dXJsLmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPyd9JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gO1xufVxuXG5mdW5jdGlvbiBnZXRQcm94eVVybCAodGVzdFJ1bjogVGVzdFJ1biwgdXJsOiBzdHJpbmcsIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW4pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0ZXN0UnVuLmV4ZWN1dGVDb21tYW5kKG5ldyBHZXRQcm94eVVybENvbW1hbmQoe1xuICAgICAgICB1cmw6ICAgICB1cmwsXG4gICAgICAgIG9wdGlvbnM6IHsgY3JlZGVudGlhbHM6IHdpdGhDcmVkZW50aWFscyA/IENyZWRlbnRpYWxzLmluY2x1ZGUgOiBDcmVkZW50aWFscy5vbWl0IH0sXG4gICAgfSwgdGVzdFJ1biwgdHJ1ZSkpIGFzIFByb21pc2U8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RPcHRpb25zIChjdXJyZW50UGFnZVVybDogVVJMLCB0ZXN0UnVuOiBUZXN0UnVuLCBvcHRpb25zOiBFeHRlcm5hbFJlcXVlc3RPcHRpb25zLCBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQgfCBudWxsKTogUHJvbWlzZTxSZXF1ZXN0T3B0aW9ucz4ge1xuICAgIG9wdGlvbnMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fTtcblxuICAgIGNvbnN0IHVybCAgICAgICAgICAgICA9IGF3YWl0IHByZXBhcmVVcmwodGVzdFJ1biwgY3VycmVudFBhZ2VVcmwsIG9wdGlvbnMudXJsLCBjYWxsc2l0ZSk7XG4gICAgY29uc3Qgd2l0aENyZWRlbnRpYWxzID0gIWN1cnJlbnRQYWdlVXJsLmhvc3QgfHwgc2FtZU9yaWdpbkNoZWNrKGN1cnJlbnRQYWdlVXJsLmhyZWYsIHVybC5ocmVmKSB8fCBvcHRpb25zLndpdGhDcmVkZW50aWFscyB8fCBmYWxzZTtcbiAgICBjb25zdCBib2R5ICAgICAgICAgICAgPSB0cmFuc2Zvcm1Cb2R5KG9wdGlvbnMuaGVhZGVycywgb3B0aW9ucy5ib2R5KTtcbiAgICBjb25zdCBoZWFkZXJzICAgICAgICAgPSBhd2FpdCBwcmVwYXJlSGVhZGVycyhvcHRpb25zLmhlYWRlcnMsIGN1cnJlbnRQYWdlVXJsLCB1cmwsIGJvZHksIHRlc3RSdW4sIHdpdGhDcmVkZW50aWFscywgb3B0aW9ucyk7XG4gICAgY29uc3QgcHJveHlVcmwgICAgICAgID0gYXdhaXQgZ2V0UHJveHlVcmwodGVzdFJ1biwgdXJsLmhyZWYsIHdpdGhDcmVkZW50aWFscyk7XG4gICAgY29uc3QgcHJveHlVcmxPYmogICAgID0gcGFyc2VQcm94eVVybChwcm94eVVybCk7XG4gICAgbGV0IGF1dGggICAgICAgICAgICAgID0gb3B0aW9ucy5hdXRoO1xuXG4gICAgaWYgKCFhdXRoICYmIHVybC51c2VybmFtZSAmJiB1cmwucGFzc3dvcmQpIHtcbiAgICAgICAgYXV0aCA9IHtcbiAgICAgICAgICAgIHVzZXJuYW1lOiB1cmwudXNlcm5hbWUsXG4gICAgICAgICAgICBwYXNzd29yZDogdXJsLnBhc3N3b3JkLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXJhbXM6IFJlcXVlc3RPcHRpb25zUGFyYW1zID0ge1xuICAgICAgICBtZXRob2Q6ICAgICAgICAgb3B0aW9ucy5tZXRob2QgfHwgREVGQVVMVF9SRVFVRVNUX01FVEhPRCxcbiAgICAgICAgdXJsOiAgICAgICAgICAgIHByb3h5VXJsLFxuICAgICAgICBwcm90b2NvbDogICAgICAgREVGQVVMVF9QUk9UT0NPTCxcbiAgICAgICAgaG9zdG5hbWU6ICAgICAgIHByb3h5VXJsT2JqLnByb3h5Lmhvc3RuYW1lLFxuICAgICAgICBob3N0OiAgICAgICAgICAgcHJveHlVcmxPYmoucHJveHkuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6ICAgICAgICAgICBwcm94eVVybE9iai5wcm94eS5wb3J0LFxuICAgICAgICBwYXRoOiAgICAgICAgICAgcHJlcGFyZVNlYXJjaFBhcmFtcyhwcm94eVVybE9iai5wYXJ0QWZ0ZXJIb3N0LCBvcHRpb25zLnBhcmFtcyksXG4gICAgICAgIGF1dGg6ICAgICAgICAgICBhdXRoICYmIHdpdGhDcmVkZW50aWFscyA/IGAke2F1dGgudXNlcm5hbWV9OiR7YXV0aC5wYXNzd29yZH1gIDogdm9pZCAwLFxuICAgICAgICBoZWFkZXJzOiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgY3JlZGVudGlhbHM6ICAgIHdpdGhDcmVkZW50aWFscyA/IHRlc3RSdW4uc2Vzc2lvbi5nZXRBdXRoQ3JlZGVudGlhbHMoKSA6IHZvaWQgMCxcbiAgICAgICAgYm9keTogICAgICAgICAgIGJvZHksXG4gICAgICAgIGRpc2FibGVIdHRwMjogICB0ZXN0UnVuLnNlc3Npb24uaXNIdHRwMkRpc2FibGVkKCksXG4gICAgICAgIHJlcXVlc3RUaW1lb3V0OiB7XG4gICAgICAgICAgICBhamF4OiBvcHRpb25zLnRpbWVvdXQsXG4gICAgICAgICAgICBwYWdlOiBvcHRpb25zLnRpbWVvdXQsXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zLnByb3h5KSB7XG4gICAgICAgIHJlcXVlc3RQYXJhbXMuZXh0ZXJuYWxQcm94eVNldHRpbmdzID0ge1xuICAgICAgICAgICAgaG9zdDogICAgICBvcHRpb25zLnByb3h5Lmhvc3QsXG4gICAgICAgICAgICBob3N0bmFtZTogIG9wdGlvbnMucHJveHkuaG9zdCxcbiAgICAgICAgICAgIHBvcnQ6ICAgICAgb3B0aW9ucy5wcm94eS5wb3J0LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwcm94eUF1dGg6IG9wdGlvbnMucHJveHkuYXV0aCA/IGAke29wdGlvbnMucHJveHkuYXV0aC51c2VybmFtZX06JHtvcHRpb25zLnByb3h5LmF1dGgucGFzc3dvcmR9YCA6IHZvaWQgMCxcbiAgICAgICAgfTtcblxuICAgICAgICByZXF1ZXN0UGFyYW1zLnByb3RvY29sID0gdXJsLnByb3RvY29sO1xuICAgICAgICByZXF1ZXN0UGFyYW1zLmhvc3QgICAgID0gdXJsLmhvc3Q7XG4gICAgICAgIHJlcXVlc3RQYXJhbXMuaG9zdG5hbWUgPSB1cmwuaG9zdG5hbWU7XG4gICAgICAgIHJlcXVlc3RQYXJhbXMucG9ydCAgICAgPSB1cmwucG9ydDtcbiAgICAgICAgcmVxdWVzdFBhcmFtcy5wYXRoICAgICA9IHByZXBhcmVTZWFyY2hQYXJhbXModXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaCwgb3B0aW9ucy5wYXJhbXMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVxdWVzdE9wdGlvbnMocmVxdWVzdFBhcmFtcyk7XG59XG4iXX0=
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXJlcXVlc3Qtb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0LXJ1bi9yZXF1ZXN0L2NyZWF0ZS1yZXF1ZXN0LW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsbUNBTWdCO0FBQ2hCLDBEQUFpQztBQUNqQyw2Q0FLc0I7QUFDdEIsNkRBSzZCO0FBRTdCLCtFQUF1RDtBQUN2RCw0RUFBb0Q7QUFDcEQsOENBQW9EO0FBQ3BELGtEQUFnRDtBQUNoRCxpREFBeUQ7QUFHekQsTUFBTSxjQUFjLEdBQWMsRUFBRSxDQUFDLHNCQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyx1QkFBYSxDQUFDLElBQUksS0FBSyx1QkFBYSxDQUFDLFNBQVMsS0FBSyx1QkFBYSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDdkksTUFBTSx5QkFBeUIsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0QsTUFBTSxzQkFBc0IsR0FBTSxLQUFLLENBQUM7QUFDeEMsTUFBTSxnQkFBZ0IsR0FBWSxPQUFPLENBQUM7QUFFMUMsU0FBUyx5QkFBeUIsQ0FBRSxPQUE0QixFQUFFLEtBQWE7SUFDM0UsSUFBSSxDQUFDLElBQUEsb0JBQVcsRUFBQyxPQUFPLENBQUMsSUFBSSxJQUFBLG9CQUFXLEVBQUMsT0FBTyxDQUFDLHNCQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkUsT0FBTyxDQUFDLHNCQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2xELENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBRSxLQUFjO0lBQzNCLElBQUksS0FBSyxLQUFLLElBQUk7UUFDZCxPQUFPLE1BQU0sQ0FBQztJQUVsQixJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ2xDLE9BQU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FB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TyxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQzdCLElBQUksRUFBTyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDeEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQzNHLENBQUM7UUFFRixhQUFhLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDdEMsYUFBYSxDQUFDLElBQUksR0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ2xDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUN0QyxhQUFhLENBQUMsSUFBSSxHQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDbEMsYUFBYSxDQUFDLElBQUksR0FBTyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzNGO0lBRUQsT0FBTyxJQUFJLG9DQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQTFERCxvREEwREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPdXRnb2luZ0h0dHBIZWFkZXJzIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQge1xuICAgIGNhc3RBcnJheSxcbiAgICBpc0FycmF5QnVmZmVyLFxuICAgIGlzQnVmZmVyLFxuICAgIGlzT2JqZWN0LFxuICAgIGlzVW5kZWZpbmVkLFxufSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGlzU3RyZWFtIGZyb20gJ2lzLXN0cmVhbSc7XG5pbXBvcnQge1xuICAgIEF1dGhPcHRpb25zLFxuICAgIENyZWRlbnRpYWxzLFxuICAgIEV4dGVybmFsUmVxdWVzdE9wdGlvbnMsXG4gICAgUGFyYW1zLFxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgICBSZXF1ZXN0T3B0aW9ucyxcbiAgICBwYXJzZVByb3h5VXJsLFxuICAgIFJlcXVlc3RPcHRpb25zUGFyYW1zLFxuICAgIHNhbWVPcmlnaW5DaGVjayxcbn0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgVGVzdFJ1biBmcm9tICcuLi9pbmRleCc7XG5pbXBvcnQgQ09OVEVOVF9UWVBFUyBmcm9tICcuLi8uLi9hc3NldHMvY29udGVudC10eXBlcyc7XG5pbXBvcnQgSFRUUF9IRUFERVJTIGZyb20gJy4uLy4uL3V0aWxzL2h0dHAtaGVhZGVycyc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4uLy4uL2Vycm9ycy90eXBlcyc7XG5pbXBvcnQgeyBBUElFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IEdldFByb3h5VXJsQ29tbWFuZCB9IGZyb20gJy4uL2NvbW1hbmRzL2FjdGlvbnMnO1xuaW1wb3J0IHsgQ2FsbHNpdGVSZWNvcmQgfSBmcm9tICdjYWxsc2l0ZS1yZWNvcmQnO1xuXG5jb25zdCBERUZBVUxUX0FDQ0VQVCAgICAgICAgICAgID0geyBbSFRUUF9IRUFERVJTLmFjY2VwdF06IGAke0NPTlRFTlRfVFlQRVMuanNvbn0sICR7Q09OVEVOVF9UWVBFUy50ZXh0UGxhaW59LCAke0NPTlRFTlRfVFlQRVMuYWxsfWAgfTtcbmNvbnN0IE1FVEhPRFNfV0lUSF9DT05URU5UX1RZUEUgPSBbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ107XG5jb25zdCBERUZBVUxUX1JFUVVFU1RfTUVUSE9EICAgID0gJ0dFVCc7XG5jb25zdCBERUZBVUxUX1BST1RPQ09MICAgICAgICAgID0gJ2h0dHA6JztcblxuZnVuY3Rpb24gc2V0Q29udGVudFR5cGVJZk5vdEV4aXN0cyAoaGVhZGVyczogT3V0Z29pbmdIdHRwSGVhZGVycywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghaXNVbmRlZmluZWQoaGVhZGVycykgJiYgaXNVbmRlZmluZWQoaGVhZGVyc1tIVFRQX0hFQURFUlMuY29udGVudFR5cGVdKSlcbiAgICAgICAgaGVhZGVyc1tIVFRQX0hFQURFUlMuY29udGVudFR5cGVdID0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZiAodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuICdudWxsJztcblxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKVxuICAgICAgICByZXR1cm4gdmFsdWUuY29uc3RydWN0b3IubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQm9keSAoaGVhZGVyczogT3V0Z29pbmdIdHRwSGVhZGVycywgYm9keT86IGFueSk6IEJ1ZmZlciB7XG4gICAgaWYgKCFib2R5KVxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oJycpO1xuXG4gICAgaWYgKHR5cGVPZihib2R5KSA9PT0gJ2Zvcm1kYXRhJyB8fFxuICAgICAgICB0eXBlT2YoYm9keSkgPT09ICdmaWxlJyB8fFxuICAgICAgICB0eXBlT2YoYm9keSkgPT09ICdibG9iJyB8fFxuICAgICAgICBpc0FycmF5QnVmZmVyKGJvZHkpIHx8XG4gICAgICAgIGlzQnVmZmVyKGJvZHkpIHx8XG4gICAgICAgIGlzU3RyZWFtKGJvZHkpXG4gICAgKVxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYm9keSk7XG4gICAgZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKVxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYm9keS5idWZmZXIpO1xuXG4gICAgZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgICAgICBzZXRDb250ZW50VHlwZUlmTm90RXhpc3RzKGhlYWRlcnMsIGAke0NPTlRFTlRfVFlQRVMudXJsZW5jb2RlZH07Y2hhcnNldD11dGYtOGApO1xuXG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShib2R5LnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdChib2R5KSB8fCBoZWFkZXJzICYmIGhlYWRlcnNbSFRUUF9IRUFERVJTLmNvbnRlbnRUeXBlXSA9PT0gQ09OVEVOVF9UWVBFUy5qc29uKSB7XG4gICAgICAgIHNldENvbnRlbnRUeXBlSWZOb3RFeGlzdHMoaGVhZGVycywgQ09OVEVOVF9UWVBFUy5qc29uKTtcblxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpXG4gICAgICAgIHNldENvbnRlbnRUeXBlSWZOb3RFeGlzdHMoaGVhZGVycywgQ09OVEVOVF9UWVBFUy50ZXh0UGxhaW4pO1xuXG4gICAgcmV0dXJuIGJvZHk7XG59XG5cbmZ1bmN0aW9uIGdldEF1dGhTdHJpbmcgKGF1dGg6IEF1dGhPcHRpb25zKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0Jhc2ljICcgKyBCdWZmZXIuZnJvbShhdXRoLnVzZXJuYW1lICsgJzonICsgYXV0aC5wYXNzd29yZCwgJ3V0ZjgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUhlYWRlck5hbWVzVG9Mb3dlcmNhc2UgKGhlYWRlcnM6IE91dGdvaW5nSHR0cEhlYWRlcnMpOiBPdXRnb2luZ0h0dHBIZWFkZXJzIHtcbiAgICBjb25zdCBsb3dlckNhc2VIZWFkZXJzOiBPdXRnb2luZ0h0dHBIZWFkZXJzID0ge307XG5cbiAgICBPYmplY3Qua2V5cyhoZWFkZXJzKS5mb3JFYWNoKGhlYWRlck5hbWUgPT4ge1xuICAgICAgICBsb3dlckNhc2VIZWFkZXJzW2hlYWRlck5hbWUudG9Mb3dlckNhc2UoKV0gPSBoZWFkZXJzW2hlYWRlck5hbWVdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxvd2VyQ2FzZUhlYWRlcnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByZXBhcmVIZWFkZXJzIChoZWFkZXJzOiBPdXRnb2luZ0h0dHBIZWFkZXJzLCBjdXJyZW50UGFnZVVybDogVVJMLCB1cmw6IFVSTCwgYm9keTogQnVmZmVyLCB0ZXN0UnVuOiBUZXN0UnVuLCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW4sIG9wdGlvbnM6IEV4dGVybmFsUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPE91dGdvaW5nSHR0cEhlYWRlcnM+IHtcbiAgICBjb25zdCB7IGhvc3QsIG9yaWdpbiB9ID0gdXJsO1xuXG4gICAgY29uc3QgcHJlcGFyZWRIZWFkZXJzOiBPdXRnb2luZ0h0dHBIZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BQ0NFUFQsIGNoYW5nZUhlYWRlck5hbWVzVG9Mb3dlcmNhc2UoaGVhZGVycykpO1xuXG4gICAgcHJlcGFyZWRIZWFkZXJzW0hUVFBfSEVBREVSUy5ob3N0XSAgICAgICAgICA9IGhvc3Q7XG4gICAgcHJlcGFyZWRIZWFkZXJzW0hUVFBfSEVBREVSUy5vcmlnaW5dICAgICAgICA9IG9yaWdpbjtcbiAgICBwcmVwYXJlZEhlYWRlcnNbSFRUUF9IRUFERVJTLmNvbnRlbnRMZW5ndGhdID0gYm9keS5sZW5ndGg7XG5cbiAgICBpZiAoaGVhZGVycy5tZXRob2QgJiYgTUVUSE9EU19XSVRIX0NPTlRFTlRfVFlQRS5pbmNsdWRlcyhTdHJpbmcoaGVhZGVycy5tZXRob2QpKSlcbiAgICAgICAgcHJlcGFyZWRIZWFkZXJzW0hUVFBfSEVBREVSUy5jb250ZW50VHlwZV0gPSBDT05URU5UX1RZUEVTLnVybGVuY29kZWQ7XG5cbiAgICBpZiAob3B0aW9ucy5hdXRoICYmIHdpdGhDcmVkZW50aWFscylcbiAgICAgICAgcHJlcGFyZWRIZWFkZXJzW0hUVFBfSEVBREVSUy5hdXRob3JpemF0aW9uXSA9IGdldEF1dGhTdHJpbmcob3B0aW9ucy5hdXRoKTtcblxuICAgIGlmIChvcHRpb25zLnByb3h5Py5hdXRoKVxuICAgICAgICBwcmVwYXJlZEhlYWRlcnNbSFRUUF9IRUFERVJTLnByb3h5QXV0aG9yaXphdGlvbl0gPSBnZXRBdXRoU3RyaW5nKG9wdGlvbnMucHJveHkuYXV0aCk7XG5cbiAgICBpZiAod2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlQ29va2llcyA9IGF3YWl0IHRlc3RSdW4uY29va2llUHJvdmlkZXIuZ2V0Q29va2llSGVhZGVyKGN1cnJlbnRQYWdlVXJsLmhyZWYsIGN1cnJlbnRQYWdlVXJsLmhvc3RuYW1lKTtcblxuICAgICAgICBpZiAoY3VycmVudFBhZ2VDb29raWVzKVxuICAgICAgICAgICAgcHJlcGFyZWRIZWFkZXJzW0hUVFBfSEVBREVSUy5jb29raWVdID0gY3VycmVudFBhZ2VDb29raWVzO1xuICAgIH1cblxuICAgIC8vTk9URTogQWRkaXRpb25hbCBoZWFkZXIgdG8gcmVjb2duaXplIEFQSSByZXF1ZXN0cyBpbiB0aGUgaGFtbWVyaGVhZFxuICAgIHByZXBhcmVkSGVhZGVyc1tIVFRQX0hFQURFUlMuaXNBcGlSZXF1ZXN0XSA9ICd0cnVlJztcblxuICAgIHJldHVybiBwcmVwYXJlZEhlYWRlcnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByZXBhcmVVcmwgKHRlc3RSdW46IFRlc3RSdW4sIGN1cnJlbnRQYWdlVXJsOiBVUkwsIHVybDogc3RyaW5nIHwgVVJMLCBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQgfCBudWxsKTogUHJvbWlzZTxVUkw+IHtcbiAgICBsZXQgcHJlcGFyZWRVcmw6IFVSTDtcblxuICAgIHRyeSB7XG4gICAgICAgIHByZXBhcmVkVXJsID0gdXJsIGluc3RhbmNlb2YgVVJMXG4gICAgICAgICAgICA/IHVybFxuICAgICAgICAgICAgOiBuZXcgVVJMKHVybCwgY3VycmVudFBhZ2VVcmwuaG9zdG5hbWUgPyBjdXJyZW50UGFnZVVybC5vcmlnaW4gOiB2b2lkIDApO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoY2FsbHNpdGUsIFJVTlRJTUVfRVJST1JTLnJlcXVlc3RVcmxJbnZhbGlkVmFsdWVFcnJvciwgdXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJlcGFyZWRVcmw7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVTZWFyY2hQYXJhbXMgKHVybDogc3RyaW5nLCBwYXJhbXM/OiBQYXJhbXMpOiBzdHJpbmcge1xuICAgIGlmICghcGFyYW1zKVxuICAgICAgICByZXR1cm4gdXJsO1xuXG4gICAgbGV0IHNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zO1xuXG4gICAgaWYgKHBhcmFtcyBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcylcbiAgICAgICAgc2VhcmNoUGFyYW1zID0gcGFyYW1zO1xuICAgIGVsc2Uge1xuICAgICAgICBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAoIXBhcmFtc1trZXldKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjYXN0QXJyYXkocGFyYW1zW2tleV0pLmZvckVhY2godiA9PiB7XG4gICAgICAgICAgICAgICAgc2VhcmNoUGFyYW1zLmFwcGVuZChrZXksIHR5cGVvZiB2ID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KHYpIDogU3RyaW5nKHYpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke3VybH0ke3VybC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nfSR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YDtcbn1cblxuZnVuY3Rpb24gZ2V0UHJveHlVcmwgKHRlc3RSdW46IFRlc3RSdW4sIHVybDogc3RyaW5nLCB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGVzdFJ1bi5leGVjdXRlQ29tbWFuZChuZXcgR2V0UHJveHlVcmxDb21tYW5kKHtcbiAgICAgICAgdXJsOiAgICAgdXJsLFxuICAgICAgICBvcHRpb25zOiB7IGNyZWRlbnRpYWxzOiB3aXRoQ3JlZGVudGlhbHMgPyBDcmVkZW50aWFscy5pbmNsdWRlIDogQ3JlZGVudGlhbHMub21pdCB9LFxuICAgIH0sIHRlc3RSdW4sIHRydWUpKSBhcyBQcm9taXNlPHN0cmluZz47XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQb3h5bGVzc1VybFBhcnRzICh1cmw6IFVSTCk6IFByb21pc2U8eyBob3N0bmFtZTogc3RyaW5nOyBwb3J0OiBzdHJpbmc7IGhyZWY6IHN0cmluZzsgcGFydEFmdGVySG9zdDogc3RyaW5nIH0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGhyZWYsIGhvc3RuYW1lLFxuICAgICAgICBwb3J0LCBwYXRobmFtZSxcbiAgICAgICAgc2VhcmNoLFxuICAgIH0gPSB1cmw7XG5cbiAgICBjb25zdCBwYXJ0QWZ0ZXJIb3N0ID0gW3BhdGhuYW1lLCBzZWFyY2hdLmpvaW4oJycpO1xuXG4gICAgcmV0dXJuIHsgcGFydEFmdGVySG9zdCwgaHJlZiwgaG9zdG5hbWUsIHBvcnQgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVBveHlVcmxQYXJ0cyAodGVzdFJ1bjogVGVzdFJ1biwgdXJsOiBVUkwsIHdpdGhDcmVkZW50aWFsczogYm9vbGVhbik6IFByb21pc2U8eyBob3N0bmFtZTogc3RyaW5nOyBwb3J0OiBzdHJpbmc7IGhyZWY6IHN0cmluZzsgcGFydEFmdGVySG9zdDogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBocmVmICAgICAgICAgICAgICAgPSBhd2FpdCBnZXRQcm94eVVybCh0ZXN0UnVuLCB1cmwuaHJlZiwgd2l0aENyZWRlbnRpYWxzKTtcbiAgICBjb25zdCB1cmxPYmogICAgICAgICAgICAgPSBhd2FpdCBwYXJzZVByb3h5VXJsKGhyZWYpO1xuICAgIGNvbnN0IHsgcGFydEFmdGVySG9zdCB9ICA9IHVybE9iajtcbiAgICBjb25zdCB7IGhvc3RuYW1lLCBwb3J0IH0gPSB1cmxPYmoucHJveHk7XG5cbiAgICByZXR1cm4geyBwYXJ0QWZ0ZXJIb3N0LCBocmVmLCBob3N0bmFtZSwgcG9ydCB9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVXJsUGFydHMgKHRlc3RSdW46IFRlc3RSdW4sIHVybDogVVJMLCB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW4pOiBQcm9taXNlPHsgaG9zdG5hbWU6IHN0cmluZzsgcG9ydDogc3RyaW5nOyBocmVmOiBzdHJpbmc7IHBhcnRBZnRlckhvc3Q6IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuIHRlc3RSdW4uaXNQcm94eWxlc3MoKSA/IHJlc29sdmVQb3h5bGVzc1VybFBhcnRzKHVybCkgOiByZXNvbHZlUG94eVVybFBhcnRzKHRlc3RSdW4sIHVybCwgd2l0aENyZWRlbnRpYWxzKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RPcHRpb25zIChjdXJyZW50UGFnZVVybDogVVJMLCB0ZXN0UnVuOiBUZXN0UnVuLCBvcHRpb25zOiBFeHRlcm5hbFJlcXVlc3RPcHRpb25zLCBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQgfCBudWxsKTogUHJvbWlzZTxSZXF1ZXN0T3B0aW9ucz4ge1xuICAgIG9wdGlvbnMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fTtcblxuICAgIGNvbnN0IHVybCAgICAgICAgICAgICA9IGF3YWl0IHByZXBhcmVVcmwodGVzdFJ1biwgY3VycmVudFBhZ2VVcmwsIG9wdGlvbnMudXJsLCBjYWxsc2l0ZSk7XG4gICAgY29uc3Qgd2l0aENyZWRlbnRpYWxzID0gIWN1cnJlbnRQYWdlVXJsLmhvc3QgfHwgc2FtZU9yaWdpbkNoZWNrKGN1cnJlbnRQYWdlVXJsLmhyZWYsIHVybC5ocmVmKSB8fCBvcHRpb25zLndpdGhDcmVkZW50aWFscyB8fCBmYWxzZTtcbiAgICBjb25zdCBib2R5ICAgICAgICAgICAgPSB0cmFuc2Zvcm1Cb2R5KG9wdGlvbnMuaGVhZGVycywgb3B0aW9ucy5ib2R5KTtcbiAgICBjb25zdCBoZWFkZXJzICAgICAgICAgPSBhd2FpdCBwcmVwYXJlSGVhZGVycyhvcHRpb25zLmhlYWRlcnMsIGN1cnJlbnRQYWdlVXJsLCB1cmwsIGJvZHksIHRlc3RSdW4sIHdpdGhDcmVkZW50aWFscywgb3B0aW9ucyk7XG4gICAgbGV0IGF1dGggICAgICAgICAgICAgID0gb3B0aW9ucy5hdXRoO1xuXG4gICAgY29uc3Qge1xuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgaHJlZixcbiAgICAgICAgcGFydEFmdGVySG9zdCxcbiAgICB9ID0gYXdhaXQgcmVzb2x2ZVVybFBhcnRzKHRlc3RSdW4sIHVybCwgd2l0aENyZWRlbnRpYWxzKTtcblxuICAgIGlmICghYXV0aCAmJiB1cmwudXNlcm5hbWUgJiYgdXJsLnBhc3N3b3JkKSB7XG4gICAgICAgIGF1dGggPSB7XG4gICAgICAgICAgICB1c2VybmFtZTogdXJsLnVzZXJuYW1lLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IHVybC5wYXNzd29yZCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0UGFyYW1zOiBSZXF1ZXN0T3B0aW9uc1BhcmFtcyA9IHtcbiAgICAgICAgbWV0aG9kOiAgICAgICAgIG9wdGlvbnMubWV0aG9kIHx8IERFRkFVTFRfUkVRVUVTVF9NRVRIT0QsXG4gICAgICAgIHVybDogICAgICAgICAgICBocmVmLFxuICAgICAgICBwcm90b2NvbDogICAgICAgREVGQVVMVF9QUk9UT0NPTCxcbiAgICAgICAgaG9zdG5hbWU6ICAgICAgIGhvc3RuYW1lLFxuICAgICAgICBob3N0OiAgICAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6ICAgICAgICAgICBwb3J0LFxuICAgICAgICBwYXRoOiAgICAgICAgICAgcHJlcGFyZVNlYXJjaFBhcmFtcyhwYXJ0QWZ0ZXJIb3N0LCBvcHRpb25zLnBhcmFtcyksXG4gICAgICAgIGF1dGg6ICAgICAgICAgICBhdXRoICYmIHdpdGhDcmVkZW50aWFscyA/IGAke2F1dGgudXNlcm5hbWV9OiR7YXV0aC5wYXNzd29yZH1gIDogdm9pZCAwLFxuICAgICAgICBoZWFkZXJzOiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgY3JlZGVudGlhbHM6ICAgIHdpdGhDcmVkZW50aWFscyA/IHRlc3RSdW4uc2Vzc2lvbi5nZXRBdXRoQ3JlZGVudGlhbHMoKSA6IHZvaWQgMCxcbiAgICAgICAgYm9keTogICAgICAgICAgIGJvZHksXG4gICAgICAgIGRpc2FibGVIdHRwMjogICB0ZXN0UnVuLnNlc3Npb24uaXNIdHRwMkRpc2FibGVkKCksXG4gICAgICAgIHJlcXVlc3RUaW1lb3V0OiB7XG4gICAgICAgICAgICBhamF4OiBvcHRpb25zLnRpbWVvdXQsXG4gICAgICAgICAgICBwYWdlOiBvcHRpb25zLnRpbWVvdXQsXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zLnByb3h5KSB7XG4gICAgICAgIHJlcXVlc3RQYXJhbXMuZXh0ZXJuYWxQcm94eVNldHRpbmdzID0ge1xuICAgICAgICAgICAgaG9zdDogICAgICBvcHRpb25zLnByb3h5Lmhvc3QsXG4gICAgICAgICAgICBob3N0bmFtZTogIG9wdGlvbnMucHJveHkuaG9zdCxcbiAgICAgICAgICAgIHBvcnQ6ICAgICAgb3B0aW9ucy5wcm94eS5wb3J0LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwcm94eUF1dGg6IG9wdGlvbnMucHJveHkuYXV0aCA/IGAke29wdGlvbnMucHJveHkuYXV0aC51c2VybmFtZX06JHtvcHRpb25zLnByb3h5LmF1dGgucGFzc3dvcmR9YCA6IHZvaWQgMCxcbiAgICAgICAgfTtcblxuICAgICAgICByZXF1ZXN0UGFyYW1zLnByb3RvY29sID0gdXJsLnByb3RvY29sO1xuICAgICAgICByZXF1ZXN0UGFyYW1zLmhvc3QgICAgID0gdXJsLmhvc3Q7XG4gICAgICAgIHJlcXVlc3RQYXJhbXMuaG9zdG5hbWUgPSB1cmwuaG9zdG5hbWU7XG4gICAgICAgIHJlcXVlc3RQYXJhbXMucG9ydCAgICAgPSB1cmwucG9ydDtcbiAgICAgICAgcmVxdWVzdFBhcmFtcy5wYXRoICAgICA9IHByZXBhcmVTZWFyY2hQYXJhbXModXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaCwgb3B0aW9ucy5wYXJhbXMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVxdWVzdE9wdGlvbnMocmVxdWVzdFBhcmFtcyk7XG59XG4iXX0=
@@ -8,7 +8,6 @@ const create_request_options_1 = require("./create-request-options");
8
8
  const process_response_data_1 = require("./process-response-data");
9
9
  const http_headers_1 = __importDefault(require("../../utils/http-headers"));
10
10
  const runtime_1 = require("../../errors/runtime");
11
- const lodash_1 = require("lodash");
12
11
  const types_1 = require("../../errors/types");
13
12
  const testcafe_hammerhead_1 = require("testcafe-hammerhead");
14
13
  async function send(requestOptions, rawResponse) {
@@ -39,8 +38,8 @@ async function sendRequestThroughAPI(testRun, options, callsite) {
39
38
  const setCookie = data.headers[http_headers_1.default.setCookie];
40
39
  const sameOrigin = !currentPageUrl.host || (0, testcafe_hammerhead_1.sameOriginCheck)(currentPageUrl.href, requestOptions.url);
41
40
  if (setCookie && (sameOrigin || options.withCredentials))
42
- testRun.session.cookies.copySyncCookies((0, lodash_1.castArray)(setCookie).join(';'), currentPageUrl.href);
41
+ await testRun.cookieProvider.setCookies(setCookie, currentPageUrl.href);
43
42
  return data;
44
43
  }
45
44
  exports.sendRequestThroughAPI = sendRequestThroughAPI;
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0LXJ1bi9yZXF1ZXN0L3NlbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EscUVBQWdFO0FBQ2hFLG1FQUE4RDtBQUM5RCw0RUFBb0Q7QUFDcEQsa0RBQTJEO0FBRTNELG1DQUFtQztBQUNuQyw4Q0FBb0Q7QUFFcEQsNkRBSTZCO0FBSXRCLEtBQUssVUFBVSxJQUFJLENBQUUsY0FBOEIsRUFBRSxXQUFxQjtJQUM3RSxNQUFNLE9BQU8sR0FBRyxJQUFJLHdDQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXZELE1BQU0sVUFBVSxHQUFHLElBQUksT0FBTyxDQUFpQyxPQUFPLENBQUMsRUFBRTtRQUNyRSxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQTBCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDMUQsT0FBTyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxJQUFJLEdBQUcsTUFBTSxVQUFVLENBQUM7SUFFOUIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBRWhCLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSwyQ0FBbUIsRUFBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFMUQsT0FBTztRQUNILE1BQU0sRUFBTSxJQUFJLENBQUMsVUFBVTtRQUMzQixVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWE7UUFDOUIsT0FBTyxFQUFLLElBQUksQ0FBQyxPQUFPO1FBQ3hCLElBQUksRUFBUSxJQUFJO0tBQ25CLENBQUM7QUFDTixDQUFDO0FBdEJELG9CQXNCQztBQUVNLEtBQUssVUFBVSxxQkFBcUIsQ0FBRSxPQUFnQixFQUFFLE9BQStCLEVBQUUsUUFBK0I7SUFDM0gsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUU5RCxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUEsNkNBQW9CLEVBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFOUYsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU3RCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7UUFDeEIsTUFBTSxJQUFJLDZCQUFtQixDQUFDLFFBQVEsRUFBRSxzQkFBYyxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFNUcsTUFBTSxTQUFTLEdBQUssSUFBSSxDQUFDLE9BQStCLENBQUMsc0JBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRixNQUFNLFVBQVUsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksSUFBQSxxQ0FBZSxFQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXBHLElBQUksU0FBUyxJQUFJLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUM7UUFDcEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUEsa0JBQVMsRUFBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWpHLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFqQkQsc0RBaUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRlc3RSdW4gZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IHsgSW5jb21pbmdIdHRwSGVhZGVycywgSW5jb21pbmdNZXNzYWdlIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgeyBFeHRlcm5hbFJlcXVlc3RPcHRpb25zLCBSZXNwb25zZU9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgY3JlYXRlUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL2NyZWF0ZS1yZXF1ZXN0LW9wdGlvbnMnO1xuaW1wb3J0IHsgcHJvY2Vzc1Jlc3BvbnNlRGF0YSB9IGZyb20gJy4vcHJvY2Vzcy1yZXNwb25zZS1kYXRhJztcbmltcG9ydCBIVFRQX0hFQURFUlMgZnJvbSAnLi4vLi4vdXRpbHMvaHR0cC1oZWFkZXJzJztcbmltcG9ydCB7IFJlcXVlc3RSdW50aW1lRXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvcnMvcnVudGltZSc7XG5pbXBvcnQgeyBDYWxsc2l0ZVJlY29yZCB9IGZyb20gJ2NhbGxzaXRlLXJlY29yZCc7XG5pbXBvcnQgeyBjYXN0QXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUlVOVElNRV9FUlJPUlMgfSBmcm9tICcuLi8uLi9lcnJvcnMvdHlwZXMnO1xuXG5pbXBvcnQge1xuICAgIERlc3RpbmF0aW9uUmVxdWVzdCxcbiAgICBzYW1lT3JpZ2luQ2hlY2ssXG4gICAgUmVxdWVzdE9wdGlvbnMsXG59IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuXG50eXBlIFN0cmljdEluY29taW5nTWVzc2FnZSA9IEluY29taW5nTWVzc2FnZSAmIHsgc3RhdHVzQ29kZTogbnVtYmVyOyBzdGF0dXNNZXNzYWdlOiBzdHJpbmcgfTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmQgKHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0T3B0aW9ucywgcmF3UmVzcG9uc2U/OiBib29sZWFuKTogUHJvbWlzZTxSZXNwb25zZU9wdGlvbnMgfCBzdHJpbmc+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IERlc3RpbmF0aW9uUmVxdWVzdChyZXF1ZXN0T3B0aW9ucyk7XG5cbiAgICBjb25zdCBkYXRhV2FpdGVyID0gbmV3IFByb21pc2U8U3RyaWN0SW5jb21pbmdNZXNzYWdlIHwgc3RyaW5nPihyZXNvbHZlID0+IHtcbiAgICAgICAgcmVxdWVzdC5vbigncmVzcG9uc2UnLCAocmVzOiBTdHJpY3RJbmNvbWluZ01lc3NhZ2UpID0+IHJlc29sdmUocmVzKSk7XG4gICAgICAgIHJlcXVlc3Qub24oJ2Vycm9yJywgKGVycjogRXJyb3IpID0+IHJlc29sdmUoZXJyLm1lc3NhZ2UpKTtcbiAgICAgICAgcmVxdWVzdC5vbignZmF0YWxFcnJvcicsIChtZXNzYWdlOiBzdHJpbmcpID0+IHJlc29sdmUobWVzc2FnZSkpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGRhdGFXYWl0ZXI7XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKVxuICAgICAgICByZXR1cm4gZGF0YTtcblxuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBwcm9jZXNzUmVzcG9uc2VEYXRhKGRhdGEsIHJhd1Jlc3BvbnNlKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogICAgIGRhdGEuc3RhdHVzQ29kZSxcbiAgICAgICAgc3RhdHVzVGV4dDogZGF0YS5zdGF0dXNNZXNzYWdlLFxuICAgICAgICBoZWFkZXJzOiAgICBkYXRhLmhlYWRlcnMsXG4gICAgICAgIGJvZHk6ICAgICAgIGJvZHksXG4gICAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRSZXF1ZXN0VGhyb3VnaEFQSSAodGVzdFJ1bjogVGVzdFJ1biwgb3B0aW9uczogRXh0ZXJuYWxSZXF1ZXN0T3B0aW9ucywgY2FsbHNpdGU6IENhbGxzaXRlUmVjb3JkIHwgbnVsbCk6IFByb21pc2U8UmVzcG9uc2VPcHRpb25zPiB7XG4gICAgY29uc3QgY3VycmVudFBhZ2VVcmwgPSBuZXcgVVJMKGF3YWl0IHRlc3RSdW4uZ2V0Q3VycmVudFVybCgpKTtcblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gYXdhaXQgY3JlYXRlUmVxdWVzdE9wdGlvbnMoY3VycmVudFBhZ2VVcmwsIHRlc3RSdW4sIG9wdGlvbnMsIGNhbGxzaXRlKTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBzZW5kKHJlcXVlc3RPcHRpb25zLCBvcHRpb25zLnJhd1Jlc3BvbnNlKTtcblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpXG4gICAgICAgIHRocm93IG5ldyBSZXF1ZXN0UnVudGltZUVycm9yKGNhbGxzaXRlLCBSVU5USU1FX0VSUk9SUy5yZXF1ZXN0UnVudGltZUVycm9yLCBkYXRhLnJlcGxhY2UoLzwuKj8+L2csICcnKSk7XG5cbiAgICBjb25zdCBzZXRDb29raWUgID0gKGRhdGEuaGVhZGVycyBhcyBJbmNvbWluZ0h0dHBIZWFkZXJzKVtIVFRQX0hFQURFUlMuc2V0Q29va2llXTtcbiAgICBjb25zdCBzYW1lT3JpZ2luID0gIWN1cnJlbnRQYWdlVXJsLmhvc3QgfHwgc2FtZU9yaWdpbkNoZWNrKGN1cnJlbnRQYWdlVXJsLmhyZWYsIHJlcXVlc3RPcHRpb25zLnVybCk7XG5cbiAgICBpZiAoc2V0Q29va2llICYmIChzYW1lT3JpZ2luIHx8IG9wdGlvbnMud2l0aENyZWRlbnRpYWxzKSApXG4gICAgICAgIHRlc3RSdW4uc2Vzc2lvbi5jb29raWVzLmNvcHlTeW5jQ29va2llcyhjYXN0QXJyYXkoc2V0Q29va2llKS5qb2luKCc7JyksIGN1cnJlbnRQYWdlVXJsLmhyZWYpO1xuXG4gICAgcmV0dXJuIGRhdGE7XG59XG4iXX0=
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0LXJ1bi9yZXF1ZXN0L3NlbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EscUVBQWdFO0FBQ2hFLG1FQUE4RDtBQUM5RCw0RUFBb0Q7QUFDcEQsa0RBQTJEO0FBRTNELDhDQUFvRDtBQUVwRCw2REFJNkI7QUFJdEIsS0FBSyxVQUFVLElBQUksQ0FBRSxjQUE4QixFQUFFLFdBQXFCO0lBQzdFLE1BQU0sT0FBTyxHQUFHLElBQUksd0NBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxPQUFPLENBQWlDLE9BQU8sQ0FBQyxFQUFFO1FBQ3JFLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBMEIsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFVLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxRCxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyxNQUFNLFVBQVUsQ0FBQztJQUU5QixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7UUFDeEIsT0FBTyxJQUFJLENBQUM7SUFFaEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLDJDQUFtQixFQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztJQUUxRCxPQUFPO1FBQ0gsTUFBTSxFQUFNLElBQUksQ0FBQyxVQUFVO1FBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYTtRQUM5QixPQUFPLEVBQUssSUFBSSxDQUFDLE9BQU87UUFDeEIsSUFBSSxFQUFRLElBQUk7S0FDbkIsQ0FBQztBQUNOLENBQUM7QUF0QkQsb0JBc0JDO0FBRU0sS0FBSyxVQUFVLHFCQUFxQixDQUFFLE9BQWdCLEVBQUUsT0FBK0IsRUFBRSxRQUErQjtJQUMzSCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBRTlELE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBQSw2Q0FBb0IsRUFBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUU5RixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTdELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtRQUN4QixNQUFNLElBQUksNkJBQW1CLENBQUMsUUFBUSxFQUFFLHNCQUFjLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU1RyxNQUFNLFNBQVMsR0FBSyxJQUFJLENBQUMsT0FBK0IsQ0FBQyxzQkFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sVUFBVSxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxJQUFBLHFDQUFlLEVBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFcEcsSUFBSSxTQUFTLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUNwRCxNQUFNLE9BQU8sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFNUUsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQWpCRCxzREFpQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVGVzdFJ1biBmcm9tICcuLi9pbmRleCc7XG5pbXBvcnQgeyBJbmNvbWluZ0h0dHBIZWFkZXJzLCBJbmNvbWluZ01lc3NhZ2UgfSBmcm9tICdodHRwJztcbmltcG9ydCB7IEV4dGVybmFsUmVxdWVzdE9wdGlvbnMsIFJlc3BvbnNlT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBjcmVhdGVSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vY3JlYXRlLXJlcXVlc3Qtb3B0aW9ucyc7XG5pbXBvcnQgeyBwcm9jZXNzUmVzcG9uc2VEYXRhIH0gZnJvbSAnLi9wcm9jZXNzLXJlc3BvbnNlLWRhdGEnO1xuaW1wb3J0IEhUVFBfSEVBREVSUyBmcm9tICcuLi8uLi91dGlscy9odHRwLWhlYWRlcnMnO1xuaW1wb3J0IHsgUmVxdWVzdFJ1bnRpbWVFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IENhbGxzaXRlUmVjb3JkIH0gZnJvbSAnY2FsbHNpdGUtcmVjb3JkJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3R5cGVzJztcblxuaW1wb3J0IHtcbiAgICBEZXN0aW5hdGlvblJlcXVlc3QsXG4gICAgc2FtZU9yaWdpbkNoZWNrLFxuICAgIFJlcXVlc3RPcHRpb25zLFxufSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcblxudHlwZSBTdHJpY3RJbmNvbWluZ01lc3NhZ2UgPSBJbmNvbWluZ01lc3NhZ2UgJiB7IHN0YXR1c0NvZGU6IG51bWJlcjsgc3RhdHVzTWVzc2FnZTogc3RyaW5nIH07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kIChyZXF1ZXN0T3B0aW9uczogUmVxdWVzdE9wdGlvbnMsIHJhd1Jlc3BvbnNlPzogYm9vbGVhbik6IFByb21pc2U8UmVzcG9uc2VPcHRpb25zIHwgc3RyaW5nPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyBEZXN0aW5hdGlvblJlcXVlc3QocmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgY29uc3QgZGF0YVdhaXRlciA9IG5ldyBQcm9taXNlPFN0cmljdEluY29taW5nTWVzc2FnZSB8IHN0cmluZz4ocmVzb2x2ZSA9PiB7XG4gICAgICAgIHJlcXVlc3Qub24oJ3Jlc3BvbnNlJywgKHJlczogU3RyaWN0SW5jb21pbmdNZXNzYWdlKSA9PiByZXNvbHZlKHJlcykpO1xuICAgICAgICByZXF1ZXN0Lm9uKCdlcnJvcicsIChlcnI6IEVycm9yKSA9PiByZXNvbHZlKGVyci5tZXNzYWdlKSk7XG4gICAgICAgIHJlcXVlc3Qub24oJ2ZhdGFsRXJyb3InLCAobWVzc2FnZTogc3RyaW5nKSA9PiByZXNvbHZlKG1lc3NhZ2UpKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBkYXRhV2FpdGVyO1xuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJylcbiAgICAgICAgcmV0dXJuIGRhdGE7XG5cbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcHJvY2Vzc1Jlc3BvbnNlRGF0YShkYXRhLCByYXdSZXNwb25zZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6ICAgICBkYXRhLnN0YXR1c0NvZGUsXG4gICAgICAgIHN0YXR1c1RleHQ6IGRhdGEuc3RhdHVzTWVzc2FnZSxcbiAgICAgICAgaGVhZGVyczogICAgZGF0YS5oZWFkZXJzLFxuICAgICAgICBib2R5OiAgICAgICBib2R5LFxuICAgIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kUmVxdWVzdFRocm91Z2hBUEkgKHRlc3RSdW46IFRlc3RSdW4sIG9wdGlvbnM6IEV4dGVybmFsUmVxdWVzdE9wdGlvbnMsIGNhbGxzaXRlOiBDYWxsc2l0ZVJlY29yZCB8IG51bGwpOiBQcm9taXNlPFJlc3BvbnNlT3B0aW9ucz4ge1xuICAgIGNvbnN0IGN1cnJlbnRQYWdlVXJsID0gbmV3IFVSTChhd2FpdCB0ZXN0UnVuLmdldEN1cnJlbnRVcmwoKSk7XG5cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IGF3YWl0IGNyZWF0ZVJlcXVlc3RPcHRpb25zKGN1cnJlbnRQYWdlVXJsLCB0ZXN0UnVuLCBvcHRpb25zLCBjYWxsc2l0ZSk7XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgc2VuZChyZXF1ZXN0T3B0aW9ucywgb3B0aW9ucy5yYXdSZXNwb25zZSk7XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKVxuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdFJ1bnRpbWVFcnJvcihjYWxsc2l0ZSwgUlVOVElNRV9FUlJPUlMucmVxdWVzdFJ1bnRpbWVFcnJvciwgZGF0YS5yZXBsYWNlKC88Lio/Pi9nLCAnJykpO1xuXG4gICAgY29uc3Qgc2V0Q29va2llICA9IChkYXRhLmhlYWRlcnMgYXMgSW5jb21pbmdIdHRwSGVhZGVycylbSFRUUF9IRUFERVJTLnNldENvb2tpZV07XG4gICAgY29uc3Qgc2FtZU9yaWdpbiA9ICFjdXJyZW50UGFnZVVybC5ob3N0IHx8IHNhbWVPcmlnaW5DaGVjayhjdXJyZW50UGFnZVVybC5ocmVmLCByZXF1ZXN0T3B0aW9ucy51cmwpO1xuXG4gICAgaWYgKHNldENvb2tpZSAmJiAoc2FtZU9yaWdpbiB8fCBvcHRpb25zLndpdGhDcmVkZW50aWFscykpXG4gICAgICAgIGF3YWl0IHRlc3RSdW4uY29va2llUHJvdmlkZXIuc2V0Q29va2llcyhzZXRDb29raWUsIGN1cnJlbnRQYWdlVXJsLmhyZWYpO1xuXG4gICAgcmV0dXJuIGRhdGE7XG59XG4iXX0=
@@ -0,0 +1,58 @@
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
+ exports.checkIsVM = void 0;
7
+ const os_1 = __importDefault(require("os"));
8
+ const promisified_functions_1 = require("./promisified-functions");
9
+ const PLATFORM = {
10
+ WIN: 'win32',
11
+ LINUX: 'linux',
12
+ MAC: 'darwin',
13
+ };
14
+ const VM_REGEX = /virtual|vmware|hyperv|wsl|hyper-v|microsoft|parallels|qemu/gi;
15
+ const NOT_FOUND_REGEX_LINUX = /systemd-detect-virt: not found/ig;
16
+ const VM_BIOS = '0';
17
+ const COMMANDS = {
18
+ WINDOWS_BIOS_NUMBER: 'WMIC BIOS GET SERIALNUMBER',
19
+ WINDOWS_MODEL: 'WMIC COMPUTERSYSTEM GET MODEL',
20
+ WINDOWS_MANUFACTURER: 'WMIC COMPUTERSYSTEM GET MANUFACTURER',
21
+ LINUX_DETECT_VM: 'systemd-detect-virt',
22
+ MAC_MANUFACTURER: 'ioreg -l | grep -e Manufacturer -e \'Vendor Name\'',
23
+ };
24
+ async function getCommandOutput(command) {
25
+ const { stdout } = await (0, promisified_functions_1.exec)(command);
26
+ return stdout;
27
+ }
28
+ async function isLinuxVM() {
29
+ let isVM = false;
30
+ try {
31
+ await (0, promisified_functions_1.exec)(COMMANDS.LINUX_DETECT_VM);
32
+ isVM = true;
33
+ }
34
+ catch (error) {
35
+ isVM = NOT_FOUND_REGEX_LINUX.test(error.stderr);
36
+ }
37
+ return isVM;
38
+ }
39
+ async function isWinVM() {
40
+ const biosNumberOutput = await getCommandOutput(COMMANDS.WINDOWS_BIOS_NUMBER);
41
+ const modelOutput = await getCommandOutput(COMMANDS.WINDOWS_MODEL);
42
+ const manufacturerOutput = await getCommandOutput(COMMANDS.WINDOWS_MANUFACTURER);
43
+ return biosNumberOutput === VM_BIOS || VM_REGEX.test(modelOutput) || VM_REGEX.test(manufacturerOutput);
44
+ }
45
+ async function isMacVM() {
46
+ return VM_REGEX.test(await getCommandOutput(COMMANDS.MAC_MANUFACTURER));
47
+ }
48
+ async function checkIsVM() {
49
+ switch (os_1.default.platform()) {
50
+ case PLATFORM.LINUX: return await isLinuxVM();
51
+ case PLATFORM.WIN: return await isWinVM();
52
+ case PLATFORM.MAC: return await isMacVM();
53
+ default:
54
+ return false;
55
+ }
56
+ }
57
+ exports.checkIsVM = checkIsVM;
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2staXMtdm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvY2hlY2staXMtdm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNENBQW9CO0FBQ3BCLG1FQUErQztBQUUvQyxNQUFNLFFBQVEsR0FBRztJQUNiLEdBQUcsRUFBSSxPQUFPO0lBQ2QsS0FBSyxFQUFFLE9BQU87SUFDZCxHQUFHLEVBQUksUUFBUTtDQUNsQixDQUFDO0FBRUYsTUFBTSxRQUFRLEdBQWdCLDhEQUE4RCxDQUFDO0FBQzdGLE1BQU0scUJBQXFCLEdBQUcsa0NBQWtDLENBQUM7QUFFakUsTUFBTSxPQUFPLEdBQUksR0FBRyxDQUFDO0FBQ3JCLE1BQU0sUUFBUSxHQUFHO0lBQ2IsbUJBQW1CLEVBQUcsNEJBQTRCO0lBQ2xELGFBQWEsRUFBUywrQkFBK0I7SUFDckQsb0JBQW9CLEVBQUUsc0NBQXNDO0lBQzVELGVBQWUsRUFBTyxxQkFBcUI7SUFDM0MsZ0JBQWdCLEVBQU0sb0RBQW9EO0NBQzdFLENBQUM7QUFFRixLQUFLLFVBQVUsZ0JBQWdCLENBQUUsT0FBZTtJQUM1QyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLDRCQUFJLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFFdkMsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUVELEtBQUssVUFBVSxTQUFTO0lBQ3BCLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQztJQUVqQixJQUFJO1FBQ0EsTUFBTSxJQUFBLDRCQUFJLEVBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXJDLElBQUksR0FBRyxJQUFJLENBQUM7S0FDZjtJQUNELE9BQU8sS0FBVSxFQUFFO1FBQ2YsSUFBSSxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDbkQ7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsS0FBSyxVQUFVLE9BQU87SUFDbEIsTUFBTSxnQkFBZ0IsR0FBSyxNQUFNLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sV0FBVyxHQUFVLE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUVqRixPQUFPLGdCQUFnQixLQUFLLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUMzRyxDQUFDO0FBRUQsS0FBSyxVQUFVLE9BQU87SUFDbEIsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRU0sS0FBSyxVQUFVLFNBQVM7SUFDM0IsUUFBUSxZQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDbkIsS0FBSyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxNQUFNLFNBQVMsRUFBRSxDQUFDO1FBQzlDLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sTUFBTSxPQUFPLEVBQUUsQ0FBQztRQUMxQyxLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLE1BQU0sT0FBTyxFQUFFLENBQUM7UUFDMUM7WUFDSSxPQUFPLEtBQUssQ0FBQztLQUNwQjtBQUNMLENBQUM7QUFSRCw4QkFRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnLi9wcm9taXNpZmllZC1mdW5jdGlvbnMnO1xuXG5jb25zdCBQTEFURk9STSA9IHtcbiAgICBXSU46ICAgJ3dpbjMyJyxcbiAgICBMSU5VWDogJ2xpbnV4JyxcbiAgICBNQUM6ICAgJ2RhcndpbicsXG59O1xuXG5jb25zdCBWTV9SRUdFWCAgICAgICAgICAgICAgPSAvdmlydHVhbHx2bXdhcmV8aHlwZXJ2fHdzbHxoeXBlci12fG1pY3Jvc29mdHxwYXJhbGxlbHN8cWVtdS9naTtcbmNvbnN0IE5PVF9GT1VORF9SRUdFWF9MSU5VWCA9IC9zeXN0ZW1kLWRldGVjdC12aXJ0OiBub3QgZm91bmQvaWc7XG5cbmNvbnN0IFZNX0JJT1MgID0gJzAnO1xuY29uc3QgQ09NTUFORFMgPSB7XG4gICAgV0lORE9XU19CSU9TX05VTUJFUjogICdXTUlDIEJJT1MgR0VUIFNFUklBTE5VTUJFUicsXG4gICAgV0lORE9XU19NT0RFTDogICAgICAgICdXTUlDIENPTVBVVEVSU1lTVEVNIEdFVCBNT0RFTCcsXG4gICAgV0lORE9XU19NQU5VRkFDVFVSRVI6ICdXTUlDIENPTVBVVEVSU1lTVEVNIEdFVCBNQU5VRkFDVFVSRVInLFxuICAgIExJTlVYX0RFVEVDVF9WTTogICAgICAnc3lzdGVtZC1kZXRlY3QtdmlydCcsXG4gICAgTUFDX01BTlVGQUNUVVJFUjogICAgICdpb3JlZyAtbCB8IGdyZXAgLWUgTWFudWZhY3R1cmVyIC1lIFxcJ1ZlbmRvciBOYW1lXFwnJyxcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENvbW1hbmRPdXRwdXQgKGNvbW1hbmQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWMoY29tbWFuZCk7XG5cbiAgICByZXR1cm4gc3Rkb3V0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc0xpbnV4Vk0gKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCBpc1ZNID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgICBhd2FpdCBleGVjKENPTU1BTkRTLkxJTlVYX0RFVEVDVF9WTSk7XG5cbiAgICAgICAgaXNWTSA9IHRydWU7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIGlzVk0gPSBOT1RfRk9VTkRfUkVHRVhfTElOVVgudGVzdChlcnJvci5zdGRlcnIpO1xuICAgIH1cblxuICAgIHJldHVybiBpc1ZNO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc1dpblZNICgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBiaW9zTnVtYmVyT3V0cHV0ICAgPSBhd2FpdCBnZXRDb21tYW5kT3V0cHV0KENPTU1BTkRTLldJTkRPV1NfQklPU19OVU1CRVIpO1xuICAgIGNvbnN0IG1vZGVsT3V0cHV0ICAgICAgICA9IGF3YWl0IGdldENvbW1hbmRPdXRwdXQoQ09NTUFORFMuV0lORE9XU19NT0RFTCk7XG4gICAgY29uc3QgbWFudWZhY3R1cmVyT3V0cHV0ID0gYXdhaXQgZ2V0Q29tbWFuZE91dHB1dChDT01NQU5EUy5XSU5ET1dTX01BTlVGQUNUVVJFUik7XG5cbiAgICByZXR1cm4gYmlvc051bWJlck91dHB1dCA9PT0gVk1fQklPUyB8fCBWTV9SRUdFWC50ZXN0KG1vZGVsT3V0cHV0KSB8fCBWTV9SRUdFWC50ZXN0KG1hbnVmYWN0dXJlck91dHB1dCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzTWFjVk0gKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBWTV9SRUdFWC50ZXN0KGF3YWl0IGdldENvbW1hbmRPdXRwdXQoQ09NTUFORFMuTUFDX01BTlVGQUNUVVJFUikpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tJc1ZNICgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBzd2l0Y2ggKG9zLnBsYXRmb3JtKCkpIHtcbiAgICAgICAgY2FzZSBQTEFURk9STS5MSU5VWDogcmV0dXJuIGF3YWl0IGlzTGludXhWTSgpO1xuICAgICAgICBjYXNlIFBMQVRGT1JNLldJTjogcmV0dXJuIGF3YWl0IGlzV2luVk0oKTtcbiAgICAgICAgY2FzZSBQTEFURk9STS5NQUM6IHJldHVybiBhd2FpdCBpc01hY1ZNKCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIl19
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "testcafe",
3
3
  "description": "Automated browser testing for the modern web development stack.",
4
4
  "license": "MIT",
5
- "version": "2.3.1-rc.2",
5
+ "version": "2.4.0-rc.1",
6
6
  "author": {
7
7
  "name": "Developer Express Inc.",
8
8
  "url": "https://www.devexpress.com/"
@@ -19,7 +19,7 @@
19
19
  "url": "git+https://github.com/DevExpress/testcafe.git"
20
20
  },
21
21
  "engines": {
22
- "node": ">=14.0.0"
22
+ "node": ">=16.0.0"
23
23
  },
24
24
  "main": "lib/index",
25
25
  "types": "ts-defs/index.d.ts",
@@ -77,18 +77,18 @@
77
77
  "@babel/preset-flow": "^7.12.1",
78
78
  "@babel/preset-react": "^7.12.1",
79
79
  "@babel/runtime": "^7.12.5",
80
+ "@devexpress/bin-v8-flags-filter": "^1.3.0",
80
81
  "@miherlosev/esm": "3.2.26",
81
82
  "@types/node": "^12.20.10",
82
83
  "async-exit-hook": "^1.1.2",
83
84
  "babel-plugin-module-resolver": "^5.0.0",
84
85
  "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
85
- "@devexpress/bin-v8-flags-filter": "^1.3.0",
86
86
  "bowser": "^2.8.1",
87
87
  "callsite": "^1.0.0",
88
88
  "callsite-record": "^4.0.0",
89
89
  "chai": "4.3.4",
90
90
  "chalk": "^2.3.0",
91
- "chrome-remote-interface": "^0.31.3",
91
+ "chrome-remote-interface": "^0.32.1",
92
92
  "coffeescript": "^2.3.1",
93
93
  "commander": "^8.3.0",
94
94
  "debug": "^4.3.1",
@@ -139,10 +139,11 @@
139
139
  "resolve-from": "^4.0.0",
140
140
  "sanitize-filename": "^1.6.0",
141
141
  "semver": "^5.6.0",
142
+ "set-cookie-parser": "^2.5.1",
142
143
  "source-map-support": "^0.5.16",
143
144
  "strip-bom": "^2.0.0",
144
145
  "testcafe-browser-tools": "2.0.23",
145
- "testcafe-hammerhead": "28.4.2",
146
+ "testcafe-hammerhead": "29.0.0",
146
147
  "testcafe-legacy-api": "5.1.6",
147
148
  "testcafe-reporter-dashboard": "^0.2.10",
148
149
  "testcafe-reporter-json": "^2.1.0",
@@ -151,6 +152,7 @@
151
152
  "testcafe-reporter-spec": "^2.1.1",
152
153
  "testcafe-reporter-xunit": "^2.2.1",
153
154
  "testcafe-safe-storage": "^1.1.1",
155
+ "testcafe-selector-generator": "^0.1.0",
154
156
  "time-limit-promise": "^1.0.2",
155
157
  "tmp": "0.0.28",
156
158
  "tree-kill": "^1.2.2",
@@ -175,6 +177,7 @@
175
177
  "@types/mustache": "^0.8.32",
176
178
  "@types/prompts": "^2.0.14",
177
179
  "@types/semver": "^7.3.4",
180
+ "@types/set-cookie-parser": "^2.4.2",
178
181
  "@types/source-map-support": "^0.5.0",
179
182
  "@types/useragent": "^2.1.1",
180
183
  "@typescript-eslint/eslint-plugin": "^5.29.0",
@@ -189,7 +192,7 @@
189
192
  "chrome-launcher": "^0.15.0",
190
193
  "connect": "^3.4.0",
191
194
  "cross-env": "^7.0.3",
192
- "devtools-protocol": "0.0.1078443",
195
+ "devtools-protocol": "0.0.1109433",
193
196
  "dom-walk": "^0.1.1",
194
197
  "escape-string-regexp": "^4.0.0",
195
198
  "eslint": "^7.13.0",
@@ -1,40 +0,0 @@
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 types_1 = require("../types");
7
- // @ts-ignore
8
- const hammerhead_1 = require("../../client/core/deps/hammerhead");
9
- const utils_1 = require("./utils");
10
- const axis_values_1 = __importDefault(require("../../client/core/utils/values/axis-values"));
11
- const MOUSE_EVENT_OPTIONS = {
12
- clickCount: 1,
13
- button: 'left',
14
- };
15
- class ProxylessEventSimulator {
16
- constructor(dispatchEventFn, leftTopPoint) {
17
- this._dispatchEventFn = dispatchEventFn;
18
- this._leftTopPoint = leftTopPoint || new axis_values_1.default(0, 0);
19
- }
20
- _createMouseEventOptions(type, options) {
21
- return hammerhead_1.utils.extend({
22
- x: options.options.clientX + this._leftTopPoint.x,
23
- y: options.options.clientY + this._leftTopPoint.y,
24
- modifiers: (0, utils_1.calculateKeyModifiersValue)(options.options),
25
- button: (0, utils_1.calculateMouseButtonValue)(options.options),
26
- type,
27
- }, MOUSE_EVENT_OPTIONS);
28
- }
29
- mouseDown(options) {
30
- const eventOptions = this._createMouseEventOptions('mousePressed', options);
31
- return this._dispatchEventFn(types_1.EventType.Mouse, eventOptions);
32
- }
33
- mouseUp(options) {
34
- const eventOptions = this._createMouseEventOptions('mouseReleased', options);
35
- return this._dispatchEventFn(types_1.EventType.Mouse, eventOptions);
36
- }
37
- }
38
- exports.default = ProxylessEventSimulator;
39
- module.exports = exports.default;
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtc2ltdWxhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3h5bGVzcy9jbGllbnQvZXZlbnQtc2ltdWxhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0NBQXFDO0FBQ3JDLGFBQWE7QUFDYixrRUFBMEQ7QUFDMUQsbUNBQWdGO0FBQ2hGLDZGQUFvRTtBQUVwRSxNQUFNLG1CQUFtQixHQUFHO0lBQ3hCLFVBQVUsRUFBRSxDQUFDO0lBQ2IsTUFBTSxFQUFNLE1BQU07Q0FDckIsQ0FBQztBQUVGLE1BQXFCLHVCQUF1QjtJQUl4QyxZQUFhLGVBQXlCLEVBQUUsWUFBaUM7UUFDckUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQWUsQ0FBQztRQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFNLFlBQVksSUFBSSxJQUFJLHFCQUFVLENBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTyx3QkFBd0IsQ0FBRSxJQUFZLEVBQUUsT0FBWTtRQUN4RCxPQUFPLGtCQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2hCLENBQUMsRUFBVSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDekQsQ0FBQyxFQUFVLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6RCxTQUFTLEVBQUUsSUFBQSxrQ0FBMEIsRUFBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3RELE1BQU0sRUFBSyxJQUFBLGlDQUF5QixFQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDckQsSUFBSTtTQUNQLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU0sU0FBUyxDQUFFLE9BQVk7UUFDMUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU1RSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBUyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sT0FBTyxDQUFFLE9BQVk7UUFDeEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU3RSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBUyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNoRSxDQUFDO0NBQ0o7QUE5QkQsMENBOEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRUeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgdXRpbHMgfSBmcm9tICcuLi8uLi9jbGllbnQvY29yZS9kZXBzL2hhbW1lcmhlYWQnO1xuaW1wb3J0IHsgY2FsY3VsYXRlS2V5TW9kaWZpZXJzVmFsdWUsIGNhbGN1bGF0ZU1vdXNlQnV0dG9uVmFsdWUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBBeGlzVmFsdWVzIGZyb20gJy4uLy4uL2NsaWVudC9jb3JlL3V0aWxzL3ZhbHVlcy9heGlzLXZhbHVlcyc7XG5cbmNvbnN0IE1PVVNFX0VWRU5UX09QVElPTlMgPSB7XG4gICAgY2xpY2tDb3VudDogMSxcbiAgICBidXR0b246ICAgICAnbGVmdCcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm94eWxlc3NFdmVudFNpbXVsYXRvciB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwYXRjaEV2ZW50Rm46IEZ1bmN0aW9uO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2xlZnRUb3BQb2ludDogQXhpc1ZhbHVlczxudW1iZXI+O1xuICAgIGNvbnN0cnVjdG9yIChkaXNwYXRjaEV2ZW50Rm46IEZ1bmN0aW9uLCBsZWZ0VG9wUG9pbnQ/OiBBeGlzVmFsdWVzPG51bWJlcj4pIHtcbiAgICAgICAgdGhpcy5fZGlzcGF0Y2hFdmVudEZuID0gZGlzcGF0Y2hFdmVudEZuO1xuICAgICAgICB0aGlzLl9sZWZ0VG9wUG9pbnQgICAgPSBsZWZ0VG9wUG9pbnQgfHwgbmV3IEF4aXNWYWx1ZXM8bnVtYmVyPigwLCAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVNb3VzZUV2ZW50T3B0aW9ucyAodHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBhbnkge1xuICAgICAgICByZXR1cm4gdXRpbHMuZXh0ZW5kKHtcbiAgICAgICAgICAgIHg6ICAgICAgICAgb3B0aW9ucy5vcHRpb25zLmNsaWVudFggKyB0aGlzLl9sZWZ0VG9wUG9pbnQueCxcbiAgICAgICAgICAgIHk6ICAgICAgICAgb3B0aW9ucy5vcHRpb25zLmNsaWVudFkgKyB0aGlzLl9sZWZ0VG9wUG9pbnQueSxcbiAgICAgICAgICAgIG1vZGlmaWVyczogY2FsY3VsYXRlS2V5TW9kaWZpZXJzVmFsdWUob3B0aW9ucy5vcHRpb25zKSxcbiAgICAgICAgICAgIGJ1dHRvbjogICAgY2FsY3VsYXRlTW91c2VCdXR0b25WYWx1ZShvcHRpb25zLm9wdGlvbnMpLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgfSwgTU9VU0VfRVZFTlRfT1BUSU9OUyk7XG4gICAgfVxuXG4gICAgcHVibGljIG1vdXNlRG93biAob3B0aW9uczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGV2ZW50T3B0aW9ucyA9IHRoaXMuX2NyZWF0ZU1vdXNlRXZlbnRPcHRpb25zKCdtb3VzZVByZXNzZWQnLCBvcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hFdmVudEZuKEV2ZW50VHlwZS5Nb3VzZSwgZXZlbnRPcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbW91c2VVcCAob3B0aW9uczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGV2ZW50T3B0aW9ucyA9IHRoaXMuX2NyZWF0ZU1vdXNlRXZlbnRPcHRpb25zKCdtb3VzZVJlbGVhc2VkJywgb3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoRXZlbnRGbihFdmVudFR5cGUuTW91c2UsIGV2ZW50T3B0aW9ucyk7XG4gICAgfVxufVxuIl19