appium-espresso-driver 2.11.0 → 2.13.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/README.md +9 -4
- package/build/index.js +1 -4
- package/build/lib/commands/execute.js +1 -10
- package/build/lib/commands/execute.js.map +1 -1
- package/build/lib/commands/general.js +3 -43
- package/build/lib/commands/general.js.map +1 -1
- package/build/lib/commands/idling-resources.js +2 -5
- package/build/lib/commands/idling-resources.js.map +1 -1
- package/build/lib/commands/index.js +3 -9
- package/build/lib/commands/index.js.map +1 -1
- package/build/lib/commands/services.js +2 -5
- package/build/lib/commands/services.js.map +1 -1
- package/build/lib/desired-caps.js +1 -4
- package/build/lib/desired-caps.js.map +1 -1
- package/build/lib/driver.js +21 -94
- package/build/lib/driver.js.map +1 -1
- package/build/lib/espresso-runner.js +1 -64
- package/build/lib/espresso-runner.js.map +1 -1
- package/build/lib/logger.js +1 -5
- package/build/lib/logger.js.map +1 -1
- package/build/lib/server-builder.js +1 -43
- package/build/lib/server-builder.js.map +1 -1
- package/build/lib/utils.js +1 -38
- package/build/lib/utils.js.map +1 -1
- package/espresso-server/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk +0 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Clear.kt +2 -3
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementEquals.kt +2 -2
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementScreenshot.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementValue.kt +3 -3
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindActive.kt +2 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindElement.kt +2 -2
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindElements.kt +3 -4
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetAttribute.kt +2 -2
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetDisplayed.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetEnabled.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetLocation.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetLocationInView.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetName.kt +2 -2
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetRect.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSelected.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSize.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Keys.kt +2 -3
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileBackdoor.kt +4 -5
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileClickAction.kt +3 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileSwipe.kt +2 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileViewFlash.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PointerEventHandler.kt +1 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/WebAtoms.kt +2 -1
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/EspressoViewsCache.kt +9 -3
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ViewFinder.kt +149 -135
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/EspressoW3CActionAdapter.kt +2 -3
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Element.kt +22 -17
- package/npm-shrinkwrap.json +212 -272
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -79,7 +79,7 @@ appium:appWaitDuration | Maximum amount of milliseconds to wait until the applic
|
|
|
79
79
|
appium:intentOptions | The mapping of custom options for the intent that is going to be passed to the main app activity. Check [Intent Options](#intent-options) for more details.
|
|
80
80
|
appium:activityOptions | The mapping of custom options for the main app activity that is going to be started. Check [Activity Options](#activity-options) for more details.
|
|
81
81
|
appium:androidInstallTimeout | Maximum amount of milliseconds to wait until the application under test is installed. `90000` ms by default
|
|
82
|
-
appium:autoGrantPermissions | Whether to grant all the requested application permissions automatically when a test starts(`true`). `false` by default
|
|
82
|
+
appium:autoGrantPermissions | Whether to grant all the requested application permissions automatically when a test starts(`true`). The targetSdkVersion in the application manifest must be greater or equal to 23 and the Android version on the device under test must be greater or equal to Android 6 (API level 23) to grant permissions. Applications whose targetSdkVersion is lower than or equal to 22 must be reisntalled to grant permissions, for example, by setting the `appium:fullReset` capability as `true` for Android 6+ devices. `false` by default
|
|
83
83
|
appium:otherApps | Allows to set one or more comma-separated paths to Android packages that are going to be installed along with the main application under test. This might be useful if the tested app has dependencies
|
|
84
84
|
appium:uninstallOtherPackages | Allows to set one or more comma-separated package identifiers to be uninstalled from the device before a test starts
|
|
85
85
|
appium:allowTestPackages | If set to `true` then it would be possible to use packages built with the test flag for the automated testing (literally adds `-t` flag to the `adb install` command). `false` by default
|
|
@@ -856,14 +856,19 @@ True is the app has been found on the device and successfully removed. Otherwise
|
|
|
856
856
|
|
|
857
857
|
### mobile: terminateApp
|
|
858
858
|
|
|
859
|
-
Terminates the app
|
|
859
|
+
Terminates the app and waits until the app is terminated up to the given timeout
|
|
860
|
+
by checking the app state to ensure if the app process is actually stopped.
|
|
861
|
+
|
|
862
|
+
The app state check can be skipped if the given timeout is lower or equal to zero since Espresso driver 2.13.0.
|
|
863
|
+
The skip helps when you want to terminate the app process but do not want to check the process existence
|
|
864
|
+
because the app under test may, for example, restart it automatically.
|
|
860
865
|
|
|
861
866
|
#### Arguments
|
|
862
867
|
|
|
863
868
|
Name | Type | Required | Description | Example
|
|
864
869
|
--- | --- | --- | --- | ---
|
|
865
870
|
appId | string | yes | The identifier of the application package to be terminated | `my.app.id`
|
|
866
|
-
timeout | number | no | The count of milliseconds to wait until the app is terminated. 500ms by default. | 1500
|
|
871
|
+
timeout | number | no | The count of milliseconds to wait until the app is terminated. 500ms by default. | 1500, 0
|
|
867
872
|
|
|
868
873
|
#### Returned Result
|
|
869
874
|
|
|
@@ -881,7 +886,7 @@ appPath | string | yes | The local .apk(s) path on the server filesystem or a re
|
|
|
881
886
|
timeout | number | no | The count of milliseconds to wait until the app is installed.. 6000ms by default. | 120000
|
|
882
887
|
allowTestPackages | boolean | no | Set to true in order to allow test packages installation. false by default | true
|
|
883
888
|
useSdcard | boolean | no | Set to true to install the app on sdcard instead of the device memory. false by default | true
|
|
884
|
-
grantPermissions | boolean | no | Set to true in order to grant all the permissions requested in the application's manifest automatically after the installation is completed under Android 6+. false by default | true
|
|
889
|
+
grantPermissions | boolean | no | Set to true in order to grant all the permissions requested in the application's manifest automatically after the installation is completed under Android 6+. The targetSdkVersion in the application manifest must be greater or equal to 23 and the Android version on the device under test must be greater or equal to Android 6 (API level 23) to grant permissions. Applications whose targetSdkVersion is lower than or equal to 22 must be reisntalled to grant permissions for Android 6+ devices. false by default | true
|
|
885
890
|
replace | boolean | no | Set it to false if you don't want the application to be upgraded/reinstalled if it is already present on the device, but throw an error instead. true by default | false
|
|
886
891
|
|
|
887
892
|
### mobile: clearApp
|
package/build/index.js
CHANGED
|
@@ -10,11 +10,8 @@ Object.defineProperty(exports, "EspressoDriver", {
|
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
12
|
exports.default = void 0;
|
|
13
|
-
|
|
14
13
|
require("source-map-support/register");
|
|
15
|
-
|
|
16
14
|
var _driver = require("./lib/driver");
|
|
17
|
-
|
|
18
15
|
var _default = _driver.EspressoDriver;
|
|
19
16
|
exports.default = _default;
|
|
20
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFc3ByZXNzb0RyaXZlciJdLCJzb3VyY2VzIjpbIi4uL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5pbXBvcnQgeyBFc3ByZXNzb0RyaXZlciB9IGZyb20gJy4vbGliL2RyaXZlcic7XG5cbmV4cG9ydCB7IEVzcHJlc3NvRHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBFc3ByZXNzb0RyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUNBO0FBQThDLGVBRy9CQSxzQkFBYztBQUFBIn0=
|
|
@@ -1,20 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
|
-
|
|
10
8
|
require("source-map-support/register");
|
|
11
|
-
|
|
12
9
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
|
-
|
|
14
10
|
var _driver = require("appium/driver");
|
|
15
|
-
|
|
16
11
|
const extensions = {};
|
|
17
|
-
|
|
18
12
|
extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}) {
|
|
19
13
|
const mobileCommandsMapping = {
|
|
20
14
|
shell: 'mobileShell',
|
|
@@ -69,14 +63,11 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
|
|
|
69
63
|
isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',
|
|
70
64
|
stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording'
|
|
71
65
|
};
|
|
72
|
-
|
|
73
66
|
if (!_lodash.default.has(mobileCommandsMapping, mobileCommand)) {
|
|
74
67
|
throw new _driver.errors.UnknownCommandError(`Unknown mobile command "${mobileCommand}". ` + `Only ${_lodash.default.keys(mobileCommandsMapping)} commands are supported.`);
|
|
75
68
|
}
|
|
76
|
-
|
|
77
69
|
return await this[mobileCommandsMapping[mobileCommand]](opts);
|
|
78
70
|
};
|
|
79
|
-
|
|
80
71
|
var _default = extensions;
|
|
81
72
|
exports.default = _default;
|
|
82
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiZXhlY3V0ZU1vYmlsZSIsIm1vYmlsZUNvbW1hbmQiLCJvcHRzIiwibW9iaWxlQ29tbWFuZHNNYXBwaW5nIiwic2hlbGwiLCJleGVjRW11Q29uc29sZUNvbW1hbmQiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwiY2hhbmdlUGVybWlzc2lvbnMiLCJnZXRQZXJtaXNzaW9ucyIsInN0YXJ0U2NyZWVuU3RyZWFtaW5nIiwic3RvcFNjcmVlblN0cmVhbWluZyIsInN3aXBlIiwic2Nyb2xsVG9QYWdlIiwibmF2aWdhdGVUbyIsImNsaWNrQWN0aW9uIiwiZGV2aWNlSW5mbyIsImlzVG9hc3RWaXNpYmxlIiwib3BlbkRyYXdlciIsImNsb3NlRHJhd2VyIiwic2V0RGF0ZSIsInNldFRpbWUiLCJnZXREZXZpY2VUaW1lIiwiYmFja2Rvb3IiLCJmbGFzaEVsZW1lbnQiLCJ1aWF1dG9tYXRvciIsInVpYXV0b21hdG9yUGFnZVNvdXJjZSIsIndlYkF0b21zIiwiZ2V0Q29udGV4dHMiLCJkaXNtaXNzQXV0b2ZpbGwiLCJnZXROb3RpZmljYXRpb25zIiwibGlzdFNtcyIsInNlbnNvclNldCIsInB1c2hGaWxlIiwicHVsbEZpbGUiLCJwdWxsRm9sZGVyIiwiZGVsZXRlRmlsZSIsImlzQXBwSW5zdGFsbGVkIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwicmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiaW5zdGFsbEFwcCIsImNsZWFyQXBwIiwic3RhcnRBY3Rpdml0eSIsInN0YXJ0U2VydmljZSIsInN0b3BTZXJ2aWNlIiwiYnJvYWRjYXN0IiwicmVnaXN0ZXJJZGxpbmdSZXNvdXJjZXMiLCJ1bnJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzIiwibGlzdElkbGluZ1Jlc291cmNlcyIsInVubG9jayIsInJlZnJlc2hHcHNDYWNoZSIsInN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiaXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nIiwic3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsIl8iLCJoYXMiLCJlcnJvcnMiLCJVbmtub3duQ29tbWFuZEVycm9yIiwia2V5cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxuY29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlTW9iaWxlIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgbW9iaWxlQ29tbWFuZHNNYXBwaW5nID0ge1xuICAgIHNoZWxsOiAnbW9iaWxlU2hlbGwnLFxuXG4gICAgZXhlY0VtdUNvbnNvbGVDb21tYW5kOiAnbW9iaWxlRXhlY0VtdUNvbnNvbGVDb21tYW5kJyxcblxuICAgIHBlcmZvcm1FZGl0b3JBY3Rpb246ICdtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uJyxcblxuICAgIGNoYW5nZVBlcm1pc3Npb25zOiAnbW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMnLFxuICAgIGdldFBlcm1pc3Npb25zOiAnbW9iaWxlR2V0UGVybWlzc2lvbnMnLFxuXG4gICAgc3RhcnRTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdGFydFNjcmVlblN0cmVhbWluZycsXG4gICAgc3RvcFNjcmVlblN0cmVhbWluZzogJ21vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcnLFxuXG4gICAgc3dpcGU6ICdtb2JpbGVTd2lwZScsXG4gICAgc2Nyb2xsVG9QYWdlOiAnbW9iaWxlU2Nyb2xsVG9QYWdlJyxcbiAgICBuYXZpZ2F0ZVRvOiAnbW9iaWxlTmF2aWdhdGVUbycsXG4gICAgY2xpY2tBY3Rpb246ICdtb2JpbGVDbGlja0FjdGlvbicsXG5cbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG5cbiAgICBpc1RvYXN0VmlzaWJsZTogJ21vYmlsZUlzVG9hc3RWaXNpYmxlJyxcblxuICAgIG9wZW5EcmF3ZXI6ICdtb2JpbGVPcGVuRHJhd2VyJyxcbiAgICBjbG9zZURyYXdlcjogJ21vYmlsZUNsb3NlRHJhd2VyJyxcblxuICAgIHNldERhdGU6ICdtb2JpbGVTZXREYXRlJyxcbiAgICBzZXRUaW1lOiAnbW9iaWxlU2V0VGltZScsXG5cbiAgICBnZXREZXZpY2VUaW1lOiAnbW9iaWxlR2V0RGV2aWNlVGltZScsXG5cbiAgICBiYWNrZG9vcjogJ21vYmlsZUJhY2tkb29yJyxcblxuICAgIGZsYXNoRWxlbWVudDogJ21vYmlsZUZsYXNoRWxlbWVudCcsXG5cbiAgICB1aWF1dG9tYXRvcjogJ21vYmlsZVVpYXV0b21hdG9yJyxcbiAgICB1aWF1dG9tYXRvclBhZ2VTb3VyY2U6ICdtb2JpbGVVaWF1dG9tYXRvclBhZ2VTb3VyY2UnLFxuXG4gICAgd2ViQXRvbXM6ICdtb2JpbGVXZWJBdG9tcycsXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBkaXNtaXNzQXV0b2ZpbGw6ICdtb2JpbGVEaXNtaXNzQXV0b2ZpbGwnLFxuXG4gICAgZ2V0Tm90aWZpY2F0aW9uczogJ21vYmlsZUdldE5vdGlmaWNhdGlvbnMnLFxuXG4gICAgbGlzdFNtczogJ21vYmlsZUxpc3RTbXMnLFxuXG4gICAgc2Vuc29yU2V0OiAnc2Vuc29yU2V0JyxcblxuICAgIHB1c2hGaWxlOiAnbW9iaWxlUHVzaEZpbGUnLFxuICAgIHB1bGxGaWxlOiAnbW9iaWxlUHVsbEZpbGUnLFxuICAgIHB1bGxGb2xkZXI6ICdtb2JpbGVQdWxsRm9sZGVyJyxcbiAgICBkZWxldGVGaWxlOiAnbW9iaWxlRGVsZXRlRmlsZScsXG5cbiAgICBpc0FwcEluc3RhbGxlZDogJ21vYmlsZUlzQXBwSW5zdGFsbGVkJyxcbiAgICBxdWVyeUFwcFN0YXRlOiAnbW9iaWxlUXVlcnlBcHBTdGF0ZScsXG4gICAgYWN0aXZhdGVBcHA6ICdtb2JpbGVBY3RpdmF0ZUFwcCcsXG4gICAgcmVtb3ZlQXBwOiAnbW9iaWxlUmVtb3ZlQXBwJyxcbiAgICB0ZXJtaW5hdGVBcHA6ICdtb2JpbGVUZXJtaW5hdGVBcHAnLFxuICAgIGluc3RhbGxBcHA6ICdtb2JpbGVJbnN0YWxsQXBwJyxcbiAgICBjbGVhckFwcDogJ21vYmlsZUNsZWFyQXBwJyxcblxuICAgIHN0YXJ0QWN0aXZpdHk6ICdtb2JpbGVTdGFydEFjdGl2aXR5JyxcbiAgICBzdGFydFNlcnZpY2U6ICdtb2JpbGVTdGFydFNlcnZpY2UnLFxuICAgIHN0b3BTZXJ2aWNlOiAnbW9iaWxlU3RvcFNlcnZpY2UnLFxuICAgIGJyb2FkY2FzdDogJ21vYmlsZUJyb2FkY2FzdCcsXG5cbiAgICByZWdpc3RlcklkbGluZ1Jlc291cmNlczogJ21vYmlsZVJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzJyxcbiAgICB1bnJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzOiAnbW9iaWxlVW5yZWdpc3RlcklkbGluZ1Jlc291cmNlcycsXG4gICAgbGlzdElkbGluZ1Jlc291cmNlczogJ21vYmlsZUxpc3RJZGxpbmdSZXNvdXJjZXMnLFxuXG4gICAgdW5sb2NrOiAnbW9iaWxlVW5sb2NrJyxcblxuICAgIHJlZnJlc2hHcHNDYWNoZTogJ21vYmlsZVJlZnJlc2hHcHNDYWNoZScsXG5cbiAgICBzdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcbiAgICBpc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmc6ICdtb2JpbGVJc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmcnLFxuICAgIHN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmc6ICdtb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKG1vYmlsZUNvbW1hbmRzTWFwcGluZywgbW9iaWxlQ29tbWFuZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoYFVua25vd24gbW9iaWxlIGNvbW1hbmQgXCIke21vYmlsZUNvbW1hbmR9XCIuIGAgK1xuICAgICAgYE9ubHkgJHtfLmtleXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nKX0gY29tbWFuZHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpc1ttb2JpbGVDb21tYW5kc01hcHBpbmdbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBRUEsTUFBTUEsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUVyQkEsVUFBVSxDQUFDQyxhQUFhLEdBQUcsZUFBZUEsYUFBYSxDQUFFQyxhQUFhLEVBQUVDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNqRixNQUFNQyxxQkFBcUIsR0FBRztJQUM1QkMsS0FBSyxFQUFFLGFBQWE7SUFFcEJDLHFCQUFxQixFQUFFLDZCQUE2QjtJQUVwREMsbUJBQW1CLEVBQUUsMkJBQTJCO0lBRWhEQyxpQkFBaUIsRUFBRSx5QkFBeUI7SUFDNUNDLGNBQWMsRUFBRSxzQkFBc0I7SUFFdENDLG9CQUFvQixFQUFFLDRCQUE0QjtJQUNsREMsbUJBQW1CLEVBQUUsMkJBQTJCO0lBRWhEQyxLQUFLLEVBQUUsYUFBYTtJQUNwQkMsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQ0MsVUFBVSxFQUFFLGtCQUFrQjtJQUM5QkMsV0FBVyxFQUFFLG1CQUFtQjtJQUVoQ0MsVUFBVSxFQUFFLHFCQUFxQjtJQUVqQ0MsY0FBYyxFQUFFLHNCQUFzQjtJQUV0Q0MsVUFBVSxFQUFFLGtCQUFrQjtJQUM5QkMsV0FBVyxFQUFFLG1CQUFtQjtJQUVoQ0MsT0FBTyxFQUFFLGVBQWU7SUFDeEJDLE9BQU8sRUFBRSxlQUFlO0lBRXhCQyxhQUFhLEVBQUUscUJBQXFCO0lBRXBDQyxRQUFRLEVBQUUsZ0JBQWdCO0lBRTFCQyxZQUFZLEVBQUUsb0JBQW9CO0lBRWxDQyxXQUFXLEVBQUUsbUJBQW1CO0lBQ2hDQyxxQkFBcUIsRUFBRSw2QkFBNkI7SUFFcERDLFFBQVEsRUFBRSxnQkFBZ0I7SUFDMUJDLFdBQVcsRUFBRSxtQkFBbUI7SUFFaENDLGVBQWUsRUFBRSx1QkFBdUI7SUFFeENDLGdCQUFnQixFQUFFLHdCQUF3QjtJQUUxQ0MsT0FBTyxFQUFFLGVBQWU7SUFFeEJDLFNBQVMsRUFBRSxXQUFXO0lBRXRCQyxRQUFRLEVBQUUsZ0JBQWdCO0lBQzFCQyxRQUFRLEVBQUUsZ0JBQWdCO0lBQzFCQyxVQUFVLEVBQUUsa0JBQWtCO0lBQzlCQyxVQUFVLEVBQUUsa0JBQWtCO0lBRTlCQyxjQUFjLEVBQUUsc0JBQXNCO0lBQ3RDQyxhQUFhLEVBQUUscUJBQXFCO0lBQ3BDQyxXQUFXLEVBQUUsbUJBQW1CO0lBQ2hDQyxTQUFTLEVBQUUsaUJBQWlCO0lBQzVCQyxZQUFZLEVBQUUsb0JBQW9CO0lBQ2xDQyxVQUFVLEVBQUUsa0JBQWtCO0lBQzlCQyxRQUFRLEVBQUUsZ0JBQWdCO0lBRTFCQyxhQUFhLEVBQUUscUJBQXFCO0lBQ3BDQyxZQUFZLEVBQUUsb0JBQW9CO0lBQ2xDQyxXQUFXLEVBQUUsbUJBQW1CO0lBQ2hDQyxTQUFTLEVBQUUsaUJBQWlCO0lBRTVCQyx1QkFBdUIsRUFBRSwrQkFBK0I7SUFDeERDLHlCQUF5QixFQUFFLGlDQUFpQztJQUM1REMsbUJBQW1CLEVBQUUsMkJBQTJCO0lBRWhEQyxNQUFNLEVBQUUsY0FBYztJQUV0QkMsZUFBZSxFQUFFLHVCQUF1QjtJQUV4Q0MsNkJBQTZCLEVBQUUscUNBQXFDO0lBQ3BFQyxpQ0FBaUMsRUFBRSx5Q0FBeUM7SUFDNUVDLDRCQUE0QixFQUFFO0VBQ2hDLENBQUM7RUFFRCxJQUFJLENBQUNDLGVBQUMsQ0FBQ0MsR0FBRyxDQUFDckQscUJBQXFCLEVBQUVGLGFBQWEsQ0FBQyxFQUFFO0lBQ2hELE1BQU0sSUFBSXdELGNBQU0sQ0FBQ0MsbUJBQW1CLENBQUUsMkJBQTBCekQsYUFBYyxLQUFJLEdBQy9FLFFBQU9zRCxlQUFDLENBQUNJLElBQUksQ0FBQ3hELHFCQUFxQixDQUFFLDBCQUF5QixDQUFDO0VBQ3BFO0VBQ0EsT0FBTyxNQUFNLElBQUksQ0FBQ0EscUJBQXFCLENBQUNGLGFBQWEsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQztBQUMvRCxDQUFDO0FBQUMsZUFFYUgsVUFBVTtBQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","names":["extensions","executeMobile","mobileCommand","opts","mobileCommandsMapping","shell","execEmuConsoleCommand","performEditorAction","changePermissions","getPermissions","startScreenStreaming","stopScreenStreaming","swipe","scrollToPage","navigateTo","clickAction","deviceInfo","isToastVisible","openDrawer","closeDrawer","setDate","setTime","getDeviceTime","backdoor","flashElement","uiautomator","uiautomatorPageSource","webAtoms","getContexts","dismissAutofill","getNotifications","listSms","sensorSet","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","startActivity","startService","stopService","broadcast","registerIdlingResources","unregisterIdlingResources","listIdlingResources","unlock","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","_","has","errors","UnknownCommandError","keys"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\n\nconst extensions = {};\n\nextensions.executeMobile = async function executeMobile (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n swipe: 'mobileSwipe',\n scrollToPage: 'mobileScrollToPage',\n navigateTo: 'mobileNavigateTo',\n clickAction: 'mobileClickAction',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n isToastVisible: 'mobileIsToastVisible',\n\n openDrawer: 'mobileOpenDrawer',\n closeDrawer: 'mobileCloseDrawer',\n\n setDate: 'mobileSetDate',\n setTime: 'mobileSetTime',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n backdoor: 'mobileBackdoor',\n\n flashElement: 'mobileFlashElement',\n\n uiautomator: 'mobileUiautomator',\n uiautomatorPageSource: 'mobileUiautomatorPageSource',\n\n webAtoms: 'mobileWebAtoms',\n getContexts: 'mobileGetContexts',\n\n dismissAutofill: 'mobileDismissAutofill',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n sensorSet: 'sensorSet',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n registerIdlingResources: 'mobileRegisterIdlingResources',\n unregisterIdlingResources: 'mobileUnregisterIdlingResources',\n listIdlingResources: 'mobileListIdlingResources',\n\n unlock: 'mobileUnlock',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\nexport default extensions;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"execute.js","names":["extensions","executeMobile","mobileCommand","opts","mobileCommandsMapping","shell","execEmuConsoleCommand","performEditorAction","changePermissions","getPermissions","startScreenStreaming","stopScreenStreaming","swipe","scrollToPage","navigateTo","clickAction","deviceInfo","isToastVisible","openDrawer","closeDrawer","setDate","setTime","getDeviceTime","backdoor","flashElement","uiautomator","uiautomatorPageSource","webAtoms","getContexts","dismissAutofill","getNotifications","listSms","sensorSet","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","startActivity","startService","stopService","broadcast","registerIdlingResources","unregisterIdlingResources","listIdlingResources","unlock","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","_","has","errors","UnknownCommandError","keys"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\n\nconst extensions = {};\n\nextensions.executeMobile = async function executeMobile (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n swipe: 'mobileSwipe',\n scrollToPage: 'mobileScrollToPage',\n navigateTo: 'mobileNavigateTo',\n clickAction: 'mobileClickAction',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n isToastVisible: 'mobileIsToastVisible',\n\n openDrawer: 'mobileOpenDrawer',\n closeDrawer: 'mobileCloseDrawer',\n\n setDate: 'mobileSetDate',\n setTime: 'mobileSetTime',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n backdoor: 'mobileBackdoor',\n\n flashElement: 'mobileFlashElement',\n\n uiautomator: 'mobileUiautomator',\n uiautomatorPageSource: 'mobileUiautomatorPageSource',\n\n webAtoms: 'mobileWebAtoms',\n getContexts: 'mobileGetContexts',\n\n dismissAutofill: 'mobileDismissAutofill',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n sensorSet: 'sensorSet',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n registerIdlingResources: 'mobileRegisterIdlingResources',\n unregisterIdlingResources: 'mobileUnregisterIdlingResources',\n listIdlingResources: 'mobileListIdlingResources',\n\n unlock: 'mobileUnlock',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\nexport default extensions;\n"],"mappings":";;;;;;;;AAAA;AACA;AAEA,MAAMA,UAAU,GAAG,CAAC,CAAC;AAErBA,UAAU,CAACC,aAAa,GAAG,eAAeA,aAAa,CAAEC,aAAa,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EACjF,MAAMC,qBAAqB,GAAG;IAC5BC,KAAK,EAAE,aAAa;IAEpBC,qBAAqB,EAAE,6BAA6B;IAEpDC,mBAAmB,EAAE,2BAA2B;IAEhDC,iBAAiB,EAAE,yBAAyB;IAC5CC,cAAc,EAAE,sBAAsB;IAEtCC,oBAAoB,EAAE,4BAA4B;IAClDC,mBAAmB,EAAE,2BAA2B;IAEhDC,KAAK,EAAE,aAAa;IACpBC,YAAY,EAAE,oBAAoB;IAClCC,UAAU,EAAE,kBAAkB;IAC9BC,WAAW,EAAE,mBAAmB;IAEhCC,UAAU,EAAE,qBAAqB;IAEjCC,cAAc,EAAE,sBAAsB;IAEtCC,UAAU,EAAE,kBAAkB;IAC9BC,WAAW,EAAE,mBAAmB;IAEhCC,OAAO,EAAE,eAAe;IACxBC,OAAO,EAAE,eAAe;IAExBC,aAAa,EAAE,qBAAqB;IAEpCC,QAAQ,EAAE,gBAAgB;IAE1BC,YAAY,EAAE,oBAAoB;IAElCC,WAAW,EAAE,mBAAmB;IAChCC,qBAAqB,EAAE,6BAA6B;IAEpDC,QAAQ,EAAE,gBAAgB;IAC1BC,WAAW,EAAE,mBAAmB;IAEhCC,eAAe,EAAE,uBAAuB;IAExCC,gBAAgB,EAAE,wBAAwB;IAE1CC,OAAO,EAAE,eAAe;IAExBC,SAAS,EAAE,WAAW;IAEtBC,QAAQ,EAAE,gBAAgB;IAC1BC,QAAQ,EAAE,gBAAgB;IAC1BC,UAAU,EAAE,kBAAkB;IAC9BC,UAAU,EAAE,kBAAkB;IAE9BC,cAAc,EAAE,sBAAsB;IACtCC,aAAa,EAAE,qBAAqB;IACpCC,WAAW,EAAE,mBAAmB;IAChCC,SAAS,EAAE,iBAAiB;IAC5BC,YAAY,EAAE,oBAAoB;IAClCC,UAAU,EAAE,kBAAkB;IAC9BC,QAAQ,EAAE,gBAAgB;IAE1BC,aAAa,EAAE,qBAAqB;IACpCC,YAAY,EAAE,oBAAoB;IAClCC,WAAW,EAAE,mBAAmB;IAChCC,SAAS,EAAE,iBAAiB;IAE5BC,uBAAuB,EAAE,+BAA+B;IACxDC,yBAAyB,EAAE,iCAAiC;IAC5DC,mBAAmB,EAAE,2BAA2B;IAEhDC,MAAM,EAAE,cAAc;IAEtBC,eAAe,EAAE,uBAAuB;IAExCC,6BAA6B,EAAE,qCAAqC;IACpEC,iCAAiC,EAAE,yCAAyC;IAC5EC,4BAA4B,EAAE;EAChC,CAAC;EAED,IAAI,CAACC,eAAC,CAACC,GAAG,CAACrD,qBAAqB,EAAEF,aAAa,CAAC,EAAE;IAChD,MAAM,IAAIwD,cAAM,CAACC,mBAAmB,CAAE,2BAA0BzD,aAAc,KAAI,GAC/E,QAAOsD,eAAC,CAACI,IAAI,CAACxD,qBAAqB,CAAE,0BAAyB,CAAC;EACpE;EACA,OAAO,MAAM,IAAI,CAACA,qBAAqB,CAACF,aAAa,CAAC,CAAC,CAACC,IAAI,CAAC;AAC/D,CAAC;AAAC,eAEaH,UAAU;AAAA"}
|
|
@@ -1,43 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.helpers = exports.default = exports.commands = void 0;
|
|
9
|
-
|
|
10
8
|
require("source-map-support/register");
|
|
11
|
-
|
|
12
9
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
|
-
|
|
14
10
|
var _support = require("appium/support");
|
|
15
|
-
|
|
16
11
|
var _validate = _interopRequireDefault(require("validate.js"));
|
|
17
|
-
|
|
18
12
|
var _driver = require("appium/driver");
|
|
19
|
-
|
|
20
13
|
var _utils = require("../utils");
|
|
21
|
-
|
|
22
14
|
const commands = {},
|
|
23
|
-
|
|
24
|
-
|
|
15
|
+
helpers = {},
|
|
16
|
+
extensions = {};
|
|
25
17
|
exports.helpers = helpers;
|
|
26
18
|
exports.commands = commands;
|
|
27
|
-
|
|
28
19
|
function assertRequiredOptions(options, requiredOptionNames) {
|
|
29
20
|
if (!_lodash.default.isArray(requiredOptionNames)) {
|
|
30
21
|
requiredOptionNames = [requiredOptionNames];
|
|
31
22
|
}
|
|
32
|
-
|
|
33
23
|
const presentOptionNames = _lodash.default.keys(options);
|
|
34
|
-
|
|
35
24
|
const missingOptionNames = _lodash.default.difference(requiredOptionNames, presentOptionNames);
|
|
36
|
-
|
|
37
25
|
if (_lodash.default.isEmpty(missingOptionNames)) {
|
|
38
26
|
return options;
|
|
39
27
|
}
|
|
40
|
-
|
|
41
28
|
throw new Error(`The following options are required: ${JSON.stringify(missingOptionNames)}. ` + `You have only provided: ${JSON.stringify(presentOptionNames)}`);
|
|
42
29
|
}
|
|
43
30
|
|
|
@@ -52,11 +39,9 @@ commands.closeApp = async function closeApp() {
|
|
|
52
39
|
commands.reset = async function reset() {
|
|
53
40
|
throw new _driver.errors.UnsupportedOperationError('Please quit the session and create a new one ' + 'in order to close and launch the application under test');
|
|
54
41
|
};
|
|
55
|
-
|
|
56
42
|
commands.getClipboard = async function getClipboard() {
|
|
57
43
|
return (await this.adb.getApiLevel()) < 29 ? await this.espresso.jwproxy.command('/appium/device/get_clipboard', 'POST', {}) : await this.adb.getClipboard();
|
|
58
44
|
};
|
|
59
|
-
|
|
60
45
|
commands.mobilePerformEditorAction = async function mobilePerformEditorAction(opts = {}) {
|
|
61
46
|
const {
|
|
62
47
|
action
|
|
@@ -65,7 +50,6 @@ commands.mobilePerformEditorAction = async function mobilePerformEditorAction(op
|
|
|
65
50
|
action
|
|
66
51
|
});
|
|
67
52
|
};
|
|
68
|
-
|
|
69
53
|
commands.mobileSwipe = async function mobileSwipe(opts = {}) {
|
|
70
54
|
const {
|
|
71
55
|
direction,
|
|
@@ -84,27 +68,22 @@ commands.mobileSwipe = async function mobileSwipe(opts = {}) {
|
|
|
84
68
|
precisionDescriber
|
|
85
69
|
});
|
|
86
70
|
};
|
|
87
|
-
|
|
88
71
|
commands.mobileGetDeviceInfo = async function mobileGetDeviceInfo() {
|
|
89
72
|
return await this.espresso.jwproxy.command('/appium/device/info', 'GET');
|
|
90
73
|
};
|
|
91
|
-
|
|
92
74
|
commands.mobileIsToastVisible = async function mobileIsToastVisible(opts = {}) {
|
|
93
75
|
const {
|
|
94
76
|
text,
|
|
95
77
|
isRegexp
|
|
96
78
|
} = opts;
|
|
97
|
-
|
|
98
79
|
if (!_support.util.hasValue(text)) {
|
|
99
80
|
throw new _driver.errors.InvalidArgumentError(`'text' argument is mandatory`);
|
|
100
81
|
}
|
|
101
|
-
|
|
102
82
|
return await this.espresso.jwproxy.command('/appium/execute_mobile/is_toast_displayed', 'POST', {
|
|
103
83
|
text,
|
|
104
84
|
isRegexp
|
|
105
85
|
});
|
|
106
86
|
};
|
|
107
|
-
|
|
108
87
|
commands.mobileOpenDrawer = async function mobileOpenDrawer(opts = {}) {
|
|
109
88
|
const {
|
|
110
89
|
element,
|
|
@@ -114,7 +93,6 @@ commands.mobileOpenDrawer = async function mobileOpenDrawer(opts = {}) {
|
|
|
114
93
|
gravity
|
|
115
94
|
});
|
|
116
95
|
};
|
|
117
|
-
|
|
118
96
|
commands.mobileCloseDrawer = async function mobileCloseDrawer(opts = {}) {
|
|
119
97
|
const {
|
|
120
98
|
element,
|
|
@@ -124,7 +102,6 @@ commands.mobileCloseDrawer = async function mobileCloseDrawer(opts = {}) {
|
|
|
124
102
|
gravity
|
|
125
103
|
});
|
|
126
104
|
};
|
|
127
|
-
|
|
128
105
|
commands.mobileSetDate = async function mobileSetDate(opts = {}) {
|
|
129
106
|
const {
|
|
130
107
|
element,
|
|
@@ -138,7 +115,6 @@ commands.mobileSetDate = async function mobileSetDate(opts = {}) {
|
|
|
138
115
|
dayOfMonth
|
|
139
116
|
});
|
|
140
117
|
};
|
|
141
|
-
|
|
142
118
|
commands.mobileSetTime = async function mobileSetTime(opts = {}) {
|
|
143
119
|
const {
|
|
144
120
|
element,
|
|
@@ -150,18 +126,15 @@ commands.mobileSetTime = async function mobileSetTime(opts = {}) {
|
|
|
150
126
|
minutes
|
|
151
127
|
});
|
|
152
128
|
};
|
|
153
|
-
|
|
154
129
|
commands.mobileNavigateTo = async function mobileNavigateTo(opts = {}) {
|
|
155
130
|
let {
|
|
156
131
|
element,
|
|
157
132
|
menuItemId
|
|
158
133
|
} = assertRequiredOptions(opts, ['menuItemId', 'element']);
|
|
159
134
|
let menuItemIdAsNumber = parseInt(menuItemId, 10);
|
|
160
|
-
|
|
161
135
|
if (_lodash.default.isNaN(menuItemIdAsNumber) || menuItemIdAsNumber < 0) {
|
|
162
136
|
throw new _driver.errors.InvalidArgumentError(`'menuItemId' must be a non-negative number. Found ${menuItemId}`);
|
|
163
137
|
}
|
|
164
|
-
|
|
165
138
|
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${_support.util.unwrapElement(element)}/navigate_to`, 'POST', {
|
|
166
139
|
menuItemId
|
|
167
140
|
});
|
|
@@ -171,11 +144,9 @@ commands.mobileWebAtoms = async function mobileWebAtoms(opts = {}) {
|
|
|
171
144
|
opts = assertRequiredOptions(opts, ['methodChain']);
|
|
172
145
|
return await this.espresso.jwproxy.command(`/appium/execute_mobile/web_atoms`, 'POST', opts);
|
|
173
146
|
};
|
|
174
|
-
|
|
175
147
|
commands.getDisplayDensity = async function getDisplayDensity() {
|
|
176
148
|
return await this.espresso.jwproxy.command('/appium/device/display_density', 'GET', {});
|
|
177
149
|
};
|
|
178
|
-
|
|
179
150
|
commands.mobileScrollToPage = async function mobileScrollToPage(opts = {}) {
|
|
180
151
|
const scrollToTypes = ['first', 'last', 'left', 'right'];
|
|
181
152
|
const res = (0, _validate.default)(opts, {
|
|
@@ -196,22 +167,18 @@ commands.mobileScrollToPage = async function mobileScrollToPage(opts = {}) {
|
|
|
196
167
|
}
|
|
197
168
|
}
|
|
198
169
|
});
|
|
199
|
-
|
|
200
170
|
if (_support.util.hasValue(res)) {
|
|
201
171
|
throw new _driver.errors.InvalidArgumentError(`Invalid scrollTo parameters: ${JSON.stringify(res)}`);
|
|
202
172
|
}
|
|
203
|
-
|
|
204
173
|
const {
|
|
205
174
|
element,
|
|
206
175
|
scrollTo,
|
|
207
176
|
scrollToPage,
|
|
208
177
|
smoothScroll
|
|
209
178
|
} = opts;
|
|
210
|
-
|
|
211
179
|
if (_support.util.hasValue(scrollTo) && _support.util.hasValue(scrollToPage)) {
|
|
212
180
|
this.log.warn(`'scrollTo' and 'scrollToPage' where both provided. Defaulting to 'scrollTo'`);
|
|
213
181
|
}
|
|
214
|
-
|
|
215
182
|
return await this.espresso.jwproxy.command(`/appium/execute_mobile/${_support.util.unwrapElement(element)}/scroll_to_page`, 'POST', {
|
|
216
183
|
scrollTo,
|
|
217
184
|
scrollToPage,
|
|
@@ -225,11 +192,9 @@ commands.mobileBackdoor = async function mobileBackdoor(opts = {}) {
|
|
|
225
192
|
target,
|
|
226
193
|
methods
|
|
227
194
|
} = opts;
|
|
228
|
-
|
|
229
195
|
if (target === 'element') {
|
|
230
196
|
assertRequiredOptions(opts, ['elementId']);
|
|
231
197
|
}
|
|
232
|
-
|
|
233
198
|
const {
|
|
234
199
|
elementId: targetElement
|
|
235
200
|
} = opts;
|
|
@@ -290,13 +255,11 @@ commands.mobileClickAction = async function mobileClickAction(opts = {}) {
|
|
|
290
255
|
buttonState
|
|
291
256
|
});
|
|
292
257
|
};
|
|
293
|
-
|
|
294
258
|
commands.updateSettings = async function updateSettings(settings) {
|
|
295
259
|
return await this.espresso.jwproxy.command(`/appium/settings`, 'POST', {
|
|
296
260
|
settings
|
|
297
261
|
});
|
|
298
262
|
};
|
|
299
|
-
|
|
300
263
|
commands.getSettings = async function getSettings() {
|
|
301
264
|
return await this.espresso.jwproxy.command(`/appium/settings`, 'GET');
|
|
302
265
|
};
|
|
@@ -324,7 +287,6 @@ commands.mobileStartActivity = async function mobileStartActivity(opts = {}) {
|
|
|
324
287
|
optionalActivityArguments
|
|
325
288
|
});
|
|
326
289
|
};
|
|
327
|
-
|
|
328
290
|
commands.startActivity = async function startActivity(appPackage, appActivity, appWaitPackage, appWaitActivity) {
|
|
329
291
|
appPackage = appPackage || this.caps.appPackage;
|
|
330
292
|
appWaitPackage = appWaitPackage || appPackage;
|
|
@@ -337,15 +299,13 @@ commands.startActivity = async function startActivity(appPackage, appActivity, a
|
|
|
337
299
|
});
|
|
338
300
|
await this.adb.waitForActivity(appWaitPackage, appWaitActivity);
|
|
339
301
|
};
|
|
340
|
-
|
|
341
302
|
commands.mobileDismissAutofill = async function mobileDismissAutofill(opts = {}) {
|
|
342
303
|
const {
|
|
343
304
|
element
|
|
344
305
|
} = assertRequiredOptions(opts, ['element']);
|
|
345
306
|
await this.espresso.jwproxy.command(`/session/:sessionId/appium/execute_mobile/${_support.util.unwrapElement(element)}/dismiss_autofill`, 'POST', {});
|
|
346
307
|
};
|
|
347
|
-
|
|
348
308
|
Object.assign(extensions, commands, helpers);
|
|
349
309
|
var _default = extensions;
|
|
350
310
|
exports.default = _default;
|
|
351
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiYXNzZXJ0UmVxdWlyZWRPcHRpb25zIiwib3B0aW9ucyIsInJlcXVpcmVkT3B0aW9uTmFtZXMiLCJfIiwiaXNBcnJheSIsInByZXNlbnRPcHRpb25OYW1lcyIsImtleXMiLCJtaXNzaW5nT3B0aW9uTmFtZXMiLCJkaWZmZXJlbmNlIiwiaXNFbXB0eSIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImxhdW5jaEFwcCIsImVycm9ycyIsIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IiLCJjbG9zZUFwcCIsInJlc2V0IiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJlc3ByZXNzbyIsImp3cHJveHkiLCJjb21tYW5kIiwibW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiIsIm9wdHMiLCJhY3Rpb24iLCJtb2JpbGVTd2lwZSIsImRpcmVjdGlvbiIsImVsZW1lbnQiLCJzd2lwZXIiLCJzdGFydENvb3JkaW5hdGVzIiwiZW5kQ29vcmRpbmF0ZXMiLCJwcmVjaXNpb25EZXNjcmliZXIiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsIm1vYmlsZUdldERldmljZUluZm8iLCJtb2JpbGVJc1RvYXN0VmlzaWJsZSIsInRleHQiLCJpc1JlZ2V4cCIsImhhc1ZhbHVlIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVPcGVuRHJhd2VyIiwiZ3Jhdml0eSIsIm1vYmlsZUNsb3NlRHJhd2VyIiwibW9iaWxlU2V0RGF0ZSIsInllYXIiLCJtb250aE9mWWVhciIsImRheU9mTW9udGgiLCJtb2JpbGVTZXRUaW1lIiwiaG91cnMiLCJtaW51dGVzIiwibW9iaWxlTmF2aWdhdGVUbyIsIm1lbnVJdGVtSWQiLCJtZW51SXRlbUlkQXNOdW1iZXIiLCJwYXJzZUludCIsImlzTmFOIiwibW9iaWxlV2ViQXRvbXMiLCJnZXREaXNwbGF5RGVuc2l0eSIsIm1vYmlsZVNjcm9sbFRvUGFnZSIsInNjcm9sbFRvVHlwZXMiLCJyZXMiLCJ2YWxpZGF0ZSIsInByZXNlbmNlIiwic2Nyb2xsVG8iLCJpbmNsdXNpb24iLCJ3aXRoaW4iLCJtZXNzYWdlIiwiam9pbiIsInNjcm9sbFRvUGFnZSIsIm51bWVyaWNhbGl0eSIsIm9ubHlJbnRlZ2VyIiwiZ3JlYXRlclRoYW5PckVxdWFsVG8iLCJzbW9vdGhTY3JvbGwiLCJsb2ciLCJ3YXJuIiwibW9iaWxlQmFja2Rvb3IiLCJ0YXJnZXQiLCJtZXRob2RzIiwiZWxlbWVudElkIiwidGFyZ2V0RWxlbWVudCIsIm1vYmlsZVVpYXV0b21hdG9yIiwic3RyYXRlZ3kiLCJsb2NhdG9yIiwiaW5kZXgiLCJtb2JpbGVVaWF1dG9tYXRvclBhZ2VTb3VyY2UiLCJtb2JpbGVGbGFzaEVsZW1lbnQiLCJkdXJhdGlvbk1pbGxpcyIsInJlcGVhdENvdW50IiwibW9iaWxlQ2xpY2tBY3Rpb24iLCJ0YXBwZXIiLCJjb29yZGluYXRlc1Byb3ZpZGVyIiwiaW5wdXREZXZpY2UiLCJidXR0b25TdGF0ZSIsInVwZGF0ZVNldHRpbmdzIiwic2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsImNocm9tZWRyaXZlciIsInByb3h5UmVxUmVzIiwiYmluZCIsInByb3h5Q29tbWFuZCIsImp3cFByb3h5QWN0aXZlIiwibW9iaWxlU3RhcnRBY3Rpdml0eSIsImFwcFBhY2thZ2UiLCJjYXBzIiwiYXBwQWN0aXZpdHkiLCJsb2NhbGUiLCJvcHRpb25hbEludGVudEFyZ3VtZW50cyIsIm9wdGlvbmFsQWN0aXZpdHlBcmd1bWVudHMiLCJzdGFydEFjdGl2aXR5IiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJxdWFsaWZ5QWN0aXZpdHlOYW1lIiwiZGVidWciLCJ3YWl0Rm9yQWN0aXZpdHkiLCJtb2JpbGVEaXNtaXNzQXV0b2ZpbGwiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VuZXJhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB2YWxpZGF0ZSBmcm9tICd2YWxpZGF0ZS5qcyc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHF1YWxpZnlBY3Rpdml0eU5hbWUgfSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBhc3NlcnRSZXF1aXJlZE9wdGlvbnMgKG9wdGlvbnMsIHJlcXVpcmVkT3B0aW9uTmFtZXMpIHtcbiAgaWYgKCFfLmlzQXJyYXkocmVxdWlyZWRPcHRpb25OYW1lcykpIHtcbiAgICByZXF1aXJlZE9wdGlvbk5hbWVzID0gW3JlcXVpcmVkT3B0aW9uTmFtZXNdO1xuICB9XG4gIGNvbnN0IHByZXNlbnRPcHRpb25OYW1lcyA9IF8ua2V5cyhvcHRpb25zKTtcbiAgY29uc3QgbWlzc2luZ09wdGlvbk5hbWVzID0gXy5kaWZmZXJlbmNlKHJlcXVpcmVkT3B0aW9uTmFtZXMsIHByZXNlbnRPcHRpb25OYW1lcyk7XG4gIGlmIChfLmlzRW1wdHkobWlzc2luZ09wdGlvbk5hbWVzKSkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSByZXF1aXJlZDogJHtKU09OLnN0cmluZ2lmeShtaXNzaW5nT3B0aW9uTmFtZXMpfS4gYCArXG4gICAgYFlvdSBoYXZlIG9ubHkgcHJvdmlkZWQ6ICR7SlNPTi5zdHJpbmdpZnkocHJlc2VudE9wdGlvbk5hbWVzKX1gKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmNvbW1hbmRzLmxhdW5jaEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGxhdW5jaEFwcCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcignUGxlYXNlIGNyZWF0ZSBhIG5ldyBzZXNzaW9uIGluIG9yZGVyIHRvIGxhdW5jaCB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCcpO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmNvbW1hbmRzLmNsb3NlQXBwID0gYXN5bmMgZnVuY3Rpb24gY2xvc2VBcHAgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoJ1BsZWFzZSBxdWl0IHRoZSBzZXNzaW9uIGluIG9yZGVyIHRvIGNsb3NlIHRoZSBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0Jyk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuY29tbWFuZHMucmVzZXQgPSBhc3luYyBmdW5jdGlvbiByZXNldCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcbiAgICAnUGxlYXNlIHF1aXQgdGhlIHNlc3Npb24gYW5kIGNyZWF0ZSBhIG5ldyBvbmUgJyArXG4gICAgJ2luIG9yZGVyIHRvIGNsb3NlIGFuZCBsYXVuY2ggdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3QnKTtcbn07XG5cbmNvbW1hbmRzLmdldENsaXBib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGdldENsaXBib2FyZCAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI5KVxuICAgID8gKGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9nZXRfY2xpcGJvYXJkJywgJ1BPU1QnLCB7fSkpXG4gICAgOiAoYXdhaXQgdGhpcy5hZGIuZ2V0Q2xpcGJvYXJkKCkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7YWN0aW9ufSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2FjdGlvbiddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9wZXJmb3JtX2VkaXRvcl9hY3Rpb24nLCAnUE9TVCcsIHthY3Rpb259KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVN3aXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3dpcGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZGlyZWN0aW9uLCBlbGVtZW50LCBzd2lwZXIsIHN0YXJ0Q29vcmRpbmF0ZXMsIGVuZENvb3JkaW5hdGVzLCBwcmVjaXNpb25EZXNjcmliZXJ9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnZWxlbWVudCddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9zd2lwZWAsICdQT1NUJywge1xuICAgIGRpcmVjdGlvbiwgZWxlbWVudCwgc3dpcGVyLCBzdGFydENvb3JkaW5hdGVzLCBlbmRDb29yZGluYXRlcywgcHJlY2lzaW9uRGVzY3JpYmVyXG4gIH0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlR2V0RGV2aWNlSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldERldmljZUluZm8gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2luZm8nLCAnR0VUJyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVJc1RvYXN0VmlzaWJsZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzVG9hc3RWaXNpYmxlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3RleHQsIGlzUmVnZXhwfSA9IG9wdHM7XG4gIGlmICghdXRpbC5oYXNWYWx1ZSh0ZXh0KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYCd0ZXh0JyBhcmd1bWVudCBpcyBtYW5kYXRvcnlgKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvaXNfdG9hc3RfZGlzcGxheWVkJywgJ1BPU1QnLCB7XG4gICAgdGV4dCxcbiAgICBpc1JlZ2V4cCxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVPcGVuRHJhd2VyID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlT3BlbkRyYXdlciAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50LCBncmF2aXR5fSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9vcGVuX2RyYXdlcmAsICdQT1NUJywge1xuICAgIGdyYXZpdHlcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVDbG9zZURyYXdlciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsb3NlRHJhd2VyIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIGdyYXZpdHl9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnZWxlbWVudCddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L2Nsb3NlX2RyYXdlcmAsICdQT1NUJywge1xuICAgIGdyYXZpdHlcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVTZXREYXRlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2V0RGF0ZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50LCB5ZWFyLCBtb250aE9mWWVhciwgZGF5T2ZNb250aH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50JywgJ3llYXInLCAnbW9udGhPZlllYXInLCAnZGF5T2ZNb250aCddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L3NldF9kYXRlYCwgJ1BPU1QnLCB7XG4gICAgeWVhcixcbiAgICBtb250aE9mWWVhcixcbiAgICBkYXlPZk1vbnRoLFxuICB9KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVNldFRpbWUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTZXRUaW1lIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIGhvdXJzLCBtaW51dGVzfSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnLCAnaG91cnMnLCAnbWludXRlcyddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L3NldF90aW1lYCwgJ1BPU1QnLCB7XG4gICAgaG91cnMsXG4gICAgbWludXRlcyxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVOYXZpZ2F0ZVRvID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTmF2aWdhdGVUbyAob3B0cyA9IHt9KSB7XG4gIGxldCB7ZWxlbWVudCwgbWVudUl0ZW1JZH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydtZW51SXRlbUlkJywgJ2VsZW1lbnQnXSk7XG5cbiAgbGV0IG1lbnVJdGVtSWRBc051bWJlciA9IHBhcnNlSW50KG1lbnVJdGVtSWQsIDEwKTtcbiAgaWYgKF8uaXNOYU4obWVudUl0ZW1JZEFzTnVtYmVyKSB8fCBtZW51SXRlbUlkQXNOdW1iZXIgPCAwKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgJ21lbnVJdGVtSWQnIG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBGb3VuZCAke21lbnVJdGVtSWR9YCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L25hdmlnYXRlX3RvYCwgJ1BPU1QnLCB7XG4gICAgbWVudUl0ZW1JZFxuICB9KTtcbn07XG5cbi8qKlxuICogUnVucyBhIGNoYWluIG9mIEVzcHJlc3NvIHdlYiBhdG9tcyAoc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3RyYWluaW5nL3Rlc3RpbmcvZXNwcmVzc28vd2ViIGZvciByZWZlcmVuY2UpXG4gKlxuICogVGFrZXMgSlNPTiBvZiB0aGUgZm9ybVxuICpcbiAqIHtcbiAqICAgXCJ3ZWJ2aWV3RWxcIjogXCI8RUxFTUVOVF9JRD5cIiwgLy8gb3B0aW9uYWwgd2VidmlldyBlbGVtZW50IHRvIG9wZXJhdGUgb25cbiAqICAgXCJmb3JjZUphdmFzY3JpcHRFbmFibGVkXCI6IHRydWV8ZmFsc2UsIC8vIGlmIHdlYnZpZXcgZGlzYWJsZXMgamF2YXNjcmlwdCwgd2ViYXRvbXMgd29uJ3Qgd29yaywgdGhpcyBmb3JjZXMgaXRcbiAqICAgXCJtZXRob2RDaGFpblwiOiBbXG4gKiAgICAge1wibmFtZVwiOiBcIm1ldGhvZE5hbWVcIiwgXCJhdG9tXCI6IHtcIm5hbWVcIjogXCJhdG9tTmFtZVwiLCBcImFyZ3NcIjogW1wiYXJnMVwiLCBcImFyZzJcIiwgLi4uXX19LFxuICogICAgIC4uLlxuICogICBdXG4gKiB9XG4gKlxuICovXG5jb21tYW5kcy5tb2JpbGVXZWJBdG9tcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVdlYkF0b21zIChvcHRzID0ge30pIHtcbiAgb3B0cyA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ21ldGhvZENoYWluJ10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvd2ViX2F0b21zYCwgJ1BPU1QnLCBvcHRzKTtcbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2Rpc3BsYXlfZGVuc2l0eScsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVTY3JvbGxUb1BhZ2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTY3JvbGxUb1BhZ2UgKG9wdHMgPSB7fSkge1xuXG4gIC8vIFZhbGlkYXRlIHRoZSBwYXJhbWV0ZXJzXG4gIGNvbnN0IHNjcm9sbFRvVHlwZXMgPSBbJ2ZpcnN0JywgJ2xhc3QnLCAnbGVmdCcsICdyaWdodCddO1xuICBjb25zdCByZXMgPSB2YWxpZGF0ZShvcHRzLCB7XG4gICAgZWxlbWVudDoge3ByZXNlbmNlOiB0cnVlfSxcbiAgICBzY3JvbGxUbzoge1xuICAgICAgaW5jbHVzaW9uOiB7XG4gICAgICAgIHdpdGhpbjogc2Nyb2xsVG9UeXBlcyxcbiAgICAgICAgbWVzc2FnZTogYFwic2Nyb2xsVG9cIiBtdXN0IGJlIG9uZSBvZiBcIiR7c2Nyb2xsVG9UeXBlcy5qb2luKCcsICcpfVwiIGZvdW5kICcle3ZhbHVlfSdgLFxuICAgICAgfVxuICAgIH0sXG4gICAgc2Nyb2xsVG9QYWdlOiB7XG4gICAgICBudW1lcmljYWxpdHk6IHtcbiAgICAgICAgb25seUludGVnZXI6IHRydWUsXG4gICAgICAgIGdyZWF0ZXJUaGFuT3JFcXVhbFRvOiAwLFxuICAgICAgICBtZXNzYWdlOiBgXCJzY3JvbGxUb1BhZ2VcIiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuIEZvdW5kICcle3ZhbHVlfSdgXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBpZiAodXRpbC5oYXNWYWx1ZShyZXMpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgSW52YWxpZCBzY3JvbGxUbyBwYXJhbWV0ZXJzOiAke0pTT04uc3RyaW5naWZ5KHJlcyl9YCk7XG4gIH1cblxuICBjb25zdCB7ZWxlbWVudCwgc2Nyb2xsVG8sIHNjcm9sbFRvUGFnZSwgc21vb3RoU2Nyb2xsfSA9IG9wdHM7XG5cbiAgaWYgKHV0aWwuaGFzVmFsdWUoc2Nyb2xsVG8pICYmIHV0aWwuaGFzVmFsdWUoc2Nyb2xsVG9QYWdlKSkge1xuICAgIHRoaXMubG9nLndhcm4oYCdzY3JvbGxUbycgYW5kICdzY3JvbGxUb1BhZ2UnIHdoZXJlIGJvdGggcHJvdmlkZWQuIERlZmF1bHRpbmcgdG8gJ3Njcm9sbFRvJ2ApO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9zY3JvbGxfdG9fcGFnZWAsICdQT1NUJywge1xuICAgIHNjcm9sbFRvLFxuICAgIHNjcm9sbFRvUGFnZSxcbiAgICBzbW9vdGhTY3JvbGwsXG4gIH0pO1xufTtcblxuXG4vKipcbiAqICBBUEkgdG8gaW52b2tlIG1ldGhvZHMgZGVmaW5lZCBpbiBBbmRyb2lkIGFwcC5cbiAqXG4gKiAgRXhhbXBsZSBkYXRhXG4gKiAge1xuICogICB0YXJnZXQ6ICdhY3Rpdml0eScsXG4gKiAgIG1ldGhvZHM6XG4gKiAgICAgICAgIFtcbiAqICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgIG5hbWU6IFwic29tZU1ldGhvZFwiLFxuICogICAgICAgICAgIH0sXG4gKiAgICAgICAgICAge1xuICogICAgICAgICAgICAgICBuYW1lOiBcImFub3RoZXJNZXRob2RcIixcbiAqICAgICAgICAgICAgICAgYXJnczpcbiAqICAgICAgICAgICAgICAgICAgIFtcbiAqICAgICAgICAgICAgICAgICAgICAgICB7dmFsdWU6IFwiTG9sXCIsIHR5cGU6ICdqYXZhLmxhbmcuQ2hhclNlcXVlbmNlJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAge3ZhbHVlOiAxLCB0eXBlOiAnaW50J31cbiAqICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICB9XG4gKiAgICAgICAgIF1cbiAqIH1cbiAqXG4gKiBJbiBhYm92ZSBleGFtcGxlLCBtZXRob2QgXCJzb21lTWV0aG9kXCIgd2lsbCBiZSBpbnZva2VkIG9uICdhY3Rpdml0eScuIE9uIHRoZSByZXN1bHQsIFwiYW5vdGhlck1ldGhvZFwiIHdpbGwgYmUgaW52b2tlZFxuICogIFwidGFyZ2V0XCIgY2FuIGJlIGVpdGhlciAnYWN0aXZpdHknLCAnYXBwbGljYXRpb24nIG9yICdlbGVtZW50J1xuICogIElmIHRhcmdldCBpcyBzZXQgdG8gJ2FwcGxpY2F0aW9uJywgbWV0aG9kcyB3aWxsIGJlIGludm9rZWQgb24gYXBwbGljYXRpb24gY2xhc3NcbiAqICBJZiB0YXJnZXQgaXMgc2V0IHRvICdhY3Rpdml0eScsIG1ldGhvZHMgd2lsbCBiZSBpbnZva2VkIG9uIGN1cnJlbnQgYWN0aXZpdHlcbiAqICBJZiB0YXJnZXQgaXMgc2V0IHRvICdlbGVtZW50JywgJ2VsZW1lbnRJZCcgbXVzdCBiZSBzcGVjaWZpZWRcbiAqXG4gKiAtIE9ubHkgJ1B1YmxpYycgbWV0aG9kcyBjYW4gYmUgaW52b2tlZC4gKCdvcGVuJyBtb2RpZmlyZSBpcyBuZWNlc3NhcnkgaW4gS290bGluKVxuICogLSBmb2xsb3dpbmcgcHJpbWl0aXZlIHR5cGVzIGFyZSBzdXBwb3J0ZWQ6IFwiaW50XCIsIFwiYm9vbGVhblwiLCBcImJ5dGVcIiwgXCJzaG9ydFwiLCBcImxvbmdcIiwgXCJmbG9hdFwiLCBcImNoYXJcIlxuICogLSAgTm9uLXByaW1pdGl2ZSB0eXBlcyB3aXRoIGZ1bGx5IHF1YWxpZmllZCBuYW1lIFwiamF2YS5sYW5nLipcIiBpcyBhbHNvIHN1cHBvcnRlZDpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWcuIFwiamF2YS5sYW5nLkNoYXJTZXF1ZW5jZVwiLCBcImphdmEubGFuZy5TdHJpbmdcIiwgXCJqYXZhLmxhbmcuSW50ZWdlclwiLCBcImphdmEubGFuZy5GbG9hdFwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphdmEubGFuZy5Eb3VibGVcIiwgXCJqYXZhLmxhbmcuQm9vbGVhblwiLCBcImphdmEubGFuZy5Mb25nXCIsIFwiamF2YS5sYW5nLlNob3J0XCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiamF2YS5sYW5nLkNoYXJhY3RlclwiIGV0Yy4uLlxuICpcbiAqXG4gKiBAdGhyb3dzICB7RXJyb3J9IGlmIHRhcmdldCBpcyBub3QgJ2FjdGl2aXR5JyBvciAnYXBwbGljYXRpb24nXG4gKiBAdGhyb3dzICB7RXJyb3J9IGlmIGEgbWV0aG9kIGlzIG5vdCBmb3VuZCB3aXRoIGdpdmVuIGFyZ3VtZW50IHR5cGVzXG4gKlxuICogQHJldHVybiB7Kn0gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBtZXRob2QgaW4gdGhlIGludm9jYXRpb24gY2hhaW4uIElmIG1ldGhvZCByZXR1cm4gdHlwZSBpcyB2b2lkLCB0aGVuIFwiPFZPSUQ+XCIgd2lsbCBiZSByZXR1cm5lZFxuICpcbiAqL1xuY29tbWFuZHMubW9iaWxlQmFja2Rvb3IgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVCYWNrZG9vciAob3B0cyA9IHt9KSB7XG4gIGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ3RhcmdldCcsICdtZXRob2RzJ10pO1xuICBjb25zdCB7dGFyZ2V0LCBtZXRob2RzfSA9IG9wdHM7XG4gIGlmICh0YXJnZXQgPT09ICdlbGVtZW50Jykge1xuICAgIGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnRJZCddKTtcbiAgfVxuICBjb25zdCB7ZWxlbWVudElkOiB0YXJnZXRFbGVtZW50fSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS9iYWNrZG9vcmAsICdQT1NUJywge3RhcmdldCwgbWV0aG9kcywgdGFyZ2V0RWxlbWVudH0pO1xufTtcblxuLyoqXG4gKiAgRXhlY3V0ZSBVaUF1dG9tYXRvcjIgY29tbWFuZHMgdG8gZHJpdmUgb3V0IG9mIGFwcCBhcmVhcy5cbiAqICBzdHJhdGVneSBjYW4gYmUgb25lIG9mOiBcImNsYXp6XCIsIFwicmVzXCIsIFwidGV4dFwiLCBcInRleHRDb250YWluc1wiLCBcInRleHRFbmRzV2l0aFwiLCBcInRleHRTdGFydHNXaXRoXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkZXNjXCIsIFwiZGVzY0NvbnRhaW5zXCIsIFwiZGVzY0VuZHNXaXRoXCIsIFwiZGVzY1N0YXJ0c1dpdGhcIiwgXCJwa2dcIlxuICpcbiAqICBhY3Rpb24gY2FuIGJlIG9uZSBvZjogXCJjbGlja1wiLCBcImxvbmdDbGlja1wiLCBcImdldFRleHRcIiwgXCJnZXRDb250ZW50RGVzY3JpcHRpb25cIiwgXCJnZXRDbGFzc05hbWVcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJnZXRSZXNvdXJjZU5hbWVcIiwgXCJnZXRWaXNpYmxlQm91bmRzXCIsIFwiZ2V0VmlzaWJsZUNlbnRlclwiLCBcImdldEFwcGxpY2F0aW9uUGFja2FnZVwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImdldENoaWxkQ291bnRcIiwgXCJjbGVhclwiLCBcImlzQ2hlY2thYmxlXCIsIFwiaXNDaGVja2VkXCIsIFwiaXNDbGlja2FibGVcIiwgXCJpc0VuYWJsZWRcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJpc0ZvY3VzYWJsZVwiLCBcImlzRm9jdXNlZFwiLCBcImlzTG9uZ0NsaWNrYWJsZVwiLCBcImlzU2Nyb2xsYWJsZVwiLCBcImlzU2VsZWN0ZWRcIlxuICovXG5jb21tYW5kcy5tb2JpbGVVaWF1dG9tYXRvciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVVpYXV0b21hdG9yIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3N0cmF0ZWd5LCBsb2NhdG9yLCBhY3Rpb24sIGluZGV4fSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ3N0cmF0ZWd5JywgJ2xvY2F0b3InLCAnYWN0aW9uJ10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvdWlhdXRvbWF0b3JgLCAnUE9TVCcsIHtzdHJhdGVneSwgbG9jYXRvciwgaW5kZXgsIGFjdGlvbn0pO1xufTtcblxuLyoqXG4gKiAgRXhlY3V0ZSBVaUF1dG9tYXRvcjIgY29tbWFuZCB0byByZXR1cm4gdGhlIFVJIGR1bXAgd2hlbiBBVVQgaXMgaW4gYmFja2dyb3VuZC5cbiAqIEB0aHJvd3MgIHtFcnJvcn0gaWYgdWlhdXRvbWF0b3IgdmlldyBkdW1wIGlzIHVuc3VjY2Vzc2Z1bFxuICogQHJldHVybnMge3N0cmluZ30gdWlhdXRvbWF0b3IgRE9NIHhtbCBhcyBzdHJpbmdcbiAqL1xuY29tbWFuZHMubW9iaWxlVWlhdXRvbWF0b3JQYWdlU291cmNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVWlhdXRvbWF0b3JQYWdlU291cmNlICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL3VpYXV0b21hdG9yX3BhZ2Vfc291cmNlYCwgJ0dFVCcpO1xufTtcblxuLyoqXG4gKiAgRmxhc2ggdGhlIGVsZW1lbnQgd2l0aCBnaXZlbiBpZC5cbiAqICBkdXJhdGlvbk1pbGxpcyBhbmQgcmVwZWF0Q291bnQgYXJlIG9wdGlvbmFsXG4gKlxuICovXG5jb21tYW5kcy5tb2JpbGVGbGFzaEVsZW1lbnQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVGbGFzaEVsZW1lbnQgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuICBjb25zdCB7ZHVyYXRpb25NaWxsaXMsIHJlcGVhdENvdW50fSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vZmxhc2hgLCAnUE9TVCcsIHtcbiAgICBkdXJhdGlvbk1pbGxpcyxcbiAgICByZXBlYXRDb3VudFxuICB9KTtcbn07XG5cbi8qKlxuICogUGVyZm9ybSBhICdHZW5lcmFsQ2xpY2tBY3Rpb24nIChodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZHgvdGVzdC9lc3ByZXNzby9hY3Rpb24vR2VuZXJhbENsaWNrQWN0aW9uKVxuICovXG5jb21tYW5kcy5tb2JpbGVDbGlja0FjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsaWNrQWN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIHRhcHBlciwgY29vcmRpbmF0ZXNQcm92aWRlciwgcHJlY2lzaW9uRGVzY3JpYmVyLFxuICAgICAgICAgaW5wdXREZXZpY2UsIGJ1dHRvblN0YXRlfSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vY2xpY2tfYWN0aW9uYCwgJ1BPU1QnLCB7XG4gICAgdGFwcGVyLCBjb29yZGluYXRlc1Byb3ZpZGVyLCBwcmVjaXNpb25EZXNjcmliZXIsIGlucHV0RGV2aWNlLCBidXR0b25TdGF0ZVxuICB9KTtcbn07XG5cbmNvbW1hbmRzLnVwZGF0ZVNldHRpbmdzID0gYXN5bmMgZnVuY3Rpb24gdXBkYXRlU2V0dGluZ3MgKHNldHRpbmdzKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9zZXR0aW5nc2AsICdQT1NUJywgeyBzZXR0aW5ncyB9KTtcbn07XG5cbmNvbW1hbmRzLmdldFNldHRpbmdzID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2V0dGluZ3MgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vc2V0dGluZ3NgLCAnR0VUJyk7XG59O1xuXG4vLyBTdG9wIHByb3h5aW5nIHRvIGFueSBDaHJvbWVkcml2ZXIgYW5kIHJlZGlyZWN0IHRvIEVzcHJlc3NvXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uIHN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSAoKSB7XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuZXNwcmVzc28ucHJveHlSZXFSZXMuYmluZCh0aGlzLmVzcHJlc3NvKTtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLmVzcHJlc3NvLnByb3h5Q29tbWFuZC5iaW5kKHRoaXMuZXNwcmVzc28pO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogIFN0YXJ0cyB0aGUgZ2l2ZW4gYWN0aXZpdHkgd2l0aCBpbnRlbnQgb3B0aW9ucywgYWN0aXZpdHkgb3B0aW9ucyBhbmQgbG9jYWxlLlxuICogIEFjdGl2aXR5IGNvdWxkIG9ubHkgYmUgZXhlY3V0ZWQgaW4gc2NvcGUgb2YgdGhlIGN1cnJlbnQgYXBwIHBhY2thZ2UuXG4gKlxuICogIGFwcEFjdGl2aXR5IGlzIG1hbmRhdG9yeVxuICpcbiAqICBsb2NhbGUsIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLCBvcHRpb25hbEFjdGl2aXR5QXJndW1lbnRzIGFyZSBvcHRpb25hbFxuICovXG5jb21tYW5kcy5tb2JpbGVTdGFydEFjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3RhcnRBY3Rpdml0eSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IGFwcFBhY2thZ2UgPSB0aGlzLmNhcHMuYXBwUGFja2FnZTtcbiAgY29uc3Qge1xuICAgIGFwcEFjdGl2aXR5LFxuICAgIGxvY2FsZSxcbiAgICBvcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICBvcHRpb25hbEFjdGl2aXR5QXJndW1lbnRzXG4gIH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydhcHBBY3Rpdml0eSddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2RldmljZS9zdGFydF9hY3Rpdml0eWAsICdQT1NUJywge1xuICAgIGFwcFBhY2thZ2UsXG4gICAgYXBwQWN0aXZpdHksXG4gICAgbG9jYWxlLFxuICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLFxuICAgIG9wdGlvbmFsQWN0aXZpdHlBcmd1bWVudHNcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5zdGFydEFjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRBY3Rpdml0eSAoYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksXG4gIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHkpIHtcbiAgLy8gaW50ZW50QWN0aW9uLCBpbnRlbnRDYXRlZ29yeSwgaW50ZW50RmxhZ3MsIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLCBkb250U3RvcEFwcE9uUmVzZXRcbiAgLy8gcGFyYW1ldGVycyBhcmUgbm90IHN1cHBvcnRlZCBieSBFc3ByZXNzb1xuICBhcHBQYWNrYWdlID0gYXBwUGFja2FnZSB8fCB0aGlzLmNhcHMuYXBwUGFja2FnZTtcbiAgYXBwV2FpdFBhY2thZ2UgPSBhcHBXYWl0UGFja2FnZSB8fCBhcHBQYWNrYWdlO1xuICBhcHBBY3Rpdml0eSA9IHF1YWxpZnlBY3Rpdml0eU5hbWUoYXBwQWN0aXZpdHksIGFwcFBhY2thZ2UpO1xuICBhcHBXYWl0QWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcFdhaXRBY3Rpdml0eSB8fCBhcHBBY3Rpdml0eSwgYXBwV2FpdFBhY2thZ2UpO1xuICB0aGlzLmxvZy5kZWJ1ZyhgU3RhcnRpbmcgYWN0aXZpdHkgJyR7YXBwQWN0aXZpdHl9JyBmb3IgcGFja2FnZSAnJHthcHBQYWNrYWdlfSdgKTtcbiAgYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZGV2aWNlL3N0YXJ0X2FjdGl2aXR5YCwgJ1BPU1QnLCB7XG4gICAgYXBwUGFja2FnZSxcbiAgICBhcHBBY3Rpdml0eSxcbiAgfSk7XG4gIGF3YWl0IHRoaXMuYWRiLndhaXRGb3JBY3Rpdml0eShhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZURpc21pc3NBdXRvZmlsbCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZURpc21pc3NBdXRvZmlsbCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50fSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG4gIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKFxuICAgIGAvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vZGlzbWlzc19hdXRvZmlsbGAsICdQT1NUJywge30pO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7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
|
|
311
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiYXNzZXJ0UmVxdWlyZWRPcHRpb25zIiwib3B0aW9ucyIsInJlcXVpcmVkT3B0aW9uTmFtZXMiLCJfIiwiaXNBcnJheSIsInByZXNlbnRPcHRpb25OYW1lcyIsImtleXMiLCJtaXNzaW5nT3B0aW9uTmFtZXMiLCJkaWZmZXJlbmNlIiwiaXNFbXB0eSIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImxhdW5jaEFwcCIsImVycm9ycyIsIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IiLCJjbG9zZUFwcCIsInJlc2V0IiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJlc3ByZXNzbyIsImp3cHJveHkiLCJjb21tYW5kIiwibW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiIsIm9wdHMiLCJhY3Rpb24iLCJtb2JpbGVTd2lwZSIsImRpcmVjdGlvbiIsImVsZW1lbnQiLCJzd2lwZXIiLCJzdGFydENvb3JkaW5hdGVzIiwiZW5kQ29vcmRpbmF0ZXMiLCJwcmVjaXNpb25EZXNjcmliZXIiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsIm1vYmlsZUdldERldmljZUluZm8iLCJtb2JpbGVJc1RvYXN0VmlzaWJsZSIsInRleHQiLCJpc1JlZ2V4cCIsImhhc1ZhbHVlIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVPcGVuRHJhd2VyIiwiZ3Jhdml0eSIsIm1vYmlsZUNsb3NlRHJhd2VyIiwibW9iaWxlU2V0RGF0ZSIsInllYXIiLCJtb250aE9mWWVhciIsImRheU9mTW9udGgiLCJtb2JpbGVTZXRUaW1lIiwiaG91cnMiLCJtaW51dGVzIiwibW9iaWxlTmF2aWdhdGVUbyIsIm1lbnVJdGVtSWQiLCJtZW51SXRlbUlkQXNOdW1iZXIiLCJwYXJzZUludCIsImlzTmFOIiwibW9iaWxlV2ViQXRvbXMiLCJnZXREaXNwbGF5RGVuc2l0eSIsIm1vYmlsZVNjcm9sbFRvUGFnZSIsInNjcm9sbFRvVHlwZXMiLCJyZXMiLCJ2YWxpZGF0ZSIsInByZXNlbmNlIiwic2Nyb2xsVG8iLCJpbmNsdXNpb24iLCJ3aXRoaW4iLCJtZXNzYWdlIiwiam9pbiIsInNjcm9sbFRvUGFnZSIsIm51bWVyaWNhbGl0eSIsIm9ubHlJbnRlZ2VyIiwiZ3JlYXRlclRoYW5PckVxdWFsVG8iLCJzbW9vdGhTY3JvbGwiLCJsb2ciLCJ3YXJuIiwibW9iaWxlQmFja2Rvb3IiLCJ0YXJnZXQiLCJtZXRob2RzIiwiZWxlbWVudElkIiwidGFyZ2V0RWxlbWVudCIsIm1vYmlsZVVpYXV0b21hdG9yIiwic3RyYXRlZ3kiLCJsb2NhdG9yIiwiaW5kZXgiLCJtb2JpbGVVaWF1dG9tYXRvclBhZ2VTb3VyY2UiLCJtb2JpbGVGbGFzaEVsZW1lbnQiLCJkdXJhdGlvbk1pbGxpcyIsInJlcGVhdENvdW50IiwibW9iaWxlQ2xpY2tBY3Rpb24iLCJ0YXBwZXIiLCJjb29yZGluYXRlc1Byb3ZpZGVyIiwiaW5wdXREZXZpY2UiLCJidXR0b25TdGF0ZSIsInVwZGF0ZVNldHRpbmdzIiwic2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsImNocm9tZWRyaXZlciIsInByb3h5UmVxUmVzIiwiYmluZCIsInByb3h5Q29tbWFuZCIsImp3cFByb3h5QWN0aXZlIiwibW9iaWxlU3RhcnRBY3Rpdml0eSIsImFwcFBhY2thZ2UiLCJjYXBzIiwiYXBwQWN0aXZpdHkiLCJsb2NhbGUiLCJvcHRpb25hbEludGVudEFyZ3VtZW50cyIsIm9wdGlvbmFsQWN0aXZpdHlBcmd1bWVudHMiLCJzdGFydEFjdGl2aXR5IiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJxdWFsaWZ5QWN0aXZpdHlOYW1lIiwiZGVidWciLCJ3YWl0Rm9yQWN0aXZpdHkiLCJtb2JpbGVEaXNtaXNzQXV0b2ZpbGwiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VuZXJhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB2YWxpZGF0ZSBmcm9tICd2YWxpZGF0ZS5qcyc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHF1YWxpZnlBY3Rpdml0eU5hbWUgfSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBhc3NlcnRSZXF1aXJlZE9wdGlvbnMgKG9wdGlvbnMsIHJlcXVpcmVkT3B0aW9uTmFtZXMpIHtcbiAgaWYgKCFfLmlzQXJyYXkocmVxdWlyZWRPcHRpb25OYW1lcykpIHtcbiAgICByZXF1aXJlZE9wdGlvbk5hbWVzID0gW3JlcXVpcmVkT3B0aW9uTmFtZXNdO1xuICB9XG4gIGNvbnN0IHByZXNlbnRPcHRpb25OYW1lcyA9IF8ua2V5cyhvcHRpb25zKTtcbiAgY29uc3QgbWlzc2luZ09wdGlvbk5hbWVzID0gXy5kaWZmZXJlbmNlKHJlcXVpcmVkT3B0aW9uTmFtZXMsIHByZXNlbnRPcHRpb25OYW1lcyk7XG4gIGlmIChfLmlzRW1wdHkobWlzc2luZ09wdGlvbk5hbWVzKSkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSByZXF1aXJlZDogJHtKU09OLnN0cmluZ2lmeShtaXNzaW5nT3B0aW9uTmFtZXMpfS4gYCArXG4gICAgYFlvdSBoYXZlIG9ubHkgcHJvdmlkZWQ6ICR7SlNPTi5zdHJpbmdpZnkocHJlc2VudE9wdGlvbk5hbWVzKX1gKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmNvbW1hbmRzLmxhdW5jaEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGxhdW5jaEFwcCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcignUGxlYXNlIGNyZWF0ZSBhIG5ldyBzZXNzaW9uIGluIG9yZGVyIHRvIGxhdW5jaCB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCcpO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmNvbW1hbmRzLmNsb3NlQXBwID0gYXN5bmMgZnVuY3Rpb24gY2xvc2VBcHAgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoJ1BsZWFzZSBxdWl0IHRoZSBzZXNzaW9uIGluIG9yZGVyIHRvIGNsb3NlIHRoZSBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0Jyk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuY29tbWFuZHMucmVzZXQgPSBhc3luYyBmdW5jdGlvbiByZXNldCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcbiAgICAnUGxlYXNlIHF1aXQgdGhlIHNlc3Npb24gYW5kIGNyZWF0ZSBhIG5ldyBvbmUgJyArXG4gICAgJ2luIG9yZGVyIHRvIGNsb3NlIGFuZCBsYXVuY2ggdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3QnKTtcbn07XG5cbmNvbW1hbmRzLmdldENsaXBib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGdldENsaXBib2FyZCAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI5KVxuICAgID8gKGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9nZXRfY2xpcGJvYXJkJywgJ1BPU1QnLCB7fSkpXG4gICAgOiAoYXdhaXQgdGhpcy5hZGIuZ2V0Q2xpcGJvYXJkKCkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7YWN0aW9ufSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2FjdGlvbiddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9wZXJmb3JtX2VkaXRvcl9hY3Rpb24nLCAnUE9TVCcsIHthY3Rpb259KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVN3aXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3dpcGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZGlyZWN0aW9uLCBlbGVtZW50LCBzd2lwZXIsIHN0YXJ0Q29vcmRpbmF0ZXMsIGVuZENvb3JkaW5hdGVzLCBwcmVjaXNpb25EZXNjcmliZXJ9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnZWxlbWVudCddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9zd2lwZWAsICdQT1NUJywge1xuICAgIGRpcmVjdGlvbiwgZWxlbWVudCwgc3dpcGVyLCBzdGFydENvb3JkaW5hdGVzLCBlbmRDb29yZGluYXRlcywgcHJlY2lzaW9uRGVzY3JpYmVyXG4gIH0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlR2V0RGV2aWNlSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldERldmljZUluZm8gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2luZm8nLCAnR0VUJyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVJc1RvYXN0VmlzaWJsZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzVG9hc3RWaXNpYmxlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3RleHQsIGlzUmVnZXhwfSA9IG9wdHM7XG4gIGlmICghdXRpbC5oYXNWYWx1ZSh0ZXh0KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYCd0ZXh0JyBhcmd1bWVudCBpcyBtYW5kYXRvcnlgKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvaXNfdG9hc3RfZGlzcGxheWVkJywgJ1BPU1QnLCB7XG4gICAgdGV4dCxcbiAgICBpc1JlZ2V4cCxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVPcGVuRHJhd2VyID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlT3BlbkRyYXdlciAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50LCBncmF2aXR5fSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9vcGVuX2RyYXdlcmAsICdQT1NUJywge1xuICAgIGdyYXZpdHlcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVDbG9zZURyYXdlciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsb3NlRHJhd2VyIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIGdyYXZpdHl9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnZWxlbWVudCddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L2Nsb3NlX2RyYXdlcmAsICdQT1NUJywge1xuICAgIGdyYXZpdHlcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVTZXREYXRlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2V0RGF0ZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50LCB5ZWFyLCBtb250aE9mWWVhciwgZGF5T2ZNb250aH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50JywgJ3llYXInLCAnbW9udGhPZlllYXInLCAnZGF5T2ZNb250aCddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L3NldF9kYXRlYCwgJ1BPU1QnLCB7XG4gICAgeWVhcixcbiAgICBtb250aE9mWWVhcixcbiAgICBkYXlPZk1vbnRoLFxuICB9KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVNldFRpbWUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTZXRUaW1lIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIGhvdXJzLCBtaW51dGVzfSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnLCAnaG91cnMnLCAnbWludXRlcyddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L3NldF90aW1lYCwgJ1BPU1QnLCB7XG4gICAgaG91cnMsXG4gICAgbWludXRlcyxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVOYXZpZ2F0ZVRvID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTmF2aWdhdGVUbyAob3B0cyA9IHt9KSB7XG4gIGxldCB7ZWxlbWVudCwgbWVudUl0ZW1JZH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydtZW51SXRlbUlkJywgJ2VsZW1lbnQnXSk7XG5cbiAgbGV0IG1lbnVJdGVtSWRBc051bWJlciA9IHBhcnNlSW50KG1lbnVJdGVtSWQsIDEwKTtcbiAgaWYgKF8uaXNOYU4obWVudUl0ZW1JZEFzTnVtYmVyKSB8fCBtZW51SXRlbUlkQXNOdW1iZXIgPCAwKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgJ21lbnVJdGVtSWQnIG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBGb3VuZCAke21lbnVJdGVtSWR9YCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L25hdmlnYXRlX3RvYCwgJ1BPU1QnLCB7XG4gICAgbWVudUl0ZW1JZFxuICB9KTtcbn07XG5cbi8qKlxuICogUnVucyBhIGNoYWluIG9mIEVzcHJlc3NvIHdlYiBhdG9tcyAoc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3RyYWluaW5nL3Rlc3RpbmcvZXNwcmVzc28vd2ViIGZvciByZWZlcmVuY2UpXG4gKlxuICogVGFrZXMgSlNPTiBvZiB0aGUgZm9ybVxuICpcbiAqIHtcbiAqICAgXCJ3ZWJ2aWV3RWxcIjogXCI8RUxFTUVOVF9JRD5cIiwgLy8gb3B0aW9uYWwgd2VidmlldyBlbGVtZW50IHRvIG9wZXJhdGUgb25cbiAqICAgXCJmb3JjZUphdmFzY3JpcHRFbmFibGVkXCI6IHRydWV8ZmFsc2UsIC8vIGlmIHdlYnZpZXcgZGlzYWJsZXMgamF2YXNjcmlwdCwgd2ViYXRvbXMgd29uJ3Qgd29yaywgdGhpcyBmb3JjZXMgaXRcbiAqICAgXCJtZXRob2RDaGFpblwiOiBbXG4gKiAgICAge1wibmFtZVwiOiBcIm1ldGhvZE5hbWVcIiwgXCJhdG9tXCI6IHtcIm5hbWVcIjogXCJhdG9tTmFtZVwiLCBcImFyZ3NcIjogW1wiYXJnMVwiLCBcImFyZzJcIiwgLi4uXX19LFxuICogICAgIC4uLlxuICogICBdXG4gKiB9XG4gKlxuICovXG5jb21tYW5kcy5tb2JpbGVXZWJBdG9tcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVdlYkF0b21zIChvcHRzID0ge30pIHtcbiAgb3B0cyA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ21ldGhvZENoYWluJ10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvd2ViX2F0b21zYCwgJ1BPU1QnLCBvcHRzKTtcbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2Rpc3BsYXlfZGVuc2l0eScsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVTY3JvbGxUb1BhZ2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTY3JvbGxUb1BhZ2UgKG9wdHMgPSB7fSkge1xuXG4gIC8vIFZhbGlkYXRlIHRoZSBwYXJhbWV0ZXJzXG4gIGNvbnN0IHNjcm9sbFRvVHlwZXMgPSBbJ2ZpcnN0JywgJ2xhc3QnLCAnbGVmdCcsICdyaWdodCddO1xuICBjb25zdCByZXMgPSB2YWxpZGF0ZShvcHRzLCB7XG4gICAgZWxlbWVudDoge3ByZXNlbmNlOiB0cnVlfSxcbiAgICBzY3JvbGxUbzoge1xuICAgICAgaW5jbHVzaW9uOiB7XG4gICAgICAgIHdpdGhpbjogc2Nyb2xsVG9UeXBlcyxcbiAgICAgICAgbWVzc2FnZTogYFwic2Nyb2xsVG9cIiBtdXN0IGJlIG9uZSBvZiBcIiR7c2Nyb2xsVG9UeXBlcy5qb2luKCcsICcpfVwiIGZvdW5kICcle3ZhbHVlfSdgLFxuICAgICAgfVxuICAgIH0sXG4gICAgc2Nyb2xsVG9QYWdlOiB7XG4gICAgICBudW1lcmljYWxpdHk6IHtcbiAgICAgICAgb25seUludGVnZXI6IHRydWUsXG4gICAgICAgIGdyZWF0ZXJUaGFuT3JFcXVhbFRvOiAwLFxuICAgICAgICBtZXNzYWdlOiBgXCJzY3JvbGxUb1BhZ2VcIiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuIEZvdW5kICcle3ZhbHVlfSdgXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBpZiAodXRpbC5oYXNWYWx1ZShyZXMpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgSW52YWxpZCBzY3JvbGxUbyBwYXJhbWV0ZXJzOiAke0pTT04uc3RyaW5naWZ5KHJlcyl9YCk7XG4gIH1cblxuICBjb25zdCB7ZWxlbWVudCwgc2Nyb2xsVG8sIHNjcm9sbFRvUGFnZSwgc21vb3RoU2Nyb2xsfSA9IG9wdHM7XG5cbiAgaWYgKHV0aWwuaGFzVmFsdWUoc2Nyb2xsVG8pICYmIHV0aWwuaGFzVmFsdWUoc2Nyb2xsVG9QYWdlKSkge1xuICAgIHRoaXMubG9nLndhcm4oYCdzY3JvbGxUbycgYW5kICdzY3JvbGxUb1BhZ2UnIHdoZXJlIGJvdGggcHJvdmlkZWQuIERlZmF1bHRpbmcgdG8gJ3Njcm9sbFRvJ2ApO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9zY3JvbGxfdG9fcGFnZWAsICdQT1NUJywge1xuICAgIHNjcm9sbFRvLFxuICAgIHNjcm9sbFRvUGFnZSxcbiAgICBzbW9vdGhTY3JvbGwsXG4gIH0pO1xufTtcblxuXG4vKipcbiAqICBBUEkgdG8gaW52b2tlIG1ldGhvZHMgZGVmaW5lZCBpbiBBbmRyb2lkIGFwcC5cbiAqXG4gKiAgRXhhbXBsZSBkYXRhXG4gKiAge1xuICogICB0YXJnZXQ6ICdhY3Rpdml0eScsXG4gKiAgIG1ldGhvZHM6XG4gKiAgICAgICAgIFtcbiAqICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgIG5hbWU6IFwic29tZU1ldGhvZFwiLFxuICogICAgICAgICAgIH0sXG4gKiAgICAgICAgICAge1xuICogICAgICAgICAgICAgICBuYW1lOiBcImFub3RoZXJNZXRob2RcIixcbiAqICAgICAgICAgICAgICAgYXJnczpcbiAqICAgICAgICAgICAgICAgICAgIFtcbiAqICAgICAgICAgICAgICAgICAgICAgICB7dmFsdWU6IFwiTG9sXCIsIHR5cGU6ICdqYXZhLmxhbmcuQ2hhclNlcXVlbmNlJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAge3ZhbHVlOiAxLCB0eXBlOiAnaW50J31cbiAqICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICB9XG4gKiAgICAgICAgIF1cbiAqIH1cbiAqXG4gKiBJbiBhYm92ZSBleGFtcGxlLCBtZXRob2QgXCJzb21lTWV0aG9kXCIgd2lsbCBiZSBpbnZva2VkIG9uICdhY3Rpdml0eScuIE9uIHRoZSByZXN1bHQsIFwiYW5vdGhlck1ldGhvZFwiIHdpbGwgYmUgaW52b2tlZFxuICogIFwidGFyZ2V0XCIgY2FuIGJlIGVpdGhlciAnYWN0aXZpdHknLCAnYXBwbGljYXRpb24nIG9yICdlbGVtZW50J1xuICogIElmIHRhcmdldCBpcyBzZXQgdG8gJ2FwcGxpY2F0aW9uJywgbWV0aG9kcyB3aWxsIGJlIGludm9rZWQgb24gYXBwbGljYXRpb24gY2xhc3NcbiAqICBJZiB0YXJnZXQgaXMgc2V0IHRvICdhY3Rpdml0eScsIG1ldGhvZHMgd2lsbCBiZSBpbnZva2VkIG9uIGN1cnJlbnQgYWN0aXZpdHlcbiAqICBJZiB0YXJnZXQgaXMgc2V0IHRvICdlbGVtZW50JywgJ2VsZW1lbnRJZCcgbXVzdCBiZSBzcGVjaWZpZWRcbiAqXG4gKiAtIE9ubHkgJ1B1YmxpYycgbWV0aG9kcyBjYW4gYmUgaW52b2tlZC4gKCdvcGVuJyBtb2RpZmlyZSBpcyBuZWNlc3NhcnkgaW4gS290bGluKVxuICogLSBmb2xsb3dpbmcgcHJpbWl0aXZlIHR5cGVzIGFyZSBzdXBwb3J0ZWQ6IFwiaW50XCIsIFwiYm9vbGVhblwiLCBcImJ5dGVcIiwgXCJzaG9ydFwiLCBcImxvbmdcIiwgXCJmbG9hdFwiLCBcImNoYXJcIlxuICogLSAgTm9uLXByaW1pdGl2ZSB0eXBlcyB3aXRoIGZ1bGx5IHF1YWxpZmllZCBuYW1lIFwiamF2YS5sYW5nLipcIiBpcyBhbHNvIHN1cHBvcnRlZDpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWcuIFwiamF2YS5sYW5nLkNoYXJTZXF1ZW5jZVwiLCBcImphdmEubGFuZy5TdHJpbmdcIiwgXCJqYXZhLmxhbmcuSW50ZWdlclwiLCBcImphdmEubGFuZy5GbG9hdFwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphdmEubGFuZy5Eb3VibGVcIiwgXCJqYXZhLmxhbmcuQm9vbGVhblwiLCBcImphdmEubGFuZy5Mb25nXCIsIFwiamF2YS5sYW5nLlNob3J0XCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiamF2YS5sYW5nLkNoYXJhY3RlclwiIGV0Yy4uLlxuICpcbiAqXG4gKiBAdGhyb3dzICB7RXJyb3J9IGlmIHRhcmdldCBpcyBub3QgJ2FjdGl2aXR5JyBvciAnYXBwbGljYXRpb24nXG4gKiBAdGhyb3dzICB7RXJyb3J9IGlmIGEgbWV0aG9kIGlzIG5vdCBmb3VuZCB3aXRoIGdpdmVuIGFyZ3VtZW50IHR5cGVzXG4gKlxuICogQHJldHVybiB7Kn0gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBtZXRob2QgaW4gdGhlIGludm9jYXRpb24gY2hhaW4uIElmIG1ldGhvZCByZXR1cm4gdHlwZSBpcyB2b2lkLCB0aGVuIFwiPFZPSUQ+XCIgd2lsbCBiZSByZXR1cm5lZFxuICpcbiAqL1xuY29tbWFuZHMubW9iaWxlQmFja2Rvb3IgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVCYWNrZG9vciAob3B0cyA9IHt9KSB7XG4gIGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ3RhcmdldCcsICdtZXRob2RzJ10pO1xuICBjb25zdCB7dGFyZ2V0LCBtZXRob2RzfSA9IG9wdHM7XG4gIGlmICh0YXJnZXQgPT09ICdlbGVtZW50Jykge1xuICAgIGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnRJZCddKTtcbiAgfVxuICBjb25zdCB7ZWxlbWVudElkOiB0YXJnZXRFbGVtZW50fSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS9iYWNrZG9vcmAsICdQT1NUJywge3RhcmdldCwgbWV0aG9kcywgdGFyZ2V0RWxlbWVudH0pO1xufTtcblxuLyoqXG4gKiAgRXhlY3V0ZSBVaUF1dG9tYXRvcjIgY29tbWFuZHMgdG8gZHJpdmUgb3V0IG9mIGFwcCBhcmVhcy5cbiAqICBzdHJhdGVneSBjYW4gYmUgb25lIG9mOiBcImNsYXp6XCIsIFwicmVzXCIsIFwidGV4dFwiLCBcInRleHRDb250YWluc1wiLCBcInRleHRFbmRzV2l0aFwiLCBcInRleHRTdGFydHNXaXRoXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkZXNjXCIsIFwiZGVzY0NvbnRhaW5zXCIsIFwiZGVzY0VuZHNXaXRoXCIsIFwiZGVzY1N0YXJ0c1dpdGhcIiwgXCJwa2dcIlxuICpcbiAqICBhY3Rpb24gY2FuIGJlIG9uZSBvZjogXCJjbGlja1wiLCBcImxvbmdDbGlja1wiLCBcImdldFRleHRcIiwgXCJnZXRDb250ZW50RGVzY3JpcHRpb25cIiwgXCJnZXRDbGFzc05hbWVcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJnZXRSZXNvdXJjZU5hbWVcIiwgXCJnZXRWaXNpYmxlQm91bmRzXCIsIFwiZ2V0VmlzaWJsZUNlbnRlclwiLCBcImdldEFwcGxpY2F0aW9uUGFja2FnZVwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImdldENoaWxkQ291bnRcIiwgXCJjbGVhclwiLCBcImlzQ2hlY2thYmxlXCIsIFwiaXNDaGVja2VkXCIsIFwiaXNDbGlja2FibGVcIiwgXCJpc0VuYWJsZWRcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJpc0ZvY3VzYWJsZVwiLCBcImlzRm9jdXNlZFwiLCBcImlzTG9uZ0NsaWNrYWJsZVwiLCBcImlzU2Nyb2xsYWJsZVwiLCBcImlzU2VsZWN0ZWRcIlxuICovXG5jb21tYW5kcy5tb2JpbGVVaWF1dG9tYXRvciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVVpYXV0b21hdG9yIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3N0cmF0ZWd5LCBsb2NhdG9yLCBhY3Rpb24sIGluZGV4fSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ3N0cmF0ZWd5JywgJ2xvY2F0b3InLCAnYWN0aW9uJ10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvdWlhdXRvbWF0b3JgLCAnUE9TVCcsIHtzdHJhdGVneSwgbG9jYXRvciwgaW5kZXgsIGFjdGlvbn0pO1xufTtcblxuLyoqXG4gKiAgRXhlY3V0ZSBVaUF1dG9tYXRvcjIgY29tbWFuZCB0byByZXR1cm4gdGhlIFVJIGR1bXAgd2hlbiBBVVQgaXMgaW4gYmFja2dyb3VuZC5cbiAqIEB0aHJvd3MgIHtFcnJvcn0gaWYgdWlhdXRvbWF0b3IgdmlldyBkdW1wIGlzIHVuc3VjY2Vzc2Z1bFxuICogQHJldHVybnMge3N0cmluZ30gdWlhdXRvbWF0b3IgRE9NIHhtbCBhcyBzdHJpbmdcbiAqL1xuY29tbWFuZHMubW9iaWxlVWlhdXRvbWF0b3JQYWdlU291cmNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVWlhdXRvbWF0b3JQYWdlU291cmNlICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL3VpYXV0b21hdG9yX3BhZ2Vfc291cmNlYCwgJ0dFVCcpO1xufTtcblxuLyoqXG4gKiAgRmxhc2ggdGhlIGVsZW1lbnQgd2l0aCBnaXZlbiBpZC5cbiAqICBkdXJhdGlvbk1pbGxpcyBhbmQgcmVwZWF0Q291bnQgYXJlIG9wdGlvbmFsXG4gKlxuICovXG5jb21tYW5kcy5tb2JpbGVGbGFzaEVsZW1lbnQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVGbGFzaEVsZW1lbnQgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuICBjb25zdCB7ZHVyYXRpb25NaWxsaXMsIHJlcGVhdENvdW50fSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vZmxhc2hgLCAnUE9TVCcsIHtcbiAgICBkdXJhdGlvbk1pbGxpcyxcbiAgICByZXBlYXRDb3VudFxuICB9KTtcbn07XG5cbi8qKlxuICogUGVyZm9ybSBhICdHZW5lcmFsQ2xpY2tBY3Rpb24nIChodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZHgvdGVzdC9lc3ByZXNzby9hY3Rpb24vR2VuZXJhbENsaWNrQWN0aW9uKVxuICovXG5jb21tYW5kcy5tb2JpbGVDbGlja0FjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsaWNrQWN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIHRhcHBlciwgY29vcmRpbmF0ZXNQcm92aWRlciwgcHJlY2lzaW9uRGVzY3JpYmVyLFxuICAgICAgICAgaW5wdXREZXZpY2UsIGJ1dHRvblN0YXRlfSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vY2xpY2tfYWN0aW9uYCwgJ1BPU1QnLCB7XG4gICAgdGFwcGVyLCBjb29yZGluYXRlc1Byb3ZpZGVyLCBwcmVjaXNpb25EZXNjcmliZXIsIGlucHV0RGV2aWNlLCBidXR0b25TdGF0ZVxuICB9KTtcbn07XG5cbmNvbW1hbmRzLnVwZGF0ZVNldHRpbmdzID0gYXN5bmMgZnVuY3Rpb24gdXBkYXRlU2V0dGluZ3MgKHNldHRpbmdzKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9zZXR0aW5nc2AsICdQT1NUJywgeyBzZXR0aW5ncyB9KTtcbn07XG5cbmNvbW1hbmRzLmdldFNldHRpbmdzID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2V0dGluZ3MgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vc2V0dGluZ3NgLCAnR0VUJyk7XG59O1xuXG4vLyBTdG9wIHByb3h5aW5nIHRvIGFueSBDaHJvbWVkcml2ZXIgYW5kIHJlZGlyZWN0IHRvIEVzcHJlc3NvXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uIHN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSAoKSB7XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuZXNwcmVzc28ucHJveHlSZXFSZXMuYmluZCh0aGlzLmVzcHJlc3NvKTtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLmVzcHJlc3NvLnByb3h5Q29tbWFuZC5iaW5kKHRoaXMuZXNwcmVzc28pO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogIFN0YXJ0cyB0aGUgZ2l2ZW4gYWN0aXZpdHkgd2l0aCBpbnRlbnQgb3B0aW9ucywgYWN0aXZpdHkgb3B0aW9ucyBhbmQgbG9jYWxlLlxuICogIEFjdGl2aXR5IGNvdWxkIG9ubHkgYmUgZXhlY3V0ZWQgaW4gc2NvcGUgb2YgdGhlIGN1cnJlbnQgYXBwIHBhY2thZ2UuXG4gKlxuICogIGFwcEFjdGl2aXR5IGlzIG1hbmRhdG9yeVxuICpcbiAqICBsb2NhbGUsIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLCBvcHRpb25hbEFjdGl2aXR5QXJndW1lbnRzIGFyZSBvcHRpb25hbFxuICovXG5jb21tYW5kcy5tb2JpbGVTdGFydEFjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3RhcnRBY3Rpdml0eSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IGFwcFBhY2thZ2UgPSB0aGlzLmNhcHMuYXBwUGFja2FnZTtcbiAgY29uc3Qge1xuICAgIGFwcEFjdGl2aXR5LFxuICAgIGxvY2FsZSxcbiAgICBvcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICBvcHRpb25hbEFjdGl2aXR5QXJndW1lbnRzXG4gIH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydhcHBBY3Rpdml0eSddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2RldmljZS9zdGFydF9hY3Rpdml0eWAsICdQT1NUJywge1xuICAgIGFwcFBhY2thZ2UsXG4gICAgYXBwQWN0aXZpdHksXG4gICAgbG9jYWxlLFxuICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLFxuICAgIG9wdGlvbmFsQWN0aXZpdHlBcmd1bWVudHNcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5zdGFydEFjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRBY3Rpdml0eSAoYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksXG4gIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHkpIHtcbiAgLy8gaW50ZW50QWN0aW9uLCBpbnRlbnRDYXRlZ29yeSwgaW50ZW50RmxhZ3MsIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLCBkb250U3RvcEFwcE9uUmVzZXRcbiAgLy8gcGFyYW1ldGVycyBhcmUgbm90IHN1cHBvcnRlZCBieSBFc3ByZXNzb1xuICBhcHBQYWNrYWdlID0gYXBwUGFja2FnZSB8fCB0aGlzLmNhcHMuYXBwUGFja2FnZTtcbiAgYXBwV2FpdFBhY2thZ2UgPSBhcHBXYWl0UGFja2FnZSB8fCBhcHBQYWNrYWdlO1xuICBhcHBBY3Rpdml0eSA9IHF1YWxpZnlBY3Rpdml0eU5hbWUoYXBwQWN0aXZpdHksIGFwcFBhY2thZ2UpO1xuICBhcHBXYWl0QWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcFdhaXRBY3Rpdml0eSB8fCBhcHBBY3Rpdml0eSwgYXBwV2FpdFBhY2thZ2UpO1xuICB0aGlzLmxvZy5kZWJ1ZyhgU3RhcnRpbmcgYWN0aXZpdHkgJyR7YXBwQWN0aXZpdHl9JyBmb3IgcGFja2FnZSAnJHthcHBQYWNrYWdlfSdgKTtcbiAgYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZGV2aWNlL3N0YXJ0X2FjdGl2aXR5YCwgJ1BPU1QnLCB7XG4gICAgYXBwUGFja2FnZSxcbiAgICBhcHBBY3Rpdml0eSxcbiAgfSk7XG4gIGF3YWl0IHRoaXMuYWRiLndhaXRGb3JBY3Rpdml0eShhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZURpc21pc3NBdXRvZmlsbCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZURpc21pc3NBdXRvZmlsbCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50fSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG4gIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKFxuICAgIGAvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vZGlzbWlzc19hdXRvZmlsbGAsICdQT1NUJywge30pO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7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
|