testcafe 3.4.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/skip-js-errors/index.js +1 -1
- package/lib/api/test-controller/index.js +4 -4
- package/lib/browser/connection/gateway/index.js +10 -1
- package/lib/browser/connection/index.js +9 -1
- package/lib/browser/connection/service-routes.js +2 -1
- package/lib/browser/provider/built-in/dedicated/base.js +7 -3
- package/lib/browser/provider/built-in/dedicated/chrome/build-chrome-args.js +5 -3
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/index.js +44 -28
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/utils.js +31 -0
- package/lib/browser/provider/built-in/dedicated/chrome/index.js +18 -15
- package/lib/browser/provider/built-in/dedicated/chrome/local-chrome.js +3 -3
- package/lib/browser/provider/index.js +14 -3
- package/lib/browser/provider/plugin-host.js +5 -2
- package/lib/cli/argument-parser/index.js +4 -1
- package/lib/client/automation/index.js +28 -5
- package/lib/client/automation/index.min.js +1 -1
- package/lib/client/browser/idle-page/index.js +1 -0
- package/lib/client/core/index.js +21 -5
- package/lib/client/core/index.min.js +1 -1
- package/lib/client/core/utils/style.js +6 -2
- package/lib/client/driver/generate-id.js +4 -2
- package/lib/client/driver/index.js +94 -24
- package/lib/client/driver/index.min.js +1 -1
- package/lib/client/test-run/iframe.js.mustache +11 -1
- package/lib/client/test-run/index.js.mustache +25 -18
- package/lib/client/ui/index.js +41 -16
- package/lib/client/ui/index.min.js +1 -1
- package/lib/client/ui/styles.css +1 -0
- package/lib/client-functions/client-function-builder.js +3 -3
- package/lib/client-functions/selectors/selector-builder.js +3 -3
- package/lib/configuration/default-values.js +3 -2
- package/lib/configuration/option-names.js +3 -1
- package/lib/configuration/run-option-names.js +2 -1
- package/lib/configuration/screenshot-option-names.js +2 -1
- package/lib/configuration/testcafe-configuration.js +3 -1
- package/lib/configuration/types.js +1 -1
- package/lib/native-automation/index.js +40 -6
- package/lib/native-automation/request-pipeline/index.js +9 -5
- package/lib/native-automation/request-pipeline/special-handlers.js +19 -5
- package/lib/native-automation/request-pipeline/test-run-bridge.js +4 -3
- package/lib/native-automation/types.js +1 -1
- package/lib/notifications/warning-message.js +2 -1
- package/lib/reporter/command/command-formatter.js +5 -5
- package/lib/runner/browser-job.js +3 -2
- package/lib/runner/fixture-hook-controller.js +14 -5
- package/lib/runner/index.js +13 -6
- package/lib/runner/task/index.js +3 -2
- package/lib/runner/test-run-controller.js +5 -1
- package/lib/screenshots/capturer.js +7 -5
- package/lib/screenshots/index.js +4 -3
- package/lib/test-run/bookmark.js +1 -1
- package/lib/test-run/browser-manipulation-queue.js +2 -1
- package/lib/test-run/commands/actions.js +3 -3
- package/lib/test-run/commands/browser-manipulation.js +2 -1
- package/lib/test-run/commands/execute-client-function.js +47 -0
- package/lib/test-run/commands/observation.js +10 -38
- package/lib/test-run/commands/service.js +3 -2
- package/lib/test-run/commands/validations/initializers.js +3 -3
- package/lib/test-run/index.js +20 -11
- package/lib/test-run/session-controller.js +3 -3
- package/lib/utils/path-pattern.js +8 -5
- package/package.json +3 -3
- package/ts-defs/index.d.ts +4 -0
- package/ts-defs/selectors.d.ts +4 -0
- package/ts-defs/testcafe-scripts.d.ts +4 -0
|
@@ -59,4 +59,4 @@ function prepareOptionsObject(opts) {
|
|
|
59
59
|
opts.pageUrl = (0, make_reg_exp_1.parseRegExpString)(opts.pageUrl);
|
|
60
60
|
return opts;
|
|
61
61
|
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3NraXAtanMtZXJyb3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUdBLDJEQUE2RDtBQUU3RCw2R0FBbUY7QUFFbkYsTUFBTSw4QkFBOEIsR0FBRzs7OztTQUk5QixDQUFDO0FBRVYsU0FBZ0IsdUNBQXVDLENBQUUsR0FBWTtJQUNqRSxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLElBQUksSUFBSSxHQUFHLENBQUM7QUFDM0QsQ0FBQztBQUZELDBGQUVDO0FBRUQsU0FBZ0IsMkJBQTJCLENBQUUsR0FBWTtJQUNyRCxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLENBQUMsdUNBQXVDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0YsQ0FBQztBQUZELGtFQUVDO0FBRUQsU0FBZ0IsaUNBQWlDLENBQUUsT0FBMkcsRUFBRSxlQUFnQyxFQUFFO0lBQzlMLElBQUksT0FBTyxPQUFPLEtBQUssVUFBVTtRQUM3QixPQUFPLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUUzRCxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDO0FBTEQsOEVBS0M7QUFFRCxTQUFTLHdCQUF3QixDQUFFLE9BQTZCLEVBQUUsWUFBNkI7SUFDM0YsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDekMsQ0FBQztBQUVELFNBQWdCLDBCQUEwQixDQUFFLE9BQTJHO0lBQ25KLE9BQU8sR0FBRyxpQ0FBaUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVyRCxJQUFJLHVDQUF1QyxDQUFDLE9BQU8sQ0FBQztRQUNoRCxPQUFPLGtDQUFrQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXZELElBQUksMkJBQTJCLENBQUMsT0FBTyxDQUFDO1FBQ3BDLE9BQU8sZ0NBQWdDLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUUzRSxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDO0FBVkQsZ0VBVUM7QUFFRCxTQUFTLGdDQUFnQyxDQUFFLElBQStCO0lBQ3RFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxJQUFJLENBQUMsS0FBSyxHQUFLLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSw4QkFBOEIsQ0FBeUIsQ0FBQztJQUV6RixNQUFNLGVBQWUsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRWpFLE9BQU8sa0NBQWtDLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELFNBQVMsa0NBQWtDLENBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUF5QztJQUNwRyxNQUFNLFVBQVUsR0FBRyxzQkFBc0IsQ0FBQztJQUMxQyxNQUFNLE9BQU8sR0FBTSxFQUFFLFlBQVksRUFBRSxDQUFDO0lBRXBDLE9BQU8sSUFBSSxpQ0FBcUIsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFO1FBQzFDLGFBQWEsRUFBRSxVQUFVO1FBQ3pCLFNBQVMsRUFBTSxVQUFVO0tBQzVCLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNwQixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBRSxJQUErQjtJQUMxRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUEsZ0NBQWlCLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUssSUFBQSxnQ0FBaUIsRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFBLGdDQUFpQixFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUvQyxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBEaWN0aW9uYXJ5LCBTa2lwSnNFcnJvcnNDYWxsYmFjaywgU2tpcEpzRXJyb3JzQ2FsbGJhY2tXaXRoT3B0aW9uc09iamVjdCwgU2tpcEpzRXJyb3JzT3B0aW9uc09iamVjdCxcbn0gZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHBhcnNlUmVnRXhwU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvbWFrZS1yZWctZXhwJztcbmltcG9ydCB7IEV4ZWN1dGVDbGllbnRGdW5jdGlvbkNvbW1hbmQgfSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9leGVjdXRlLWNsaWVudC1mdW5jdGlvbic7XG5pbXBvcnQgQ2xpZW50RnVuY3Rpb25CdWlsZGVyIGZyb20gJy4uLy4uL2NsaWVudC1mdW5jdGlvbnMvY2xpZW50LWZ1bmN0aW9uLWJ1aWxkZXInO1xuXG5jb25zdCBTS0lQX0pTX0VSUk9SU19PQkpFQ1RfRlVOQ1RJT04gPSBgXG4gICAgICAgICAgICAgICAgbGV0IHsgc3RhY2ssIHBhZ2VVcmwsIG1lc3NhZ2UgfSA9IGRlcHM7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sudGVzdChlcnIuc3RhY2spICYmIHBhZ2VVcmwudGVzdChlcnIucGFnZVVybCkgJiYgbWVzc2FnZS50ZXN0KGVyci5tZXNzYWdlKTtcbiAgICAgICAgYDtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2tpcEpzRXJyb3JzQ2FsbGJhY2tXaXRoT3B0aW9uc09iamVjdCAob2JqOiB1bmtub3duKTogb2JqIGlzIFNraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnNPYmplY3Qge1xuICAgIHJldHVybiAhIW9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiAnZm4nIGluIG9iajtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2tpcEpzRXJyb3JzT3B0aW9uc09iamVjdCAob2JqOiB1bmtub3duKTogb2JqIGlzIFNraXBKc0Vycm9yc09wdGlvbnNPYmplY3Qge1xuICAgIHJldHVybiAhIW9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiAhaXNTa2lwSnNFcnJvcnNDYWxsYmFja1dpdGhPcHRpb25zT2JqZWN0KG9iaik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVTa2lwSnNFcnJvcnNDYWxsYmFja1dyYXBwZWQgKG9wdGlvbnM6IGJvb2xlYW4gfCBTa2lwSnNFcnJvcnNPcHRpb25zT2JqZWN0IHwgU2tpcEpzRXJyb3JzQ2FsbGJhY2sgfCBTa2lwSnNFcnJvcnNDYWxsYmFja1dpdGhPcHRpb25zT2JqZWN0LCBkZXBlbmRlbmNpZXM6IERpY3Rpb25hcnk8YW55PiA9IHt9KTogU2tpcEpzRXJyb3JzT3B0aW9uc09iamVjdCB8IFNraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnNPYmplY3QgfCBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiB3cmFwU2tpcEpzRXJyb3JzQ2FsbGJhY2sob3B0aW9ucywgZGVwZW5kZW5jaWVzKTtcblxuICAgIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiB3cmFwU2tpcEpzRXJyb3JzQ2FsbGJhY2sgKG9wdGlvbnM6IFNraXBKc0Vycm9yc0NhbGxiYWNrLCBkZXBlbmRlbmNpZXM6IERpY3Rpb25hcnk8YW55Pik6IFNraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnNPYmplY3Qge1xuICAgIHJldHVybiB7IGZuOiBvcHRpb25zLCBkZXBlbmRlbmNpZXMgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTa2lwSnNFcnJvcnNPcHRpb25zIChvcHRpb25zOiBib29sZWFuIHwgU2tpcEpzRXJyb3JzT3B0aW9uc09iamVjdCB8IFNraXBKc0Vycm9yc0NhbGxiYWNrIHwgU2tpcEpzRXJyb3JzQ2FsbGJhY2tXaXRoT3B0aW9uc09iamVjdCk6IGJvb2xlYW4gfCBFeGVjdXRlQ2xpZW50RnVuY3Rpb25Db21tYW5kIHtcbiAgICBvcHRpb25zID0gZW5zdXJlU2tpcEpzRXJyb3JzQ2FsbGJhY2tXcmFwcGVkKG9wdGlvbnMpO1xuXG4gICAgaWYgKGlzU2tpcEpzRXJyb3JzQ2FsbGJhY2tXaXRoT3B0aW9uc09iamVjdChvcHRpb25zKSlcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVNraXBKc0Vycm9yc0NhbGxiYWNrRnVuY3Rpb24ob3B0aW9ucyk7XG5cbiAgICBpZiAoaXNTa2lwSnNFcnJvcnNPcHRpb25zT2JqZWN0KG9wdGlvbnMpKVxuICAgICAgICByZXR1cm4gY3JlYXRlU2tpcEpzRXJyb3JzT2JqZWN0RnVuY3Rpb24ocHJlcGFyZU9wdGlvbnNPYmplY3Qob3B0aW9ucykpO1xuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNraXBKc0Vycm9yc09iamVjdEZ1bmN0aW9uIChkZXBzOiBTa2lwSnNFcnJvcnNPcHRpb25zT2JqZWN0KTogRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZCB7XG4gICAgZGVwcy5tZXNzYWdlID0gZGVwcy5tZXNzYWdlIHx8IG5ldyBSZWdFeHAoJycpO1xuICAgIGRlcHMuc3RhY2sgICA9IGRlcHMuc3RhY2sgfHwgbmV3IFJlZ0V4cCgnJyk7XG4gICAgZGVwcy5wYWdlVXJsID0gZGVwcy5wYWdlVXJsIHx8IG5ldyBSZWdFeHAoJycpO1xuXG4gICAgY29uc3QgZnVuYyA9IG5ldyBGdW5jdGlvbignZXJyJywgU0tJUF9KU19FUlJPUlNfT0JKRUNUX0ZVTkNUSU9OKSBhcyBTa2lwSnNFcnJvcnNDYWxsYmFjaztcblxuICAgIGNvbnN0IGNhbGxiYWNrV3JhcHBlciA9IHdyYXBTa2lwSnNFcnJvcnNDYWxsYmFjayhmdW5jLCB7IGRlcHMgfSk7XG5cbiAgICByZXR1cm4gY3JlYXRlU2tpcEpzRXJyb3JzQ2FsbGJhY2tGdW5jdGlvbihjYWxsYmFja1dyYXBwZXIpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTa2lwSnNFcnJvcnNDYWxsYmFja0Z1bmN0aW9uICh7IGZuLCBkZXBlbmRlbmNpZXMgfTogU2tpcEpzRXJyb3JzQ2FsbGJhY2tXaXRoT3B0aW9uc09iamVjdCk6IEV4ZWN1dGVDbGllbnRGdW5jdGlvbkNvbW1hbmQge1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSAnc2tpcEpzRXJyb3JzIGhhbmRsZXInO1xuICAgIGNvbnN0IG9wdGlvbnMgICAgPSB7IGRlcGVuZGVuY2llcyB9O1xuXG4gICAgcmV0dXJuIG5ldyBDbGllbnRGdW5jdGlvbkJ1aWxkZXIoZm4sIG9wdGlvbnMsIHtcbiAgICAgICAgaW5zdGFudGlhdGlvbjogbWV0aG9kTmFtZSxcbiAgICAgICAgZXhlY3V0aW9uOiAgICAgbWV0aG9kTmFtZSxcbiAgICB9KS5nZXRDb21tYW5kKCk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVPcHRpb25zT2JqZWN0IChvcHRzOiBTa2lwSnNFcnJvcnNPcHRpb25zT2JqZWN0KTogU2tpcEpzRXJyb3JzT3B0aW9uc09iamVjdCB7XG4gICAgb3B0cy5tZXNzYWdlID0gcGFyc2VSZWdFeHBTdHJpbmcob3B0cy5tZXNzYWdlKTtcbiAgICBvcHRzLnN0YWNrICAgPSBwYXJzZVJlZ0V4cFN0cmluZyhvcHRzLnN0YWNrKTtcbiAgICBvcHRzLnBhZ2VVcmwgPSBwYXJzZVJlZ0V4cFN0cmluZyhvcHRzLnBhZ2VVcmwpO1xuXG4gICAgcmV0dXJuIG9wdHM7XG59XG4iXX0=
|
|
@@ -102,7 +102,7 @@ class TestController {
|
|
|
102
102
|
}
|
|
103
103
|
_validateMultipleWindowCommand(apiMethodName) {
|
|
104
104
|
const { disableMultipleWindows, activeWindowId } = this.testRun;
|
|
105
|
-
if (this.testRun.isNativeAutomation)
|
|
105
|
+
if (this.testRun.isNativeAutomation && !this.testRun.isExperimentalMultipleWindows)
|
|
106
106
|
throw new test_run_1.MultipleWindowsModeIsNotSupportedInNativeAutomationModeError(apiMethodName);
|
|
107
107
|
if (disableMultipleWindows)
|
|
108
108
|
throw new test_run_1.MultipleWindowsModeIsDisabledError(apiMethodName);
|
|
@@ -409,8 +409,8 @@ class TestController {
|
|
|
409
409
|
const callsite = (0, get_callsite_1.getCallsiteForMethod)(assertion_2.AssertionCommand.methodName);
|
|
410
410
|
return new assertion_1.default(actual, this, callsite);
|
|
411
411
|
}
|
|
412
|
-
[(0, delegated_api_2.default)(observation_1.DebugCommand.methodName)]() {
|
|
413
|
-
return this.enqueueCommand(observation_1.DebugCommand);
|
|
412
|
+
[(0, delegated_api_2.default)(observation_1.DebugCommand.methodName)](selector) {
|
|
413
|
+
return this.enqueueCommand(observation_1.DebugCommand, { selector });
|
|
414
414
|
}
|
|
415
415
|
[(0, delegated_api_2.default)(actions_1.SetTestSpeedCommand.methodName)](speed) {
|
|
416
416
|
return this.enqueueCommand(actions_1.SetTestSpeedCommand, { speed });
|
|
@@ -446,4 +446,4 @@ exports.default = TestController;
|
|
|
446
446
|
TestController.API_LIST = (0, delegated_api_1.getDelegatedAPIList)(TestController.prototype);
|
|
447
447
|
(0, delegated_api_1.delegateAPI)(TestController.prototype, TestController.API_LIST, { useCurrentCtxAsHandler: true });
|
|
448
448
|
module.exports = exports.default;
|
|
449
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3Rlc3QtY29udHJvbGxlci9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9GQUFvRjtBQUNwRixvREFBNkI7QUFDN0IsbUNBTWdCO0FBRWhCLDREQUFpRTtBQUNqRSw2R0FBbUY7QUFDbkYsNERBQW9DO0FBQ3BDLDZEQUE2RTtBQUM3RSxvR0FBa0U7QUFDbEUsK0RBQW1GO0FBRW5GLDZEQTBDeUM7QUFFekMsdUZBTXNEO0FBRXRELHFFQUFnRjtBQUNoRiwyREFBOEU7QUFDOUUsd0RBQTBEO0FBRTFELG9EQUkrQjtBQUUvQixpRUFBcUU7QUFDckUsbURBQWtGO0FBQ2xGLDhGQUFvRTtBQUNwRSxzREFBbUY7QUFDbkYsa0RBQTJEO0FBQzNELDhDQUFvRDtBQUNwRCxzRUFBNkM7QUFDN0Msb0VBQTJDO0FBQzNDLHFGQUFvRjtBQUVwRixNQUFNLFlBQVksR0FBRyxnQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQztBQUU1QyxNQUFxQixjQUFjO0lBQy9CLFlBQWEsT0FBTzs7UUFDaEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUU5QixJQUFJLENBQUMsT0FBTyxHQUFVLE9BQU8sQ0FBQztRQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLGdCQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSx3QkFBYSxDQUFDLElBQUksRUFBRSxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxJQUFJLDBDQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRTVFLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCxrQ0FBa0M7UUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FB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RSxzQkFBc0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVE9ETzogRml4IGh0dHBzOi8vZ2l0aHViLmNvbS9EZXZFeHByZXNzL3Rlc3RjYWZlL2lzc3Vlcy80MTM5IHRvIGdldCByaWQgb2YgUGlua2llXG5pbXBvcnQgUHJvbWlzZSBmcm9tICdwaW5raWUnO1xuaW1wb3J0IHtcbiAgICBpZGVudGl0eSxcbiAgICBhc3NpZ24sXG4gICAgaXNOaWwgYXMgaXNOdWxsT3JVbmRlZmluZWQsXG4gICAgZmxhdHRlbkRlZXAsXG4gICAgY2FzdEFycmF5LFxufSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBnZXRDYWxsc2l0ZUZvck1ldGhvZCB9IGZyb20gJy4uLy4uL2Vycm9ycy9nZXQtY2FsbHNpdGUnO1xuaW1wb3J0IENsaWVudEZ1bmN0aW9uQnVpbGRlciBmcm9tICcuLi8uLi9jbGllbnQtZnVuY3Rpb25zL2NsaWVudC1mdW5jdGlvbi1idWlsZGVyJztcbmltcG9ydCBBc3NlcnRpb24gZnJvbSAnLi9hc3NlcnRpb24nO1xuaW1wb3J0IHsgZ2V0RGVsZWdhdGVkQVBJTGlzdCwgZGVsZWdhdGVBUEkgfSBmcm9tICcuLi8uLi91dGlscy9kZWxlZ2F0ZWQtYXBpJztcbmltcG9ydCBhZGRXYXJuaW5nIGZyb20gJy4uLy4uL25vdGlmaWNhdGlvbnMvYWRkLXJlbmRlcmVkLXdhcm5pbmcnO1xuaW1wb3J0IHsgZ2V0RGVwcmVjYXRpb25NZXNzYWdlLCBERVBSRUNBVEVEIH0gZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9ucy9kZXByZWNhdGVkJztcblxuaW1wb3J0IHtcbiAgICBDbGlja0NvbW1hbmQsXG4gICAgUmlnaHRDbGlja0NvbW1hbmQsXG4gICAgRG91YmxlQ2xpY2tDb21tYW5kLFxuICAgIEhvdmVyQ29tbWFuZCxcbiAgICBEcmFnQ29tbWFuZCxcbiAgICBEcmFnVG9FbGVtZW50Q29tbWFuZCxcbiAgICBUeXBlVGV4dENvbW1hbmQsXG4gICAgU2VsZWN0VGV4dENvbW1hbmQsXG4gICAgU2VsZWN0VGV4dEFyZWFDb250ZW50Q29tbWFuZCxcbiAgICBTZWxlY3RFZGl0YWJsZUNvbnRlbnRDb21tYW5kLFxuICAgIFByZXNzS2V5Q29tbWFuZCxcbiAgICBOYXZpZ2F0ZVRvQ29tbWFuZCxcbiAgICBTZXRGaWxlc1RvVXBsb2FkQ29tbWFuZCxcbiAgICBDbGVhclVwbG9hZENvbW1hbmQsXG4gICAgU3dpdGNoVG9JZnJhbWVDb21tYW5kLFxuICAgIFN3aXRjaFRvTWFpbldpbmRvd0NvbW1hbmQsXG4gICAgT3BlbldpbmRvd0NvbW1hbmQsXG4gICAgQ2xvc2VXaW5kb3dDb21tYW5kLFxuICAgIEdldEN1cnJlbnRXaW5kb3dDb21tYW5kLFxuICAgIFN3aXRjaFRvV2luZG93Q29tbWFuZCxcbiAgICBTd2l0Y2hUb1dpbmRvd0J5UHJlZGljYXRlQ29tbWFuZCxcbiAgICBTd2l0Y2hUb1BhcmVudFdpbmRvd0NvbW1hbmQsXG4gICAgU3dpdGNoVG9QcmV2aW91c1dpbmRvd0NvbW1hbmQsXG4gICAgU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQsXG4gICAgR2V0TmF0aXZlRGlhbG9nSGlzdG9yeUNvbW1hbmQsXG4gICAgR2V0QnJvd3NlckNvbnNvbGVNZXNzYWdlc0NvbW1hbmQsXG4gICAgU2V0VGVzdFNwZWVkQ29tbWFuZCxcbiAgICBTZXRQYWdlTG9hZFRpbWVvdXRDb21tYW5kLFxuICAgIFNjcm9sbENvbW1hbmQsXG4gICAgU2Nyb2xsQnlDb21tYW5kLFxuICAgIFNjcm9sbEludG9WaWV3Q29tbWFuZCxcbiAgICBVc2VSb2xlQ29tbWFuZCxcbiAgICBEaXNwYXRjaEV2ZW50Q29tbWFuZCxcbiAgICBHZXRDb29raWVzQ29tbWFuZCxcbiAgICBTZXRDb29raWVzQ29tbWFuZCxcbiAgICBEZWxldGVDb29raWVzQ29tbWFuZCxcbiAgICBSZXF1ZXN0Q29tbWFuZCxcbiAgICBTa2lwSnNFcnJvcnNDb21tYW5kLFxuICAgIEFkZFJlcXVlc3RIb29rc0NvbW1hbmQsXG4gICAgUmVtb3ZlUmVxdWVzdEhvb2tzQ29tbWFuZCxcbiAgICBSZXBvcnRDb21tYW5kLFxufSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9hY3Rpb25zJztcblxuaW1wb3J0IHtcbiAgICBUYWtlU2NyZWVuc2hvdENvbW1hbmQsXG4gICAgVGFrZUVsZW1lbnRTY3JlZW5zaG90Q29tbWFuZCxcbiAgICBSZXNpemVXaW5kb3dDb21tYW5kLFxuICAgIFJlc2l6ZVdpbmRvd1RvRml0RGV2aWNlQ29tbWFuZCxcbiAgICBNYXhpbWl6ZVdpbmRvd0NvbW1hbmQsXG59IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL2Jyb3dzZXItbWFuaXB1bGF0aW9uJztcblxuaW1wb3J0IHsgV2FpdENvbW1hbmQsIERlYnVnQ29tbWFuZCB9IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL29ic2VydmF0aW9uJztcbmltcG9ydCB7IGNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQgYXMgY3JlYXRlQ29udGV4dCB9IGZyb20gJy4vZXhlY3V0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgaXNTZWxlY3RvciB9IGZyb20gJy4uLy4uL2NsaWVudC1mdW5jdGlvbnMvdHlwZXMnO1xuXG5pbXBvcnQge1xuICAgIE11bHRpcGxlV2luZG93c01vZGVJc0Rpc2FibGVkRXJyb3IsXG4gICAgTXVsdGlwbGVXaW5kb3dzTW9kZUlzTm90QXZhaWxhYmxlSW5SZW1vdGVCcm93c2VyRXJyb3IsXG4gICAgTXVsdGlwbGVXaW5kb3dzTW9kZUlzTm90U3VwcG9ydGVkSW5OYXRpdmVBdXRvbWF0aW9uTW9kZUVycm9yLFxufSBmcm9tICcuLi8uLi9lcnJvcnMvdGVzdC1ydW4nO1xuXG5pbXBvcnQgeyBBc3NlcnRpb25Db21tYW5kIH0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvYXNzZXJ0aW9uJztcbmltcG9ydCB7IGdldENhbGxzaXRlSWQsIGdldENhbGxzaXRlU3RhY2tGcmFtZVN0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzL2NhbGxzaXRlJztcbmltcG9ydCBSZUV4ZWN1dGFibGVQcm9taXNlIGZyb20gJy4uLy4uL3V0aWxzL3JlLWV4ZWN1dGFibGUtcHJvbWlzZSc7XG5pbXBvcnQgeyBzZW5kUmVxdWVzdFRocm91Z2hBUEkgYXMgc2VuZFJlcXVlc3QgfSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9yZXF1ZXN0L3NlbmQnO1xuaW1wb3J0IHsgUmVxdWVzdFJ1bnRpbWVFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3R5cGVzJztcbmltcG9ydCBDdXN0b21BY3Rpb25zIGZyb20gJy4vY3VzdG9tLWFjdGlvbnMnO1xuaW1wb3J0IGRlbGVnYXRlZEFQSSBmcm9tICcuL2RlbGVnYXRlZC1hcGknO1xuaW1wb3J0IHsgZ2V0Rml4dHVyZUluZm8sIGdldFRlc3RJbmZvIH0gZnJvbSAnLi4vLi4vdXRpbHMvZ2V0LXRlc3QtYW5kLWZpeHR1cmUtaW5mbyc7XG5cbmNvbnN0IG9yaWdpbmFsVGhlbiA9IFByb21pc2UucmVzb2x2ZSgpLnRoZW47XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RDb250cm9sbGVyIHtcbiAgICBjb25zdHJ1Y3RvciAodGVzdFJ1bikge1xuICAgICAgICB0aGlzLl9leGVjdXRpb25Db250ZXh0ID0gbnVsbDtcblxuICAgICAgICB0aGlzLnRlc3RSdW4gICAgICAgID0gdGVzdFJ1bjtcbiAgICAgICAgdGhpcy5leGVjdXRpb25DaGFpbiA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB0aGlzLndhcm5pbmdMb2cgICAgID0gdGVzdFJ1bi53YXJuaW5nTG9nO1xuICAgICAgICB0aGlzLl9jdXN0b21BY3Rpb25zID0gbmV3IEN1c3RvbUFjdGlvbnModGhpcywgdGVzdFJ1bj8ub3B0cz8uY3VzdG9tQWN0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fYWRkVGVzdENvbnRyb2xsZXJUb0V4ZWN1dGlvbkNoYWluKCk7XG4gICAgfVxuXG4gICAgX2FkZFRlc3RDb250cm9sbGVyVG9FeGVjdXRpb25DaGFpbiAoKSB7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4uX3Rlc3RDb250cm9sbGVyID0gdGhpcztcbiAgICB9XG5cbiAgICAvLyBOT1RFOiBUZXN0Q2FmZSBleGVjdXRlcyBhY3Rpb25zIGFuZCBhc3NlcnRpb25zIGFzeW5jaHJvbm91c2x5IGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG4gICAgLy8gYSkgVGhlIGBhd2FpdGAga2V5d29yZCB0aGF0IHByb2NlZWRzIHRoZSBtZXRob2QgZGVjbGFyYXRpb24gdHJpZ2dlcnMgdGhlIGB0aGVuYCBmdW5jdGlvbiBvZiBhIFByb21pc2UuXG4gICAgLy8gYikgVGhlIGFjdGlvbiBpcyBjaGFpbmVkIHRvIGFub3RoZXIgYGF3YWl0ZWRgIG1ldGhvZC5cbiAgICAvL1xuICAgIC8vIEluIG9yZGVyIHRvIHRyYWNrIG1pc3NpbmcgYGF3YWl0YCBzdGF0ZW1lbnRzLCBUZXN0Q2FmZSBleHBvc2VzIGEgc3BlY2lhbCBQcm9taXNlIHRvIHRoZSB1c2VyLlxuICAgIC8vIFdoZW4gVGVzdENhZmUgZGV0ZWN0cyBhIG1pc3NpbmcgYGF3YWl0YCBzdGF0ZW1lbnQsIGl0IGNvbXBhcmVzIHRoZSBtZXRob2QncyBjYWxsc2l0ZSB0byB0aGUgY2FsbCBzaXRlIG9mIHRoZSBleHBvc2VkIFByb21pc2UuXG4gICAgLy8gVGhpcyB3b3JrYXJvdW5kIGlzIG5lY2Vzc2FyeSBmb3Igc2l0dWF0aW9ucyBsaWtlIHRoZXNlOlxuICAgIC8vXG4gICAgLy8gdmFyIHQyID0gdC5jbGljaygnI2J0bjEnKTsgLy8gPC0tIHN0b3JlcyBuZXcgY2FsbHNpdGVXaXRob3V0QXdhaXRcbiAgICAvLyBhd2FpdCB0MjsgICAgICAgICAgICAgICAgICAvLyA8LS0gY2FsbHNpdGVXaXRob3V0QXdhaXQgPSBudWxsXG4gICAgLy8gdC5jbGljaygnI2J0bjInKTsgICAgICAgICAgLy8gPC0tIHN0b3JlcyBuZXcgY2FsbHNpdGVXaXRob3V0QXdhaXRcbiAgICAvLyBhd2FpdCB0Mi5jbGljaygnI2J0bjMnKTsgICAvLyA8LS0gd2l0aG91dCBjaGVjayBpdCB3aWxsIHNldCBjYWxsc2l0ZVdpdGhvdXRBd2FpdCA9IG51bGwsIHNvIHdlIHdpbGwgbG9zdCB0cmFja2luZ1xuICAgIF9jcmVhdGVFeHRlbmRlZFByb21pc2UgKHByb21pc2UsIGNhbGxzaXRlKSB7XG4gICAgICAgIGNvbnN0IGV4dGVuZGVkUHJvbWlzZSAgICAgPSBwcm9taXNlLnRoZW4oaWRlbnRpdHkpO1xuICAgICAgICBjb25zdCBvYnNlcnZlZENhbGxzaXRlcyAgID0gdGhpcy50ZXN0UnVuLm9ic2VydmVkQ2FsbHNpdGVzO1xuICAgICAgICBjb25zdCBtYXJrQ2FsbHNpdGVBd2FpdGVkID0gKCkgPT4gb2JzZXJ2ZWRDYWxsc2l0ZXMuY2FsbHNpdGVzV2l0aG91dEF3YWl0LmRlbGV0ZShjYWxsc2l0ZSk7XG5cbiAgICAgICAgZXh0ZW5kZWRQcm9taXNlLnRoZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBtYXJrQ2FsbHNpdGVBd2FpdGVkKCk7XG5cbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFRoZW4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBkZWxlZ2F0ZUFQSShleHRlbmRlZFByb21pc2UsIFRlc3RDb250cm9sbGVyLkFQSV9MSVNULCB7XG4gICAgICAgICAgICBoYW5kbGVyOiAgICAgdGhpcyxcbiAgICAgICAgICAgIHByb3h5TWV0aG9kOiBtYXJrQ2FsbHNpdGVBd2FpdGVkLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZXh0ZW5kZWRQcm9taXNlO1xuICAgIH1cblxuICAgIF9jcmVhdGVDb21tYW5kIChDbWRDdG9yLCBjbWRBcmdzLCBjYWxsc2l0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDbWRDdG9yKGNtZEFyZ3MsIHRoaXMudGVzdFJ1bik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZXJyLmNhbGxzaXRlID0gY2FsbHNpdGU7XG5cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9lbnF1ZXVlVGFzayAoYXBpTWV0aG9kTmFtZSwgY3JlYXRlVGFza0V4ZWN1dG9yLCBjYWxsc2l0ZSkge1xuICAgICAgICBjb25zdCBleGVjdXRvciA9IGNyZWF0ZVRhc2tFeGVjdXRvcigpO1xuXG4gICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4udGhlbiA9IG9yaWdpbmFsVGhlbjtcbiAgICAgICAgdGhpcy5leGVjdXRpb25DaGFpbiAgICAgID0gdGhpcy5leGVjdXRpb25DaGFpbi50aGVuKGV4ZWN1dG9yKTtcblxuICAgICAgICB0aGlzLnRlc3RSdW4ub2JzZXJ2ZWRDYWxsc2l0ZXMuY2FsbHNpdGVzV2l0aG91dEF3YWl0LmFkZChjYWxsc2l0ZSk7XG5cbiAgICAgICAgdGhpcy5leGVjdXRpb25DaGFpbiA9IHRoaXMuX2NyZWF0ZUV4dGVuZGVkUHJvbWlzZSh0aGlzLmV4ZWN1dGlvbkNoYWluLCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgdGhpcy5fYWRkVGVzdENvbnRyb2xsZXJUb0V4ZWN1dGlvbkNoYWluKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0aW9uQ2hhaW47XG4gICAgfVxuXG4gICAgZW5xdWV1ZUNvbW1hbmQgKENtZEN0b3IsIGNtZEFyZ3MsIHZhbGlkYXRlQ29tbWFuZEZuLCBjYWxsc2l0ZSkge1xuICAgICAgICBjYWxsc2l0ZSA9IGNhbGxzaXRlIHx8IGdldENhbGxzaXRlRm9yTWV0aG9kKENtZEN0b3IubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHRoaXMuX2NyZWF0ZUNvbW1hbmQoQ21kQ3RvciwgY21kQXJncywgY2FsbHNpdGUpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGVDb21tYW5kRm4gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbW1hbmRGbih0aGlzLCBjb21tYW5kLCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVUYXNrKGNvbW1hbmQubWV0aG9kTmFtZSwgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuLmV4ZWN1dGVDb21tYW5kKGNvbW1hbmQsIGNhbGxzaXRlKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIGNhbGxzaXRlKTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVNdWx0aXBsZVdpbmRvd0NvbW1hbmQgKGFwaU1ldGhvZE5hbWUpIHtcbiAgICAgICAgY29uc3QgeyBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzLCBhY3RpdmVXaW5kb3dJZCB9ID0gdGhpcy50ZXN0UnVuO1xuXG4gICAgICAgIGlmICh0aGlzLnRlc3RSdW4uaXNOYXRpdmVBdXRvbWF0aW9uKVxuICAgICAgICAgICAgdGhyb3cgbmV3IE11bHRpcGxlV2luZG93c01vZGVJc05vdFN1cHBvcnRlZEluTmF0aXZlQXV0b21hdGlvbk1vZGVFcnJvcihhcGlNZXRob2ROYW1lKTtcblxuICAgICAgICBpZiAoZGlzYWJsZU11bHRpcGxlV2luZG93cylcbiAgICAgICAgICAgIHRocm93IG5ldyBNdWx0aXBsZVdpbmRvd3NNb2RlSXNEaXNhYmxlZEVycm9yKGFwaU1ldGhvZE5hbWUpO1xuXG4gICAgICAgIGlmICghYWN0aXZlV2luZG93SWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgTXVsdGlwbGVXaW5kb3dzTW9kZUlzTm90QXZhaWxhYmxlSW5SZW1vdGVCcm93c2VyRXJyb3IoYXBpTWV0aG9kTmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0RXhlY3V0aW9uQ29udGV4dCAoKSB7XG4gICAgICAgIGlmICghdGhpcy5fZXhlY3V0aW9uQ29udGV4dClcbiAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQgPSBjcmVhdGVDb250ZXh0KHRoaXMudGVzdFJ1bik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQ7XG4gICAgfVxuXG4gICAgLy8gQVBJIGltcGxlbWVudGF0aW9uXG4gICAgLy8gV2UgbmVlZCBpbXBsZW1lbnRhdGlvbiBtZXRob2RzIHRvIG9idGFpbiBjb3JyZWN0IGNhbGxzaXRlcy4gSWYgd2UgdXNlIHBsYWluIEFQSVxuICAgIC8vIG1ldGhvZHMgaW4gY2hhaW5lZCB3cmFwcGVycyB0aGVuIHdlIHdpbGwgaGF2ZSBjYWxsc2l0ZSBmb3IgdGhlIHdyYXBwZWQgbWV0aG9kXG4gICAgLy8gaW4gdGhpcyBmaWxlIGluc3RlYWQgb2YgY2hhaW5lZCBtZXRob2QgY2FsbHNpdGUgaW4gdXNlciBjb2RlLlxuICAgIF9jdHgkZ2V0dGVyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5jdHg7XG4gICAgfVxuXG4gICAgX2N0eCRzZXR0ZXIgKHZhbCkge1xuICAgICAgICB0aGlzLnRlc3RSdW4uY3R4ID0gdmFsO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uY3R4O1xuICAgIH1cblxuICAgIF9maXh0dXJlQ3R4JGdldHRlciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uZml4dHVyZUN0eDtcbiAgICB9XG5cbiAgICBfYnJvd3NlciRnZXR0ZXIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuLmJyb3dzZXI7XG4gICAgfVxuXG4gICAgX2N1c3RvbUFjdGlvbnMkZ2V0dGVyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1c3RvbUFjdGlvbnMgfHwgbmV3IEN1c3RvbUFjdGlvbnModGhpcywgdGhpcy50ZXN0UnVuLm9wdHMuY3VzdG9tQWN0aW9ucyk7XG4gICAgfVxuXG4gICAgX3Rlc3QkZ2V0dGVyICgpIHtcbiAgICAgICAgcmV0dXJuIGdldFRlc3RJbmZvKHRoaXMudGVzdFJ1bik7XG4gICAgfVxuXG4gICAgX2ZpeHR1cmUkZ2V0dGVyICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEZpeHR1cmVJbmZvKHRoaXMudGVzdFJ1bik7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShEaXNwYXRjaEV2ZW50Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBldmVudE5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChEaXNwYXRjaEV2ZW50Q29tbWFuZCwgeyBzZWxlY3RvciwgZXZlbnROYW1lLCBvcHRpb25zLCByZWxhdGVkVGFyZ2V0OiBvcHRpb25zLnJlbGF0ZWRUYXJnZXQgfSk7XG4gICAgfVxuXG4gICAgX3ByZXBhcmVDb29raWVBcmd1bWVudHMgKGFyZ3MsIGlzU2V0Q29tbWFuZCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHVybHNBcmcgPSBjYXN0QXJyYXkoYXJnc1sxXSk7XG4gICAgICAgIGNvbnN0IHVybHMgICAgPSBBcnJheS5pc0FycmF5KHVybHNBcmcpICYmIHR5cGVvZiB1cmxzQXJnWzBdID09PSAnc3RyaW5nJyA/IHVybHNBcmcgOiBbXTtcblxuICAgICAgICBjb25zdCBjb29raWVzQXJnID0gdXJscy5sZW5ndGggPyBhcmdzWzBdIDogYXJncztcbiAgICAgICAgY29uc3QgY29va2llcyAgICA9IFtdO1xuXG4gICAgICAgIGZsYXR0ZW5EZWVwKGNhc3RBcnJheShjb29raWVzQXJnKSkuZm9yRWFjaChjb29raWUgPT4ge1xuICAgICAgICAgICAgaWYgKGlzU2V0Q29tbWFuZCAmJiAhY29va2llLm5hbWUgJiYgdHlwZW9mIGNvb2tpZSA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY29va2llKS5mb3JFYWNoKChbbmFtZSwgdmFsdWVdKSA9PiBjb29raWVzLnB1c2goeyBuYW1lLCB2YWx1ZSB9KSk7XG4gICAgICAgICAgICBlbHNlIGlmICghaXNTZXRDb21tYW5kICYmIHR5cGVvZiBjb29raWUgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgIGNvb2tpZXMucHVzaCh7IG5hbWU6IGNvb2tpZSB9KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjb29raWVzLnB1c2goY29va2llKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHsgdXJscywgY29va2llcyB9O1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoR2V0Q29va2llc0NvbW1hbmQubWV0aG9kTmFtZSldICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKEdldENvb2tpZXNDb21tYW5kLCB0aGlzLl9wcmVwYXJlQ29va2llQXJndW1lbnRzKGFyZ3MpKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNldENvb2tpZXNDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IHVybHMsIGNvb2tpZXMgfSA9IHRoaXMuX3ByZXBhcmVDb29raWVBcmd1bWVudHMoYXJncywgdHJ1ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU2V0Q29va2llc0NvbW1hbmQsIHsgY29va2llcywgdXJsOiB1cmxzWzBdIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoRGVsZXRlQ29va2llc0NvbW1hbmQubWV0aG9kTmFtZSldICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKERlbGV0ZUNvb2tpZXNDb21tYW5kLCB0aGlzLl9wcmVwYXJlQ29va2llQXJndW1lbnRzKGFyZ3MpKTtcbiAgICB9XG5cbiAgICBfcHJlcGFyZVJlcXVlc3RBcmd1bWVudHMgKGJpbmRPcHRpb25zLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IFt1cmwsIG9wdGlvbnNdID0gdHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnID8gW2FyZ3NbMF0udXJsLCBhcmdzWzBdXSA6IGFyZ3M7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIGJpbmRPcHRpb25zKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBfY3JlYXRlUmVxdWVzdEZ1bmN0aW9uIChiaW5kT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzO1xuICAgICAgICBjb25zdCBjYWxsc2l0ZSAgID0gZ2V0Q2FsbHNpdGVGb3JNZXRob2QoUmVxdWVzdENvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgaWYgKCFjb250cm9sbGVyLnRlc3RSdW4pXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdFJ1bnRpbWVFcnJvcihjYWxsc2l0ZSwgUlVOVElNRV9FUlJPUlMucmVxdWVzdENhbm5vdFJlc29sdmVUZXN0UnVuKTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGNtZEFyZ3MgPSBjb250cm9sbGVyLl9wcmVwYXJlUmVxdWVzdEFyZ3VtZW50cyhiaW5kT3B0aW9ucywgLi4uYXJncyk7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kID0gY29udHJvbGxlci5fY3JlYXRlQ29tbWFuZChSZXF1ZXN0Q29tbWFuZCwgY21kQXJncywgY2FsbHNpdGUpO1xuXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIC4uLmNvbW1hbmQub3B0aW9ucyxcbiAgICAgICAgICAgICAgICB1cmw6IGNvbW1hbmQudXJsIHx8IGNvbW1hbmQub3B0aW9ucy51cmwgfHwgJycsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gUmVFeGVjdXRhYmxlUHJvbWlzZS5mcm9tRm4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZW5kUmVxdWVzdChjb250cm9sbGVyLnRlc3RSdW4sIG9wdGlvbnMsIGNhbGxzaXRlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBSZXF1ZXN0Q29tbWFuZC5yZXN1bHRHZXR0ZXJzLmZvckVhY2goZ2V0dGVyID0+IHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvbWlzZSwgZ2V0dGVyLCB7XG4gICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gUmVFeGVjdXRhYmxlUHJvbWlzZS5mcm9tRm4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzZW5kUmVxdWVzdChjb250cm9sbGVyLnRlc3RSdW4sIG9wdGlvbnMsIGNhbGxzaXRlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlW2dldHRlcl07XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIF9kZWNvcmF0ZVJlcXVlc3RGdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgUmVxdWVzdENvbW1hbmQuZXh0ZW5kZWRNZXRob2RzLmZvckVhY2gobWV0aG9kID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgbWV0aG9kLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2NyZWF0ZVJlcXVlc3RGdW5jdGlvbih7IG1ldGhvZCB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJlcXVlc3RDb21tYW5kLm1ldGhvZE5hbWUsICdnZXR0ZXInKV0gKCkge1xuICAgICAgICBjb25zdCBmbiA9IHRoaXMuX2NyZWF0ZVJlcXVlc3RGdW5jdGlvbigpO1xuXG4gICAgICAgIHRoaXMuX2RlY29yYXRlUmVxdWVzdEZ1bmN0aW9uKGZuKTtcblxuICAgICAgICByZXR1cm4gZm47XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShDbGlja0NvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChDbGlja0NvbW1hbmQsIHsgc2VsZWN0b3IsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShSaWdodENsaWNrQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFJpZ2h0Q2xpY2tDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoRG91YmxlQ2xpY2tDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoRG91YmxlQ2xpY2tDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoSG92ZXJDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoSG92ZXJDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoRHJhZ0NvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3RvciwgZHJhZ09mZnNldFgsIGRyYWdPZmZzZXRZLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKERyYWdDb21tYW5kLCB7IHNlbGVjdG9yLCBkcmFnT2Zmc2V0WCwgZHJhZ09mZnNldFksIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShEcmFnVG9FbGVtZW50Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBkZXN0aW5hdGlvblNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKERyYWdUb0VsZW1lbnRDb21tYW5kLCB7IHNlbGVjdG9yLCBkZXN0aW5hdGlvblNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIF9nZXRTZWxlY3RvckZvclNjcm9sbCAoYXJncykge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyB8fCBpc1NlbGVjdG9yKGFyZ3NbMF0pID8gYXJnc1swXSA6IG51bGw7XG5cbiAgICAgICAgaWYgKHNlbGVjdG9yKVxuICAgICAgICAgICAgYXJncy5zaGlmdCgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICAvLyBOT1RFOiBoZXJlIHdlIHVzZSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50IGZvciBvbGQgU2FmYXJpIHZlcnNpb25zXG4gICAgICAgICAgICAvLyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZCBvbiBNb2phdmUgU2FmYXJpIDEyLjEvIEhpZ2ggU2llcnJhIFNhZmFyaSAxMS4xXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgICAgICByZXR1cm4gc2VsZWN0b3I7XG4gICAgfVxuXG4gICAgX2dldFBvc2l0aW9uIChhcmdzKSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnID8gYXJnc1swXSA6IG51bGw7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uKVxuICAgICAgICAgICAgYXJncy5zaGlmdCgpO1xuXG4gICAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNjcm9sbENvbW1hbmQubWV0aG9kTmFtZSldICguLi5hcmdzKSB7XG4gICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuX2dldFBvc2l0aW9uKGFyZ3MpO1xuXG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5fZ2V0U2VsZWN0b3JGb3JTY3JvbGwoYXJncyk7XG5cbiAgICAgICAgbGV0IHggICAgICAgPSB2b2lkIDA7XG4gICAgICAgIGxldCB5ICAgICAgID0gdm9pZCAwO1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHZvaWQgMDtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgWyBwb3NpdGlvbiwgb3B0aW9ucyBdID0gYXJncztcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdudW1iZXInKVxuICAgICAgICAgICAgWyB4LCB5LCBvcHRpb25zIF0gPSBhcmdzO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNjcm9sbENvbW1hbmQsIHsgc2VsZWN0b3IsIHgsIHksIHBvc2l0aW9uLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2Nyb2xsQnlDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uYXJncykge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuX2dldFNlbGVjdG9yRm9yU2Nyb2xsKGFyZ3MpO1xuXG4gICAgICAgIGNvbnN0IFtieVgsIGJ5WSwgb3B0aW9uc10gPSBhcmdzO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNjcm9sbEJ5Q29tbWFuZCwgeyBzZWxlY3RvciwgYnlYLCBieVksIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTY3JvbGxJbnRvVmlld0NvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTY3JvbGxJbnRvVmlld0NvbW1hbmQsIHsgc2VsZWN0b3IsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShUeXBlVGV4dENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3RvciwgdGV4dCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChUeXBlVGV4dENvbW1hbmQsIHsgc2VsZWN0b3IsIHRleHQsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZWxlY3RUZXh0Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBzdGFydFBvcywgZW5kUG9zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNlbGVjdFRleHRDb21tYW5kLCB7IHNlbGVjdG9yLCBzdGFydFBvcywgZW5kUG9zLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2VsZWN0VGV4dEFyZWFDb250ZW50Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBzdGFydExpbmUsIHN0YXJ0UG9zLCBlbmRMaW5lLCBlbmRQb3MsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU2VsZWN0VGV4dEFyZWFDb250ZW50Q29tbWFuZCwge1xuICAgICAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgICAgICBzdGFydExpbmUsXG4gICAgICAgICAgICBzdGFydFBvcyxcbiAgICAgICAgICAgIGVuZExpbmUsXG4gICAgICAgICAgICBlbmRQb3MsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNlbGVjdEVkaXRhYmxlQ29udGVudENvbW1hbmQubWV0aG9kTmFtZSldIChzdGFydFNlbGVjdG9yLCBlbmRTZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTZWxlY3RFZGl0YWJsZUNvbnRlbnRDb21tYW5kLCB7XG4gICAgICAgICAgICBzdGFydFNlbGVjdG9yLFxuICAgICAgICAgICAgZW5kU2VsZWN0b3IsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFByZXNzS2V5Q29tbWFuZC5tZXRob2ROYW1lKV0gKGtleXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoUHJlc3NLZXlDb21tYW5kLCB7IGtleXMsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShXYWl0Q29tbWFuZC5tZXRob2ROYW1lKV0gKHRpbWVvdXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoV2FpdENvbW1hbmQsIHsgdGltZW91dCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKE5hdmlnYXRlVG9Db21tYW5kLm1ldGhvZE5hbWUpXSAodXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKE5hdmlnYXRlVG9Db21tYW5kLCB7IHVybCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNldEZpbGVzVG9VcGxvYWRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIGZpbGVQYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNldEZpbGVzVG9VcGxvYWRDb21tYW5kLCB7IHNlbGVjdG9yLCBmaWxlUGF0aCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKENsZWFyVXBsb2FkQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKENsZWFyVXBsb2FkQ29tbWFuZCwgeyBzZWxlY3RvciB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFRha2VTY3JlZW5zaG90Q29tbWFuZC5tZXRob2ROYW1lKV0gKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKVxuICAgICAgICAgICAgb3B0aW9ucyA9IHsgcGF0aDogb3B0aW9ucyB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFRha2VTY3JlZW5zaG90Q29tbWFuZCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShUYWtlRWxlbWVudFNjcmVlbnNob3RDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZEFyZ3MgPSB7IHNlbGVjdG9yIH07XG5cbiAgICAgICAgaWYgKGFyZ3NbMV0pIHtcbiAgICAgICAgICAgIGNvbW1hbmRBcmdzLnBhdGggICAgPSBhcmdzWzBdO1xuICAgICAgICAgICAgY29tbWFuZEFyZ3Mub3B0aW9ucyA9IGFyZ3NbMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgY29tbWFuZEFyZ3Mub3B0aW9ucyA9IGFyZ3NbMF07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNvbW1hbmRBcmdzLnBhdGggPSBhcmdzWzBdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFRha2VFbGVtZW50U2NyZWVuc2hvdENvbW1hbmQsIGNvbW1hbmRBcmdzKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJlc2l6ZVdpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFJlc2l6ZVdpbmRvd0NvbW1hbmQsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJlc2l6ZVdpbmRvd1RvRml0RGV2aWNlQ29tbWFuZC5tZXRob2ROYW1lKV0gKGRldmljZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChSZXNpemVXaW5kb3dUb0ZpdERldmljZUNvbW1hbmQsIHsgZGV2aWNlLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoTWF4aW1pemVXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKE1heGltaXplV2luZG93Q29tbWFuZCk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTd2l0Y2hUb0lmcmFtZUNvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTd2l0Y2hUb0lmcmFtZUNvbW1hbmQsIHsgc2VsZWN0b3IgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTd2l0Y2hUb01haW5XaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFN3aXRjaFRvTWFpbldpbmRvd0NvbW1hbmQpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoT3BlbldpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICh1cmwpIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNdWx0aXBsZVdpbmRvd0NvbW1hbmQoT3BlbldpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoT3BlbldpbmRvd0NvbW1hbmQsIHsgdXJsIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoQ2xvc2VXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAod2luZG93KSB7XG4gICAgICAgIGNvbnN0IHdpbmRvd0lkID0gd2luZG93Py5pZCB8fCBudWxsO1xuXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKENsb3NlV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChDbG9zZVdpbmRvd0NvbW1hbmQsIHsgd2luZG93SWQgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShHZXRDdXJyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU11bHRpcGxlV2luZG93Q29tbWFuZChHZXRDdXJyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChHZXRDdXJyZW50V2luZG93Q29tbWFuZCk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTd2l0Y2hUb1dpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICh3aW5kb3dTZWxlY3Rvcikge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU11bHRpcGxlV2luZG93Q29tbWFuZChTd2l0Y2hUb1dpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgbGV0IGNvbW1hbmQ7XG4gICAgICAgIGxldCBhcmdzO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93U2VsZWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTd2l0Y2hUb1dpbmRvd0J5UHJlZGljYXRlQ29tbWFuZDtcblxuICAgICAgICAgICAgYXJncyA9IHsgY2hlY2tXaW5kb3c6IHdpbmRvd1NlbGVjdG9yIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb21tYW5kID0gU3dpdGNoVG9XaW5kb3dDb21tYW5kO1xuXG4gICAgICAgICAgICBhcmdzID0geyB3aW5kb3dJZDogd2luZG93U2VsZWN0b3I/LmlkIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChjb21tYW5kLCBhcmdzKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFN3aXRjaFRvUGFyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU11bHRpcGxlV2luZG93Q29tbWFuZChTd2l0Y2hUb1BhcmVudFdpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU3dpdGNoVG9QYXJlbnRXaW5kb3dDb21tYW5kKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFN3aXRjaFRvUHJldmlvdXNXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKFN3aXRjaFRvUHJldmlvdXNXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFN3aXRjaFRvUHJldmlvdXNXaW5kb3dDb21tYW5kKTtcbiAgICB9XG5cbiAgICBfZXZhbCQgKGZuLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQob3B0aW9ucykpXG4gICAgICAgICAgICBvcHRpb25zID0gYXNzaWduKHt9LCBvcHRpb25zLCB7IGJvdW5kVGVzdFJ1bjogdGhpcyB9KTtcblxuICAgICAgICBjb25zdCBidWlsZGVyICA9IG5ldyBDbGllbnRGdW5jdGlvbkJ1aWxkZXIoZm4sIG9wdGlvbnMsIHsgaW5zdGFudGlhdGlvbjogJ2V2YWwnLCBleGVjdXRpb246ICdldmFsJyB9KTtcbiAgICAgICAgY29uc3QgY2xpZW50Rm4gPSBidWlsZGVyLmdldEZ1bmN0aW9uKCk7XG5cbiAgICAgICAgcmV0dXJuIGNsaWVudEZuKCk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZXROYXRpdmVEaWFsb2dIYW5kbGVyQ29tbWFuZC5tZXRob2ROYW1lKV0gKGZuLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNldE5hdGl2ZURpYWxvZ0hhbmRsZXJDb21tYW5kLCB7XG4gICAgICAgICAgICBkaWFsb2dIYW5kbGVyOiB7IGZuLCBvcHRpb25zIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoR2V0TmF0aXZlRGlhbG9nSGlzdG9yeUNvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgY29uc3QgY2FsbHNpdGUgPSBnZXRDYWxsc2l0ZUZvck1ldGhvZChHZXROYXRpdmVEaWFsb2dIaXN0b3J5Q29tbWFuZC5tZXRob2ROYW1lKTtcbiAgICAgICAgY29uc3QgY29tbWFuZCAgPSB0aGlzLl9jcmVhdGVDb21tYW5kKEdldE5hdGl2ZURpYWxvZ0hpc3RvcnlDb21tYW5kLCB7fSwgY2FsbHNpdGUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoR2V0QnJvd3NlckNvbnNvbGVNZXNzYWdlc0NvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgY29uc3QgY2FsbHNpdGUgPSBnZXRDYWxsc2l0ZUZvck1ldGhvZChHZXRCcm93c2VyQ29uc29sZU1lc3NhZ2VzQ29tbWFuZC5tZXRob2ROYW1lKTtcbiAgICAgICAgY29uc3QgY29tbWFuZCAgPSB0aGlzLl9jcmVhdGVDb21tYW5kKEdldEJyb3dzZXJDb25zb2xlTWVzc2FnZXNDb21tYW5kLCB7fSwgY2FsbHNpdGUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuICAgIH1cblxuICAgIGNoZWNrRm9yRXhjZXNzaXZlQXdhaXRzIChjaGVja2VkQ2FsbHNpdGUsIHsgYWN0aW9uSWQgfSkge1xuICAgICAgICBjb25zdCBzbmFwc2hvdFByb3BlcnR5Q2FsbHNpdGVzID0gdGhpcy50ZXN0UnVuLm9ic2VydmVkQ2FsbHNpdGVzLnNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXM7XG4gICAgICAgIGNvbnN0IGNhbGxzaXRlSWQgICAgICAgICAgICAgICAgPSBnZXRDYWxsc2l0ZUlkKGNoZWNrZWRDYWxsc2l0ZSk7XG5cbiAgICAgICAgLy8gTk9URTogSWYgdGhlcmUgYXJlIHVuYXNzZXJ0ZWQgY2FsbHNpdGVzLCB3ZSBzaG91bGQgYWRkIGFsbCBvZiB0aGVtIHRvIGF3YWl0ZWRTbmFwc2hvdFdhcm5pbmdzLlxuICAgICAgICAvLyBUaGUgd2FybmluZ3MgdGhlbXNlbHZlcyBhcmUgcmFpc2VkIGFmdGVyIHRoZSB0ZXN0IHJ1biBpbiB3cmFwLXRlc3QtZnVuY3Rpb25cbiAgICAgICAgaWYgKHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF0gJiYgIXNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF0uY2hlY2tlZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eUNhbGxzaXRlIG9mIHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF0uY2FsbHNpdGVzKVxuICAgICAgICAgICAgICAgIHRoaXMudGVzdFJ1bi5vYnNlcnZlZENhbGxzaXRlcy5hd2FpdGVkU25hcHNob3RXYXJuaW5ncy5zZXQoZ2V0Q2FsbHNpdGVTdGFja0ZyYW1lU3RyaW5nKHByb3BlcnR5Q2FsbHNpdGUpLCB7IGNhbGxzaXRlOiBwcm9wZXJ0eUNhbGxzaXRlLCBhY3Rpb25JZCB9KTtcblxuICAgICAgICAgICAgZGVsZXRlIHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlc1tjYWxsc2l0ZUlkXSA9IHsgY2FsbHNpdGVzOiBbXSwgY2hlY2tlZDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lKV0gKGFjdHVhbCkge1xuICAgICAgICBjb25zdCBjYWxsc2l0ZSA9IGdldENhbGxzaXRlRm9yTWV0aG9kKEFzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24oYWN0dWFsLCB0aGlzLCBjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShEZWJ1Z0NvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoRGVidWdDb21tYW5kKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNldFRlc3RTcGVlZENvbW1hbmQubWV0aG9kTmFtZSldIChzcGVlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTZXRUZXN0U3BlZWRDb21tYW5kLCB7IHNwZWVkIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2V0UGFnZUxvYWRUaW1lb3V0Q29tbWFuZC5tZXRob2ROYW1lKV0gKGR1cmF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNldFBhZ2VMb2FkVGltZW91dENvbW1hbmQsIHsgZHVyYXRpb24gfSwgKHRlc3RDb250cm9sbGVyLCBjb21tYW5kKSA9PiB7XG4gICAgICAgICAgICBhZGRXYXJuaW5nKHRlc3RDb250cm9sbGVyLndhcm5pbmdMb2csIHsgbWVzc2FnZTogZ2V0RGVwcmVjYXRpb25NZXNzYWdlKERFUFJFQ0FURUQuc2V0UGFnZUxvYWRUaW1lb3V0KSwgYWN0aW9uSWQ6IGNvbW1hbmQuYWN0aW9uSWQgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoVXNlUm9sZUNvbW1hbmQubWV0aG9kTmFtZSldIChyb2xlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFVzZVJvbGVDb21tYW5kLCB7IHJvbGUgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTa2lwSnNFcnJvcnNDb21tYW5kLm1ldGhvZE5hbWUpXSAob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTa2lwSnNFcnJvcnNDb21tYW5kLCB7IG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShBZGRSZXF1ZXN0SG9va3NDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uaG9va3MpIHtcbiAgICAgICAgaG9va3MgPSBmbGF0dGVuRGVlcChob29rcyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoQWRkUmVxdWVzdEhvb2tzQ29tbWFuZCwgeyBob29rcyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJlbW92ZVJlcXVlc3RIb29rc0NvbW1hbmQubWV0aG9kTmFtZSldICguLi5ob29rcykge1xuICAgICAgICBob29rcyA9IGZsYXR0ZW5EZWVwKGhvb2tzKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChSZW1vdmVSZXF1ZXN0SG9va3NDb21tYW5kLCB7IGhvb2tzIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoUmVwb3J0Q29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoUmVwb3J0Q29tbWFuZCwgeyBhcmdzIH0pO1xuICAgIH1cbiAgICBzaG91bGRTdG9wIChjb21tYW5kKSB7XG4gICAgICAgIC8vIE5PVEU6IHNob3VsZCBhbHdheXMgc3RvcCBvbiBEZWJ1ZyBjb21tYW5kXG4gICAgICAgIHJldHVybiBjb21tYW5kID09PSAnZGVidWcnO1xuICAgIH1cbn1cblxuVGVzdENvbnRyb2xsZXIuQVBJX0xJU1QgPSBnZXREZWxlZ2F0ZWRBUElMaXN0KFRlc3RDb250cm9sbGVyLnByb3RvdHlwZSk7XG5cbmRlbGVnYXRlQVBJKFRlc3RDb250cm9sbGVyLnByb3RvdHlwZSwgVGVzdENvbnRyb2xsZXIuQVBJX0xJU1QsIHsgdXNlQ3VycmVudEN0eEFzSGFuZGxlcjogdHJ1ZSB9KTtcbiJdfQ==
|
|
449
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3Rlc3QtY29udHJvbGxlci9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9GQUFvRjtBQUNwRixvREFBNkI7QUFDN0IsbUNBTWdCO0FBRWhCLDREQUFpRTtBQUNqRSw2R0FBbUY7QUFDbkYsNERBQW9DO0FBQ3BDLDZEQUE2RTtBQUM3RSxvR0FBa0U7QUFDbEUsK0RBQW1GO0FBRW5GLDZEQTBDeUM7QUFFekMsdUZBTXNEO0FBRXRELHFFQUFnRjtBQUNoRiwyREFBOEU7QUFDOUUsd0RBQTBEO0FBRTFELG9EQUkrQjtBQUUvQixpRUFBcUU7QUFDckUsbURBQWtGO0FBQ2xGLDhGQUFvRTtBQUNwRSxzREFBbUY7QUFDbkYsa0RBQTJEO0FBQzNELDhDQUFvRDtBQUNwRCxzRUFBNkM7QUFDN0Msb0VBQTJDO0FBQzNDLHFGQUFvRjtBQUVwRixNQUFNLFlBQVksR0FBRyxnQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQztBQUU1QyxNQUFxQixjQUFjO0lBQy9CLFlBQWEsT0FBTzs7UUFDaEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUU5QixJQUFJLENBQUMsT0FBTyxHQUFVLE9BQU8sQ0FBQztRQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLGdCQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSx3QkFBYSxDQUFDLElBQUksRUFBRSxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxJQUFJLDBDQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRTVFLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCxrQ0FBa0M7UUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FB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QztBQUV4RSxJQUFBLDJCQUFXLEVBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsUUFBUSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE86IEZpeCBodHRwczovL2dpdGh1Yi5jb20vRGV2RXhwcmVzcy90ZXN0Y2FmZS9pc3N1ZXMvNDEzOSB0byBnZXQgcmlkIG9mIFBpbmtpZVxuaW1wb3J0IFByb21pc2UgZnJvbSAncGlua2llJztcbmltcG9ydCB7XG4gICAgaWRlbnRpdHksXG4gICAgYXNzaWduLFxuICAgIGlzTmlsIGFzIGlzTnVsbE9yVW5kZWZpbmVkLFxuICAgIGZsYXR0ZW5EZWVwLFxuICAgIGNhc3RBcnJheSxcbn0gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgZ2V0Q2FsbHNpdGVGb3JNZXRob2QgfSBmcm9tICcuLi8uLi9lcnJvcnMvZ2V0LWNhbGxzaXRlJztcbmltcG9ydCBDbGllbnRGdW5jdGlvbkJ1aWxkZXIgZnJvbSAnLi4vLi4vY2xpZW50LWZ1bmN0aW9ucy9jbGllbnQtZnVuY3Rpb24tYnVpbGRlcic7XG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gJy4vYXNzZXJ0aW9uJztcbmltcG9ydCB7IGdldERlbGVnYXRlZEFQSUxpc3QsIGRlbGVnYXRlQVBJIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGVsZWdhdGVkLWFwaSc7XG5pbXBvcnQgYWRkV2FybmluZyBmcm9tICcuLi8uLi9ub3RpZmljYXRpb25zL2FkZC1yZW5kZXJlZC13YXJuaW5nJztcbmltcG9ydCB7IGdldERlcHJlY2F0aW9uTWVzc2FnZSwgREVQUkVDQVRFRCB9IGZyb20gJy4uLy4uL25vdGlmaWNhdGlvbnMvZGVwcmVjYXRlZCc7XG5cbmltcG9ydCB7XG4gICAgQ2xpY2tDb21tYW5kLFxuICAgIFJpZ2h0Q2xpY2tDb21tYW5kLFxuICAgIERvdWJsZUNsaWNrQ29tbWFuZCxcbiAgICBIb3ZlckNvbW1hbmQsXG4gICAgRHJhZ0NvbW1hbmQsXG4gICAgRHJhZ1RvRWxlbWVudENvbW1hbmQsXG4gICAgVHlwZVRleHRDb21tYW5kLFxuICAgIFNlbGVjdFRleHRDb21tYW5kLFxuICAgIFNlbGVjdFRleHRBcmVhQ29udGVudENvbW1hbmQsXG4gICAgU2VsZWN0RWRpdGFibGVDb250ZW50Q29tbWFuZCxcbiAgICBQcmVzc0tleUNvbW1hbmQsXG4gICAgTmF2aWdhdGVUb0NvbW1hbmQsXG4gICAgU2V0RmlsZXNUb1VwbG9hZENvbW1hbmQsXG4gICAgQ2xlYXJVcGxvYWRDb21tYW5kLFxuICAgIFN3aXRjaFRvSWZyYW1lQ29tbWFuZCxcbiAgICBTd2l0Y2hUb01haW5XaW5kb3dDb21tYW5kLFxuICAgIE9wZW5XaW5kb3dDb21tYW5kLFxuICAgIENsb3NlV2luZG93Q29tbWFuZCxcbiAgICBHZXRDdXJyZW50V2luZG93Q29tbWFuZCxcbiAgICBTd2l0Y2hUb1dpbmRvd0NvbW1hbmQsXG4gICAgU3dpdGNoVG9XaW5kb3dCeVByZWRpY2F0ZUNvbW1hbmQsXG4gICAgU3dpdGNoVG9QYXJlbnRXaW5kb3dDb21tYW5kLFxuICAgIFN3aXRjaFRvUHJldmlvdXNXaW5kb3dDb21tYW5kLFxuICAgIFNldE5hdGl2ZURpYWxvZ0hhbmRsZXJDb21tYW5kLFxuICAgIEdldE5hdGl2ZURpYWxvZ0hpc3RvcnlDb21tYW5kLFxuICAgIEdldEJyb3dzZXJDb25zb2xlTWVzc2FnZXNDb21tYW5kLFxuICAgIFNldFRlc3RTcGVlZENvbW1hbmQsXG4gICAgU2V0UGFnZUxvYWRUaW1lb3V0Q29tbWFuZCxcbiAgICBTY3JvbGxDb21tYW5kLFxuICAgIFNjcm9sbEJ5Q29tbWFuZCxcbiAgICBTY3JvbGxJbnRvVmlld0NvbW1hbmQsXG4gICAgVXNlUm9sZUNvbW1hbmQsXG4gICAgRGlzcGF0Y2hFdmVudENvbW1hbmQsXG4gICAgR2V0Q29va2llc0NvbW1hbmQsXG4gICAgU2V0Q29va2llc0NvbW1hbmQsXG4gICAgRGVsZXRlQ29va2llc0NvbW1hbmQsXG4gICAgUmVxdWVzdENvbW1hbmQsXG4gICAgU2tpcEpzRXJyb3JzQ29tbWFuZCxcbiAgICBBZGRSZXF1ZXN0SG9va3NDb21tYW5kLFxuICAgIFJlbW92ZVJlcXVlc3RIb29rc0NvbW1hbmQsXG4gICAgUmVwb3J0Q29tbWFuZCxcbn0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvYWN0aW9ucyc7XG5cbmltcG9ydCB7XG4gICAgVGFrZVNjcmVlbnNob3RDb21tYW5kLFxuICAgIFRha2VFbGVtZW50U2NyZWVuc2hvdENvbW1hbmQsXG4gICAgUmVzaXplV2luZG93Q29tbWFuZCxcbiAgICBSZXNpemVXaW5kb3dUb0ZpdERldmljZUNvbW1hbmQsXG4gICAgTWF4aW1pemVXaW5kb3dDb21tYW5kLFxufSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9icm93c2VyLW1hbmlwdWxhdGlvbic7XG5cbmltcG9ydCB7IFdhaXRDb21tYW5kLCBEZWJ1Z0NvbW1hbmQgfSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9vYnNlcnZhdGlvbic7XG5pbXBvcnQgeyBjcmVhdGVFeGVjdXRpb25Db250ZXh0IGFzIGNyZWF0ZUNvbnRleHQgfSBmcm9tICcuL2V4ZWN1dGlvbi1jb250ZXh0JztcbmltcG9ydCB7IGlzU2VsZWN0b3IgfSBmcm9tICcuLi8uLi9jbGllbnQtZnVuY3Rpb25zL3R5cGVzJztcblxuaW1wb3J0IHtcbiAgICBNdWx0aXBsZVdpbmRvd3NNb2RlSXNEaXNhYmxlZEVycm9yLFxuICAgIE11bHRpcGxlV2luZG93c01vZGVJc05vdEF2YWlsYWJsZUluUmVtb3RlQnJvd3NlckVycm9yLFxuICAgIE11bHRpcGxlV2luZG93c01vZGVJc05vdFN1cHBvcnRlZEluTmF0aXZlQXV0b21hdGlvbk1vZGVFcnJvcixcbn0gZnJvbSAnLi4vLi4vZXJyb3JzL3Rlc3QtcnVuJztcblxuaW1wb3J0IHsgQXNzZXJ0aW9uQ29tbWFuZCB9IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL2Fzc2VydGlvbic7XG5pbXBvcnQgeyBnZXRDYWxsc2l0ZUlkLCBnZXRDYWxsc2l0ZVN0YWNrRnJhbWVTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscy9jYWxsc2l0ZSc7XG5pbXBvcnQgUmVFeGVjdXRhYmxlUHJvbWlzZSBmcm9tICcuLi8uLi91dGlscy9yZS1leGVjdXRhYmxlLXByb21pc2UnO1xuaW1wb3J0IHsgc2VuZFJlcXVlc3RUaHJvdWdoQVBJIGFzIHNlbmRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vcmVxdWVzdC9zZW5kJztcbmltcG9ydCB7IFJlcXVlc3RSdW50aW1lRXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvcnMvcnVudGltZSc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4uLy4uL2Vycm9ycy90eXBlcyc7XG5pbXBvcnQgQ3VzdG9tQWN0aW9ucyBmcm9tICcuL2N1c3RvbS1hY3Rpb25zJztcbmltcG9ydCBkZWxlZ2F0ZWRBUEkgZnJvbSAnLi9kZWxlZ2F0ZWQtYXBpJztcbmltcG9ydCB7IGdldEZpeHR1cmVJbmZvLCBnZXRUZXN0SW5mbyB9IGZyb20gJy4uLy4uL3V0aWxzL2dldC10ZXN0LWFuZC1maXh0dXJlLWluZm8nO1xuXG5jb25zdCBvcmlnaW5hbFRoZW4gPSBQcm9taXNlLnJlc29sdmUoKS50aGVuO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXN0Q29udHJvbGxlciB7XG4gICAgY29uc3RydWN0b3IgKHRlc3RSdW4pIHtcbiAgICAgICAgdGhpcy5fZXhlY3V0aW9uQ29udGV4dCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy50ZXN0UnVuICAgICAgICA9IHRlc3RSdW47XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgdGhpcy53YXJuaW5nTG9nICAgICA9IHRlc3RSdW4ud2FybmluZ0xvZztcbiAgICAgICAgdGhpcy5fY3VzdG9tQWN0aW9ucyA9IG5ldyBDdXN0b21BY3Rpb25zKHRoaXMsIHRlc3RSdW4/Lm9wdHM/LmN1c3RvbUFjdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX2FkZFRlc3RDb250cm9sbGVyVG9FeGVjdXRpb25DaGFpbigpO1xuICAgIH1cblxuICAgIF9hZGRUZXN0Q29udHJvbGxlclRvRXhlY3V0aW9uQ2hhaW4gKCkge1xuICAgICAgICB0aGlzLmV4ZWN1dGlvbkNoYWluLl90ZXN0Q29udHJvbGxlciA9IHRoaXM7XG4gICAgfVxuXG4gICAgLy8gTk9URTogVGVzdENhZmUgZXhlY3V0ZXMgYWN0aW9ucyBhbmQgYXNzZXJ0aW9ucyBhc3luY2hyb25vdXNseSBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICAgIC8vIGEpIFRoZSBgYXdhaXRgIGtleXdvcmQgdGhhdCBwcm9jZWVkcyB0aGUgbWV0aG9kIGRlY2xhcmF0aW9uIHRyaWdnZXJzIHRoZSBgdGhlbmAgZnVuY3Rpb24gb2YgYSBQcm9taXNlLlxuICAgIC8vIGIpIFRoZSBhY3Rpb24gaXMgY2hhaW5lZCB0byBhbm90aGVyIGBhd2FpdGVkYCBtZXRob2QuXG4gICAgLy9cbiAgICAvLyBJbiBvcmRlciB0byB0cmFjayBtaXNzaW5nIGBhd2FpdGAgc3RhdGVtZW50cywgVGVzdENhZmUgZXhwb3NlcyBhIHNwZWNpYWwgUHJvbWlzZSB0byB0aGUgdXNlci5cbiAgICAvLyBXaGVuIFRlc3RDYWZlIGRldGVjdHMgYSBtaXNzaW5nIGBhd2FpdGAgc3RhdGVtZW50LCBpdCBjb21wYXJlcyB0aGUgbWV0aG9kJ3MgY2FsbHNpdGUgdG8gdGhlIGNhbGwgc2l0ZSBvZiB0aGUgZXhwb3NlZCBQcm9taXNlLlxuICAgIC8vIFRoaXMgd29ya2Fyb3VuZCBpcyBuZWNlc3NhcnkgZm9yIHNpdHVhdGlvbnMgbGlrZSB0aGVzZTpcbiAgICAvL1xuICAgIC8vIHZhciB0MiA9IHQuY2xpY2soJyNidG4xJyk7IC8vIDwtLSBzdG9yZXMgbmV3IGNhbGxzaXRlV2l0aG91dEF3YWl0XG4gICAgLy8gYXdhaXQgdDI7ICAgICAgICAgICAgICAgICAgLy8gPC0tIGNhbGxzaXRlV2l0aG91dEF3YWl0ID0gbnVsbFxuICAgIC8vIHQuY2xpY2soJyNidG4yJyk7ICAgICAgICAgIC8vIDwtLSBzdG9yZXMgbmV3IGNhbGxzaXRlV2l0aG91dEF3YWl0XG4gICAgLy8gYXdhaXQgdDIuY2xpY2soJyNidG4zJyk7ICAgLy8gPC0tIHdpdGhvdXQgY2hlY2sgaXQgd2lsbCBzZXQgY2FsbHNpdGVXaXRob3V0QXdhaXQgPSBudWxsLCBzbyB3ZSB3aWxsIGxvc3QgdHJhY2tpbmdcbiAgICBfY3JlYXRlRXh0ZW5kZWRQcm9taXNlIChwcm9taXNlLCBjYWxsc2l0ZSkge1xuICAgICAgICBjb25zdCBleHRlbmRlZFByb21pc2UgICAgID0gcHJvbWlzZS50aGVuKGlkZW50aXR5KTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZWRDYWxsc2l0ZXMgICA9IHRoaXMudGVzdFJ1bi5vYnNlcnZlZENhbGxzaXRlcztcbiAgICAgICAgY29uc3QgbWFya0NhbGxzaXRlQXdhaXRlZCA9ICgpID0+IG9ic2VydmVkQ2FsbHNpdGVzLmNhbGxzaXRlc1dpdGhvdXRBd2FpdC5kZWxldGUoY2FsbHNpdGUpO1xuXG4gICAgICAgIGV4dGVuZGVkUHJvbWlzZS50aGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbWFya0NhbGxzaXRlQXdhaXRlZCgpO1xuXG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxUaGVuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZGVsZWdhdGVBUEkoZXh0ZW5kZWRQcm9taXNlLCBUZXN0Q29udHJvbGxlci5BUElfTElTVCwge1xuICAgICAgICAgICAgaGFuZGxlcjogICAgIHRoaXMsXG4gICAgICAgICAgICBwcm94eU1ldGhvZDogbWFya0NhbGxzaXRlQXdhaXRlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGV4dGVuZGVkUHJvbWlzZTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQ29tbWFuZCAoQ21kQ3RvciwgY21kQXJncywgY2FsbHNpdGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ21kQ3RvcihjbWRBcmdzLCB0aGlzLnRlc3RSdW4pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGVyci5jYWxsc2l0ZSA9IGNhbGxzaXRlO1xuXG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZW5xdWV1ZVRhc2sgKGFwaU1ldGhvZE5hbWUsIGNyZWF0ZVRhc2tFeGVjdXRvciwgY2FsbHNpdGUpIHtcbiAgICAgICAgY29uc3QgZXhlY3V0b3IgPSBjcmVhdGVUYXNrRXhlY3V0b3IoKTtcblxuICAgICAgICB0aGlzLmV4ZWN1dGlvbkNoYWluLnRoZW4gPSBvcmlnaW5hbFRoZW47XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4gICAgICA9IHRoaXMuZXhlY3V0aW9uQ2hhaW4udGhlbihleGVjdXRvcik7XG5cbiAgICAgICAgdGhpcy50ZXN0UnVuLm9ic2VydmVkQ2FsbHNpdGVzLmNhbGxzaXRlc1dpdGhvdXRBd2FpdC5hZGQoY2FsbHNpdGUpO1xuXG4gICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4gPSB0aGlzLl9jcmVhdGVFeHRlbmRlZFByb21pc2UodGhpcy5leGVjdXRpb25DaGFpbiwgY2FsbHNpdGUpO1xuXG4gICAgICAgIHRoaXMuX2FkZFRlc3RDb250cm9sbGVyVG9FeGVjdXRpb25DaGFpbigpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGlvbkNoYWluO1xuICAgIH1cblxuICAgIGVucXVldWVDb21tYW5kIChDbWRDdG9yLCBjbWRBcmdzLCB2YWxpZGF0ZUNvbW1hbmRGbiwgY2FsbHNpdGUpIHtcbiAgICAgICAgY2FsbHNpdGUgPSBjYWxsc2l0ZSB8fCBnZXRDYWxsc2l0ZUZvck1ldGhvZChDbWRDdG9yLm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSB0aGlzLl9jcmVhdGVDb21tYW5kKENtZEN0b3IsIGNtZEFyZ3MsIGNhbGxzaXRlKTtcblxuICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRlQ29tbWFuZEZuID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgdmFsaWRhdGVDb21tYW5kRm4odGhpcywgY29tbWFuZCwgY2FsbHNpdGUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlVGFzayhjb21tYW5kLm1ldGhvZE5hbWUsICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5leGVjdXRlQ29tbWFuZChjb21tYW5kLCBjYWxsc2l0ZSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGlvbkNoYWluID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LCBjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kIChhcGlNZXRob2ROYW1lKSB7XG4gICAgICAgIGNvbnN0IHsgZGlzYWJsZU11bHRpcGxlV2luZG93cywgYWN0aXZlV2luZG93SWQgfSA9IHRoaXMudGVzdFJ1bjtcblxuICAgICAgICBpZiAodGhpcy50ZXN0UnVuLmlzTmF0aXZlQXV0b21hdGlvbiAmJiAhdGhpcy50ZXN0UnVuLmlzRXhwZXJpbWVudGFsTXVsdGlwbGVXaW5kb3dzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IE11bHRpcGxlV2luZG93c01vZGVJc05vdFN1cHBvcnRlZEluTmF0aXZlQXV0b21hdGlvbk1vZGVFcnJvcihhcGlNZXRob2ROYW1lKTtcblxuICAgICAgICBpZiAoZGlzYWJsZU11bHRpcGxlV2luZG93cylcbiAgICAgICAgICAgIHRocm93IG5ldyBNdWx0aXBsZVdpbmRvd3NNb2RlSXNEaXNhYmxlZEVycm9yKGFwaU1ldGhvZE5hbWUpO1xuXG4gICAgICAgIGlmICghYWN0aXZlV2luZG93SWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgTXVsdGlwbGVXaW5kb3dzTW9kZUlzTm90QXZhaWxhYmxlSW5SZW1vdGVCcm93c2VyRXJyb3IoYXBpTWV0aG9kTmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0RXhlY3V0aW9uQ29udGV4dCAoKSB7XG4gICAgICAgIGlmICghdGhpcy5fZXhlY3V0aW9uQ29udGV4dClcbiAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQgPSBjcmVhdGVDb250ZXh0KHRoaXMudGVzdFJ1bik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQ7XG4gICAgfVxuXG4gICAgLy8gQVBJIGltcGxlbWVudGF0aW9uXG4gICAgLy8gV2UgbmVlZCBpbXBsZW1lbnRhdGlvbiBtZXRob2RzIHRvIG9idGFpbiBjb3JyZWN0IGNhbGxzaXRlcy4gSWYgd2UgdXNlIHBsYWluIEFQSVxuICAgIC8vIG1ldGhvZHMgaW4gY2hhaW5lZCB3cmFwcGVycyB0aGVuIHdlIHdpbGwgaGF2ZSBjYWxsc2l0ZSBmb3IgdGhlIHdyYXBwZWQgbWV0aG9kXG4gICAgLy8gaW4gdGhpcyBmaWxlIGluc3RlYWQgb2YgY2hhaW5lZCBtZXRob2QgY2FsbHNpdGUgaW4gdXNlciBjb2RlLlxuICAgIF9jdHgkZ2V0dGVyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5jdHg7XG4gICAgfVxuXG4gICAgX2N0eCRzZXR0ZXIgKHZhbCkge1xuICAgICAgICB0aGlzLnRlc3RSdW4uY3R4ID0gdmFsO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uY3R4O1xuICAgIH1cblxuICAgIF9maXh0dXJlQ3R4JGdldHRlciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uZml4dHVyZUN0eDtcbiAgICB9XG5cbiAgICBfYnJvd3NlciRnZXR0ZXIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuLmJyb3dzZXI7XG4gICAgfVxuXG4gICAgX2N1c3RvbUFjdGlvbnMkZ2V0dGVyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1c3RvbUFjdGlvbnMgfHwgbmV3IEN1c3RvbUFjdGlvbnModGhpcywgdGhpcy50ZXN0UnVuLm9wdHMuY3VzdG9tQWN0aW9ucyk7XG4gICAgfVxuXG4gICAgX3Rlc3QkZ2V0dGVyICgpIHtcbiAgICAgICAgcmV0dXJuIGdldFRlc3RJbmZvKHRoaXMudGVzdFJ1bik7XG4gICAgfVxuXG4gICAgX2ZpeHR1cmUkZ2V0dGVyICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEZpeHR1cmVJbmZvKHRoaXMudGVzdFJ1bik7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShEaXNwYXRjaEV2ZW50Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBldmVudE5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChEaXNwYXRjaEV2ZW50Q29tbWFuZCwgeyBzZWxlY3RvciwgZXZlbnROYW1lLCBvcHRpb25zLCByZWxhdGVkVGFyZ2V0OiBvcHRpb25zLnJlbGF0ZWRUYXJnZXQgfSk7XG4gICAgfVxuXG4gICAgX3ByZXBhcmVDb29raWVBcmd1bWVudHMgKGFyZ3MsIGlzU2V0Q29tbWFuZCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHVybHNBcmcgPSBjYXN0QXJyYXkoYXJnc1sxXSk7XG4gICAgICAgIGNvbnN0IHVybHMgICAgPSBBcnJheS5pc0FycmF5KHVybHNBcmcpICYmIHR5cGVvZiB1cmxzQXJnWzBdID09PSAnc3RyaW5nJyA/IHVybHNBcmcgOiBbXTtcblxuICAgICAgICBjb25zdCBjb29raWVzQXJnID0gdXJscy5sZW5ndGggPyBhcmdzWzBdIDogYXJncztcbiAgICAgICAgY29uc3QgY29va2llcyAgICA9IFtdO1xuXG4gICAgICAgIGZsYXR0ZW5EZWVwKGNhc3RBcnJheShjb29raWVzQXJnKSkuZm9yRWFjaChjb29raWUgPT4ge1xuICAgICAgICAgICAgaWYgKGlzU2V0Q29tbWFuZCAmJiAhY29va2llLm5hbWUgJiYgdHlwZW9mIGNvb2tpZSA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY29va2llKS5mb3JFYWNoKChbbmFtZSwgdmFsdWVdKSA9PiBjb29raWVzLnB1c2goeyBuYW1lLCB2YWx1ZSB9KSk7XG4gICAgICAgICAgICBlbHNlIGlmICghaXNTZXRDb21tYW5kICYmIHR5cGVvZiBjb29raWUgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgIGNvb2tpZXMucHVzaCh7IG5hbWU6IGNvb2tpZSB9KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjb29raWVzLnB1c2goY29va2llKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHsgdXJscywgY29va2llcyB9O1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoR2V0Q29va2llc0NvbW1hbmQubWV0aG9kTmFtZSldICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKEdldENvb2tpZXNDb21tYW5kLCB0aGlzLl9wcmVwYXJlQ29va2llQXJndW1lbnRzKGFyZ3MpKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNldENvb2tpZXNDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IHVybHMsIGNvb2tpZXMgfSA9IHRoaXMuX3ByZXBhcmVDb29raWVBcmd1bWVudHMoYXJncywgdHJ1ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU2V0Q29va2llc0NvbW1hbmQsIHsgY29va2llcywgdXJsOiB1cmxzWzBdIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoRGVsZXRlQ29va2llc0NvbW1hbmQubWV0aG9kTmFtZSldICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKERlbGV0ZUNvb2tpZXNDb21tYW5kLCB0aGlzLl9wcmVwYXJlQ29va2llQXJndW1lbnRzKGFyZ3MpKTtcbiAgICB9XG5cbiAgICBfcHJlcGFyZVJlcXVlc3RBcmd1bWVudHMgKGJpbmRPcHRpb25zLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IFt1cmwsIG9wdGlvbnNdID0gdHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnID8gW2FyZ3NbMF0udXJsLCBhcmdzWzBdXSA6IGFyZ3M7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIGJpbmRPcHRpb25zKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBfY3JlYXRlUmVxdWVzdEZ1bmN0aW9uIChiaW5kT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzO1xuICAgICAgICBjb25zdCBjYWxsc2l0ZSAgID0gZ2V0Q2FsbHNpdGVGb3JNZXRob2QoUmVxdWVzdENvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgaWYgKCFjb250cm9sbGVyLnRlc3RSdW4pXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdFJ1bnRpbWVFcnJvcihjYWxsc2l0ZSwgUlVOVElNRV9FUlJPUlMucmVxdWVzdENhbm5vdFJlc29sdmVUZXN0UnVuKTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGNtZEFyZ3MgPSBjb250cm9sbGVyLl9wcmVwYXJlUmVxdWVzdEFyZ3VtZW50cyhiaW5kT3B0aW9ucywgLi4uYXJncyk7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kID0gY29udHJvbGxlci5fY3JlYXRlQ29tbWFuZChSZXF1ZXN0Q29tbWFuZCwgY21kQXJncywgY2FsbHNpdGUpO1xuXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIC4uLmNvbW1hbmQub3B0aW9ucyxcbiAgICAgICAgICAgICAgICB1cmw6IGNvbW1hbmQudXJsIHx8IGNvbW1hbmQub3B0aW9ucy51cmwgfHwgJycsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gUmVFeGVjdXRhYmxlUHJvbWlzZS5mcm9tRm4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZW5kUmVxdWVzdChjb250cm9sbGVyLnRlc3RSdW4sIG9wdGlvbnMsIGNhbGxzaXRlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBSZXF1ZXN0Q29tbWFuZC5yZXN1bHRHZXR0ZXJzLmZvckVhY2goZ2V0dGVyID0+IHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvbWlzZSwgZ2V0dGVyLCB7XG4gICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gUmVFeGVjdXRhYmxlUHJvbWlzZS5mcm9tRm4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzZW5kUmVxdWVzdChjb250cm9sbGVyLnRlc3RSdW4sIG9wdGlvbnMsIGNhbGxzaXRlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlW2dldHRlcl07XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIF9kZWNvcmF0ZVJlcXVlc3RGdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgUmVxdWVzdENvbW1hbmQuZXh0ZW5kZWRNZXRob2RzLmZvckVhY2gobWV0aG9kID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgbWV0aG9kLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2NyZWF0ZVJlcXVlc3RGdW5jdGlvbih7IG1ldGhvZCB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJlcXVlc3RDb21tYW5kLm1ldGhvZE5hbWUsICdnZXR0ZXInKV0gKCkge1xuICAgICAgICBjb25zdCBmbiA9IHRoaXMuX2NyZWF0ZVJlcXVlc3RGdW5jdGlvbigpO1xuXG4gICAgICAgIHRoaXMuX2RlY29yYXRlUmVxdWVzdEZ1bmN0aW9uKGZuKTtcblxuICAgICAgICByZXR1cm4gZm47XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShDbGlja0NvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChDbGlja0NvbW1hbmQsIHsgc2VsZWN0b3IsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShSaWdodENsaWNrQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFJpZ2h0Q2xpY2tDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoRG91YmxlQ2xpY2tDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoRG91YmxlQ2xpY2tDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoSG92ZXJDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoSG92ZXJDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoRHJhZ0NvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3RvciwgZHJhZ09mZnNldFgsIGRyYWdPZmZzZXRZLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKERyYWdDb21tYW5kLCB7IHNlbGVjdG9yLCBkcmFnT2Zmc2V0WCwgZHJhZ09mZnNldFksIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShEcmFnVG9FbGVtZW50Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBkZXN0aW5hdGlvblNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKERyYWdUb0VsZW1lbnRDb21tYW5kLCB7IHNlbGVjdG9yLCBkZXN0aW5hdGlvblNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIF9nZXRTZWxlY3RvckZvclNjcm9sbCAoYXJncykge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyB8fCBpc1NlbGVjdG9yKGFyZ3NbMF0pID8gYXJnc1swXSA6IG51bGw7XG5cbiAgICAgICAgaWYgKHNlbGVjdG9yKVxuICAgICAgICAgICAgYXJncy5zaGlmdCgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICAvLyBOT1RFOiBoZXJlIHdlIHVzZSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50IGZvciBvbGQgU2FmYXJpIHZlcnNpb25zXG4gICAgICAgICAgICAvLyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZCBvbiBNb2phdmUgU2FmYXJpIDEyLjEvIEhpZ2ggU2llcnJhIFNhZmFyaSAxMS4xXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgICAgICByZXR1cm4gc2VsZWN0b3I7XG4gICAgfVxuXG4gICAgX2dldFBvc2l0aW9uIChhcmdzKSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnID8gYXJnc1swXSA6IG51bGw7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uKVxuICAgICAgICAgICAgYXJncy5zaGlmdCgpO1xuXG4gICAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNjcm9sbENvbW1hbmQubWV0aG9kTmFtZSldICguLi5hcmdzKSB7XG4gICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuX2dldFBvc2l0aW9uKGFyZ3MpO1xuXG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5fZ2V0U2VsZWN0b3JGb3JTY3JvbGwoYXJncyk7XG5cbiAgICAgICAgbGV0IHggICAgICAgPSB2b2lkIDA7XG4gICAgICAgIGxldCB5ICAgICAgID0gdm9pZCAwO1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHZvaWQgMDtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgWyBwb3NpdGlvbiwgb3B0aW9ucyBdID0gYXJncztcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdudW1iZXInKVxuICAgICAgICAgICAgWyB4LCB5LCBvcHRpb25zIF0gPSBhcmdzO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNjcm9sbENvbW1hbmQsIHsgc2VsZWN0b3IsIHgsIHksIHBvc2l0aW9uLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2Nyb2xsQnlDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uYXJncykge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuX2dldFNlbGVjdG9yRm9yU2Nyb2xsKGFyZ3MpO1xuXG4gICAgICAgIGNvbnN0IFtieVgsIGJ5WSwgb3B0aW9uc10gPSBhcmdzO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNjcm9sbEJ5Q29tbWFuZCwgeyBzZWxlY3RvciwgYnlYLCBieVksIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTY3JvbGxJbnRvVmlld0NvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTY3JvbGxJbnRvVmlld0NvbW1hbmQsIHsgc2VsZWN0b3IsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShUeXBlVGV4dENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3RvciwgdGV4dCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChUeXBlVGV4dENvbW1hbmQsIHsgc2VsZWN0b3IsIHRleHQsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZWxlY3RUZXh0Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBzdGFydFBvcywgZW5kUG9zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNlbGVjdFRleHRDb21tYW5kLCB7IHNlbGVjdG9yLCBzdGFydFBvcywgZW5kUG9zLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2VsZWN0VGV4dEFyZWFDb250ZW50Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBzdGFydExpbmUsIHN0YXJ0UG9zLCBlbmRMaW5lLCBlbmRQb3MsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU2VsZWN0VGV4dEFyZWFDb250ZW50Q29tbWFuZCwge1xuICAgICAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgICAgICBzdGFydExpbmUsXG4gICAgICAgICAgICBzdGFydFBvcyxcbiAgICAgICAgICAgIGVuZExpbmUsXG4gICAgICAgICAgICBlbmRQb3MsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNlbGVjdEVkaXRhYmxlQ29udGVudENvbW1hbmQubWV0aG9kTmFtZSldIChzdGFydFNlbGVjdG9yLCBlbmRTZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTZWxlY3RFZGl0YWJsZUNvbnRlbnRDb21tYW5kLCB7XG4gICAgICAgICAgICBzdGFydFNlbGVjdG9yLFxuICAgICAgICAgICAgZW5kU2VsZWN0b3IsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFByZXNzS2V5Q29tbWFuZC5tZXRob2ROYW1lKV0gKGtleXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoUHJlc3NLZXlDb21tYW5kLCB7IGtleXMsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShXYWl0Q29tbWFuZC5tZXRob2ROYW1lKV0gKHRpbWVvdXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoV2FpdENvbW1hbmQsIHsgdGltZW91dCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKE5hdmlnYXRlVG9Db21tYW5kLm1ldGhvZE5hbWUpXSAodXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKE5hdmlnYXRlVG9Db21tYW5kLCB7IHVybCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNldEZpbGVzVG9VcGxvYWRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIGZpbGVQYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNldEZpbGVzVG9VcGxvYWRDb21tYW5kLCB7IHNlbGVjdG9yLCBmaWxlUGF0aCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKENsZWFyVXBsb2FkQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKENsZWFyVXBsb2FkQ29tbWFuZCwgeyBzZWxlY3RvciB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFRha2VTY3JlZW5zaG90Q29tbWFuZC5tZXRob2ROYW1lKV0gKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKVxuICAgICAgICAgICAgb3B0aW9ucyA9IHsgcGF0aDogb3B0aW9ucyB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFRha2VTY3JlZW5zaG90Q29tbWFuZCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShUYWtlRWxlbWVudFNjcmVlbnNob3RDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZEFyZ3MgPSB7IHNlbGVjdG9yIH07XG5cbiAgICAgICAgaWYgKGFyZ3NbMV0pIHtcbiAgICAgICAgICAgIGNvbW1hbmRBcmdzLnBhdGggICAgPSBhcmdzWzBdO1xuICAgICAgICAgICAgY29tbWFuZEFyZ3Mub3B0aW9ucyA9IGFyZ3NbMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgY29tbWFuZEFyZ3Mub3B0aW9ucyA9IGFyZ3NbMF07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNvbW1hbmRBcmdzLnBhdGggPSBhcmdzWzBdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFRha2VFbGVtZW50U2NyZWVuc2hvdENvbW1hbmQsIGNvbW1hbmRBcmdzKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJlc2l6ZVdpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFJlc2l6ZVdpbmRvd0NvbW1hbmQsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJlc2l6ZVdpbmRvd1RvRml0RGV2aWNlQ29tbWFuZC5tZXRob2ROYW1lKV0gKGRldmljZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChSZXNpemVXaW5kb3dUb0ZpdERldmljZUNvbW1hbmQsIHsgZGV2aWNlLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoTWF4aW1pemVXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKE1heGltaXplV2luZG93Q29tbWFuZCk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTd2l0Y2hUb0lmcmFtZUNvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTd2l0Y2hUb0lmcmFtZUNvbW1hbmQsIHsgc2VsZWN0b3IgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTd2l0Y2hUb01haW5XaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFN3aXRjaFRvTWFpbldpbmRvd0NvbW1hbmQpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoT3BlbldpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICh1cmwpIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNdWx0aXBsZVdpbmRvd0NvbW1hbmQoT3BlbldpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoT3BlbldpbmRvd0NvbW1hbmQsIHsgdXJsIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoQ2xvc2VXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAod2luZG93KSB7XG4gICAgICAgIGNvbnN0IHdpbmRvd0lkID0gd2luZG93Py5pZCB8fCBudWxsO1xuXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKENsb3NlV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChDbG9zZVdpbmRvd0NvbW1hbmQsIHsgd2luZG93SWQgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShHZXRDdXJyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU11bHRpcGxlV2luZG93Q29tbWFuZChHZXRDdXJyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChHZXRDdXJyZW50V2luZG93Q29tbWFuZCk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTd2l0Y2hUb1dpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICh3aW5kb3dTZWxlY3Rvcikge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU11bHRpcGxlV2luZG93Q29tbWFuZChTd2l0Y2hUb1dpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgbGV0IGNvbW1hbmQ7XG4gICAgICAgIGxldCBhcmdzO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93U2VsZWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTd2l0Y2hUb1dpbmRvd0J5UHJlZGljYXRlQ29tbWFuZDtcblxuICAgICAgICAgICAgYXJncyA9IHsgY2hlY2tXaW5kb3c6IHdpbmRvd1NlbGVjdG9yIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb21tYW5kID0gU3dpdGNoVG9XaW5kb3dDb21tYW5kO1xuXG4gICAgICAgICAgICBhcmdzID0geyB3aW5kb3dJZDogd2luZG93U2VsZWN0b3I/LmlkIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChjb21tYW5kLCBhcmdzKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFN3aXRjaFRvUGFyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU11bHRpcGxlV2luZG93Q29tbWFuZChTd2l0Y2hUb1BhcmVudFdpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU3dpdGNoVG9QYXJlbnRXaW5kb3dDb21tYW5kKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFN3aXRjaFRvUHJldmlvdXNXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKFN3aXRjaFRvUHJldmlvdXNXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFN3aXRjaFRvUHJldmlvdXNXaW5kb3dDb21tYW5kKTtcbiAgICB9XG5cbiAgICBfZXZhbCQgKGZuLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQob3B0aW9ucykpXG4gICAgICAgICAgICBvcHRpb25zID0gYXNzaWduKHt9LCBvcHRpb25zLCB7IGJvdW5kVGVzdFJ1bjogdGhpcyB9KTtcblxuICAgICAgICBjb25zdCBidWlsZGVyICA9IG5ldyBDbGllbnRGdW5jdGlvbkJ1aWxkZXIoZm4sIG9wdGlvbnMsIHsgaW5zdGFudGlhdGlvbjogJ2V2YWwnLCBleGVjdXRpb246ICdldmFsJyB9KTtcbiAgICAgICAgY29uc3QgY2xpZW50Rm4gPSBidWlsZGVyLmdldEZ1bmN0aW9uKCk7XG5cbiAgICAgICAgcmV0dXJuIGNsaWVudEZuKCk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZXROYXRpdmVEaWFsb2dIYW5kbGVyQ29tbWFuZC5tZXRob2ROYW1lKV0gKGZuLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNldE5hdGl2ZURpYWxvZ0hhbmRsZXJDb21tYW5kLCB7XG4gICAgICAgICAgICBkaWFsb2dIYW5kbGVyOiB7IGZuLCBvcHRpb25zIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoR2V0TmF0aXZlRGlhbG9nSGlzdG9yeUNvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgY29uc3QgY2FsbHNpdGUgPSBnZXRDYWxsc2l0ZUZvck1ldGhvZChHZXROYXRpdmVEaWFsb2dIaXN0b3J5Q29tbWFuZC5tZXRob2ROYW1lKTtcbiAgICAgICAgY29uc3QgY29tbWFuZCAgPSB0aGlzLl9jcmVhdGVDb21tYW5kKEdldE5hdGl2ZURpYWxvZ0hpc3RvcnlDb21tYW5kLCB7fSwgY2FsbHNpdGUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoR2V0QnJvd3NlckNvbnNvbGVNZXNzYWdlc0NvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgY29uc3QgY2FsbHNpdGUgPSBnZXRDYWxsc2l0ZUZvck1ldGhvZChHZXRCcm93c2VyQ29uc29sZU1lc3NhZ2VzQ29tbWFuZC5tZXRob2ROYW1lKTtcbiAgICAgICAgY29uc3QgY29tbWFuZCAgPSB0aGlzLl9jcmVhdGVDb21tYW5kKEdldEJyb3dzZXJDb25zb2xlTWVzc2FnZXNDb21tYW5kLCB7fSwgY2FsbHNpdGUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuICAgIH1cblxuICAgIGNoZWNrRm9yRXhjZXNzaXZlQXdhaXRzIChjaGVja2VkQ2FsbHNpdGUsIHsgYWN0aW9uSWQgfSkge1xuICAgICAgICBjb25zdCBzbmFwc2hvdFByb3BlcnR5Q2FsbHNpdGVzID0gdGhpcy50ZXN0UnVuLm9ic2VydmVkQ2FsbHNpdGVzLnNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXM7XG4gICAgICAgIGNvbnN0IGNhbGxzaXRlSWQgICAgICAgICAgICAgICAgPSBnZXRDYWxsc2l0ZUlkKGNoZWNrZWRDYWxsc2l0ZSk7XG5cbiAgICAgICAgLy8gTk9URTogSWYgdGhlcmUgYXJlIHVuYXNzZXJ0ZWQgY2FsbHNpdGVzLCB3ZSBzaG91bGQgYWRkIGFsbCBvZiB0aGVtIHRvIGF3YWl0ZWRTbmFwc2hvdFdhcm5pbmdzLlxuICAgICAgICAvLyBUaGUgd2FybmluZ3MgdGhlbXNlbHZlcyBhcmUgcmFpc2VkIGFmdGVyIHRoZSB0ZXN0IHJ1biBpbiB3cmFwLXRlc3QtZnVuY3Rpb25cbiAgICAgICAgaWYgKHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF0gJiYgIXNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF0uY2hlY2tlZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eUNhbGxzaXRlIG9mIHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF0uY2FsbHNpdGVzKVxuICAgICAgICAgICAgICAgIHRoaXMudGVzdFJ1bi5vYnNlcnZlZENhbGxzaXRlcy5hd2FpdGVkU25hcHNob3RXYXJuaW5ncy5zZXQoZ2V0Q2FsbHNpdGVTdGFja0ZyYW1lU3RyaW5nKHByb3BlcnR5Q2FsbHNpdGUpLCB7IGNhbGxzaXRlOiBwcm9wZXJ0eUNhbGxzaXRlLCBhY3Rpb25JZCB9KTtcblxuICAgICAgICAgICAgZGVsZXRlIHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlc1tjYWxsc2l0ZUlkXSA9IHsgY2FsbHNpdGVzOiBbXSwgY2hlY2tlZDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lKV0gKGFjdHVhbCkge1xuICAgICAgICBjb25zdCBjYWxsc2l0ZSA9IGdldENhbGxzaXRlRm9yTWV0aG9kKEFzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24oYWN0dWFsLCB0aGlzLCBjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShEZWJ1Z0NvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChEZWJ1Z0NvbW1hbmQsIHsgc2VsZWN0b3IgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZXRUZXN0U3BlZWRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc3BlZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU2V0VGVzdFNwZWVkQ29tbWFuZCwgeyBzcGVlZCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNldFBhZ2VMb2FkVGltZW91dENvbW1hbmQubWV0aG9kTmFtZSldIChkdXJhdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTZXRQYWdlTG9hZFRpbWVvdXRDb21tYW5kLCB7IGR1cmF0aW9uIH0sICh0ZXN0Q29udHJvbGxlciwgY29tbWFuZCkgPT4ge1xuICAgICAgICAgICAgYWRkV2FybmluZyh0ZXN0Q29udHJvbGxlci53YXJuaW5nTG9nLCB7IG1lc3NhZ2U6IGdldERlcHJlY2F0aW9uTWVzc2FnZShERVBSRUNBVEVELnNldFBhZ2VMb2FkVGltZW91dCksIGFjdGlvbklkOiBjb21tYW5kLmFjdGlvbklkIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFVzZVJvbGVDb21tYW5kLm1ldGhvZE5hbWUpXSAocm9sZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChVc2VSb2xlQ29tbWFuZCwgeyByb2xlIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2tpcEpzRXJyb3JzQ29tbWFuZC5tZXRob2ROYW1lKV0gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU2tpcEpzRXJyb3JzQ29tbWFuZCwgeyBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoQWRkUmVxdWVzdEhvb2tzQ29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmhvb2tzKSB7XG4gICAgICAgIGhvb2tzID0gZmxhdHRlbkRlZXAoaG9va3MpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKEFkZFJlcXVlc3RIb29rc0NvbW1hbmQsIHsgaG9va3MgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShSZW1vdmVSZXF1ZXN0SG9va3NDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uaG9va3MpIHtcbiAgICAgICAgaG9va3MgPSBmbGF0dGVuRGVlcChob29rcyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoUmVtb3ZlUmVxdWVzdEhvb2tzQ29tbWFuZCwgeyBob29rcyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJlcG9ydENvbW1hbmQubWV0aG9kTmFtZSldICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFJlcG9ydENvbW1hbmQsIHsgYXJncyB9KTtcbiAgICB9XG4gICAgc2hvdWxkU3RvcCAoY29tbWFuZCkge1xuICAgICAgICAvLyBOT1RFOiBzaG91bGQgYWx3YXlzIHN0b3Agb24gRGVidWcgY29tbWFuZFxuICAgICAgICByZXR1cm4gY29tbWFuZCA9PT0gJ2RlYnVnJztcbiAgICB9XG59XG5cblRlc3RDb250cm9sbGVyLkFQSV9MSVNUID0gZ2V0RGVsZWdhdGVkQVBJTGlzdChUZXN0Q29udHJvbGxlci5wcm90b3R5cGUpO1xuXG5kZWxlZ2F0ZUFQSShUZXN0Q29udHJvbGxlci5wcm90b3R5cGUsIFRlc3RDb250cm9sbGVyLkFQSV9MSVNULCB7IHVzZUN1cnJlbnRDdHhBc0hhbmRsZXI6IHRydWUgfSk7XG4iXX0=
|
|
@@ -53,6 +53,7 @@ class BrowserConnectionGateway extends events_1.EventEmitter {
|
|
|
53
53
|
this._dispatch(`${service_routes_1.default.initScript}/{id}`, proxy, BrowserConnectionGateway._onInitScriptResponse, 'POST');
|
|
54
54
|
this._dispatch(`${service_routes_1.default.activeWindowId}/{id}`, proxy, BrowserConnectionGateway._onGetActiveWindowIdRequest, 'GET');
|
|
55
55
|
this._dispatch(`${service_routes_1.default.activeWindowId}/{id}`, proxy, BrowserConnectionGateway._onSetActiveWindowIdRequest, 'POST');
|
|
56
|
+
this._dispatch(`${service_routes_1.default.ensureWindowInNativeAutomation}/{id}`, proxy, BrowserConnectionGateway._ensureWindowInNativeAutomation, 'POST');
|
|
56
57
|
this._dispatch(`${service_routes_1.default.closeWindow}/{id}`, proxy, BrowserConnectionGateway._onCloseWindowRequest, 'POST');
|
|
57
58
|
this._dispatch(`${service_routes_1.default.openFileProtocol}/{id}`, proxy, BrowserConnectionGateway._onOpenFileProtocolRequest, 'POST');
|
|
58
59
|
this._dispatch(`${service_routes_1.default.dispatchNativeAutomationEvent}/{id}`, proxy, BrowserConnectionGateway._onDispatchNativeAutomationEvent, 'POST');
|
|
@@ -145,6 +146,14 @@ class BrowserConnectionGateway extends events_1.EventEmitter {
|
|
|
145
146
|
});
|
|
146
147
|
}
|
|
147
148
|
}
|
|
149
|
+
static async _ensureWindowInNativeAutomation(req, res, connection) {
|
|
150
|
+
if (BrowserConnectionGateway._ensureConnectionReady(res, connection)) {
|
|
151
|
+
BrowserConnectionGateway._fetchRequestData(req, async (data) => {
|
|
152
|
+
const windowId = await connection.getNewWindowIdInNativeAutomation(JSON.parse(data).windowId);
|
|
153
|
+
(0, http_1.respondWithJSON)(res, { windowId });
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
148
157
|
static _onSetActiveWindowIdRequest(req, res, connection) {
|
|
149
158
|
if (BrowserConnectionGateway._ensureConnectionReady(res, connection)) {
|
|
150
159
|
BrowserConnectionGateway._fetchRequestData(req, data => {
|
|
@@ -266,4 +275,4 @@ class BrowserConnectionGateway extends events_1.EventEmitter {
|
|
|
266
275
|
}
|
|
267
276
|
exports.default = BrowserConnectionGateway;
|
|
268
277
|
module.exports = exports.default;
|
|
269
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYnJvd3Nlci9jb25uZWN0aW9uL2dhdGV3YXkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx1RUFBOEM7QUFDOUMsOENBTTZCO0FBRTdCLHFFQUE0QztBQUM1Qyw2REFBK0Q7QUFJL0QsdUVBQStDO0FBQy9DLHFHQUE2RTtBQUM3RSx5RkFBbUY7QUFDbkYsc0ZBQW1GO0FBR25GLHNEQUFzRDtBQUN0RCxtQ0FBc0M7QUFNdEMsTUFBTSwwQ0FBMEMsR0FBRztJQUMvQyxjQUFjLEVBQUUsS0FBSztDQUN4QixDQUFDO0FBRUYsTUFBcUIsd0JBQXlCLFNBQVEscUJBQVk7SUFROUQsWUFBb0IsS0FBWSxFQUFFLE9BQXdDO1FBQ3RFLEtBQUssRUFBRSxDQUFDO1FBUkosaUJBQVksR0FBa0MsRUFBRSxDQUFDO1FBVXJELElBQUksQ0FBQyxhQUFhLEdBQUksSUFBSSx1QkFBWSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLFVBQVUsR0FBTyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBUyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLEtBQUssR0FBWSxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBVSxnQkFBOEIsQ0FBQyxhQUFhLENBQUM7SUFDdkUsQ0FBQztJQUVPLHVCQUF1QixDQUFFLE9BQXdDO1FBQ3JFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsMENBQTBDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVPLFNBQVMsQ0FBRSxHQUFXLEVBQUUsS0FBWSxFQUFFLE9BQWlCLEVBQUUsTUFBTSxHQUFHLEtBQUs7UUFDM0UseUVBQXlFO1FBQ3pFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFvQixF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RCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDZCxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxZQUFZO1lBQzlCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUV4QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxjQUFjO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDckIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztJQUN4QyxDQUFDO0lBRU0sVUFBVSxDQUFFLE9BQTZCO1FBQzVDLDBEQUEwRDtRQUMxRCxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssZ0JBQThCLENBQUMsV0FBVztZQUMzRCxPQUFPO1FBRVgsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLHdCQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLE9BQU8sR0FBTSxnQkFBOEIsQ0FBQyxXQUFXLENBQUM7UUFFN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3QixDQUFDO0NBQ0o7QUFuVUQsMkNBbVVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvYWRBc3NldHMgZnJvbSAnLi4vLi4vLi4vbG9hZC1hc3NldHMnO1xuaW1wb3J0IHtcbiAgICByZXNwb25kNDA0LFxuICAgIHJlc3BvbmQ1MDAsXG4gICAgcmVzcG9uZFdpdGhKU09OLFxuICAgIHJlZGlyZWN0LFxuICAgIHByZXZlbnRDYWNoaW5nLFxufSBmcm9tICcuLi8uLi8uLi91dGlscy9odHRwJztcblxuaW1wb3J0IFJlbW90ZXNRdWV1ZSBmcm9tICcuLi9yZW1vdGVzLXF1ZXVlJztcbmltcG9ydCB7IFByb3h5LCBhY2NlcHRDcm9zc09yaWdpbiB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZ3VyYXRpb24vaW50ZXJmYWNlcyc7XG5pbXBvcnQgQnJvd3NlckNvbm5lY3Rpb24gZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IHsgSW5jb21pbmdNZXNzYWdlLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gJ2h0dHAnO1xuaW1wb3J0IFNFUlZJQ0VfUk9VVEVTIGZyb20gJy4uL3NlcnZpY2Utcm91dGVzJztcbmltcG9ydCBFTVBUWV9QQUdFX01BUktVUCBmcm9tICcuLi8uLi8uLi9uYXRpdmUtYXV0b21hdGlvbi9lbXB0eS1wYWdlLW1hcmt1cCc7XG5pbXBvcnQgTkFUSVZFX0FVVE9NQVRJT05fRVJST1JfUk9VVEUgZnJvbSAnLi4vLi4vLi4vbmF0aXZlLWF1dG9tYXRpb24vZXJyb3Itcm91dGUnO1xuaW1wb3J0IHsgaW5pdFNlbGVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvdmFsaWRhdGlvbnMvaW5pdGlhbGl6ZXJzJztcbmltcG9ydCBUZXN0UnVuIGZyb20gJy4uLy4uLy4uL3Rlc3QtcnVuJztcbmltcG9ydCB7IFRlc3RDYWZlU3RhcnRPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vY29uZmlndXJhdGlvbi90ZXN0Y2FmZS1jb25maWd1cmF0aW9uJztcbmltcG9ydCBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXlTdGF0dXMgZnJvbSAnLi9zdGF0dXMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuZXhwb3J0IGludGVyZmFjZSBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXlPcHRpb25zIHtcbiAgICByZXRyeVRlc3RQYWdlczogYm9vbGVhbjtcbn1cblxuY29uc3QgREVGQVVMVF9CUk9XU0VSX0NPTk5FQ1RJT05fR0FURVdBWV9PUFRJT05TID0ge1xuICAgIHJldHJ5VGVzdFBhZ2VzOiBmYWxzZSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgcHJpdmF0ZSBfY29ubmVjdGlvbnM6IERpY3Rpb25hcnk8QnJvd3NlckNvbm5lY3Rpb24+ID0ge307XG4gICAgcHJpdmF0ZSBfcmVtb3Rlc1F1ZXVlOiBSZW1vdGVzUXVldWU7XG4gICAgcHVibGljIGNvbm5lY3RVcmw6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXlPcHRpb25zO1xuICAgIHB1YmxpYyByZWFkb25seSBwcm94eTogUHJveHk7XG4gICAgcHJpdmF0ZSBfc3RhdHVzOiBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXlTdGF0dXM7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHByb3h5OiBQcm94eSwgb3B0aW9uczogQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5T3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMuX3JlbW90ZXNRdWV1ZSAgPSBuZXcgUmVtb3Rlc1F1ZXVlKCk7XG4gICAgICAgIHRoaXMuY29ubmVjdFVybCAgICAgPSAnJztcbiAgICAgICAgdGhpcy5fb3B0aW9ucyAgICAgICA9IHRoaXMuX2NhbGN1bGF0ZVJlc3VsdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHRoaXMucHJveHkgICAgICAgICAgPSBwcm94eTtcbiAgICAgICAgdGhpcy5fc3RhdHVzICAgICAgICA9IEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheVN0YXR1cy51bmluaXRpYWxpemVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVJlc3VsdE9wdGlvbnMgKG9wdGlvbnM6IEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheU9wdGlvbnMpOiBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXlPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQlJPV1NFUl9DT05ORUNUSU9OX0dBVEVXQVlfT1BUSU9OUywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzcGF0Y2ggKHVybDogc3RyaW5nLCBwcm94eTogUHJveHksIGhhbmRsZXI6IEZ1bmN0aW9uLCBtZXRob2QgPSAnR0VUJyk6IHZvaWQge1xuICAgICAgICAvLyBAdHMtaWdub3JlIE5lZWQgdG8gaW1wcm92ZSB0eXBpbmdzIG9mIHRoZSAndGVzdGNhZmUtaGFtbWVyaGVhZCcgbW9kdWxlXG4gICAgICAgIHByb3h5W21ldGhvZF0odXJsLCAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UsIHNlcnZlckluZm8sIHBhcmFtczogRGljdGlvbmFyeTxzdHJpbmc+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbnNbcGFyYW1zLmlkXTtcblxuICAgICAgICAgICAgcHJldmVudENhY2hpbmcocmVzKTtcbiAgICAgICAgICAgIGFjY2VwdENyb3NzT3JpZ2luKHJlcyk7XG5cbiAgICAgICAgICAgIGlmIChjb25uZWN0aW9uKVxuICAgICAgICAgICAgICAgIGhhbmRsZXIocmVxLCByZXMsIGNvbm5lY3Rpb24pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJlc3BvbmQ0MDQocmVzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVnaXN0ZXJSb3V0ZXMgKHByb3h5OiBQcm94eSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpZGxlUGFnZVNjcmlwdCxcbiAgICAgICAgICAgIGlkbGVQYWdlU3R5bGUsXG4gICAgICAgICAgICBpZGxlUGFnZUxvZ28sXG4gICAgICAgICAgICBzZXJ2aWNlV29ya2VyU2NyaXB0LFxuICAgICAgICB9ID0gbG9hZEFzc2V0cygpO1xuXG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoKGAke1NFUlZJQ0VfUk9VVEVTLmNvbm5lY3R9L3tpZH1gLCBwcm94eSwgQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5Ll9vbkNvbm5lY3Rpb24pO1xuICAgICAgICB0aGlzLl9kaXNwYXRjaChgJHtTRVJWSUNFX1JPVVRFUy5oZWFydGJlYXR9L3tpZH1gLCBwcm94eSwgQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5Ll9vbkhlYXJ0YmVhdCwgJ0dFVCcpO1xuICAgICAgICB0aGlzLl9kaXNwYXRjaChgJHtTRVJWSUNFX1JPVVRFUy5pZGxlfS97aWR9YCwgcHJveHksIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fb25JZGxlKTtcbiAgICAgICAgdGhpcy5fZGlzcGF0Y2goYCR7U0VSVklDRV9ST1VURVMuaWRsZUZvcmNlZH0ve2lkfWAsIHByb3h5LCBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX29uSWRsZUZvcmNlZCk7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoKGAke1NFUlZJQ0VfUk9VVEVTLnN0YXR1c30ve2lkfWAsIHByb3h5LCBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX29uU3RhdHVzUmVxdWVzdCk7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoKGAke1NFUlZJQ0VfUk9VVEVTLnN0YXR1c0RvbmV9L3tpZH1gLCBwcm94eSwgQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5Ll9vblN0YXR1c1JlcXVlc3RPblRlc3REb25lLCAnR0VUJyk7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoKGAke1NFUlZJQ0VfUk9VVEVTLmluaXRTY3JpcHR9L3tpZH1gLCBwcm94eSwgQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5Ll9vbkluaXRTY3JpcHRSZXF1ZXN0KTtcbiAgICAgICAgdGhpcy5fZGlzcGF0Y2goYCR7U0VSVklDRV9ST1VURVMuaW5pdFNjcmlwdH0ve2lkfWAsIHByb3h5LCBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX29uSW5pdFNjcmlwdFJlc3BvbnNlLCAnUE9TVCcpO1xuICAgICAgICB0aGlzLl9kaXNwYXRjaChgJHtTRVJWSUNFX1JPVVRFUy5hY3RpdmVXaW5kb3dJZH0ve2lkfWAsIHByb3h5LCBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX29uR2V0QWN0aXZlV2luZG93SWRSZXF1ZXN0LCAnR0VUJyk7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoKGAke1NFUlZJQ0VfUk9VVEVTLmFjdGl2ZVdpbmRvd0lkfS97aWR9YCwgcHJveHksIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fb25TZXRBY3RpdmVXaW5kb3dJZFJlcXVlc3QsICdQT1NUJyk7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoKGAke1NFUlZJQ0VfUk9VVEVTLmNsb3NlV2luZG93fS97aWR9YCwgcHJveHksIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fb25DbG9zZVdpbmRvd1JlcXVlc3QsICdQT1NUJyk7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoKGAke1NFUlZJQ0VfUk9VVEVTLm9wZW5GaWxlUHJvdG9jb2x9L3tpZH1gLCBwcm94eSwgQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5Ll9vbk9wZW5GaWxlUHJvdG9jb2xSZXF1ZXN0LCAnUE9TVCcpO1xuICAgICAgICB0aGlzLl9kaXNwYXRjaChgJHtTRVJWSUNFX1JPVVRFUy5kaXNwYXRjaE5hdGl2ZUF1dG9tYXRpb25FdmVudH0ve2lkfWAsIHByb3h5LCBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX29uRGlzcGF0Y2hOYXRpdmVBdXRvbWF0aW9uRXZlbnQsICdQT1NUJyk7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoKGAke1NFUlZJQ0VfUk9VVEVTLnBhcnNlU2VsZWN0b3J9L3tpZH1gLCBwcm94eSwgQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5Ll9wYXJzZVNlbGVjdG9yLCAnUE9TVCcpO1xuICAgICAgICB0aGlzLl9kaXNwYXRjaChgJHtTRVJWSUNFX1JPVVRFUy5kaXNwYXRjaE5hdGl2ZUF1dG9tYXRpb25FdmVudFNlcXVlbmNlfS97aWR9YCwgcHJveHksIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fb25EaXNwYXRjaE5hdGl2ZUF1dG9tYXRpb25FdmVudFNlcXVlbmNlLCAnUE9TVCcpO1xuXG4gICAgICAgIHByb3h5LkdFVChTRVJWSUNFX1JPVVRFUy5jb25uZWN0LCAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UpID0+IHRoaXMuX2Nvbm5lY3ROZXh0UmVtb3RlQnJvd3NlcihyZXEsIHJlcykpO1xuICAgICAgICBwcm94eS5HRVQoU0VSVklDRV9ST1VURVMuY29ubmVjdFdpdGhUcmFpbGluZ1NsYXNoLCAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UpID0+IHRoaXMuX2Nvbm5lY3ROZXh0UmVtb3RlQnJvd3NlcihyZXEsIHJlcykpO1xuXG4gICAgICAgIHByb3h5LkdFVChTRVJWSUNFX1JPVVRFUy5zZXJ2aWNlV29ya2VyLCB7IGNvbnRlbnQ6IHNlcnZpY2VXb3JrZXJTY3JpcHQsIGNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24veC1qYXZhc2NyaXB0JyB9KTtcbiAgICAgICAgcHJveHkuR0VUKFNFUlZJQ0VfUk9VVEVTLmFzc2V0cy5pbmRleCwgeyBjb250ZW50OiBpZGxlUGFnZVNjcmlwdCwgY29udGVudFR5cGU6ICdhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQnIH0pO1xuICAgICAgICBwcm94eS5HRVQoU0VSVklDRV9ST1VURVMuYXNzZXRzLnN0eWxlcywgeyBjb250ZW50OiBpZGxlUGFnZVN0eWxlLCBjb250ZW50VHlwZTogJ3RleHQvY3NzJyB9KTtcbiAgICAgICAgcHJveHkuR0VUKFNFUlZJQ0VfUk9VVEVTLmFzc2V0cy5sb2dvLCB7IGNvbnRlbnQ6IGlkbGVQYWdlTG9nbywgY29udGVudFR5cGU6ICdpbWFnZS9zdmcreG1sJyB9KTtcblxuICAgICAgICBwcm94eS5HRVQoTkFUSVZFX0FVVE9NQVRJT05fRVJST1JfUk9VVEUsIChyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgcmVzLndyaXRlSGVhZCgyMDAsIHsgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L2h0bWwnIH0pO1xuICAgICAgICAgICAgcmVzLmVuZChFTVBUWV9QQUdFX01BUktVUCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEhlbHBlcnNcbiAgICBwcml2YXRlIHN0YXRpYyBfZW5zdXJlQ29ubmVjdGlvblJlYWR5IChyZXM6IFNlcnZlclJlc3BvbnNlLCBjb25uZWN0aW9uOiBCcm93c2VyQ29ubmVjdGlvbik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWNvbm5lY3Rpb24uaXNSZWFkeSgpKSB7XG4gICAgICAgICAgICByZXNwb25kNTAwKHJlcywgJ1RoZSBjb25uZWN0aW9uIGlzIG5vdCByZWFkeSB5ZXQuJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfZmV0Y2hSZXF1ZXN0RGF0YSAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIGNhbGxiYWNrOiAoZGF0YTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGxldCBkYXRhID0gJyc7XG5cbiAgICAgICAgcmVxLm9uKCdkYXRhJywgY2h1bmsgPT4ge1xuICAgICAgICAgICAgZGF0YSArPSBjaHVuaztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVxLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhkYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBSb3V0ZSBoYW5kbGVyc1xuICAgIHByaXZhdGUgc3RhdGljIGFzeW5jIF9vbkNvbm5lY3Rpb24gKHJlcTogSW5jb21pbmdNZXNzYWdlLCByZXM6IFNlcnZlclJlc3BvbnNlLCBjb25uZWN0aW9uOiBCcm93c2VyQ29ubmVjdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoY29ubmVjdGlvbi5pc1JlYWR5KCkpXG4gICAgICAgICAgICByZXNwb25kNTAwKHJlcywgJ1RoZSBjb25uZWN0aW9uIGlzIGFscmVhZHkgZXN0YWJsaXNoZWQuJyk7XG5cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB1c2VyQWdlbnQgPSByZXEuaGVhZGVyc1sndXNlci1hZ2VudCddIGFzIHN0cmluZztcblxuICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5lc3RhYmxpc2godXNlckFnZW50KTtcbiAgICAgICAgICAgIHJlZGlyZWN0KHJlcywgY29ubmVjdGlvbi5pZGxlVXJsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9vbkhlYXJ0YmVhdCAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UsIGNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX2Vuc3VyZUNvbm5lY3Rpb25SZWFkeShyZXMsIGNvbm5lY3Rpb24pKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXMgPSBjb25uZWN0aW9uLmhlYXJ0YmVhdCgpO1xuXG4gICAgICAgICAgICByZXNwb25kV2l0aEpTT04ocmVzLCBzdGF0dXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX29uSWRsZSAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UsIGNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX2Vuc3VyZUNvbm5lY3Rpb25SZWFkeShyZXMsIGNvbm5lY3Rpb24pKVxuICAgICAgICAgICAgcmVzLmVuZChjb25uZWN0aW9uLnJlbmRlcklkbGVQYWdlKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFzeW5jIF9vbklkbGVGb3JjZWQgKHJlcTogSW5jb21pbmdNZXNzYWdlLCByZXM6IFNlcnZlclJlc3BvbnNlLCBjb25uZWN0aW9uOiBCcm93c2VyQ29ubmVjdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5Ll9lbnN1cmVDb25uZWN0aW9uUmVhZHkocmVzLCBjb25uZWN0aW9uKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgY29ubmVjdGlvbi5nZXRTdGF0dXModHJ1ZSk7XG5cbiAgICAgICAgICAgIHJlZGlyZWN0KHJlcywgc3RhdHVzLnVybCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBfb25TdGF0dXNSZXF1ZXN0IChyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSwgY29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fb25TdGF0dXNSZXF1ZXN0Q29yZShyZXEsIHJlcywgY29ubmVjdGlvbiwgZmFsc2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFzeW5jIF9vblN0YXR1c1JlcXVlc3RPblRlc3REb25lIChyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSwgY29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fb25TdGF0dXNSZXF1ZXN0Q29yZShyZXEsIHJlcywgY29ubmVjdGlvbiwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgX29uU3RhdHVzUmVxdWVzdENvcmUgKHJlcTogSW5jb21pbmdNZXNzYWdlLCByZXM6IFNlcnZlclJlc3BvbnNlLCBjb25uZWN0aW9uOiBCcm93c2VyQ29ubmVjdGlvbiwgaXNUZXN0RG9uZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5Ll9lbnN1cmVDb25uZWN0aW9uUmVhZHkocmVzLCBjb25uZWN0aW9uKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgY29ubmVjdGlvbi5nZXRTdGF0dXMoaXNUZXN0RG9uZSk7XG5cbiAgICAgICAgICAgIHJlc3BvbmRXaXRoSlNPTihyZXMsIHN0YXR1cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfb25Jbml0U2NyaXB0UmVxdWVzdCAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UsIGNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX2Vuc3VyZUNvbm5lY3Rpb25SZWFkeShyZXMsIGNvbm5lY3Rpb24pKSB7XG4gICAgICAgICAgICBjb25zdCBzY3JpcHQgPSBjb25uZWN0aW9uLmdldEluaXRTY3JpcHQoKTtcblxuICAgICAgICAgICAgcmVzcG9uZFdpdGhKU09OKHJlcywgc2NyaXB0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9vbkluaXRTY3JpcHRSZXNwb25zZSAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UsIGNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX2Vuc3VyZUNvbm5lY3Rpb25SZWFkeShyZXMsIGNvbm5lY3Rpb24pKSB7XG4gICAgICAgICAgICBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX2ZldGNoUmVxdWVzdERhdGEocmVxLCBkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmhhbmRsZUluaXRTY3JpcHRSZXN1bHQoZGF0YSk7XG5cbiAgICAgICAgICAgICAgICByZXMuZW5kKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9vbkdldEFjdGl2ZVdpbmRvd0lkUmVxdWVzdCAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UsIGNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX2Vuc3VyZUNvbm5lY3Rpb25SZWFkeShyZXMsIGNvbm5lY3Rpb24pKSB7XG4gICAgICAgICAgICByZXNwb25kV2l0aEpTT04ocmVzLCB7XG4gICAgICAgICAgICAgICAgYWN0aXZlV2luZG93SWQ6IGNvbm5lY3Rpb24uYWN0aXZlV2luZG93SWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9vblNldEFjdGl2ZVdpbmRvd0lkUmVxdWVzdCAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UsIGNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX2Vuc3VyZUNvbm5lY3Rpb25SZWFkeShyZXMsIGNvbm5lY3Rpb24pKSB7XG4gICAgICAgICAgICBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX2ZldGNoUmVxdWVzdERhdGEocmVxLCBkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWREYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcblxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uYWN0aXZlV2luZG93SWQgPSBwYXJzZWREYXRhLndpbmRvd0lkO1xuXG4gICAgICAgICAgICAgICAgcmVzcG9uZFdpdGhKU09OKHJlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9vbkNsb3NlV2luZG93UmVxdWVzdCAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UsIGNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX2Vuc3VyZUNvbm5lY3Rpb25SZWFkeShyZXMsIGNvbm5lY3Rpb24pKSB7XG4gICAgICAgICAgICBjb25uZWN0aW9uLnByb3ZpZGVyLmNsb3NlQnJvd3NlckNoaWxkV2luZG93KGNvbm5lY3Rpb24uaWQpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25kV2l0aEpTT04ocmVzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9vbk9wZW5GaWxlUHJvdG9jb2xSZXF1ZXN0IChyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSwgY29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZW5zdXJlQ29ubmVjdGlvblJlYWR5KHJlcywgY29ubmVjdGlvbikpIHtcbiAgICAgICAgICAgIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZmV0Y2hSZXF1ZXN0RGF0YShyZXEsIGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5vcGVuRmlsZVByb3RvY29sKHBhcnNlZERhdGEudXJsKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25kV2l0aEpTT04ocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9vbkRpc3BhdGNoTmF0aXZlQXV0b21hdGlvbkV2ZW50IChyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSwgY29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZW5zdXJlQ29ubmVjdGlvblJlYWR5KHJlcywgY29ubmVjdGlvbikpIHtcbiAgICAgICAgICAgIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZmV0Y2hSZXF1ZXN0RGF0YShyZXEsIGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdHlwZSwgb3B0aW9ucyB9ID0gSlNPTi5wYXJzZShkYXRhKTtcblxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uZGlzcGF0Y2hOYXRpdmVBdXRvbWF0aW9uRXZlbnQodHlwZSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uZFdpdGhKU09OKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfb25EaXNwYXRjaE5hdGl2ZUF1dG9tYXRpb25FdmVudFNlcXVlbmNlIChyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSwgY29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZW5zdXJlQ29ubmVjdGlvblJlYWR5KHJlcywgY29ubmVjdGlvbikpIHtcbiAgICAgICAgICAgIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZmV0Y2hSZXF1ZXN0RGF0YShyZXEsIGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50U2VxdWVuY2UgPSBKU09OLnBhcnNlKGRhdGEpO1xuXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5kaXNwYXRjaE5hdGl2ZUF1dG9tYXRpb25FdmVudFNlcXVlbmNlKGV2ZW50U2VxdWVuY2UpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmRXaXRoSlNPTihyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfY29ubmVjdE5leHRSZW1vdGVCcm93c2VyIChyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBwcmV2ZW50Q2FjaGluZyhyZXMpO1xuXG4gICAgICAgIGNvbnN0IHJlbW90ZUNvbm5lY3Rpb24gPSBhd2FpdCB0aGlzLl9yZW1vdGVzUXVldWUuc2hpZnQoKTtcblxuICAgICAgICBpZiAocmVtb3RlQ29ubmVjdGlvbilcbiAgICAgICAgICAgIHJlZGlyZWN0KHJlcywgcmVtb3RlQ29ubmVjdGlvbi51cmwpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXNwb25kNTAwKHJlcywgJ1RoZXJlIGFyZSBubyBhdmFpbGFibGUgX2Nvbm5lY3Rpb25zIHRvIGVzdGFibGlzaC4nKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfZ2V0UGFyc2VkU2VsZWN0b3IgKHRlc3RSdW46IFRlc3RSdW4sIHJhd1NlbGVjdG9yOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgdGVzdFJ1bixcblxuICAgICAgICAgICAgc2tpcFZpc2liaWxpdHlDaGVjazogdHJ1ZSxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25Nb2RlOiAgICAgIHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdmFsdWUgICAgPSByYXdTZWxlY3Rvci50cmltKCkuc3RhcnRzV2l0aCgnU2VsZWN0b3IoJykgPyByYXdTZWxlY3RvciA6IGAnJHtyYXdTZWxlY3Rvcn0nYDtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB7IHR5cGU6ICdqcy1leHByJywgdmFsdWUgfTtcblxuICAgICAgICByZXR1cm4gaW5pdFNlbGVjdG9yKCdzZWxlY3RvcicsIHNlbGVjdG9yLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfcGFyc2VTZWxlY3RvciAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UsIGNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX2Vuc3VyZUNvbm5lY3Rpb25SZWFkeShyZXMsIGNvbm5lY3Rpb24pKSB7XG4gICAgICAgICAgICBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX2ZldGNoUmVxdWVzdERhdGEocmVxLCBkYXRhID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXN0UnVuICAgICAgICA9IGNvbm5lY3Rpb24uZ2V0Q3VycmVudFRlc3RSdW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF3U2VsZWN0b3IgICAgPSBKU09OLnBhcnNlKGRhdGEpLnNlbGVjdG9yO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRTZWxlY3RvciA9IEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZ2V0UGFyc2VkU2VsZWN0b3IodGVzdFJ1biwgcmF3U2VsZWN0b3IpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbmRXaXRoSlNPTihyZXMsIHBhcnNlZFNlbGVjdG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbmRXaXRoSlNPTihyZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQVBJXG4gICAgcHVibGljIHN0YXJ0U2VydmluZ0Nvbm5lY3Rpb24gKGNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rpb25zW2Nvbm5lY3Rpb24uaWRdID0gY29ubmVjdGlvbjtcblxuICAgICAgICBpZiAoY29ubmVjdGlvbi5icm93c2VySW5mby5wcm92aWRlck5hbWUgPT09ICdyZW1vdGUnKVxuICAgICAgICAgICAgdGhpcy5fcmVtb3Rlc1F1ZXVlLmFkZChjb25uZWN0aW9uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcFNlcnZpbmdDb25uZWN0aW9uIChjb25uZWN0aW9uOiBCcm93c2VyQ29ubmVjdGlvbik6IHZvaWQge1xuICAgICAgICBkZWxldGUgdGhpcy5fY29ubmVjdGlvbnNbY29ubmVjdGlvbi5pZF07XG5cbiAgICAgICAgaWYgKGNvbm5lY3Rpb24uYnJvd3NlckluZm8ucHJvdmlkZXJOYW1lID09PSAncmVtb3RlJylcbiAgICAgICAgICAgIHRoaXMuX3JlbW90ZXNRdWV1ZS5yZW1vdmUoY29ubmVjdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNsb3NlICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLl9jb25uZWN0aW9ucylcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2Nvbm5lY3Rpb25zW2lkXS5jbG9zZSgpO1xuXG4gICAgICAgIHRoaXMucHJveHkuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29ubmVjdGlvbnMgKCk6IERpY3Rpb25hcnk8QnJvd3NlckNvbm5lY3Rpb24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3RhdHVzICgpOiBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXlTdGF0dXMge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmV0cnlUZXN0UGFnZXMgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9ucy5yZXRyeVRlc3RQYWdlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdGlhbGl6ZSAob3B0aW9uczogVGVzdENhZmVTdGFydE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgLy8gTk9URTogSW5pdGlhbGl6ZSBvbmx5IG9uY2UgaW4gY2FzZSBvZiBtdWx0aXBsZSBydW5uZXJzLlxuICAgICAgICBpZiAodGhpcy5fc3RhdHVzID09PSBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXlTdGF0dXMuaW5pdGlhbGl6ZWQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5wcm94eS5zdGFydChvcHRpb25zKTtcblxuICAgICAgICB0aGlzLl9yZWdpc3RlclJvdXRlcyh0aGlzLnByb3h5KTtcblxuICAgICAgICB0aGlzLmNvbm5lY3RVcmwgPSB0aGlzLnByb3h5LnJlc29sdmVSZWxhdGl2ZVNlcnZpY2VVcmwoU0VSVklDRV9ST1VURVMuY29ubmVjdCk7XG4gICAgICAgIHRoaXMuX3N0YXR1cyAgICA9IEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheVN0YXR1cy5pbml0aWFsaXplZDtcblxuICAgICAgICB0aGlzLmVtaXQoJ2luaXRpYWxpemVkJyk7XG4gICAgfVxufVxuXG4iXX0=
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYnJvd3Nlci9jb25uZWN0aW9uL2dhdGV3YXkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx1RUFBOEM7QUFDOUMsOENBTTZCO0FBRTdCLHFFQUE0QztBQUM1Qyw2REFBK0Q7QUFJL0QsdUVBQStDO0FBQy9DLHFHQUE2RTtBQUM3RSx5RkFBbUY7QUFDbkYsc0ZBQW1GO0FBR25GLHNEQUFzRDtBQUN0RCxtQ0FBc0M7QUFNdEMsTUFBTSwwQ0FBMEMsR0FBRztJQUMvQyxjQUFjLEVBQUUsS0FBSztDQUN4QixDQUFDO0FBRUYsTUFBcUIsd0JBQXlCLFNBQVEscUJBQVk7SUFROUQsWUFBb0IsS0FBWSxFQUFFLE9BQXdDO1FBQ3RFLEtBQUssRUFBRSxDQUFDO1FBUkosaUJBQVksR0FBa0MsRUFBRSxDQUFDO1FBVXJELElBQUksQ0FBQyxhQUFhLEdBQUksSUFBSSx1QkFBWSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLFVBQVUsR0FBTyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBUyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLEtBQUssR0FBWSxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBVSxnQkFBOEIsQ0FBQyxhQUFhLENBQUM7SUFDdkUsQ0FBQztJQUVPLHVCQUF1QixDQUFFLE9BQXdDO1FBQ3JFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsMENBQTBDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVPLFNBQVMsQ0FBRSxHQUFXLEVBQUUsS0FBWSxFQUFFLE9BQWlCLEVBQUUsTUFBTSxHQUFHLEtBQUs7UUFDM0UseUVBQXlFO1FBQ3pFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFvQixF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TSxVQUFVLENBQUUsT0FBNkI7UUFDNUMsMERBQTBEO1FBQzFELElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxnQkFBOEIsQ0FBQyxXQUFXO1lBQzNELE9BQU87UUFFWCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUxQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsd0JBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsT0FBTyxHQUFNLGdCQUE4QixDQUFDLFdBQVcsQ0FBQztRQUU3RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7Q0FDSjtBQTlVRCwyQ0E4VUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9hZEFzc2V0cyBmcm9tICcuLi8uLi8uLi9sb2FkLWFzc2V0cyc7XG5pbXBvcnQge1xuICAgIHJlc3BvbmQ0MDQsXG4gICAgcmVzcG9uZDUwMCxcbiAgICByZXNwb25kV2l0aEpTT04sXG4gICAgcmVkaXJlY3QsXG4gICAgcHJldmVudENhY2hpbmcsXG59IGZyb20gJy4uLy4uLy4uL3V0aWxzL2h0dHAnO1xuXG5pbXBvcnQgUmVtb3Rlc1F1ZXVlIGZyb20gJy4uL3JlbW90ZXMtcXVldWUnO1xuaW1wb3J0IHsgUHJveHksIGFjY2VwdENyb3NzT3JpZ2luIH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vLi4vY29uZmlndXJhdGlvbi9pbnRlcmZhY2VzJztcbmltcG9ydCBCcm93c2VyQ29ubmVjdGlvbiBmcm9tICcuLi9pbmRleCc7XG5pbXBvcnQgeyBJbmNvbWluZ01lc3NhZ2UsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgU0VSVklDRV9ST1VURVMgZnJvbSAnLi4vc2VydmljZS1yb3V0ZXMnO1xuaW1wb3J0IEVNUFRZX1BBR0VfTUFSS1VQIGZyb20gJy4uLy4uLy4uL25hdGl2ZS1hdXRvbWF0aW9uL2VtcHR5LXBhZ2UtbWFya3VwJztcbmltcG9ydCBOQVRJVkVfQVVUT01BVElPTl9FUlJPUl9ST1VURSBmcm9tICcuLi8uLi8uLi9uYXRpdmUtYXV0b21hdGlvbi9lcnJvci1yb3V0ZSc7XG5pbXBvcnQgeyBpbml0U2VsZWN0b3IgfSBmcm9tICcuLi8uLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy92YWxpZGF0aW9ucy9pbml0aWFsaXplcnMnO1xuaW1wb3J0IFRlc3RSdW4gZnJvbSAnLi4vLi4vLi4vdGVzdC1ydW4nO1xuaW1wb3J0IHsgVGVzdENhZmVTdGFydE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9jb25maWd1cmF0aW9uL3Rlc3RjYWZlLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheVN0YXR1cyBmcm9tICcuL3N0YXR1cyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheU9wdGlvbnMge1xuICAgIHJldHJ5VGVzdFBhZ2VzOiBib29sZWFuO1xufVxuXG5jb25zdCBERUZBVUxUX0JST1dTRVJfQ09OTkVDVElPTl9HQVRFV0FZX09QVElPTlMgPSB7XG4gICAgcmV0cnlUZXN0UGFnZXM6IGZhbHNlLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBwcml2YXRlIF9jb25uZWN0aW9uczogRGljdGlvbmFyeTxCcm93c2VyQ29ubmVjdGlvbj4gPSB7fTtcbiAgICBwcml2YXRlIF9yZW1vdGVzUXVldWU6IFJlbW90ZXNRdWV1ZTtcbiAgICBwdWJsaWMgY29ubmVjdFVybDogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheU9wdGlvbnM7XG4gICAgcHVibGljIHJlYWRvbmx5IHByb3h5OiBQcm94eTtcbiAgICBwcml2YXRlIF9zdGF0dXM6IEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheVN0YXR1cztcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAocHJveHk6IFByb3h5LCBvcHRpb25zOiBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXlPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5fcmVtb3Rlc1F1ZXVlICA9IG5ldyBSZW1vdGVzUXVldWUoKTtcbiAgICAgICAgdGhpcy5jb25uZWN0VXJsICAgICA9ICcnO1xuICAgICAgICB0aGlzLl9vcHRpb25zICAgICAgID0gdGhpcy5fY2FsY3VsYXRlUmVzdWx0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgdGhpcy5wcm94eSAgICAgICAgICA9IHByb3h5O1xuICAgICAgICB0aGlzLl9zdGF0dXMgICAgICAgID0gQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5U3RhdHVzLnVuaW5pdGlhbGl6ZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlUmVzdWx0T3B0aW9ucyAob3B0aW9uczogQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5T3B0aW9ucyk6IEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheU9wdGlvbnMge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9CUk9XU0VSX0NPTk5FQ1RJT05fR0FURVdBWV9PUFRJT05TLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kaXNwYXRjaCAodXJsOiBzdHJpbmcsIHByb3h5OiBQcm94eSwgaGFuZGxlcjogRnVuY3Rpb24sIG1ldGhvZCA9ICdHRVQnKTogdm9pZCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgTmVlZCB0byBpbXByb3ZlIHR5cGluZ3Mgb2YgdGhlICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJyBtb2R1bGVcbiAgICAgICAgcHJveHlbbWV0aG9kXSh1cmwsIChyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSwgc2VydmVySW5mbywgcGFyYW1zOiBEaWN0aW9uYXJ5PHN0cmluZz4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uc1twYXJhbXMuaWRdO1xuXG4gICAgICAgICAgICBwcmV2ZW50Q2FjaGluZyhyZXMpO1xuICAgICAgICAgICAgYWNjZXB0Q3Jvc3NPcmlnaW4ocmVzKTtcblxuICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb24pXG4gICAgICAgICAgICAgICAgaGFuZGxlcihyZXEsIHJlcywgY29ubmVjdGlvbik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmVzcG9uZDQwNChyZXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZWdpc3RlclJvdXRlcyAocHJveHk6IFByb3h5KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGlkbGVQYWdlU2NyaXB0LFxuICAgICAgICAgICAgaWRsZVBhZ2VTdHlsZSxcbiAgICAgICAgICAgIGlkbGVQYWdlTG9nbyxcbiAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJTY3JpcHQsXG4gICAgICAgIH0gPSBsb2FkQXNzZXRzKCk7XG5cbiAgICAgICAgdGhpcy5fZGlzcGF0Y2goYCR7U0VSVklDRV9ST1VURVMuY29ubmVjdH0ve2lkfWAsIHByb3h5LCBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX29uQ29ubmVjdGlvbik7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoKGAke1NFUlZJQ0VfUk9VVEVTLmhlYXJ0YmVhdH0ve2lkfWAsIHByb3h5LCBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX29uSGVhcnRiZWF0LCAnR0VUJyk7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoKGAke1NFUlZJQ0VfUk9VVEVTLmlkbGV9L3tpZH1gLCBwcm94eSwgQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5Ll9vbklkbGUpO1xuICAgICAgICB0aGlzLl9kaXNwYXRjaChgJHtTRVJWSUNFX1JPVVRFUy5pZGxlRm9yY2VkfS97aWR9YCwgcHJveHksIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fb25JZGxlRm9yY2VkKTtcbiAgICAgICAgdGhpcy5fZGlzcGF0Y2goYCR7U0VSVklDRV9ST1VURVMuc3RhdHVzfS97aWR9YCwgcHJveHksIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fb25TdGF0dXNSZXF1ZXN0KTtcbiAgICAgICAgdGhpcy5fZGlzcGF0Y2goYCR7U0VSVklDRV9ST1VURVMuc3RhdHVzRG9uZX0ve2lkfWAsIHByb3h5LCBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX29uU3RhdHVzUmVxdWVzdE9uVGVzdERvbmUsICdHRVQnKTtcbiAgICAgICAgdGhpcy5fZGlzcGF0Y2goYCR7U0VSVklDRV9ST1VURVMuaW5pdFNjcmlwdH0ve2lkfWAsIHByb3h5LCBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX29uSW5pdFNjcmlwdFJlcXVlc3QpO1xuICAgICAgICB0aGlzLl9kaXNwYXRjaChgJHtTRVJWSUNFX1JPVVRFUy5pbml0U2NyaXB0fS97aWR9YCwgcHJveHksIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fb25Jbml0U2NyaXB0UmVzcG9uc2UsICdQT1NUJyk7XG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoKGAke1NFUlZJQ0VfUk9VVEVTLmFjdGl2ZVdpbmRvd0lkfS97aWR9YCwgcHJveHksIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fb25HZXRBY3RpdmVXaW5kb3dJZFJlcXVlc3QsICdHRVQnKTtcbiAgICAgICAgdGhpcy5fZGlzcGF0Y2goYCR7U0VSVklDRV9ST1VURVMuYWN0aXZlV2luZG93SWR9L3tpZH1gLCBwcm94eSwgQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5Ll9vblNldEFjdGl2ZVdpbmRvd0lkUmVxdWVzdCwgJ1BPU1QnKTtcbiAgICAgICAgdGhpcy5fZGlzcGF0Y2goYCR7U0VSVklDRV9ST1VURVMuZW5zdXJlV2luZG93SW5OYXRpdmVBdXRvbWF0aW9ufS97aWR9YCwgcHJveHksIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZW5zdXJlV2luZG93SW5OYXRpdmVBdXRvbWF0aW9uLCAnUE9TVCcpO1xuICAgICAgICB0aGlzLl9kaXNwYXRjaChgJHtTRVJWSUNFX1JPVVRFUy5jbG9zZVdpbmRvd30ve2lkfWAsIHByb3h5LCBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX29uQ2xvc2VXaW5kb3dSZXF1ZXN0LCAnUE9TVCcpO1xuICAgICAgICB0aGlzLl9kaXNwYXRjaChgJHtTRVJWSUNFX1JPVVRFUy5vcGVuRmlsZVByb3RvY29sfS97aWR9YCwgcHJveHksIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fb25PcGVuRmlsZVByb3RvY29sUmVxdWVzdCwgJ1BPU1QnKTtcbiAgICAgICAgdGhpcy5fZGlzcGF0Y2goYCR7U0VSVklDRV9ST1VURVMuZGlzcGF0Y2hOYXRpdmVBdXRvbWF0aW9uRXZlbnR9L3tpZH1gLCBwcm94eSwgQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5Ll9vbkRpc3BhdGNoTmF0aXZlQXV0b21hdGlvbkV2ZW50LCAnUE9TVCcpO1xuICAgICAgICB0aGlzLl9kaXNwYXRjaChgJHtTRVJWSUNFX1JPVVRFUy5wYXJzZVNlbGVjdG9yfS97aWR9YCwgcHJveHksIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fcGFyc2VTZWxlY3RvciwgJ1BPU1QnKTtcbiAgICAgICAgdGhpcy5fZGlzcGF0Y2goYCR7U0VSVklDRV9ST1VURVMuZGlzcGF0Y2hOYXRpdmVBdXRvbWF0aW9uRXZlbnRTZXF1ZW5jZX0ve2lkfWAsIHByb3h5LCBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX29uRGlzcGF0Y2hOYXRpdmVBdXRvbWF0aW9uRXZlbnRTZXF1ZW5jZSwgJ1BPU1QnKTtcblxuICAgICAgICBwcm94eS5HRVQoU0VSVklDRV9ST1VURVMuY29ubmVjdCwgKHJlcTogSW5jb21pbmdNZXNzYWdlLCByZXM6IFNlcnZlclJlc3BvbnNlKSA9PiB0aGlzLl9jb25uZWN0TmV4dFJlbW90ZUJyb3dzZXIocmVxLCByZXMpKTtcbiAgICAgICAgcHJveHkuR0VUKFNFUlZJQ0VfUk9VVEVTLmNvbm5lY3RXaXRoVHJhaWxpbmdTbGFzaCwgKHJlcTogSW5jb21pbmdNZXNzYWdlLCByZXM6IFNlcnZlclJlc3BvbnNlKSA9PiB0aGlzLl9jb25uZWN0TmV4dFJlbW90ZUJyb3dzZXIocmVxLCByZXMpKTtcblxuICAgICAgICBwcm94eS5HRVQoU0VSVklDRV9ST1VURVMuc2VydmljZVdvcmtlciwgeyBjb250ZW50OiBzZXJ2aWNlV29ya2VyU2NyaXB0LCBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCcgfSk7XG4gICAgICAgIHByb3h5LkdFVChTRVJWSUNFX1JPVVRFUy5hc3NldHMuaW5kZXgsIHsgY29udGVudDogaWRsZVBhZ2VTY3JpcHQsIGNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24veC1qYXZhc2NyaXB0JyB9KTtcbiAgICAgICAgcHJveHkuR0VUKFNFUlZJQ0VfUk9VVEVTLmFzc2V0cy5zdHlsZXMsIHsgY29udGVudDogaWRsZVBhZ2VTdHlsZSwgY29udGVudFR5cGU6ICd0ZXh0L2NzcycgfSk7XG4gICAgICAgIHByb3h5LkdFVChTRVJWSUNFX1JPVVRFUy5hc3NldHMubG9nbywgeyBjb250ZW50OiBpZGxlUGFnZUxvZ28sIGNvbnRlbnRUeXBlOiAnaW1hZ2Uvc3ZnK3htbCcgfSk7XG5cbiAgICAgICAgcHJveHkuR0VUKE5BVElWRV9BVVRPTUFUSU9OX0VSUk9SX1JPVVRFLCAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHJlcy53cml0ZUhlYWQoMjAwLCB7ICdDb250ZW50LVR5cGUnOiAndGV4dC9odG1sJyB9KTtcbiAgICAgICAgICAgIHJlcy5lbmQoRU1QVFlfUEFHRV9NQVJLVVApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBIZWxwZXJzXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2Vuc3VyZUNvbm5lY3Rpb25SZWFkeSAocmVzOiBTZXJ2ZXJSZXNwb25zZSwgY29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb24pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFjb25uZWN0aW9uLmlzUmVhZHkoKSkge1xuICAgICAgICAgICAgcmVzcG9uZDUwMChyZXMsICdUaGUgY29ubmVjdGlvbiBpcyBub3QgcmVhZHkgeWV0LicpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2ZldGNoUmVxdWVzdERhdGEgKHJlcTogSW5jb21pbmdNZXNzYWdlLCBjYWxsYmFjazogKGRhdGE6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBsZXQgZGF0YSA9ICcnO1xuXG4gICAgICAgIHJlcS5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgICAgICAgIGRhdGEgKz0gY2h1bms7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlcS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soZGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUm91dGUgaGFuZGxlcnNcbiAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBfb25Db25uZWN0aW9uIChyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSwgY29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKGNvbm5lY3Rpb24uaXNSZWFkeSgpKVxuICAgICAgICAgICAgcmVzcG9uZDUwMChyZXMsICdUaGUgY29ubmVjdGlvbiBpcyBhbHJlYWR5IGVzdGFibGlzaGVkLicpO1xuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdXNlckFnZW50ID0gcmVxLmhlYWRlcnNbJ3VzZXItYWdlbnQnXSBhcyBzdHJpbmc7XG5cbiAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uZXN0YWJsaXNoKHVzZXJBZ2VudCk7XG4gICAgICAgICAgICByZWRpcmVjdChyZXMsIGNvbm5lY3Rpb24uaWRsZVVybCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfb25IZWFydGJlYXQgKHJlcTogSW5jb21pbmdNZXNzYWdlLCByZXM6IFNlcnZlclJlc3BvbnNlLCBjb25uZWN0aW9uOiBCcm93c2VyQ29ubmVjdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5Ll9lbnN1cmVDb25uZWN0aW9uUmVhZHkocmVzLCBjb25uZWN0aW9uKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gY29ubmVjdGlvbi5oZWFydGJlYXQoKTtcblxuICAgICAgICAgICAgcmVzcG9uZFdpdGhKU09OKHJlcywgc3RhdHVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9vbklkbGUgKHJlcTogSW5jb21pbmdNZXNzYWdlLCByZXM6IFNlcnZlclJlc3BvbnNlLCBjb25uZWN0aW9uOiBCcm93c2VyQ29ubmVjdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5Ll9lbnN1cmVDb25uZWN0aW9uUmVhZHkocmVzLCBjb25uZWN0aW9uKSlcbiAgICAgICAgICAgIHJlcy5lbmQoY29ubmVjdGlvbi5yZW5kZXJJZGxlUGFnZSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBfb25JZGxlRm9yY2VkIChyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSwgY29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZW5zdXJlQ29ubmVjdGlvblJlYWR5KHJlcywgY29ubmVjdGlvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IGNvbm5lY3Rpb24uZ2V0U3RhdHVzKHRydWUpO1xuXG4gICAgICAgICAgICByZWRpcmVjdChyZXMsIHN0YXR1cy51cmwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgX29uU3RhdHVzUmVxdWVzdCAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UsIGNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX29uU3RhdHVzUmVxdWVzdENvcmUocmVxLCByZXMsIGNvbm5lY3Rpb24sIGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBfb25TdGF0dXNSZXF1ZXN0T25UZXN0RG9uZSAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UsIGNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX29uU3RhdHVzUmVxdWVzdENvcmUocmVxLCByZXMsIGNvbm5lY3Rpb24sIHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFzeW5jIF9vblN0YXR1c1JlcXVlc3RDb3JlIChyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSwgY29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb24sIGlzVGVzdERvbmU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZW5zdXJlQ29ubmVjdGlvblJlYWR5KHJlcywgY29ubmVjdGlvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IGNvbm5lY3Rpb24uZ2V0U3RhdHVzKGlzVGVzdERvbmUpO1xuXG4gICAgICAgICAgICByZXNwb25kV2l0aEpTT04ocmVzLCBzdGF0dXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX29uSW5pdFNjcmlwdFJlcXVlc3QgKHJlcTogSW5jb21pbmdNZXNzYWdlLCByZXM6IFNlcnZlclJlc3BvbnNlLCBjb25uZWN0aW9uOiBCcm93c2VyQ29ubmVjdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5Ll9lbnN1cmVDb25uZWN0aW9uUmVhZHkocmVzLCBjb25uZWN0aW9uKSkge1xuICAgICAgICAgICAgY29uc3Qgc2NyaXB0ID0gY29ubmVjdGlvbi5nZXRJbml0U2NyaXB0KCk7XG5cbiAgICAgICAgICAgIHJlc3BvbmRXaXRoSlNPTihyZXMsIHNjcmlwdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfb25Jbml0U2NyaXB0UmVzcG9uc2UgKHJlcTogSW5jb21pbmdNZXNzYWdlLCByZXM6IFNlcnZlclJlc3BvbnNlLCBjb25uZWN0aW9uOiBCcm93c2VyQ29ubmVjdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5Ll9lbnN1cmVDb25uZWN0aW9uUmVhZHkocmVzLCBjb25uZWN0aW9uKSkge1xuICAgICAgICAgICAgQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5Ll9mZXRjaFJlcXVlc3REYXRhKHJlcSwgZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5oYW5kbGVJbml0U2NyaXB0UmVzdWx0KGRhdGEpO1xuXG4gICAgICAgICAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfb25HZXRBY3RpdmVXaW5kb3dJZFJlcXVlc3QgKHJlcTogSW5jb21pbmdNZXNzYWdlLCByZXM6IFNlcnZlclJlc3BvbnNlLCBjb25uZWN0aW9uOiBCcm93c2VyQ29ubmVjdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5Ll9lbnN1cmVDb25uZWN0aW9uUmVhZHkocmVzLCBjb25uZWN0aW9uKSkge1xuICAgICAgICAgICAgcmVzcG9uZFdpdGhKU09OKHJlcywge1xuICAgICAgICAgICAgICAgIGFjdGl2ZVdpbmRvd0lkOiBjb25uZWN0aW9uLmFjdGl2ZVdpbmRvd0lkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBfZW5zdXJlV2luZG93SW5OYXRpdmVBdXRvbWF0aW9uIChyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSwgY29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZW5zdXJlQ29ubmVjdGlvblJlYWR5KHJlcywgY29ubmVjdGlvbikpIHtcbiAgICAgICAgICAgIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZmV0Y2hSZXF1ZXN0RGF0YShyZXEsIGFzeW5jIGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdpbmRvd0lkID0gYXdhaXQgY29ubmVjdGlvbi5nZXROZXdXaW5kb3dJZEluTmF0aXZlQXV0b21hdGlvbihKU09OLnBhcnNlKGRhdGEpLndpbmRvd0lkKTtcblxuICAgICAgICAgICAgICAgIHJlc3BvbmRXaXRoSlNPTihyZXMsIHsgd2luZG93SWQgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9vblNldEFjdGl2ZVdpbmRvd0lkUmVxdWVzdCAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UsIGNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX2Vuc3VyZUNvbm5lY3Rpb25SZWFkeShyZXMsIGNvbm5lY3Rpb24pKSB7XG4gICAgICAgICAgICBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX2ZldGNoUmVxdWVzdERhdGEocmVxLCBkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWREYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcblxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uYWN0aXZlV2luZG93SWQgPSBwYXJzZWREYXRhLndpbmRvd0lkO1xuXG4gICAgICAgICAgICAgICAgcmVzcG9uZFdpdGhKU09OKHJlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9vbkNsb3NlV2luZG93UmVxdWVzdCAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UsIGNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX2Vuc3VyZUNvbm5lY3Rpb25SZWFkeShyZXMsIGNvbm5lY3Rpb24pKSB7XG4gICAgICAgICAgICBjb25uZWN0aW9uLnByb3ZpZGVyLmNsb3NlQnJvd3NlckNoaWxkV2luZG93KGNvbm5lY3Rpb24uaWQpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25kV2l0aEpTT04ocmVzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9vbk9wZW5GaWxlUHJvdG9jb2xSZXF1ZXN0IChyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSwgY29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZW5zdXJlQ29ubmVjdGlvblJlYWR5KHJlcywgY29ubmVjdGlvbikpIHtcbiAgICAgICAgICAgIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZmV0Y2hSZXF1ZXN0RGF0YShyZXEsIGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5vcGVuRmlsZVByb3RvY29sKHBhcnNlZERhdGEudXJsKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25kV2l0aEpTT04ocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9vbkRpc3BhdGNoTmF0aXZlQXV0b21hdGlvbkV2ZW50IChyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSwgY29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZW5zdXJlQ29ubmVjdGlvblJlYWR5KHJlcywgY29ubmVjdGlvbikpIHtcbiAgICAgICAgICAgIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZmV0Y2hSZXF1ZXN0RGF0YShyZXEsIGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdHlwZSwgb3B0aW9ucyB9ID0gSlNPTi5wYXJzZShkYXRhKTtcblxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uZGlzcGF0Y2hOYXRpdmVBdXRvbWF0aW9uRXZlbnQodHlwZSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uZFdpdGhKU09OKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfb25EaXNwYXRjaE5hdGl2ZUF1dG9tYXRpb25FdmVudFNlcXVlbmNlIChyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSwgY29ubmVjdGlvbjogQnJvd3NlckNvbm5lY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZW5zdXJlQ29ubmVjdGlvblJlYWR5KHJlcywgY29ubmVjdGlvbikpIHtcbiAgICAgICAgICAgIEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZmV0Y2hSZXF1ZXN0RGF0YShyZXEsIGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50U2VxdWVuY2UgPSBKU09OLnBhcnNlKGRhdGEpO1xuXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5kaXNwYXRjaE5hdGl2ZUF1dG9tYXRpb25FdmVudFNlcXVlbmNlKGV2ZW50U2VxdWVuY2UpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmRXaXRoSlNPTihyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfY29ubmVjdE5leHRSZW1vdGVCcm93c2VyIChyZXE6IEluY29taW5nTWVzc2FnZSwgcmVzOiBTZXJ2ZXJSZXNwb25zZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBwcmV2ZW50Q2FjaGluZyhyZXMpO1xuXG4gICAgICAgIGNvbnN0IHJlbW90ZUNvbm5lY3Rpb24gPSBhd2FpdCB0aGlzLl9yZW1vdGVzUXVldWUuc2hpZnQoKTtcblxuICAgICAgICBpZiAocmVtb3RlQ29ubmVjdGlvbilcbiAgICAgICAgICAgIHJlZGlyZWN0KHJlcywgcmVtb3RlQ29ubmVjdGlvbi51cmwpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXNwb25kNTAwKHJlcywgJ1RoZXJlIGFyZSBubyBhdmFpbGFibGUgX2Nvbm5lY3Rpb25zIHRvIGVzdGFibGlzaC4nKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfZ2V0UGFyc2VkU2VsZWN0b3IgKHRlc3RSdW46IFRlc3RSdW4sIHJhd1NlbGVjdG9yOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgdGVzdFJ1bixcblxuICAgICAgICAgICAgc2tpcFZpc2liaWxpdHlDaGVjazogdHJ1ZSxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25Nb2RlOiAgICAgIHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdmFsdWUgICAgPSByYXdTZWxlY3Rvci50cmltKCkuc3RhcnRzV2l0aCgnU2VsZWN0b3IoJykgPyByYXdTZWxlY3RvciA6IGAnJHtyYXdTZWxlY3Rvcn0nYDtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB7IHR5cGU6ICdqcy1leHByJywgdmFsdWUgfTtcblxuICAgICAgICByZXR1cm4gaW5pdFNlbGVjdG9yKCdzZWxlY3RvcicsIHNlbGVjdG9yLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfcGFyc2VTZWxlY3RvciAocmVxOiBJbmNvbWluZ01lc3NhZ2UsIHJlczogU2VydmVyUmVzcG9uc2UsIGNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX2Vuc3VyZUNvbm5lY3Rpb25SZWFkeShyZXMsIGNvbm5lY3Rpb24pKSB7XG4gICAgICAgICAgICBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuX2ZldGNoUmVxdWVzdERhdGEocmVxLCBkYXRhID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXN0UnVuICAgICAgICA9IGNvbm5lY3Rpb24uZ2V0Q3VycmVudFRlc3RSdW4oKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF3U2VsZWN0b3IgICAgPSBKU09OLnBhcnNlKGRhdGEpLnNlbGVjdG9yO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRTZWxlY3RvciA9IEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5fZ2V0UGFyc2VkU2VsZWN0b3IodGVzdFJ1biwgcmF3U2VsZWN0b3IpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbmRXaXRoSlNPTihyZXMsIHBhcnNlZFNlbGVjdG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbmRXaXRoSlNPTihyZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQVBJXG4gICAgcHVibGljIHN0YXJ0U2VydmluZ0Nvbm5lY3Rpb24gKGNvbm5lY3Rpb246IEJyb3dzZXJDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rpb25zW2Nvbm5lY3Rpb24uaWRdID0gY29ubmVjdGlvbjtcblxuICAgICAgICBpZiAoY29ubmVjdGlvbi5icm93c2VySW5mby5wcm92aWRlck5hbWUgPT09ICdyZW1vdGUnKVxuICAgICAgICAgICAgdGhpcy5fcmVtb3Rlc1F1ZXVlLmFkZChjb25uZWN0aW9uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcFNlcnZpbmdDb25uZWN0aW9uIChjb25uZWN0aW9uOiBCcm93c2VyQ29ubmVjdGlvbik6IHZvaWQge1xuICAgICAgICBkZWxldGUgdGhpcy5fY29ubmVjdGlvbnNbY29ubmVjdGlvbi5pZF07XG5cbiAgICAgICAgaWYgKGNvbm5lY3Rpb24uYnJvd3NlckluZm8ucHJvdmlkZXJOYW1lID09PSAncmVtb3RlJylcbiAgICAgICAgICAgIHRoaXMuX3JlbW90ZXNRdWV1ZS5yZW1vdmUoY29ubmVjdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNsb3NlICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLl9jb25uZWN0aW9ucylcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2Nvbm5lY3Rpb25zW2lkXS5jbG9zZSgpO1xuXG4gICAgICAgIHRoaXMucHJveHkuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29ubmVjdGlvbnMgKCk6IERpY3Rpb25hcnk8QnJvd3NlckNvbm5lY3Rpb24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3RhdHVzICgpOiBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXlTdGF0dXMge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmV0cnlUZXN0UGFnZXMgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9ucy5yZXRyeVRlc3RQYWdlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdGlhbGl6ZSAob3B0aW9uczogVGVzdENhZmVTdGFydE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgLy8gTk9URTogSW5pdGlhbGl6ZSBvbmx5IG9uY2UgaW4gY2FzZSBvZiBtdWx0aXBsZSBydW5uZXJzLlxuICAgICAgICBpZiAodGhpcy5fc3RhdHVzID09PSBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXlTdGF0dXMuaW5pdGlhbGl6ZWQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5wcm94eS5zdGFydChvcHRpb25zKTtcblxuICAgICAgICB0aGlzLl9yZWdpc3RlclJvdXRlcyh0aGlzLnByb3h5KTtcblxuICAgICAgICB0aGlzLmNvbm5lY3RVcmwgPSB0aGlzLnByb3h5LnJlc29sdmVSZWxhdGl2ZVNlcnZpY2VVcmwoU0VSVklDRV9ST1VURVMuY29ubmVjdCk7XG4gICAgICAgIHRoaXMuX3N0YXR1cyAgICA9IEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheVN0YXR1cy5pbml0aWFsaXplZDtcblxuICAgICAgICB0aGlzLmVtaXQoJ2luaXRpYWxpemVkJyk7XG4gICAgfVxufVxuXG4iXX0=
|