appium-android-driver 5.4.3 → 5.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.js +1 -9
- package/build/lib/android-helpers.js +10 -194
- package/build/lib/android-helpers.js.map +1 -1
- package/build/lib/bootstrap.js +4 -45
- package/build/lib/bootstrap.js.map +1 -1
- package/build/lib/commands/actions.js +3 -78
- package/build/lib/commands/actions.js.map +1 -1
- package/build/lib/commands/alert.js +3 -10
- package/build/lib/commands/alert.js.map +1 -1
- package/build/lib/commands/app-management.js +4 -32
- package/build/lib/commands/app-management.js.map +1 -1
- package/build/lib/commands/context.js +6 -78
- package/build/lib/commands/context.js.map +1 -1
- package/build/lib/commands/coverage.js +1 -6
- package/build/lib/commands/coverage.js.map +1 -1
- package/build/lib/commands/element.js +4 -47
- package/build/lib/commands/element.js.map +1 -1
- package/build/lib/commands/emu-console.js +2 -7
- package/build/lib/commands/emu-console.js.map +1 -1
- package/build/lib/commands/execute.js +1 -13
- package/build/lib/commands/execute.js.map +1 -1
- package/build/lib/commands/file-actions.js +3 -44
- package/build/lib/commands/file-actions.js.map +1 -1
- package/build/lib/commands/find.js +3 -16
- package/build/lib/commands/find.js.map +1 -1
- package/build/lib/commands/general.js +32 -91
- package/build/lib/commands/general.js.map +1 -1
- package/build/lib/commands/ime.js +3 -14
- package/build/lib/commands/ime.js.map +1 -1
- package/build/lib/commands/index.js +3 -27
- package/build/lib/commands/index.js.map +1 -1
- package/build/lib/commands/intent.js +1 -40
- package/build/lib/commands/intent.js.map +1 -1
- package/build/lib/commands/log.js +3 -35
- package/build/lib/commands/log.js.map +1 -1
- package/build/lib/commands/media-projection.js +2 -47
- package/build/lib/commands/media-projection.js.map +1 -1
- package/build/lib/commands/network.js +4 -40
- package/build/lib/commands/network.js.map +1 -1
- package/build/lib/commands/performance.js +5 -57
- package/build/lib/commands/performance.js.map +1 -1
- package/build/lib/commands/recordscreen.js +1 -59
- package/build/lib/commands/recordscreen.js.map +1 -1
- package/build/lib/commands/shell.js +1 -15
- package/build/lib/commands/shell.js.map +1 -1
- package/build/lib/commands/streamscreen.js +7 -74
- package/build/lib/commands/streamscreen.js.map +1 -1
- package/build/lib/commands/system-bars.js +1 -23
- package/build/lib/commands/system-bars.js.map +1 -1
- package/build/lib/commands/touch.js +13 -79
- package/build/lib/commands/touch.js.map +1 -1
- package/build/lib/desired-caps.js +3 -4
- package/build/lib/desired-caps.js.map +1 -1
- package/build/lib/driver.js +8 -97
- package/build/lib/driver.js.map +1 -1
- package/build/lib/logger.js +1 -5
- package/build/lib/logger.js.map +1 -1
- package/build/lib/uiautomator.js +3 -24
- package/build/lib/uiautomator.js.map +1 -1
- package/build/lib/unlock-helpers.js +1 -61
- package/build/lib/unlock-helpers.js.map +1 -1
- package/build/lib/utils.js +1 -7
- package/build/lib/utils.js.map +1 -1
- package/build/lib/webview-helpers.js +1 -94
- package/build/lib/webview-helpers.js.map +1 -1
- package/lib/android-helpers.js +2 -1
- package/lib/commands/general.js +34 -15
- package/package.json +1 -1
|
@@ -1,53 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.helpers = exports.default = exports.commands = void 0;
|
|
9
|
-
|
|
10
8
|
require("source-map-support/register");
|
|
11
|
-
|
|
12
9
|
var _androidHelpers = _interopRequireDefault(require("../android-helpers"));
|
|
13
|
-
|
|
14
10
|
var _support = require("appium/support");
|
|
15
|
-
|
|
16
11
|
var _path = _interopRequireDefault(require("path"));
|
|
17
|
-
|
|
18
12
|
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
19
|
-
|
|
20
13
|
var _jimp = _interopRequireDefault(require("jimp"));
|
|
21
|
-
|
|
22
14
|
var _teen_process = require("teen_process");
|
|
23
|
-
|
|
24
15
|
const swipeStepsPerSec = 28;
|
|
25
16
|
const dragStepsPerSec = 40;
|
|
26
17
|
let commands = {},
|
|
27
|
-
|
|
28
|
-
|
|
18
|
+
helpers = {},
|
|
19
|
+
extensions = {};
|
|
29
20
|
exports.helpers = helpers;
|
|
30
21
|
exports.commands = commands;
|
|
31
|
-
|
|
32
22
|
commands.keyevent = async function keyevent(keycode, metastate = null) {
|
|
33
23
|
this.log.warn('keyevent will be deprecated use pressKeyCode');
|
|
34
24
|
return await this.pressKeyCode(keycode, metastate);
|
|
35
25
|
};
|
|
36
|
-
|
|
37
26
|
commands.pressKeyCode = async function pressKeyCode(keycode, metastate = null) {
|
|
38
27
|
return await this.bootstrap.sendAction('pressKeyCode', {
|
|
39
28
|
keycode,
|
|
40
29
|
metastate
|
|
41
30
|
});
|
|
42
31
|
};
|
|
43
|
-
|
|
44
32
|
commands.longPressKeyCode = async function longPressKeyCode(keycode, metastate = null) {
|
|
45
33
|
return await this.bootstrap.sendAction('longPressKeyCode', {
|
|
46
34
|
keycode,
|
|
47
35
|
metastate
|
|
48
36
|
});
|
|
49
37
|
};
|
|
50
|
-
|
|
51
38
|
commands.getOrientation = async function getOrientation() {
|
|
52
39
|
let params = {
|
|
53
40
|
naturalOrientation: !!this.opts.androidNaturalOrientation
|
|
@@ -55,7 +42,6 @@ commands.getOrientation = async function getOrientation() {
|
|
|
55
42
|
let orientation = await this.bootstrap.sendAction('orientation', params);
|
|
56
43
|
return orientation.toUpperCase();
|
|
57
44
|
};
|
|
58
|
-
|
|
59
45
|
commands.setOrientation = async function setOrientation(orientation) {
|
|
60
46
|
orientation = orientation.toUpperCase();
|
|
61
47
|
let params = {
|
|
@@ -64,14 +50,12 @@ commands.setOrientation = async function setOrientation(orientation) {
|
|
|
64
50
|
};
|
|
65
51
|
return await this.bootstrap.sendAction('orientation', params);
|
|
66
52
|
};
|
|
67
|
-
|
|
68
53
|
commands.fakeFlick = async function fakeFlick(xSpeed, ySpeed) {
|
|
69
54
|
return await this.bootstrap.sendAction('flick', {
|
|
70
55
|
xSpeed,
|
|
71
56
|
ySpeed
|
|
72
57
|
});
|
|
73
58
|
};
|
|
74
|
-
|
|
75
59
|
commands.fakeFlickElement = async function fakeFlickElement(elementId, xoffset, yoffset, speed) {
|
|
76
60
|
let params = {
|
|
77
61
|
xoffset,
|
|
@@ -81,16 +65,13 @@ commands.fakeFlickElement = async function fakeFlickElement(elementId, xoffset,
|
|
|
81
65
|
};
|
|
82
66
|
return await this.bootstrap.sendAction('element:flick', params);
|
|
83
67
|
};
|
|
84
|
-
|
|
85
68
|
commands.swipe = async function swipe(startX, startY, endX, endY, duration, touchCount, elId) {
|
|
86
69
|
if (startX === 'null') {
|
|
87
70
|
startX = 0.5;
|
|
88
71
|
}
|
|
89
|
-
|
|
90
72
|
if (startY === 'null') {
|
|
91
73
|
startY = 0.5;
|
|
92
74
|
}
|
|
93
|
-
|
|
94
75
|
let swipeOpts = {
|
|
95
76
|
startX,
|
|
96
77
|
startY,
|
|
@@ -98,14 +79,11 @@ commands.swipe = async function swipe(startX, startY, endX, endY, duration, touc
|
|
|
98
79
|
endY,
|
|
99
80
|
steps: Math.round(duration * swipeStepsPerSec)
|
|
100
81
|
};
|
|
101
|
-
|
|
102
82
|
if (_support.util.hasValue(elId)) {
|
|
103
83
|
swipeOpts.elementId = elId;
|
|
104
84
|
}
|
|
105
|
-
|
|
106
85
|
return await this.doSwipe(swipeOpts);
|
|
107
86
|
};
|
|
108
|
-
|
|
109
87
|
commands.doSwipe = async function doSwipe(swipeOpts) {
|
|
110
88
|
if (_support.util.hasValue(swipeOpts.elementId)) {
|
|
111
89
|
return await this.bootstrap.sendAction('element:swipe', swipeOpts);
|
|
@@ -113,7 +91,6 @@ commands.doSwipe = async function doSwipe(swipeOpts) {
|
|
|
113
91
|
return await this.bootstrap.sendAction('swipe', swipeOpts);
|
|
114
92
|
}
|
|
115
93
|
};
|
|
116
|
-
|
|
117
94
|
commands.pinchClose = async function pinchClose(startX, startY, endX, endY, duration, percent, steps, elId) {
|
|
118
95
|
let pinchOpts = {
|
|
119
96
|
direction: 'in',
|
|
@@ -123,7 +100,6 @@ commands.pinchClose = async function pinchClose(startX, startY, endX, endY, dura
|
|
|
123
100
|
};
|
|
124
101
|
return await this.bootstrap.sendAction('element:pinch', pinchOpts);
|
|
125
102
|
};
|
|
126
|
-
|
|
127
103
|
commands.pinchOpen = async function pinchOpen(startX, startY, endX, endY, duration, percent, steps, elId) {
|
|
128
104
|
let pinchOpts = {
|
|
129
105
|
direction: 'out',
|
|
@@ -133,7 +109,6 @@ commands.pinchOpen = async function pinchOpen(startX, startY, endX, endY, durati
|
|
|
133
109
|
};
|
|
134
110
|
return await this.bootstrap.sendAction('element:pinch', pinchOpts);
|
|
135
111
|
};
|
|
136
|
-
|
|
137
112
|
commands.flick = async function flick(element, xSpeed, ySpeed, xOffset, yOffset, speed) {
|
|
138
113
|
if (element) {
|
|
139
114
|
await this.fakeFlickElement(element, xOffset, yOffset, speed);
|
|
@@ -141,7 +116,6 @@ commands.flick = async function flick(element, xSpeed, ySpeed, xOffset, yOffset,
|
|
|
141
116
|
await this.fakeFlick(xSpeed, ySpeed);
|
|
142
117
|
}
|
|
143
118
|
};
|
|
144
|
-
|
|
145
119
|
commands.drag = async function drag(startX, startY, endX, endY, duration, touchCount, elementId, destElId) {
|
|
146
120
|
let dragOpts = {
|
|
147
121
|
elementId,
|
|
@@ -154,7 +128,6 @@ commands.drag = async function drag(startX, startY, endX, endY, duration, touchC
|
|
|
154
128
|
};
|
|
155
129
|
return await this.doDrag(dragOpts);
|
|
156
130
|
};
|
|
157
|
-
|
|
158
131
|
commands.doDrag = async function doDrag(dragOpts) {
|
|
159
132
|
if (_support.util.hasValue(dragOpts.elementId)) {
|
|
160
133
|
return await this.bootstrap.sendAction('element:drag', dragOpts);
|
|
@@ -162,101 +135,76 @@ commands.doDrag = async function doDrag(dragOpts) {
|
|
|
162
135
|
return await this.bootstrap.sendAction('drag', dragOpts);
|
|
163
136
|
}
|
|
164
137
|
};
|
|
165
|
-
|
|
166
138
|
commands.lock = async function lock(seconds) {
|
|
167
139
|
await this.adb.lock();
|
|
168
|
-
|
|
169
140
|
if (isNaN(seconds)) {
|
|
170
141
|
return;
|
|
171
142
|
}
|
|
172
|
-
|
|
173
143
|
const floatSeconds = parseFloat(seconds);
|
|
174
|
-
|
|
175
144
|
if (floatSeconds <= 0) {
|
|
176
145
|
return;
|
|
177
146
|
}
|
|
178
|
-
|
|
179
147
|
await _bluebird.default.delay(1000 * floatSeconds);
|
|
180
148
|
await this.unlock();
|
|
181
149
|
};
|
|
182
|
-
|
|
183
150
|
commands.isLocked = async function isLocked() {
|
|
184
151
|
return await this.adb.isScreenLocked();
|
|
185
152
|
};
|
|
186
|
-
|
|
187
153
|
commands.unlock = async function unlock() {
|
|
188
154
|
return await _androidHelpers.default.unlock(this, this.adb, this.caps);
|
|
189
155
|
};
|
|
190
|
-
|
|
191
156
|
commands.openNotifications = async function openNotifications() {
|
|
192
157
|
return await this.bootstrap.sendAction('openNotification');
|
|
193
158
|
};
|
|
194
|
-
|
|
195
159
|
commands.setLocation = async function setLocation(latitude, longitude) {
|
|
196
160
|
return await this.adb.sendTelnetCommand(`geo fix ${longitude} ${latitude}`);
|
|
197
161
|
};
|
|
198
|
-
|
|
199
162
|
commands.fingerprint = async function fingerprint(fingerprintId) {
|
|
200
163
|
if (!this.isEmulator()) {
|
|
201
164
|
this.log.errorAndThrow('fingerprint method is only available for emulators');
|
|
202
165
|
}
|
|
203
|
-
|
|
204
166
|
await this.adb.fingerprint(fingerprintId);
|
|
205
167
|
};
|
|
206
|
-
|
|
207
168
|
commands.sendSMS = async function sendSMS(phoneNumber, message) {
|
|
208
169
|
if (!this.isEmulator()) {
|
|
209
170
|
this.log.errorAndThrow('sendSMS method is only available for emulators');
|
|
210
171
|
}
|
|
211
|
-
|
|
212
172
|
await this.adb.sendSMS(phoneNumber, message);
|
|
213
173
|
};
|
|
214
|
-
|
|
215
174
|
commands.gsmCall = async function gsmCall(phoneNumber, action) {
|
|
216
175
|
if (!this.isEmulator()) {
|
|
217
176
|
this.log.errorAndThrow('gsmCall method is only available for emulators');
|
|
218
177
|
}
|
|
219
|
-
|
|
220
178
|
await this.adb.gsmCall(phoneNumber, action);
|
|
221
179
|
};
|
|
222
|
-
|
|
223
180
|
commands.gsmSignal = async function gsmSignal(signalStrengh) {
|
|
224
181
|
if (!this.isEmulator()) {
|
|
225
182
|
this.log.errorAndThrow('gsmSignal method is only available for emulators');
|
|
226
183
|
}
|
|
227
|
-
|
|
228
184
|
await this.adb.gsmSignal(signalStrengh);
|
|
229
185
|
};
|
|
230
|
-
|
|
231
186
|
commands.gsmVoice = async function gsmVoice(state) {
|
|
232
187
|
if (!this.isEmulator()) {
|
|
233
188
|
this.log.errorAndThrow('gsmVoice method is only available for emulators');
|
|
234
189
|
}
|
|
235
|
-
|
|
236
190
|
await this.adb.gsmVoice(state);
|
|
237
191
|
};
|
|
238
|
-
|
|
239
192
|
commands.powerAC = async function powerAC(state) {
|
|
240
193
|
if (!this.isEmulator()) {
|
|
241
194
|
this.log.errorAndThrow('powerAC method is only available for emulators');
|
|
242
195
|
}
|
|
243
|
-
|
|
244
196
|
await this.adb.powerAC(state);
|
|
245
197
|
};
|
|
246
|
-
|
|
247
198
|
commands.powerCapacity = async function powerCapacity(batteryPercent) {
|
|
248
199
|
if (!this.isEmulator()) {
|
|
249
200
|
this.log.errorAndThrow('powerCapacity method is only available for emulators');
|
|
250
201
|
}
|
|
251
|
-
|
|
252
202
|
await this.adb.powerCapacity(batteryPercent);
|
|
253
203
|
};
|
|
254
|
-
|
|
255
204
|
commands.networkSpeed = async function networkSpeed(networkSpeed) {
|
|
256
205
|
if (!this.isEmulator()) {
|
|
257
206
|
this.log.errorAndThrow('networkSpeed method is only available for emulators');
|
|
258
207
|
}
|
|
259
|
-
|
|
260
208
|
await this.adb.networkSpeed(networkSpeed);
|
|
261
209
|
};
|
|
262
210
|
|
|
@@ -265,44 +213,33 @@ commands.sensorSet = async function sensorSet(sensor = {}) {
|
|
|
265
213
|
sensorType,
|
|
266
214
|
value
|
|
267
215
|
} = sensor;
|
|
268
|
-
|
|
269
216
|
if (!_support.util.hasValue(sensorType)) {
|
|
270
217
|
this.log.errorAndThrow(`'sensorType' argument is required`);
|
|
271
218
|
}
|
|
272
|
-
|
|
273
219
|
if (!_support.util.hasValue(value)) {
|
|
274
220
|
this.log.errorAndThrow(`'value' argument is required`);
|
|
275
221
|
}
|
|
276
|
-
|
|
277
222
|
if (!this.isEmulator()) {
|
|
278
223
|
this.log.errorAndThrow('sensorSet method is only available for emulators');
|
|
279
224
|
}
|
|
280
|
-
|
|
281
225
|
await this.adb.sensorSet(sensorType, value);
|
|
282
226
|
};
|
|
283
|
-
|
|
284
227
|
helpers.getScreenshotDataWithAdbShell = async function getScreenshotDataWithAdbShell(adb, opts) {
|
|
285
228
|
const localFile = await _support.tempDir.path({
|
|
286
229
|
prefix: 'appium',
|
|
287
230
|
suffix: '.png'
|
|
288
231
|
});
|
|
289
|
-
|
|
290
232
|
if (await _support.fs.exists(localFile)) {
|
|
291
233
|
await _support.fs.unlink(localFile);
|
|
292
234
|
}
|
|
293
|
-
|
|
294
235
|
try {
|
|
295
236
|
const pngDir = opts.androidScreenshotPath || '/data/local/tmp/';
|
|
296
|
-
|
|
297
237
|
const png = _path.default.posix.resolve(pngDir, 'screenshot.png');
|
|
298
|
-
|
|
299
238
|
const cmd = ['/system/bin/rm', `${png};`, '/system/bin/screencap', '-p', png];
|
|
300
239
|
await adb.shell(cmd);
|
|
301
|
-
|
|
302
240
|
if (!(await adb.fileSize(png))) {
|
|
303
241
|
throw new Error('The size of the taken screenshot equals to zero.');
|
|
304
242
|
}
|
|
305
|
-
|
|
306
243
|
await adb.pull(png, localFile);
|
|
307
244
|
return await _jimp.default.read(localFile);
|
|
308
245
|
} finally {
|
|
@@ -311,7 +248,6 @@ helpers.getScreenshotDataWithAdbShell = async function getScreenshotDataWithAdbS
|
|
|
311
248
|
}
|
|
312
249
|
}
|
|
313
250
|
};
|
|
314
|
-
|
|
315
251
|
helpers.getScreenshotDataWithAdbExecOut = async function getScreenshotDataWithAdbExecOut(adb) {
|
|
316
252
|
let {
|
|
317
253
|
stdout,
|
|
@@ -321,22 +257,17 @@ helpers.getScreenshotDataWithAdbExecOut = async function getScreenshotDataWithAd
|
|
|
321
257
|
encoding: 'binary',
|
|
322
258
|
isBuffer: true
|
|
323
259
|
});
|
|
324
|
-
|
|
325
260
|
if (code || stderr.length) {
|
|
326
261
|
throw new Error(`Screenshot returned error, code: '${code}', stderr: '${stderr.toString()}'`);
|
|
327
262
|
}
|
|
328
|
-
|
|
329
263
|
if (!stdout.length) {
|
|
330
264
|
throw new Error('Screenshot returned no data');
|
|
331
265
|
}
|
|
332
|
-
|
|
333
266
|
return await _jimp.default.read(stdout);
|
|
334
267
|
};
|
|
335
|
-
|
|
336
268
|
commands.getScreenshot = async function getScreenshot() {
|
|
337
269
|
const apiLevel = await this.adb.getApiLevel();
|
|
338
270
|
let image = null;
|
|
339
|
-
|
|
340
271
|
if (apiLevel > 20) {
|
|
341
272
|
try {
|
|
342
273
|
image = await this.getScreenshotDataWithAdbExecOut(this.adb);
|
|
@@ -344,7 +275,6 @@ commands.getScreenshot = async function getScreenshot() {
|
|
|
344
275
|
this.log.info(`Cannot get screenshot data with 'adb exec-out' because of '${e.message}'. ` + `Defaulting to 'adb shell' call`);
|
|
345
276
|
}
|
|
346
277
|
}
|
|
347
|
-
|
|
348
278
|
if (!image) {
|
|
349
279
|
try {
|
|
350
280
|
image = await this.getScreenshotDataWithAdbShell(this.adb, this.opts);
|
|
@@ -353,26 +283,21 @@ commands.getScreenshot = async function getScreenshot() {
|
|
|
353
283
|
this.log.errorAndThrow(err);
|
|
354
284
|
}
|
|
355
285
|
}
|
|
356
|
-
|
|
357
286
|
if (apiLevel < 23) {
|
|
358
287
|
let screenOrientation = await this.adb.getScreenOrientation();
|
|
359
|
-
|
|
360
288
|
try {
|
|
361
289
|
image = await image.rotate(-90 * screenOrientation);
|
|
362
290
|
} catch (err) {
|
|
363
291
|
this.log.warn(`Could not rotate screenshot due to error: ${err}`);
|
|
364
292
|
}
|
|
365
293
|
}
|
|
366
|
-
|
|
367
294
|
const getBuffer = _bluebird.default.promisify(image.getBuffer, {
|
|
368
295
|
context: image
|
|
369
296
|
});
|
|
370
|
-
|
|
371
297
|
const imgBuffer = await getBuffer(_jimp.default.MIME_PNG);
|
|
372
298
|
return imgBuffer.toString('base64');
|
|
373
299
|
};
|
|
374
|
-
|
|
375
300
|
Object.assign(extensions, commands, helpers);
|
|
376
301
|
var _default = extensions;
|
|
377
302
|
exports.default = _default;
|
|
378
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzd2lwZVN0ZXBzUGVyU2VjIiwiZHJhZ1N0ZXBzUGVyU2VjIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsImtleWV2ZW50Iiwia2V5Y29kZSIsIm1ldGFzdGF0ZSIsImxvZyIsIndhcm4iLCJwcmVzc0tleUNvZGUiLCJib290c3RyYXAiLCJzZW5kQWN0aW9uIiwibG9uZ1ByZXNzS2V5Q29kZSIsImdldE9yaWVudGF0aW9uIiwicGFyYW1zIiwibmF0dXJhbE9yaWVudGF0aW9uIiwib3B0cyIsImFuZHJvaWROYXR1cmFsT3JpZW50YXRpb24iLCJvcmllbnRhdGlvbiIsInRvVXBwZXJDYXNlIiwic2V0T3JpZW50YXRpb24iLCJmYWtlRmxpY2siLCJ4U3BlZWQiLCJ5U3BlZWQiLCJmYWtlRmxpY2tFbGVtZW50IiwiZWxlbWVudElkIiwieG9mZnNldCIsInlvZmZzZXQiLCJzcGVlZCIsInN3aXBlIiwic3RhcnRYIiwic3RhcnRZIiwiZW5kWCIsImVuZFkiLCJkdXJhdGlvbiIsInRvdWNoQ291bnQiLCJlbElkIiwic3dpcGVPcHRzIiwic3RlcHMiLCJNYXRoIiwicm91bmQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJkb1N3aXBlIiwicGluY2hDbG9zZSIsInBlcmNlbnQiLCJwaW5jaE9wdHMiLCJkaXJlY3Rpb24iLCJwaW5jaE9wZW4iLCJmbGljayIsImVsZW1lbnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsImRyYWciLCJkZXN0RWxJZCIsImRyYWdPcHRzIiwiZG9EcmFnIiwibG9jayIsInNlY29uZHMiLCJhZGIiLCJpc05hTiIsImZsb2F0U2Vjb25kcyIsInBhcnNlRmxvYXQiLCJCIiwiZGVsYXkiLCJ1bmxvY2siLCJpc0xvY2tlZCIsImlzU2NyZWVuTG9ja2VkIiwiYW5kcm9pZEhlbHBlcnMiLCJjYXBzIiwib3Blbk5vdGlmaWNhdGlvbnMiLCJzZXRMb2NhdGlvbiIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwic2VuZFRlbG5ldENvbW1hbmQiLCJmaW5nZXJwcmludCIsImZpbmdlcnByaW50SWQiLCJpc0VtdWxhdG9yIiwiZXJyb3JBbmRUaHJvdyIsInNlbmRTTVMiLCJwaG9uZU51bWJlciIsIm1lc3NhZ2UiLCJnc21DYWxsIiwiYWN0aW9uIiwiZ3NtU2lnbmFsIiwic2lnbmFsU3RyZW5naCIsImdzbVZvaWNlIiwic3RhdGUiLCJwb3dlckFDIiwicG93ZXJDYXBhY2l0eSIsImJhdHRlcnlQZXJjZW50IiwibmV0d29ya1NwZWVkIiwic2Vuc29yU2V0Iiwic2Vuc29yIiwic2Vuc29yVHlwZSIsInZhbHVlIiwiZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiU2hlbGwiLCJsb2NhbEZpbGUiLCJ0ZW1wRGlyIiwicGF0aCIsInByZWZpeCIsInN1ZmZpeCIsImZzIiwiZXhpc3RzIiwidW5saW5rIiwicG5nRGlyIiwiYW5kcm9pZFNjcmVlbnNob3RQYXRoIiwicG5nIiwicG9zaXgiLCJyZXNvbHZlIiwiY21kIiwic2hlbGwiLCJmaWxlU2l6ZSIsIkVycm9yIiwicHVsbCIsImppbXAiLCJyZWFkIiwiZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiRXhlY091dCIsInN0ZG91dCIsInN0ZGVyciIsImNvZGUiLCJleGVjIiwiZXhlY3V0YWJsZSIsImRlZmF1bHRBcmdzIiwiY29uY2F0IiwiZW5jb2RpbmciLCJpc0J1ZmZlciIsImxlbmd0aCIsInRvU3RyaW5nIiwiZ2V0U2NyZWVuc2hvdCIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJpbWFnZSIsImUiLCJpbmZvIiwiZXJyIiwic2NyZWVuT3JpZW50YXRpb24iLCJnZXRTY3JlZW5PcmllbnRhdGlvbiIsInJvdGF0ZSIsImdldEJ1ZmZlciIsInByb21pc2lmeSIsImNvbnRleHQiLCJpbWdCdWZmZXIiLCJNSU1FX1BORyIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9hY3Rpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhbmRyb2lkSGVscGVycyBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IHsgZnMsIHV0aWwsIHRlbXBEaXJ9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IGppbXAgZnJvbSAnamltcCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcblxuY29uc3Qgc3dpcGVTdGVwc1BlclNlYyA9IDI4O1xuY29uc3QgZHJhZ1N0ZXBzUGVyU2VjID0gNDA7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuY29tbWFuZHMua2V5ZXZlbnQgPSBhc3luYyBmdW5jdGlvbiBrZXlldmVudCAoa2V5Y29kZSwgbWV0YXN0YXRlID0gbnVsbCkge1xuICAvLyBUT0RPIGRlcHJlY2F0ZSBrZXlldmVudDsgY3VycmVudGx5IHdkIG9ubHkgaW1wbGVtZW50cyBrZXlldmVudFxuICB0aGlzLmxvZy53YXJuKCdrZXlldmVudCB3aWxsIGJlIGRlcHJlY2F0ZWQgdXNlIHByZXNzS2V5Q29kZScpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcmVzc0tleUNvZGUoa2V5Y29kZSwgbWV0YXN0YXRlKTtcbn07XG5cbmNvbW1hbmRzLnByZXNzS2V5Q29kZSA9IGFzeW5jIGZ1bmN0aW9uIHByZXNzS2V5Q29kZSAoa2V5Y29kZSwgbWV0YXN0YXRlID0gbnVsbCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbigncHJlc3NLZXlDb2RlJywge2tleWNvZGUsIG1ldGFzdGF0ZX0pO1xufTtcblxuY29tbWFuZHMubG9uZ1ByZXNzS2V5Q29kZSA9IGFzeW5jIGZ1bmN0aW9uIGxvbmdQcmVzc0tleUNvZGUgKGtleWNvZGUsIG1ldGFzdGF0ZSA9IG51bGwpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2xvbmdQcmVzc0tleUNvZGUnLCB7a2V5Y29kZSwgbWV0YXN0YXRlfSk7XG59O1xuXG5jb21tYW5kcy5nZXRPcmllbnRhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGdldE9yaWVudGF0aW9uICgpIHtcbiAgbGV0IHBhcmFtcyA9IHtcbiAgICBuYXR1cmFsT3JpZW50YXRpb246ICEhdGhpcy5vcHRzLmFuZHJvaWROYXR1cmFsT3JpZW50YXRpb24sXG4gIH07XG4gIGxldCBvcmllbnRhdGlvbiA9IGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ29yaWVudGF0aW9uJywgcGFyYW1zKTtcbiAgcmV0dXJuIG9yaWVudGF0aW9uLnRvVXBwZXJDYXNlKCk7XG59O1xuXG5jb21tYW5kcy5zZXRPcmllbnRhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIHNldE9yaWVudGF0aW9uIChvcmllbnRhdGlvbikge1xuICBvcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uLnRvVXBwZXJDYXNlKCk7XG4gIGxldCBwYXJhbXMgPSB7XG4gICAgb3JpZW50YXRpb24sXG4gICAgbmF0dXJhbE9yaWVudGF0aW9uOiAhIXRoaXMub3B0cy5hbmRyb2lkTmF0dXJhbE9yaWVudGF0aW9uLFxuICB9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignb3JpZW50YXRpb24nLCBwYXJhbXMpO1xufTtcblxuY29tbWFuZHMuZmFrZUZsaWNrID0gYXN5bmMgZnVuY3Rpb24gZmFrZUZsaWNrICh4U3BlZWQsIHlTcGVlZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZmxpY2snLCB7eFNwZWVkLCB5U3BlZWR9KTtcbn07XG5cbmNvbW1hbmRzLmZha2VGbGlja0VsZW1lbnQgPSBhc3luYyBmdW5jdGlvbiBmYWtlRmxpY2tFbGVtZW50IChlbGVtZW50SWQsIHhvZmZzZXQsIHlvZmZzZXQsIHNwZWVkKSB7XG4gIGxldCBwYXJhbXMgPSB7eG9mZnNldCwgeW9mZnNldCwgc3BlZWQsIGVsZW1lbnRJZH07XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OmZsaWNrJywgcGFyYW1zKTtcbn07XG5cbmNvbW1hbmRzLnN3aXBlID0gYXN5bmMgZnVuY3Rpb24gc3dpcGUgKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkdXJhdGlvbiwgdG91Y2hDb3VudCwgZWxJZCkge1xuICBpZiAoc3RhcnRYID09PSAnbnVsbCcpIHtcbiAgICBzdGFydFggPSAwLjU7XG4gIH1cbiAgaWYgKHN0YXJ0WSA9PT0gJ251bGwnKSB7XG4gICAgc3RhcnRZID0gMC41O1xuICB9XG4gIGxldCBzd2lwZU9wdHMgPSB7c3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksXG4gICAgICAgICAgICAgICAgICAgc3RlcHM6IE1hdGgucm91bmQoZHVyYXRpb24gKiBzd2lwZVN0ZXBzUGVyU2VjKX07XG4gIC8vIGdvaW5nIHRoZSBsb25nIHdheSBhbmQgY2hlY2tpbmcgZm9yIHVuZGVmaW5lZCBhbmQgbnVsbCBzaW5jZVxuICAvLyB3ZSBjYW4ndCBiZSBhc3N1cmVkIGBlbElkYCBpcyBhIHN0cmluZyBhbmQgbm90IGFuIGludFxuICBpZiAodXRpbC5oYXNWYWx1ZShlbElkKSkge1xuICAgIHN3aXBlT3B0cy5lbGVtZW50SWQgPSBlbElkO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmRvU3dpcGUoc3dpcGVPcHRzKTtcbn07XG5cbmNvbW1hbmRzLmRvU3dpcGUgPSBhc3luYyBmdW5jdGlvbiBkb1N3aXBlIChzd2lwZU9wdHMpIHtcbiAgaWYgKHV0aWwuaGFzVmFsdWUoc3dpcGVPcHRzLmVsZW1lbnRJZCkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpzd2lwZScsIHN3aXBlT3B0cyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3N3aXBlJywgc3dpcGVPcHRzKTtcbiAgfVxufTtcblxuY29tbWFuZHMucGluY2hDbG9zZSA9IGFzeW5jIGZ1bmN0aW9uIHBpbmNoQ2xvc2UgKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkdXJhdGlvbiwgcGVyY2VudCwgc3RlcHMsIGVsSWQpIHtcbiAgbGV0IHBpbmNoT3B0cyA9IHtcbiAgICBkaXJlY3Rpb246ICdpbicsXG4gICAgZWxlbWVudElkOiBlbElkLFxuICAgIHBlcmNlbnQsXG4gICAgc3RlcHNcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6cGluY2gnLCBwaW5jaE9wdHMpO1xufTtcblxuY29tbWFuZHMucGluY2hPcGVuID0gYXN5bmMgZnVuY3Rpb24gcGluY2hPcGVuIChzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHVyYXRpb24sIHBlcmNlbnQsIHN0ZXBzLCBlbElkKSB7XG4gIGxldCBwaW5jaE9wdHMgPSB7ZGlyZWN0aW9uOiAnb3V0JywgZWxlbWVudElkOiBlbElkLCBwZXJjZW50LCBzdGVwc307XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnBpbmNoJywgcGluY2hPcHRzKTtcbn07XG5cbmNvbW1hbmRzLmZsaWNrID0gYXN5bmMgZnVuY3Rpb24gZmxpY2sgKGVsZW1lbnQsIHhTcGVlZCwgeVNwZWVkLCB4T2Zmc2V0LCB5T2Zmc2V0LCBzcGVlZCkge1xuICBpZiAoZWxlbWVudCkge1xuICAgIGF3YWl0IHRoaXMuZmFrZUZsaWNrRWxlbWVudChlbGVtZW50LCB4T2Zmc2V0LCB5T2Zmc2V0LCBzcGVlZCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdGhpcy5mYWtlRmxpY2soeFNwZWVkLCB5U3BlZWQpO1xuICB9XG59O1xuXG5jb21tYW5kcy5kcmFnID0gYXN5bmMgZnVuY3Rpb24gZHJhZyAoc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGR1cmF0aW9uLCB0b3VjaENvdW50LCBlbGVtZW50SWQsIGRlc3RFbElkKSB7XG4gIGxldCBkcmFnT3B0cyA9IHtcbiAgICBlbGVtZW50SWQsIGRlc3RFbElkLCBzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSxcbiAgICBzdGVwczogTWF0aC5yb3VuZChkdXJhdGlvbiAqIGRyYWdTdGVwc1BlclNlYylcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZG9EcmFnKGRyYWdPcHRzKTtcblxufTtcblxuY29tbWFuZHMuZG9EcmFnID0gYXN5bmMgZnVuY3Rpb24gZG9EcmFnIChkcmFnT3B0cykge1xuICBpZiAodXRpbC5oYXNWYWx1ZShkcmFnT3B0cy5lbGVtZW50SWQpKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6ZHJhZycsIGRyYWdPcHRzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZHJhZycsIGRyYWdPcHRzKTtcbiAgfVxufTtcblxuY29tbWFuZHMubG9jayA9IGFzeW5jIGZ1bmN0aW9uIGxvY2sgKHNlY29uZHMpIHtcbiAgYXdhaXQgdGhpcy5hZGIubG9jaygpO1xuICBpZiAoaXNOYU4oc2Vjb25kcykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBmbG9hdFNlY29uZHMgPSBwYXJzZUZsb2F0KHNlY29uZHMpO1xuICBpZiAoZmxvYXRTZWNvbmRzIDw9IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgQi5kZWxheSgxMDAwICogZmxvYXRTZWNvbmRzKTtcbiAgYXdhaXQgdGhpcy51bmxvY2soKTtcbn07XG5cbmNvbW1hbmRzLmlzTG9ja2VkID0gYXN5bmMgZnVuY3Rpb24gaXNMb2NrZWQgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuaXNTY3JlZW5Mb2NrZWQoKTtcbn07XG5cbmNvbW1hbmRzLnVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIHVubG9jayAoKSB7XG4gIHJldHVybiBhd2FpdCBhbmRyb2lkSGVscGVycy51bmxvY2sodGhpcywgdGhpcy5hZGIsIHRoaXMuY2Fwcyk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIG9wZW5Ob3RpZmljYXRpb25zICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ29wZW5Ob3RpZmljYXRpb24nKTtcbn07XG5cbmNvbW1hbmRzLnNldExvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gc2V0TG9jYXRpb24gKGxhdGl0dWRlLCBsb25naXR1ZGUpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnNlbmRUZWxuZXRDb21tYW5kKGBnZW8gZml4ICR7bG9uZ2l0dWRlfSAke2xhdGl0dWRlfWApO1xufTtcblxuY29tbWFuZHMuZmluZ2VycHJpbnQgPSBhc3luYyBmdW5jdGlvbiBmaW5nZXJwcmludCAoZmluZ2VycHJpbnRJZCkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnZmluZ2VycHJpbnQgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5maW5nZXJwcmludChmaW5nZXJwcmludElkKTtcbn07XG5cbmNvbW1hbmRzLnNlbmRTTVMgPSBhc3luYyBmdW5jdGlvbiBzZW5kU01TIChwaG9uZU51bWJlciwgbWVzc2FnZSkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnc2VuZFNNUyBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLnNlbmRTTVMocGhvbmVOdW1iZXIsIG1lc3NhZ2UpO1xufTtcblxuY29tbWFuZHMuZ3NtQ2FsbCA9IGFzeW5jIGZ1bmN0aW9uIGdzbUNhbGwgKHBob25lTnVtYmVyLCBhY3Rpb24pIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2dzbUNhbGwgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5nc21DYWxsKHBob25lTnVtYmVyLCBhY3Rpb24pO1xufTtcblxuY29tbWFuZHMuZ3NtU2lnbmFsID0gYXN5bmMgZnVuY3Rpb24gZ3NtU2lnbmFsIChzaWduYWxTdHJlbmdoKSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdnc21TaWduYWwgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5nc21TaWduYWwoc2lnbmFsU3RyZW5naCk7XG59O1xuXG5jb21tYW5kcy5nc21Wb2ljZSA9IGFzeW5jIGZ1bmN0aW9uIGdzbVZvaWNlIChzdGF0ZSkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnZ3NtVm9pY2UgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5nc21Wb2ljZShzdGF0ZSk7XG59O1xuXG5jb21tYW5kcy5wb3dlckFDID0gYXN5bmMgZnVuY3Rpb24gcG93ZXJBQyAoc3RhdGUpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ3Bvd2VyQUMgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5wb3dlckFDKHN0YXRlKTtcbn07XG5cbmNvbW1hbmRzLnBvd2VyQ2FwYWNpdHkgPSBhc3luYyBmdW5jdGlvbiBwb3dlckNhcGFjaXR5IChiYXR0ZXJ5UGVyY2VudCkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygncG93ZXJDYXBhY2l0eSBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLnBvd2VyQ2FwYWNpdHkoYmF0dGVyeVBlcmNlbnQpO1xufTtcblxuY29tbWFuZHMubmV0d29ya1NwZWVkID0gYXN5bmMgZnVuY3Rpb24gbmV0d29ya1NwZWVkIChuZXR3b3JrU3BlZWQpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ25ldHdvcmtTcGVlZCBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLm5ldHdvcmtTcGVlZChuZXR3b3JrU3BlZWQpO1xufTtcblxuLyoqXG4gKiBFbXVsYXRlIHNlbnNvcnMgdmFsdWVzIG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gU2Vuc29yXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc2Vuc29yVHlwZSAtIHNlbnNvciB0eXBlIGRlY2xhcmVkIGluIGFkYi5TRU5TT1JTXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmFsdWUgLSB2YWx1ZSB0byBzZXQgdG8gdGhlIHNlbnNvclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBTZW5zb3JcbiAqIEB0aHJvd3Mge0Vycm9yfSAtIElmIHNlbnNvclR5cGUgaXMgbm90IGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSAtIElmIHZhbHVlIGZvciB0aGUgc2Ugc29yIGlzIG5vdCBkZWZpbmVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gLSBJZiBkZXZpY2VUeXBlIGlzIG5vdCBhbiBlbXVsYXRvclxuICovXG5jb21tYW5kcy5zZW5zb3JTZXQgPSBhc3luYyBmdW5jdGlvbiBzZW5zb3JTZXQgKHNlbnNvciA9IHt9KSB7XG4gIGNvbnN0IHtzZW5zb3JUeXBlLCB2YWx1ZX0gPSBzZW5zb3I7XG4gIGlmICghdXRpbC5oYXNWYWx1ZShzZW5zb3JUeXBlKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYCdzZW5zb3JUeXBlJyBhcmd1bWVudCBpcyByZXF1aXJlZGApO1xuICB9XG4gIGlmICghdXRpbC5oYXNWYWx1ZSh2YWx1ZSkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGAndmFsdWUnIGFyZ3VtZW50IGlzIHJlcXVpcmVkYCk7XG4gIH1cbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ3NlbnNvclNldCBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLnNlbnNvclNldChzZW5zb3JUeXBlLCB2YWx1ZSk7XG59O1xuXG5oZWxwZXJzLmdldFNjcmVlbnNob3REYXRhV2l0aEFkYlNoZWxsID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiU2hlbGwgKGFkYiwgb3B0cykge1xuICBjb25zdCBsb2NhbEZpbGUgPSBhd2FpdCB0ZW1wRGlyLnBhdGgoe3ByZWZpeDogJ2FwcGl1bScsIHN1ZmZpeDogJy5wbmcnfSk7XG4gIGlmIChhd2FpdCBmcy5leGlzdHMobG9jYWxGaWxlKSkge1xuICAgIGF3YWl0IGZzLnVubGluayhsb2NhbEZpbGUpO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcG5nRGlyID0gb3B0cy5hbmRyb2lkU2NyZWVuc2hvdFBhdGggfHwgJy9kYXRhL2xvY2FsL3RtcC8nO1xuICAgIGNvbnN0IHBuZyA9IHBhdGgucG9zaXgucmVzb2x2ZShwbmdEaXIsICdzY3JlZW5zaG90LnBuZycpO1xuICAgIGNvbnN0IGNtZCA9IFsnL3N5c3RlbS9iaW4vcm0nLCBgJHtwbmd9O2AsICcvc3lzdGVtL2Jpbi9zY3JlZW5jYXAnLCAnLXAnLCBwbmddO1xuICAgIGF3YWl0IGFkYi5zaGVsbChjbWQpO1xuICAgIGlmICghYXdhaXQgYWRiLmZpbGVTaXplKHBuZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHNpemUgb2YgdGhlIHRha2VuIHNjcmVlbnNob3QgZXF1YWxzIHRvIHplcm8uJyk7XG4gICAgfVxuICAgIGF3YWl0IGFkYi5wdWxsKHBuZywgbG9jYWxGaWxlKTtcbiAgICByZXR1cm4gYXdhaXQgamltcC5yZWFkKGxvY2FsRmlsZSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhsb2NhbEZpbGUpKSB7XG4gICAgICBhd2FpdCBmcy51bmxpbmsobG9jYWxGaWxlKTtcbiAgICB9XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiRXhlY091dCA9IGFzeW5jIGZ1bmN0aW9uIGdldFNjcmVlbnNob3REYXRhV2l0aEFkYkV4ZWNPdXQgKGFkYikge1xuICBsZXQge3N0ZG91dCwgc3RkZXJyLCBjb2RlfSA9IGF3YWl0IGV4ZWMoYWRiLmV4ZWN1dGFibGUucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYi5leGVjdXRhYmxlLmRlZmF1bHRBcmdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoWydleGVjLW91dCcsICcvc3lzdGVtL2Jpbi9zY3JlZW5jYXAnLCAnLXAnXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZW5jb2Rpbmc6ICdiaW5hcnknLCBpc0J1ZmZlcjogdHJ1ZX0pO1xuICAvLyBpZiB0aGVyZSBpcyBhbiBlcnJvciwgdGhyb3dcbiAgaWYgKGNvZGUgfHwgc3RkZXJyLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2NyZWVuc2hvdCByZXR1cm5lZCBlcnJvciwgY29kZTogJyR7Y29kZX0nLCBzdGRlcnI6ICcke3N0ZGVyci50b1N0cmluZygpfSdgKTtcbiAgfVxuICAvLyBpZiB3ZSBkb24ndCBnZXQgYW55dGhpbmcgYXQgYWxsLCB0aHJvd1xuICBpZiAoIXN0ZG91dC5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NjcmVlbnNob3QgcmV0dXJuZWQgbm8gZGF0YScpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGppbXAucmVhZChzdGRvdXQpO1xufTtcblxuY29tbWFuZHMuZ2V0U2NyZWVuc2hvdCA9IGFzeW5jIGZ1bmN0aW9uIGdldFNjcmVlbnNob3QgKCkge1xuICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG4gIGxldCBpbWFnZSA9IG51bGw7XG4gIGlmIChhcGlMZXZlbCA+IDIwKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRoaXMgc2NyZWVuc2hvdGluZyBhcHByb2FjaCBpcyB3YXkgZmFzdGVyLCBzaW5jZSBpdCByZXF1aXJlcyBsZXNzIGV4dGVybmFsIGNvbW1hbmRzXG4gICAgICAvLyB0byBiZSBleGVjdXRlZC4gVW5mb3J0dW5hdGVseSwgZXhlYy1vdXQgb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IG5ld2VyIEFuZHJvaWQvU0RLIHZlcnNpb25zICg1LjAgYW5kIGxhdGVyKVxuICAgICAgaW1hZ2UgPSBhd2FpdCB0aGlzLmdldFNjcmVlbnNob3REYXRhV2l0aEFkYkV4ZWNPdXQodGhpcy5hZGIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYENhbm5vdCBnZXQgc2NyZWVuc2hvdCBkYXRhIHdpdGggJ2FkYiBleGVjLW91dCcgYmVjYXVzZSBvZiAnJHtlLm1lc3NhZ2V9Jy4gYCArXG4gICAgICAgIGBEZWZhdWx0aW5nIHRvICdhZGIgc2hlbGwnIGNhbGxgKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpbWFnZSkge1xuICAgIHRyeSB7XG4gICAgICBpbWFnZSA9IGF3YWl0IHRoaXMuZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiU2hlbGwodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyID0gYENhbm5vdCBnZXQgc2NyZWVuc2hvdCBkYXRhIGJlY2F1c2Ugb2YgJyR7ZS5tZXNzYWdlfScuIGAgK1xuICAgICAgICBgTWFrZSBzdXJlIHRoZSAnTGF5b3V0UGFyYW1zLkZMQUdfU0VDVVJFJyBpcyBub3Qgc2V0IGZvciBgICtcbiAgICAgICAgYHRoZSBjdXJyZW50IHZpZXdgO1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhlcnIpO1xuICAgIH1cbiAgfVxuICBpZiAoYXBpTGV2ZWwgPCAyMykge1xuICAgIC8vIEFuZHJvaWQgYnVnIDg0MzM3NDIgLSByb3RhdGUgc2NyZWVuc2hvdCBpZiBzY3JlZW4gaXMgcm90YXRlZFxuICAgIGxldCBzY3JlZW5PcmllbnRhdGlvbiA9IGF3YWl0IHRoaXMuYWRiLmdldFNjcmVlbk9yaWVudGF0aW9uKCk7XG4gICAgdHJ5IHtcbiAgICAgIGltYWdlID0gYXdhaXQgaW1hZ2Uucm90YXRlKC05MCAqIHNjcmVlbk9yaWVudGF0aW9uKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYENvdWxkIG5vdCByb3RhdGUgc2NyZWVuc2hvdCBkdWUgdG8gZXJyb3I6ICR7ZXJyfWApO1xuICAgIH1cbiAgfVxuICBjb25zdCBnZXRCdWZmZXIgPSBCLnByb21pc2lmeShpbWFnZS5nZXRCdWZmZXIsIHtjb250ZXh0OiBpbWFnZX0pO1xuICBjb25zdCBpbWdCdWZmZXIgPSBhd2FpdCBnZXRCdWZmZXIoamltcC5NSU1FX1BORyk7XG4gIHJldHVybiBpbWdCdWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxnQkFBZ0IsR0FBRyxFQUF6QjtBQUNBLE1BQU1DLGVBQWUsR0FB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
|
|
303
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzd2lwZVN0ZXBzUGVyU2VjIiwiZHJhZ1N0ZXBzUGVyU2VjIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsImtleWV2ZW50Iiwia2V5Y29kZSIsIm1ldGFzdGF0ZSIsImxvZyIsIndhcm4iLCJwcmVzc0tleUNvZGUiLCJib290c3RyYXAiLCJzZW5kQWN0aW9uIiwibG9uZ1ByZXNzS2V5Q29kZSIsImdldE9yaWVudGF0aW9uIiwicGFyYW1zIiwibmF0dXJhbE9yaWVudGF0aW9uIiwib3B0cyIsImFuZHJvaWROYXR1cmFsT3JpZW50YXRpb24iLCJvcmllbnRhdGlvbiIsInRvVXBwZXJDYXNlIiwic2V0T3JpZW50YXRpb24iLCJmYWtlRmxpY2siLCJ4U3BlZWQiLCJ5U3BlZWQiLCJmYWtlRmxpY2tFbGVtZW50IiwiZWxlbWVudElkIiwieG9mZnNldCIsInlvZmZzZXQiLCJzcGVlZCIsInN3aXBlIiwic3RhcnRYIiwic3RhcnRZIiwiZW5kWCIsImVuZFkiLCJkdXJhdGlvbiIsInRvdWNoQ291bnQiLCJlbElkIiwic3dpcGVPcHRzIiwic3RlcHMiLCJNYXRoIiwicm91bmQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJkb1N3aXBlIiwicGluY2hDbG9zZSIsInBlcmNlbnQiLCJwaW5jaE9wdHMiLCJkaXJlY3Rpb24iLCJwaW5jaE9wZW4iLCJmbGljayIsImVsZW1lbnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsImRyYWciLCJkZXN0RWxJZCIsImRyYWdPcHRzIiwiZG9EcmFnIiwibG9jayIsInNlY29uZHMiLCJhZGIiLCJpc05hTiIsImZsb2F0U2Vjb25kcyIsInBhcnNlRmxvYXQiLCJCIiwiZGVsYXkiLCJ1bmxvY2siLCJpc0xvY2tlZCIsImlzU2NyZWVuTG9ja2VkIiwiYW5kcm9pZEhlbHBlcnMiLCJjYXBzIiwib3Blbk5vdGlmaWNhdGlvbnMiLCJzZXRMb2NhdGlvbiIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwic2VuZFRlbG5ldENvbW1hbmQiLCJmaW5nZXJwcmludCIsImZpbmdlcnByaW50SWQiLCJpc0VtdWxhdG9yIiwiZXJyb3JBbmRUaHJvdyIsInNlbmRTTVMiLCJwaG9uZU51bWJlciIsIm1lc3NhZ2UiLCJnc21DYWxsIiwiYWN0aW9uIiwiZ3NtU2lnbmFsIiwic2lnbmFsU3RyZW5naCIsImdzbVZvaWNlIiwic3RhdGUiLCJwb3dlckFDIiwicG93ZXJDYXBhY2l0eSIsImJhdHRlcnlQZXJjZW50IiwibmV0d29ya1NwZWVkIiwic2Vuc29yU2V0Iiwic2Vuc29yIiwic2Vuc29yVHlwZSIsInZhbHVlIiwiZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiU2hlbGwiLCJsb2NhbEZpbGUiLCJ0ZW1wRGlyIiwicGF0aCIsInByZWZpeCIsInN1ZmZpeCIsImZzIiwiZXhpc3RzIiwidW5saW5rIiwicG5nRGlyIiwiYW5kcm9pZFNjcmVlbnNob3RQYXRoIiwicG5nIiwicG9zaXgiLCJyZXNvbHZlIiwiY21kIiwic2hlbGwiLCJmaWxlU2l6ZSIsIkVycm9yIiwicHVsbCIsImppbXAiLCJyZWFkIiwiZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiRXhlY091dCIsInN0ZG91dCIsInN0ZGVyciIsImNvZGUiLCJleGVjIiwiZXhlY3V0YWJsZSIsImRlZmF1bHRBcmdzIiwiY29uY2F0IiwiZW5jb2RpbmciLCJpc0J1ZmZlciIsImxlbmd0aCIsInRvU3RyaW5nIiwiZ2V0U2NyZWVuc2hvdCIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJpbWFnZSIsImUiLCJpbmZvIiwiZXJyIiwic2NyZWVuT3JpZW50YXRpb24iLCJnZXRTY3JlZW5PcmllbnRhdGlvbiIsInJvdGF0ZSIsImdldEJ1ZmZlciIsInByb21pc2lmeSIsImNvbnRleHQiLCJpbWdCdWZmZXIiLCJNSU1FX1BORyIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9hY3Rpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhbmRyb2lkSGVscGVycyBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IHsgZnMsIHV0aWwsIHRlbXBEaXJ9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IGppbXAgZnJvbSAnamltcCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcblxuY29uc3Qgc3dpcGVTdGVwc1BlclNlYyA9IDI4O1xuY29uc3QgZHJhZ1N0ZXBzUGVyU2VjID0gNDA7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuY29tbWFuZHMua2V5ZXZlbnQgPSBhc3luYyBmdW5jdGlvbiBrZXlldmVudCAoa2V5Y29kZSwgbWV0YXN0YXRlID0gbnVsbCkge1xuICAvLyBUT0RPIGRlcHJlY2F0ZSBrZXlldmVudDsgY3VycmVudGx5IHdkIG9ubHkgaW1wbGVtZW50cyBrZXlldmVudFxuICB0aGlzLmxvZy53YXJuKCdrZXlldmVudCB3aWxsIGJlIGRlcHJlY2F0ZWQgdXNlIHByZXNzS2V5Q29kZScpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcmVzc0tleUNvZGUoa2V5Y29kZSwgbWV0YXN0YXRlKTtcbn07XG5cbmNvbW1hbmRzLnByZXNzS2V5Q29kZSA9IGFzeW5jIGZ1bmN0aW9uIHByZXNzS2V5Q29kZSAoa2V5Y29kZSwgbWV0YXN0YXRlID0gbnVsbCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbigncHJlc3NLZXlDb2RlJywge2tleWNvZGUsIG1ldGFzdGF0ZX0pO1xufTtcblxuY29tbWFuZHMubG9uZ1ByZXNzS2V5Q29kZSA9IGFzeW5jIGZ1bmN0aW9uIGxvbmdQcmVzc0tleUNvZGUgKGtleWNvZGUsIG1ldGFzdGF0ZSA9IG51bGwpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2xvbmdQcmVzc0tleUNvZGUnLCB7a2V5Y29kZSwgbWV0YXN0YXRlfSk7XG59O1xuXG5jb21tYW5kcy5nZXRPcmllbnRhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGdldE9yaWVudGF0aW9uICgpIHtcbiAgbGV0IHBhcmFtcyA9IHtcbiAgICBuYXR1cmFsT3JpZW50YXRpb246ICEhdGhpcy5vcHRzLmFuZHJvaWROYXR1cmFsT3JpZW50YXRpb24sXG4gIH07XG4gIGxldCBvcmllbnRhdGlvbiA9IGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ29yaWVudGF0aW9uJywgcGFyYW1zKTtcbiAgcmV0dXJuIG9yaWVudGF0aW9uLnRvVXBwZXJDYXNlKCk7XG59O1xuXG5jb21tYW5kcy5zZXRPcmllbnRhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIHNldE9yaWVudGF0aW9uIChvcmllbnRhdGlvbikge1xuICBvcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uLnRvVXBwZXJDYXNlKCk7XG4gIGxldCBwYXJhbXMgPSB7XG4gICAgb3JpZW50YXRpb24sXG4gICAgbmF0dXJhbE9yaWVudGF0aW9uOiAhIXRoaXMub3B0cy5hbmRyb2lkTmF0dXJhbE9yaWVudGF0aW9uLFxuICB9O1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignb3JpZW50YXRpb24nLCBwYXJhbXMpO1xufTtcblxuY29tbWFuZHMuZmFrZUZsaWNrID0gYXN5bmMgZnVuY3Rpb24gZmFrZUZsaWNrICh4U3BlZWQsIHlTcGVlZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZmxpY2snLCB7eFNwZWVkLCB5U3BlZWR9KTtcbn07XG5cbmNvbW1hbmRzLmZha2VGbGlja0VsZW1lbnQgPSBhc3luYyBmdW5jdGlvbiBmYWtlRmxpY2tFbGVtZW50IChlbGVtZW50SWQsIHhvZmZzZXQsIHlvZmZzZXQsIHNwZWVkKSB7XG4gIGxldCBwYXJhbXMgPSB7eG9mZnNldCwgeW9mZnNldCwgc3BlZWQsIGVsZW1lbnRJZH07XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OmZsaWNrJywgcGFyYW1zKTtcbn07XG5cbmNvbW1hbmRzLnN3aXBlID0gYXN5bmMgZnVuY3Rpb24gc3dpcGUgKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkdXJhdGlvbiwgdG91Y2hDb3VudCwgZWxJZCkge1xuICBpZiAoc3RhcnRYID09PSAnbnVsbCcpIHtcbiAgICBzdGFydFggPSAwLjU7XG4gIH1cbiAgaWYgKHN0YXJ0WSA9PT0gJ251bGwnKSB7XG4gICAgc3RhcnRZID0gMC41O1xuICB9XG4gIGxldCBzd2lwZU9wdHMgPSB7c3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksXG4gICAgICAgICAgICAgICAgICAgc3RlcHM6IE1hdGgucm91bmQoZHVyYXRpb24gKiBzd2lwZVN0ZXBzUGVyU2VjKX07XG4gIC8vIGdvaW5nIHRoZSBsb25nIHdheSBhbmQgY2hlY2tpbmcgZm9yIHVuZGVmaW5lZCBhbmQgbnVsbCBzaW5jZVxuICAvLyB3ZSBjYW4ndCBiZSBhc3N1cmVkIGBlbElkYCBpcyBhIHN0cmluZyBhbmQgbm90IGFuIGludFxuICBpZiAodXRpbC5oYXNWYWx1ZShlbElkKSkge1xuICAgIHN3aXBlT3B0cy5lbGVtZW50SWQgPSBlbElkO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmRvU3dpcGUoc3dpcGVPcHRzKTtcbn07XG5cbmNvbW1hbmRzLmRvU3dpcGUgPSBhc3luYyBmdW5jdGlvbiBkb1N3aXBlIChzd2lwZU9wdHMpIHtcbiAgaWYgKHV0aWwuaGFzVmFsdWUoc3dpcGVPcHRzLmVsZW1lbnRJZCkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpzd2lwZScsIHN3aXBlT3B0cyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3N3aXBlJywgc3dpcGVPcHRzKTtcbiAgfVxufTtcblxuY29tbWFuZHMucGluY2hDbG9zZSA9IGFzeW5jIGZ1bmN0aW9uIHBpbmNoQ2xvc2UgKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkdXJhdGlvbiwgcGVyY2VudCwgc3RlcHMsIGVsSWQpIHtcbiAgbGV0IHBpbmNoT3B0cyA9IHtcbiAgICBkaXJlY3Rpb246ICdpbicsXG4gICAgZWxlbWVudElkOiBlbElkLFxuICAgIHBlcmNlbnQsXG4gICAgc3RlcHNcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6cGluY2gnLCBwaW5jaE9wdHMpO1xufTtcblxuY29tbWFuZHMucGluY2hPcGVuID0gYXN5bmMgZnVuY3Rpb24gcGluY2hPcGVuIChzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHVyYXRpb24sIHBlcmNlbnQsIHN0ZXBzLCBlbElkKSB7XG4gIGxldCBwaW5jaE9wdHMgPSB7ZGlyZWN0aW9uOiAnb3V0JywgZWxlbWVudElkOiBlbElkLCBwZXJjZW50LCBzdGVwc307XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnBpbmNoJywgcGluY2hPcHRzKTtcbn07XG5cbmNvbW1hbmRzLmZsaWNrID0gYXN5bmMgZnVuY3Rpb24gZmxpY2sgKGVsZW1lbnQsIHhTcGVlZCwgeVNwZWVkLCB4T2Zmc2V0LCB5T2Zmc2V0LCBzcGVlZCkge1xuICBpZiAoZWxlbWVudCkge1xuICAgIGF3YWl0IHRoaXMuZmFrZUZsaWNrRWxlbWVudChlbGVtZW50LCB4T2Zmc2V0LCB5T2Zmc2V0LCBzcGVlZCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdGhpcy5mYWtlRmxpY2soeFNwZWVkLCB5U3BlZWQpO1xuICB9XG59O1xuXG5jb21tYW5kcy5kcmFnID0gYXN5bmMgZnVuY3Rpb24gZHJhZyAoc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGR1cmF0aW9uLCB0b3VjaENvdW50LCBlbGVtZW50SWQsIGRlc3RFbElkKSB7XG4gIGxldCBkcmFnT3B0cyA9IHtcbiAgICBlbGVtZW50SWQsIGRlc3RFbElkLCBzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSxcbiAgICBzdGVwczogTWF0aC5yb3VuZChkdXJhdGlvbiAqIGRyYWdTdGVwc1BlclNlYylcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZG9EcmFnKGRyYWdPcHRzKTtcblxufTtcblxuY29tbWFuZHMuZG9EcmFnID0gYXN5bmMgZnVuY3Rpb24gZG9EcmFnIChkcmFnT3B0cykge1xuICBpZiAodXRpbC5oYXNWYWx1ZShkcmFnT3B0cy5lbGVtZW50SWQpKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6ZHJhZycsIGRyYWdPcHRzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZHJhZycsIGRyYWdPcHRzKTtcbiAgfVxufTtcblxuY29tbWFuZHMubG9jayA9IGFzeW5jIGZ1bmN0aW9uIGxvY2sgKHNlY29uZHMpIHtcbiAgYXdhaXQgdGhpcy5hZGIubG9jaygpO1xuICBpZiAoaXNOYU4oc2Vjb25kcykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBmbG9hdFNlY29uZHMgPSBwYXJzZUZsb2F0KHNlY29uZHMpO1xuICBpZiAoZmxvYXRTZWNvbmRzIDw9IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgQi5kZWxheSgxMDAwICogZmxvYXRTZWNvbmRzKTtcbiAgYXdhaXQgdGhpcy51bmxvY2soKTtcbn07XG5cbmNvbW1hbmRzLmlzTG9ja2VkID0gYXN5bmMgZnVuY3Rpb24gaXNMb2NrZWQgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuaXNTY3JlZW5Mb2NrZWQoKTtcbn07XG5cbmNvbW1hbmRzLnVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIHVubG9jayAoKSB7XG4gIHJldHVybiBhd2FpdCBhbmRyb2lkSGVscGVycy51bmxvY2sodGhpcywgdGhpcy5hZGIsIHRoaXMuY2Fwcyk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIG9wZW5Ob3RpZmljYXRpb25zICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ29wZW5Ob3RpZmljYXRpb24nKTtcbn07XG5cbmNvbW1hbmRzLnNldExvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gc2V0TG9jYXRpb24gKGxhdGl0dWRlLCBsb25naXR1ZGUpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnNlbmRUZWxuZXRDb21tYW5kKGBnZW8gZml4ICR7bG9uZ2l0dWRlfSAke2xhdGl0dWRlfWApO1xufTtcblxuY29tbWFuZHMuZmluZ2VycHJpbnQgPSBhc3luYyBmdW5jdGlvbiBmaW5nZXJwcmludCAoZmluZ2VycHJpbnRJZCkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnZmluZ2VycHJpbnQgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5maW5nZXJwcmludChmaW5nZXJwcmludElkKTtcbn07XG5cbmNvbW1hbmRzLnNlbmRTTVMgPSBhc3luYyBmdW5jdGlvbiBzZW5kU01TIChwaG9uZU51bWJlciwgbWVzc2FnZSkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnc2VuZFNNUyBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLnNlbmRTTVMocGhvbmVOdW1iZXIsIG1lc3NhZ2UpO1xufTtcblxuY29tbWFuZHMuZ3NtQ2FsbCA9IGFzeW5jIGZ1bmN0aW9uIGdzbUNhbGwgKHBob25lTnVtYmVyLCBhY3Rpb24pIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2dzbUNhbGwgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5nc21DYWxsKHBob25lTnVtYmVyLCBhY3Rpb24pO1xufTtcblxuY29tbWFuZHMuZ3NtU2lnbmFsID0gYXN5bmMgZnVuY3Rpb24gZ3NtU2lnbmFsIChzaWduYWxTdHJlbmdoKSB7XG4gIGlmICghdGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdnc21TaWduYWwgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5nc21TaWduYWwoc2lnbmFsU3RyZW5naCk7XG59O1xuXG5jb21tYW5kcy5nc21Wb2ljZSA9IGFzeW5jIGZ1bmN0aW9uIGdzbVZvaWNlIChzdGF0ZSkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnZ3NtVm9pY2UgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5nc21Wb2ljZShzdGF0ZSk7XG59O1xuXG5jb21tYW5kcy5wb3dlckFDID0gYXN5bmMgZnVuY3Rpb24gcG93ZXJBQyAoc3RhdGUpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ3Bvd2VyQUMgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5wb3dlckFDKHN0YXRlKTtcbn07XG5cbmNvbW1hbmRzLnBvd2VyQ2FwYWNpdHkgPSBhc3luYyBmdW5jdGlvbiBwb3dlckNhcGFjaXR5IChiYXR0ZXJ5UGVyY2VudCkge1xuICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygncG93ZXJDYXBhY2l0eSBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLnBvd2VyQ2FwYWNpdHkoYmF0dGVyeVBlcmNlbnQpO1xufTtcblxuY29tbWFuZHMubmV0d29ya1NwZWVkID0gYXN5bmMgZnVuY3Rpb24gbmV0d29ya1NwZWVkIChuZXR3b3JrU3BlZWQpIHtcbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ25ldHdvcmtTcGVlZCBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLm5ldHdvcmtTcGVlZChuZXR3b3JrU3BlZWQpO1xufTtcblxuLyoqXG4gKiBFbXVsYXRlIHNlbnNvcnMgdmFsdWVzIG9uIHRoZSBjb25uZWN0ZWQgZW11bGF0b3IuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gU2Vuc29yXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc2Vuc29yVHlwZSAtIHNlbnNvciB0eXBlIGRlY2xhcmVkIGluIGFkYi5TRU5TT1JTXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmFsdWUgLSB2YWx1ZSB0byBzZXQgdG8gdGhlIHNlbnNvclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBTZW5zb3JcbiAqIEB0aHJvd3Mge0Vycm9yfSAtIElmIHNlbnNvclR5cGUgaXMgbm90IGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSAtIElmIHZhbHVlIGZvciB0aGUgc2Ugc29yIGlzIG5vdCBkZWZpbmVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gLSBJZiBkZXZpY2VUeXBlIGlzIG5vdCBhbiBlbXVsYXRvclxuICovXG5jb21tYW5kcy5zZW5zb3JTZXQgPSBhc3luYyBmdW5jdGlvbiBzZW5zb3JTZXQgKHNlbnNvciA9IHt9KSB7XG4gIGNvbnN0IHtzZW5zb3JUeXBlLCB2YWx1ZX0gPSBzZW5zb3I7XG4gIGlmICghdXRpbC5oYXNWYWx1ZShzZW5zb3JUeXBlKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYCdzZW5zb3JUeXBlJyBhcmd1bWVudCBpcyByZXF1aXJlZGApO1xuICB9XG4gIGlmICghdXRpbC5oYXNWYWx1ZSh2YWx1ZSkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGAndmFsdWUnIGFyZ3VtZW50IGlzIHJlcXVpcmVkYCk7XG4gIH1cbiAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ3NlbnNvclNldCBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLnNlbnNvclNldChzZW5zb3JUeXBlLCB2YWx1ZSk7XG59O1xuXG5oZWxwZXJzLmdldFNjcmVlbnNob3REYXRhV2l0aEFkYlNoZWxsID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiU2hlbGwgKGFkYiwgb3B0cykge1xuICBjb25zdCBsb2NhbEZpbGUgPSBhd2FpdCB0ZW1wRGlyLnBhdGgoe3ByZWZpeDogJ2FwcGl1bScsIHN1ZmZpeDogJy5wbmcnfSk7XG4gIGlmIChhd2FpdCBmcy5leGlzdHMobG9jYWxGaWxlKSkge1xuICAgIGF3YWl0IGZzLnVubGluayhsb2NhbEZpbGUpO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcG5nRGlyID0gb3B0cy5hbmRyb2lkU2NyZWVuc2hvdFBhdGggfHwgJy9kYXRhL2xvY2FsL3RtcC8nO1xuICAgIGNvbnN0IHBuZyA9IHBhdGgucG9zaXgucmVzb2x2ZShwbmdEaXIsICdzY3JlZW5zaG90LnBuZycpO1xuICAgIGNvbnN0IGNtZCA9IFsnL3N5c3RlbS9iaW4vcm0nLCBgJHtwbmd9O2AsICcvc3lzdGVtL2Jpbi9zY3JlZW5jYXAnLCAnLXAnLCBwbmddO1xuICAgIGF3YWl0IGFkYi5zaGVsbChjbWQpO1xuICAgIGlmICghYXdhaXQgYWRiLmZpbGVTaXplKHBuZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHNpemUgb2YgdGhlIHRha2VuIHNjcmVlbnNob3QgZXF1YWxzIHRvIHplcm8uJyk7XG4gICAgfVxuICAgIGF3YWl0IGFkYi5wdWxsKHBuZywgbG9jYWxGaWxlKTtcbiAgICByZXR1cm4gYXdhaXQgamltcC5yZWFkKGxvY2FsRmlsZSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhsb2NhbEZpbGUpKSB7XG4gICAgICBhd2FpdCBmcy51bmxpbmsobG9jYWxGaWxlKTtcbiAgICB9XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiRXhlY091dCA9IGFzeW5jIGZ1bmN0aW9uIGdldFNjcmVlbnNob3REYXRhV2l0aEFkYkV4ZWNPdXQgKGFkYikge1xuICBsZXQge3N0ZG91dCwgc3RkZXJyLCBjb2RlfSA9IGF3YWl0IGV4ZWMoYWRiLmV4ZWN1dGFibGUucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYi5leGVjdXRhYmxlLmRlZmF1bHRBcmdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoWydleGVjLW91dCcsICcvc3lzdGVtL2Jpbi9zY3JlZW5jYXAnLCAnLXAnXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZW5jb2Rpbmc6ICdiaW5hcnknLCBpc0J1ZmZlcjogdHJ1ZX0pO1xuICAvLyBpZiB0aGVyZSBpcyBhbiBlcnJvciwgdGhyb3dcbiAgaWYgKGNvZGUgfHwgc3RkZXJyLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2NyZWVuc2hvdCByZXR1cm5lZCBlcnJvciwgY29kZTogJyR7Y29kZX0nLCBzdGRlcnI6ICcke3N0ZGVyci50b1N0cmluZygpfSdgKTtcbiAgfVxuICAvLyBpZiB3ZSBkb24ndCBnZXQgYW55dGhpbmcgYXQgYWxsLCB0aHJvd1xuICBpZiAoIXN0ZG91dC5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NjcmVlbnNob3QgcmV0dXJuZWQgbm8gZGF0YScpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGppbXAucmVhZChzdGRvdXQpO1xufTtcblxuY29tbWFuZHMuZ2V0U2NyZWVuc2hvdCA9IGFzeW5jIGZ1bmN0aW9uIGdldFNjcmVlbnNob3QgKCkge1xuICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG4gIGxldCBpbWFnZSA9IG51bGw7XG4gIGlmIChhcGlMZXZlbCA+IDIwKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRoaXMgc2NyZWVuc2hvdGluZyBhcHByb2FjaCBpcyB3YXkgZmFzdGVyLCBzaW5jZSBpdCByZXF1aXJlcyBsZXNzIGV4dGVybmFsIGNvbW1hbmRzXG4gICAgICAvLyB0byBiZSBleGVjdXRlZC4gVW5mb3J0dW5hdGVseSwgZXhlYy1vdXQgb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IG5ld2VyIEFuZHJvaWQvU0RLIHZlcnNpb25zICg1LjAgYW5kIGxhdGVyKVxuICAgICAgaW1hZ2UgPSBhd2FpdCB0aGlzLmdldFNjcmVlbnNob3REYXRhV2l0aEFkYkV4ZWNPdXQodGhpcy5hZGIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYENhbm5vdCBnZXQgc2NyZWVuc2hvdCBkYXRhIHdpdGggJ2FkYiBleGVjLW91dCcgYmVjYXVzZSBvZiAnJHtlLm1lc3NhZ2V9Jy4gYCArXG4gICAgICAgIGBEZWZhdWx0aW5nIHRvICdhZGIgc2hlbGwnIGNhbGxgKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpbWFnZSkge1xuICAgIHRyeSB7XG4gICAgICBpbWFnZSA9IGF3YWl0IHRoaXMuZ2V0U2NyZWVuc2hvdERhdGFXaXRoQWRiU2hlbGwodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyID0gYENhbm5vdCBnZXQgc2NyZWVuc2hvdCBkYXRhIGJlY2F1c2Ugb2YgJyR7ZS5tZXNzYWdlfScuIGAgK1xuICAgICAgICBgTWFrZSBzdXJlIHRoZSAnTGF5b3V0UGFyYW1zLkZMQUdfU0VDVVJFJyBpcyBub3Qgc2V0IGZvciBgICtcbiAgICAgICAgYHRoZSBjdXJyZW50IHZpZXdgO1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhlcnIpO1xuICAgIH1cbiAgfVxuICBpZiAoYXBpTGV2ZWwgPCAyMykge1xuICAgIC8vIEFuZHJvaWQgYnVnIDg0MzM3NDIgLSByb3RhdGUgc2NyZWVuc2hvdCBpZiBzY3JlZW4gaXMgcm90YXRlZFxuICAgIGxldCBzY3JlZW5PcmllbnRhdGlvbiA9IGF3YWl0IHRoaXMuYWRiLmdldFNjcmVlbk9yaWVudGF0aW9uKCk7XG4gICAgdHJ5IHtcbiAgICAgIGltYWdlID0gYXdhaXQgaW1hZ2Uucm90YXRlKC05MCAqIHNjcmVlbk9yaWVudGF0aW9uKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYENvdWxkIG5vdCByb3RhdGUgc2NyZWVuc2hvdCBkdWUgdG8gZXJyb3I6ICR7ZXJyfWApO1xuICAgIH1cbiAgfVxuICBjb25zdCBnZXRCdWZmZXIgPSBCLnByb21pc2lmeShpbWFnZS5nZXRCdWZmZXIsIHtjb250ZXh0OiBpbWFnZX0pO1xuICBjb25zdCBpbWdCdWZmZXIgPSBhd2FpdCBnZXRCdWZmZXIoamltcC5NSU1FX1BORyk7XG4gIHJldHVybiBpbWdCdWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxnQkFBZ0IsR0FBRyxFQUFFO0FBQzNCLE1BQU1DLGVBQWUsR0FBRyxFQUFFO0FB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","names":["swipeStepsPerSec","dragStepsPerSec","commands","helpers","extensions","keyevent","keycode","metastate","log","warn","pressKeyCode","bootstrap","sendAction","longPressKeyCode","getOrientation","params","naturalOrientation","opts","androidNaturalOrientation","orientation","toUpperCase","setOrientation","fakeFlick","xSpeed","ySpeed","fakeFlickElement","elementId","xoffset","yoffset","speed","swipe","startX","startY","endX","endY","duration","touchCount","elId","swipeOpts","steps","Math","round","util","hasValue","doSwipe","pinchClose","percent","pinchOpts","direction","pinchOpen","flick","element","xOffset","yOffset","drag","destElId","dragOpts","doDrag","lock","seconds","adb","isNaN","floatSeconds","parseFloat","B","delay","unlock","isLocked","isScreenLocked","androidHelpers","caps","openNotifications","setLocation","latitude","longitude","sendTelnetCommand","fingerprint","fingerprintId","isEmulator","errorAndThrow","sendSMS","phoneNumber","message","gsmCall","action","gsmSignal","signalStrengh","gsmVoice","state","powerAC","powerCapacity","batteryPercent","networkSpeed","sensorSet","sensor","sensorType","value","getScreenshotDataWithAdbShell","localFile","tempDir","path","prefix","suffix","fs","exists","unlink","pngDir","androidScreenshotPath","png","posix","resolve","cmd","shell","fileSize","Error","pull","jimp","read","getScreenshotDataWithAdbExecOut","stdout","stderr","code","exec","executable","defaultArgs","concat","encoding","isBuffer","length","toString","getScreenshot","apiLevel","getApiLevel","image","e","info","err","screenOrientation","getScreenOrientation","rotate","getBuffer","promisify","context","imgBuffer","MIME_PNG","Object","assign"],"sources":["../../../lib/commands/actions.js"],"sourcesContent":["import androidHelpers from '../android-helpers';\nimport { fs, util, tempDir} from 'appium/support';\nimport path from 'path';\nimport B from 'bluebird';\nimport jimp from 'jimp';\nimport { exec } from 'teen_process';\n\nconst swipeStepsPerSec = 28;\nconst dragStepsPerSec = 40;\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.keyevent = async function keyevent (keycode, metastate = null) {\n // TODO deprecate keyevent; currently wd only implements keyevent\n this.log.warn('keyevent will be deprecated use pressKeyCode');\n return await this.pressKeyCode(keycode, metastate);\n};\n\ncommands.pressKeyCode = async function pressKeyCode (keycode, metastate = null) {\n return await this.bootstrap.sendAction('pressKeyCode', {keycode, metastate});\n};\n\ncommands.longPressKeyCode = async function longPressKeyCode (keycode, metastate = null) {\n return await this.bootstrap.sendAction('longPressKeyCode', {keycode, metastate});\n};\n\ncommands.getOrientation = async function getOrientation () {\n let params = {\n naturalOrientation: !!this.opts.androidNaturalOrientation,\n };\n let orientation = await this.bootstrap.sendAction('orientation', params);\n return orientation.toUpperCase();\n};\n\ncommands.setOrientation = async function setOrientation (orientation) {\n orientation = orientation.toUpperCase();\n let params = {\n orientation,\n naturalOrientation: !!this.opts.androidNaturalOrientation,\n };\n return await this.bootstrap.sendAction('orientation', params);\n};\n\ncommands.fakeFlick = async function fakeFlick (xSpeed, ySpeed) {\n return await this.bootstrap.sendAction('flick', {xSpeed, ySpeed});\n};\n\ncommands.fakeFlickElement = async function fakeFlickElement (elementId, xoffset, yoffset, speed) {\n let params = {xoffset, yoffset, speed, elementId};\n return await this.bootstrap.sendAction('element:flick', params);\n};\n\ncommands.swipe = async function swipe (startX, startY, endX, endY, duration, touchCount, elId) {\n if (startX === 'null') {\n startX = 0.5;\n }\n if (startY === 'null') {\n startY = 0.5;\n }\n let swipeOpts = {startX, startY, endX, endY,\n steps: Math.round(duration * swipeStepsPerSec)};\n // going the long way and checking for undefined and null since\n // we can't be assured `elId` is a string and not an int\n if (util.hasValue(elId)) {\n swipeOpts.elementId = elId;\n }\n return await this.doSwipe(swipeOpts);\n};\n\ncommands.doSwipe = async function doSwipe (swipeOpts) {\n if (util.hasValue(swipeOpts.elementId)) {\n return await this.bootstrap.sendAction('element:swipe', swipeOpts);\n } else {\n return await this.bootstrap.sendAction('swipe', swipeOpts);\n }\n};\n\ncommands.pinchClose = async function pinchClose (startX, startY, endX, endY, duration, percent, steps, elId) {\n let pinchOpts = {\n direction: 'in',\n elementId: elId,\n percent,\n steps\n };\n return await this.bootstrap.sendAction('element:pinch', pinchOpts);\n};\n\ncommands.pinchOpen = async function pinchOpen (startX, startY, endX, endY, duration, percent, steps, elId) {\n let pinchOpts = {direction: 'out', elementId: elId, percent, steps};\n return await this.bootstrap.sendAction('element:pinch', pinchOpts);\n};\n\ncommands.flick = async function flick (element, xSpeed, ySpeed, xOffset, yOffset, speed) {\n if (element) {\n await this.fakeFlickElement(element, xOffset, yOffset, speed);\n } else {\n await this.fakeFlick(xSpeed, ySpeed);\n }\n};\n\ncommands.drag = async function drag (startX, startY, endX, endY, duration, touchCount, elementId, destElId) {\n let dragOpts = {\n elementId, destElId, startX, startY, endX, endY,\n steps: Math.round(duration * dragStepsPerSec)\n };\n return await this.doDrag(dragOpts);\n\n};\n\ncommands.doDrag = async function doDrag (dragOpts) {\n if (util.hasValue(dragOpts.elementId)) {\n return await this.bootstrap.sendAction('element:drag', dragOpts);\n } else {\n return await this.bootstrap.sendAction('drag', dragOpts);\n }\n};\n\ncommands.lock = async function lock (seconds) {\n await this.adb.lock();\n if (isNaN(seconds)) {\n return;\n }\n\n const floatSeconds = parseFloat(seconds);\n if (floatSeconds <= 0) {\n return;\n }\n await B.delay(1000 * floatSeconds);\n await this.unlock();\n};\n\ncommands.isLocked = async function isLocked () {\n return await this.adb.isScreenLocked();\n};\n\ncommands.unlock = async function unlock () {\n return await androidHelpers.unlock(this, this.adb, this.caps);\n};\n\ncommands.openNotifications = async function openNotifications () {\n return await this.bootstrap.sendAction('openNotification');\n};\n\ncommands.setLocation = async function setLocation (latitude, longitude) {\n return await this.adb.sendTelnetCommand(`geo fix ${longitude} ${latitude}`);\n};\n\ncommands.fingerprint = async function fingerprint (fingerprintId) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('fingerprint method is only available for emulators');\n }\n await this.adb.fingerprint(fingerprintId);\n};\n\ncommands.sendSMS = async function sendSMS (phoneNumber, message) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('sendSMS method is only available for emulators');\n }\n await this.adb.sendSMS(phoneNumber, message);\n};\n\ncommands.gsmCall = async function gsmCall (phoneNumber, action) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmCall method is only available for emulators');\n }\n await this.adb.gsmCall(phoneNumber, action);\n};\n\ncommands.gsmSignal = async function gsmSignal (signalStrengh) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmSignal method is only available for emulators');\n }\n await this.adb.gsmSignal(signalStrengh);\n};\n\ncommands.gsmVoice = async function gsmVoice (state) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmVoice method is only available for emulators');\n }\n await this.adb.gsmVoice(state);\n};\n\ncommands.powerAC = async function powerAC (state) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('powerAC method is only available for emulators');\n }\n await this.adb.powerAC(state);\n};\n\ncommands.powerCapacity = async function powerCapacity (batteryPercent) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('powerCapacity method is only available for emulators');\n }\n await this.adb.powerCapacity(batteryPercent);\n};\n\ncommands.networkSpeed = async function networkSpeed (networkSpeed) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('networkSpeed method is only available for emulators');\n }\n await this.adb.networkSpeed(networkSpeed);\n};\n\n/**\n * Emulate sensors values on the connected emulator.\n *\n * @typedef {Object} Sensor\n * @property {string} sensorType - sensor type declared in adb.SENSORS\n * @property {string} value - value to set to the sensor\n *\n * @param {Object} Sensor\n * @throws {Error} - If sensorType is not defined\n * @throws {Error} - If value for the se sor is not defined\n * @throws {Error} - If deviceType is not an emulator\n */\ncommands.sensorSet = async function sensorSet (sensor = {}) {\n const {sensorType, value} = sensor;\n if (!util.hasValue(sensorType)) {\n this.log.errorAndThrow(`'sensorType' argument is required`);\n }\n if (!util.hasValue(value)) {\n this.log.errorAndThrow(`'value' argument is required`);\n }\n if (!this.isEmulator()) {\n this.log.errorAndThrow('sensorSet method is only available for emulators');\n }\n await this.adb.sensorSet(sensorType, value);\n};\n\nhelpers.getScreenshotDataWithAdbShell = async function getScreenshotDataWithAdbShell (adb, opts) {\n const localFile = await tempDir.path({prefix: 'appium', suffix: '.png'});\n if (await fs.exists(localFile)) {\n await fs.unlink(localFile);\n }\n try {\n const pngDir = opts.androidScreenshotPath || '/data/local/tmp/';\n const png = path.posix.resolve(pngDir, 'screenshot.png');\n const cmd = ['/system/bin/rm', `${png};`, '/system/bin/screencap', '-p', png];\n await adb.shell(cmd);\n if (!await adb.fileSize(png)) {\n throw new Error('The size of the taken screenshot equals to zero.');\n }\n await adb.pull(png, localFile);\n return await jimp.read(localFile);\n } finally {\n if (await fs.exists(localFile)) {\n await fs.unlink(localFile);\n }\n }\n};\n\nhelpers.getScreenshotDataWithAdbExecOut = async function getScreenshotDataWithAdbExecOut (adb) {\n let {stdout, stderr, code} = await exec(adb.executable.path,\n adb.executable.defaultArgs\n .concat(['exec-out', '/system/bin/screencap', '-p']),\n {encoding: 'binary', isBuffer: true});\n // if there is an error, throw\n if (code || stderr.length) {\n throw new Error(`Screenshot returned error, code: '${code}', stderr: '${stderr.toString()}'`);\n }\n // if we don't get anything at all, throw\n if (!stdout.length) {\n throw new Error('Screenshot returned no data');\n }\n\n return await jimp.read(stdout);\n};\n\ncommands.getScreenshot = async function getScreenshot () {\n const apiLevel = await this.adb.getApiLevel();\n let image = null;\n if (apiLevel > 20) {\n try {\n // This screenshoting approach is way faster, since it requires less external commands\n // to be executed. Unfortunately, exec-out option is only supported by newer Android/SDK versions (5.0 and later)\n image = await this.getScreenshotDataWithAdbExecOut(this.adb);\n } catch (e) {\n this.log.info(`Cannot get screenshot data with 'adb exec-out' because of '${e.message}'. ` +\n `Defaulting to 'adb shell' call`);\n }\n }\n if (!image) {\n try {\n image = await this.getScreenshotDataWithAdbShell(this.adb, this.opts);\n } catch (e) {\n const err = `Cannot get screenshot data because of '${e.message}'. ` +\n `Make sure the 'LayoutParams.FLAG_SECURE' is not set for ` +\n `the current view`;\n this.log.errorAndThrow(err);\n }\n }\n if (apiLevel < 23) {\n // Android bug 8433742 - rotate screenshot if screen is rotated\n let screenOrientation = await this.adb.getScreenOrientation();\n try {\n image = await image.rotate(-90 * screenOrientation);\n } catch (err) {\n this.log.warn(`Could not rotate screenshot due to error: ${err}`);\n }\n }\n const getBuffer = B.promisify(image.getBuffer, {context: image});\n const imgBuffer = await getBuffer(jimp.MIME_PNG);\n return imgBuffer.toString('base64');\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"actions.js","names":["swipeStepsPerSec","dragStepsPerSec","commands","helpers","extensions","keyevent","keycode","metastate","log","warn","pressKeyCode","bootstrap","sendAction","longPressKeyCode","getOrientation","params","naturalOrientation","opts","androidNaturalOrientation","orientation","toUpperCase","setOrientation","fakeFlick","xSpeed","ySpeed","fakeFlickElement","elementId","xoffset","yoffset","speed","swipe","startX","startY","endX","endY","duration","touchCount","elId","swipeOpts","steps","Math","round","util","hasValue","doSwipe","pinchClose","percent","pinchOpts","direction","pinchOpen","flick","element","xOffset","yOffset","drag","destElId","dragOpts","doDrag","lock","seconds","adb","isNaN","floatSeconds","parseFloat","B","delay","unlock","isLocked","isScreenLocked","androidHelpers","caps","openNotifications","setLocation","latitude","longitude","sendTelnetCommand","fingerprint","fingerprintId","isEmulator","errorAndThrow","sendSMS","phoneNumber","message","gsmCall","action","gsmSignal","signalStrengh","gsmVoice","state","powerAC","powerCapacity","batteryPercent","networkSpeed","sensorSet","sensor","sensorType","value","getScreenshotDataWithAdbShell","localFile","tempDir","path","prefix","suffix","fs","exists","unlink","pngDir","androidScreenshotPath","png","posix","resolve","cmd","shell","fileSize","Error","pull","jimp","read","getScreenshotDataWithAdbExecOut","stdout","stderr","code","exec","executable","defaultArgs","concat","encoding","isBuffer","length","toString","getScreenshot","apiLevel","getApiLevel","image","e","info","err","screenOrientation","getScreenOrientation","rotate","getBuffer","promisify","context","imgBuffer","MIME_PNG","Object","assign"],"sources":["../../../lib/commands/actions.js"],"sourcesContent":["import androidHelpers from '../android-helpers';\nimport { fs, util, tempDir} from 'appium/support';\nimport path from 'path';\nimport B from 'bluebird';\nimport jimp from 'jimp';\nimport { exec } from 'teen_process';\n\nconst swipeStepsPerSec = 28;\nconst dragStepsPerSec = 40;\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.keyevent = async function keyevent (keycode, metastate = null) {\n // TODO deprecate keyevent; currently wd only implements keyevent\n this.log.warn('keyevent will be deprecated use pressKeyCode');\n return await this.pressKeyCode(keycode, metastate);\n};\n\ncommands.pressKeyCode = async function pressKeyCode (keycode, metastate = null) {\n return await this.bootstrap.sendAction('pressKeyCode', {keycode, metastate});\n};\n\ncommands.longPressKeyCode = async function longPressKeyCode (keycode, metastate = null) {\n return await this.bootstrap.sendAction('longPressKeyCode', {keycode, metastate});\n};\n\ncommands.getOrientation = async function getOrientation () {\n let params = {\n naturalOrientation: !!this.opts.androidNaturalOrientation,\n };\n let orientation = await this.bootstrap.sendAction('orientation', params);\n return orientation.toUpperCase();\n};\n\ncommands.setOrientation = async function setOrientation (orientation) {\n orientation = orientation.toUpperCase();\n let params = {\n orientation,\n naturalOrientation: !!this.opts.androidNaturalOrientation,\n };\n return await this.bootstrap.sendAction('orientation', params);\n};\n\ncommands.fakeFlick = async function fakeFlick (xSpeed, ySpeed) {\n return await this.bootstrap.sendAction('flick', {xSpeed, ySpeed});\n};\n\ncommands.fakeFlickElement = async function fakeFlickElement (elementId, xoffset, yoffset, speed) {\n let params = {xoffset, yoffset, speed, elementId};\n return await this.bootstrap.sendAction('element:flick', params);\n};\n\ncommands.swipe = async function swipe (startX, startY, endX, endY, duration, touchCount, elId) {\n if (startX === 'null') {\n startX = 0.5;\n }\n if (startY === 'null') {\n startY = 0.5;\n }\n let swipeOpts = {startX, startY, endX, endY,\n steps: Math.round(duration * swipeStepsPerSec)};\n // going the long way and checking for undefined and null since\n // we can't be assured `elId` is a string and not an int\n if (util.hasValue(elId)) {\n swipeOpts.elementId = elId;\n }\n return await this.doSwipe(swipeOpts);\n};\n\ncommands.doSwipe = async function doSwipe (swipeOpts) {\n if (util.hasValue(swipeOpts.elementId)) {\n return await this.bootstrap.sendAction('element:swipe', swipeOpts);\n } else {\n return await this.bootstrap.sendAction('swipe', swipeOpts);\n }\n};\n\ncommands.pinchClose = async function pinchClose (startX, startY, endX, endY, duration, percent, steps, elId) {\n let pinchOpts = {\n direction: 'in',\n elementId: elId,\n percent,\n steps\n };\n return await this.bootstrap.sendAction('element:pinch', pinchOpts);\n};\n\ncommands.pinchOpen = async function pinchOpen (startX, startY, endX, endY, duration, percent, steps, elId) {\n let pinchOpts = {direction: 'out', elementId: elId, percent, steps};\n return await this.bootstrap.sendAction('element:pinch', pinchOpts);\n};\n\ncommands.flick = async function flick (element, xSpeed, ySpeed, xOffset, yOffset, speed) {\n if (element) {\n await this.fakeFlickElement(element, xOffset, yOffset, speed);\n } else {\n await this.fakeFlick(xSpeed, ySpeed);\n }\n};\n\ncommands.drag = async function drag (startX, startY, endX, endY, duration, touchCount, elementId, destElId) {\n let dragOpts = {\n elementId, destElId, startX, startY, endX, endY,\n steps: Math.round(duration * dragStepsPerSec)\n };\n return await this.doDrag(dragOpts);\n\n};\n\ncommands.doDrag = async function doDrag (dragOpts) {\n if (util.hasValue(dragOpts.elementId)) {\n return await this.bootstrap.sendAction('element:drag', dragOpts);\n } else {\n return await this.bootstrap.sendAction('drag', dragOpts);\n }\n};\n\ncommands.lock = async function lock (seconds) {\n await this.adb.lock();\n if (isNaN(seconds)) {\n return;\n }\n\n const floatSeconds = parseFloat(seconds);\n if (floatSeconds <= 0) {\n return;\n }\n await B.delay(1000 * floatSeconds);\n await this.unlock();\n};\n\ncommands.isLocked = async function isLocked () {\n return await this.adb.isScreenLocked();\n};\n\ncommands.unlock = async function unlock () {\n return await androidHelpers.unlock(this, this.adb, this.caps);\n};\n\ncommands.openNotifications = async function openNotifications () {\n return await this.bootstrap.sendAction('openNotification');\n};\n\ncommands.setLocation = async function setLocation (latitude, longitude) {\n return await this.adb.sendTelnetCommand(`geo fix ${longitude} ${latitude}`);\n};\n\ncommands.fingerprint = async function fingerprint (fingerprintId) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('fingerprint method is only available for emulators');\n }\n await this.adb.fingerprint(fingerprintId);\n};\n\ncommands.sendSMS = async function sendSMS (phoneNumber, message) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('sendSMS method is only available for emulators');\n }\n await this.adb.sendSMS(phoneNumber, message);\n};\n\ncommands.gsmCall = async function gsmCall (phoneNumber, action) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmCall method is only available for emulators');\n }\n await this.adb.gsmCall(phoneNumber, action);\n};\n\ncommands.gsmSignal = async function gsmSignal (signalStrengh) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmSignal method is only available for emulators');\n }\n await this.adb.gsmSignal(signalStrengh);\n};\n\ncommands.gsmVoice = async function gsmVoice (state) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('gsmVoice method is only available for emulators');\n }\n await this.adb.gsmVoice(state);\n};\n\ncommands.powerAC = async function powerAC (state) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('powerAC method is only available for emulators');\n }\n await this.adb.powerAC(state);\n};\n\ncommands.powerCapacity = async function powerCapacity (batteryPercent) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('powerCapacity method is only available for emulators');\n }\n await this.adb.powerCapacity(batteryPercent);\n};\n\ncommands.networkSpeed = async function networkSpeed (networkSpeed) {\n if (!this.isEmulator()) {\n this.log.errorAndThrow('networkSpeed method is only available for emulators');\n }\n await this.adb.networkSpeed(networkSpeed);\n};\n\n/**\n * Emulate sensors values on the connected emulator.\n *\n * @typedef {Object} Sensor\n * @property {string} sensorType - sensor type declared in adb.SENSORS\n * @property {string} value - value to set to the sensor\n *\n * @param {Object} Sensor\n * @throws {Error} - If sensorType is not defined\n * @throws {Error} - If value for the se sor is not defined\n * @throws {Error} - If deviceType is not an emulator\n */\ncommands.sensorSet = async function sensorSet (sensor = {}) {\n const {sensorType, value} = sensor;\n if (!util.hasValue(sensorType)) {\n this.log.errorAndThrow(`'sensorType' argument is required`);\n }\n if (!util.hasValue(value)) {\n this.log.errorAndThrow(`'value' argument is required`);\n }\n if (!this.isEmulator()) {\n this.log.errorAndThrow('sensorSet method is only available for emulators');\n }\n await this.adb.sensorSet(sensorType, value);\n};\n\nhelpers.getScreenshotDataWithAdbShell = async function getScreenshotDataWithAdbShell (adb, opts) {\n const localFile = await tempDir.path({prefix: 'appium', suffix: '.png'});\n if (await fs.exists(localFile)) {\n await fs.unlink(localFile);\n }\n try {\n const pngDir = opts.androidScreenshotPath || '/data/local/tmp/';\n const png = path.posix.resolve(pngDir, 'screenshot.png');\n const cmd = ['/system/bin/rm', `${png};`, '/system/bin/screencap', '-p', png];\n await adb.shell(cmd);\n if (!await adb.fileSize(png)) {\n throw new Error('The size of the taken screenshot equals to zero.');\n }\n await adb.pull(png, localFile);\n return await jimp.read(localFile);\n } finally {\n if (await fs.exists(localFile)) {\n await fs.unlink(localFile);\n }\n }\n};\n\nhelpers.getScreenshotDataWithAdbExecOut = async function getScreenshotDataWithAdbExecOut (adb) {\n let {stdout, stderr, code} = await exec(adb.executable.path,\n adb.executable.defaultArgs\n .concat(['exec-out', '/system/bin/screencap', '-p']),\n {encoding: 'binary', isBuffer: true});\n // if there is an error, throw\n if (code || stderr.length) {\n throw new Error(`Screenshot returned error, code: '${code}', stderr: '${stderr.toString()}'`);\n }\n // if we don't get anything at all, throw\n if (!stdout.length) {\n throw new Error('Screenshot returned no data');\n }\n\n return await jimp.read(stdout);\n};\n\ncommands.getScreenshot = async function getScreenshot () {\n const apiLevel = await this.adb.getApiLevel();\n let image = null;\n if (apiLevel > 20) {\n try {\n // This screenshoting approach is way faster, since it requires less external commands\n // to be executed. Unfortunately, exec-out option is only supported by newer Android/SDK versions (5.0 and later)\n image = await this.getScreenshotDataWithAdbExecOut(this.adb);\n } catch (e) {\n this.log.info(`Cannot get screenshot data with 'adb exec-out' because of '${e.message}'. ` +\n `Defaulting to 'adb shell' call`);\n }\n }\n if (!image) {\n try {\n image = await this.getScreenshotDataWithAdbShell(this.adb, this.opts);\n } catch (e) {\n const err = `Cannot get screenshot data because of '${e.message}'. ` +\n `Make sure the 'LayoutParams.FLAG_SECURE' is not set for ` +\n `the current view`;\n this.log.errorAndThrow(err);\n }\n }\n if (apiLevel < 23) {\n // Android bug 8433742 - rotate screenshot if screen is rotated\n let screenOrientation = await this.adb.getScreenOrientation();\n try {\n image = await image.rotate(-90 * screenOrientation);\n } catch (err) {\n this.log.warn(`Could not rotate screenshot due to error: ${err}`);\n }\n }\n const getBuffer = B.promisify(image.getBuffer, {context: image});\n const imgBuffer = await getBuffer(jimp.MIME_PNG);\n return imgBuffer.toString('base64');\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
|