appium-uiautomator2-driver 2.21.0 → 2.22.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 CHANGED
@@ -1,3 +1,10 @@
1
+ ## [2.22.0](https://github.com/appium/appium-uiautomator2-driver/compare/v2.21.0...v2.22.0) (2023-04-28)
2
+
3
+
4
+ ### Features
5
+
6
+ * Add more mobile extensions ([#606](https://github.com/appium/appium-uiautomator2-driver/issues/606)) ([55a1e79](https://github.com/appium/appium-uiautomator2-driver/commit/55a1e798ac73c812ad7cc0d8897d330f9d51c2b0))
7
+
1
8
  ## [2.21.0](https://github.com/appium/appium-uiautomator2-driver/compare/v2.20.0...v2.21.0) (2023-04-27)
2
9
 
3
10
 
package/README.md CHANGED
@@ -1161,6 +1161,99 @@ Values are dictionaries with the following properties:
1161
1161
  - `width`: Bar width (might be zero if the bar is not present in the system info output)
1162
1162
  - `height`: Bar height (might be zero if the bar is not present in the system info output)
1163
1163
 
1164
+ ### mobile: fingerprint
1165
+
1166
+ Emulate [fingerprint](https://learn.microsoft.com/en-us/xamarin/android/platform/fingerprint-authentication/enrolling-fingerprint) on Android Emulator. Only works on API 23+. Available since driver version 2.22
1167
+
1168
+ #### Arguments
1169
+
1170
+ Name | Type | Required | Description | Example
1171
+ --- | --- | --- | --- | ---
1172
+ fingerprintId | number | yes | The value is the id for the finger that was "scanned". It is a unique integer that you assign for each virtual fingerprint. When the app is running you can run this same command each time the emulator prompts you for a fingerprint, you can run the adb command and pass it the fingerprintId to simulate the fingerprint scan. | 1
1173
+
1174
+ ### mobile: sendSms
1175
+
1176
+ Emulate sending an SMS to the given phone number. Only works on emulators. Available since driver version 2.22
1177
+
1178
+ #### Arguments
1179
+
1180
+ Name | Type | Required | Description | Example
1181
+ --- | --- | --- | --- | ---
1182
+ phoneNumber | string | yes | The phone number to send SMS to | 0123456789
1183
+ message | string | yes | The SMS message payload | Hello
1184
+
1185
+ ### mobile: gsmCall
1186
+
1187
+ Emulate a GSM call to the given phone number. Only works on emulators. Available since driver version 2.22
1188
+
1189
+ #### Arguments
1190
+
1191
+ Name | Type | Required | Description | Example
1192
+ --- | --- | --- | --- | ---
1193
+ phoneNumber | string | yes | The phone number to call to | 0123456789
1194
+ action | call or accept or cancel or hold | yes | One of possible actions to take | accept
1195
+
1196
+ ### mobile: gsmSignal
1197
+
1198
+ Emulate GSM signal strength change event. Only works on emulators. Available since driver version 2.22
1199
+
1200
+ #### Arguments
1201
+
1202
+ Name | Type | Required | Description | Example
1203
+ --- | --- | --- | --- | ---
1204
+ strength | 0 or 1 or 2 or 3 or 4 | yes | One of possible signal strength values, where 4 is the best signal. | 3
1205
+
1206
+ ### mobile: gsmVoice
1207
+
1208
+ Emulate a GSM call to the given phone number. Only works on emulators. Available since driver version 2.22
1209
+
1210
+ #### Arguments
1211
+
1212
+ Name | Type | Required | Description | Example
1213
+ --- | --- | --- | --- | ---
1214
+ state | on or off | yes | Voice state | off
1215
+
1216
+ ### mobile: powerAC
1217
+
1218
+ Emulate AC power state change. Only works on emulators. Available since driver version 2.22
1219
+
1220
+ #### Arguments
1221
+
1222
+ Name | Type | Required | Description | Example
1223
+ --- | --- | --- | --- | ---
1224
+ state | on or off | yes | AC Power state | off
1225
+
1226
+ ### mobile: powerCapacity
1227
+
1228
+ Emulate power capacity change. Only works on emulators. Available since driver version 2.22
1229
+
1230
+ #### Arguments
1231
+
1232
+ Name | Type | Required | Description | Example
1233
+ --- | --- | --- | --- | ---
1234
+ percent | 0 to 100 | yes | Percentage value in range [0, 100] | 50
1235
+
1236
+ ### mobile: networkSpeed
1237
+
1238
+ Emulate different network connection speed modes. Only works on emulators. Available since driver version 2.22
1239
+
1240
+ #### Arguments
1241
+
1242
+ Name | Type | Required | Description | Example
1243
+ --- | --- | --- | --- | ---
1244
+ speed | gsm or scsd or gprs or edge or umts or hsdpa or lte or evdo or full | yes | Mobile network speed mode name | edge
1245
+
1246
+ ### mobile: replaceElementValue
1247
+
1248
+ Sends a text to the given element by replacing its previous content. Available since driver version 2.22
1249
+
1250
+ #### Arguments
1251
+
1252
+ Name | Type | Required | Description | Example
1253
+ --- | --- | --- | --- | ---
1254
+ elementId | string | yes | Hexadecimal identifier of the destination text input | 123456-3456-3435-3453453
1255
+ text | string | yes | The text to enter. It could also contain Unicode characters. If the text ends with `\\n` (the backslash must be escaped, so the char is NOT translated into `0x0A`) then the Enter key press is going to be emulated after it is entered (the `\\n` substring itself will be cut off from the typed text). | yolo
1256
+
1164
1257
 
1165
1258
  ## Applications Management
1166
1259
 
@@ -9,6 +9,7 @@ require("source-map-support/register");
9
9
  var _lodash = _interopRequireDefault(require("lodash"));
10
10
  var _support = require("appium/support");
11
11
  var _driver = require("appium/driver");
12
+ var _utils = require("../utils");
12
13
  let commands = {},
13
14
  helpers = {},
14
15
  extensions = {};
@@ -148,7 +149,17 @@ commands.getElementRect = async function (elementId) {
148
149
  }
149
150
  return await this.uiautomator2.jwproxy.command(`/element/${elementId}/rect`, 'GET');
150
151
  };
152
+ commands.mobileReplaceElementValue = async function mobileReplaceElementValue(opts = {}) {
153
+ const {
154
+ elementId,
155
+ text
156
+ } = (0, _utils.requireArgs)(['elementId', 'text'], opts);
157
+ return await this.uiautomator2.jwproxy.command(`/element/${elementId}/value`, 'POST', {
158
+ text,
159
+ replace: true
160
+ });
161
+ };
151
162
  Object.assign(extensions, commands, helpers);
152
163
  var _default = extensions;
153
164
  exports.default = _default;
154
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc3VwcG9ydCIsIl9kcml2ZXIiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZXhwb3J0cyIsInRvQm9vbCIsInMiLCJfIiwiaXNTdHJpbmciLCJ0b0xvd2VyQ2FzZSIsImFjdGl2ZSIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiZ2V0QXR0cmlidXRlIiwiYXR0cmlidXRlIiwiZWxlbWVudElkIiwiZWxlbWVudERpc3BsYXllZCIsImVsZW1lbnRFbmFibGVkIiwiZWxlbWVudFNlbGVjdGVkIiwiZ2V0TmFtZSIsImdldExvY2F0aW9uIiwiZ2V0U2l6ZSIsInRvdWNoTG9uZ0NsaWNrIiwiZWxlbWVudCIsIngiLCJ5IiwiZHVyYXRpb24iLCJwYXJhbXMiLCJ0b3VjaERvd24iLCJ0b3VjaFVwIiwidG91Y2hNb3ZlIiwiZG9TZXRFbGVtZW50VmFsdWUiLCJzZXRWYWx1ZUltbWVkaWF0ZSIsImtleXMiLCJ0ZXh0IiwiaXNBcnJheSIsImpvaW4iLCJyZXBsYWNlIiwiZ2V0VGV4dCIsImNsaWNrIiwiZ2V0RWxlbWVudFNjcmVlbnNob3QiLCJ0YXAiLCJjb3VudCIsImFyZUNvb3JkaW5hdGVzRGVmaW5lZCIsInV0aWwiLCJoYXNWYWx1ZSIsIkVycm9yIiwiaSIsIlczQ19FTEVNRU5UX0tFWSIsImNsZWFyIiwiZ2V0RWxlbWVudFJlY3QiLCJpc1dlYkNvbnRleHQiLCJsb2ciLCJkZWJ1ZyIsImNocm9tZWRyaXZlciIsImRvd25zdHJlYW1Qcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJ3aWR0aCIsImhlaWdodCIsIk9iamVjdCIsImFzc2lnbiIsIl9kZWZhdWx0IiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9lbGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgUFJPVE9DT0xTLCBXM0NfRUxFTUVOVF9LRVkgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiB0b0Jvb2wgKHMpIHtcbiAgcmV0dXJuIF8uaXNTdHJpbmcocykgPyAocy50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpIDogISFzO1xufVxuXG5jb21tYW5kcy5hY3RpdmUgPSBhc3luYyBmdW5jdGlvbiBhY3RpdmUgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvZWxlbWVudC9hY3RpdmUnLCAnR0VUJyk7XG59O1xuXG5jb21tYW5kcy5nZXRBdHRyaWJ1dGUgPSBhc3luYyBmdW5jdGlvbiAoYXR0cmlidXRlLCBlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L2F0dHJpYnV0ZS8ke2F0dHJpYnV0ZX1gLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZWxlbWVudERpc3BsYXllZCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIHRvQm9vbChhd2FpdCB0aGlzLmdldEF0dHJpYnV0ZSgnZGlzcGxheWVkJywgZWxlbWVudElkKSk7XG59O1xuXG5jb21tYW5kcy5lbGVtZW50RW5hYmxlZCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIHRvQm9vbChhd2FpdCB0aGlzLmdldEF0dHJpYnV0ZSgnZW5hYmxlZCcsIGVsZW1lbnRJZCkpO1xufTtcblxuY29tbWFuZHMuZWxlbWVudFNlbGVjdGVkID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gdG9Cb29sKGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsIGVsZW1lbnRJZCkpO1xufTtcblxuY29tbWFuZHMuZ2V0TmFtZSA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L25hbWVgLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0TG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9sb2NhdGlvbmAsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5nZXRTaXplID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vc2l6ZWAsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy50b3VjaExvbmdDbGljayA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50LCB4LCB5LCBkdXJhdGlvbikge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnQsIHgsIHksIGR1cmF0aW9ufTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL3RvdWNoL2xvbmdjbGlja2AsICdQT1NUJywge3BhcmFtc30pO1xufTtcblxuY29tbWFuZHMudG91Y2hEb3duID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnQsIHgsIHkpIHtcbiAgbGV0IHBhcmFtcyA9IHtlbGVtZW50LCB4LCB5fTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL3RvdWNoL2Rvd25gLCAnUE9TVCcsIHtwYXJhbXN9KTtcbn07XG5cbmNvbW1hbmRzLnRvdWNoVXAgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCwgeCwgeSkge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnQsIHgsIHl9O1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvdG91Y2gvdXBgLCAnUE9TVCcsIHtwYXJhbXN9KTtcbn07XG5cbmNvbW1hbmRzLnRvdWNoTW92ZSA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50LCB4LCB5KSB7XG4gIGxldCBwYXJhbXMgPSB7ZWxlbWVudCwgeCwgeX07XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC90b3VjaC9tb3ZlYCwgJ1BPU1QnLCB7cGFyYW1zfSk7XG59O1xuXG5oZWxwZXJzLmRvU2V0RWxlbWVudFZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHBhcmFtcykge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke3BhcmFtcy5lbGVtZW50SWR9L3ZhbHVlYCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuY29tbWFuZHMuc2V0VmFsdWVJbW1lZGlhdGUgPSBhc3luYyBmdW5jdGlvbiAoa2V5cywgZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS92YWx1ZWAsICdQT1NUJywge1xuICAgIGVsZW1lbnRJZCxcbiAgICB0ZXh0OiBfLmlzQXJyYXkoa2V5cykgPyBrZXlzLmpvaW4oJycpIDoga2V5cyxcbiAgICByZXBsYWNlOiBmYWxzZVxuICB9KTtcbn07XG5cbmNvbW1hbmRzLmdldFRleHQgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS90ZXh0YCwgJ0dFVCcsIHt9KTtcbn07XG5cbmNvbW1hbmRzLmNsaWNrID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50fS9jbGlja2AsICdQT1NUJywge2VsZW1lbnR9KTtcbn07XG5cbmNvbW1hbmRzLmdldEVsZW1lbnRTY3JlZW5zaG90ID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50fS9zY3JlZW5zaG90YCwgJ0dFVCcsIHt9KTtcbn07XG5cbmNvbW1hbmRzLnRhcCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQgPSBudWxsLCB4ID0gbnVsbCwgeSA9IG51bGwsIGNvdW50ID0gMSkge1xuICBjb25zdCBhcmVDb29yZGluYXRlc0RlZmluZWQgPSB1dGlsLmhhc1ZhbHVlKHgpICYmIHV0aWwuaGFzVmFsdWUoeSk7XG4gIGlmICghdXRpbC5oYXNWYWx1ZShlbGVtZW50SWQpICYmICFhcmVDb29yZGluYXRlc0RlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVpdGhlciBlbGVtZW50IGlkIHRvIHRhcCBvciBib3RoIGFic29sdXRlIGNvb3JkaW5hdGVzIHNob3VsZCBiZSBkZWZpbmVkYCk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShlbGVtZW50SWQpICYmICFhcmVDb29yZGluYXRlc0RlZmluZWQpIHtcbiAgICAgIC8vIHdlIGFyZSBlaXRoZXIgdGFwcGluZyBvbiB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgZWxlbWVudFxuICAgICAgLy8gb3IgYW4gb2Zmc2V0IGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lclxuICAgICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vY2xpY2tgLCAnUE9TVCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vdGFwYCwgJ1BPU1QnLCB7XG4gICAgICAgIHgsIHksXG4gICAgICAgIFtXM0NfRUxFTUVOVF9LRVldOiBlbGVtZW50SWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbW1hbmRzLmNsZWFyID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vY2xlYXJgLCAnUE9TVCcsIHtlbGVtZW50SWR9KTtcbn07XG5cbmNvbW1hbmRzLmdldEVsZW1lbnRSZWN0ID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICBpZiAodGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRoaXMubG9nLmRlYnVnKGBEZXRlY3RlZCBkb3duc3RyZWFtIGNocm9tZWRyaXZlciBwcm90b2NvbDogJHt0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmRvd25zdHJlYW1Qcm90b2NvbH1gKTtcbiAgICBpZiAodGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5kb3duc3RyZWFtUHJvdG9jb2wgPT09IFBST1RPQ09MUy5NSlNPTldQKSB7XG4gICAgICBjb25zdCB7eCwgeX0gPSBhd2FpdCB0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9sb2NhdGlvbmAsICdHRVQnKTtcbiAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L3NpemVgLCAnR0VUJyk7XG4gICAgICByZXR1cm4ge3gsIHksIHdpZHRoLCBoZWlnaHR9O1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vcmVjdGAsICdHRVQnKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vcmVjdGAsICdHRVQnKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBRUEsSUFBSUcsUUFBUSxHQUFHLENBQUMsQ0FBQztFQUFFQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFBQ0MsT0FBQSxDQUFBRixPQUFBLEdBQUFBLE9BQUE7QUFBQUUsT0FBQSxDQUFBSCxRQUFBLEdBQUFBLFFBQUE7QUFFakQsU0FBU0ksTUFBTUEsQ0FBRUMsQ0FBQyxFQUFFO0VBQ2xCLE9BQU9DLGVBQUMsQ0FBQ0MsUUFBUSxDQUFDRixDQUFDLENBQUMsR0FBSUEsQ0FBQyxDQUFDRyxXQUFXLEVBQUUsS0FBSyxNQUFNLEdBQUksQ0FBQyxDQUFDSCxDQUFDO0FBQzNEO0FBRUFMLFFBQVEsQ0FBQ1MsTUFBTSxHQUFHLGVBQWVBLE1BQU1BLENBQUEsRUFBSTtFQUN6QyxPQUFPLE1BQU0sSUFBSSxDQUFDQyxZQUFZLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQztBQUMxRSxDQUFDO0FBRURaLFFBQVEsQ0FBQ2EsWUFBWSxHQUFHLGdCQUFnQkMsU0FBUyxFQUFFQyxTQUFTLEVBQUU7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
165
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc3VwcG9ydCIsIl9kcml2ZXIiLCJfdXRpbHMiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZXhwb3J0cyIsInRvQm9vbCIsInMiLCJfIiwiaXNTdHJpbmciLCJ0b0xvd2VyQ2FzZSIsImFjdGl2ZSIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiZ2V0QXR0cmlidXRlIiwiYXR0cmlidXRlIiwiZWxlbWVudElkIiwiZWxlbWVudERpc3BsYXllZCIsImVsZW1lbnRFbmFibGVkIiwiZWxlbWVudFNlbGVjdGVkIiwiZ2V0TmFtZSIsImdldExvY2F0aW9uIiwiZ2V0U2l6ZSIsInRvdWNoTG9uZ0NsaWNrIiwiZWxlbWVudCIsIngiLCJ5IiwiZHVyYXRpb24iLCJwYXJhbXMiLCJ0b3VjaERvd24iLCJ0b3VjaFVwIiwidG91Y2hNb3ZlIiwiZG9TZXRFbGVtZW50VmFsdWUiLCJzZXRWYWx1ZUltbWVkaWF0ZSIsImtleXMiLCJ0ZXh0IiwiaXNBcnJheSIsImpvaW4iLCJyZXBsYWNlIiwiZ2V0VGV4dCIsImNsaWNrIiwiZ2V0RWxlbWVudFNjcmVlbnNob3QiLCJ0YXAiLCJjb3VudCIsImFyZUNvb3JkaW5hdGVzRGVmaW5lZCIsInV0aWwiLCJoYXNWYWx1ZSIsIkVycm9yIiwiaSIsIlczQ19FTEVNRU5UX0tFWSIsImNsZWFyIiwiZ2V0RWxlbWVudFJlY3QiLCJpc1dlYkNvbnRleHQiLCJsb2ciLCJkZWJ1ZyIsImNocm9tZWRyaXZlciIsImRvd25zdHJlYW1Qcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJ3aWR0aCIsImhlaWdodCIsIm1vYmlsZVJlcGxhY2VFbGVtZW50VmFsdWUiLCJvcHRzIiwicmVxdWlyZUFyZ3MiLCJPYmplY3QiLCJhc3NpZ24iLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZWxlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IFBST1RPQ09MUywgVzNDX0VMRU1FTlRfS0VZIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyByZXF1aXJlQXJncyB9IGZyb20gJy4uL3V0aWxzJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiB0b0Jvb2wgKHMpIHtcbiAgcmV0dXJuIF8uaXNTdHJpbmcocykgPyAocy50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpIDogISFzO1xufVxuXG5jb21tYW5kcy5hY3RpdmUgPSBhc3luYyBmdW5jdGlvbiBhY3RpdmUgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvZWxlbWVudC9hY3RpdmUnLCAnR0VUJyk7XG59O1xuXG5jb21tYW5kcy5nZXRBdHRyaWJ1dGUgPSBhc3luYyBmdW5jdGlvbiAoYXR0cmlidXRlLCBlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L2F0dHJpYnV0ZS8ke2F0dHJpYnV0ZX1gLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZWxlbWVudERpc3BsYXllZCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIHRvQm9vbChhd2FpdCB0aGlzLmdldEF0dHJpYnV0ZSgnZGlzcGxheWVkJywgZWxlbWVudElkKSk7XG59O1xuXG5jb21tYW5kcy5lbGVtZW50RW5hYmxlZCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIHRvQm9vbChhd2FpdCB0aGlzLmdldEF0dHJpYnV0ZSgnZW5hYmxlZCcsIGVsZW1lbnRJZCkpO1xufTtcblxuY29tbWFuZHMuZWxlbWVudFNlbGVjdGVkID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gdG9Cb29sKGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsIGVsZW1lbnRJZCkpO1xufTtcblxuY29tbWFuZHMuZ2V0TmFtZSA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L25hbWVgLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0TG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9sb2NhdGlvbmAsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5nZXRTaXplID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vc2l6ZWAsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy50b3VjaExvbmdDbGljayA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50LCB4LCB5LCBkdXJhdGlvbikge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnQsIHgsIHksIGR1cmF0aW9ufTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL3RvdWNoL2xvbmdjbGlja2AsICdQT1NUJywge3BhcmFtc30pO1xufTtcblxuY29tbWFuZHMudG91Y2hEb3duID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnQsIHgsIHkpIHtcbiAgbGV0IHBhcmFtcyA9IHtlbGVtZW50LCB4LCB5fTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL3RvdWNoL2Rvd25gLCAnUE9TVCcsIHtwYXJhbXN9KTtcbn07XG5cbmNvbW1hbmRzLnRvdWNoVXAgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCwgeCwgeSkge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnQsIHgsIHl9O1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvdG91Y2gvdXBgLCAnUE9TVCcsIHtwYXJhbXN9KTtcbn07XG5cbmNvbW1hbmRzLnRvdWNoTW92ZSA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50LCB4LCB5KSB7XG4gIGxldCBwYXJhbXMgPSB7ZWxlbWVudCwgeCwgeX07XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC90b3VjaC9tb3ZlYCwgJ1BPU1QnLCB7cGFyYW1zfSk7XG59O1xuXG5oZWxwZXJzLmRvU2V0RWxlbWVudFZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHBhcmFtcykge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke3BhcmFtcy5lbGVtZW50SWR9L3ZhbHVlYCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuY29tbWFuZHMuc2V0VmFsdWVJbW1lZGlhdGUgPSBhc3luYyBmdW5jdGlvbiAoa2V5cywgZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS92YWx1ZWAsICdQT1NUJywge1xuICAgIGVsZW1lbnRJZCxcbiAgICB0ZXh0OiBfLmlzQXJyYXkoa2V5cykgPyBrZXlzLmpvaW4oJycpIDoga2V5cyxcbiAgICByZXBsYWNlOiBmYWxzZVxuICB9KTtcbn07XG5cbmNvbW1hbmRzLmdldFRleHQgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS90ZXh0YCwgJ0dFVCcsIHt9KTtcbn07XG5cbmNvbW1hbmRzLmNsaWNrID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50fS9jbGlja2AsICdQT1NUJywge2VsZW1lbnR9KTtcbn07XG5cbmNvbW1hbmRzLmdldEVsZW1lbnRTY3JlZW5zaG90ID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50fS9zY3JlZW5zaG90YCwgJ0dFVCcsIHt9KTtcbn07XG5cbmNvbW1hbmRzLnRhcCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQgPSBudWxsLCB4ID0gbnVsbCwgeSA9IG51bGwsIGNvdW50ID0gMSkge1xuICBjb25zdCBhcmVDb29yZGluYXRlc0RlZmluZWQgPSB1dGlsLmhhc1ZhbHVlKHgpICYmIHV0aWwuaGFzVmFsdWUoeSk7XG4gIGlmICghdXRpbC5oYXNWYWx1ZShlbGVtZW50SWQpICYmICFhcmVDb29yZGluYXRlc0RlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVpdGhlciBlbGVtZW50IGlkIHRvIHRhcCBvciBib3RoIGFic29sdXRlIGNvb3JkaW5hdGVzIHNob3VsZCBiZSBkZWZpbmVkYCk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShlbGVtZW50SWQpICYmICFhcmVDb29yZGluYXRlc0RlZmluZWQpIHtcbiAgICAgIC8vIHdlIGFyZSBlaXRoZXIgdGFwcGluZyBvbiB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgZWxlbWVudFxuICAgICAgLy8gb3IgYW4gb2Zmc2V0IGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lclxuICAgICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vY2xpY2tgLCAnUE9TVCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vdGFwYCwgJ1BPU1QnLCB7XG4gICAgICAgIHgsIHksXG4gICAgICAgIFtXM0NfRUxFTUVOVF9LRVldOiBlbGVtZW50SWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbW1hbmRzLmNsZWFyID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vY2xlYXJgLCAnUE9TVCcsIHtlbGVtZW50SWR9KTtcbn07XG5cbmNvbW1hbmRzLmdldEVsZW1lbnRSZWN0ID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICBpZiAodGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRoaXMubG9nLmRlYnVnKGBEZXRlY3RlZCBkb3duc3RyZWFtIGNocm9tZWRyaXZlciBwcm90b2NvbDogJHt0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmRvd25zdHJlYW1Qcm90b2NvbH1gKTtcbiAgICBpZiAodGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5kb3duc3RyZWFtUHJvdG9jb2wgPT09IFBST1RPQ09MUy5NSlNPTldQKSB7XG4gICAgICBjb25zdCB7eCwgeX0gPSBhd2FpdCB0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9sb2NhdGlvbmAsICdHRVQnKTtcbiAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L3NpemVgLCAnR0VUJyk7XG4gICAgICByZXR1cm4ge3gsIHksIHdpZHRoLCBoZWlnaHR9O1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vcmVjdGAsICdHRVQnKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vcmVjdGAsICdHRVQnKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUmVwbGFjZVZhbHVlT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGVsZW1lbnRJZCBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgd2hvc2UgY29udGVudCB3aWxsIGJlIHJlcGxhY2VkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGV4dCBUaGUgYWN0dWFsIHRleHQgdG8gc2V0XG4gKi9cblxuLyoqXG4gKiBTZW5kcyB0ZXh0IHRvIHRoZSBnaXZlbiBlbGVtZW50IGJ5IHJlcGxhY2luZyBpdHMgcHJldmlvdXMgY29udGVudFxuICpcbiAqIEBwYXJhbSB7UmVwbGFjZVZhbHVlT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhdWxyZSB3aGlsZSBzZXR0aW5nIHRoZSB0ZXh0XG4gKi9cbmNvbW1hbmRzLm1vYmlsZVJlcGxhY2VFbGVtZW50VmFsdWUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVSZXBsYWNlRWxlbWVudFZhbHVlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnRJZCwgdGV4dH0gPSByZXF1aXJlQXJncyhbJ2VsZW1lbnRJZCcsICd0ZXh0J10sIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vdmFsdWVgLCAnUE9TVCcsIHt0ZXh0LCByZXBsYWNlOiB0cnVlfSk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUVBLElBQUlJLFFBQVEsR0FBRyxDQUFDLENBQUM7RUFBRUMsT0FBTyxHQUFHLENBQUMsQ0FBQztFQUFFQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQUNDLE9BQUEsQ0FBQUYsT0FBQSxHQUFBQSxPQUFBO0FBQUFFLE9BQUEsQ0FBQUgsUUFBQSxHQUFBQSxRQUFBO0FBRWpELFNBQVNJLE1BQU1BLENBQUVDLENBQUMsRUFBRTtFQUNsQixPQUFPQyxlQUFDLENBQUNDLFFBQVEsQ0FBQ0YsQ0FBQyxDQUFDLEdBQUlBLENBQUMsQ0FBQ0csV0FBVyxFQUFFLEtBQUssTUFBTSxHQUFJLENBQUMsQ0FBQ0gsQ0FBQztBQUMzRDtBQUVBTCxRQUFRLENBQUNTLE1BQU0sR0FBRyxlQUFlQSxNQUFNQSxDQUFBLEVBQUk7RUFDekMsT0FBTyxNQUFNLElBQUksQ0FBQ0MsWUFBWSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUM7QUFDMUUsQ0FBQztBQUVEWixRQUFRLENBQUNhLFlBQVksR0FBRyxnQkFBZ0JDLFNBQVMsRUFBRUMsU0FBUyxFQUFFO0VBQzVELE9BQU8sTUFBTSxJQUFJLENBQUNMLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUUsWUFBV0csU0FBVSxjQUFhRCxTQUFVLEVBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENB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
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","names":["_lodash","_interopRequireDefault","require","_support","_driver","commands","helpers","extensions","exports","toBool","s","_","isString","toLowerCase","active","uiautomator2","jwproxy","command","getAttribute","attribute","elementId","elementDisplayed","elementEnabled","elementSelected","getName","getLocation","getSize","touchLongClick","element","x","y","duration","params","touchDown","touchUp","touchMove","doSetElementValue","setValueImmediate","keys","text","isArray","join","replace","getText","click","getElementScreenshot","tap","count","areCoordinatesDefined","util","hasValue","Error","i","W3C_ELEMENT_KEY","clear","getElementRect","isWebContext","log","debug","chromedriver","downstreamProtocol","PROTOCOLS","MJSONWP","width","height","Object","assign","_default","default"],"sources":["../../../lib/commands/element.js"],"sourcesContent":["import _ from 'lodash';\nimport { util } from 'appium/support';\nimport { PROTOCOLS, W3C_ELEMENT_KEY } from 'appium/driver';\n\nlet commands = {}, helpers = {}, extensions = {};\n\nfunction toBool (s) {\n return _.isString(s) ? (s.toLowerCase() === 'true') : !!s;\n}\n\ncommands.active = async function active () {\n return await this.uiautomator2.jwproxy.command('/element/active', 'GET');\n};\n\ncommands.getAttribute = async function (attribute, elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/attribute/${attribute}`, 'GET', {});\n};\n\ncommands.elementDisplayed = async function (elementId) {\n return toBool(await this.getAttribute('displayed', elementId));\n};\n\ncommands.elementEnabled = async function (elementId) {\n return toBool(await this.getAttribute('enabled', elementId));\n};\n\ncommands.elementSelected = async function (elementId) {\n return toBool(await this.getAttribute('selected', elementId));\n};\n\ncommands.getName = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/name`, 'GET', {});\n};\n\ncommands.getLocation = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/location`, 'GET', {});\n};\n\ncommands.getSize = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/size`, 'GET', {});\n};\n\ncommands.touchLongClick = async function (element, x, y, duration) {\n let params = {element, x, y, duration};\n return await this.uiautomator2.jwproxy.command(`/touch/longclick`, 'POST', {params});\n};\n\ncommands.touchDown = async function (element, x, y) {\n let params = {element, x, y};\n return await this.uiautomator2.jwproxy.command(`/touch/down`, 'POST', {params});\n};\n\ncommands.touchUp = async function (element, x, y) {\n let params = {element, x, y};\n return await this.uiautomator2.jwproxy.command(`/touch/up`, 'POST', {params});\n};\n\ncommands.touchMove = async function (element, x, y) {\n let params = {element, x, y};\n return await this.uiautomator2.jwproxy.command(`/touch/move`, 'POST', {params});\n};\n\nhelpers.doSetElementValue = async function (params) {\n return await this.uiautomator2.jwproxy.command(`/element/${params.elementId}/value`, 'POST', params);\n};\n\ncommands.setValueImmediate = async function (keys, elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/value`, 'POST', {\n elementId,\n text: _.isArray(keys) ? keys.join('') : keys,\n replace: false\n });\n};\n\ncommands.getText = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/text`, 'GET', {});\n};\n\ncommands.click = async function (element) {\n return await this.uiautomator2.jwproxy.command(`/element/${element}/click`, 'POST', {element});\n};\n\ncommands.getElementScreenshot = async function (element) {\n return await this.uiautomator2.jwproxy.command(`/element/${element}/screenshot`, 'GET', {});\n};\n\ncommands.tap = async function (elementId = null, x = null, y = null, count = 1) {\n const areCoordinatesDefined = util.hasValue(x) && util.hasValue(y);\n if (!util.hasValue(elementId) && !areCoordinatesDefined) {\n throw new Error(`Either element id to tap or both absolute coordinates should be defined`);\n }\n\n for (let i = 0; i < count; i++) {\n if (util.hasValue(elementId) && !areCoordinatesDefined) {\n // we are either tapping on the default location of the element\n // or an offset from the top left corner\n await this.uiautomator2.jwproxy.command(`/element/${elementId}/click`, 'POST');\n } else {\n await this.uiautomator2.jwproxy.command(`/appium/tap`, 'POST', {\n x, y,\n [W3C_ELEMENT_KEY]: elementId,\n });\n }\n }\n};\n\ncommands.clear = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/clear`, 'POST', {elementId});\n};\n\ncommands.getElementRect = async function (elementId) {\n if (this.isWebContext()) {\n this.log.debug(`Detected downstream chromedriver protocol: ${this.chromedriver.jwproxy.downstreamProtocol}`);\n if (this.chromedriver.jwproxy.downstreamProtocol === PROTOCOLS.MJSONWP) {\n const {x, y} = await this.chromedriver.jwproxy.command(`/element/${elementId}/location`, 'GET');\n const {width, height} = await this.chromedriver.jwproxy.command(`/element/${elementId}/size`, 'GET');\n return {x, y, width, height};\n }\n return await this.chromedriver.jwproxy.command(`/element/${elementId}/rect`, 'GET');\n }\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/rect`, 'GET');\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
1
+ {"version":3,"file":"element.js","names":["_lodash","_interopRequireDefault","require","_support","_driver","_utils","commands","helpers","extensions","exports","toBool","s","_","isString","toLowerCase","active","uiautomator2","jwproxy","command","getAttribute","attribute","elementId","elementDisplayed","elementEnabled","elementSelected","getName","getLocation","getSize","touchLongClick","element","x","y","duration","params","touchDown","touchUp","touchMove","doSetElementValue","setValueImmediate","keys","text","isArray","join","replace","getText","click","getElementScreenshot","tap","count","areCoordinatesDefined","util","hasValue","Error","i","W3C_ELEMENT_KEY","clear","getElementRect","isWebContext","log","debug","chromedriver","downstreamProtocol","PROTOCOLS","MJSONWP","width","height","mobileReplaceElementValue","opts","requireArgs","Object","assign","_default","default"],"sources":["../../../lib/commands/element.js"],"sourcesContent":["import _ from 'lodash';\nimport { util } from 'appium/support';\nimport { PROTOCOLS, W3C_ELEMENT_KEY } from 'appium/driver';\nimport { requireArgs } from '../utils';\n\nlet commands = {}, helpers = {}, extensions = {};\n\nfunction toBool (s) {\n return _.isString(s) ? (s.toLowerCase() === 'true') : !!s;\n}\n\ncommands.active = async function active () {\n return await this.uiautomator2.jwproxy.command('/element/active', 'GET');\n};\n\ncommands.getAttribute = async function (attribute, elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/attribute/${attribute}`, 'GET', {});\n};\n\ncommands.elementDisplayed = async function (elementId) {\n return toBool(await this.getAttribute('displayed', elementId));\n};\n\ncommands.elementEnabled = async function (elementId) {\n return toBool(await this.getAttribute('enabled', elementId));\n};\n\ncommands.elementSelected = async function (elementId) {\n return toBool(await this.getAttribute('selected', elementId));\n};\n\ncommands.getName = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/name`, 'GET', {});\n};\n\ncommands.getLocation = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/location`, 'GET', {});\n};\n\ncommands.getSize = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/size`, 'GET', {});\n};\n\ncommands.touchLongClick = async function (element, x, y, duration) {\n let params = {element, x, y, duration};\n return await this.uiautomator2.jwproxy.command(`/touch/longclick`, 'POST', {params});\n};\n\ncommands.touchDown = async function (element, x, y) {\n let params = {element, x, y};\n return await this.uiautomator2.jwproxy.command(`/touch/down`, 'POST', {params});\n};\n\ncommands.touchUp = async function (element, x, y) {\n let params = {element, x, y};\n return await this.uiautomator2.jwproxy.command(`/touch/up`, 'POST', {params});\n};\n\ncommands.touchMove = async function (element, x, y) {\n let params = {element, x, y};\n return await this.uiautomator2.jwproxy.command(`/touch/move`, 'POST', {params});\n};\n\nhelpers.doSetElementValue = async function (params) {\n return await this.uiautomator2.jwproxy.command(`/element/${params.elementId}/value`, 'POST', params);\n};\n\ncommands.setValueImmediate = async function (keys, elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/value`, 'POST', {\n elementId,\n text: _.isArray(keys) ? keys.join('') : keys,\n replace: false\n });\n};\n\ncommands.getText = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/text`, 'GET', {});\n};\n\ncommands.click = async function (element) {\n return await this.uiautomator2.jwproxy.command(`/element/${element}/click`, 'POST', {element});\n};\n\ncommands.getElementScreenshot = async function (element) {\n return await this.uiautomator2.jwproxy.command(`/element/${element}/screenshot`, 'GET', {});\n};\n\ncommands.tap = async function (elementId = null, x = null, y = null, count = 1) {\n const areCoordinatesDefined = util.hasValue(x) && util.hasValue(y);\n if (!util.hasValue(elementId) && !areCoordinatesDefined) {\n throw new Error(`Either element id to tap or both absolute coordinates should be defined`);\n }\n\n for (let i = 0; i < count; i++) {\n if (util.hasValue(elementId) && !areCoordinatesDefined) {\n // we are either tapping on the default location of the element\n // or an offset from the top left corner\n await this.uiautomator2.jwproxy.command(`/element/${elementId}/click`, 'POST');\n } else {\n await this.uiautomator2.jwproxy.command(`/appium/tap`, 'POST', {\n x, y,\n [W3C_ELEMENT_KEY]: elementId,\n });\n }\n }\n};\n\ncommands.clear = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/clear`, 'POST', {elementId});\n};\n\ncommands.getElementRect = async function (elementId) {\n if (this.isWebContext()) {\n this.log.debug(`Detected downstream chromedriver protocol: ${this.chromedriver.jwproxy.downstreamProtocol}`);\n if (this.chromedriver.jwproxy.downstreamProtocol === PROTOCOLS.MJSONWP) {\n const {x, y} = await this.chromedriver.jwproxy.command(`/element/${elementId}/location`, 'GET');\n const {width, height} = await this.chromedriver.jwproxy.command(`/element/${elementId}/size`, 'GET');\n return {x, y, width, height};\n }\n return await this.chromedriver.jwproxy.command(`/element/${elementId}/rect`, 'GET');\n }\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/rect`, 'GET');\n};\n\n/**\n * @typedef {Object} ReplaceValueOptions\n * @property {string} elementId The id of the element whose content will be replaced\n * @property {string} text The actual text to set\n */\n\n/**\n * Sends text to the given element by replacing its previous content\n *\n * @param {ReplaceValueOptions} opts\n * @throws {Error} If there was a faulre while setting the text\n */\ncommands.mobileReplaceElementValue = async function mobileReplaceElementValue (opts = {}) {\n const {elementId, text} = requireArgs(['elementId', 'text'], opts);\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/value`, 'POST', {text, replace: true});\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
@@ -80,7 +80,7 @@ extensions.executeMobile = async function (mobileCommand, opts = {}) {
80
80
  getNotifications: 'mobileGetNotifications',
81
81
  listSms: 'mobileListSms',
82
82
  type: 'mobileType',
83
- sensorSet: 'sensorSet',
83
+ replaceElementValue: 'mobileReplaceElementValue',
84
84
  pushFile: 'mobilePushFile',
85
85
  pullFile: 'mobilePullFile',
86
86
  pullFolder: 'mobilePullFolder',
@@ -115,7 +115,16 @@ extensions.executeMobile = async function (mobileCommand, opts = {}) {
115
115
  isKeyboardShown: 'isKeyboardShown',
116
116
  pressKey: 'mobilePressKey',
117
117
  getDisplayDensity: 'getDisplayDensity',
118
- getSystemBars: 'getSystemBars'
118
+ getSystemBars: 'getSystemBars',
119
+ fingerprint: 'mobilefingerprint',
120
+ sendSms: 'mobileSendSms',
121
+ gsmCall: 'mobileGsmCall',
122
+ gsmSignal: 'mobileGsmSignal',
123
+ gsmVoice: 'mobileGsmVoice',
124
+ powerAc: 'mobilePowerAc',
125
+ powerCapacity: 'mobilePowerCapacity',
126
+ networkSpeed: 'mobileNetworkSpeed',
127
+ sensorSet: 'sensorSet'
119
128
  };
120
129
  if (!_lodash.default.has(mobileCommandsMapping, mobileCommand)) {
121
130
  throw new _driver.errors.UnknownCommandError(`Unknown mobile command "${mobileCommand}". ` + `Only ${_lodash.default.keys(mobileCommandsMapping)} commands are supported.`);
@@ -195,4 +204,4 @@ commands.mobileBackgroundApp = async function mobileBackgroundApp(opts = {}) {
195
204
  Object.assign(extensions, commands, helpers);
196
205
  var _default = extensions;
197
206
  exports.default = _default;
198
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYmx1ZWJpcmQiLCJfZHJpdmVyIiwiX2V4dGVuc2lvbnMiLCJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZ2V0UGFnZVNvdXJjZSIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJkb1NlbmRLZXlzIiwicGFyYW1zIiwia2V5ZXZlbnQiLCJrZXljb2RlIiwibWV0YXN0YXRlIiwibG9nIiwiZGVidWciLCJiYWNrIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJnZXRXaW5kb3dTaXplIiwiZ2V0V2luZG93UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwieCIsInkiLCJleGVjdXRlTW9iaWxlIiwibW9iaWxlQ29tbWFuZCIsIm9wdHMiLCJtb2JpbGVDb21tYW5kc01hcHBpbmciLCJzaGVsbCIsImV4ZWNFbXVDb25zb2xlQ29tbWFuZCIsImRyYWdHZXN0dXJlIiwiZmxpbmdHZXN0dXJlIiwiZG91YmxlQ2xpY2tHZXN0dXJlIiwiY2xpY2tHZXN0dXJlIiwibG9uZ0NsaWNrR2VzdHVyZSIsInBpbmNoQ2xvc2VHZXN0dXJlIiwicGluY2hPcGVuR2VzdHVyZSIsInN3aXBlR2VzdHVyZSIsInNjcm9sbEdlc3R1cmUiLCJzY3JvbGxCYWNrVG8iLCJzY3JvbGwiLCJ2aWV3cG9ydFNjcmVlbnNob3QiLCJ2aWV3cG9ydFJlY3QiLCJkZWVwTGluayIsInN0YXJ0TG9nc0Jyb2FkY2FzdCIsInN0b3BMb2dzQnJvYWRjYXN0IiwiYWNjZXB0QWxlcnQiLCJkaXNtaXNzQWxlcnQiLCJiYXR0ZXJ5SW5mbyIsImRldmljZUluZm8iLCJnZXREZXZpY2VUaW1lIiwiY2hhbmdlUGVybWlzc2lvbnMiLCJnZXRQZXJtaXNzaW9ucyIsInBlcmZvcm1FZGl0b3JBY3Rpb24iLCJzdGFydFNjcmVlblN0cmVhbWluZyIsInN0b3BTY3JlZW5TdHJlYW1pbmciLCJnZXROb3RpZmljYXRpb25zIiwibGlzdFNtcyIsInR5cGUiLCJzZW5zb3JTZXQiLCJwdXNoRmlsZSIsInB1bGxGaWxlIiwicHVsbEZvbGRlciIsImRlbGV0ZUZpbGUiLCJpc0FwcEluc3RhbGxlZCIsInF1ZXJ5QXBwU3RhdGUiLCJhY3RpdmF0ZUFwcCIsInJlbW92ZUFwcCIsInRlcm1pbmF0ZUFwcCIsImluc3RhbGxBcHAiLCJjbGVhckFwcCIsImJhY2tncm91bmRBcHAiLCJnZXRDdXJyZW50QWN0aXZpdHkiLCJnZXRDdXJyZW50UGFja2FnZSIsInN0YXJ0QWN0aXZpdHkiLCJzdGFydFNlcnZpY2UiLCJzdG9wU2VydmljZSIsImJyb2FkY2FzdCIsImdldENvbnRleHRzIiwiZ2V0QXBwU3RyaW5ncyIsImluc3RhbGxNdWx0aXBsZUFwa3MiLCJsb2NrIiwidW5sb2NrIiwiaXNMb2NrZWQiLCJyZWZyZXNoR3BzQ2FjaGUiLCJzdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsImlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZyIsInN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJnZXRDb25uZWN0aXZpdHkiLCJzZXRDb25uZWN0aXZpdHkiLCJoaWRlS2V5Ym9hcmQiLCJpc0tleWJvYXJkU2hvd24iLCJwcmVzc0tleSIsImdldFN5c3RlbUJhcnMiLCJfIiwiaGFzIiwiZXJyb3JzIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsImtleXMiLCJtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QiLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJtb2JpbGVWaWV3UG9ydFJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJzZXRVcmwiLCJ1cmwiLCJzdGFydFVyaSIsImFwcFBhY2thZ2UiLCJtb2JpbGVEZWVwTGluayIsInBhY2thZ2UiLCJwa2ciLCJ3YWl0Rm9yTGF1bmNoIiwib3Blbk5vdGlmaWNhdGlvbnMiLCJ1cGRhdGVTZXR0aW5ncyIsInNldHRpbmdzIiwidXBkYXRlIiwiZ2V0U2V0dGluZ3MiLCJkcml2ZXJTZXR0aW5ncyIsInNlcnZlclNldHRpbmdzIiwid3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QiLCJ3cmFwcGVkIiwic3VzcGVuZENocm9tZWRyaXZlclByb3h5IiwiY2hyb21lZHJpdmVyIiwicHJveHlSZXFSZXMiLCJiaW5kIiwicHJveHlDb21tYW5kIiwiandwUHJveHlBY3RpdmUiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwibW9iaWxlVHlwZSIsInRleHQiLCJpc1VuZGVmaW5lZCIsImVycm9yQW5kVGhyb3ciLCJ0eXBlVW5pY29kZSIsIm1vYmlsZUluc3RhbGxNdWx0aXBsZUFwa3MiLCJpc0FycmF5IiwiYXBrcyIsImlzRW1wdHkiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIkIiLCJhbGwiLCJtYXAiLCJhcHAiLCJjb25maWd1cmVBcHAiLCJBUEtfRVhURU5TSU9OIiwib3B0aW9ucyIsIm1vYmlsZUJhY2tncm91bmRBcHAiLCJzZWNvbmRzIiwiYmFja2dyb3VuZCIsIk9iamVjdCIsImFzc2lnbiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VuZXJhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBBUEtfRVhURU5TSU9OIH0gZnJvbSAnLi4vZXh0ZW5zaW9ucyc7XG5cbmxldCBleHRlbnNpb25zID0ge30sXG4gICAgY29tbWFuZHMgPSB7fSxcbiAgICBoZWxwZXJzID0ge307XG5cbmNvbW1hbmRzLmdldFBhZ2VTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9zb3VyY2UnLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0Q2xpcGJvYXJkID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCAyOSlcbiAgICA/IChhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2dldF9jbGlwYm9hcmQnLCAnUE9TVCcsIHt9KSlcbiAgICA6IChhd2FpdCB0aGlzLmFkYi5nZXRDbGlwYm9hcmQoKSk7XG59O1xuXG4vLyBOZWVkIHRvIG92ZXJyaWRlIHRoaXMgZm9yIGNvcnJlY3QgdW5pY29kZSBzdXBwb3J0XG5jb21tYW5kcy5kb1NlbmRLZXlzID0gYXN5bmMgZnVuY3Rpb24gKHBhcmFtcykge1xuICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9rZXlzJywgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuLy8gdWlhdXRvbWF0b3IyIGRvZXNuJ3Qgc3VwcG9ydCBtZXRhc3RhdGUgZm9yIGtleWV2ZW50c1xuY29tbWFuZHMua2V5ZXZlbnQgPSBhc3luYyBmdW5jdGlvbiAoa2V5Y29kZSwgbWV0YXN0YXRlKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBJZ25vcmluZyBtZXRhc3RhdGUgJHttZXRhc3RhdGV9YCk7XG4gIGF3YWl0IHRoaXMuYWRiLmtleWV2ZW50KGtleWNvZGUpO1xufTtcblxuLy8gVXNlIEFEQiBzaW5jZSB3ZSBkb24ndCBoYXZlIFVpQXV0b21hdG9yXG5jb21tYW5kcy5iYWNrID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBhd2FpdCB0aGlzLmFkYi5rZXlldmVudCg0KTtcbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9kaXNwbGF5X2RlbnNpdHknLCAnR0VUJywge30pO1xufTtcblxuLy8gbWVtb2l6ZWQgaW4gY29uc3RydWN0b3JcbmNvbW1hbmRzLmdldFdpbmRvd1NpemUgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy93aW5kb3cvY3VycmVudC9zaXplJywgJ0dFVCcsIHt9KTtcbn07XG5cbi8vIEZvciBXM0NcbmNvbW1hbmRzLmdldFdpbmRvd1JlY3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0V2luZG93U2l6ZSgpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gIH07XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiAobW9iaWxlQ29tbWFuZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG1vYmlsZUNvbW1hbmRzTWFwcGluZyA9IHtcbiAgICBzaGVsbDogJ21vYmlsZVNoZWxsJyxcblxuICAgIGV4ZWNFbXVDb25zb2xlQ29tbWFuZDogJ21vYmlsZUV4ZWNFbXVDb25zb2xlQ29tbWFuZCcsXG5cbiAgICBkcmFnR2VzdHVyZTogJ21vYmlsZURyYWdHZXN0dXJlJyxcbiAgICBmbGluZ0dlc3R1cmU6ICdtb2JpbGVGbGluZ0dlc3R1cmUnLFxuICAgIGRvdWJsZUNsaWNrR2VzdHVyZTogJ21vYmlsZURvdWJsZUNsaWNrR2VzdHVyZScsXG4gICAgY2xpY2tHZXN0dXJlOiAnbW9iaWxlQ2xpY2tHZXN0dXJlJyxcbiAgICBsb25nQ2xpY2tHZXN0dXJlOiAnbW9iaWxlTG9uZ0NsaWNrR2VzdHVyZScsXG4gICAgcGluY2hDbG9zZUdlc3R1cmU6ICdtb2JpbGVQaW5jaENsb3NlR2VzdHVyZScsXG4gICAgcGluY2hPcGVuR2VzdHVyZTogJ21vYmlsZVBpbmNoT3Blbkdlc3R1cmUnLFxuICAgIHN3aXBlR2VzdHVyZTogJ21vYmlsZVN3aXBlR2VzdHVyZScsXG4gICAgc2Nyb2xsR2VzdHVyZTogJ21vYmlsZVNjcm9sbEdlc3R1cmUnLFxuICAgIHNjcm9sbEJhY2tUbzogJ21vYmlsZVNjcm9sbEJhY2tUbycsXG4gICAgc2Nyb2xsOiAnbW9iaWxlU2Nyb2xsJyxcbiAgICB2aWV3cG9ydFNjcmVlbnNob3Q6ICdtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QnLFxuICAgIHZpZXdwb3J0UmVjdDogJ21vYmlsZVZpZXdQb3J0UmVjdCcsXG5cbiAgICBkZWVwTGluazogJ21vYmlsZURlZXBMaW5rJyxcblxuICAgIHN0YXJ0TG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCcsXG4gICAgc3RvcExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCcsXG5cbiAgICBhY2NlcHRBbGVydDogJ21vYmlsZUFjY2VwdEFsZXJ0JyxcbiAgICBkaXNtaXNzQWxlcnQ6ICdtb2JpbGVEaXNtaXNzQWxlcnQnLFxuXG4gICAgYmF0dGVyeUluZm86ICdtb2JpbGVHZXRCYXR0ZXJ5SW5mbycsXG5cbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG5cbiAgICBnZXREZXZpY2VUaW1lOiAnbW9iaWxlR2V0RGV2aWNlVGltZScsXG5cbiAgICBjaGFuZ2VQZXJtaXNzaW9uczogJ21vYmlsZUNoYW5nZVBlcm1pc3Npb25zJyxcbiAgICBnZXRQZXJtaXNzaW9uczogJ21vYmlsZUdldFBlcm1pc3Npb25zJyxcblxuICAgIHBlcmZvcm1FZGl0b3JBY3Rpb246ICdtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uJyxcblxuICAgIHN0YXJ0U2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmcnLFxuICAgIHN0b3BTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nJyxcblxuICAgIGdldE5vdGlmaWNhdGlvbnM6ICdtb2JpbGVHZXROb3RpZmljYXRpb25zJyxcblxuICAgIGxpc3RTbXM6ICdtb2JpbGVMaXN0U21zJyxcblxuICAgIHR5cGU6ICdtb2JpbGVUeXBlJyxcbiAgICBzZW5zb3JTZXQ6ICdzZW5zb3JTZXQnLFxuXG4gICAgcHVzaEZpbGU6ICdtb2JpbGVQdXNoRmlsZScsXG4gICAgcHVsbEZpbGU6ICdtb2JpbGVQdWxsRmlsZScsXG4gICAgcHVsbEZvbGRlcjogJ21vYmlsZVB1bGxGb2xkZXInLFxuICAgIGRlbGV0ZUZpbGU6ICdtb2JpbGVEZWxldGVGaWxlJyxcblxuICAgIGlzQXBwSW5zdGFsbGVkOiAnbW9iaWxlSXNBcHBJbnN0YWxsZWQnLFxuICAgIHF1ZXJ5QXBwU3RhdGU6ICdtb2JpbGVRdWVyeUFwcFN0YXRlJyxcbiAgICBhY3RpdmF0ZUFwcDogJ21vYmlsZUFjdGl2YXRlQXBwJyxcbiAgICByZW1vdmVBcHA6ICdtb2JpbGVSZW1vdmVBcHAnLFxuICAgIHRlcm1pbmF0ZUFwcDogJ21vYmlsZVRlcm1pbmF0ZUFwcCcsXG4gICAgaW5zdGFsbEFwcDogJ21vYmlsZUluc3RhbGxBcHAnLFxuICAgIGNsZWFyQXBwOiAnbW9iaWxlQ2xlYXJBcHAnLFxuICAgIGJhY2tncm91bmRBcHA6ICdtb2JpbGVCYWNrZ3JvdW5kQXBwJyxcbiAgICBnZXRDdXJyZW50QWN0aXZpdHk6ICdnZXRDdXJyZW50QWN0aXZpdHknLFxuICAgIGdldEN1cnJlbnRQYWNrYWdlOiAnZ2V0Q3VycmVudFBhY2thZ2UnLFxuXG4gICAgc3RhcnRBY3Rpdml0eTogJ21vYmlsZVN0YXJ0QWN0aXZpdHknLFxuICAgIHN0YXJ0U2VydmljZTogJ21vYmlsZVN0YXJ0U2VydmljZScsXG4gICAgc3RvcFNlcnZpY2U6ICdtb2JpbGVTdG9wU2VydmljZScsXG4gICAgYnJvYWRjYXN0OiAnbW9iaWxlQnJvYWRjYXN0JyxcblxuICAgIGdldENvbnRleHRzOiAnbW9iaWxlR2V0Q29udGV4dHMnLFxuXG4gICAgZ2V0QXBwU3RyaW5nczogJ21vYmlsZUdldEFwcFN0cmluZ3MnLFxuXG4gICAgaW5zdGFsbE11bHRpcGxlQXBrczogJ21vYmlsZUluc3RhbGxNdWx0aXBsZUFwa3MnLFxuXG4gICAgbG9jazogJ2xvY2snLFxuICAgIHVubG9jazogJ21vYmlsZVVubG9jaycsXG4gICAgaXNMb2NrZWQ6ICdpc0xvY2tlZCcsXG5cbiAgICByZWZyZXNoR3BzQ2FjaGU6ICdtb2JpbGVSZWZyZXNoR3BzQ2FjaGUnLFxuXG4gICAgc3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmc6ICdtb2JpbGVTdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZycsXG4gICAgaXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nOiAnbW9iaWxlSXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nJyxcbiAgICBzdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nOiAnbW9iaWxlU3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZycsXG5cbiAgICBnZXRDb25uZWN0aXZpdHk6ICdtb2JpbGVHZXRDb25uZWN0aXZpdHknLFxuICAgIHNldENvbm5lY3Rpdml0eTogJ21vYmlsZVNldENvbm5lY3Rpdml0eScsXG5cbiAgICBoaWRlS2V5Ym9hcmQ6ICdtb2JpbGVIaWRlS2V5Ym9hcmQnLFxuICAgIGlzS2V5Ym9hcmRTaG93bjogJ2lzS2V5Ym9hcmRTaG93bicsXG5cbiAgICBwcmVzc0tleTogJ21vYmlsZVByZXNzS2V5JyxcblxuICAgIGdldERpc3BsYXlEZW5zaXR5OiAnZ2V0RGlzcGxheURlbnNpdHknLFxuICAgIGdldFN5c3RlbUJhcnM6ICdnZXRTeXN0ZW1CYXJzJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKG1vYmlsZUNvbW1hbmRzTWFwcGluZywgbW9iaWxlQ29tbWFuZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoYFVua25vd24gbW9iaWxlIGNvbW1hbmQgXCIke21vYmlsZUNvbW1hbmR9XCIuIGAgK1xuICAgICAgYE9ubHkgJHtfLmtleXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nKX0gY29tbWFuZHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpc1ttb2JpbGVDb21tYW5kc01hcHBpbmdbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuY29tbWFuZHMubW9iaWxlVmlld3BvcnRTY3JlZW5zaG90ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3cG9ydFNjcmVlbnNob3QoKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUmVjdGFuZ2xlXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGVmdCAtIFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3AgLSBUaGUgdG9wIGNvb3JkaW5hdGUgb2YgdGhlIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiBSZWN0YW5nbGUuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiBSZWN0YW5nbGUuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2aWV3cG9ydCBjb29yZGluYXRlcy5cbiAqIEByZXR1cm5zIHtSZWN0YW5nbGV9IFRoZSB2aWV3cG9ydCBjb29yZGluYXRlcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlVmlld1BvcnRSZWN0ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVmlld1BvcnRSZWN0ICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0Vmlld1BvcnRSZWN0KCk7XG59O1xuXG5jb21tYW5kcy5zZXRVcmwgPSBhc3luYyBmdW5jdGlvbiAodXJsKSB7XG4gIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgdGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEZWVwTGlua09wdHNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gdXJsIC0gVGhlIG5hbWUgb2YgVVJMIHRvIHN0YXJ0LlxuICogQHByb3BlcnR5IHshc3RyaW5nfSBwYWNrYWdlIC0gVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgdG8gc3RhcnQgdGhlIFVSSSB3aXRoLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gd2FpdEZvckxhdW5jaCBbdHJ1ZV0gLSBpZiBgZmFsc2VgIHRoZW4gYWRiIHdvbid0IHdhaXRcbiAqIGZvciB0aGUgc3RhcnRlZCBhY3Rpdml0eSB0byByZXR1cm4gdGhlIGNvbnRyb2xcbiAqL1xuXG4vKipcbiAqIFN0YXJ0IFVSTCB0aGF0IHRha2UgdXNlcnMgZGlyZWN0bHkgdG8gc3BlY2lmaWMgY29udGVudCBpbiB0aGUgYXBwXG4gKiBAcGFyYW0ge0RlZXBMaW5rT3B0c30gb3B0c1xuICovXG5jb21tYW5kcy5tb2JpbGVEZWVwTGluayA9IGFzeW5jIGZ1bmN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHVybCxcbiAgICBwYWNrYWdlOiBwa2csXG4gICAgd2FpdEZvckxhdW5jaCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5zdGFydFVyaSh1cmwsIHBrZywgeyB3YWl0Rm9yTGF1bmNoIH0pO1xufTtcblxuY29tbWFuZHMub3Blbk5vdGlmaWNhdGlvbnMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL29wZW5fbm90aWZpY2F0aW9ucycsICdQT1NUJywge30pO1xufTtcblxuY29tbWFuZHMudXBkYXRlU2V0dGluZ3MgPSBhc3luYyBmdW5jdGlvbiAoc2V0dGluZ3MpIHtcbiAgYXdhaXQgdGhpcy5zZXR0aW5ncy51cGRhdGUoc2V0dGluZ3MpO1xuICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vc2V0dGluZ3MnLCAnUE9TVCcsIHtzZXR0aW5nc30pO1xufTtcblxuY29tbWFuZHMuZ2V0U2V0dGluZ3MgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGRyaXZlclNldHRpbmdzID0gdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpO1xuICBjb25zdCBzZXJ2ZXJTZXR0aW5ncyA9IGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdHRVQnKTtcbiAgcmV0dXJuIHsuLi5kcml2ZXJTZXR0aW5ncywgLi4uc2VydmVyU2V0dGluZ3N9O1xufTtcblxuLyoqXG4gKiBPdmVycmlkaW5nIGFwcGl1bS1hbmRyb2lkLWRyaXZlcidzIHdyYXBCb290c3RyYXBEaXNjb25uZWN0LFxuICogdW5saWtlIGluIGFwcGl1bS1hbmRyb2lkLWRyaXZlciBhdm9pZGluZyBhZGIgcmVzdGFydGluZyBhcyBpdCBpbnRlcm5cbiAqIGtpbGxzIFVpQXV0b21hdG9yMiBzZXJ2ZXIgcnVubmluZyBpbiB0aGUgZGV2aWNlLlxuICoqL1xuaGVscGVycy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdCA9IGFzeW5jIGZ1bmN0aW9uICh3cmFwcGVkKSB7XG4gIGF3YWl0IHdyYXBwZWQoKTtcbn07XG5cbi8vIFN0b3AgcHJveHlpbmcgdG8gYW55IENocm9tZWRyaXZlciBhbmQgcmVkaXJlY3QgdG8gdWlhdXRvbWF0b3IyXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlSZXFSZXMuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlDb21tYW5kLmJpbmQodGhpcy51aWF1dG9tYXRvcjIpO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGluZm8gZW50cmllcyBjYW4gYmUgZm91bmQgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLXVpYXV0b21hdG9yMi1zZXJ2ZXIvYmxvYi9tYXN0ZXIvYXBwL3NyYy9tYWluL2phdmEvaW8vYXBwaXVtL3VpYXV0b21hdG9yMi9oYW5kbGVyL0dldERldmljZUluZm8uamF2YVxuICovXG5jb21tYW5kcy5tb2JpbGVHZXREZXZpY2VJbmZvID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9pbmZvJywgJ0dFVCcpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUeXBpbmdPcHRpb25zXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd8bnVtYmVyfGJvb2xlYW59IHRleHQgLSBUaGUgdGV4dCB0byB0eXBlXG4gKi9cblxuLyoqXG4gKiBUeXBlcyB0aGUgZ2l2ZW4gVW5pY29kZSBzdHJpbmcuXG4gKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBmb2N1cyBpcyBhbHJlYWR5IHB1dFxuICogdG8gdGhlIGRlc3RpbmF0aW9uIGlucHV0IGZpZWxkIGJlZm9yZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuXG4gKlxuICogQHBhcmFtIHtUeXBpbmdPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnB1dCB0ZXh0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZW50IHRvIGFkYlxuICogQHRocm93cyB7RXJyb3J9IGlmIGB0ZXh0YCBwcm9wZXJ0eSBoYXMgbm90IGJlZW4gcHJvdmlkZWRcbiAqL1xuY29tbWFuZHMubW9iaWxlVHlwZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVR5cGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGV4dCxcbiAgfSA9IG9wdHM7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHRleHQpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlICd0ZXh0JyBhcmd1bWVudCBpcyBtYW5kYXRvcnlgKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIudHlwZVVuaWNvZGUodGV4dCk7XG59O1xuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlU2RjYXJkIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBpbnN0YWxsIHRoZSBhcHAgb24gc2RjYXJkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSByZXBsYWNlIFt0cnVlXSAtIFNldCBpdCB0byBmYWxzZSBpZiB5b3UgZG9uJ3Qgd2FudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB1cGdyYWRlZC9yZWluc3RhbGxlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgZGV2aWNlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBwYXJ0aWFsSW5zdGFsbCBbZmFsc2VdIC0gSW5zdGFsbCBhcGtzIHBhcnRpYWxseS4gSXQgaXMgdXNlZCBmb3IgJ2luc3RhbGwtbXVsdGlwbGUnLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL2FuZHJvaWQuc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzExMTA2NC93aGF0LWlzLWEtcGFydGlhbC1hcHBsaWNhdGlvbi1pbnN0YWxsLXZpYS1hZGJcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IGFwa3MgLSBUaGUgbGlzdCBvZiBBUEtzIHRvIGluc3RhbGwuIEVhY2ggQVBLIHNob3VsZCBiZSBhIHBhdGggdG8gYSBhcGtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGRvd25sb2FkYWJsZSBVUkwgYXMgSFRUUC9IVFRQUy5cbiAqIEBwcm9wZXJ0eSB7SW5zdGFsbE9wdGlvbnN9IG9wdGlvbnNcbiAqL1xuXG4vKipcbiAqIEluc3RhbGwgbXVsdGlwbGUgQVBLcyB3aXRoIGBpbnN0YWxsLW11bHRpcGxlYCBvcHRpb24uXG4gKlxuICogQHBhcmFtIHtJbnN0YWxsTXVsdGlwbGVBcGtzT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIGFuIGVycm9yIG9jY3VyZWQgd2hpbGUgaW5zdGFsbGluZyB0aGUgZ2l2ZW4gQVBLcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcyA9IGFzeW5jIGZ1bmN0aW9uIChvcHRzID0ge30pIHtcbiAgaWYgKCFfLmlzQXJyYXkob3B0cy5hcGtzKSB8fCBfLmlzRW1wdHkob3B0cy5hcGtzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoJ05vIGFwa3MgYXJlIGdpdmVuIHRvIGluc3RhbGwnKTtcbiAgfVxuICBjb25zdCBhcGtzID0gYXdhaXQgQi5hbGwob3B0cy5hcGtzXG4gICAgLm1hcCgoYXBwKSA9PiB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgW0FQS19FWFRFTlNJT05dKSkpO1xuICBhd2FpdCB0aGlzLmFkYi5pbnN0YWxsTXVsdGlwbGVBcGtzKGFwa3MsIG9wdHMub3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEJhY2tncm91bmRBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2Vjb25kcyBUaGUgYW1vdW50IG9mIHNlY29uZHMgdG8gd2FpdCBiZXR3ZWVuXG4gKiBwdXR0aW5nIHRoZSBhcHAgdG8gYmFja2dyb3VuZCBhbmQgcmVzdG9yaW5nIGl0LiBBbnkgbmVnYXRpdmUgdmFsdWVcbiAqIG1lYW5zIHRvIG5vdCByZXN0b3JlIHRoZSBhcHAgYWZ0ZXIgcHV0dGluZyBpdCB0byBiYWNrZ3JvdW5kLlxuICovXG5cbi8qKlxuICogUHV0cyB0aGUgYXBwIHRvIGJhY2tncm91bmQgYW5kIHdhaXRzIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyBUaGVuIHJlc3RvcmVzIHRoZSBhcHBcbiAqIGlmIG5lY2Vzc2FyeS4gVGhlIGNhbGwgaXMgYmxvY2tpbmcuXG4gKlxuICogQHBhcmFtIHtCYWNrZ3JvdW5kQXBwT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tb2JpbGVCYWNrZ3JvdW5kQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQmFja2dyb3VuZEFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBzZWNvbmRzID0gLTEsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgdGhpcy5iYWNrZ3JvdW5kKHNlY29uZHMpO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5cbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsU0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsV0FBQSxHQUFBSCxPQUFBO0FBRUEsSUFBSUksVUFBVSxHQUFHLENBQUMsQ0FBQztFQUNmQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0VBQ2JDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFFaEJELFFBQVEsQ0FBQ0UsYUFBYSxHQUFHLGtCQUFrQjtFQUN6QyxPQUFPLE1BQU0sSUFBSSxDQUFDQyxZQUFZLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVETCxRQUFRLENBQUNNLFlBQVksR0FBRyxrQkFBa0I7RUFDeEMsT0FBUSxPQUFNLElBQUksQ0FBQ0MsR0FBRyxDQUFDQyxXQUFXLEVBQUUsSUFBRyxFQUFFLEdBQ3BDLE1BQU0sSUFBSSxDQUFDTCxZQUFZLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLDhCQUE4QixFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUNuRixNQUFNLElBQUksQ0FBQ0UsR0FBRyxDQUFDRCxZQUFZLEVBQUc7QUFDckMsQ0FBQztBQUdETixRQUFRLENBQUNTLFVBQVUsR0FBRyxnQkFBZ0JDLE1BQU0sRUFBRTtFQUM1QyxNQUFNLElBQUksQ0FBQ1AsWUFBWSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFSyxNQUFN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
207
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYmx1ZWJpcmQiLCJfZHJpdmVyIiwiX2V4dGVuc2lvbnMiLCJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZ2V0UGFnZVNvdXJjZSIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJkb1NlbmRLZXlzIiwicGFyYW1zIiwia2V5ZXZlbnQiLCJrZXljb2RlIiwibWV0YXN0YXRlIiwibG9nIiwiZGVidWciLCJiYWNrIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJnZXRXaW5kb3dTaXplIiwiZ2V0V2luZG93UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwieCIsInkiLCJleGVjdXRlTW9iaWxlIiwibW9iaWxlQ29tbWFuZCIsIm9wdHMiLCJtb2JpbGVDb21tYW5kc01hcHBpbmciLCJzaGVsbCIsImV4ZWNFbXVDb25zb2xlQ29tbWFuZCIsImRyYWdHZXN0dXJlIiwiZmxpbmdHZXN0dXJlIiwiZG91YmxlQ2xpY2tHZXN0dXJlIiwiY2xpY2tHZXN0dXJlIiwibG9uZ0NsaWNrR2VzdHVyZSIsInBpbmNoQ2xvc2VHZXN0dXJlIiwicGluY2hPcGVuR2VzdHVyZSIsInN3aXBlR2VzdHVyZSIsInNjcm9sbEdlc3R1cmUiLCJzY3JvbGxCYWNrVG8iLCJzY3JvbGwiLCJ2aWV3cG9ydFNjcmVlbnNob3QiLCJ2aWV3cG9ydFJlY3QiLCJkZWVwTGluayIsInN0YXJ0TG9nc0Jyb2FkY2FzdCIsInN0b3BMb2dzQnJvYWRjYXN0IiwiYWNjZXB0QWxlcnQiLCJkaXNtaXNzQWxlcnQiLCJiYXR0ZXJ5SW5mbyIsImRldmljZUluZm8iLCJnZXREZXZpY2VUaW1lIiwiY2hhbmdlUGVybWlzc2lvbnMiLCJnZXRQZXJtaXNzaW9ucyIsInBlcmZvcm1FZGl0b3JBY3Rpb24iLCJzdGFydFNjcmVlblN0cmVhbWluZyIsInN0b3BTY3JlZW5TdHJlYW1pbmciLCJnZXROb3RpZmljYXRpb25zIiwibGlzdFNtcyIsInR5cGUiLCJyZXBsYWNlRWxlbWVudFZhbHVlIiwicHVzaEZpbGUiLCJwdWxsRmlsZSIsInB1bGxGb2xkZXIiLCJkZWxldGVGaWxlIiwiaXNBcHBJbnN0YWxsZWQiLCJxdWVyeUFwcFN0YXRlIiwiYWN0aXZhdGVBcHAiLCJyZW1vdmVBcHAiLCJ0ZXJtaW5hdGVBcHAiLCJpbnN0YWxsQXBwIiwiY2xlYXJBcHAiLCJiYWNrZ3JvdW5kQXBwIiwiZ2V0Q3VycmVudEFjdGl2aXR5IiwiZ2V0Q3VycmVudFBhY2thZ2UiLCJzdGFydEFjdGl2aXR5Iiwic3RhcnRTZXJ2aWNlIiwic3RvcFNlcnZpY2UiLCJicm9hZGNhc3QiLCJnZXRDb250ZXh0cyIsImdldEFwcFN0cmluZ3MiLCJpbnN0YWxsTXVsdGlwbGVBcGtzIiwibG9jayIsInVubG9jayIsImlzTG9ja2VkIiwicmVmcmVzaEdwc0NhY2hlIiwic3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJpc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmciLCJzdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiZ2V0Q29ubmVjdGl2aXR5Iiwic2V0Q29ubmVjdGl2aXR5IiwiaGlkZUtleWJvYXJkIiwiaXNLZXlib2FyZFNob3duIiwicHJlc3NLZXkiLCJnZXRTeXN0ZW1CYXJzIiwiZmluZ2VycHJpbnQiLCJzZW5kU21zIiwiZ3NtQ2FsbCIsImdzbVNpZ25hbCIsImdzbVZvaWNlIiwicG93ZXJBYyIsInBvd2VyQ2FwYWNpdHkiLCJuZXR3b3JrU3BlZWQiLCJzZW5zb3JTZXQiLCJfIiwiaGFzIiwiZXJyb3JzIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsImtleXMiLCJtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QiLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJtb2JpbGVWaWV3UG9ydFJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJzZXRVcmwiLCJ1cmwiLCJzdGFydFVyaSIsImFwcFBhY2thZ2UiLCJtb2JpbGVEZWVwTGluayIsInBhY2thZ2UiLCJwa2ciLCJ3YWl0Rm9yTGF1bmNoIiwib3Blbk5vdGlmaWNhdGlvbnMiLCJ1cGRhdGVTZXR0aW5ncyIsInNldHRpbmdzIiwidXBkYXRlIiwiZ2V0U2V0dGluZ3MiLCJkcml2ZXJTZXR0aW5ncyIsInNlcnZlclNldHRpbmdzIiwid3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QiLCJ3cmFwcGVkIiwic3VzcGVuZENocm9tZWRyaXZlclByb3h5IiwiY2hyb21lZHJpdmVyIiwicHJveHlSZXFSZXMiLCJiaW5kIiwicHJveHlDb21tYW5kIiwiandwUHJveHlBY3RpdmUiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwibW9iaWxlVHlwZSIsInRleHQiLCJpc1VuZGVmaW5lZCIsImVycm9yQW5kVGhyb3ciLCJ0eXBlVW5pY29kZSIsIm1vYmlsZUluc3RhbGxNdWx0aXBsZUFwa3MiLCJpc0FycmF5IiwiYXBrcyIsImlzRW1wdHkiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIkIiLCJhbGwiLCJtYXAiLCJhcHAiLCJjb25maWd1cmVBcHAiLCJBUEtfRVhURU5TSU9OIiwib3B0aW9ucyIsIm1vYmlsZUJhY2tncm91bmRBcHAiLCJzZWNvbmRzIiwiYmFja2dyb3VuZCIsIk9iamVjdCIsImFzc2lnbiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VuZXJhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBBUEtfRVhURU5TSU9OIH0gZnJvbSAnLi4vZXh0ZW5zaW9ucyc7XG5cbmxldCBleHRlbnNpb25zID0ge30sXG4gICAgY29tbWFuZHMgPSB7fSxcbiAgICBoZWxwZXJzID0ge307XG5cbmNvbW1hbmRzLmdldFBhZ2VTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9zb3VyY2UnLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0Q2xpcGJvYXJkID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCAyOSlcbiAgICA/IChhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2dldF9jbGlwYm9hcmQnLCAnUE9TVCcsIHt9KSlcbiAgICA6IChhd2FpdCB0aGlzLmFkYi5nZXRDbGlwYm9hcmQoKSk7XG59O1xuXG4vLyBOZWVkIHRvIG92ZXJyaWRlIHRoaXMgZm9yIGNvcnJlY3QgdW5pY29kZSBzdXBwb3J0XG5jb21tYW5kcy5kb1NlbmRLZXlzID0gYXN5bmMgZnVuY3Rpb24gKHBhcmFtcykge1xuICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9rZXlzJywgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuLy8gdWlhdXRvbWF0b3IyIGRvZXNuJ3Qgc3VwcG9ydCBtZXRhc3RhdGUgZm9yIGtleWV2ZW50c1xuY29tbWFuZHMua2V5ZXZlbnQgPSBhc3luYyBmdW5jdGlvbiAoa2V5Y29kZSwgbWV0YXN0YXRlKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBJZ25vcmluZyBtZXRhc3RhdGUgJHttZXRhc3RhdGV9YCk7XG4gIGF3YWl0IHRoaXMuYWRiLmtleWV2ZW50KGtleWNvZGUpO1xufTtcblxuLy8gVXNlIEFEQiBzaW5jZSB3ZSBkb24ndCBoYXZlIFVpQXV0b21hdG9yXG5jb21tYW5kcy5iYWNrID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBhd2FpdCB0aGlzLmFkYi5rZXlldmVudCg0KTtcbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9kaXNwbGF5X2RlbnNpdHknLCAnR0VUJywge30pO1xufTtcblxuLy8gbWVtb2l6ZWQgaW4gY29uc3RydWN0b3JcbmNvbW1hbmRzLmdldFdpbmRvd1NpemUgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy93aW5kb3cvY3VycmVudC9zaXplJywgJ0dFVCcsIHt9KTtcbn07XG5cbi8vIEZvciBXM0NcbmNvbW1hbmRzLmdldFdpbmRvd1JlY3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0V2luZG93U2l6ZSgpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gIH07XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiAobW9iaWxlQ29tbWFuZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG1vYmlsZUNvbW1hbmRzTWFwcGluZyA9IHtcbiAgICBzaGVsbDogJ21vYmlsZVNoZWxsJyxcblxuICAgIGV4ZWNFbXVDb25zb2xlQ29tbWFuZDogJ21vYmlsZUV4ZWNFbXVDb25zb2xlQ29tbWFuZCcsXG5cbiAgICBkcmFnR2VzdHVyZTogJ21vYmlsZURyYWdHZXN0dXJlJyxcbiAgICBmbGluZ0dlc3R1cmU6ICdtb2JpbGVGbGluZ0dlc3R1cmUnLFxuICAgIGRvdWJsZUNsaWNrR2VzdHVyZTogJ21vYmlsZURvdWJsZUNsaWNrR2VzdHVyZScsXG4gICAgY2xpY2tHZXN0dXJlOiAnbW9iaWxlQ2xpY2tHZXN0dXJlJyxcbiAgICBsb25nQ2xpY2tHZXN0dXJlOiAnbW9iaWxlTG9uZ0NsaWNrR2VzdHVyZScsXG4gICAgcGluY2hDbG9zZUdlc3R1cmU6ICdtb2JpbGVQaW5jaENsb3NlR2VzdHVyZScsXG4gICAgcGluY2hPcGVuR2VzdHVyZTogJ21vYmlsZVBpbmNoT3Blbkdlc3R1cmUnLFxuICAgIHN3aXBlR2VzdHVyZTogJ21vYmlsZVN3aXBlR2VzdHVyZScsXG4gICAgc2Nyb2xsR2VzdHVyZTogJ21vYmlsZVNjcm9sbEdlc3R1cmUnLFxuICAgIHNjcm9sbEJhY2tUbzogJ21vYmlsZVNjcm9sbEJhY2tUbycsXG4gICAgc2Nyb2xsOiAnbW9iaWxlU2Nyb2xsJyxcbiAgICB2aWV3cG9ydFNjcmVlbnNob3Q6ICdtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QnLFxuICAgIHZpZXdwb3J0UmVjdDogJ21vYmlsZVZpZXdQb3J0UmVjdCcsXG5cbiAgICBkZWVwTGluazogJ21vYmlsZURlZXBMaW5rJyxcblxuICAgIHN0YXJ0TG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCcsXG4gICAgc3RvcExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCcsXG5cbiAgICBhY2NlcHRBbGVydDogJ21vYmlsZUFjY2VwdEFsZXJ0JyxcbiAgICBkaXNtaXNzQWxlcnQ6ICdtb2JpbGVEaXNtaXNzQWxlcnQnLFxuXG4gICAgYmF0dGVyeUluZm86ICdtb2JpbGVHZXRCYXR0ZXJ5SW5mbycsXG5cbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG5cbiAgICBnZXREZXZpY2VUaW1lOiAnbW9iaWxlR2V0RGV2aWNlVGltZScsXG5cbiAgICBjaGFuZ2VQZXJtaXNzaW9uczogJ21vYmlsZUNoYW5nZVBlcm1pc3Npb25zJyxcbiAgICBnZXRQZXJtaXNzaW9uczogJ21vYmlsZUdldFBlcm1pc3Npb25zJyxcblxuICAgIHBlcmZvcm1FZGl0b3JBY3Rpb246ICdtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uJyxcblxuICAgIHN0YXJ0U2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmcnLFxuICAgIHN0b3BTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nJyxcblxuICAgIGdldE5vdGlmaWNhdGlvbnM6ICdtb2JpbGVHZXROb3RpZmljYXRpb25zJyxcblxuICAgIGxpc3RTbXM6ICdtb2JpbGVMaXN0U21zJyxcblxuICAgIHR5cGU6ICdtb2JpbGVUeXBlJyxcbiAgICByZXBsYWNlRWxlbWVudFZhbHVlOiAnbW9iaWxlUmVwbGFjZUVsZW1lbnRWYWx1ZScsXG5cbiAgICBwdXNoRmlsZTogJ21vYmlsZVB1c2hGaWxlJyxcbiAgICBwdWxsRmlsZTogJ21vYmlsZVB1bGxGaWxlJyxcbiAgICBwdWxsRm9sZGVyOiAnbW9iaWxlUHVsbEZvbGRlcicsXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcXVlcnlBcHBTdGF0ZTogJ21vYmlsZVF1ZXJ5QXBwU3RhdGUnLFxuICAgIGFjdGl2YXRlQXBwOiAnbW9iaWxlQWN0aXZhdGVBcHAnLFxuICAgIHJlbW92ZUFwcDogJ21vYmlsZVJlbW92ZUFwcCcsXG4gICAgdGVybWluYXRlQXBwOiAnbW9iaWxlVGVybWluYXRlQXBwJyxcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG4gICAgYmFja2dyb3VuZEFwcDogJ21vYmlsZUJhY2tncm91bmRBcHAnLFxuICAgIGdldEN1cnJlbnRBY3Rpdml0eTogJ2dldEN1cnJlbnRBY3Rpdml0eScsXG4gICAgZ2V0Q3VycmVudFBhY2thZ2U6ICdnZXRDdXJyZW50UGFja2FnZScsXG5cbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBnZXRBcHBTdHJpbmdzOiAnbW9iaWxlR2V0QXBwU3RyaW5ncycsXG5cbiAgICBpbnN0YWxsTXVsdGlwbGVBcGtzOiAnbW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcycsXG5cbiAgICBsb2NrOiAnbG9jaycsXG4gICAgdW5sb2NrOiAnbW9iaWxlVW5sb2NrJyxcbiAgICBpc0xvY2tlZDogJ2lzTG9ja2VkJyxcblxuICAgIHJlZnJlc2hHcHNDYWNoZTogJ21vYmlsZVJlZnJlc2hHcHNDYWNoZScsXG5cbiAgICBzdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcbiAgICBpc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmc6ICdtb2JpbGVJc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmcnLFxuICAgIHN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmc6ICdtb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcblxuICAgIGdldENvbm5lY3Rpdml0eTogJ21vYmlsZUdldENvbm5lY3Rpdml0eScsXG4gICAgc2V0Q29ubmVjdGl2aXR5OiAnbW9iaWxlU2V0Q29ubmVjdGl2aXR5JyxcblxuICAgIGhpZGVLZXlib2FyZDogJ21vYmlsZUhpZGVLZXlib2FyZCcsXG4gICAgaXNLZXlib2FyZFNob3duOiAnaXNLZXlib2FyZFNob3duJyxcblxuICAgIHByZXNzS2V5OiAnbW9iaWxlUHJlc3NLZXknLFxuXG4gICAgZ2V0RGlzcGxheURlbnNpdHk6ICdnZXREaXNwbGF5RGVuc2l0eScsXG4gICAgZ2V0U3lzdGVtQmFyczogJ2dldFN5c3RlbUJhcnMnLFxuXG4gICAgZmluZ2VycHJpbnQ6ICdtb2JpbGVmaW5nZXJwcmludCcsXG4gICAgc2VuZFNtczogJ21vYmlsZVNlbmRTbXMnLFxuICAgIGdzbUNhbGw6ICdtb2JpbGVHc21DYWxsJyxcbiAgICBnc21TaWduYWw6ICdtb2JpbGVHc21TaWduYWwnLFxuICAgIGdzbVZvaWNlOiAnbW9iaWxlR3NtVm9pY2UnLFxuICAgIHBvd2VyQWM6ICdtb2JpbGVQb3dlckFjJyxcbiAgICBwb3dlckNhcGFjaXR5OiAnbW9iaWxlUG93ZXJDYXBhY2l0eScsXG4gICAgbmV0d29ya1NwZWVkOiAnbW9iaWxlTmV0d29ya1NwZWVkJyxcbiAgICBzZW5zb3JTZXQ6ICdzZW5zb3JTZXQnLFxuICB9O1xuXG4gIGlmICghXy5oYXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCBcIiR7bW9iaWxlQ29tbWFuZH1cIi4gYCArXG4gICAgICBgT25seSAke18ua2V5cyhtb2JpbGVDb21tYW5kc01hcHBpbmcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW21vYmlsZUNvbW1hbmRzTWFwcGluZ1ttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0U2NyZWVuc2hvdCgpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWN0YW5nbGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIFJlY3RhbmdsZS5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICogQHJldHVybnMge1JlY3RhbmdsZX0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVWaWV3UG9ydFJlY3QgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVWaWV3UG9ydFJlY3QgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbn07XG5cbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uICh1cmwpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRVcmkodXJsLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERlZXBMaW5rT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSB1cmwgLSBUaGUgbmFtZSBvZiBVUkwgdG8gc3RhcnQuXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBzdGFydCB0aGUgVVJJIHdpdGguXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB3YWl0Rm9yTGF1bmNoIFt0cnVlXSAtIGlmIGBmYWxzZWAgdGhlbiBhZGIgd29uJ3Qgd2FpdFxuICogZm9yIHRoZSBzdGFydGVkIGFjdGl2aXR5IHRvIHJldHVybiB0aGUgY29udHJvbFxuICovXG5cbi8qKlxuICogU3RhcnQgVVJMIHRoYXQgdGFrZSB1c2VycyBkaXJlY3RseSB0byBzcGVjaWZpYyBjb250ZW50IGluIHRoZSBhcHBcbiAqIEBwYXJhbSB7RGVlcExpbmtPcHRzfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlZXBMaW5rID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXJsLFxuICAgIHBhY2thZ2U6IHBrZyxcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgcGtnLCB7IHdhaXRGb3JMYXVuY2ggfSk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2Uvb3Blbl9ub3RpZmljYXRpb25zJywgJ1BPU1QnLCB7fSk7XG59O1xuXG5jb21tYW5kcy51cGRhdGVTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChzZXR0aW5ncykge1xuICBhd2FpdCB0aGlzLnNldHRpbmdzLnVwZGF0ZShzZXR0aW5ncyk7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdQT1NUJywge3NldHRpbmdzfSk7XG59O1xuXG5jb21tYW5kcy5nZXRTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZHJpdmVyU2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGNvbnN0IHNlcnZlclNldHRpbmdzID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ0dFVCcpO1xuICByZXR1cm4gey4uLmRyaXZlclNldHRpbmdzLCAuLi5zZXJ2ZXJTZXR0aW5nc307XG59O1xuXG4vKipcbiAqIE92ZXJyaWRpbmcgYXBwaXVtLWFuZHJvaWQtZHJpdmVyJ3Mgd3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QsXG4gKiB1bmxpa2UgaW4gYXBwaXVtLWFuZHJvaWQtZHJpdmVyIGF2b2lkaW5nIGFkYiByZXN0YXJ0aW5nIGFzIGl0IGludGVyblxuICoga2lsbHMgVWlBdXRvbWF0b3IyIHNlcnZlciBydW5uaW5nIGluIHRoZSBkZXZpY2UuXG4gKiovXG5oZWxwZXJzLndyYXBCb290c3RyYXBEaXNjb25uZWN0ID0gYXN5bmMgZnVuY3Rpb24gKHdyYXBwZWQpIHtcbiAgYXdhaXQgd3JhcHBlZCgpO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyIGFuZCByZWRpcmVjdCB0byB1aWF1dG9tYXRvcjJcbmhlbHBlcnMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eVJlcVJlcy5iaW5kKHRoaXMudWlhdXRvbWF0b3IyKTtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eUNvbW1hbmQuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBhdmFpbGFibGUgaW5mbyBlbnRyaWVzIGNhbiBiZSBmb3VuZCBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tdWlhdXRvbWF0b3IyLXNlcnZlci9ibG9iL21hc3Rlci9hcHAvc3JjL21haW4vamF2YS9pby9hcHBpdW0vdWlhdXRvbWF0b3IyL2hhbmRsZXIvR2V0RGV2aWNlSW5mby5qYXZhXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZUluZm8gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2luZm8nLCAnR0VUJyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFR5cGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ3xudW1iZXJ8Ym9vbGVhbn0gdGV4dCAtIFRoZSB0ZXh0IHRvIHR5cGVcbiAqL1xuXG4vKipcbiAqIFR5cGVzIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZy5cbiAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZvY3VzIGlzIGFscmVhZHkgcHV0XG4gKiB0byB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgYmVmb3JlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge1R5cGluZ09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGlucHV0IHRleHQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gYWRiXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYHRleHRgIHByb3BlcnR5IGhhcyBub3QgYmVlbiBwcm92aWRlZFxuICovXG5jb21tYW5kcy5tb2JpbGVUeXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVHlwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0ZXh0LFxuICB9ID0gb3B0cztcbiAgaWYgKF8uaXNVbmRlZmluZWQodGV4dCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGUgJ3RleHQnIGFyZ3VtZW50IGlzIG1hbmRhdG9yeWApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi50eXBlVW5pY29kZSh0ZXh0KTtcbn07XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gYXBrcyAtIFRoZSBsaXN0IG9mIEFQS3MgdG8gaW5zdGFsbC4gRWFjaCBBUEsgc2hvdWxkIGJlIGEgcGF0aCB0byBhIGFwa1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZG93bmxvYWRhYmxlIFVSTCBhcyBIVFRQL0hUVFBTLlxuICogQHByb3BlcnR5IHtJbnN0YWxsT3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogSW5zdGFsbCBtdWx0aXBsZSBBUEtzIHdpdGggYGluc3RhbGwtbXVsdGlwbGVgIG9wdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0luc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBpbnN0YWxsaW5nIHRoZSBnaXZlbiBBUEtzLlxuICovXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBpZiAoIV8uaXNBcnJheShvcHRzLmFwa3MpIHx8IF8uaXNFbXB0eShvcHRzLmFwa3MpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignTm8gYXBrcyBhcmUgZ2l2ZW4gdG8gaW5zdGFsbCcpO1xuICB9XG4gIGNvbnN0IGFwa3MgPSBhd2FpdCBCLmFsbChvcHRzLmFwa3NcbiAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTl0pKSk7XG4gIGF3YWl0IHRoaXMuYWRiLmluc3RhbGxNdWx0aXBsZUFwa3MoYXBrcywgb3B0cy5vcHRpb25zKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQmFja2dyb3VuZEFwcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzZWNvbmRzIFRoZSBhbW91bnQgb2Ygc2Vjb25kcyB0byB3YWl0IGJldHdlZW5cbiAqIHB1dHRpbmcgdGhlIGFwcCB0byBiYWNrZ3JvdW5kIGFuZCByZXN0b3JpbmcgaXQuIEFueSBuZWdhdGl2ZSB2YWx1ZVxuICogbWVhbnMgdG8gbm90IHJlc3RvcmUgdGhlIGFwcCBhZnRlciBwdXR0aW5nIGl0IHRvIGJhY2tncm91bmQuXG4gKi9cblxuLyoqXG4gKiBQdXRzIHRoZSBhcHAgdG8gYmFja2dyb3VuZCBhbmQgd2FpdHMgdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzIFRoZW4gcmVzdG9yZXMgdGhlIGFwcFxuICogaWYgbmVjZXNzYXJ5LiBUaGUgY2FsbCBpcyBibG9ja2luZy5cbiAqXG4gKiBAcGFyYW0ge0JhY2tncm91bmRBcHBPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUJhY2tncm91bmRBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVCYWNrZ3JvdW5kQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHNlY29uZHMgPSAtMSxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJhY2tncm91bmQoc2Vjb25kcyk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxXQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFJSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0VBQ2ZDLFFBQVEsR0FBRyxDQUFDLENBQUM7RUFDYkMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUVoQkQsUUFBUSxDQUFDRSxhQUFhLEdBQUcsa0JBQWtCO0VBQ3pD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
@@ -1 +1 @@
1
- {"version":3,"file":"general.js","names":["_lodash","_interopRequireDefault","require","_bluebird","_driver","_extensions","extensions","commands","helpers","getPageSource","uiautomator2","jwproxy","command","getClipboard","adb","getApiLevel","doSendKeys","params","keyevent","keycode","metastate","log","debug","back","getDisplayDensity","getWindowSize","getWindowRect","width","height","x","y","executeMobile","mobileCommand","opts","mobileCommandsMapping","shell","execEmuConsoleCommand","dragGesture","flingGesture","doubleClickGesture","clickGesture","longClickGesture","pinchCloseGesture","pinchOpenGesture","swipeGesture","scrollGesture","scrollBackTo","scroll","viewportScreenshot","viewportRect","deepLink","startLogsBroadcast","stopLogsBroadcast","acceptAlert","dismissAlert","batteryInfo","deviceInfo","getDeviceTime","changePermissions","getPermissions","performEditorAction","startScreenStreaming","stopScreenStreaming","getNotifications","listSms","type","sensorSet","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","backgroundApp","getCurrentActivity","getCurrentPackage","startActivity","startService","stopService","broadcast","getContexts","getAppStrings","installMultipleApks","lock","unlock","isLocked","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","getConnectivity","setConnectivity","hideKeyboard","isKeyboardShown","pressKey","getSystemBars","_","has","errors","UnknownCommandError","keys","mobileViewportScreenshot","getViewportScreenshot","mobileViewPortRect","getViewPortRect","setUrl","url","startUri","appPackage","mobileDeepLink","package","pkg","waitForLaunch","openNotifications","updateSettings","settings","update","getSettings","driverSettings","serverSettings","wrapBootstrapDisconnect","wrapped","suspendChromedriverProxy","chromedriver","proxyReqRes","bind","proxyCommand","jwpProxyActive","mobileGetDeviceInfo","mobileType","text","isUndefined","errorAndThrow","typeUnicode","mobileInstallMultipleApks","isArray","apks","isEmpty","InvalidArgumentError","B","all","map","app","configureApp","APK_EXTENSION","options","mobileBackgroundApp","seconds","background","Object","assign","_default","exports","default"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport B from 'bluebird';\nimport { errors } from 'appium/driver';\nimport { APK_EXTENSION } from '../extensions';\n\nlet extensions = {},\n commands = {},\n helpers = {};\n\ncommands.getPageSource = async function () {\n return await this.uiautomator2.jwproxy.command('/source', 'GET', {});\n};\n\ncommands.getClipboard = async function () {\n return (await this.adb.getApiLevel() < 29)\n ? (await this.uiautomator2.jwproxy.command('/appium/device/get_clipboard', 'POST', {}))\n : (await this.adb.getClipboard());\n};\n\n// Need to override this for correct unicode support\ncommands.doSendKeys = async function (params) {\n await this.uiautomator2.jwproxy.command('/keys', 'POST', params);\n};\n\n// uiautomator2 doesn't support metastate for keyevents\ncommands.keyevent = async function (keycode, metastate) {\n this.log.debug(`Ignoring metastate ${metastate}`);\n await this.adb.keyevent(keycode);\n};\n\n// Use ADB since we don't have UiAutomator\ncommands.back = async function () {\n await this.adb.keyevent(4);\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n return await this.uiautomator2.jwproxy.command('/appium/device/display_density', 'GET', {});\n};\n\n// memoized in constructor\ncommands.getWindowSize = async function () {\n return await this.uiautomator2.jwproxy.command('/window/current/size', 'GET', {});\n};\n\n// For W3C\ncommands.getWindowRect = async function () {\n const {width, height} = await this.getWindowSize();\n return {\n width,\n height,\n x: 0,\n y: 0,\n };\n};\n\nextensions.executeMobile = async function (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n dragGesture: 'mobileDragGesture',\n flingGesture: 'mobileFlingGesture',\n doubleClickGesture: 'mobileDoubleClickGesture',\n clickGesture: 'mobileClickGesture',\n longClickGesture: 'mobileLongClickGesture',\n pinchCloseGesture: 'mobilePinchCloseGesture',\n pinchOpenGesture: 'mobilePinchOpenGesture',\n swipeGesture: 'mobileSwipeGesture',\n scrollGesture: 'mobileScrollGesture',\n scrollBackTo: 'mobileScrollBackTo',\n scroll: 'mobileScroll',\n viewportScreenshot: 'mobileViewportScreenshot',\n viewportRect: 'mobileViewPortRect',\n\n deepLink: 'mobileDeepLink',\n\n startLogsBroadcast: 'mobileStartLogsBroadcast',\n stopLogsBroadcast: 'mobileStopLogsBroadcast',\n\n acceptAlert: 'mobileAcceptAlert',\n dismissAlert: 'mobileDismissAlert',\n\n batteryInfo: 'mobileGetBatteryInfo',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n type: 'mobileType',\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 backgroundApp: 'mobileBackgroundApp',\n getCurrentActivity: 'getCurrentActivity',\n getCurrentPackage: 'getCurrentPackage',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n getContexts: 'mobileGetContexts',\n\n getAppStrings: 'mobileGetAppStrings',\n\n installMultipleApks: 'mobileInstallMultipleApks',\n\n lock: 'lock',\n unlock: 'mobileUnlock',\n isLocked: 'isLocked',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n\n getConnectivity: 'mobileGetConnectivity',\n setConnectivity: 'mobileSetConnectivity',\n\n hideKeyboard: 'mobileHideKeyboard',\n isKeyboardShown: 'isKeyboardShown',\n\n pressKey: 'mobilePressKey',\n\n getDisplayDensity: 'getDisplayDensity',\n getSystemBars: 'getSystemBars',\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\ncommands.mobileViewportScreenshot = async function () {\n return await this.getViewportScreenshot();\n};\n\n/**\n * @typedef {object} Rectangle\n * @property {number} left - The left coordinate of the Rectangle.\n * @property {number} top - The top coordinate of the Rectangle.\n * @property {number} width - The width of Rectangle.\n * @property {number} height - The height of Rectangle.\n */\n\n/**\n * Returns the viewport coordinates.\n * @returns {Rectangle} The viewport coordinates.\n */\ncommands.mobileViewPortRect = async function mobileViewPortRect () {\n return await this.getViewPortRect();\n};\n\ncommands.setUrl = async function (url) {\n await this.adb.startUri(url, this.opts.appPackage);\n};\n\n/**\n * @typedef {object} DeepLinkOpts\n * @property {!string} url - The name of URL to start.\n * @property {!string} package - The name of the package to start the URI with.\n * @property {?boolean} waitForLaunch [true] - if `false` then adb won't wait\n * for the started activity to return the control\n */\n\n/**\n * Start URL that take users directly to specific content in the app\n * @param {DeepLinkOpts} opts\n */\ncommands.mobileDeepLink = async function (opts = {}) {\n const {\n url,\n package: pkg,\n waitForLaunch,\n } = opts;\n return await this.adb.startUri(url, pkg, { waitForLaunch });\n};\n\ncommands.openNotifications = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/open_notifications', 'POST', {});\n};\n\ncommands.updateSettings = async function (settings) {\n await this.settings.update(settings);\n await this.uiautomator2.jwproxy.command('/appium/settings', 'POST', {settings});\n};\n\ncommands.getSettings = async function () {\n const driverSettings = this.settings.getSettings();\n const serverSettings = await this.uiautomator2.jwproxy.command('/appium/settings', 'GET');\n return {...driverSettings, ...serverSettings};\n};\n\n/**\n * Overriding appium-android-driver's wrapBootstrapDisconnect,\n * unlike in appium-android-driver avoiding adb restarting as it intern\n * kills UiAutomator2 server running in the device.\n **/\nhelpers.wrapBootstrapDisconnect = async function (wrapped) {\n await wrapped();\n};\n\n// Stop proxying to any Chromedriver and redirect to uiautomator2\nhelpers.suspendChromedriverProxy = function () {\n this.chromedriver = null;\n this.proxyReqRes = this.uiautomator2.proxyReqRes.bind(this.uiautomator2);\n this.proxyCommand = this.uiautomator2.proxyCommand.bind(this.uiautomator2);\n this.jwpProxyActive = true;\n};\n\n/**\n * The list of available info entries can be found at\n * https://github.com/appium/appium-uiautomator2-server/blob/master/app/src/main/java/io/appium/uiautomator2/handler/GetDeviceInfo.java\n */\ncommands.mobileGetDeviceInfo = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/info', 'GET');\n};\n\n/**\n * @typedef {Object} TypingOptions\n * @property {!string|number|boolean} text - The text to type\n */\n\n/**\n * Types the given Unicode string.\n * It is expected that the focus is already put\n * to the destination input field before this method is called.\n *\n * @param {TypingOptions} opts\n * @returns {boolean} `true` if the input text has been successfully sent to adb\n * @throws {Error} if `text` property has not been provided\n */\ncommands.mobileType = async function mobileType (opts = {}) {\n const {\n text,\n } = opts;\n if (_.isUndefined(text)) {\n this.log.errorAndThrow(`The 'text' argument is mandatory`);\n }\n return await this.adb.typeUnicode(text);\n};\n\n\n/**\n * @typedef {Object} InstallOptions\n * @property {boolean} allowTestPackages [false] - Set to true in order to allow test\n * packages installation.\n * @property {boolean} useSdcard [false] - Set to true to install the app on sdcard\n * instead of the device memory.\n * @property {boolean} grantPermissions [false] - Set to true in order to grant all the\n * permissions requested in the application's manifest\n * automatically after the installation is completed\n * under Android 6+.\n * @property {boolean} replace [true] - Set it to false if you don't want\n * the application to be upgraded/reinstalled\n * if it is already present on the device.\n * @property {boolean} partialInstall [false] - Install apks partially. It is used for 'install-multiple'.\n * https://android.stackexchange.com/questions/111064/what-is-a-partial-application-install-via-adb\n */\n\n/**\n * @typedef {Object} InstallMultipleApksOptions\n * @property {Array<string>} apks - The list of APKs to install. Each APK should be a path to a apk\n * or downloadable URL as HTTP/HTTPS.\n * @property {InstallOptions} options\n */\n\n/**\n * Install multiple APKs with `install-multiple` option.\n *\n * @param {InstallMultipleApksOptions} opts\n * @throws {Error} if an error occured while installing the given APKs.\n */\ncommands.mobileInstallMultipleApks = async function (opts = {}) {\n if (!_.isArray(opts.apks) || _.isEmpty(opts.apks)) {\n throw new errors.InvalidArgumentError('No apks are given to install');\n }\n const apks = await B.all(opts.apks\n .map((app) => this.helpers.configureApp(app, [APK_EXTENSION])));\n await this.adb.installMultipleApks(apks, opts.options);\n};\n\n/**\n * @typedef {Object} BackgroundAppOptions\n * @property {number} seconds The amount of seconds to wait between\n * putting the app to background and restoring it. Any negative value\n * means to not restore the app after putting it to background.\n */\n\n/**\n * Puts the app to background and waits the given number of seconds Then restores the app\n * if necessary. The call is blocking.\n *\n * @param {BackgroundAppOptions} opts\n */\ncommands.mobileBackgroundApp = async function mobileBackgroundApp (opts = {}) {\n const {\n seconds = -1,\n } = opts;\n return await this.background(seconds);\n};\n\nObject.assign(extensions, commands, helpers);\n\nexport default extensions;\n"],"mappings":"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"}
1
+ {"version":3,"file":"general.js","names":["_lodash","_interopRequireDefault","require","_bluebird","_driver","_extensions","extensions","commands","helpers","getPageSource","uiautomator2","jwproxy","command","getClipboard","adb","getApiLevel","doSendKeys","params","keyevent","keycode","metastate","log","debug","back","getDisplayDensity","getWindowSize","getWindowRect","width","height","x","y","executeMobile","mobileCommand","opts","mobileCommandsMapping","shell","execEmuConsoleCommand","dragGesture","flingGesture","doubleClickGesture","clickGesture","longClickGesture","pinchCloseGesture","pinchOpenGesture","swipeGesture","scrollGesture","scrollBackTo","scroll","viewportScreenshot","viewportRect","deepLink","startLogsBroadcast","stopLogsBroadcast","acceptAlert","dismissAlert","batteryInfo","deviceInfo","getDeviceTime","changePermissions","getPermissions","performEditorAction","startScreenStreaming","stopScreenStreaming","getNotifications","listSms","type","replaceElementValue","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","backgroundApp","getCurrentActivity","getCurrentPackage","startActivity","startService","stopService","broadcast","getContexts","getAppStrings","installMultipleApks","lock","unlock","isLocked","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","getConnectivity","setConnectivity","hideKeyboard","isKeyboardShown","pressKey","getSystemBars","fingerprint","sendSms","gsmCall","gsmSignal","gsmVoice","powerAc","powerCapacity","networkSpeed","sensorSet","_","has","errors","UnknownCommandError","keys","mobileViewportScreenshot","getViewportScreenshot","mobileViewPortRect","getViewPortRect","setUrl","url","startUri","appPackage","mobileDeepLink","package","pkg","waitForLaunch","openNotifications","updateSettings","settings","update","getSettings","driverSettings","serverSettings","wrapBootstrapDisconnect","wrapped","suspendChromedriverProxy","chromedriver","proxyReqRes","bind","proxyCommand","jwpProxyActive","mobileGetDeviceInfo","mobileType","text","isUndefined","errorAndThrow","typeUnicode","mobileInstallMultipleApks","isArray","apks","isEmpty","InvalidArgumentError","B","all","map","app","configureApp","APK_EXTENSION","options","mobileBackgroundApp","seconds","background","Object","assign","_default","exports","default"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport B from 'bluebird';\nimport { errors } from 'appium/driver';\nimport { APK_EXTENSION } from '../extensions';\n\nlet extensions = {},\n commands = {},\n helpers = {};\n\ncommands.getPageSource = async function () {\n return await this.uiautomator2.jwproxy.command('/source', 'GET', {});\n};\n\ncommands.getClipboard = async function () {\n return (await this.adb.getApiLevel() < 29)\n ? (await this.uiautomator2.jwproxy.command('/appium/device/get_clipboard', 'POST', {}))\n : (await this.adb.getClipboard());\n};\n\n// Need to override this for correct unicode support\ncommands.doSendKeys = async function (params) {\n await this.uiautomator2.jwproxy.command('/keys', 'POST', params);\n};\n\n// uiautomator2 doesn't support metastate for keyevents\ncommands.keyevent = async function (keycode, metastate) {\n this.log.debug(`Ignoring metastate ${metastate}`);\n await this.adb.keyevent(keycode);\n};\n\n// Use ADB since we don't have UiAutomator\ncommands.back = async function () {\n await this.adb.keyevent(4);\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n return await this.uiautomator2.jwproxy.command('/appium/device/display_density', 'GET', {});\n};\n\n// memoized in constructor\ncommands.getWindowSize = async function () {\n return await this.uiautomator2.jwproxy.command('/window/current/size', 'GET', {});\n};\n\n// For W3C\ncommands.getWindowRect = async function () {\n const {width, height} = await this.getWindowSize();\n return {\n width,\n height,\n x: 0,\n y: 0,\n };\n};\n\nextensions.executeMobile = async function (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n dragGesture: 'mobileDragGesture',\n flingGesture: 'mobileFlingGesture',\n doubleClickGesture: 'mobileDoubleClickGesture',\n clickGesture: 'mobileClickGesture',\n longClickGesture: 'mobileLongClickGesture',\n pinchCloseGesture: 'mobilePinchCloseGesture',\n pinchOpenGesture: 'mobilePinchOpenGesture',\n swipeGesture: 'mobileSwipeGesture',\n scrollGesture: 'mobileScrollGesture',\n scrollBackTo: 'mobileScrollBackTo',\n scroll: 'mobileScroll',\n viewportScreenshot: 'mobileViewportScreenshot',\n viewportRect: 'mobileViewPortRect',\n\n deepLink: 'mobileDeepLink',\n\n startLogsBroadcast: 'mobileStartLogsBroadcast',\n stopLogsBroadcast: 'mobileStopLogsBroadcast',\n\n acceptAlert: 'mobileAcceptAlert',\n dismissAlert: 'mobileDismissAlert',\n\n batteryInfo: 'mobileGetBatteryInfo',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n type: 'mobileType',\n replaceElementValue: 'mobileReplaceElementValue',\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 backgroundApp: 'mobileBackgroundApp',\n getCurrentActivity: 'getCurrentActivity',\n getCurrentPackage: 'getCurrentPackage',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n getContexts: 'mobileGetContexts',\n\n getAppStrings: 'mobileGetAppStrings',\n\n installMultipleApks: 'mobileInstallMultipleApks',\n\n lock: 'lock',\n unlock: 'mobileUnlock',\n isLocked: 'isLocked',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n\n getConnectivity: 'mobileGetConnectivity',\n setConnectivity: 'mobileSetConnectivity',\n\n hideKeyboard: 'mobileHideKeyboard',\n isKeyboardShown: 'isKeyboardShown',\n\n pressKey: 'mobilePressKey',\n\n getDisplayDensity: 'getDisplayDensity',\n getSystemBars: 'getSystemBars',\n\n fingerprint: 'mobilefingerprint',\n sendSms: 'mobileSendSms',\n gsmCall: 'mobileGsmCall',\n gsmSignal: 'mobileGsmSignal',\n gsmVoice: 'mobileGsmVoice',\n powerAc: 'mobilePowerAc',\n powerCapacity: 'mobilePowerCapacity',\n networkSpeed: 'mobileNetworkSpeed',\n sensorSet: 'sensorSet',\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\ncommands.mobileViewportScreenshot = async function () {\n return await this.getViewportScreenshot();\n};\n\n/**\n * @typedef {object} Rectangle\n * @property {number} left - The left coordinate of the Rectangle.\n * @property {number} top - The top coordinate of the Rectangle.\n * @property {number} width - The width of Rectangle.\n * @property {number} height - The height of Rectangle.\n */\n\n/**\n * Returns the viewport coordinates.\n * @returns {Rectangle} The viewport coordinates.\n */\ncommands.mobileViewPortRect = async function mobileViewPortRect () {\n return await this.getViewPortRect();\n};\n\ncommands.setUrl = async function (url) {\n await this.adb.startUri(url, this.opts.appPackage);\n};\n\n/**\n * @typedef {object} DeepLinkOpts\n * @property {!string} url - The name of URL to start.\n * @property {!string} package - The name of the package to start the URI with.\n * @property {?boolean} waitForLaunch [true] - if `false` then adb won't wait\n * for the started activity to return the control\n */\n\n/**\n * Start URL that take users directly to specific content in the app\n * @param {DeepLinkOpts} opts\n */\ncommands.mobileDeepLink = async function (opts = {}) {\n const {\n url,\n package: pkg,\n waitForLaunch,\n } = opts;\n return await this.adb.startUri(url, pkg, { waitForLaunch });\n};\n\ncommands.openNotifications = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/open_notifications', 'POST', {});\n};\n\ncommands.updateSettings = async function (settings) {\n await this.settings.update(settings);\n await this.uiautomator2.jwproxy.command('/appium/settings', 'POST', {settings});\n};\n\ncommands.getSettings = async function () {\n const driverSettings = this.settings.getSettings();\n const serverSettings = await this.uiautomator2.jwproxy.command('/appium/settings', 'GET');\n return {...driverSettings, ...serverSettings};\n};\n\n/**\n * Overriding appium-android-driver's wrapBootstrapDisconnect,\n * unlike in appium-android-driver avoiding adb restarting as it intern\n * kills UiAutomator2 server running in the device.\n **/\nhelpers.wrapBootstrapDisconnect = async function (wrapped) {\n await wrapped();\n};\n\n// Stop proxying to any Chromedriver and redirect to uiautomator2\nhelpers.suspendChromedriverProxy = function () {\n this.chromedriver = null;\n this.proxyReqRes = this.uiautomator2.proxyReqRes.bind(this.uiautomator2);\n this.proxyCommand = this.uiautomator2.proxyCommand.bind(this.uiautomator2);\n this.jwpProxyActive = true;\n};\n\n/**\n * The list of available info entries can be found at\n * https://github.com/appium/appium-uiautomator2-server/blob/master/app/src/main/java/io/appium/uiautomator2/handler/GetDeviceInfo.java\n */\ncommands.mobileGetDeviceInfo = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/info', 'GET');\n};\n\n/**\n * @typedef {Object} TypingOptions\n * @property {!string|number|boolean} text - The text to type\n */\n\n/**\n * Types the given Unicode string.\n * It is expected that the focus is already put\n * to the destination input field before this method is called.\n *\n * @param {TypingOptions} opts\n * @returns {boolean} `true` if the input text has been successfully sent to adb\n * @throws {Error} if `text` property has not been provided\n */\ncommands.mobileType = async function mobileType (opts = {}) {\n const {\n text,\n } = opts;\n if (_.isUndefined(text)) {\n this.log.errorAndThrow(`The 'text' argument is mandatory`);\n }\n return await this.adb.typeUnicode(text);\n};\n\n\n/**\n * @typedef {Object} InstallOptions\n * @property {boolean} allowTestPackages [false] - Set to true in order to allow test\n * packages installation.\n * @property {boolean} useSdcard [false] - Set to true to install the app on sdcard\n * instead of the device memory.\n * @property {boolean} grantPermissions [false] - Set to true in order to grant all the\n * permissions requested in the application's manifest\n * automatically after the installation is completed\n * under Android 6+.\n * @property {boolean} replace [true] - Set it to false if you don't want\n * the application to be upgraded/reinstalled\n * if it is already present on the device.\n * @property {boolean} partialInstall [false] - Install apks partially. It is used for 'install-multiple'.\n * https://android.stackexchange.com/questions/111064/what-is-a-partial-application-install-via-adb\n */\n\n/**\n * @typedef {Object} InstallMultipleApksOptions\n * @property {Array<string>} apks - The list of APKs to install. Each APK should be a path to a apk\n * or downloadable URL as HTTP/HTTPS.\n * @property {InstallOptions} options\n */\n\n/**\n * Install multiple APKs with `install-multiple` option.\n *\n * @param {InstallMultipleApksOptions} opts\n * @throws {Error} if an error occured while installing the given APKs.\n */\ncommands.mobileInstallMultipleApks = async function (opts = {}) {\n if (!_.isArray(opts.apks) || _.isEmpty(opts.apks)) {\n throw new errors.InvalidArgumentError('No apks are given to install');\n }\n const apks = await B.all(opts.apks\n .map((app) => this.helpers.configureApp(app, [APK_EXTENSION])));\n await this.adb.installMultipleApks(apks, opts.options);\n};\n\n/**\n * @typedef {Object} BackgroundAppOptions\n * @property {number} seconds The amount of seconds to wait between\n * putting the app to background and restoring it. Any negative value\n * means to not restore the app after putting it to background.\n */\n\n/**\n * Puts the app to background and waits the given number of seconds Then restores the app\n * if necessary. The call is blocking.\n *\n * @param {BackgroundAppOptions} opts\n */\ncommands.mobileBackgroundApp = async function mobileBackgroundApp (opts = {}) {\n const {\n seconds = -1,\n } = opts;\n return await this.background(seconds);\n};\n\nObject.assign(extensions, commands, helpers);\n\nexport default extensions;\n"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.requireArgs = requireArgs;
8
+ require("source-map-support/register");
9
+ var _lodash = _interopRequireDefault(require("lodash"));
10
+ var _driver = require("appium/driver");
11
+ function requireArgs(argNames, opts = {}) {
12
+ for (const argName of _lodash.default.isArray(argNames) ? argNames : [argNames]) {
13
+ if (!_lodash.default.has(opts, argName)) {
14
+ throw new _driver.errors.InvalidArgumentError(`'${argName}' argument must be provided`);
15
+ }
16
+ }
17
+ return opts;
18
+ }
19
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZHJpdmVyIiwicmVxdWlyZUFyZ3MiLCJhcmdOYW1lcyIsIm9wdHMiLCJhcmdOYW1lIiwiXyIsImlzQXJyYXkiLCJoYXMiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5cbi8qKlxuICogQXNzZXJ0IHRoZSBwcmVzZW5jZSBvZiBwYXJ0aWN1bGFyIGtleXMgaW4gdGhlIGdpdmVuIG9iamVjdFxuICpcbiAqIEB0ZW1wbGF0ZSB7T2JqZWN0fSBUXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gYXJnTmFtZXMgb25lIG9yIG1vcmUga2V5IG5hbWVzXG4gKiBAcGFyYW0ge1R9IG9wdHMgdGhlIG9iamVjdCB0byBjaGVja1xuICogQHJldHVybnMge1R9IHRoZSBzYW1lIGdpdmVuIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZUFyZ3MgKGFyZ05hbWVzLCBvcHRzID0ge30pIHtcbiAgZm9yIChjb25zdCBhcmdOYW1lIG9mIChfLmlzQXJyYXkoYXJnTmFtZXMpID8gYXJnTmFtZXMgOiBbYXJnTmFtZXNdKSkge1xuICAgIGlmICghXy5oYXMob3B0cywgYXJnTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYCcke2FyZ05hbWV9JyBhcmd1bWVudCBtdXN0IGJlIHByb3ZpZGVkYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRzO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQVVPLFNBQVNFLFdBQVdBLENBQUVDLFFBQVEsRUFBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ2hELEtBQUssTUFBTUMsT0FBTyxJQUFLQyxlQUFDLENBQUNDLE9BQU8sQ0FBQ0osUUFBUSxDQUFDLEdBQUdBLFFBQVEsR0FBRyxDQUFDQSxRQUFRLENBQUMsRUFBRztJQUNuRSxJQUFJLENBQUNHLGVBQUMsQ0FBQ0UsR0FBRyxDQUFDSixJQUFJLEVBQUVDLE9BQU8sQ0FBQyxFQUFFO01BQ3pCLE1BQU0sSUFBSUksY0FBTSxDQUFDQyxvQkFBb0IsQ0FBRSxJQUFHTCxPQUFRLDZCQUE0QixDQUFDO0lBQ2pGO0VBQ0Y7RUFDQSxPQUFPRCxJQUFJO0FBQ2IifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":["_lodash","_interopRequireDefault","require","_driver","requireArgs","argNames","opts","argName","_","isArray","has","errors","InvalidArgumentError"],"sources":["../../lib/utils.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\n\n/**\n * Assert the presence of particular keys in the given object\n *\n * @template {Object} T\n * @param {string|string[]} argNames one or more key names\n * @param {T} opts the object to check\n * @returns {T} the same given object\n */\nexport function requireArgs (argNames, opts = {}) {\n for (const argName of (_.isArray(argNames) ? argNames : [argNames])) {\n if (!_.has(opts, argName)) {\n throw new errors.InvalidArgumentError(`'${argName}' argument must be provided`);\n }\n }\n return opts;\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAUO,SAASE,WAAWA,CAAEC,QAAQ,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EAChD,KAAK,MAAMC,OAAO,IAAKC,eAAC,CAACC,OAAO,CAACJ,QAAQ,CAAC,GAAGA,QAAQ,GAAG,CAACA,QAAQ,CAAC,EAAG;IACnE,IAAI,CAACG,eAAC,CAACE,GAAG,CAACJ,IAAI,EAAEC,OAAO,CAAC,EAAE;MACzB,MAAM,IAAII,cAAM,CAACC,oBAAoB,CAAE,IAAGL,OAAQ,6BAA4B,CAAC;IACjF;EACF;EACA,OAAOD,IAAI;AACb"}
@@ -1,6 +1,7 @@
1
1
  import _ from 'lodash';
2
2
  import { util } from 'appium/support';
3
3
  import { PROTOCOLS, W3C_ELEMENT_KEY } from 'appium/driver';
4
+ import { requireArgs } from '../utils';
4
5
 
5
6
  let commands = {}, helpers = {}, extensions = {};
6
7
 
@@ -121,6 +122,23 @@ commands.getElementRect = async function (elementId) {
121
122
  return await this.uiautomator2.jwproxy.command(`/element/${elementId}/rect`, 'GET');
122
123
  };
123
124
 
125
+ /**
126
+ * @typedef {Object} ReplaceValueOptions
127
+ * @property {string} elementId The id of the element whose content will be replaced
128
+ * @property {string} text The actual text to set
129
+ */
130
+
131
+ /**
132
+ * Sends text to the given element by replacing its previous content
133
+ *
134
+ * @param {ReplaceValueOptions} opts
135
+ * @throws {Error} If there was a faulre while setting the text
136
+ */
137
+ commands.mobileReplaceElementValue = async function mobileReplaceElementValue (opts = {}) {
138
+ const {elementId, text} = requireArgs(['elementId', 'text'], opts);
139
+ return await this.uiautomator2.jwproxy.command(`/element/${elementId}/value`, 'POST', {text, replace: true});
140
+ };
141
+
124
142
  Object.assign(extensions, commands, helpers);
125
143
  export { commands, helpers };
126
144
  export default extensions;
@@ -100,7 +100,7 @@ extensions.executeMobile = async function (mobileCommand, opts = {}) {
100
100
  listSms: 'mobileListSms',
101
101
 
102
102
  type: 'mobileType',
103
- sensorSet: 'sensorSet',
103
+ replaceElementValue: 'mobileReplaceElementValue',
104
104
 
105
105
  pushFile: 'mobilePushFile',
106
106
  pullFile: 'mobilePullFile',
@@ -149,6 +149,16 @@ extensions.executeMobile = async function (mobileCommand, opts = {}) {
149
149
 
150
150
  getDisplayDensity: 'getDisplayDensity',
151
151
  getSystemBars: 'getSystemBars',
152
+
153
+ fingerprint: 'mobilefingerprint',
154
+ sendSms: 'mobileSendSms',
155
+ gsmCall: 'mobileGsmCall',
156
+ gsmSignal: 'mobileGsmSignal',
157
+ gsmVoice: 'mobileGsmVoice',
158
+ powerAc: 'mobilePowerAc',
159
+ powerCapacity: 'mobilePowerCapacity',
160
+ networkSpeed: 'mobileNetworkSpeed',
161
+ sensorSet: 'sensorSet',
152
162
  };
153
163
 
154
164
  if (!_.has(mobileCommandsMapping, mobileCommand)) {
package/lib/utils.js ADDED
@@ -0,0 +1,19 @@
1
+ import _ from 'lodash';
2
+ import { errors } from 'appium/driver';
3
+
4
+ /**
5
+ * Assert the presence of particular keys in the given object
6
+ *
7
+ * @template {Object} T
8
+ * @param {string|string[]} argNames one or more key names
9
+ * @param {T} opts the object to check
10
+ * @returns {T} the same given object
11
+ */
12
+ export function requireArgs (argNames, opts = {}) {
13
+ for (const argName of (_.isArray(argNames) ? argNames : [argNames])) {
14
+ if (!_.has(opts, argName)) {
15
+ throw new errors.InvalidArgumentError(`'${argName}' argument must be provided`);
16
+ }
17
+ }
18
+ return opts;
19
+ }
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "appium-uiautomator2-driver",
3
- "version": "2.21.0",
3
+ "version": "2.22.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "appium-uiautomator2-driver",
9
- "version": "2.21.0",
9
+ "version": "2.22.0",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@babel/runtime": "^7.0.0",
13
13
  "appium-adb": "^9.11.0",
14
- "appium-android-driver": "^5.10.4",
14
+ "appium-android-driver": "^5.11.0",
15
15
  "appium-chromedriver": "^5.3.1",
16
16
  "appium-uiautomator2-server": "^5.7.2",
17
17
  "asyncbox": "^2.3.1",
@@ -1035,7 +1035,7 @@
1035
1035
  }
1036
1036
  },
1037
1037
  "node_modules/@types/node": {
1038
- "version": "18.16.1",
1038
+ "version": "18.16.2",
1039
1039
  "license": "MIT"
1040
1040
  },
1041
1041
  "node_modules/@types/normalize-package-data": {
@@ -1278,7 +1278,7 @@
1278
1278
  }
1279
1279
  },
1280
1280
  "node_modules/appium-android-driver": {
1281
- "version": "5.10.4",
1281
+ "version": "5.11.0",
1282
1282
  "license": "Apache-2.0",
1283
1283
  "dependencies": {
1284
1284
  "@babel/runtime": "^7.0.0",
@@ -1342,7 +1342,7 @@
1342
1342
  }
1343
1343
  },
1344
1344
  "node_modules/appium-uiautomator2-server": {
1345
- "version": "5.8.1",
1345
+ "version": "5.8.2",
1346
1346
  "license": "Apache-2.0",
1347
1347
  "engines": {
1348
1348
  "node": ">=14",
@@ -1521,7 +1521,7 @@
1521
1521
  "license": "MIT"
1522
1522
  },
1523
1523
  "node_modules/axios": {
1524
- "version": "1.3.6",
1524
+ "version": "1.4.0",
1525
1525
  "license": "MIT",
1526
1526
  "dependencies": {
1527
1527
  "follow-redirects": "^1.15.0",
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "automated testing",
8
8
  "android"
9
9
  ],
10
- "version": "2.21.0",
10
+ "version": "2.22.0",
11
11
  "author": "Appium Contributors",
12
12
  "license": "Apache-2.0",
13
13
  "repository": {
@@ -58,7 +58,7 @@
58
58
  "dependencies": {
59
59
  "@babel/runtime": "^7.0.0",
60
60
  "appium-adb": "^9.11.0",
61
- "appium-android-driver": "^5.10.4",
61
+ "appium-android-driver": "^5.11.0",
62
62
  "appium-chromedriver": "^5.3.1",
63
63
  "appium-uiautomator2-server": "^5.7.2",
64
64
  "asyncbox": "^2.3.1",