appium-android-driver 5.0.6 → 5.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -1
- package/build/lib/commands/actions.js +16 -20
- package/build/lib/commands/app-management.js +15 -17
- package/build/lib/commands/context.js +46 -66
- package/build/lib/commands/coverage.js +2 -6
- package/build/lib/commands/element.js +3 -9
- package/build/lib/commands/emu-console.js +3 -5
- package/build/lib/commands/execute.js +3 -6
- package/build/lib/commands/file-actions.js +22 -29
- package/build/lib/commands/general.js +18 -30
- package/build/lib/commands/ime.js +8 -21
- package/build/lib/commands/network.js +14 -27
- package/build/lib/commands/performance.js +3 -6
- package/build/lib/commands/recordscreen.js +27 -38
- package/build/lib/commands/shell.js +6 -7
- package/build/lib/commands/streamscreen.js +29 -43
- package/build/lib/commands/system-bars.js +10 -16
- package/build/lib/commands/touch.js +4 -10
- package/build/lib/driver.js +61 -67
- package/build/lib/webview-helpers.js +2 -7
- package/lib/commands/actions.js +18 -19
- package/lib/commands/app-management.js +13 -12
- package/lib/commands/context.js +36 -40
- package/lib/commands/coverage.js +1 -4
- package/lib/commands/element.js +2 -3
- package/lib/commands/emu-console.js +2 -2
- package/lib/commands/execute.js +2 -3
- package/lib/commands/file-actions.js +31 -25
- package/lib/commands/general.js +16 -18
- package/lib/commands/ime.js +7 -8
- package/lib/commands/network.js +15 -16
- package/lib/commands/performance.js +2 -3
- package/lib/commands/recordscreen.js +23 -22
- package/lib/commands/shell.js +6 -6
- package/lib/commands/streamscreen.js +22 -23
- package/lib/commands/system-bars.js +11 -10
- package/lib/commands/touch.js +3 -4
- package/lib/driver.js +45 -46
- package/lib/webview-helpers.js +1 -7
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -161,4 +161,3 @@ Some tests need particular emulators. Currently they are twofold:
|
|
|
161
161
|
Some tests also also need a specific version of Chromedriver (specifically, `2.20`),
|
|
162
162
|
which is available in the `test/assets` folder, or can be specified with the
|
|
163
163
|
`CHROME_2_20_EXECUTABLE` environment variable.
|
|
164
|
-
|
|
@@ -15,8 +15,6 @@ var _support = require("@appium/support");
|
|
|
15
15
|
|
|
16
16
|
var _path = _interopRequireDefault(require("path"));
|
|
17
17
|
|
|
18
|
-
var _logger = _interopRequireDefault(require("../logger"));
|
|
19
|
-
|
|
20
18
|
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
21
19
|
|
|
22
20
|
var _jimp = _interopRequireDefault(require("jimp"));
|
|
@@ -32,8 +30,7 @@ exports.helpers = helpers;
|
|
|
32
30
|
exports.commands = commands;
|
|
33
31
|
|
|
34
32
|
commands.keyevent = async function keyevent(keycode, metastate = null) {
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
this.log.warn('keyevent will be deprecated use pressKeyCode');
|
|
37
34
|
return await this.pressKeyCode(keycode, metastate);
|
|
38
35
|
};
|
|
39
36
|
|
|
@@ -201,7 +198,7 @@ commands.setLocation = async function setLocation(latitude, longitude) {
|
|
|
201
198
|
|
|
202
199
|
commands.fingerprint = async function fingerprint(fingerprintId) {
|
|
203
200
|
if (!this.isEmulator()) {
|
|
204
|
-
|
|
201
|
+
this.log.errorAndThrow('fingerprint method is only available for emulators');
|
|
205
202
|
}
|
|
206
203
|
|
|
207
204
|
await this.adb.fingerprint(fingerprintId);
|
|
@@ -209,7 +206,7 @@ commands.fingerprint = async function fingerprint(fingerprintId) {
|
|
|
209
206
|
|
|
210
207
|
commands.sendSMS = async function sendSMS(phoneNumber, message) {
|
|
211
208
|
if (!this.isEmulator()) {
|
|
212
|
-
|
|
209
|
+
this.log.errorAndThrow('sendSMS method is only available for emulators');
|
|
213
210
|
}
|
|
214
211
|
|
|
215
212
|
await this.adb.sendSMS(phoneNumber, message);
|
|
@@ -217,7 +214,7 @@ commands.sendSMS = async function sendSMS(phoneNumber, message) {
|
|
|
217
214
|
|
|
218
215
|
commands.gsmCall = async function gsmCall(phoneNumber, action) {
|
|
219
216
|
if (!this.isEmulator()) {
|
|
220
|
-
|
|
217
|
+
this.log.errorAndThrow('gsmCall method is only available for emulators');
|
|
221
218
|
}
|
|
222
219
|
|
|
223
220
|
await this.adb.gsmCall(phoneNumber, action);
|
|
@@ -225,7 +222,7 @@ commands.gsmCall = async function gsmCall(phoneNumber, action) {
|
|
|
225
222
|
|
|
226
223
|
commands.gsmSignal = async function gsmSignal(signalStrengh) {
|
|
227
224
|
if (!this.isEmulator()) {
|
|
228
|
-
|
|
225
|
+
this.log.errorAndThrow('gsmSignal method is only available for emulators');
|
|
229
226
|
}
|
|
230
227
|
|
|
231
228
|
await this.adb.gsmSignal(signalStrengh);
|
|
@@ -233,7 +230,7 @@ commands.gsmSignal = async function gsmSignal(signalStrengh) {
|
|
|
233
230
|
|
|
234
231
|
commands.gsmVoice = async function gsmVoice(state) {
|
|
235
232
|
if (!this.isEmulator()) {
|
|
236
|
-
|
|
233
|
+
this.log.errorAndThrow('gsmVoice method is only available for emulators');
|
|
237
234
|
}
|
|
238
235
|
|
|
239
236
|
await this.adb.gsmVoice(state);
|
|
@@ -241,7 +238,7 @@ commands.gsmVoice = async function gsmVoice(state) {
|
|
|
241
238
|
|
|
242
239
|
commands.powerAC = async function powerAC(state) {
|
|
243
240
|
if (!this.isEmulator()) {
|
|
244
|
-
|
|
241
|
+
this.log.errorAndThrow('powerAC method is only available for emulators');
|
|
245
242
|
}
|
|
246
243
|
|
|
247
244
|
await this.adb.powerAC(state);
|
|
@@ -249,7 +246,7 @@ commands.powerAC = async function powerAC(state) {
|
|
|
249
246
|
|
|
250
247
|
commands.powerCapacity = async function powerCapacity(batteryPercent) {
|
|
251
248
|
if (!this.isEmulator()) {
|
|
252
|
-
|
|
249
|
+
this.log.errorAndThrow('powerCapacity method is only available for emulators');
|
|
253
250
|
}
|
|
254
251
|
|
|
255
252
|
await this.adb.powerCapacity(batteryPercent);
|
|
@@ -257,7 +254,7 @@ commands.powerCapacity = async function powerCapacity(batteryPercent) {
|
|
|
257
254
|
|
|
258
255
|
commands.networkSpeed = async function networkSpeed(networkSpeed) {
|
|
259
256
|
if (!this.isEmulator()) {
|
|
260
|
-
|
|
257
|
+
this.log.errorAndThrow('networkSpeed method is only available for emulators');
|
|
261
258
|
}
|
|
262
259
|
|
|
263
260
|
await this.adb.networkSpeed(networkSpeed);
|
|
@@ -270,15 +267,15 @@ commands.sensorSet = async function sensorSet(sensor = {}) {
|
|
|
270
267
|
} = sensor;
|
|
271
268
|
|
|
272
269
|
if (!_support.util.hasValue(sensorType)) {
|
|
273
|
-
|
|
270
|
+
this.log.errorAndThrow(`'sensorType' argument is required`);
|
|
274
271
|
}
|
|
275
272
|
|
|
276
273
|
if (!_support.util.hasValue(value)) {
|
|
277
|
-
|
|
274
|
+
this.log.errorAndThrow(`'value' argument is required`);
|
|
278
275
|
}
|
|
279
276
|
|
|
280
277
|
if (!this.isEmulator()) {
|
|
281
|
-
|
|
278
|
+
this.log.errorAndThrow('sensorSet method is only available for emulators');
|
|
282
279
|
}
|
|
283
280
|
|
|
284
281
|
await this.adb.sensorSet(sensorType, value);
|
|
@@ -344,7 +341,7 @@ commands.getScreenshot = async function getScreenshot() {
|
|
|
344
341
|
try {
|
|
345
342
|
image = await this.getScreenshotDataWithAdbExecOut(this.adb);
|
|
346
343
|
} catch (e) {
|
|
347
|
-
|
|
344
|
+
this.log.info(`Cannot get screenshot data with 'adb exec-out' because of '${e.message}'. ` + `Defaulting to 'adb shell' call`);
|
|
348
345
|
}
|
|
349
346
|
}
|
|
350
347
|
|
|
@@ -353,8 +350,7 @@ commands.getScreenshot = async function getScreenshot() {
|
|
|
353
350
|
image = await this.getScreenshotDataWithAdbShell(this.adb, this.opts);
|
|
354
351
|
} catch (e) {
|
|
355
352
|
const err = `Cannot get screenshot data because of '${e.message}'. ` + `Make sure the 'LayoutParams.FLAG_SECURE' is not set for ` + `the current view`;
|
|
356
|
-
|
|
357
|
-
_logger.default.errorAndThrow(err);
|
|
353
|
+
this.log.errorAndThrow(err);
|
|
358
354
|
}
|
|
359
355
|
}
|
|
360
356
|
|
|
@@ -364,7 +360,7 @@ commands.getScreenshot = async function getScreenshot() {
|
|
|
364
360
|
try {
|
|
365
361
|
image = await image.rotate(-90 * screenOrientation);
|
|
366
362
|
} catch (err) {
|
|
367
|
-
|
|
363
|
+
this.log.warn(`Could not rotate screenshot due to error: ${err}`);
|
|
368
364
|
}
|
|
369
365
|
}
|
|
370
366
|
|
|
@@ -381,4 +377,4 @@ var _default = extensions;
|
|
|
381
377
|
exports.default = _default;require('source-map-support').install();
|
|
382
378
|
|
|
383
379
|
|
|
384
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hY3Rpb25zLmpzIl0sIm5hbWVzIjpbInN3aXBlU3RlcHNQZXJTZWMiLCJkcmFnU3RlcHNQZXJTZWMiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwia2V5ZXZlbnQiLCJrZXljb2RlIiwibWV0YXN0YXRlIiwibG9nIiwid2FybiIsInByZXNzS2V5Q29kZSIsImJvb3RzdHJhcCIsInNlbmRBY3Rpb24iLCJsb25nUHJlc3NLZXlDb2RlIiwiZ2V0T3JpZW50YXRpb24iLCJwYXJhbXMiLCJuYXR1cmFsT3JpZW50YXRpb24iLCJvcHRzIiwiYW5kcm9pZE5hdHVyYWxPcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uIiwidG9VcHBlckNhc2UiLCJzZXRPcmllbnRhdGlvbiIsImZha2VGbGljayIsInhTcGVlZCIsInlTcGVlZCIsImZha2VGbGlja0VsZW1lbnQiLCJlbGVtZW50SWQiLCJ4b2Zmc2V0IiwieW9mZnNldCIsInNwZWVkIiwic3dpcGUiLCJzdGFydFgiLCJzdGFydFkiLCJlbmRYIiwiZW5kWSIsImR1cmF0aW9uIiwidG91Y2hDb3VudCIsImVsSWQiLCJzd2lwZU9wdHMiLCJzdGVwcyIsIk1hdGgiLCJyb3VuZCIsInV0aWwiLCJoYXNWYWx1ZSIsImRvU3dpcGUiLCJwaW5jaENsb3NlIiwicGVyY2VudCIsInBpbmNoT3B0cyIsImRpcmVjdGlvbiIsInBpbmNoT3BlbiIsImZsaWNrIiwiZWxlbWVudCIsInhPZmZzZXQiLCJ5T2Zmc2V0IiwiZHJhZyIsImRlc3RFbElkIiwiZHJhZ09wdHMiLCJkb0RyYWciLCJsb2NrIiwic2Vjb25kcyIsImFkYiIsImlzTmFOIiwiZmxvYXRTZWNvbmRzIiwicGFyc2VGbG9hdCIsIkIiLCJkZWxheSIsInVubG9jayIsImlzTG9ja2VkIiwiaXNTY3JlZW5Mb2NrZWQiLCJhbmRyb2lkSGVscGVycyIsImNhcHMiLCJvcGVuTm90aWZpY2F0aW9ucyIsInNldExvY2F0aW9uIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJzZW5kVGVsbmV0Q29tbWFuZCIsImZpbmdlcnByaW50IiwiZmluZ2VycHJpbnRJZCIsImlzRW11bGF0b3IiLCJlcnJvckFuZFRocm93Iiwic2VuZFNNUyIsInBob25lTnVtYmVyIiwibWVzc2FnZSIsImdzbUNhbGwiLCJhY3Rpb24iLCJnc21TaWduYWwiLCJzaWduYWxTdHJlbmdoIiwiZ3NtVm9pY2UiLCJzdGF0ZSIsInBvd2VyQUMiLCJwb3dlckNhcGFjaXR5IiwiYmF0dGVyeVBlcmNlbnQiLCJuZXR3b3JrU3BlZWQiLCJzZW5zb3JTZXQiLCJzZW5zb3IiLCJzZW5zb3JUeXBlIiwidmFsdWUiLCJnZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJTaGVsbCIsImxvY2FsRmlsZSIsInRlbXBEaXIiLCJwYXRoIiwicHJlZml4Iiwic3VmZml4IiwiZnMiLCJleGlzdHMiLCJ1bmxpbmsiLCJwbmdEaXIiLCJhbmRyb2lkU2NyZWVuc2hvdFBhdGgiLCJwbmciLCJwb3NpeCIsInJlc29sdmUiLCJjbWQiLCJzaGVsbCIsImZpbGVTaXplIiwiRXJyb3IiLCJwdWxsIiwiamltcCIsInJlYWQiLCJnZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJFeGVjT3V0Iiwic3Rkb3V0Iiwic3RkZXJyIiwiY29kZSIsImV4ZWN1dGFibGUiLCJkZWZhdWx0QXJncyIsImNvbmNhdCIsImVuY29kaW5nIiwiaXNCdWZmZXIiLCJsZW5ndGgiLCJ0b1N0cmluZyIsImdldFNjcmVlbnNob3QiLCJhcGlMZXZlbCIsImdldEFwaUxldmVsIiwiaW1hZ2UiLCJlIiwiaW5mbyIsImVyciIsInNjcmVlbk9yaWVudGF0aW9uIiwiZ2V0U2NyZWVuT3JpZW50YXRpb24iLCJyb3RhdGUiLCJnZXRCdWZmZXIiLCJwcm9taXNpZnkiLCJjb250ZXh0IiwiaW1nQnVmZmVyIiwiTUlNRV9QTkciLCJPYmplY3QiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FB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TUFBUCxDQUFjN0ksVUFBZCxFQUEwQkYsUUFBMUIsRUFBb0NDLE9BQXBDO2VBRWVDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYW5kcm9pZEhlbHBlcnMgZnJvbSAnLi4vYW5kcm9pZC1oZWxwZXJzJztcbmltcG9ydCB7IGZzLCB1dGlsLCB0ZW1wRGlyfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgamltcCBmcm9tICdqaW1wJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuXG5jb25zdCBzd2lwZVN0ZXBzUGVyU2VjID0gMjg7XG5jb25zdCBkcmFnU3RlcHNQZXJTZWMgPSA0MDtcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb21tYW5kcy5rZXlldmVudCA9IGFzeW5jIGZ1bmN0aW9uIGtleWV2ZW50IChrZXljb2RlLCBtZXRhc3RhdGUgPSBudWxsKSB7XG4gIC8vIFRPRE8gZGVwcmVjYXRlIGtleWV2ZW50OyBjdXJyZW50bHkgd2Qgb25seSBpbXBsZW1lbnRzIGtleWV2ZW50XG4gIGxvZy53YXJuKCdrZXlldmVudCB3aWxsIGJlIGRlcHJlY2F0ZWQgdXNlIHByZXNzS2V5Q29kZScpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcmVzc0tleUNvZGUoa2V5Y29kZSwgbWV0YXN0YXRlKTtcbn07XG5cbmNvbW1hbmRzLnByZXNzS2V5Q29kZSA9IGFzeW5jIGZ1bmN0aW9uIHByZXNzS2V5Q29kZSAoa2V5Y29kZSwgbWV0YXN0YXRlID0gbnVsbCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbigncHJlc3NLZXlDb2RlJywge2tleWNvZGUsIG1ldGFzdGF0ZX0pO1xufTtcblxuY29tbWFuZHMubG9uZ1ByZXNzS2V5Q29kZSA9IGFzeW5jIGZ1bmN0aW9uIGxvbmdQcmVzc0tleUNvZGUgKGtleWNvZGUsIG1ldGFzdGF0ZSA9IG51bGwpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2xvbmdQcmVzc0tleUNvZGUnLCB7a2V5Y29kZSwgbWV0YXN0YXRlfSk7XG59O1xuXG5jb21tYW5kcy5nZXRPcmllbnRhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGdldE9yaWVudGF0aW9uICgpIHtcbiAgbGV0IHBhcmFtcyA9IHtcbiAgICBuYXR1cmFsT3JpZW50YXRpb246ICEhdGhpcy5vcHRzLmFuZHJvaWROYXR1cmFsT3JpZW50YXRpb24sXG4gIH07XG4gIGxldCBvcmllbnRhdGlvbiA9IGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ29yaWVudGF0aW9uJywgcGFyYW1zKTtcbiAgcmV0dXJuIG9yaWVudGF0aW9uLnRvVXBwZXJDYXNlKCk7XG59O1xuXG5jb21tYW5kcy5zZXRPcmllbnRhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIHNldE9yaWVudGF0aW9uIChvcmllbnRhdGlvbikge1xuICBvcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uLnRvVXBwZXJDYXNlKCk7XG4gIGxldCBwYXJhbXMgPSB7XG4gICAgb3JpZW50YXRpb24sXG4gICAgbmF0dXJhbE9yaWVudGF0aW9uOiAhIXRoaXMub3B0cy5hbmRyb2lkTmF0dXJhbE9yaWVudGF0aW9uLFxuICB9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignb3JpZW50YXRpb24nLCBwYXJhbXMpO1xufTtcblxuY29tbWFuZHMuZmFrZUZsaWNrID0gYXN5bmMgZnVuY3Rpb24gZmFrZUZsaWNrICh4U3BlZWQsIHlTcGVlZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZmxpY2snLCB7eFNwZWVkLCB5U3BlZWR9KTtcbn07XG5cbmNvbW1hbmRzLmZha2VGbGlja0VsZW1lbnQgPSBhc3luYyBmdW5jdGlvbiBmYWtlRmxpY2tFbGVtZW50IChlbGVtZW50SWQsIHhvZmZzZXQsIHlvZmZzZXQsIHNwZWVkKSB7XG4gIGxldCBwYXJhbXMgPSB7eG9mZnNldCwgeW9mZnNldCwgc3BlZWQsIGVsZW1lbnRJZH07XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OmZsaWNrJywgcGFyYW1zKTtcbn07XG5cbmNvbW1hbmRzLnN3aXBlID0gYXN5bmMgZnVuY3Rpb24gc3dpcGUgKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkdXJhdGlvbiwgdG91Y2hDb3VudCwgZWxJZCkge1xuICBpZiAoc3RhcnRYID09PSAnbnVsbCcpIHtcbiAgICBzdGFydFggPSAwLjU7XG4gIH1cbiAgaWYgKHN0YXJ0WSA9PT0gJ251bGwnKSB7XG4gICAgc3RhcnRZID0gMC41O1xuICB9XG4gIGxldCBzd2lwZU9wdHMgPSB7c3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksXG4gICAgICAgICAgICAgICAgICAgc3RlcHM6IE1hdGgucm91bmQoZHVyYXRpb24gKiBzd2lwZVN0ZXBzUGVyU2VjKX07XG4gIC8vIGdvaW5nIHRoZSBsb25nIHdheSBhbmQgY2hlY2tpbmcgZm9yIHVuZGVmaW5lZCBhbmQgbnVsbCBzaW5jZVxuICAvLyB3ZSBjYW4ndCBiZSBhc3N1cmVkIGBlbElkYCBpcyBhIHN0cmluZyBhbmQgbm90IGFuIGludFxuICBpZiAodXRpbC5oYXNWYWx1ZShlbElkKSkge1xuICAgIHN3aXBlT3B0cy5lbGVtZW50SWQgPSBlbElkO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmRvU3dpcGUoc3dpcGVPcHRzKTtcbn07XG5cbmNvbW1hbmRzLmRvU3dpcGUgPSBhc3luYyBmdW5jdGlvbiBkb1N3aXBlIChzd2lwZU9wdHMpIHtcbiAgaWYgKHV0aWwuaGFzVmFsdWUoc3dpcGVPcHRzLmVsZW1lbnRJZCkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpzd2lwZScsIHN3aXBlT3B0cyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3N3aXBlJywgc3dpcGVPcHRzKTtcbiAgfVxufTtcblxuY29tbWFuZHMucGluY2hDbG9zZSA9IGFzeW5jIGZ1bmN0aW9uIHBpbmNoQ2xvc2UgKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkdXJhdGlvbiwgcGVyY2VudCwgc3RlcHMsIGVsSWQpIHtcbiAgbGV0IHBpbmNoT3B0cyA9IHtcbiAgICBkaXJlY3Rpb246ICdpbicsXG4gICAgZWxlbWVudElkOiBlbElkLFxuICAgIHBlcmNlbnQsXG4gICAgc3RlcHNcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6cGluY2gnLCBwaW5jaE9wdHMpO1xufTtcblxuY29tbWFuZHMucGluY2hPcGVuID0gYXN5bmMgZnVuY3Rpb24gcGluY2hPcGVuIChzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHVyYXRpb24sIHBlcmNlbnQsIHN0ZXBzLCBlbElkKSB7XG4gIGxldCBwaW5jaE9wdHMgPSB7ZGlyZWN0aW9uOiAnb3V0JywgZWxlbWVudElkOiBlbElkLCBwZXJjZW50LCBzdGVwc307XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnBpbmNoJywgcGluY2hPcHRzKTtcbn07XG5cbmNvbW1hbmRzLmZsaWNrID0gYXN5bmMgZnVuY3Rpb24gZmxpY2sgKGVsZW1lbnQsIHhTcGVlZCwgeVNwZWVkLCB4T2Zmc2V0LCB5T2Zmc2V0LCBzcGVlZCkge1xuICBpZiAoZWxlbWVudCkge1xuICAgIGF3YWl0IHRoaXMuZmFrZUZsaWNrRWxlbWVudChlbGVtZW50LCB4T2Zmc2V0LCB5T2Zmc2V0LCBzcGVlZCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdGhpcy5mYWtlRmxpY2soeFNwZWVkLCB5U3BlZWQpO1xuICB9XG59O1xuXG5jb21tYW5kcy5kcmFnID0gYXN5bmMgZnVuY3Rpb24gZHJhZyAoc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGR1cmF0aW9uLCB0b3VjaENvdW50LCBlbGVtZW50SWQsIGRlc3RFbElkKSB7XG4gIGxldCBkcmFnT3B0cyA9IHtcbiAgICBlbGVtZW50SWQsIGRlc3RFbElkLCBzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSxcbiAgICBzdGVwczogTWF0aC5yb3VuZChkdXJhdGlvbiAqIGRyYWdTdGVwc1BlclNlYylcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZG9EcmFnKGRyYWdPcHRzKTtcblxufTtcblxuY29tbWFuZHMuZG9EcmFnID0gYXN5bmMgZnVuY3Rpb24gZG9EcmFnIChkcmFnT3B0cykge1xuICBpZiAodXRpbC5oYXNWYWx1ZShkcmFnT3B0cy5lbGVtZW50SWQpKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6ZHJhZycsIGRyYWdPcHRzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZHJhZycsIGRyYWdPcHRzKTtcbiAgfVxufTtcblxuY29tbWFuZHMubG9jayA9IGFzeW5jIGZ1bmN0aW9uIGxvY2sgKHNlY29uZHMpIHtcbiAgYXdhaXQgdGhpcy5hZGIubG9jaygpO1xuICBpZiAoaXNOYU4oc2Vjb25kcykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBmbG9hdFNlY29uZHMgPSBwYXJzZUZsb2F0KHNlY29uZHMpO1xuICBpZiAoZmxvYXRTZWNvbmRzIDw9IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgQi5kZWxheSgxMDAwICogZmxvYXRTZWNvbmRzKTtcbiAgYXdhaXQgdGhpcy51bmxvY2soKTtcbn07XG5cbmNvbW1hbmRzLmlzTG9ja2VkID0gYXN5bmMgZnVuY3Rpb24gaXNMb2NrZWQgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuaXNTY3JlZW5Mb2NrZWQoKTtcbn07XG5cbmNvbW1hbmRzLnVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIHVubG9jayAoKSB7XG4gIHJldHVybiBhd2FpdCBhbmRyb2lkSGVscGVycy51bmxvY2sodGhpcywgdGhpcy5hZGIsIHRoaXMuY2Fwcyk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIG9wZW5Ob3RpZmljYXRpb25zICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ29wZW5Ob3RpZmljYXRpb24nKTtcbn07XG5cbmNvbW1hbmRzLnNldExvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gc2V0TG9jYXRpb24gKGxhdGl0dWRlLCBsb25naXR1ZGUpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnNlbmRUZWxuZXRDb21tYW5kKGBnZW8gZml4ICR7bG9uZ2l0dWRlfSAke2xhdGl0dWRlfWApO1xufTtcblxuY29tbWFuZHMuZmluZ2VycHJpbnQgPSBhc3luYyBmdW5jdGlvbiBmaW5nZXJwcmludCAoZmluZ2VycHJpbnRJZCkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coJ2ZpbmdlcnByaW50IG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuZmluZ2VycHJpbnQoZmluZ2VycHJpbnRJZCk7XG59O1xuXG5jb21tYW5kcy5zZW5kU01TID0gYXN5bmMgZnVuY3Rpb24gc2VuZFNNUyAocGhvbmVOdW1iZXIsIG1lc3NhZ2UpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KCdzZW5kU01TIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuc2VuZFNNUyhwaG9uZU51bWJlciwgbWVzc2FnZSk7XG59O1xuXG5jb21tYW5kcy5nc21DYWxsID0gYXN5bmMgZnVuY3Rpb24gZ3NtQ2FsbCAocGhvbmVOdW1iZXIsIGFjdGlvbikge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coJ2dzbUNhbGwgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5nc21DYWxsKHBob25lTnVtYmVyLCBhY3Rpb24pO1xufTtcblxuY29tbWFuZHMuZ3NtU2lnbmFsID0gYXN5bmMgZnVuY3Rpb24gZ3NtU2lnbmFsIChzaWduYWxTdHJlbmdoKSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdygnZ3NtU2lnbmFsIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuZ3NtU2lnbmFsKHNpZ25hbFN0cmVuZ2gpO1xufTtcblxuY29tbWFuZHMuZ3NtVm9pY2UgPSBhc3luYyBmdW5jdGlvbiBnc21Wb2ljZSAoc3RhdGUpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KCdnc21Wb2ljZSBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLmdzbVZvaWNlKHN0YXRlKTtcbn07XG5cbmNvbW1hbmRzLnBvd2VyQUMgPSBhc3luYyBmdW5jdGlvbiBwb3dlckFDIChzdGF0ZSkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coJ3Bvd2VyQUMgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5wb3dlckFDKHN0YXRlKTtcbn07XG5cbmNvbW1hbmRzLnBvd2VyQ2FwYWNpdHkgPSBhc3luYyBmdW5jdGlvbiBwb3dlckNhcGFjaXR5IChiYXR0ZXJ5UGVyY2VudCkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coJ3Bvd2VyQ2FwYWNpdHkgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5wb3dlckNhcGFjaXR5KGJhdHRlcnlQZXJjZW50KTtcbn07XG5cbmNvbW1hbmRzLm5ldHdvcmtTcGVlZCA9IGFzeW5jIGZ1bmN0aW9uIG5ldHdvcmtTcGVlZCAobmV0d29ya1NwZWVkKSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdygnbmV0d29ya1NwZWVkIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIubmV0d29ya1NwZWVkKG5ldHdvcmtTcGVlZCk7XG59O1xuXG4vKipcbiAqIEVtdWxhdGUgc2Vuc29ycyB2YWx1ZXMgb24gdGhlIGNvbm5lY3RlZCBlbXVsYXRvci5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZW5zb3JcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZW5zb3JUeXBlIC0gc2Vuc29yIHR5cGUgZGVjbGFyZWQgaW4gYWRiLlNFTlNPUlNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZSAtIHZhbHVlIHRvIHNldCB0byB0aGUgc2Vuc29yXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFNlbnNvclxuICogQHRocm93cyB7RXJyb3J9IC0gSWYgc2Vuc29yVHlwZSBpcyBub3QgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IC0gSWYgdmFsdWUgZm9yIHRoZSBzZSBzb3IgaXMgbm90IGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSAtIElmIGRldmljZVR5cGUgaXMgbm90IGFuIGVtdWxhdG9yXG4gKi9cbmNvbW1hbmRzLnNlbnNvclNldCA9IGFzeW5jIGZ1bmN0aW9uIHNlbnNvclNldCAoc2Vuc29yID0ge30pIHtcbiAgY29uc3Qge3NlbnNvclR5cGUsIHZhbHVlfSA9IHNlbnNvcjtcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKHNlbnNvclR5cGUpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYCdzZW5zb3JUeXBlJyBhcmd1bWVudCBpcyByZXF1aXJlZGApO1xuICB9XG4gIGlmICghdXRpbC5oYXNWYWx1ZSh2YWx1ZSkpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ3ZhbHVlJyBhcmd1bWVudCBpcyByZXF1aXJlZGApO1xuICB9XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdygnc2Vuc29yU2V0IG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuc2Vuc29yU2V0KHNlbnNvclR5cGUsIHZhbHVlKTtcbn07XG5cbmhlbHBlcnMuZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiU2hlbGwgPSBhc3luYyBmdW5jdGlvbiBnZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJTaGVsbCAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IGxvY2FsRmlsZSA9IGF3YWl0IHRlbXBEaXIucGF0aCh7cHJlZml4OiAnYXBwaXVtJywgc3VmZml4OiAnLnBuZyd9KTtcbiAgaWYgKGF3YWl0IGZzLmV4aXN0cyhsb2NhbEZpbGUpKSB7XG4gICAgYXdhaXQgZnMudW5saW5rKGxvY2FsRmlsZSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBwbmdEaXIgPSBvcHRzLmFuZHJvaWRTY3JlZW5zaG90UGF0aCB8fCAnL2RhdGEvbG9jYWwvdG1wLyc7XG4gICAgY29uc3QgcG5nID0gcGF0aC5wb3NpeC5yZXNvbHZlKHBuZ0RpciwgJ3NjcmVlbnNob3QucG5nJyk7XG4gICAgY29uc3QgY21kID0gWycvc3lzdGVtL2Jpbi9ybScsIGAke3BuZ307YCwgJy9zeXN0ZW0vYmluL3NjcmVlbmNhcCcsICctcCcsIHBuZ107XG4gICAgYXdhaXQgYWRiLnNoZWxsKGNtZCk7XG4gICAgaWYgKCFhd2FpdCBhZGIuZmlsZVNpemUocG5nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc2l6ZSBvZiB0aGUgdGFrZW4gc2NyZWVuc2hvdCBlcXVhbHMgdG8gemVyby4nKTtcbiAgICB9XG4gICAgYXdhaXQgYWRiLnB1bGwocG5nLCBsb2NhbEZpbGUpO1xuICAgIHJldHVybiBhd2FpdCBqaW1wLnJlYWQobG9jYWxGaWxlKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsRmlsZSkpIHtcbiAgICAgIGF3YWl0IGZzLnVubGluayhsb2NhbEZpbGUpO1xuICAgIH1cbiAgfVxufTtcblxuaGVscGVycy5nZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJFeGVjT3V0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiRXhlY091dCAoYWRiKSB7XG4gIGxldCB7c3Rkb3V0LCBzdGRlcnIsIGNvZGV9ID0gYXdhaXQgZXhlYyhhZGIuZXhlY3V0YWJsZS5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRiLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChbJ2V4ZWMtb3V0JywgJy9zeXN0ZW0vYmluL3NjcmVlbmNhcCcsICctcCddKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtlbmNvZGluZzogJ2JpbmFyeScsIGlzQnVmZmVyOiB0cnVlfSk7XG4gIC8vIGlmIHRoZXJlIGlzIGFuIGVycm9yLCB0aHJvd1xuICBpZiAoY29kZSB8fCBzdGRlcnIubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTY3JlZW5zaG90IHJldHVybmVkIGVycm9yLCBjb2RlOiAnJHtjb2RlfScsIHN0ZGVycjogJyR7c3RkZXJyLnRvU3RyaW5nKCl9J2ApO1xuICB9XG4gIC8vIGlmIHdlIGRvbid0IGdldCBhbnl0aGluZyBhdCBhbGwsIHRocm93XG4gIGlmICghc3Rkb3V0Lmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2NyZWVuc2hvdCByZXR1cm5lZCBubyBkYXRhJyk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgamltcC5yZWFkKHN0ZG91dCk7XG59O1xuXG5jb21tYW5kcy5nZXRTY3JlZW5zaG90ID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2NyZWVuc2hvdCAoKSB7XG4gIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgbGV0IGltYWdlID0gbnVsbDtcbiAgaWYgKGFwaUxldmVsID4gMjApIHtcbiAgICB0cnkge1xuICAgICAgLy8gVGhpcyBzY3JlZW5zaG90aW5nIGFwcHJvYWNoIGlzIHdheSBmYXN0ZXIsIHNpbmNlIGl0IHJlcXVpcmVzIGxlc3MgZXh0ZXJuYWwgY29tbWFuZHNcbiAgICAgIC8vIHRvIGJlIGV4ZWN1dGVkLiBVbmZvcnR1bmF0ZWx5LCBleGVjLW91dCBvcHRpb24gaXMgb25seSBzdXBwb3J0ZWQgYnkgbmV3ZXIgQW5kcm9pZC9TREsgdmVyc2lvbnMgKDUuMCBhbmQgbGF0ZXIpXG4gICAgICBpbWFnZSA9IGF3YWl0IHRoaXMuZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiRXhlY091dCh0aGlzLmFkYik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmluZm8oYENhbm5vdCBnZXQgc2NyZWVuc2hvdCBkYXRhIHdpdGggJ2FkYiBleGVjLW91dCcgYmVjYXVzZSBvZiAnJHtlLm1lc3NhZ2V9Jy4gYCArXG4gICAgICAgICAgICAgICBgRGVmYXVsdGluZyB0byAnYWRiIHNoZWxsJyBjYWxsYCk7XG4gICAgfVxuICB9XG4gIGlmICghaW1hZ2UpIHtcbiAgICB0cnkge1xuICAgICAgaW1hZ2UgPSBhd2FpdCB0aGlzLmdldFNjcmVlbnNob3REYXRhV2l0aEFkYlNoZWxsKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IGBDYW5ub3QgZ2V0IHNjcmVlbnNob3QgZGF0YSBiZWNhdXNlIG9mICcke2UubWVzc2FnZX0nLiBgICtcbiAgICAgICAgICAgICAgICAgIGBNYWtlIHN1cmUgdGhlICdMYXlvdXRQYXJhbXMuRkxBR19TRUNVUkUnIGlzIG5vdCBzZXQgZm9yIGAgK1xuICAgICAgICAgICAgICAgICAgYHRoZSBjdXJyZW50IHZpZXdgO1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coZXJyKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFwaUxldmVsIDwgMjMpIHtcbiAgICAvLyBBbmRyb2lkIGJ1ZyA4NDMzNzQyIC0gcm90YXRlIHNjcmVlbnNob3QgaWYgc2NyZWVuIGlzIHJvdGF0ZWRcbiAgICBsZXQgc2NyZWVuT3JpZW50YXRpb24gPSBhd2FpdCB0aGlzLmFkYi5nZXRTY3JlZW5PcmllbnRhdGlvbigpO1xuICAgIHRyeSB7XG4gICAgICBpbWFnZSA9IGF3YWl0IGltYWdlLnJvdGF0ZSgtOTAgKiBzY3JlZW5PcmllbnRhdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihgQ291bGQgbm90IHJvdGF0ZSBzY3JlZW5zaG90IGR1ZSB0byBlcnJvcjogJHtlcnJ9YCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGdldEJ1ZmZlciA9IEIucHJvbWlzaWZ5KGltYWdlLmdldEJ1ZmZlciwge2NvbnRleHQ6IGltYWdlfSk7XG4gIGNvbnN0IGltZ0J1ZmZlciA9IGF3YWl0IGdldEJ1ZmZlcihqaW1wLk1JTUVfUE5HKTtcbiAgcmV0dXJuIGltZ0J1ZmZlci50b1N0cmluZygnYmFzZTY0Jyk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
380
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hY3Rpb25zLmpzIl0sIm5hbWVzIjpbInN3aXBlU3RlcHNQZXJTZWMiLCJkcmFnU3RlcHNQZXJTZWMiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwia2V5ZXZlbnQiLCJrZXljb2RlIiwibWV0YXN0YXRlIiwibG9nIiwid2FybiIsInByZXNzS2V5Q29kZSIsImJvb3RzdHJhcCIsInNlbmRBY3Rpb24iLCJsb25nUHJlc3NLZXlDb2RlIiwiZ2V0T3JpZW50YXRpb24iLCJwYXJhbXMiLCJuYXR1cmFsT3JpZW50YXRpb24iLCJvcHRzIiwiYW5kcm9pZE5hdHVyYWxPcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uIiwidG9VcHBlckNhc2UiLCJzZXRPcmllbnRhdGlvbiIsImZha2VGbGljayIsInhTcGVlZCIsInlTcGVlZCIsImZha2VGbGlja0VsZW1lbnQiLCJlbGVtZW50SWQiLCJ4b2Zmc2V0IiwieW9mZnNldCIsInNwZWVkIiwic3dpcGUiLCJzdGFydFgiLCJzdGFydFkiLCJlbmRYIiwiZW5kWSIsImR1cmF0aW9uIiwidG91Y2hDb3VudCIsImVsSWQiLCJzd2lwZU9wdHMiLCJzdGVwcyIsIk1hdGgiLCJyb3VuZCIsInV0aWwiLCJoYXNWYWx1ZSIsImRvU3dpcGUiLCJwaW5jaENsb3NlIiwicGVyY2VudCIsInBpbmNoT3B0cyIsImRpcmVjdGlvbiIsInBpbmNoT3BlbiIsImZsaWNrIiwiZWxlbWVudCIsInhPZmZzZXQiLCJ5T2Zmc2V0IiwiZHJhZyIsImRlc3RFbElkIiwiZHJhZ09wdHMiLCJkb0RyYWciLCJsb2NrIiwic2Vjb25kcyIsImFkYiIsImlzTmFOIiwiZmxvYXRTZWNvbmRzIiwicGFyc2VGbG9hdCIsIkIiLCJkZWxheSIsInVubG9jayIsImlzTG9ja2VkIiwiaXNTY3JlZW5Mb2NrZWQiLCJhbmRyb2lkSGVscGVycyIsImNhcHMiLCJvcGVuTm90aWZpY2F0aW9ucyIsInNldExvY2F0aW9uIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJzZW5kVGVsbmV0Q29tbWFuZCIsImZpbmdlcnByaW50IiwiZmluZ2VycHJpbnRJZCIsImlzRW11bGF0b3IiLCJlcnJvckFuZFRocm93Iiwic2VuZFNNUyIsInBob25lTnVtYmVyIiwibWVzc2FnZSIsImdzbUNhbGwiLCJhY3Rpb24iLCJnc21TaWduYWwiLCJzaWduYWxTdHJlbmdoIiwiZ3NtVm9pY2UiLCJzdGF0ZSIsInBvd2VyQUMiLCJwb3dlckNhcGFjaXR5IiwiYmF0dGVyeVBlcmNlbnQiLCJuZXR3b3JrU3BlZWQiLCJzZW5zb3JTZXQiLCJzZW5zb3IiLCJzZW5zb3JUeXBlIiwidmFsdWUiLCJnZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJTaGVsbCIsImxvY2FsRmlsZSIsInRlbXBEaXIiLCJwYXRoIiwicHJlZml4Iiwic3VmZml4IiwiZnMiLCJleGlzdHMiLCJ1bmxpbmsiLCJwbmdEaXIiLCJhbmRyb2lkU2NyZWVuc2hvdFBhdGgiLCJwbmciLCJwb3NpeCIsInJlc29sdmUiLCJjbWQiLCJzaGVsbCIsImZpbGVTaXplIiwiRXJyb3IiLCJwdWxsIiwiamltcCIsInJlYWQiLCJnZXRTY3JlZW5zaG90RGF0YVdpdGhBZGJFeGVjT3V0Iiwic3Rkb3V0Iiwic3RkZXJyIiwiY29kZSIsImV4ZWN1dGFibGUiLCJkZWZhdWx0QXJncyIsImNvbmNhdCIsImVuY29kaW5nIiwiaXNCdWZmZXIiLCJsZW5ndGgiLCJ0b1N0cmluZyIsImdldFNjcmVlbnNob3QiLCJhcGlMZXZlbCIsImdldEFwaUxldmVsIiwiaW1hZ2UiLCJlIiwiaW5mbyIsImVyciIsInNjcmVlbk9yaWVudGF0aW9uIiwiZ2V0U2NyZWVuT3JpZW50YXRpb24iLCJyb3RhdGUiLCJnZXRCdWZmZXIiLCJwcm9taXNpZnkiLCJjb250ZXh0IiwiaW1nQnVmZmVyIiwiTUlNRV9QTkciLCJPYmplY3QiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFB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UUFBTVUsU0FBUyxHQUFHLE1BQU1ILFNBQVMsQ0FBQ3ZCLGNBQUsyQixRQUFOLENBQWpDO0FBQ0EsU0FBT0QsU0FBUyxDQUFDZCxRQUFWLENBQW1CLFFBQW5CLENBQVA7QUFDRCxDQW5DRDs7QUFxQ0FnQixNQUFNLENBQUNDLE1BQVAsQ0FBYzdJLFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFuZHJvaWRIZWxwZXJzIGZyb20gJy4uL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgeyBmcywgdXRpbCwgdGVtcERpcn0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IGppbXAgZnJvbSAnamltcCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcblxuY29uc3Qgc3dpcGVTdGVwc1BlclNlYyA9IDI4O1xuY29uc3QgZHJhZ1N0ZXBzUGVyU2VjID0gNDA7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuY29tbWFuZHMua2V5ZXZlbnQgPSBhc3luYyBmdW5jdGlvbiBrZXlldmVudCAoa2V5Y29kZSwgbWV0YXN0YXRlID0gbnVsbCkge1xuICAvLyBUT0RPIGRlcHJlY2F0ZSBrZXlldmVudDsgY3VycmVudGx5IHdkIG9ubHkgaW1wbGVtZW50cyBrZXlldmVudFxuICB0aGlzLmxvZy53YXJuKCdrZXlldmVudCB3aWxsIGJlIGRlcHJlY2F0ZWQgdXNlIHByZXNzS2V5Q29kZScpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcmVzc0tleUNvZGUoa2V5Y29kZSwgbWV0YXN0YXRlKTtcbn07XG5cbmNvbW1hbmRzLnByZXNzS2V5Q29kZSA9IGFzeW5jIGZ1bmN0aW9uIHByZXNzS2V5Q29kZSAoa2V5Y29kZSwgbWV0YXN0YXRlID0gbnVsbCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbigncHJlc3NLZXlDb2RlJywge2tleWNvZGUsIG1ldGFzdGF0ZX0pO1xufTtcblxuY29tbWFuZHMubG9uZ1ByZXNzS2V5Q29kZSA9IGFzeW5jIGZ1bmN0aW9uIGxvbmdQcmVzc0tleUNvZGUgKGtleWNvZGUsIG1ldGFzdGF0ZSA9IG51bGwpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2xvbmdQcmVzc0tleUNvZGUnLCB7a2V5Y29kZSwgbWV0YXN0YXRlfSk7XG59O1xuXG5jb21tYW5kcy5nZXRPcmllbnRhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGdldE9yaWVudGF0aW9uICgpIHtcbiAgbGV0IHBhcmFtcyA9IHtcbiAgICBuYXR1cmFsT3JpZW50YXRpb246ICEhdGhpcy5vcHRzLmFuZHJvaWROYXR1cmFsT3JpZW50YXRpb24sXG4gIH07XG4gIGxldCBvcmllbnRhdGlvbiA9IGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ29yaWVudGF0aW9uJywgcGFyYW1zKTtcbiAgcmV0dXJuIG9yaWVudGF0aW9uLnRvVXBwZXJDYXNlKCk7XG59O1xuXG5jb21tYW5kcy5zZXRPcmllbnRhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIHNldE9yaWVudGF0aW9uIChvcmllbnRhdGlvbikge1xuICBvcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uLnRvVXBwZXJDYXNlKCk7XG4gIGxldCBwYXJhbXMgPSB7XG4gICAgb3JpZW50YXRpb24sXG4gICAgbmF0dXJhbE9yaWVudGF0aW9uOiAhIXRoaXMub3B0cy5hbmRyb2lkTmF0dXJhbE9yaWVudGF0aW9uLFxuICB9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignb3JpZW50YXRpb24nLCBwYXJhbXMpO1xufTtcblxuY29tbWFuZHMuZmFrZUZsaWNrID0gYXN5bmMgZnVuY3Rpb24gZmFrZUZsaWNrICh4U3BlZWQsIHlTcGVlZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZmxpY2snLCB7eFNwZWVkLCB5U3BlZWR9KTtcbn07XG5cbmNvbW1hbmRzLmZha2VGbGlja0VsZW1lbnQgPSBhc3luYyBmdW5jdGlvbiBmYWtlRmxpY2tFbGVtZW50IChlbGVtZW50SWQsIHhvZmZzZXQsIHlvZmZzZXQsIHNwZWVkKSB7XG4gIGxldCBwYXJhbXMgPSB7eG9mZnNldCwgeW9mZnNldCwgc3BlZWQsIGVsZW1lbnRJZH07XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OmZsaWNrJywgcGFyYW1zKTtcbn07XG5cbmNvbW1hbmRzLnN3aXBlID0gYXN5bmMgZnVuY3Rpb24gc3dpcGUgKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkdXJhdGlvbiwgdG91Y2hDb3VudCwgZWxJZCkge1xuICBpZiAoc3RhcnRYID09PSAnbnVsbCcpIHtcbiAgICBzdGFydFggPSAwLjU7XG4gIH1cbiAgaWYgKHN0YXJ0WSA9PT0gJ251bGwnKSB7XG4gICAgc3RhcnRZID0gMC41O1xuICB9XG4gIGxldCBzd2lwZU9wdHMgPSB7c3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksXG4gICAgICAgICAgICAgICAgICAgc3RlcHM6IE1hdGgucm91bmQoZHVyYXRpb24gKiBzd2lwZVN0ZXBzUGVyU2VjKX07XG4gIC8vIGdvaW5nIHRoZSBsb25nIHdheSBhbmQgY2hlY2tpbmcgZm9yIHVuZGVmaW5lZCBhbmQgbnVsbCBzaW5jZVxuICAvLyB3ZSBjYW4ndCBiZSBhc3N1cmVkIGBlbElkYCBpcyBhIHN0cmluZyBhbmQgbm90IGFuIGludFxuICBpZiAodXRpbC5oYXNWYWx1ZShlbElkKSkge1xuICAgIHN3aXBlT3B0cy5lbGVtZW50SWQgPSBlbElkO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmRvU3dpcGUoc3dpcGVPcHRzKTtcbn07XG5cbmNvbW1hbmRzLmRvU3dpcGUgPSBhc3luYyBmdW5jdGlvbiBkb1N3aXBlIChzd2lwZU9wdHMpIHtcbiAgaWYgKHV0aWwuaGFzVmFsdWUoc3dpcGVPcHRzLmVsZW1lbnRJZCkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpzd2lwZScsIHN3aXBlT3B0cyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3N3aXBlJywgc3dpcGVPcHRzKTtcbiAgfVxufTtcblxuY29tbWFuZHMucGluY2hDbG9zZSA9IGFzeW5jIGZ1bmN0aW9uIHBpbmNoQ2xvc2UgKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkdXJhdGlvbiwgcGVyY2VudCwgc3RlcHMsIGVsSWQpIHtcbiAgbGV0IHBpbmNoT3B0cyA9IHtcbiAgICBkaXJlY3Rpb246ICdpbicsXG4gICAgZWxlbWVudElkOiBlbElkLFxuICAgIHBlcmNlbnQsXG4gICAgc3RlcHNcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6cGluY2gnLCBwaW5jaE9wdHMpO1xufTtcblxuY29tbWFuZHMucGluY2hPcGVuID0gYXN5bmMgZnVuY3Rpb24gcGluY2hPcGVuIChzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHVyYXRpb24sIHBlcmNlbnQsIHN0ZXBzLCBlbElkKSB7XG4gIGxldCBwaW5jaE9wdHMgPSB7ZGlyZWN0aW9uOiAnb3V0JywgZWxlbWVudElkOiBlbElkLCBwZXJjZW50LCBzdGVwc307XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnBpbmNoJywgcGluY2hPcHRzKTtcbn07XG5cbmNvbW1hbmRzLmZsaWNrID0gYXN5bmMgZnVuY3Rpb24gZmxpY2sgKGVsZW1lbnQsIHhTcGVlZCwgeVNwZWVkLCB4T2Zmc2V0LCB5T2Zmc2V0LCBzcGVlZCkge1xuICBpZiAoZWxlbWVudCkge1xuICAgIGF3YWl0IHRoaXMuZmFrZUZsaWNrRWxlbWVudChlbGVtZW50LCB4T2Zmc2V0LCB5T2Zmc2V0LCBzcGVlZCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdGhpcy5mYWtlRmxpY2soeFNwZWVkLCB5U3BlZWQpO1xuICB9XG59O1xuXG5jb21tYW5kcy5kcmFnID0gYXN5bmMgZnVuY3Rpb24gZHJhZyAoc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGR1cmF0aW9uLCB0b3VjaENvdW50LCBlbGVtZW50SWQsIGRlc3RFbElkKSB7XG4gIGxldCBkcmFnT3B0cyA9IHtcbiAgICBlbGVtZW50SWQsIGRlc3RFbElkLCBzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSxcbiAgICBzdGVwczogTWF0aC5yb3VuZChkdXJhdGlvbiAqIGRyYWdTdGVwc1BlclNlYylcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZG9EcmFnKGRyYWdPcHRzKTtcblxufTtcblxuY29tbWFuZHMuZG9EcmFnID0gYXN5bmMgZnVuY3Rpb24gZG9EcmFnIChkcmFnT3B0cykge1xuICBpZiAodXRpbC5oYXNWYWx1ZShkcmFnT3B0cy5lbGVtZW50SWQpKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6ZHJhZycsIGRyYWdPcHRzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZHJhZycsIGRyYWdPcHRzKTtcbiAgfVxufTtcblxuY29tbWFuZHMubG9jayA9IGFzeW5jIGZ1bmN0aW9uIGxvY2sgKHNlY29uZHMpIHtcbiAgYXdhaXQgdGhpcy5hZGIubG9jaygpO1xuICBpZiAoaXNOYU4oc2Vjb25kcykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBmbG9hdFNlY29uZHMgPSBwYXJzZUZsb2F0KHNlY29uZHMpO1xuICBpZiAoZmxvYXRTZWNvbmRzIDw9IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgQi5kZWxheSgxMDAwICogZmxvYXRTZWNvbmRzKTtcbiAgYXdhaXQgdGhpcy51bmxvY2soKTtcbn07XG5cbmNvbW1hbmRzLmlzTG9ja2VkID0gYXN5bmMgZnVuY3Rpb24gaXNMb2NrZWQgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuaXNTY3JlZW5Mb2NrZWQoKTtcbn07XG5cbmNvbW1hbmRzLnVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIHVubG9jayAoKSB7XG4gIHJldHVybiBhd2FpdCBhbmRyb2lkSGVscGVycy51bmxvY2sodGhpcywgdGhpcy5hZGIsIHRoaXMuY2Fwcyk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIG9wZW5Ob3RpZmljYXRpb25zICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ29wZW5Ob3RpZmljYXRpb24nKTtcbn07XG5cbmNvbW1hbmRzLnNldExvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gc2V0TG9jYXRpb24gKGxhdGl0dWRlLCBsb25naXR1ZGUpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnNlbmRUZWxuZXRDb21tYW5kKGBnZW8gZml4ICR7bG9uZ2l0dWRlfSAke2xhdGl0dWRlfWApO1xufTtcblxuY29tbWFuZHMuZmluZ2VycHJpbnQgPSBhc3luYyBmdW5jdGlvbiBmaW5nZXJwcmludCAoZmluZ2VycHJpbnRJZCkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnZmluZ2VycHJpbnQgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5maW5nZXJwcmludChmaW5nZXJwcmludElkKTtcbn07XG5cbmNvbW1hbmRzLnNlbmRTTVMgPSBhc3luYyBmdW5jdGlvbiBzZW5kU01TIChwaG9uZU51bWJlciwgbWVzc2FnZSkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnc2VuZFNNUyBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLnNlbmRTTVMocGhvbmVOdW1iZXIsIG1lc3NhZ2UpO1xufTtcblxuY29tbWFuZHMuZ3NtQ2FsbCA9IGFzeW5jIGZ1bmN0aW9uIGdzbUNhbGwgKHBob25lTnVtYmVyLCBhY3Rpb24pIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2dzbUNhbGwgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5nc21DYWxsKHBob25lTnVtYmVyLCBhY3Rpb24pO1xufTtcblxuY29tbWFuZHMuZ3NtU2lnbmFsID0gYXN5bmMgZnVuY3Rpb24gZ3NtU2lnbmFsIChzaWduYWxTdHJlbmdoKSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdnc21TaWduYWwgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5nc21TaWduYWwoc2lnbmFsU3RyZW5naCk7XG59O1xuXG5jb21tYW5kcy5nc21Wb2ljZSA9IGFzeW5jIGZ1bmN0aW9uIGdzbVZvaWNlIChzdGF0ZSkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnZ3NtVm9pY2UgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5nc21Wb2ljZShzdGF0ZSk7XG59O1xuXG5jb21tYW5kcy5wb3dlckFDID0gYXN5bmMgZnVuY3Rpb24gcG93ZXJBQyAoc3RhdGUpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ3Bvd2VyQUMgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5wb3dlckFDKHN0YXRlKTtcbn07XG5cbmNvbW1hbmRzLnBvd2VyQ2FwYWNpdHkgPSBhc3luYyBmdW5jdGlvbiBwb3dlckNhcGFjaXR5IChiYXR0ZXJ5UGVyY2VudCkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygncG93ZXJDYXBhY2l0eSBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLnBvd2VyQ2FwYWNpdHkoYmF0dGVyeVBlcmNlbnQpO1xufTtcblxuY29tbWFuZHMubmV0d29ya1NwZWVkID0gYXN5bmMgZnVuY3Rpb24gbmV0d29ya1NwZWVkIChuZXR3b3JrU3BlZWQpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ25ldHdvcmtTcGVlZCBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLm5ldHdvcmtTcGVlZChuZXR3b3JrU3BlZWQpO1xufTtcblxuLyoqXG4gKiBFbXVsYXRlIHNlbnNvcnMgdmFsdWVzIG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gU2Vuc29yXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc2Vuc29yVHlwZSAtIHNlbnNvciB0eXBlIGRlY2xhcmVkIGluIGFkYi5TRU5TT1JTXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmFsdWUgLSB2YWx1ZSB0byBzZXQgdG8gdGhlIHNlbnNvclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBTZW5zb3JcbiAqIEB0aHJvd3Mge0Vycm9yfSAtIElmIHNlbnNvclR5cGUgaXMgbm90IGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSAtIElmIHZhbHVlIGZvciB0aGUgc2Ugc29yIGlzIG5vdCBkZWZpbmVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gLSBJZiBkZXZpY2VUeXBlIGlzIG5vdCBhbiBlbXVsYXRvclxuICovXG5jb21tYW5kcy5zZW5zb3JTZXQgPSBhc3luYyBmdW5jdGlvbiBzZW5zb3JTZXQgKHNlbnNvciA9IHt9KSB7XG4gIGNvbnN0IHtzZW5zb3JUeXBlLCB2YWx1ZX0gPSBzZW5zb3I7XG4gIGlmICghdXRpbC5oYXNWYWx1ZShzZW5zb3JUeXBlKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYCdzZW5zb3JUeXBlJyBhcmd1bWVudCBpcyByZXF1aXJlZGApO1xuICB9XG4gIGlmICghdXRpbC5oYXNWYWx1ZSh2YWx1ZSkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGAndmFsdWUnIGFyZ3VtZW50IGlzIHJlcXVpcmVkYCk7XG4gIH1cbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ3NlbnNvclNldCBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLnNlbnNvclNldChzZW5zb3JUeXBlLCB2YWx1ZSk7XG59O1xuXG5oZWxwZXJzLmdldFNjcmVlbnNob3REYXRhV2l0aEFkYlNoZWxsID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiU2hlbGwgKGFkYiwgb3B0cykge1xuICBjb25zdCBsb2NhbEZpbGUgPSBhd2FpdCB0ZW1wRGlyLnBhdGgoe3ByZWZpeDogJ2FwcGl1bScsIHN1ZmZpeDogJy5wbmcnfSk7XG4gIGlmIChhd2FpdCBmcy5leGlzdHMobG9jYWxGaWxlKSkge1xuICAgIGF3YWl0IGZzLnVubGluayhsb2NhbEZpbGUpO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcG5nRGlyID0gb3B0cy5hbmRyb2lkU2NyZWVuc2hvdFBhdGggfHwgJy9kYXRhL2xvY2FsL3RtcC8nO1xuICAgIGNvbnN0IHBuZyA9IHBhdGgucG9zaXgucmVzb2x2ZShwbmdEaXIsICdzY3JlZW5zaG90LnBuZycpO1xuICAgIGNvbnN0IGNtZCA9IFsnL3N5c3RlbS9iaW4vcm0nLCBgJHtwbmd9O2AsICcvc3lzdGVtL2Jpbi9zY3JlZW5jYXAnLCAnLXAnLCBwbmddO1xuICAgIGF3YWl0IGFkYi5zaGVsbChjbWQpO1xuICAgIGlmICghYXdhaXQgYWRiLmZpbGVTaXplKHBuZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHNpemUgb2YgdGhlIHRha2VuIHNjcmVlbnNob3QgZXF1YWxzIHRvIHplcm8uJyk7XG4gICAgfVxuICAgIGF3YWl0IGFkYi5wdWxsKHBuZywgbG9jYWxGaWxlKTtcbiAgICByZXR1cm4gYXdhaXQgamltcC5yZWFkKGxvY2FsRmlsZSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhsb2NhbEZpbGUpKSB7XG4gICAgICBhd2FpdCBmcy51bmxpbmsobG9jYWxGaWxlKTtcbiAgICB9XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiRXhlY091dCA9IGFzeW5jIGZ1bmN0aW9uIGdldFNjcmVlbnNob3REYXRhV2l0aEFkYkV4ZWNPdXQgKGFkYikge1xuICBsZXQge3N0ZG91dCwgc3RkZXJyLCBjb2RlfSA9IGF3YWl0IGV4ZWMoYWRiLmV4ZWN1dGFibGUucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYi5leGVjdXRhYmxlLmRlZmF1bHRBcmdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoWydleGVjLW91dCcsICcvc3lzdGVtL2Jpbi9zY3JlZW5jYXAnLCAnLXAnXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZW5jb2Rpbmc6ICdiaW5hcnknLCBpc0J1ZmZlcjogdHJ1ZX0pO1xuICAvLyBpZiB0aGVyZSBpcyBhbiBlcnJvciwgdGhyb3dcbiAgaWYgKGNvZGUgfHwgc3RkZXJyLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2NyZWVuc2hvdCByZXR1cm5lZCBlcnJvciwgY29kZTogJyR7Y29kZX0nLCBzdGRlcnI6ICcke3N0ZGVyci50b1N0cmluZygpfSdgKTtcbiAgfVxuICAvLyBpZiB3ZSBkb24ndCBnZXQgYW55dGhpbmcgYXQgYWxsLCB0aHJvd1xuICBpZiAoIXN0ZG91dC5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NjcmVlbnNob3QgcmV0dXJuZWQgbm8gZGF0YScpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGppbXAucmVhZChzdGRvdXQpO1xufTtcblxuY29tbWFuZHMuZ2V0U2NyZWVuc2hvdCA9IGFzeW5jIGZ1bmN0aW9uIGdldFNjcmVlbnNob3QgKCkge1xuICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG4gIGxldCBpbWFnZSA9IG51bGw7XG4gIGlmIChhcGlMZXZlbCA+IDIwKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRoaXMgc2NyZWVuc2hvdGluZyBhcHByb2FjaCBpcyB3YXkgZmFzdGVyLCBzaW5jZSBpdCByZXF1aXJlcyBsZXNzIGV4dGVybmFsIGNvbW1hbmRzXG4gICAgICAvLyB0byBiZSBleGVjdXRlZC4gVW5mb3J0dW5hdGVseSwgZXhlYy1vdXQgb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IG5ld2VyIEFuZHJvaWQvU0RLIHZlcnNpb25zICg1LjAgYW5kIGxhdGVyKVxuICAgICAgaW1hZ2UgPSBhd2FpdCB0aGlzLmdldFNjcmVlbnNob3REYXRhV2l0aEFkYkV4ZWNPdXQodGhpcy5hZGIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYENhbm5vdCBnZXQgc2NyZWVuc2hvdCBkYXRhIHdpdGggJ2FkYiBleGVjLW91dCcgYmVjYXVzZSBvZiAnJHtlLm1lc3NhZ2V9Jy4gYCArXG4gICAgICAgIGBEZWZhdWx0aW5nIHRvICdhZGIgc2hlbGwnIGNhbGxgKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpbWFnZSkge1xuICAgIHRyeSB7XG4gICAgICBpbWFnZSA9IGF3YWl0IHRoaXMuZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiU2hlbGwodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyID0gYENhbm5vdCBnZXQgc2NyZWVuc2hvdCBkYXRhIGJlY2F1c2Ugb2YgJyR7ZS5tZXNzYWdlfScuIGAgK1xuICAgICAgICBgTWFrZSBzdXJlIHRoZSAnTGF5b3V0UGFyYW1zLkZMQUdfU0VDVVJFJyBpcyBub3Qgc2V0IGZvciBgICtcbiAgICAgICAgYHRoZSBjdXJyZW50IHZpZXdgO1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhlcnIpO1xuICAgIH1cbiAgfVxuICBpZiAoYXBpTGV2ZWwgPCAyMykge1xuICAgIC8vIEFuZHJvaWQgYnVnIDg0MzM3NDIgLSByb3RhdGUgc2NyZWVuc2hvdCBpZiBzY3JlZW4gaXMgcm90YXRlZFxuICAgIGxldCBzY3JlZW5PcmllbnRhdGlvbiA9IGF3YWl0IHRoaXMuYWRiLmdldFNjcmVlbk9yaWVudGF0aW9uKCk7XG4gICAgdHJ5IHtcbiAgICAgIGltYWdlID0gYXdhaXQgaW1hZ2Uucm90YXRlKC05MCAqIHNjcmVlbk9yaWVudGF0aW9uKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYENvdWxkIG5vdCByb3RhdGUgc2NyZWVuc2hvdCBkdWUgdG8gZXJyb3I6ICR7ZXJyfWApO1xuICAgIH1cbiAgfVxuICBjb25zdCBnZXRCdWZmZXIgPSBCLnByb21pc2lmeShpbWFnZS5nZXRCdWZmZXIsIHtjb250ZXh0OiBpbWFnZX0pO1xuICBjb25zdCBpbWdCdWZmZXIgPSBhd2FpdCBnZXRCdWZmZXIoamltcC5NSU1FX1BORyk7XG4gIHJldHVybiBpbWdCdWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2FjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
@@ -9,12 +9,12 @@ exports.default = exports.commands = void 0;
|
|
|
9
9
|
|
|
10
10
|
require("source-map-support/register");
|
|
11
11
|
|
|
12
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
|
+
|
|
12
14
|
var _asyncbox = require("asyncbox");
|
|
13
15
|
|
|
14
16
|
var _support = require("@appium/support");
|
|
15
17
|
|
|
16
|
-
var _logger = _interopRequireDefault(require("../logger"));
|
|
17
|
-
|
|
18
18
|
var _androidHelpers = require("../android-helpers");
|
|
19
19
|
|
|
20
20
|
var _baseDriver = require("@appium/base-driver");
|
|
@@ -28,7 +28,7 @@ commands.isAppInstalled = async function isAppInstalled(appId) {
|
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
commands.queryAppState = async function queryAppState(appId) {
|
|
31
|
-
|
|
31
|
+
this.log.info(`Querying the state of '${appId}'`);
|
|
32
32
|
|
|
33
33
|
if (!(await this.adb.isAppInstalled(appId))) {
|
|
34
34
|
return _androidHelpers.APP_STATE.NOT_INSTALLED;
|
|
@@ -38,8 +38,10 @@ commands.queryAppState = async function queryAppState(appId) {
|
|
|
38
38
|
return _androidHelpers.APP_STATE.NOT_RUNNING;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
const appIdRe = new RegExp(`\\b${_lodash.default.escapeRegExp(appId)}/`);
|
|
42
|
+
|
|
41
43
|
for (const line of (await this.adb.dumpWindows()).split('\n')) {
|
|
42
|
-
if (
|
|
44
|
+
if (appIdRe.test(line) && ['mCurrentFocus', 'mFocusedApp'].some(x => line.includes(x))) {
|
|
43
45
|
return _androidHelpers.APP_STATE.RUNNING_IN_FOREGROUND;
|
|
44
46
|
}
|
|
45
47
|
}
|
|
@@ -52,17 +54,15 @@ commands.activateApp = async function activateApp(appId) {
|
|
|
52
54
|
let output = '';
|
|
53
55
|
|
|
54
56
|
try {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
this.log.debug(`Activating '${appId}' with 'adb shell ${cmd.join(' ')}' command`);
|
|
57
58
|
output = await this.adb.shell(cmd);
|
|
58
|
-
|
|
59
|
-
_logger.default.debug(`Command stdout: ${output}`);
|
|
59
|
+
this.log.debug(`Command stdout: ${output}`);
|
|
60
60
|
} catch (e) {
|
|
61
|
-
|
|
61
|
+
this.log.errorAndThrow(`Cannot activate '${appId}'. Original error: ${e.message}`);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
if (output.includes('monkey aborted')) {
|
|
65
|
-
|
|
65
|
+
this.log.errorAndThrow(`Cannot activate '${appId}'. Are you sure it is installed?`);
|
|
66
66
|
}
|
|
67
67
|
};
|
|
68
68
|
|
|
@@ -71,11 +71,10 @@ commands.removeApp = async function removeApp(appId, options = {}) {
|
|
|
71
71
|
};
|
|
72
72
|
|
|
73
73
|
commands.terminateApp = async function terminateApp(appId, options = {}) {
|
|
74
|
-
|
|
74
|
+
this.log.info(`Terminating '${appId}'`);
|
|
75
75
|
|
|
76
76
|
if (!(await this.adb.processExists(appId))) {
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
this.log.info(`The app '${appId}' is not running`);
|
|
79
78
|
return false;
|
|
80
79
|
}
|
|
81
80
|
|
|
@@ -88,11 +87,10 @@ commands.terminateApp = async function terminateApp(appId, options = {}) {
|
|
|
88
87
|
intervalMs: 100
|
|
89
88
|
});
|
|
90
89
|
} catch (e) {
|
|
91
|
-
|
|
90
|
+
this.log.errorAndThrow(`'${appId}' is still running after ${timeout}ms timeout`);
|
|
92
91
|
}
|
|
93
92
|
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
this.log.info(`'${appId}' has been successfully terminated`);
|
|
96
94
|
return true;
|
|
97
95
|
};
|
|
98
96
|
|
|
@@ -117,4 +115,4 @@ var _default = commands;
|
|
|
117
115
|
exports.default = _default;require('source-map-support').install();
|
|
118
116
|
|
|
119
117
|
|
|
120
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJBUFBfRVhURU5TSU9OUyIsImNvbW1hbmRzIiwiaXNBcHBJbnN0YWxsZWQiLCJhcHBJZCIsImFkYiIsInF1ZXJ5QXBwU3RhdGUiLCJsb2ciLCJpbmZvIiwiQVBQX1NUQVRFIiwiTk9UX0lOU1RBTExFRCIsInByb2Nlc3NFeGlzdHMiLCJOT1RfUlVOTklORyIsImxpbmUiLCJkdW1wV2luZG93cyIsInNwbGl0IiwiaW5jbHVkZXMiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJhY3RpdmF0ZUFwcCIsImNtZCIsIm91dHB1dCIsImRlYnVnIiwiam9pbiIsInNoZWxsIiwiZSIsImVycm9yQW5kVGhyb3ciLCJtZXNzYWdlIiwicmVtb3ZlQXBwIiwib3B0aW9ucyIsInVuaW5zdGFsbEFwayIsInRlcm1pbmF0ZUFwcCIsImZvcmNlU3RvcCIsInRpbWVvdXQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJpc05hTiIsInBhcnNlSW50Iiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImluc3RhbGxBcHAiLCJhcHBQYXRoIiwibG9jYWxQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImluc3RhbGwiLCJtb2JpbGVDbGVhckFwcCIsIm9wdHMiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsImNsZWFyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGNBQWMsR0FBRyxDQUFDLE1BQUQsRUFBUyxPQUFULENBQXZCO0FBRUEsSUFBSUMsUUFBUSxHQUFHLEVBQWY7OztBQVFBQSxRQUFRLENBQUNDLGNBQVQsR0FBMEIsZUFBZUEsY0FBZixDQUErQkMsS0FBL0IsRUFBc0M7QUFDOUQsU0FBTyxNQUFNLEtBQUtDLEdBQUwsQ0FBU0YsY0FBVCxDQUF3QkMsS0FBeEIsQ0FBYjtBQUNELENB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RCxDQU5EOztlQVNlRixRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgQVBQX1NUQVRFIH0gZnJvbSAnLi4vYW5kcm9pZC1oZWxwZXJzJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuXG5jb25zdCBBUFBfRVhURU5TSU9OUyA9IFsnLmFwaycsICcuYXBrcyddO1xuXG5sZXQgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBWZXJpZnkgd2hldGhlciBhbiBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb3Igbm90XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXBwIGlzIGluc3RhbGxlZFxuICovXG5jb21tYW5kcy5pc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzQXBwSW5zdGFsbGVkIChhcHBJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuaXNBcHBJbnN0YWxsZWQoYXBwSWQpO1xufTtcblxuLyoqXG4gKiBRdWVyaWVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBhcHAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgY29ycmVzcG9uZGluZyBjb25zdGFudCwgd2hpY2ggZGVzY3JpYmVzXG4gKiAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBzdGF0ZTpcbiAqIDAgLSBpcyB0aGUgYXBwIGlzIG5vdCBpbnN0YWxsZWRcbiAqIDEgLSBpZiB0aGUgYXBwIGlzIGluc3RhbGxlZCwgYnV0IGlzIG5vdCBydW5uaW5nXG4gKiAzIC0gaWYgdGhlIGFwcCBpcyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kXG4gKiA0IC0gaWYgdGhlIGFwcCBpcyBydW5uaW5nIGluIHRoZSBmb3JlZ3JvdW5kXG4gKi9cbmNvbW1hbmRzLnF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBxdWVyeUFwcFN0YXRlIChhcHBJZCkge1xuICBsb2cuaW5mbyhgUXVlcnlpbmcgdGhlIHN0YXRlIG9mICcke2FwcElkfSdgKTtcbiAgaWYgKCFhd2FpdCB0aGlzLmFkYi5pc0FwcEluc3RhbGxlZChhcHBJZCkpIHtcbiAgICByZXR1cm4gQVBQX1NUQVRFLk5PVF9JTlNUQUxMRUQ7XG4gIH1cbiAgaWYgKCFhd2FpdCB0aGlzLmFkYi5wcm9jZXNzRXhpc3RzKGFwcElkKSkge1xuICAgIHJldHVybiBBUFBfU1RBVEUuTk9UX1JVTk5JTkc7XG4gIH1cbiAgZm9yIChjb25zdCBsaW5lIG9mIChhd2FpdCB0aGlzLmFkYi5kdW1wV2luZG93cygpKS5zcGxpdCgnXFxuJykpIHtcbiAgICBpZiAobGluZS5pbmNsdWRlcyhhcHBJZCkgJiYgKGxpbmUuaW5jbHVkZXMoJ21DdXJyZW50Rm9jdXMnKSB8fCBsaW5lLmluY2x1ZGVzKCdtRm9jdXNlZEFwcCcpKSkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5SVU5OSU5HX0lOX0ZPUkVHUk9VTkQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBBUFBfU1RBVEUuUlVOTklOR19JTl9CQUNLR1JPVU5EO1xufTtcblxuLyoqXG4gKiBBY3RpdmF0ZXMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIG9yIGxhdW5jaGVzIGl0IGlmIG5lY2Vzc2FyeS5cbiAqIFRoZSBhY3Rpb24gaXMgZG9uZSB3aXRoIG1vbmtleSB0b29sIGFuZCBsaXRlcmFsbHkgc2ltdWxhdGVzXG4gKiBjbGlja2luZyB0aGUgY29ycmVzcG9uZGluZyBhcHBsaWNhdGlvbiBpY29uIG9uIHRoZSBkYXNoYm9hcmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKi9cbmNvbW1hbmRzLmFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKGFwcElkKSB7XG4gIGNvbnN0IGNtZCA9IFsnbW9ua2V5JyxcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80NDg2MDQ3NS9ob3ctdG8tdXNlLXRoZS1tb25rZXktY29tbWFuZC13aXRoLWFuLWFuZHJvaWQtc3lzdGVtLXRoYXQtZG9lc250LWhhdmUtcGh5c2ljYWxcbiAgICAnLS1wY3Qtc3lza2V5cycsICcwJyxcbiAgICAnLXAnLCBhcHBJZCxcbiAgICAnLWMnLCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICcxJ107XG4gIGxldCBvdXRwdXQgPSAnJztcbiAgdHJ5IHtcbiAgICBsb2cuZGVidWcoYEFjdGl2YXRpbmcgJyR7YXBwSWR9JyB3aXRoICdhZGIgc2hlbGwgJHtjbWQuam9pbignICcpfScgY29tbWFuZGApO1xuICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKGNtZCk7XG4gICAgbG9nLmRlYnVnKGBDb21tYW5kIHN0ZG91dDogJHtvdXRwdXR9YCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGFjdGl2YXRlICcke2FwcElkfScuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxuICBpZiAob3V0cHV0LmluY2x1ZGVzKCdtb25rZXkgYWJvcnRlZCcpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBhY3RpdmF0ZSAnJHthcHBJZH0nLiBBcmUgeW91IHN1cmUgaXQgaXMgaW5zdGFsbGVkP2ApO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFVuaW5zdGFsbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0IFsyMDAwMF0gLSBUaGUgY291bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIHVuaW5zdGFsbGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBrZWVwRGF0YSBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8ga2VlcCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGRhdGEgYW5kIGNhY2hlIGZvbGRlcnMgYWZ0ZXIgdW5pbnN0YWxsLlxuICovXG5cbi8qKlxuICogUmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uIGlmIGlzIGluc3RhbGxlZC5cbiAqIFRoZSBjYWxsIGlzIGlnbm9yZWQgaWYgdGhlIGFwcCBpcyBub3QgaW5zdGFsbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICogQHBhcmFtIHs/VW5pbnN0YWxsT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBzZXQgb2YgcmVtb3ZhbCBvcHRpb25zXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGFja2FnZSB3YXMgZm91bmQgb24gdGhlIGRldmljZSBhbmRcbiAqICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgdW5pbnN0YWxsZWQuXG4gKi9cbmNvbW1hbmRzLnJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUFwcCAoYXBwSWQsIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKGFwcElkLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVGVybWluYXRlT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSB0aW1lb3V0IFs1MDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIHRlcm1pbmF0ZWQuXG4gKi9cblxuLyoqXG4gKiBUZXJtaW5hdGVzIHRoZSBhcHAgaWYgaXQgaXMgcnVubmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7P1Rlcm1pbmF0ZU9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIGFwcGxpY2F0aW9uIHRlcm1pbmF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcHAgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlcm1pbmF0ZWQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGFwcCBoYXMgbm90IGJlZW4gdGVybWluYXRlZCB3aXRoaW4gdGhlIGdpdmVuIHRpbWVvdXQuXG4gKi9cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYXBwSWQsIG9wdGlvbnMgPSB7fSkge1xuICBsb2cuaW5mbyhgVGVybWluYXRpbmcgJyR7YXBwSWR9J2ApO1xuICBpZiAoIShhd2FpdCB0aGlzLmFkYi5wcm9jZXNzRXhpc3RzKGFwcElkKSkpIHtcbiAgICBsb2cuaW5mbyhgVGhlIGFwcCAnJHthcHBJZH0nIGlzIG5vdCBydW5uaW5nYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLmZvcmNlU3RvcChhcHBJZCk7XG4gIGNvbnN0IHRpbWVvdXQgPSB1dGlsLmhhc1ZhbHVlKG9wdGlvbnMudGltZW91dCkgJiYgIWlzTmFOKG9wdGlvbnMudGltZW91dCkgPyBwYXJzZUludChvcHRpb25zLnRpbWVvdXQsIDEwKSA6IDUwMDtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IGF3YWl0IHRoaXMucXVlcnlBcHBTdGF0ZShhcHBJZCkgPD0gQVBQX1NUQVRFLk5PVF9SVU5OSU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAge3dhaXRNczogdGltZW91dCwgaW50ZXJ2YWxNczogMTAwfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJyR7YXBwSWR9JyBpcyBzdGlsbCBydW5uaW5nIGFmdGVyICR7dGltZW91dH1tcyB0aW1lb3V0YCk7XG4gIH1cbiAgbG9nLmluZm8oYCcke2FwcElkfScgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlcm1pbmF0ZWRgKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNjAwMDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyBpbnN0YWxsZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVNkY2FyZCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gaW5zdGFsbCB0aGUgYXBwIG9uIHNkY2FyZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVwbGFjZSBbdHJ1ZV0gLSBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gYmUgdXBncmFkZWQvcmVpbnN0YWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIGRldmljZS5cbiAqL1xuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiB0byB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBsb2NhbCBhcGsgcGF0aCBvciBhIHJlbW90ZSB1cmxcbiAqIEBwYXJhbSB7P0luc3RhbGxPcHRpb25zfSBvcHRpb25zIC0gVGhlIHNldCBvZiBpbnN0YWxsYXRpb24gb3B0aW9uc1xuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBnaXZlbiBhcGsgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IHJlYWNoYWJsZVxuICovXG5jb21tYW5kcy5pbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEFwcCAoYXBwUGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGxvY2FsUGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwUGF0aCwgQVBQX0VYVEVOU0lPTlMpO1xuICBhd2FpdCB0aGlzLmFkYi5pbnN0YWxsKGxvY2FsUGF0aCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENsZWFyQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBhcHBJZCBUaGUgaWRlbnRpZmllciBvZiB0aGUgYXBwbGljYXRpb24gcGFja2FnZSB0byBiZSBjbGVhcmVkXG4gKi9cblxuLyoqXG4gKiBEZWxldGVzIGFsbCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHBhY2thZ2UuXG4gKlxuICogQHBhcmFtIHtDbGVhckFwcE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBjbGVhbmluZyBvZiB0aGUgYXBwIGRhdGEgZmFpbHNcbiAqL1xuY29tbWFuZHMubW9iaWxlQ2xlYXJBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVDbGVhckFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHthcHBJZH0gPSBvcHRzO1xuICBpZiAoIWFwcElkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgVGhlICdhcHBJZCcgYXJndW1lbnQgaXMgcmVxdWlyZWRgKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5jbGVhcihhcHBJZCk7XG59O1xuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
118
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJBUFBfRVhURU5TSU9OUyIsImNvbW1hbmRzIiwiaXNBcHBJbnN0YWxsZWQiLCJhcHBJZCIsImFkYiIsInF1ZXJ5QXBwU3RhdGUiLCJsb2ciLCJpbmZvIiwiQVBQX1NUQVRFIiwiTk9UX0lOU1RBTExFRCIsInByb2Nlc3NFeGlzdHMiLCJOT1RfUlVOTklORyIsImFwcElkUmUiLCJSZWdFeHAiLCJfIiwiZXNjYXBlUmVnRXhwIiwibGluZSIsImR1bXBXaW5kb3dzIiwic3BsaXQiLCJ0ZXN0Iiwic29tZSIsIngiLCJpbmNsdWRlcyIsIlJVTk5JTkdfSU5fRk9SRUdST1VORCIsIlJVTk5JTkdfSU5fQkFDS0dST1VORCIsImFjdGl2YXRlQXBwIiwiY21kIiwib3V0cHV0IiwiZGVidWciLCJqb2luIiwic2hlbGwiLCJlIiwiZXJyb3JBbmRUaHJvdyIsIm1lc3NhZ2UiLCJyZW1vdmVBcHAiLCJvcHRpb25zIiwidW5pbnN0YWxsQXBrIiwidGVybWluYXRlQXBwIiwiZm9yY2VTdG9wIiwidGltZW91dCIsInV0aWwiLCJoYXNWYWx1ZSIsImlzTmFOIiwicGFyc2VJbnQiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiaW5zdGFsbEFwcCIsImFwcFBhdGgiLCJsb2NhbFBhdGgiLCJoZWxwZXJzIiwiY29uZmlndXJlQXBwIiwiaW5zdGFsbCIsIm1vYmlsZUNsZWFyQXBwIiwib3B0cyIsImVycm9ycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiY2xlYXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsY0FBYyxHQUFHLENBQUMsTUFBRCxFQUFTLE9BQVQsQ0FBdkI7QUFFQSxJQUFJQyxRQUFRLEdBQUcsRUFBZjs7O0FBUUFBLFFBQVEsQ0FBQ0MsY0FBVCxHQUEwQixlQUFlQSxjQUFmLENBQStCQyxLQUEvQixFQUFzQztBQUM5RCxT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QkFsQyxRQUFRLENBQUNtRCxjQUFULEdBQTBCLGVBQWVBLGNBQWYsQ0FBK0JDLElBQUksR0FBRyxFQUF0QyxFQUEwQztBQUNsRSxRQUFNO0FBQUNsRCxJQUFBQTtBQUFELE1BQVVrRCxJQUFoQjs7QUFDQSxNQUFJLENBQUNsRCxLQUFMLEVBQVk7QUFDVixVQUFNLElBQUltRCxtQkFBT0Msb0JBQVgsQ0FBaUMsa0NBQWpDLENBQU47QUFDRDs7QUFDRCxRQUFNLEtBQUtuRCxHQUFMLENBQVNvRCxLQUFULENBQWVyRCxLQUFmLENBQU47QUFDRCxDQU5EOztlQVNlRixRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IEFQUF9TVEFURSB9IGZyb20gJy4uL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcblxuY29uc3QgQVBQX0VYVEVOU0lPTlMgPSBbJy5hcGsnLCAnLmFwa3MnXTtcblxubGV0IGNvbW1hbmRzID0ge307XG5cbi8qKlxuICogVmVyaWZ5IHdoZXRoZXIgYW4gYXBwbGljYXRpb24gaXMgaW5zdGFsbGVkIG9yIG5vdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGFwcCBpcyBpbnN0YWxsZWRcbiAqL1xuY29tbWFuZHMuaXNBcHBJbnN0YWxsZWQgPSBhc3luYyBmdW5jdGlvbiBpc0FwcEluc3RhbGxlZCAoYXBwSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKGFwcElkKTtcbn07XG5cbi8qKlxuICogUXVlcmllcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXBwLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICogQHJldHVybnMge251bWJlcn0gVGhlIGNvcnJlc3BvbmRpbmcgY29uc3RhbnQsIHdoaWNoIGRlc2NyaWJlc1xuICogICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gc3RhdGU6XG4gKiAwIC0gaXMgdGhlIGFwcCBpcyBub3QgaW5zdGFsbGVkXG4gKiAxIC0gaWYgdGhlIGFwcCBpcyBpbnN0YWxsZWQsIGJ1dCBpcyBub3QgcnVubmluZ1xuICogMyAtIGlmIHRoZSBhcHAgaXMgcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZFxuICogNCAtIGlmIHRoZSBhcHAgaXMgcnVubmluZyBpbiB0aGUgZm9yZWdyb3VuZFxuICovXG5jb21tYW5kcy5xdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gcXVlcnlBcHBTdGF0ZSAoYXBwSWQpIHtcbiAgdGhpcy5sb2cuaW5mbyhgUXVlcnlpbmcgdGhlIHN0YXRlIG9mICcke2FwcElkfSdgKTtcbiAgaWYgKCFhd2FpdCB0aGlzLmFkYi5pc0FwcEluc3RhbGxlZChhcHBJZCkpIHtcbiAgICByZXR1cm4gQVBQX1NUQVRFLk5PVF9JTlNUQUxMRUQ7XG4gIH1cbiAgaWYgKCFhd2FpdCB0aGlzLmFkYi5wcm9jZXNzRXhpc3RzKGFwcElkKSkge1xuICAgIHJldHVybiBBUFBfU1RBVEUuTk9UX1JVTk5JTkc7XG4gIH1cbiAgY29uc3QgYXBwSWRSZSA9IG5ldyBSZWdFeHAoYFxcXFxiJHtfLmVzY2FwZVJlZ0V4cChhcHBJZCl9L2ApO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgKGF3YWl0IHRoaXMuYWRiLmR1bXBXaW5kb3dzKCkpLnNwbGl0KCdcXG4nKSkge1xuICAgIGlmIChhcHBJZFJlLnRlc3QobGluZSkgJiYgWydtQ3VycmVudEZvY3VzJywgJ21Gb2N1c2VkQXBwJ10uc29tZSgoeCkgPT4gbGluZS5pbmNsdWRlcyh4KSkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuUlVOTklOR19JTl9GT1JFR1JPVU5EO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQVBQX1NUQVRFLlJVTk5JTkdfSU5fQkFDS0dST1VORDtcbn07XG5cbi8qKlxuICogQWN0aXZhdGVzIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiBvciBsYXVuY2hlcyBpdCBpZiBuZWNlc3NhcnkuXG4gKiBUaGUgYWN0aW9uIGlzIGRvbmUgd2l0aCBtb25rZXkgdG9vbCBhbmQgbGl0ZXJhbGx5IHNpbXVsYXRlc1xuICogY2xpY2tpbmcgdGhlIGNvcnJlc3BvbmRpbmcgYXBwbGljYXRpb24gaWNvbiBvbiB0aGUgZGFzaGJvYXJkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICovXG5jb21tYW5kcy5hY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlQXBwIChhcHBJZCkge1xuICBjb25zdCBjbWQgPSBbJ21vbmtleScsXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDQ4NjA0NzUvaG93LXRvLXVzZS10aGUtbW9ua2V5LWNvbW1hbmQtd2l0aC1hbi1hbmRyb2lkLXN5c3RlbS10aGF0LWRvZXNudC1oYXZlLXBoeXNpY2FsXG4gICAgJy0tcGN0LXN5c2tleXMnLCAnMCcsXG4gICAgJy1wJywgYXBwSWQsXG4gICAgJy1jJywgJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyxcbiAgICAnMSddO1xuICBsZXQgb3V0cHV0ID0gJyc7XG4gIHRyeSB7XG4gICAgdGhpcy5sb2cuZGVidWcoYEFjdGl2YXRpbmcgJyR7YXBwSWR9JyB3aXRoICdhZGIgc2hlbGwgJHtjbWQuam9pbignICcpfScgY29tbWFuZGApO1xuICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKGNtZCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYENvbW1hbmQgc3Rkb3V0OiAke291dHB1dH1gKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBhY3RpdmF0ZSAnJHthcHBJZH0nLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbiAgaWYgKG91dHB1dC5pbmNsdWRlcygnbW9ua2V5IGFib3J0ZWQnKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBhY3RpdmF0ZSAnJHthcHBJZH0nLiBBcmUgeW91IHN1cmUgaXQgaXMgaW5zdGFsbGVkP2ApO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFVuaW5zdGFsbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0IFsyMDAwMF0gLSBUaGUgY291bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIHVuaW5zdGFsbGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBrZWVwRGF0YSBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8ga2VlcCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGRhdGEgYW5kIGNhY2hlIGZvbGRlcnMgYWZ0ZXIgdW5pbnN0YWxsLlxuICovXG5cbi8qKlxuICogUmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uIGlmIGlzIGluc3RhbGxlZC5cbiAqIFRoZSBjYWxsIGlzIGlnbm9yZWQgaWYgdGhlIGFwcCBpcyBub3QgaW5zdGFsbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICogQHBhcmFtIHs/VW5pbnN0YWxsT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBzZXQgb2YgcmVtb3ZhbCBvcHRpb25zXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGFja2FnZSB3YXMgZm91bmQgb24gdGhlIGRldmljZSBhbmRcbiAqICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgdW5pbnN0YWxsZWQuXG4gKi9cbmNvbW1hbmRzLnJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUFwcCAoYXBwSWQsIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKGFwcElkLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVGVybWluYXRlT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSB0aW1lb3V0IFs1MDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIHRlcm1pbmF0ZWQuXG4gKi9cblxuLyoqXG4gKiBUZXJtaW5hdGVzIHRoZSBhcHAgaWYgaXQgaXMgcnVubmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7P1Rlcm1pbmF0ZU9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIGFwcGxpY2F0aW9uIHRlcm1pbmF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcHAgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlcm1pbmF0ZWQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGFwcCBoYXMgbm90IGJlZW4gdGVybWluYXRlZCB3aXRoaW4gdGhlIGdpdmVuIHRpbWVvdXQuXG4gKi9cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYXBwSWQsIG9wdGlvbnMgPSB7fSkge1xuICB0aGlzLmxvZy5pbmZvKGBUZXJtaW5hdGluZyAnJHthcHBJZH0nYCk7XG4gIGlmICghKGF3YWl0IHRoaXMuYWRiLnByb2Nlc3NFeGlzdHMoYXBwSWQpKSkge1xuICAgIHRoaXMubG9nLmluZm8oYFRoZSBhcHAgJyR7YXBwSWR9JyBpcyBub3QgcnVubmluZ2ApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AoYXBwSWQpO1xuICBjb25zdCB0aW1lb3V0ID0gdXRpbC5oYXNWYWx1ZShvcHRpb25zLnRpbWVvdXQpICYmICFpc05hTihvcHRpb25zLnRpbWVvdXQpID8gcGFyc2VJbnQob3B0aW9ucy50aW1lb3V0LCAxMCkgOiA1MDA7XG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiBhd2FpdCB0aGlzLnF1ZXJ5QXBwU3RhdGUoYXBwSWQpIDw9IEFQUF9TVEFURS5OT1RfUlVOTklORyxcbiAgICAgIHt3YWl0TXM6IHRpbWVvdXQsIGludGVydmFsTXM6IDEwMH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJyR7YXBwSWR9JyBpcyBzdGlsbCBydW5uaW5nIGFmdGVyICR7dGltZW91dH1tcyB0aW1lb3V0YCk7XG4gIH1cbiAgdGhpcy5sb2cuaW5mbyhgJyR7YXBwSWR9JyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdGVybWluYXRlZGApO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0IFs2MDAwMF0gLSBUaGUgY291bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIGluc3RhbGxlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlU2RjYXJkIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBpbnN0YWxsIHRoZSBhcHAgb24gc2RjYXJkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSByZXBsYWNlIFt0cnVlXSAtIFNldCBpdCB0byBmYWxzZSBpZiB5b3UgZG9uJ3Qgd2FudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB1cGdyYWRlZC9yZWluc3RhbGxlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgZGV2aWNlLlxuICovXG5cbi8qKlxuICogSW5zdGFsbHMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIHRvIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBQYXRoIC0gVGhlIGxvY2FsIGFwayBwYXRoIG9yIGEgcmVtb3RlIHVybFxuICogQHBhcmFtIHs/SW5zdGFsbE9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIGluc3RhbGxhdGlvbiBvcHRpb25zXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGdpdmVuIGFwayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgcmVhY2hhYmxlXG4gKi9cbmNvbW1hbmRzLmluc3RhbGxBcHAgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQXBwIChhcHBQYXRoLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgbG9jYWxQYXRoID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHBQYXRoLCBBUFBfRVhURU5TSU9OUyk7XG4gIGF3YWl0IHRoaXMuYWRiLmluc3RhbGwobG9jYWxQYXRoLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2xlYXJBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGFwcElkIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBhcHBsaWNhdGlvbiBwYWNrYWdlIHRvIGJlIGNsZWFyZWRcbiAqL1xuXG4vKipcbiAqIERlbGV0ZXMgYWxsIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgcGFja2FnZS5cbiAqXG4gKiBAcGFyYW0ge0NsZWFyQXBwT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IElmIGNsZWFuaW5nIG9mIHRoZSBhcHAgZGF0YSBmYWlsc1xuICovXG5jb21tYW5kcy5tb2JpbGVDbGVhckFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsZWFyQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2FwcElkfSA9IG9wdHM7XG4gIGlmICghYXBwSWQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBUaGUgJ2FwcElkJyBhcmd1bWVudCBpcyByZXF1aXJlZGApO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLmNsZWFyKGFwcElkKTtcbn07XG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|