oxygen-cli 1.40.2 → 1.42.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/CHANGELOG.md +13 -0
- package/build/core/OxygenCore.js +41 -274
- package/build/core/OxygenEvents.js +2 -12
- package/build/core/OxygenModule.js +1 -16
- package/build/core/OxygenService.js +1 -12
- package/build/core/OxygenSubModule.js +1 -10
- package/build/core/WebDriverModule.js +2 -32
- package/build/core/utils.js +2 -21
- package/build/errors/HookError.js +2 -8
- package/build/errors/ModuleError.js +2 -8
- package/build/errors/ModuleUnavailableError.js +1 -3
- package/build/errors/OxygenError.js +3 -36
- package/build/errors/ScriptNotFound.js +2 -8
- package/build/errors/helper.js +51 -82
- package/build/index.js +8 -22
- package/build/lib/cli-util.js +39 -105
- package/build/lib/cli.js +3 -30
- package/build/lib/debugger.js +2 -145
- package/build/lib/img-merge.js +2 -16
- package/build/lib/launcher.js +3 -31
- package/build/lib/moduleRequire.js +1 -4
- package/build/lib/parallel-launcher.js +44 -84
- package/build/lib/param-manager.js +2 -29
- package/build/lib/param-reader-csv.js +1 -15
- package/build/lib/param-reader-excel.js +1 -14
- package/build/lib/param-reader-json.js +1 -10
- package/build/lib/text-to-image.js +5 -26
- package/build/lib/util.js +4 -75
- package/build/model/case-result.js +1 -2
- package/build/model/failure.js +1 -2
- package/build/model/status.js +1 -2
- package/build/model/step-result.js +1 -2
- package/build/model/suite-result.js +1 -2
- package/build/model/test-result.js +1 -2
- package/build/model/testcase.js +1 -2
- package/build/model/testsuite.js +1 -2
- package/build/ox_modules/index.js +21 -34
- package/build/ox_modules/module-assert.js +9 -28
- package/build/ox_modules/module-date.js +3 -8
- package/build/ox_modules/module-db.js +8 -29
- package/build/ox_modules/module-email.js +14 -45
- package/build/ox_modules/module-eyes.js +6 -47
- package/build/ox_modules/module-http/ntlm-util.js +3 -7
- package/build/ox_modules/module-http/ntlm.js +9 -78
- package/build/ox_modules/module-http.js +69 -172
- package/build/ox_modules/module-log.js +10 -23
- package/build/ox_modules/module-mailinator.js +11 -33
- package/build/ox_modules/module-mob/commands/alertAccept.js +1 -3
- package/build/ox_modules/module-mob/commands/alertDismiss.js +1 -3
- package/build/ox_modules/module-mob/commands/assertAlert.js +1 -7
- package/build/ox_modules/module-mob/commands/assertText.js +1 -4
- package/build/ox_modules/module-mob/commands/assertTitle.js +1 -5
- package/build/ox_modules/module-mob/commands/assertValue.js +9 -17
- package/build/ox_modules/module-mob/commands/back.js +1 -3
- package/build/ox_modules/module-mob/commands/clear.js +1 -5
- package/build/ox_modules/module-mob/commands/click.js +3 -5
- package/build/ox_modules/module-mob/commands/clickHidden.js +3 -10
- package/build/ox_modules/module-mob/commands/clickLong.js +1 -3
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +1 -5
- package/build/ox_modules/module-mob/commands/closeApp.js +1 -3
- package/build/ox_modules/module-mob/commands/debug.js +2 -3
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +1 -3
- package/build/ox_modules/module-mob/commands/enableNetwork.js +4 -13
- package/build/ox_modules/module-mob/commands/execute.js +1 -3
- package/build/ox_modules/module-mob/commands/findElement.js +1 -4
- package/build/ox_modules/module-mob/commands/findElements.js +1 -5
- package/build/ox_modules/module-mob/commands/getAlertText.js +1 -3
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +1 -3
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +1 -11
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +1 -3
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +1 -3
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +1 -10
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +1 -3
- package/build/ox_modules/module-mob/commands/getLocation.js +1 -3
- package/build/ox_modules/module-mob/commands/getSource.js +1 -3
- package/build/ox_modules/module-mob/commands/getText.js +1 -5
- package/build/ox_modules/module-mob/commands/getTitle.js +1 -3
- package/build/ox_modules/module-mob/commands/getUrl.js +1 -3
- package/build/ox_modules/module-mob/commands/getValue.js +5 -10
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +1 -3
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +1 -3
- package/build/ox_modules/module-mob/commands/index.js +1 -148
- package/build/ox_modules/module-mob/commands/installApp.js +1 -3
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +1 -3
- package/build/ox_modules/module-mob/commands/isCheckable.js +1 -3
- package/build/ox_modules/module-mob/commands/isChecked.js +1 -3
- package/build/ox_modules/module-mob/commands/isClickable.js +1 -3
- package/build/ox_modules/module-mob/commands/isExist.js +1 -4
- package/build/ox_modules/module-mob/commands/isSelected.js +1 -3
- package/build/ox_modules/module-mob/commands/isVisible.js +1 -4
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +1 -3
- package/build/ox_modules/module-mob/commands/launchApp.js +1 -3
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +1 -3
- package/build/ox_modules/module-mob/commands/open.js +1 -4
- package/build/ox_modules/module-mob/commands/pause.js +1 -3
- package/build/ox_modules/module-mob/commands/removeApp.js +1 -3
- package/build/ox_modules/module-mob/commands/resetApp.js +1 -3
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +1 -7
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +1 -3
- package/build/ox_modules/module-mob/commands/select.js +1 -5
- package/build/ox_modules/module-mob/commands/selectFrame.js +1 -5
- package/build/ox_modules/module-mob/commands/selectWindow.js +5 -27
- package/build/ox_modules/module-mob/commands/sendKeys.js +6 -10
- package/build/ox_modules/module-mob/commands/setContext.js +1 -3
- package/build/ox_modules/module-mob/commands/setNativeContext.js +1 -3
- package/build/ox_modules/module-mob/commands/setTimeout.js +1 -3
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +3 -7
- package/build/ox_modules/module-mob/commands/shake.js +1 -3
- package/build/ox_modules/module-mob/commands/smsClickLink.js +1 -3
- package/build/ox_modules/module-mob/commands/smsGetText.js +3 -7
- package/build/ox_modules/module-mob/commands/swipe.js +1 -3
- package/build/ox_modules/module-mob/commands/swipeElement.js +1 -3
- package/build/ox_modules/module-mob/commands/swipeScreen.js +1 -3
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +1 -3
- package/build/ox_modules/module-mob/commands/tap.js +1 -3
- package/build/ox_modules/module-mob/commands/type.js +3 -8
- package/build/ox_modules/module-mob/commands/unlockPattern.js +9 -11
- package/build/ox_modules/module-mob/commands/waitForExist.js +1 -3
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +1 -4
- package/build/ox_modules/module-mob/commands/waitForVisible.js +1 -3
- package/build/ox_modules/module-mob.js +74 -216
- package/build/ox_modules/module-mongo.js +265 -0
- package/build/ox_modules/module-pdf.js +24 -65
- package/build/ox_modules/module-proxy.js +9 -69
- package/build/ox_modules/module-serial.js +8 -33
- package/build/ox_modules/module-shell.js +10 -30
- package/build/ox_modules/module-soap.js +17 -52
- package/build/ox_modules/module-twilio.js +11 -54
- package/build/ox_modules/module-utils.js +22 -58
- package/build/ox_modules/module-web/commands/alertAccept.js +1 -3
- package/build/ox_modules/module-web/commands/alertDismiss.js +1 -3
- package/build/ox_modules/module-web/commands/assertAlert.js +1 -7
- package/build/ox_modules/module-web/commands/assertExist.js +1 -3
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +1 -5
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +1 -4
- package/build/ox_modules/module-web/commands/assertText.js +1 -4
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +1 -7
- package/build/ox_modules/module-web/commands/assertTextPresent.js +1 -7
- package/build/ox_modules/module-web/commands/assertTitle.js +1 -4
- package/build/ox_modules/module-web/commands/assertValue.js +1 -4
- package/build/ox_modules/module-web/commands/back.js +1 -3
- package/build/ox_modules/module-web/commands/clear.js +1 -6
- package/build/ox_modules/module-web/commands/click.js +4 -15
- package/build/ox_modules/module-web/commands/clickHidden.js +2 -8
- package/build/ox_modules/module-web/commands/closeWindow.js +1 -3
- package/build/ox_modules/module-web/commands/debug.js +2 -3
- package/build/ox_modules/module-web/commands/deleteCookies.js +1 -3
- package/build/ox_modules/module-web/commands/deselect.js +1 -3
- package/build/ox_modules/module-web/commands/doubleClick.js +3 -10
- package/build/ox_modules/module-web/commands/dragAndDrop.js +1 -3
- package/build/ox_modules/module-web/commands/execute.js +1 -3
- package/build/ox_modules/module-web/commands/fileBrowse.js +4 -11
- package/build/ox_modules/module-web/commands/findElement.js +1 -4
- package/build/ox_modules/module-web/commands/findElements.js +1 -5
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +1 -3
- package/build/ox_modules/module-web/commands/getAlertText.js +1 -3
- package/build/ox_modules/module-web/commands/getAttribute.js +1 -5
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +1 -4
- package/build/ox_modules/module-web/commands/getCookies.js +1 -3
- package/build/ox_modules/module-web/commands/getCssValue.js +1 -5
- package/build/ox_modules/module-web/commands/getElementCount.js +1 -3
- package/build/ox_modules/module-web/commands/getHTML.js +1 -3
- package/build/ox_modules/module-web/commands/getSource.js +1 -3
- package/build/ox_modules/module-web/commands/getText.js +1 -5
- package/build/ox_modules/module-web/commands/getTitle.js +1 -3
- package/build/ox_modules/module-web/commands/getUrl.js +1 -3
- package/build/ox_modules/module-web/commands/getValue.js +1 -6
- package/build/ox_modules/module-web/commands/getWindowHandles.js +1 -3
- package/build/ox_modules/module-web/commands/getWindowSize.js +1 -3
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +1 -6
- package/build/ox_modules/module-web/commands/index.js +1 -184
- package/build/ox_modules/module-web/commands/isAlertPresent.js +1 -3
- package/build/ox_modules/module-web/commands/isChecked.js +1 -3
- package/build/ox_modules/module-web/commands/isExist.js +1 -4
- package/build/ox_modules/module-web/commands/isInteractable.js +1 -3
- package/build/ox_modules/module-web/commands/isSelected.js +1 -3
- package/build/ox_modules/module-web/commands/isVisible.js +1 -4
- package/build/ox_modules/module-web/commands/makeVisible.js +2 -11
- package/build/ox_modules/module-web/commands/maximizeWindow.js +1 -3
- package/build/ox_modules/module-web/commands/minimizeWindow.js +1 -3
- package/build/ox_modules/module-web/commands/mock.js +1 -3
- package/build/ox_modules/module-web/commands/mockClearAll.js +1 -3
- package/build/ox_modules/module-web/commands/mockRestoreAll.js +1 -3
- package/build/ox_modules/module-web/commands/newWindow.js +1 -3
- package/build/ox_modules/module-web/commands/open.js +1 -5
- package/build/ox_modules/module-web/commands/pause.js +1 -3
- package/build/ox_modules/module-web/commands/point.js +1 -3
- package/build/ox_modules/module-web/commands/pointJS.js +2 -9
- package/build/ox_modules/module-web/commands/refresh.js +1 -3
- package/build/ox_modules/module-web/commands/rightClick.js +3 -9
- package/build/ox_modules/module-web/commands/rightClickActions.js +1 -3
- package/build/ox_modules/module-web/commands/scrollToElement.js +1 -3
- package/build/ox_modules/module-web/commands/select.js +1 -6
- package/build/ox_modules/module-web/commands/selectFrame.js +1 -4
- package/build/ox_modules/module-web/commands/selectWindow.js +5 -27
- package/build/ox_modules/module-web/commands/sendKeys.js +3 -7
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +2 -3
- package/build/ox_modules/module-web/commands/setTimeout.js +1 -3
- package/build/ox_modules/module-web/commands/setWindowSize.js +1 -3
- package/build/ox_modules/module-web/commands/takeScreenshot.js +3 -6
- package/build/ox_modules/module-web/commands/type.js +1 -6
- package/build/ox_modules/module-web/commands/verifyAlert.js +1 -7
- package/build/ox_modules/module-web/commands/verifyExist.js +2 -7
- package/build/ox_modules/module-web/commands/verifySelectedLabel.js +1 -5
- package/build/ox_modules/module-web/commands/verifySelectedValue.js +1 -4
- package/build/ox_modules/module-web/commands/verifyText.js +1 -4
- package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +1 -7
- package/build/ox_modules/module-web/commands/verifyTextPresent.js +1 -7
- package/build/ox_modules/module-web/commands/verifyTitle.js +1 -4
- package/build/ox_modules/module-web/commands/verifyValue.js +1 -4
- package/build/ox_modules/module-web/commands/waitForAngular.js +11 -14
- package/build/ox_modules/module-web/commands/waitForExist.js +1 -3
- package/build/ox_modules/module-web/commands/waitForInteractable.js +1 -3
- package/build/ox_modules/module-web/commands/waitForNotExist.js +1 -9
- package/build/ox_modules/module-web/commands/waitForNotText.js +1 -4
- package/build/ox_modules/module-web/commands/waitForNotValue.js +1 -4
- package/build/ox_modules/module-web/commands/waitForText.js +1 -4
- package/build/ox_modules/module-web/commands/waitForValue.js +1 -4
- package/build/ox_modules/module-web/commands/waitForVisible.js +1 -3
- package/build/ox_modules/module-web/commands/waitForWindow.js +4 -22
- package/build/ox_modules/module-web/webdriver/ChromeWDM.js +287 -0
- package/build/ox_modules/module-web/webdriver/auto-start.js +25 -0
- package/build/ox_modules/module-web.js +112 -232
- package/build/ox_modules/module-win/commands/assertText.js +1 -4
- package/build/ox_modules/module-win/commands/assertTitle.js +1 -5
- package/build/ox_modules/module-win/commands/assertValue.js +9 -17
- package/build/ox_modules/module-win/commands/back.js +1 -3
- package/build/ox_modules/module-win/commands/clear.js +1 -5
- package/build/ox_modules/module-win/commands/click.js +1 -3
- package/build/ox_modules/module-win/commands/clickLong.js +1 -3
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +1 -5
- package/build/ox_modules/module-win/commands/findElement.js +1 -4
- package/build/ox_modules/module-win/commands/findElements.js +1 -5
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +1 -3
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +1 -3
- package/build/ox_modules/module-win/commands/getLocation.js +1 -3
- package/build/ox_modules/module-win/commands/getSource.js +1 -3
- package/build/ox_modules/module-win/commands/getText.js +1 -5
- package/build/ox_modules/module-win/commands/getValue.js +5 -10
- package/build/ox_modules/module-win/commands/getWindowHandles.js +1 -3
- package/build/ox_modules/module-win/commands/index.js +1 -74
- package/build/ox_modules/module-win/commands/isCheckable.js +1 -3
- package/build/ox_modules/module-win/commands/isChecked.js +1 -3
- package/build/ox_modules/module-win/commands/isClickable.js +1 -3
- package/build/ox_modules/module-win/commands/isExist.js +1 -4
- package/build/ox_modules/module-win/commands/isSelected.js +1 -3
- package/build/ox_modules/module-win/commands/isVisible.js +1 -4
- package/build/ox_modules/module-win/commands/open.js +1 -3
- package/build/ox_modules/module-win/commands/pause.js +1 -3
- package/build/ox_modules/module-win/commands/rightClick.js +1 -3
- package/build/ox_modules/module-win/commands/selectWindow.js +1 -16
- package/build/ox_modules/module-win/commands/sendKeys.js +1 -5
- package/build/ox_modules/module-win/commands/setTimeout.js +1 -3
- package/build/ox_modules/module-win/commands/takeScreenshot.js +1 -3
- package/build/ox_modules/module-win/commands/tap.js +1 -3
- package/build/ox_modules/module-win/commands/type.js +1 -5
- package/build/ox_modules/module-win/commands/waitForExist.js +1 -3
- package/build/ox_modules/module-win/commands/waitForInteractable.js +1 -5
- package/build/ox_modules/module-win/commands/waitForVisible.js +1 -3
- package/build/ox_modules/module-win.js +54 -95
- package/build/ox_modules/utils.js +91 -79
- package/build/ox_reporters/reporter-excel.js +2 -59
- package/build/ox_reporters/reporter-html.js +2 -29
- package/build/ox_reporters/reporter-json.js +2 -15
- package/build/ox_reporters/reporter-junit.js +2 -25
- package/build/ox_reporters/reporter-pdf.js +2 -20
- package/build/ox_reporters/reporter-rp.js +2 -91
- package/build/ox_reporters/reporter-xml.js +2 -18
- package/build/ox_services/service-devtools/submodule-network.js +4 -86
- package/build/ox_services/service-devtools.js +2 -24
- package/build/reporter/FileReporterBase.js +6 -45
- package/build/reporter/ReportAggregator.js +14 -120
- package/build/reporter/ReporterBase.js +1 -6
- package/build/reporter/WebSocketReporter.js +1 -39
- package/build/runners/WorkerProcess.js +2 -107
- package/build/runners/cucumber/CucumberEventListener.js +4 -29
- package/build/runners/cucumber/CucumberReporter.js +2 -57
- package/build/runners/cucumber/CucumberWorker.js +3 -69
- package/build/runners/cucumber/index.js +2 -31
- package/build/runners/cucumber/worker.js +2 -19
- package/build/runners/index.js +4 -11
- package/build/runners/oxygen/OxygenWorker.js +3 -61
- package/build/runners/oxygen/index.js +18 -179
- package/build/runners/oxygen/worker.js +3 -27
- package/package.json +5 -1
|
@@ -4,19 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
require("source-map-support/register");
|
|
9
|
-
|
|
10
8
|
var _OxygenModule = _interopRequireDefault(require("../core/OxygenModule"));
|
|
11
|
-
|
|
12
9
|
var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
13
|
-
|
|
14
10
|
var _helper = _interopRequireDefault(require("../errors/helper"));
|
|
15
|
-
|
|
16
11
|
var _utils = _interopRequireDefault(require("./utils"));
|
|
17
|
-
|
|
18
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
-
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
13
|
/*
|
|
21
14
|
* Copyright (C) 2015-2018 CloudBeat Limited
|
|
22
15
|
*
|
|
@@ -25,31 +18,32 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
25
18
|
* the Free Software Foundation, either version 3 of the License, or
|
|
26
19
|
* (at your option) any later version.
|
|
27
20
|
*/
|
|
21
|
+
|
|
28
22
|
const MODULE_NAME = 'shell';
|
|
23
|
+
|
|
29
24
|
/**
|
|
30
25
|
* @name shell
|
|
31
26
|
* @description Provides methods for working with operating system shell.
|
|
32
27
|
*/
|
|
33
|
-
|
|
34
28
|
class ShellModule extends _OxygenModule.default {
|
|
35
29
|
constructor(options, context, rs, logger, modules, services) {
|
|
36
30
|
super(options, context, rs, logger, modules, services);
|
|
37
|
-
this._alwaysInitialized = true;
|
|
38
|
-
|
|
31
|
+
this._alwaysInitialized = true;
|
|
32
|
+
// pre-initialize the module
|
|
39
33
|
this._isInitialized = true;
|
|
40
34
|
this._lastStdout;
|
|
41
35
|
this._lastStderr;
|
|
42
36
|
}
|
|
37
|
+
|
|
43
38
|
/*
|
|
44
39
|
* @summary Gets module name
|
|
45
40
|
* @function name
|
|
46
41
|
* @return {String} Constant value "shell".
|
|
47
42
|
*/
|
|
48
|
-
|
|
49
|
-
|
|
50
43
|
get name() {
|
|
51
44
|
return MODULE_NAME;
|
|
52
45
|
}
|
|
46
|
+
|
|
53
47
|
/**
|
|
54
48
|
* @summary Execute command
|
|
55
49
|
* @description Spawn child process
|
|
@@ -57,14 +51,10 @@ class ShellModule extends _OxygenModule.default {
|
|
|
57
51
|
* @param {String} command - Shell command to be executed, including arguments, if applicable.
|
|
58
52
|
* @return {Object} Response object containing stdout, stderr, exit code, and signal (if process was terminated by a signal).
|
|
59
53
|
*/
|
|
60
|
-
|
|
61
|
-
|
|
62
54
|
exec(command, options = {}) {
|
|
63
55
|
this._lastStdout = null;
|
|
64
56
|
this._lastStderr = null;
|
|
65
|
-
|
|
66
57
|
const spawn = require('cross-spawn');
|
|
67
|
-
|
|
68
58
|
options = {
|
|
69
59
|
cwd: this.options.cwd,
|
|
70
60
|
shell: true,
|
|
@@ -72,11 +62,9 @@ class ShellModule extends _OxygenModule.default {
|
|
|
72
62
|
...options
|
|
73
63
|
};
|
|
74
64
|
const result = spawn.sync(command, options);
|
|
75
|
-
|
|
76
65
|
if (result.error) {
|
|
77
66
|
throw new _OxygenError.default(_helper.default.errorCode.SHELL_ERROR, result.error.message, null, true, result.error);
|
|
78
67
|
}
|
|
79
|
-
|
|
80
68
|
this._lastStdout = result.stdout ? result.stdout.toString() : null;
|
|
81
69
|
this._lastStderr = result.stderr ? result.stderr.toString() : null;
|
|
82
70
|
return {
|
|
@@ -86,44 +74,36 @@ class ShellModule extends _OxygenModule.default {
|
|
|
86
74
|
signal: result.signal
|
|
87
75
|
};
|
|
88
76
|
}
|
|
77
|
+
|
|
89
78
|
/**
|
|
90
79
|
* @summary Assert that the shell command's output (stdout) matches the specified pattern.
|
|
91
80
|
* @function assertOutput
|
|
92
81
|
* @param {String} pattern - Pattern to assert.
|
|
93
82
|
*/
|
|
94
|
-
|
|
95
|
-
|
|
96
83
|
assertOutput(pattern) {
|
|
97
84
|
if (!this._lastStdout) {
|
|
98
85
|
return false;
|
|
99
86
|
}
|
|
100
|
-
|
|
101
87
|
if (!_utils.default.matchPattern(this._lastStdout, pattern)) {
|
|
102
88
|
throw new _OxygenError.default(_helper.default.errorCode.ASSERT_ERROR, `Expected shell command output to match: "${pattern}" but got: "${this._lastStdout}"`);
|
|
103
89
|
}
|
|
104
|
-
|
|
105
90
|
return true;
|
|
106
91
|
}
|
|
92
|
+
|
|
107
93
|
/**
|
|
108
94
|
* @summary Assert that the shell command's error output (stderr) matches the specified pattern.
|
|
109
95
|
* @function assertErrorOutput
|
|
110
96
|
* @param {String} pattern - Pattern to assert.
|
|
111
97
|
*/
|
|
112
|
-
|
|
113
|
-
|
|
114
98
|
assertErrorOutput(pattern) {
|
|
115
99
|
if (!this._lastStderr) {
|
|
116
100
|
return false;
|
|
117
101
|
}
|
|
118
|
-
|
|
119
102
|
if (!_utils.default.matchPattern(this._lastStderr, pattern)) {
|
|
120
103
|
throw new _OxygenError.default(_helper.default.errorCode.ASSERT_ERROR, `Expected shell command error output to match: "${pattern}" but got: "${this._lastStderr}"`);
|
|
121
104
|
}
|
|
122
|
-
|
|
123
105
|
return true;
|
|
124
106
|
}
|
|
125
|
-
|
|
126
107
|
}
|
|
127
|
-
|
|
128
108
|
exports.default = ShellModule;
|
|
129
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
109
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT3h5Z2VuTW9kdWxlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfT3h5Z2VuRXJyb3IiLCJfaGVscGVyIiwiX3V0aWxzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiTU9EVUxFX05BTUUiLCJTaGVsbE1vZHVsZSIsIk94eWdlbk1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsIl9hbHdheXNJbml0aWFsaXplZCIsIl9pc0luaXRpYWxpemVkIiwiX2xhc3RTdGRvdXQiLCJfbGFzdFN0ZGVyciIsIm5hbWUiLCJleGVjIiwiY29tbWFuZCIsInNwYXduIiwiY3dkIiwic2hlbGwiLCJlbnYiLCJwcm9jZXNzIiwicmVzdWx0Iiwic3luYyIsImVycm9yIiwiT3hFcnJvciIsImVyckhlbHBlciIsImVycm9yQ29kZSIsIlNIRUxMX0VSUk9SIiwibWVzc2FnZSIsInN0ZG91dCIsInRvU3RyaW5nIiwic3RkZXJyIiwiZXhpdENvZGUiLCJzdGF0dXMiLCJzaWduYWwiLCJhc3NlcnRPdXRwdXQiLCJwYXR0ZXJuIiwibW9kVXRpbHMiLCJtYXRjaFBhdHRlcm4iLCJBU1NFUlRfRVJST1IiLCJhc3NlcnRFcnJvck91dHB1dCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvb3hfbW9kdWxlcy9tb2R1bGUtc2hlbGwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcbmltcG9ydCBPeHlnZW5Nb2R1bGUgZnJvbSAnLi4vY29yZS9PeHlnZW5Nb2R1bGUnO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgbW9kVXRpbHMgZnJvbSAnLi91dGlscyc7XHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICdzaGVsbCc7XHJcblxyXG4vKipcclxuICogQG5hbWUgc2hlbGxcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBvcGVyYXRpbmcgc3lzdGVtIHNoZWxsLlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hlbGxNb2R1bGUgZXh0ZW5kcyBPeHlnZW5Nb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy5fYWx3YXlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIC8vIHByZS1pbml0aWFsaXplIHRoZSBtb2R1bGVcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9sYXN0U3Rkb3V0O1xyXG4gICAgICAgIHRoaXMuX2xhc3RTdGRlcnI7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIEBzdW1tYXJ5IEdldHMgbW9kdWxlIG5hbWVcclxuICAgICAqIEBmdW5jdGlvbiBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IENvbnN0YW50IHZhbHVlIFwic2hlbGxcIi5cclxuICAgICAqL1xyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRXhlY3V0ZSBjb21tYW5kXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU3Bhd24gY2hpbGQgcHJvY2Vzc1xyXG4gICAgICogQGZ1bmN0aW9uIGV4ZWNcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb21tYW5kIC0gU2hlbGwgY29tbWFuZCB0byBiZSBleGVjdXRlZCwgaW5jbHVkaW5nIGFyZ3VtZW50cywgaWYgYXBwbGljYWJsZS5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gUmVzcG9uc2Ugb2JqZWN0IGNvbnRhaW5pbmcgc3Rkb3V0LCBzdGRlcnIsIGV4aXQgY29kZSwgYW5kIHNpZ25hbCAoaWYgcHJvY2VzcyB3YXMgdGVybWluYXRlZCBieSBhIHNpZ25hbCkuXHJcbiAgICAgKi9cclxuICAgIGV4ZWMoY29tbWFuZCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5fbGFzdFN0ZG91dCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fbGFzdFN0ZGVyciA9IG51bGw7XHJcblxyXG4gICAgICAgIGNvbnN0IHNwYXduID0gcmVxdWlyZSgnY3Jvc3Mtc3Bhd24nKTtcclxuICAgICAgICBvcHRpb25zID0geyBjd2Q6IHRoaXMub3B0aW9ucy5jd2QsIHNoZWxsOiB0cnVlLCBlbnY6IHByb2Nlc3MuZW52LCAuLi5vcHRpb25zIH07XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gc3Bhd24uc3luYyhjb21tYW5kLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNIRUxMX0VSUk9SLCByZXN1bHQuZXJyb3IubWVzc2FnZSwgbnVsbCwgdHJ1ZSwgcmVzdWx0LmVycm9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2xhc3RTdGRvdXQgPSByZXN1bHQuc3Rkb3V0ID8gcmVzdWx0LnN0ZG91dC50b1N0cmluZygpIDogbnVsbDtcclxuICAgICAgICB0aGlzLl9sYXN0U3RkZXJyID0gcmVzdWx0LnN0ZGVyciA/IHJlc3VsdC5zdGRlcnIudG9TdHJpbmcoKSA6IG51bGw7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHN0ZG91dDogdGhpcy5fbGFzdFN0ZG91dCxcclxuICAgICAgICAgICAgc3RkZXJyOiB0aGlzLl9sYXN0U3RkZXJyLFxyXG4gICAgICAgICAgICBleGl0Q29kZTogcmVzdWx0LnN0YXR1cyxcclxuICAgICAgICAgICAgc2lnbmFsOiByZXN1bHQuc2lnbmFsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEFzc2VydCB0aGF0IHRoZSBzaGVsbCBjb21tYW5kJ3Mgb3V0cHV0IChzdGRvdXQpIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBwYXR0ZXJuLlxyXG4gICAgICogQGZ1bmN0aW9uIGFzc2VydE91dHB1dFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHBhdHRlcm4gLSBQYXR0ZXJuIHRvIGFzc2VydC5cclxuICAgICAqL1xyXG4gICAgYXNzZXJ0T3V0cHV0KHBhdHRlcm4pIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2xhc3RTdGRvdXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW1vZFV0aWxzLm1hdGNoUGF0dGVybih0aGlzLl9sYXN0U3Rkb3V0LCBwYXR0ZXJuKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgYEV4cGVjdGVkIHNoZWxsIGNvbW1hbmQgb3V0cHV0IHRvIG1hdGNoOiBcIiR7cGF0dGVybn1cIiBidXQgZ290OiBcIiR7dGhpcy5fbGFzdFN0ZG91dH1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEFzc2VydCB0aGF0IHRoZSBzaGVsbCBjb21tYW5kJ3MgZXJyb3Igb3V0cHV0IChzdGRlcnIpIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBwYXR0ZXJuLlxyXG4gICAgICogQGZ1bmN0aW9uIGFzc2VydEVycm9yT3V0cHV0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0dGVybiAtIFBhdHRlcm4gdG8gYXNzZXJ0LlxyXG4gICAgICovXHJcbiAgICBhc3NlcnRFcnJvck91dHB1dChwYXR0ZXJuKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9sYXN0U3RkZXJyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFtb2RVdGlscy5tYXRjaFBhdHRlcm4odGhpcy5fbGFzdFN0ZGVyciwgcGF0dGVybikpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIGBFeHBlY3RlZCBzaGVsbCBjb21tYW5kIGVycm9yIG91dHB1dCB0byBtYXRjaDogXCIke3BhdHRlcm59XCIgYnV0IGdvdDogXCIke3RoaXMuX2xhc3RTdGRlcnJ9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFRQSxJQUFBQSxhQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxZQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFK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
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("source-map-support/register");
|
|
4
|
-
|
|
5
4
|
var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
6
|
-
|
|
7
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
8
|
-
|
|
5
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
6
|
/*
|
|
10
7
|
* Copyright (C) 2015-present CloudBeat Limited
|
|
11
8
|
*
|
|
@@ -19,18 +16,16 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
19
16
|
* @name soap
|
|
20
17
|
* @description Provides methods for working with SOAP based Web Services.
|
|
21
18
|
*/
|
|
22
|
-
var errHelper = require('../errors/helper');
|
|
23
19
|
|
|
20
|
+
var errHelper = require('../errors/helper');
|
|
24
21
|
module.exports = function () {
|
|
25
22
|
var soap = require('soap');
|
|
26
|
-
|
|
27
23
|
var auth = null;
|
|
28
24
|
var proxyOptions = {};
|
|
29
25
|
var options = {
|
|
30
26
|
rejectUnauthorized: false
|
|
31
27
|
};
|
|
32
28
|
var lastResponseHeaders = null;
|
|
33
|
-
|
|
34
29
|
module.isInitialized = function () {
|
|
35
30
|
return true;
|
|
36
31
|
};
|
|
@@ -39,8 +34,6 @@ module.exports = function () {
|
|
|
39
34
|
* @function setProxy
|
|
40
35
|
* @param {String} url - Proxy url. Invocation without arguments will remove any previously set url.
|
|
41
36
|
*/
|
|
42
|
-
|
|
43
|
-
|
|
44
37
|
module.setProxy = function (url) {
|
|
45
38
|
if (url) {
|
|
46
39
|
proxyOptions = {
|
|
@@ -50,27 +43,26 @@ module.exports = function () {
|
|
|
50
43
|
proxyOptions = {};
|
|
51
44
|
}
|
|
52
45
|
};
|
|
46
|
+
|
|
53
47
|
/**
|
|
54
48
|
* @summary Sets Basic Authentication details to be used for connections with the service.
|
|
55
49
|
* @function authBasic
|
|
56
50
|
* @param {String} user - Username.
|
|
57
51
|
* @param {String} pass - Password.
|
|
58
52
|
*/
|
|
59
|
-
|
|
60
|
-
|
|
61
53
|
module.authBasic = function (user, pass) {
|
|
62
54
|
auth = new soap.BasicAuthSecurity(user, pass);
|
|
63
55
|
};
|
|
56
|
+
|
|
64
57
|
/**
|
|
65
58
|
* @summary Sets Bearer Token Authentication details to be used for connections with the service.
|
|
66
59
|
* @function authBearer
|
|
67
60
|
* @param {String} token - Token.
|
|
68
61
|
*/
|
|
69
|
-
|
|
70
|
-
|
|
71
62
|
module.authBearer = function (token) {
|
|
72
63
|
auth = new soap.BearerSecurity(token);
|
|
73
64
|
};
|
|
65
|
+
|
|
74
66
|
/**
|
|
75
67
|
* @summary Sets NTLM Authentication details to be used for connections with the service.
|
|
76
68
|
* @function authNTLM
|
|
@@ -79,11 +71,10 @@ module.exports = function () {
|
|
|
79
71
|
* @param {String} domain - Domain.
|
|
80
72
|
* @param {String} workstation - Workstation.
|
|
81
73
|
*/
|
|
82
|
-
|
|
83
|
-
|
|
84
74
|
module.authNTLM = function (user, pass, domain, workstation) {
|
|
85
75
|
auth = new soap.NTLMSecurity(user, pass, domain, workstation);
|
|
86
76
|
};
|
|
77
|
+
|
|
87
78
|
/**
|
|
88
79
|
* @summary Sets Client SSL Authentication details to be used for connections with the service.
|
|
89
80
|
* @function authClientSSL
|
|
@@ -92,11 +83,10 @@ module.exports = function () {
|
|
|
92
83
|
* @param {Buffer|String|Array} ca - CA path or a Buffer.
|
|
93
84
|
* @param {Object=} options - Options.
|
|
94
85
|
*/
|
|
95
|
-
|
|
96
|
-
|
|
97
86
|
module.authClientSSL = function (key, cert, ca, options) {
|
|
98
87
|
auth = new soap.ClientSSLSecurity(key, cert, ca, options);
|
|
99
88
|
};
|
|
89
|
+
|
|
100
90
|
/**
|
|
101
91
|
* @summary Sets Client SSL (PFX) Authentication details to be used for connections with the service.
|
|
102
92
|
* @function authClientSSLPFX
|
|
@@ -104,11 +94,10 @@ module.exports = function () {
|
|
|
104
94
|
* @param {Buffer|String=} passphrase - Passphrase for the PFX.
|
|
105
95
|
* @param {Object=} options - Options.
|
|
106
96
|
*/
|
|
107
|
-
|
|
108
|
-
|
|
109
97
|
module.authClientSSLPFX = function (pfx, passphrase, options) {
|
|
110
98
|
auth = new soap.ClientSSLSecurityPFX(pfx, passphrase, options);
|
|
111
99
|
};
|
|
100
|
+
|
|
112
101
|
/**
|
|
113
102
|
* @summary Initiates a SOAP request and returns the response.
|
|
114
103
|
* @function get
|
|
@@ -128,61 +117,50 @@ module.exports = function () {
|
|
|
128
117
|
* var result = soap.get(serviceUrl, 'NumberToWords', { 'ubiNum': 2019 });
|
|
129
118
|
* log.info(result.NumberToWordsResult);
|
|
130
119
|
*/
|
|
131
|
-
|
|
132
|
-
|
|
133
120
|
module.get = async function (wsdlUrl, method, args, wsdlHeaders = {}) {
|
|
134
121
|
var resultClient = null;
|
|
135
122
|
var result = null;
|
|
136
123
|
await (() => {
|
|
137
124
|
return new Promise((resolve, reject) => {
|
|
138
125
|
soap.createClient(wsdlUrl, {
|
|
139
|
-
wsdl_options: {
|
|
126
|
+
wsdl_options: {
|
|
127
|
+
...options,
|
|
140
128
|
...proxyOptions
|
|
141
129
|
},
|
|
142
130
|
wsdl_headers: wsdlHeaders
|
|
143
131
|
}, (err, client) => {
|
|
144
132
|
if (client === undefined) {
|
|
145
133
|
var msg = 'Error creating client';
|
|
146
|
-
|
|
147
134
|
if (err.message) {
|
|
148
135
|
var soapMsg = err.message;
|
|
149
136
|
var firstBreakIndex = soapMsg.indexOf('\n');
|
|
150
|
-
|
|
151
137
|
if (firstBreakIndex > 0) {
|
|
152
138
|
soapMsg = err.message.substring(0, firstBreakIndex);
|
|
153
139
|
}
|
|
154
|
-
|
|
155
140
|
msg += ': ' + soapMsg;
|
|
156
141
|
} else if (err && (typeof err === 'string' || err instanceof String)) {
|
|
157
142
|
msg += ': ' + err;
|
|
158
143
|
}
|
|
159
|
-
|
|
160
144
|
resultClient = new _OxygenError.default(errHelper.errorCode.SOAP_ERROR, msg);
|
|
161
145
|
resolve();
|
|
162
146
|
return;
|
|
163
147
|
}
|
|
164
|
-
|
|
165
148
|
resultClient = client;
|
|
166
|
-
|
|
167
149
|
if (typeof client[method] !== 'function') {
|
|
168
150
|
resultClient = new _OxygenError.default(errHelper.errorCode.SOAP_ERROR, 'No method named ' + method + ' was found.');
|
|
169
151
|
resolve();
|
|
170
152
|
return;
|
|
171
153
|
}
|
|
172
|
-
|
|
173
154
|
if (auth) {
|
|
174
155
|
client.setSecurity(auth);
|
|
175
156
|
}
|
|
176
|
-
|
|
177
157
|
if (wsdlHeaders) {
|
|
178
158
|
for (const header in wsdlHeaders) {
|
|
179
159
|
client.addHttpHeader(header, wsdlHeaders[header]);
|
|
180
160
|
}
|
|
181
161
|
}
|
|
182
|
-
|
|
183
162
|
client[method](args, (err, res) => {
|
|
184
163
|
lastResponseHeaders = client.lastResponseHeaders;
|
|
185
|
-
|
|
186
164
|
if (err !== null && err.root && err.root.Envelope && err.root.Envelope.Body && err.root.Envelope.Body.Fault) {
|
|
187
165
|
result = new _OxygenError.default(errHelper.errorCode.SOAP_ERROR, JSON.stringify(err.root.Envelope.Body.Fault.faultstring));
|
|
188
166
|
} else if (err !== null) {
|
|
@@ -192,36 +170,33 @@ module.exports = function () {
|
|
|
192
170
|
} else {
|
|
193
171
|
result = res;
|
|
194
172
|
}
|
|
195
|
-
|
|
196
173
|
resolve();
|
|
197
174
|
return;
|
|
198
|
-
}, {
|
|
175
|
+
}, {
|
|
176
|
+
...options,
|
|
199
177
|
...proxyOptions
|
|
200
178
|
});
|
|
201
179
|
});
|
|
202
180
|
});
|
|
203
181
|
})();
|
|
204
|
-
|
|
205
182
|
if (resultClient.type === errHelper.errorCode.SOAP_ERROR) {
|
|
206
183
|
throw resultClient;
|
|
207
184
|
}
|
|
208
|
-
|
|
209
185
|
if (result.type === errHelper.errorCode.SOAP_ERROR) {
|
|
210
186
|
throw result;
|
|
211
187
|
}
|
|
212
|
-
|
|
213
188
|
return result;
|
|
214
189
|
};
|
|
190
|
+
|
|
215
191
|
/**
|
|
216
192
|
* @summary Returns last response headers.
|
|
217
193
|
* @function getLastResponseHeaders
|
|
218
194
|
* @return {Object} IncomingHttpHeaders (https://microsoft.github.io/PowerBI-JavaScript/interfaces/_node_modules__types_node_http2_d_._http2_.incominghttpheaders.html).
|
|
219
195
|
*/
|
|
220
|
-
|
|
221
|
-
|
|
222
196
|
module.getLastResponseHeaders = function () {
|
|
223
197
|
return lastResponseHeaders;
|
|
224
198
|
};
|
|
199
|
+
|
|
225
200
|
/**
|
|
226
201
|
* @summary Returns SOAP service description.
|
|
227
202
|
* @function describe
|
|
@@ -229,57 +204,47 @@ module.exports = function () {
|
|
|
229
204
|
* @param {Object=} wsdlHeaders - custom HTTP headers to be sent on WSDL requests.
|
|
230
205
|
* @return {Object} Service description.
|
|
231
206
|
*/
|
|
232
|
-
|
|
233
|
-
|
|
234
207
|
module.describe = async function (wsdlUrl, wsdlHeaders = {}) {
|
|
235
208
|
var resultClient = null;
|
|
236
209
|
await (() => {
|
|
237
210
|
return new Promise((resolve, reject) => {
|
|
238
211
|
soap.createClient(wsdlUrl, {
|
|
239
|
-
wsdl_options: {
|
|
212
|
+
wsdl_options: {
|
|
213
|
+
...options,
|
|
240
214
|
...proxyOptions
|
|
241
215
|
},
|
|
242
216
|
wsdl_headers: wsdlHeaders
|
|
243
217
|
}, (err, client) => {
|
|
244
218
|
if (client === undefined) {
|
|
245
219
|
var msg = 'Error creating client';
|
|
246
|
-
|
|
247
220
|
if (err.message) {
|
|
248
221
|
var soapMsg = err.message;
|
|
249
222
|
var firstBreakIndex = soapMsg.indexOf('\n');
|
|
250
|
-
|
|
251
223
|
if (firstBreakIndex > 0) {
|
|
252
224
|
soapMsg = err.message.substring(0, firstBreakIndex);
|
|
253
225
|
}
|
|
254
|
-
|
|
255
226
|
msg += ': ' + soapMsg;
|
|
256
227
|
} else if (err && (typeof err === 'string' || err instanceof String)) {
|
|
257
228
|
msg += ': ' + err;
|
|
258
229
|
}
|
|
259
|
-
|
|
260
230
|
resultClient = new _OxygenError.default(errHelper.errorCode.SOAP_ERROR, msg);
|
|
261
231
|
resolve();
|
|
262
232
|
return;
|
|
263
233
|
}
|
|
264
|
-
|
|
265
234
|
if (auth) {
|
|
266
235
|
client.setSecurity(auth);
|
|
267
236
|
}
|
|
268
|
-
|
|
269
237
|
resultClient = client.describe();
|
|
270
238
|
resolve();
|
|
271
239
|
return;
|
|
272
240
|
});
|
|
273
241
|
});
|
|
274
242
|
})();
|
|
275
|
-
|
|
276
243
|
if (resultClient.type === errHelper.errorCode.SOAP_ERROR) {
|
|
277
244
|
throw resultClient;
|
|
278
245
|
}
|
|
279
|
-
|
|
280
246
|
return resultClient;
|
|
281
247
|
};
|
|
282
|
-
|
|
283
248
|
return module;
|
|
284
249
|
};
|
|
285
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1zb2FwLmpzIl0sIm5hbWVzIjpbImVyckhlbHBlciIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwic29hcCIsImF1dGgiLCJwcm94eU9wdGlvbnMiLCJvcHRpb25zIiwicmVqZWN0VW5hdXRob3JpemVkIiwibGFzdFJlc3BvbnNlSGVhZGVycyIsImlzSW5pdGlhbGl6ZWQiLCJzZXRQcm94eSIsInVybCIsInByb3h5IiwiYXV0aEJhc2ljIiwidXNlciIsInBhc3MiLCJCYXNpY0F1dGhTZWN1cml0eSIsImF1dGhCZWFyZXIiLCJ0b2tlbiIsIkJlYXJlclNlY3VyaXR5IiwiYXV0aE5UTE0iLCJkb21haW4iLCJ3b3Jrc3RhdGlvbiIsIk5UTE1TZWN1cml0eSIsImF1dGhDbGllbnRTU0wiLCJrZXkiLCJjZXJ0IiwiY2EiLCJDbGllbnRTU0xTZWN1cml0eSIsImF1dGhDbGllbnRTU0xQRlgiLCJwZngiLCJwYXNzcGhyYXNlIiwiQ2xpZW50U1NMU2VjdXJpdHlQRlgiLCJnZXQiLCJ3c2RsVXJsIiwibWV0aG9kIiwiYXJncyIsIndzZGxIZWFkZXJzIiwicmVzdWx0Q2xpZW50IiwicmVzdWx0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJjcmVhdGVDbGllbnQiLCJ3c2RsX29wdGlvbnMiLCJ3c2RsX2hlYWRlcnMiLCJlcnIiLCJjbGllbnQiLCJ1bmRlZmluZWQiLCJtc2ciLCJtZXNzYWdlIiwic29hcE1zZyIsImZpcnN0QnJlYWtJbmRleCIsImluZGV4T2YiLCJzdWJzdHJpbmciLCJTdHJpbmciLCJPeEVycm9yIiwiZXJyb3JDb2RlIiwiU09BUF9FUlJPUiIsInNldFNlY3VyaXR5IiwiaGVhZGVyIiwiYWRkSHR0cEhlYWRlciIsInJlcyIsInJvb3QiLCJFbnZlbG9wZSIsIkJvZHkiLCJGYXVsdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJmYXVsdHN0cmluZyIsImluc3BlY3QiLCJkZXB0aCIsInR5cGUiLCJnZXRMYXN0UmVzcG9uc2VIZWFkZXJzIiwiZGVzY3JpYmUiXSwibWFwcGluZ3MiOiI7Ozs7QUFjQTs7OztBQWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQSxJQUFJQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxrQkFBRCxDQUF2Qjs7QUFFQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLFlBQVc7QUFDeEIsTUFBSUMsSUFBSSxHQUFHSCxPQUFPLENBQUMsTUFBRCxDQUFsQjs7QUFDQSxNQUFJSSxJQUFJLEdBQUcsSUFBWDtBQUNBLE1BQUlDLFlBQVksR0FBRyxFQUFuQjtBQUNBLE1BQUlDLE9BQU8sR0FBRztBQUNWQyxJQUFBQSxrQkFBa0IsRUFBRTtBQURWLEdBQWQ7QUFHQSxNQUFJQyxtQkFBbUIsR0FBRyxJQUExQjs7QUFFQVAsRUFBQUEsTUFBTSxDQUFDUSxhQUFQLEdBQXVCLFlBQVc7QUFDOUIsV0FBTyxJQUFQO0FBQ0gsR0FGRDtBQUdBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7OztBQUNJUixFQUFBQSxNQUFNLENBQUNTLFFBQVAsR0FBa0IsVUFBU0MsR0FBVCxFQUFjO0FBQzVCLFFBQUlBLEdBQUosRUFBUztBQUNMTixNQUFBQSxZQUFZLEdBQUk7QUFBRU8sUUFBQUEsS0FBSyxFQUFFRDtBQUFULE9BQWhCO0FBQ0gsS0FGRCxNQUVPO0FBQ0hOLE1BQUFBLFlBQVksR0FBRyxFQUFmO0FBQ0g7QUFDSixHQU5EO0FBUUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDSUosRUFBQUEsTUFBTSxDQUFDWSxTQUFQLEdBQW1CLFVBQVNDLElBQVQsRUFBZUMsSUFBZixFQUFxQjtBQUNwQ1gsSUFBQUEsSUFBSSxHQUFHLElBQUlELElBQUksQ0FBQ2EsaUJBQVQsQ0FBMkJGLElBQTNCLEVBQWlDQyxJQUFqQyxDQUFQO0FBQ0gsR0FGRDtBQUlBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7OztBQUNJZCxFQUFBQSxNQUFNLENBQUNnQixVQUFQLEdBQW9CLFVBQVNDLEtBQVQsRUFBZ0I7QUFDaENkLElBQUFBLElBQUksR0FBRyxJQUFJRCxJQUFJLENBQUNnQixjQUFULENBQXdCRCxLQUF4QixDQUFQO0FBQ0gsR0FGRDtBQUlBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJakIsRUFBQUEsTUFBTSxDQUFDbUIsUUFBUCxHQUFrQixVQUFTTixJQUFULEVBQWVDLElBQWYsRUFBcUJNLE1BQXJCLEVBQTZCQyxXQUE3QixFQUEwQztBQUN4RGxCLElBQUFBLElBQUksR0FBRyxJQUFJRCxJQUFJLENBQUNvQixZQUFULENBQXNCVCxJQUF0QixFQUE0QkMsSUFBNUIsRUFBa0NNLE1BQWxDLEVBQTBDQyxXQUExQyxDQUFQO0FBQ0gsR0FGRDtBQUlBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJckIsRUFBQUEsTUFBTSxDQUFDdUIsYUFBUCxHQUF1QixVQUFTQyxHQUFULEVBQWNDLElBQWQsRUFBb0JDLEVBQXBCLEVBQXdCckIsT0FBeEIsRUFBaUM7QUFDcERGLElBQUFBLElBQUksR0FBRyxJQUFJRCxJQUFJLENBQUN5QixpQkFBVCxDQUEyQkgsR0FBM0IsRUFBZ0NDLElBQWhDLEVBQXNDQyxFQUF0QyxFQUEwQ3JCLE9BQTFDLENBQVA7QUFDSCxHQUZEO0FBSUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJTCxFQUFBQSxNQUFNLENBQUM0QixnQkFBUCxHQUEwQixVQUFTQyxHQUFULEVBQWNDLFVBQWQsRUFBMEJ6QixPQUExQixFQUFtQztBQUN6REYsSUFBQUEsSUFBSSxHQUFHLElBQUlELElBQUksQ0FBQzZCLG9CQUFULENBQThCRixHQUE5QixFQUFtQ0MsVUFBbkMsRUFBK0N6QixPQUEvQyxDQUFQO0FBQ0gsR0FGRDtBQUlBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDSUwsRUFBQUEsTUFBTSxDQUFDZ0MsR0FBUCxHQUFhLGdCQUFlQyxPQUFmLEVBQXdCQyxNQUF4QixFQUFnQ0MsSUFBaEMsRUFBc0NDLFdBQVcsR0FBRyxFQUFwRCxFQUF3RDtBQUNqRSxRQUFJQyxZQUFZLEdBQUcsSUFBbkI7QUFDQSxRQUFJQyxNQUFNLEdBQUcsSUFBYjtBQUVBLFVBQU0sQ0FBQyxNQUFNO0FBQ1QsYUFBTyxJQUFJQyxPQUFKLENBQVksQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3BDdkMsUUFBQUEsSUFBSSxDQUFDd0MsWUFBTCxDQUFrQlQsT0FBbEIsRUFBMkI7QUFBRVUsVUFBQUEsWUFBWSxFQUFFLEVBQUUsR0FBR3RDLE9BQUw7QUFBYyxlQUFHRDtBQUFqQixXQUFoQjtBQUFpRHdDLFVBQUFBLFlBQVksRUFBRVI7QUFBL0QsU0FBM0IsRUFBd0csQ0FBQ1MsR0FBRCxFQUFNQyxNQUFOLEtBQWlCO0FBQ3JILGNBQUlBLE1BQU0sS0FBS0MsU0FBZixFQUEwQjtBQUN0QixnQkFBSUMsR0FBRyxHQUFJLHVCQUFYOztBQUNBLGdCQUFJSCxHQUFHLENBQUNJLE9BQVIsRUFBaUI7QUFDYixrQkFBSUMsT0FBTyxHQUFHTCxHQUFHLENBQUNJLE9BQWxCO0FBQ0Esa0JBQUlFLGVBQWUsR0FBR0QsT0FBTyxDQUFDRSxPQUFSLENBQWdCLElBQWhCLENBQXRCOztBQUNBLGtCQUFJRCxlQUFlLEdBQUcsQ0FBdEIsRUFBeUI7QUFDckJELGdCQUFBQSxPQUFPLEdBQUdMLEdBQUcsQ0FBQ0ksT0FBSixDQUFZSSxTQUFaLENBQXNCLENBQXRCLEVBQXlCRixlQUF6QixDQUFWO0FBQ0g7O0FBQ0RILGNBQUFBLEdBQUcsSUFBSSxPQUFPRSxPQUFkO0FBQ0gsYUFQRCxNQU9PLElBQUlMLEdBQUcsS0FBSyxPQUFPQSxHQUFQLEtBQWUsUUFBZixJQUEyQkEsR0FBRyxZQUFZUyxNQUEvQyxDQUFQLEVBQStEO0FBQ2xFTixjQUFBQSxHQUFHLElBQUksT0FBT0gsR0FBZDtBQUNIOztBQUNEUixZQUFBQSxZQUFZLEdBQUcsSUFBSWtCLG9CQUFKLENBQVl6RCxTQUFTLENBQUMwRCxTQUFWLENBQW9CQyxVQUFoQyxFQUE0Q1QsR0FBNUMsQ0FBZjtBQUNBUixZQUFBQSxPQUFPO0FBQ1A7QUFDSDs7QUFFREgsVUFBQUEsWUFBWSxHQUFHUyxNQUFmOztBQUVBLGNBQUksT0FBT0EsTUFBTSxDQUFDWixNQUFELENBQWIsS0FBMEIsVUFBOUIsRUFBMEM7QUFDdENHLFlBQUFBLFlBQVksR0FBRyxJQUFJa0Isb0JBQUosQ0FBWXpELFNBQVMsQ0FBQzBELFNBQVYsQ0FBb0JDLFVBQWhDLEVBQTRDLHFCQUFxQnZCLE1BQXJCLEdBQThCLGFBQTFFLENBQWY7QUFDQU0sWUFBQUEsT0FBTztBQUNQO0FBQ0g7O0FBRUQsY0FBSXJDLElBQUosRUFBVTtBQUNOMkMsWUFBQUEsTUFBTSxDQUFDWSxXQUFQLENBQW1CdkQsSUFBbkI7QUFDSDs7QUFFRCxjQUFJaUMsV0FBSixFQUFpQjtBQUNiLGlCQUFLLE1BQU11QixNQUFYLElBQXFCdkIsV0FBckIsRUFBa0M7QUFDOUJVLGNBQUFBLE1BQU0sQ0FBQ2MsYUFBUCxDQUFxQkQsTUFBckIsRUFBNkJ2QixXQUFXLENBQUN1QixNQUFELENBQXhDO0FBQ0g7QUFDSjs7QUFFRGIsVUFBQUEsTUFBTSxDQUFDWixNQUFELENBQU4sQ0FBZUMsSUFBZixFQUFxQixDQUFDVSxHQUFELEVBQU1nQixHQUFOLEtBQWM7QUFDL0J0RCxZQUFBQSxtQkFBbUIsR0FBR3VDLE1BQU0sQ0FBQ3ZDLG1CQUE3Qjs7QUFDQSxnQkFBSXNDLEdBQUcsS0FBSyxJQUFSLElBQWdCQSxHQUFHLENBQUNpQixJQUFwQixJQUE0QmpCLEdBQUcsQ0FBQ2lCLElBQUosQ0FBU0MsUUFBckMsSUFBaURsQixHQUFHLENBQUNpQixJQUFKLENBQVNDLFFBQVQsQ0FBa0JDLElBQW5FLElBQTJFbkIsR0FBRyxDQUFDaUIsSUFBSixDQUFTQyxRQUFULENBQWtCQyxJQUFsQixDQUF1QkMsS0FBdEcsRUFBNkc7QUFDekczQixjQUFBQSxNQUFNLEdBQUcsSUFBSWlCLG9CQUFKLENBQVl6RCxTQUFTLENBQUMwRCxTQUFWLENBQW9CQyxVQUFoQyxFQUE0Q1MsSUFBSSxDQUFDQyxTQUFMLENBQWV0QixHQUFHLENBQUNpQixJQUFKLENBQVNDLFFBQVQsQ0FBa0JDLElBQWxCLENBQXVCQyxLQUF2QixDQUE2QkcsV0FBNUMsQ0FBNUMsQ0FBVDtBQUNILGFBRkQsTUFFTyxJQUFJdkIsR0FBRyxLQUFLLElBQVosRUFBa0I7QUFDckJQLGNBQUFBLE1BQU0sR0FBRyxJQUFJaUIsb0JBQUosQ0FBWXpELFNBQVMsQ0FBQzBELFNBQVYsQ0FBb0JDLFVBQWhDLEVBQTRDMUQsT0FBTyxDQUFDLE1BQUQsQ0FBUCxDQUFnQnNFLE9BQWhCLENBQXdCeEIsR0FBeEIsRUFBNkI7QUFBRXlCLGdCQUFBQSxLQUFLLEVBQUU7QUFBVCxlQUE3QixDQUE1QyxDQUFUO0FBQ0gsYUFGTSxNQUVBO0FBQ0hoQyxjQUFBQSxNQUFNLEdBQUd1QixHQUFUO0FBQ0g7O0FBRURyQixZQUFBQSxPQUFPO0FBQ1A7QUFDSCxXQVpELEVBWUcsRUFBRSxHQUFHbkMsT0FBTDtBQUFjLGVBQUdEO0FBQWpCLFdBWkg7QUFhSCxTQWpERDtBQWtESCxPQW5ETSxDQUFQO0FBb0RILEtBckRLLEdBQU47O0FBdURBLFFBQUlpQyxZQUFZLENBQUNrQyxJQUFiLEtBQXNCekUsU0FBUyxDQUFDMEQsU0FBVixDQUFvQkMsVUFBOUMsRUFBMEQ7QUFDdEQsWUFBTXBCLFlBQU47QUFDSDs7QUFFRCxRQUFJQyxNQUFNLENBQUNpQyxJQUFQLEtBQWdCekUsU0FBUyxDQUFDMEQsU0FBVixDQUFvQkMsVUFBeEMsRUFBb0Q7QUFDaEQsWUFBTW5CLE1BQU47QUFDSDs7QUFFRCxXQUFPQSxNQUFQO0FBQ0gsR0FwRUQ7QUFzRUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0l0QyxFQUFBQSxNQUFNLENBQUN3RSxzQkFBUCxHQUFnQyxZQUFXO0FBQ3ZDLFdBQU9qRSxtQkFBUDtBQUNILEdBRkQ7QUFJQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0lQLEVBQUFBLE1BQU0sQ0FBQ3lFLFFBQVAsR0FBa0IsZ0JBQWV4QyxPQUFmLEVBQXdCRyxXQUFXLEdBQUcsRUFBdEMsRUFBMEM7QUFDeEQsUUFBSUMsWUFBWSxHQUFHLElBQW5CO0FBRUEsVUFBTSxDQUFDLE1BQU07QUFDVCxhQUFPLElBQUlFLE9BQUosQ0FBWSxDQUFDQyxPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDcEN2QyxRQUFBQSxJQUFJLENBQUN3QyxZQUFMLENBQWtCVCxPQUFsQixFQUEwQjtBQUFFVSxVQUFBQSxZQUFZLEVBQUUsRUFBRSxHQUFHdEMsT0FBTDtBQUFjLGVBQUdEO0FBQWpCLFdBQWhCO0FBQWlEd0MsVUFBQUEsWUFBWSxFQUFFUjtBQUEvRCxTQUExQixFQUF1RyxDQUFDUyxHQUFELEVBQU1DLE1BQU4sS0FBaUI7QUFDcEgsY0FBSUEsTUFBTSxLQUFLQyxTQUFmLEVBQTBCO0FBQ3RCLGdCQUFJQyxHQUFHLEdBQUksdUJBQVg7O0FBQ0EsZ0JBQUlILEdBQUcsQ0FBQ0ksT0FBUixFQUFpQjtBQUNiLGtCQUFJQyxPQUFPLEdBQUdMLEdBQUcsQ0FBQ0ksT0FBbEI7QUFDQSxrQkFBSUUsZUFBZSxHQUFHRCxPQUFPLENBQUNFLE9BQVIsQ0FBZ0IsSUFBaEIsQ0FBdEI7O0FBQ0Esa0JBQUlELGVBQWUsR0FBRyxDQUF0QixFQUF5QjtBQUNyQkQsZ0JBQUFBLE9BQU8sR0FBR0wsR0FBRyxDQUFDSSxPQUFKLENBQVlJLFNBQVosQ0FBc0IsQ0FBdEIsRUFBeUJGLGVBQXpCLENBQVY7QUFDSDs7QUFDREgsY0FBQUEsR0FBRyxJQUFJLE9BQU9FLE9BQWQ7QUFDSCxhQVBELE1BT08sSUFBSUwsR0FBRyxLQUFLLE9BQU9BLEdBQVAsS0FBZSxRQUFmLElBQTJCQSxHQUFHLFlBQVlTLE1BQS9DLENBQVAsRUFBK0Q7QUFDbEVOLGNBQUFBLEdBQUcsSUFBSSxPQUFPSCxHQUFkO0FBQ0g7O0FBQ0RSLFlBQUFBLFlBQVksR0FBRyxJQUFJa0Isb0JBQUosQ0FBWXpELFNBQVMsQ0FBQzBELFNBQVYsQ0FBb0JDLFVBQWhDLEVBQTRDVCxHQUE1QyxDQUFmO0FBQ0FSLFlBQUFBLE9BQU87QUFDUDtBQUNIOztBQUVELGNBQUlyQyxJQUFKLEVBQVU7QUFDTjJDLFlBQUFBLE1BQU0sQ0FBQ1ksV0FBUCxDQUFtQnZELElBQW5CO0FBQ0g7O0FBRURrQyxVQUFBQSxZQUFZLEdBQUdTLE1BQU0sQ0FBQzJCLFFBQVAsRUFBZjtBQUNBakMsVUFBQUEsT0FBTztBQUNQO0FBQ0gsU0F6QkQ7QUEwQkgsT0EzQk0sQ0FBUDtBQTRCSCxLQTdCSyxHQUFOOztBQStCQSxRQUFJSCxZQUFZLENBQUNrQyxJQUFiLEtBQXNCekUsU0FBUyxDQUFDMEQsU0FBVixDQUFvQkMsVUFBOUMsRUFBMEQ7QUFDdEQsWUFBTXBCLFlBQU47QUFDSDs7QUFFRCxXQUFPQSxZQUFQO0FBQ0gsR0F2Q0Q7O0FBeUNBLFNBQU9yQyxNQUFQO0FBQ0gsQ0FsT0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBzb2FwXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggU09BUCBiYXNlZCBXZWIgU2VydmljZXMuXHJcbiAqL1xyXG5cclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxudmFyIGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgc29hcCA9IHJlcXVpcmUoJ3NvYXAnKTtcclxuICAgIHZhciBhdXRoID0gbnVsbDtcclxuICAgIHZhciBwcm94eU9wdGlvbnMgPSB7fTtcclxuICAgIHZhciBvcHRpb25zID0ge1xyXG4gICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcclxuICAgIH07XHJcbiAgICB2YXIgbGFzdFJlc3BvbnNlSGVhZGVycyA9IG51bGw7XHJcblxyXG4gICAgbW9kdWxlLmlzSW5pdGlhbGl6ZWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldHMgcHJveHkgdXJsIHRvIGJlIHVzZWQgZm9yIGNvbm5lY3Rpb25zIHdpdGggdGhlIHNlcnZpY2UuXHJcbiAgICAgKiBAZnVuY3Rpb24gc2V0UHJveHlcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgLSBQcm94eSB1cmwuIEludm9jYXRpb24gd2l0aG91dCBhcmd1bWVudHMgd2lsbCByZW1vdmUgYW55IHByZXZpb3VzbHkgc2V0IHVybC5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLnNldFByb3h5ID0gZnVuY3Rpb24odXJsKSB7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICBwcm94eU9wdGlvbnMgPSAgeyBwcm94eTogdXJsIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcHJveHlPcHRpb25zID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldHMgQmFzaWMgQXV0aGVudGljYXRpb24gZGV0YWlscyB0byBiZSB1c2VkIGZvciBjb25uZWN0aW9ucyB3aXRoIHRoZSBzZXJ2aWNlLlxyXG4gICAgICogQGZ1bmN0aW9uIGF1dGhCYXNpY1xyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVzZXIgLSBVc2VybmFtZS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwYXNzIC0gUGFzc3dvcmQuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5hdXRoQmFzaWMgPSBmdW5jdGlvbih1c2VyLCBwYXNzKSB7XHJcbiAgICAgICAgYXV0aCA9IG5ldyBzb2FwLkJhc2ljQXV0aFNlY3VyaXR5KHVzZXIsIHBhc3MpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldHMgQmVhcmVyIFRva2VuIEF1dGhlbnRpY2F0aW9uIGRldGFpbHMgdG8gYmUgdXNlZCBmb3IgY29ubmVjdGlvbnMgd2l0aCB0aGUgc2VydmljZS5cclxuICAgICAqIEBmdW5jdGlvbiBhdXRoQmVhcmVyXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdG9rZW4gLSBUb2tlbi5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmF1dGhCZWFyZXIgPSBmdW5jdGlvbih0b2tlbikge1xyXG4gICAgICAgIGF1dGggPSBuZXcgc29hcC5CZWFyZXJTZWN1cml0eSh0b2tlbik7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0cyBOVExNIEF1dGhlbnRpY2F0aW9uIGRldGFpbHMgdG8gYmUgdXNlZCBmb3IgY29ubmVjdGlvbnMgd2l0aCB0aGUgc2VydmljZS5cclxuICAgICAqIEBmdW5jdGlvbiBhdXRoTlRMTVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVzZXIgLSBVc2VybmFtZS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwYXNzIC0gUGFzc3dvcmQuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIC0gRG9tYWluLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHdvcmtzdGF0aW9uIC0gV29ya3N0YXRpb24uXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5hdXRoTlRMTSA9IGZ1bmN0aW9uKHVzZXIsIHBhc3MsIGRvbWFpbiwgd29ya3N0YXRpb24pIHtcclxuICAgICAgICBhdXRoID0gbmV3IHNvYXAuTlRMTVNlY3VyaXR5KHVzZXIsIHBhc3MsIGRvbWFpbiwgd29ya3N0YXRpb24pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldHMgQ2xpZW50IFNTTCBBdXRoZW50aWNhdGlvbiBkZXRhaWxzIHRvIGJlIHVzZWQgZm9yIGNvbm5lY3Rpb25zIHdpdGggdGhlIHNlcnZpY2UuXHJcbiAgICAgKiBAZnVuY3Rpb24gYXV0aENsaWVudFNTTFxyXG4gICAgICogQHBhcmFtIHtCdWZmZXJ8U3RyaW5nfSBrZXkgLSBQcml2YXRlIGtleSBwYXRoIG9yIGEgQnVmZmVyIGNvbnRhaW5pbmcgdGhlIGtleS5cclxuICAgICAqIEBwYXJhbSB7QnVmZmVyfFN0cmluZ30gY2VydCAtIENlcnRpZmljYXRlIHBhdGggb3IgYSBCdWZmZXIgY29udGFpbmluZyB0aGUgY2VydGlmaWNhdGUuXHJcbiAgICAgKiBAcGFyYW0ge0J1ZmZlcnxTdHJpbmd8QXJyYXl9IGNhIC0gQ0EgcGF0aCBvciBhIEJ1ZmZlci5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5hdXRoQ2xpZW50U1NMID0gZnVuY3Rpb24oa2V5LCBjZXJ0LCBjYSwgb3B0aW9ucykge1xyXG4gICAgICAgIGF1dGggPSBuZXcgc29hcC5DbGllbnRTU0xTZWN1cml0eShrZXksIGNlcnQsIGNhLCBvcHRpb25zKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZXRzIENsaWVudCBTU0wgKFBGWCkgQXV0aGVudGljYXRpb24gZGV0YWlscyB0byBiZSB1c2VkIGZvciBjb25uZWN0aW9ucyB3aXRoIHRoZSBzZXJ2aWNlLlxyXG4gICAgICogQGZ1bmN0aW9uIGF1dGhDbGllbnRTU0xQRlhcclxuICAgICAqIEBwYXJhbSB7QnVmZmVyfFN0cmluZ30gcGZ4IC0gUEZYIHBhdGggb3IgYSBCdWZmZXIgY29udGFpbmluZyB0aGUgUEZYIGJ1bmRsZS5cclxuICAgICAqIEBwYXJhbSB7QnVmZmVyfFN0cmluZz19IHBhc3NwaHJhc2UgLSBQYXNzcGhyYXNlIGZvciB0aGUgUEZYLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmF1dGhDbGllbnRTU0xQRlggPSBmdW5jdGlvbihwZngsIHBhc3NwaHJhc2UsIG9wdGlvbnMpIHtcclxuICAgICAgICBhdXRoID0gbmV3IHNvYXAuQ2xpZW50U1NMU2VjdXJpdHlQRlgocGZ4LCBwYXNzcGhyYXNlLCBvcHRpb25zKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBJbml0aWF0ZXMgYSBTT0FQIHJlcXVlc3QgYW5kIHJldHVybnMgdGhlIHJlc3BvbnNlLlxyXG4gICAgICogQGZ1bmN0aW9uIGdldFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHdzZGxVcmwgLSBVUkwgcG9pbnRpbmcgdG8gdGhlIFdTREwgWE1MLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZCAtIE1ldGhvZCBuYW1lIChjYXNlIHNlbnNpdGl2ZSkuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IGFyZ3MgLSBPYmplY3QgY29udGFpbmluZyB0aGUgYXJndW1lbnRzLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSB3c2RsSGVhZGVycyAtIGN1c3RvbSBIVFRQIGhlYWRlcnMgdG8gYmUgc2VudCBvbiBXU0RMIHJlcXVlc3RzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzcG9uc2Ugb2JqZWN0LlxyXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XHJcbiAgICAgKiAvLyBnZXQgU09BUCBzZXJ2aWNlIGRlc2NyaXB0aW9uLCBzbyB3ZSBjYW4gdW5kZXJzdGFuZCB3aGF0IG1ldGhvZHMgaXQgcHJvdmlkZXMsXHJcbiAgICAgKiAvLyB3aGF0IGlucHV0IHBhcmFtZXRlcnMgaXQgZXhwZWN0cywgYW5kIHdoYXQgaXMgdGhlIG91dHB1dCBzdHJ1Y3R1cmUuXHJcbiAgICAgKiB2YXIgc2VydmljZVVybCA9ICdodHRwOi8vd3d3LmRhdGFhY2Nlc3MuY29tL3dlYnNlcnZpY2Vzc2VydmVyL251bWJlcmNvbnZlcnNpb24ud3NvP1dTREwnO1xyXG4gICAgICogdmFyIHNlcnZpY2VEZXNjcmlwdGlvbiA9IHNvYXAuZGVzY3JpYmUoc2VydmljZVVybCk7XHJcbiAgICAgKiBsb2cuaW5mbyhzZXJ2aWNlRGVzY3JpcHRpb24pO1xyXG4gICAgICogXHJcbiAgICAgKiAvLyBOdW1iZXJUb1dvcmRzIG1ldGhvZCBpbiB0aGlzIHNlcnZpY2UgY29udmVydHMgbnVtYmVyIHRvIHdvcmRzLlxyXG4gICAgICogdmFyIHJlc3VsdCA9IHNvYXAuZ2V0KHNlcnZpY2VVcmwsICdOdW1iZXJUb1dvcmRzJywgeyAndWJpTnVtJzogMjAxOSB9KTtcclxuICAgICAqIGxvZy5pbmZvKHJlc3VsdC5OdW1iZXJUb1dvcmRzUmVzdWx0KTtcclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmdldCA9IGFzeW5jIGZ1bmN0aW9uKHdzZGxVcmwsIG1ldGhvZCwgYXJncywgd3NkbEhlYWRlcnMgPSB7fSkge1xyXG4gICAgICAgIHZhciByZXN1bHRDbGllbnQgPSBudWxsO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBudWxsO1xyXG5cclxuICAgICAgICBhd2FpdCAoKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc29hcC5jcmVhdGVDbGllbnQod3NkbFVybCwgeyB3c2RsX29wdGlvbnM6IHsgLi4ub3B0aW9ucywgLi4ucHJveHlPcHRpb25zIH0sIHdzZGxfaGVhZGVyczogd3NkbEhlYWRlcnN9LCAoZXJyLCBjbGllbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2xpZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1zZyA9ICAnRXJyb3IgY3JlYXRpbmcgY2xpZW50JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc29hcE1zZyA9IGVyci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0QnJlYWtJbmRleCA9IHNvYXBNc2cuaW5kZXhPZignXFxuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RCcmVha0luZGV4ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvYXBNc2cgPSBlcnIubWVzc2FnZS5zdWJzdHJpbmcoMCwgZmlyc3RCcmVha0luZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSAnOiAnICsgc29hcE1zZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIgJiYgKHR5cGVvZiBlcnIgPT09ICdzdHJpbmcnIHx8IGVyciBpbnN0YW5jZW9mIFN0cmluZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSAnOiAnICsgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdENsaWVudCA9IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU09BUF9FUlJPUiwgbXNnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRDbGllbnQgPSBjbGllbnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2xpZW50W21ldGhvZF0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Q2xpZW50ID0gbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TT0FQX0VSUk9SLCAnTm8gbWV0aG9kIG5hbWVkICcgKyBtZXRob2QgKyAnIHdhcyBmb3VuZC4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQuc2V0U2VjdXJpdHkoYXV0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAod3NkbEhlYWRlcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBoZWFkZXIgaW4gd3NkbEhlYWRlcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudC5hZGRIdHRwSGVhZGVyKGhlYWRlciwgd3NkbEhlYWRlcnNbaGVhZGVyXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNsaWVudFttZXRob2RdKGFyZ3MsIChlcnIsIHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0UmVzcG9uc2VIZWFkZXJzID0gY2xpZW50Lmxhc3RSZXNwb25zZUhlYWRlcnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgIT09IG51bGwgJiYgZXJyLnJvb3QgJiYgZXJyLnJvb3QuRW52ZWxvcGUgJiYgZXJyLnJvb3QuRW52ZWxvcGUuQm9keSAmJiBlcnIucm9vdC5FbnZlbG9wZS5Cb2R5LkZhdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNPQVBfRVJST1IsIEpTT04uc3RyaW5naWZ5KGVyci5yb290LkVudmVsb3BlLkJvZHkuRmF1bHQuZmF1bHRzdHJpbmcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU09BUF9FUlJPUiwgcmVxdWlyZSgndXRpbCcpLmluc3BlY3QoZXJyLCB7IGRlcHRoOiA0IH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgeyAuLi5vcHRpb25zLCAuLi5wcm94eU9wdGlvbnMgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSkoKTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdENsaWVudC50eXBlID09PSBlcnJIZWxwZXIuZXJyb3JDb2RlLlNPQVBfRVJST1IpIHtcclxuICAgICAgICAgICAgdGhyb3cgcmVzdWx0Q2xpZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdC50eXBlID09PSBlcnJIZWxwZXIuZXJyb3JDb2RlLlNPQVBfRVJST1IpIHtcclxuICAgICAgICAgICAgdGhyb3cgcmVzdWx0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGxhc3QgcmVzcG9uc2UgaGVhZGVycy5cclxuICAgICAqIEBmdW5jdGlvbiBnZXRMYXN0UmVzcG9uc2VIZWFkZXJzXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEluY29taW5nSHR0cEhlYWRlcnMgKGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9Qb3dlckJJLUphdmFTY3JpcHQvaW50ZXJmYWNlcy9fbm9kZV9tb2R1bGVzX190eXBlc19ub2RlX2h0dHAyX2RfLl9odHRwMl8uaW5jb21pbmdodHRwaGVhZGVycy5odG1sKS5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmdldExhc3RSZXNwb25zZUhlYWRlcnMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbGFzdFJlc3BvbnNlSGVhZGVycztcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIFNPQVAgc2VydmljZSBkZXNjcmlwdGlvbi5cclxuICAgICAqIEBmdW5jdGlvbiBkZXNjcmliZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHdzZGxVcmwgLSBVUkwgcG9pbnRpbmcgdG8gdGhlIFdTREwgWE1MLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSB3c2RsSGVhZGVycyAtIGN1c3RvbSBIVFRQIGhlYWRlcnMgdG8gYmUgc2VudCBvbiBXU0RMIHJlcXVlc3RzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBTZXJ2aWNlIGRlc2NyaXB0aW9uLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuZGVzY3JpYmUgPSBhc3luYyBmdW5jdGlvbih3c2RsVXJsLCB3c2RsSGVhZGVycyA9IHt9KSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdENsaWVudCA9IG51bGw7XHJcblxyXG4gICAgICAgIGF3YWl0ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzb2FwLmNyZWF0ZUNsaWVudCh3c2RsVXJsLHsgd3NkbF9vcHRpb25zOiB7IC4uLm9wdGlvbnMsIC4uLnByb3h5T3B0aW9ucyB9LCB3c2RsX2hlYWRlcnM6IHdzZGxIZWFkZXJzfSwgKGVyciwgY2xpZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsaWVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtc2cgPSAgJ0Vycm9yIGNyZWF0aW5nIGNsaWVudCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvYXBNc2cgPSBlcnIubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdEJyZWFrSW5kZXggPSBzb2FwTXNnLmluZGV4T2YoJ1xcbicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0QnJlYWtJbmRleCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2FwTXNnID0gZXJyLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGZpcnN0QnJlYWtJbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgKz0gJzogJyArIHNvYXBNc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyICYmICh0eXBlb2YgZXJyID09PSAnc3RyaW5nJyB8fCBlcnIgaW5zdGFuY2VvZiBTdHJpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgKz0gJzogJyArIGVycjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRDbGllbnQgPSBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNPQVBfRVJST1IsIG1zZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LnNldFNlY3VyaXR5KGF1dGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0Q2xpZW50ID0gY2xpZW50LmRlc2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KSgpO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0Q2xpZW50LnR5cGUgPT09IGVyckhlbHBlci5lcnJvckNvZGUuU09BUF9FUlJPUikge1xyXG4gICAgICAgICAgICB0aHJvdyByZXN1bHRDbGllbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0Q2xpZW50O1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbW9kdWxlO1xyXG59O1xyXG4iXX0=
|
|
250
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT3h5Z2VuRXJyb3IiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImVyckhlbHBlciIsIm1vZHVsZSIsImV4cG9ydHMiLCJzb2FwIiwiYXV0aCIsInByb3h5T3B0aW9ucyIsIm9wdGlvbnMiLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJsYXN0UmVzcG9uc2VIZWFkZXJzIiwiaXNJbml0aWFsaXplZCIsInNldFByb3h5IiwidXJsIiwicHJveHkiLCJhdXRoQmFzaWMiLCJ1c2VyIiwicGFzcyIsIkJhc2ljQXV0aFNlY3VyaXR5IiwiYXV0aEJlYXJlciIsInRva2VuIiwiQmVhcmVyU2VjdXJpdHkiLCJhdXRoTlRMTSIsImRvbWFpbiIsIndvcmtzdGF0aW9uIiwiTlRMTVNlY3VyaXR5IiwiYXV0aENsaWVudFNTTCIsImtleSIsImNlcnQiLCJjYSIsIkNsaWVudFNTTFNlY3VyaXR5IiwiYXV0aENsaWVudFNTTFBGWCIsInBmeCIsInBhc3NwaHJhc2UiLCJDbGllbnRTU0xTZWN1cml0eVBGWCIsImdldCIsIndzZGxVcmwiLCJtZXRob2QiLCJhcmdzIiwid3NkbEhlYWRlcnMiLCJyZXN1bHRDbGllbnQiLCJyZXN1bHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImNyZWF0ZUNsaWVudCIsIndzZGxfb3B0aW9ucyIsIndzZGxfaGVhZGVycyIsImVyciIsImNsaWVudCIsInVuZGVmaW5lZCIsIm1zZyIsIm1lc3NhZ2UiLCJzb2FwTXNnIiwiZmlyc3RCcmVha0luZGV4IiwiaW5kZXhPZiIsInN1YnN0cmluZyIsIlN0cmluZyIsIk94RXJyb3IiLCJlcnJvckNvZGUiLCJTT0FQX0VSUk9SIiwic2V0U2VjdXJpdHkiLCJoZWFkZXIiLCJhZGRIdHRwSGVhZGVyIiwicmVzIiwicm9vdCIsIkVudmVsb3BlIiwiQm9keSIsIkZhdWx0IiwiSlNPTiIsInN0cmluZ2lmeSIsImZhdWx0c3RyaW5nIiwiaW5zcGVjdCIsImRlcHRoIiwidHlwZSIsImdldExhc3RSZXNwb25zZUhlYWRlcnMiLCJkZXNjcmliZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1zb2FwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIHNvYXBcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBTT0FQIGJhc2VkIFdlYiBTZXJ2aWNlcy5cclxuICovXHJcblxyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG52YXIgZXJySGVscGVyID0gcmVxdWlyZSgnLi4vZXJyb3JzL2hlbHBlcicpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBzb2FwID0gcmVxdWlyZSgnc29hcCcpO1xyXG4gICAgdmFyIGF1dGggPSBudWxsO1xyXG4gICAgdmFyIHByb3h5T3B0aW9ucyA9IHt9O1xyXG4gICAgdmFyIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIHZhciBsYXN0UmVzcG9uc2VIZWFkZXJzID0gbnVsbDtcclxuXHJcbiAgICBtb2R1bGUuaXNJbml0aWFsaXplZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0cyBwcm94eSB1cmwgdG8gYmUgdXNlZCBmb3IgY29ubmVjdGlvbnMgd2l0aCB0aGUgc2VydmljZS5cclxuICAgICAqIEBmdW5jdGlvbiBzZXRQcm94eVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCAtIFByb3h5IHVybC4gSW52b2NhdGlvbiB3aXRob3V0IGFyZ3VtZW50cyB3aWxsIHJlbW92ZSBhbnkgcHJldmlvdXNseSBzZXQgdXJsLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuc2V0UHJveHkgPSBmdW5jdGlvbih1cmwpIHtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgIHByb3h5T3B0aW9ucyA9ICB7IHByb3h5OiB1cmwgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBwcm94eU9wdGlvbnMgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0cyBCYXNpYyBBdXRoZW50aWNhdGlvbiBkZXRhaWxzIHRvIGJlIHVzZWQgZm9yIGNvbm5lY3Rpb25zIHdpdGggdGhlIHNlcnZpY2UuXHJcbiAgICAgKiBAZnVuY3Rpb24gYXV0aEJhc2ljXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXNlciAtIFVzZXJuYW1lLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHBhc3MgLSBQYXNzd29yZC5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmF1dGhCYXNpYyA9IGZ1bmN0aW9uKHVzZXIsIHBhc3MpIHtcclxuICAgICAgICBhdXRoID0gbmV3IHNvYXAuQmFzaWNBdXRoU2VjdXJpdHkodXNlciwgcGFzcyk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0cyBCZWFyZXIgVG9rZW4gQXV0aGVudGljYXRpb24gZGV0YWlscyB0byBiZSB1c2VkIGZvciBjb25uZWN0aW9ucyB3aXRoIHRoZSBzZXJ2aWNlLlxyXG4gICAgICogQGZ1bmN0aW9uIGF1dGhCZWFyZXJcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0b2tlbiAtIFRva2VuLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuYXV0aEJlYXJlciA9IGZ1bmN0aW9uKHRva2VuKSB7XHJcbiAgICAgICAgYXV0aCA9IG5ldyBzb2FwLkJlYXJlclNlY3VyaXR5KHRva2VuKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZXRzIE5UTE0gQXV0aGVudGljYXRpb24gZGV0YWlscyB0byBiZSB1c2VkIGZvciBjb25uZWN0aW9ucyB3aXRoIHRoZSBzZXJ2aWNlLlxyXG4gICAgICogQGZ1bmN0aW9uIGF1dGhOVExNXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXNlciAtIFVzZXJuYW1lLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHBhc3MgLSBQYXNzd29yZC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gLSBEb21haW4uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gd29ya3N0YXRpb24gLSBXb3Jrc3RhdGlvbi5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmF1dGhOVExNID0gZnVuY3Rpb24odXNlciwgcGFzcywgZG9tYWluLCB3b3Jrc3RhdGlvbikge1xyXG4gICAgICAgIGF1dGggPSBuZXcgc29hcC5OVExNU2VjdXJpdHkodXNlciwgcGFzcywgZG9tYWluLCB3b3Jrc3RhdGlvbik7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0cyBDbGllbnQgU1NMIEF1dGhlbnRpY2F0aW9uIGRldGFpbHMgdG8gYmUgdXNlZCBmb3IgY29ubmVjdGlvbnMgd2l0aCB0aGUgc2VydmljZS5cclxuICAgICAqIEBmdW5jdGlvbiBhdXRoQ2xpZW50U1NMXHJcbiAgICAgKiBAcGFyYW0ge0J1ZmZlcnxTdHJpbmd9IGtleSAtIFByaXZhdGUga2V5IHBhdGggb3IgYSBCdWZmZXIgY29udGFpbmluZyB0aGUga2V5LlxyXG4gICAgICogQHBhcmFtIHtCdWZmZXJ8U3RyaW5nfSBjZXJ0IC0gQ2VydGlmaWNhdGUgcGF0aCBvciBhIEJ1ZmZlciBjb250YWluaW5nIHRoZSBjZXJ0aWZpY2F0ZS5cclxuICAgICAqIEBwYXJhbSB7QnVmZmVyfFN0cmluZ3xBcnJheX0gY2EgLSBDQSBwYXRoIG9yIGEgQnVmZmVyLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmF1dGhDbGllbnRTU0wgPSBmdW5jdGlvbihrZXksIGNlcnQsIGNhLCBvcHRpb25zKSB7XHJcbiAgICAgICAgYXV0aCA9IG5ldyBzb2FwLkNsaWVudFNTTFNlY3VyaXR5KGtleSwgY2VydCwgY2EsIG9wdGlvbnMpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldHMgQ2xpZW50IFNTTCAoUEZYKSBBdXRoZW50aWNhdGlvbiBkZXRhaWxzIHRvIGJlIHVzZWQgZm9yIGNvbm5lY3Rpb25zIHdpdGggdGhlIHNlcnZpY2UuXHJcbiAgICAgKiBAZnVuY3Rpb24gYXV0aENsaWVudFNTTFBGWFxyXG4gICAgICogQHBhcmFtIHtCdWZmZXJ8U3RyaW5nfSBwZnggLSBQRlggcGF0aCBvciBhIEJ1ZmZlciBjb250YWluaW5nIHRoZSBQRlggYnVuZGxlLlxyXG4gICAgICogQHBhcmFtIHtCdWZmZXJ8U3RyaW5nPX0gcGFzc3BocmFzZSAtIFBhc3NwaHJhc2UgZm9yIHRoZSBQRlguXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuYXV0aENsaWVudFNTTFBGWCA9IGZ1bmN0aW9uKHBmeCwgcGFzc3BocmFzZSwgb3B0aW9ucykge1xyXG4gICAgICAgIGF1dGggPSBuZXcgc29hcC5DbGllbnRTU0xTZWN1cml0eVBGWChwZngsIHBhc3NwaHJhc2UsIG9wdGlvbnMpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEluaXRpYXRlcyBhIFNPQVAgcmVxdWVzdCBhbmQgcmV0dXJucyB0aGUgcmVzcG9uc2UuXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gd3NkbFVybCAtIFVSTCBwb2ludGluZyB0byB0aGUgV1NETCBYTUwuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kIC0gTWV0aG9kIG5hbWUgKGNhc2Ugc2Vuc2l0aXZlKS5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gYXJncyAtIE9iamVjdCBjb250YWluaW5nIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IHdzZGxIZWFkZXJzIC0gY3VzdG9tIEhUVFAgaGVhZGVycyB0byBiZSBzZW50IG9uIFdTREwgcmVxdWVzdHMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXNwb25zZSBvYmplY3QuXHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIC8vIGdldCBTT0FQIHNlcnZpY2UgZGVzY3JpcHRpb24sIHNvIHdlIGNhbiB1bmRlcnN0YW5kIHdoYXQgbWV0aG9kcyBpdCBwcm92aWRlcyxcclxuICAgICAqIC8vIHdoYXQgaW5wdXQgcGFyYW1ldGVycyBpdCBleHBlY3RzLCBhbmQgd2hhdCBpcyB0aGUgb3V0cHV0IHN0cnVjdHVyZS5cclxuICAgICAqIHZhciBzZXJ2aWNlVXJsID0gJ2h0dHA6Ly93d3cuZGF0YWFjY2Vzcy5jb20vd2Vic2VydmljZXNzZXJ2ZXIvbnVtYmVyY29udmVyc2lvbi53c28/V1NETCc7XHJcbiAgICAgKiB2YXIgc2VydmljZURlc2NyaXB0aW9uID0gc29hcC5kZXNjcmliZShzZXJ2aWNlVXJsKTtcclxuICAgICAqIGxvZy5pbmZvKHNlcnZpY2VEZXNjcmlwdGlvbik7XHJcbiAgICAgKiBcclxuICAgICAqIC8vIE51bWJlclRvV29yZHMgbWV0aG9kIGluIHRoaXMgc2VydmljZSBjb252ZXJ0cyBudW1iZXIgdG8gd29yZHMuXHJcbiAgICAgKiB2YXIgcmVzdWx0ID0gc29hcC5nZXQoc2VydmljZVVybCwgJ051bWJlclRvV29yZHMnLCB7ICd1YmlOdW0nOiAyMDE5IH0pO1xyXG4gICAgICogbG9nLmluZm8ocmVzdWx0Lk51bWJlclRvV29yZHNSZXN1bHQpO1xyXG4gICAgICovXHJcbiAgICBtb2R1bGUuZ2V0ID0gYXN5bmMgZnVuY3Rpb24od3NkbFVybCwgbWV0aG9kLCBhcmdzLCB3c2RsSGVhZGVycyA9IHt9KSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdENsaWVudCA9IG51bGw7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bGw7XHJcblxyXG4gICAgICAgIGF3YWl0ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzb2FwLmNyZWF0ZUNsaWVudCh3c2RsVXJsLCB7IHdzZGxfb3B0aW9uczogeyAuLi5vcHRpb25zLCAuLi5wcm94eU9wdGlvbnMgfSwgd3NkbF9oZWFkZXJzOiB3c2RsSGVhZGVyc30sIChlcnIsIGNsaWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGllbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXNnID0gICdFcnJvciBjcmVhdGluZyBjbGllbnQnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb2FwTXNnID0gZXJyLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RCcmVha0luZGV4ID0gc29hcE1zZy5pbmRleE9mKCdcXG4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdEJyZWFrSW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29hcE1zZyA9IGVyci5tZXNzYWdlLnN1YnN0cmluZygwLCBmaXJzdEJyZWFrSW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9ICc6ICcgKyBzb2FwTXNnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVyciAmJiAodHlwZW9mIGVyciA9PT0gJ3N0cmluZycgfHwgZXJyIGluc3RhbmNlb2YgU3RyaW5nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9ICc6ICcgKyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Q2xpZW50ID0gbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TT0FQX0VSUk9SLCBtc2cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdENsaWVudCA9IGNsaWVudDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjbGllbnRbbWV0aG9kXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRDbGllbnQgPSBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNPQVBfRVJST1IsICdObyBtZXRob2QgbmFtZWQgJyArIG1ldGhvZCArICcgd2FzIGZvdW5kLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudC5zZXRTZWN1cml0eShhdXRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh3c2RsSGVhZGVycykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBpbiB3c2RsSGVhZGVycykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LmFkZEh0dHBIZWFkZXIoaGVhZGVyLCB3c2RsSGVhZGVyc1toZWFkZXJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50W21ldGhvZF0oYXJncywgKGVyciwgcmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RSZXNwb25zZUhlYWRlcnMgPSBjbGllbnQubGFzdFJlc3BvbnNlSGVhZGVycztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPT0gbnVsbCAmJiBlcnIucm9vdCAmJiBlcnIucm9vdC5FbnZlbG9wZSAmJiBlcnIucm9vdC5FbnZlbG9wZS5Cb2R5ICYmIGVyci5yb290LkVudmVsb3BlLkJvZHkuRmF1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU09BUF9FUlJPUiwgSlNPTi5zdHJpbmdpZnkoZXJyLnJvb3QuRW52ZWxvcGUuQm9keS5GYXVsdC5mYXVsdHN0cmluZykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVyciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TT0FQX0VSUk9SLCByZXF1aXJlKCd1dGlsJykuaW5zcGVjdChlcnIsIHsgZGVwdGg6IDQgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9LCB7IC4uLm9wdGlvbnMsIC4uLnByb3h5T3B0aW9ucyB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KSgpO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0Q2xpZW50LnR5cGUgPT09IGVyckhlbHBlci5lcnJvckNvZGUuU09BUF9FUlJPUikge1xyXG4gICAgICAgICAgICB0aHJvdyByZXN1bHRDbGllbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT09IGVyckhlbHBlci5lcnJvckNvZGUuU09BUF9FUlJPUikge1xyXG4gICAgICAgICAgICB0aHJvdyByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgbGFzdCByZXNwb25zZSBoZWFkZXJzLlxyXG4gICAgICogQGZ1bmN0aW9uIGdldExhc3RSZXNwb25zZUhlYWRlcnNcclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gSW5jb21pbmdIdHRwSGVhZGVycyAoaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL1Bvd2VyQkktSmF2YVNjcmlwdC9pbnRlcmZhY2VzL19ub2RlX21vZHVsZXNfX3R5cGVzX25vZGVfaHR0cDJfZF8uX2h0dHAyXy5pbmNvbWluZ2h0dHBoZWFkZXJzLmh0bWwpLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuZ2V0TGFzdFJlc3BvbnNlSGVhZGVycyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBsYXN0UmVzcG9uc2VIZWFkZXJzO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgU09BUCBzZXJ2aWNlIGRlc2NyaXB0aW9uLlxyXG4gICAgICogQGZ1bmN0aW9uIGRlc2NyaWJlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gd3NkbFVybCAtIFVSTCBwb2ludGluZyB0byB0aGUgV1NETCBYTUwuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IHdzZGxIZWFkZXJzIC0gY3VzdG9tIEhUVFAgaGVhZGVycyB0byBiZSBzZW50IG9uIFdTREwgcmVxdWVzdHMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFNlcnZpY2UgZGVzY3JpcHRpb24uXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5kZXNjcmliZSA9IGFzeW5jIGZ1bmN0aW9uKHdzZGxVcmwsIHdzZGxIZWFkZXJzID0ge30pIHtcclxuICAgICAgICB2YXIgcmVzdWx0Q2xpZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgYXdhaXQgKCgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIHNvYXAuY3JlYXRlQ2xpZW50KHdzZGxVcmwseyB3c2RsX29wdGlvbnM6IHsgLi4ub3B0aW9ucywgLi4ucHJveHlPcHRpb25zIH0sIHdzZGxfaGVhZGVyczogd3NkbEhlYWRlcnN9LCAoZXJyLCBjbGllbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2xpZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1zZyA9ICAnRXJyb3IgY3JlYXRpbmcgY2xpZW50JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc29hcE1zZyA9IGVyci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0QnJlYWtJbmRleCA9IHNvYXBNc2cuaW5kZXhPZignXFxuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RCcmVha0luZGV4ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvYXBNc2cgPSBlcnIubWVzc2FnZS5zdWJzdHJpbmcoMCwgZmlyc3RCcmVha0luZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSAnOiAnICsgc29hcE1zZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIgJiYgKHR5cGVvZiBlcnIgPT09ICdzdHJpbmcnIHx8IGVyciBpbnN0YW5jZW9mIFN0cmluZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSAnOiAnICsgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdENsaWVudCA9IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU09BUF9FUlJPUiwgbXNnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQuc2V0U2VjdXJpdHkoYXV0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRDbGllbnQgPSBjbGllbnQuZGVzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pKCk7XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHRDbGllbnQudHlwZSA9PT0gZXJySGVscGVyLmVycm9yQ29kZS5TT0FQX0VSUk9SKSB7XHJcbiAgICAgICAgICAgIHRocm93IHJlc3VsdENsaWVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHRDbGllbnQ7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBtb2R1bGU7XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBY0EsSUFBQUEsWUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQTRDLFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBZDVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBR0EsSUFBSUcsU0FBUyxHQUFHSixPQUFPLENBQUMsa0JBQWtCLENBQUM7QUFFM0NLLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHLFlBQVc7RUFDeEIsSUFBSUMsSUFBSSxHQUFHUCxPQUFPLENBQUMsTUFBTSxDQUFDO0VBQzFCLElBQUlRLElBQUksR0FBRyxJQUFJO0VBQ2YsSUFBSUMsWUFBWSxHQUFHLENBQUMs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
|