@appium/base-driver 8.2.4 → 8.4.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/lib/basedriver/capabilities.d.ts +80 -0
- package/build/lib/basedriver/capabilities.d.ts.map +1 -0
- package/build/lib/basedriver/capabilities.js +12 -13
- package/build/lib/basedriver/commands/event.d.ts +9 -0
- package/build/lib/basedriver/commands/event.d.ts.map +1 -0
- package/build/lib/basedriver/commands/event.js +21 -23
- package/build/lib/basedriver/commands/find.d.ts +11 -0
- package/build/lib/basedriver/commands/find.d.ts.map +1 -0
- package/build/lib/basedriver/commands/find.js +41 -43
- package/build/lib/basedriver/commands/index.d.ts +8 -0
- package/build/lib/basedriver/commands/index.d.ts.map +1 -0
- package/build/lib/basedriver/commands/index.js +17 -16
- package/build/lib/basedriver/commands/log.d.ts +12 -0
- package/build/lib/basedriver/commands/log.d.ts.map +1 -0
- package/build/lib/basedriver/commands/log.js +23 -30
- package/build/lib/basedriver/commands/session.d.ts +11 -0
- package/build/lib/basedriver/commands/session.d.ts.map +1 -0
- package/build/lib/basedriver/commands/session.js +21 -158
- package/build/lib/basedriver/commands/settings.d.ts +10 -0
- package/build/lib/basedriver/commands/settings.d.ts.map +1 -0
- package/build/lib/basedriver/commands/settings.js +18 -22
- package/build/lib/basedriver/commands/timeout.d.ts +8 -0
- package/build/lib/basedriver/commands/timeout.d.ts.map +1 -0
- package/build/lib/basedriver/commands/timeout.js +118 -144
- package/build/lib/basedriver/core.d.ts +235 -0
- package/build/lib/basedriver/core.d.ts.map +1 -0
- package/build/lib/basedriver/core.js +283 -0
- package/build/lib/basedriver/desired-caps.d.ts +5 -0
- package/build/lib/basedriver/desired-caps.d.ts.map +1 -0
- package/build/lib/basedriver/desired-caps.js +2 -4
- package/build/lib/basedriver/device-settings.d.ts +32 -0
- package/build/lib/basedriver/device-settings.d.ts.map +1 -0
- package/build/lib/basedriver/device-settings.js +33 -15
- package/build/lib/basedriver/driver.d.ts +83 -0
- package/build/lib/basedriver/driver.d.ts.map +1 -0
- package/build/lib/basedriver/driver.js +104 -257
- package/build/lib/basedriver/helpers.d.ts +132 -0
- package/build/lib/basedriver/helpers.d.ts.map +1 -0
- package/build/lib/basedriver/helpers.js +24 -10
- package/build/lib/basedriver/logger.d.ts +3 -0
- package/build/lib/basedriver/logger.d.ts.map +1 -0
- package/build/lib/basedriver/logger.js +2 -4
- package/build/lib/constants.d.ts +9 -0
- package/build/lib/constants.d.ts.map +1 -0
- package/build/lib/constants.js +2 -4
- package/build/lib/express/crash.d.ts +3 -0
- package/build/lib/express/crash.d.ts.map +1 -0
- package/build/lib/express/crash.js +2 -4
- package/build/lib/express/express-logging.d.ts +3 -0
- package/build/lib/express/express-logging.d.ts.map +1 -0
- package/build/lib/express/express-logging.js +3 -5
- package/build/lib/express/idempotency.d.ts +2 -0
- package/build/lib/express/idempotency.d.ts.map +1 -0
- package/build/lib/express/idempotency.js +3 -5
- package/build/lib/express/logger.d.ts +3 -0
- package/build/lib/express/logger.d.ts.map +1 -0
- package/build/lib/express/logger.js +2 -4
- package/build/lib/express/middleware.d.ts +9 -0
- package/build/lib/express/middleware.d.ts.map +1 -0
- package/build/lib/express/middleware.js +2 -4
- package/build/lib/express/server.d.ts +10 -0
- package/build/lib/express/server.d.ts.map +1 -0
- package/build/lib/express/server.js +2 -4
- package/build/lib/express/static.d.ts +6 -0
- package/build/lib/express/static.d.ts.map +1 -0
- package/build/lib/express/static.js +2 -4
- package/build/lib/express/websocket.d.ts +64 -0
- package/build/lib/express/websocket.d.ts.map +1 -0
- package/build/lib/express/websocket.js +2 -4
- package/build/lib/helpers/capabilities.d.ts +13 -0
- package/build/lib/helpers/capabilities.d.ts.map +1 -0
- package/build/lib/helpers/capabilities.js +77 -0
- package/build/lib/index.d.ts +183 -0
- package/build/lib/index.d.ts.map +1 -0
- package/build/lib/index.js +41 -25
- package/build/lib/jsonwp-proxy/protocol-converter.d.ts +48 -0
- package/build/lib/jsonwp-proxy/protocol-converter.d.ts.map +1 -0
- package/build/lib/jsonwp-proxy/protocol-converter.js +19 -15
- package/build/lib/jsonwp-proxy/proxy.d.ts +41 -0
- package/build/lib/jsonwp-proxy/proxy.d.ts.map +1 -0
- package/build/lib/jsonwp-proxy/proxy.js +20 -15
- package/build/lib/jsonwp-status/status.d.ts +159 -0
- package/build/lib/jsonwp-status/status.d.ts.map +1 -0
- package/build/lib/jsonwp-status/status.js +2 -4
- package/build/lib/protocol/errors.d.ts +310 -0
- package/build/lib/protocol/errors.d.ts.map +1 -0
- package/build/lib/protocol/errors.js +82 -5
- package/build/lib/protocol/helpers.d.ts +22 -0
- package/build/lib/protocol/helpers.d.ts.map +1 -0
- package/build/lib/protocol/helpers.js +2 -4
- package/build/lib/protocol/index.d.ts +16 -0
- package/build/lib/protocol/index.d.ts.map +1 -0
- package/build/lib/protocol/index.js +8 -10
- package/build/lib/protocol/protocol.d.ts +11 -0
- package/build/lib/protocol/protocol.d.ts.map +1 -0
- package/build/lib/protocol/protocol.js +38 -35
- package/build/lib/protocol/routes.d.ts +6 -0
- package/build/lib/protocol/routes.d.ts.map +1 -0
- package/build/lib/protocol/routes.js +84 -4
- package/build/lib/protocol/validators.d.ts +8 -0
- package/build/lib/protocol/validators.d.ts.map +1 -0
- package/build/lib/protocol/validators.js +2 -4
- package/build/test/basedriver/README.md +5 -0
- package/build/test/basedriver/driver-e2e-tests.js +2 -4
- package/build/test/basedriver/driver-tests.js +41 -19
- package/build/test/basedriver/index.js +2 -4
- package/build/test/e2e/basedriver/driver.e2e.spec.js +15 -0
- package/build/test/e2e/basedriver/helpers.e2e.spec.js +192 -0
- package/build/test/e2e/basedriver/websockets.e2e.spec.js +82 -0
- package/build/test/e2e/express/server.e2e.spec.js +159 -0
- package/build/test/e2e/jsonwp-proxy/proxy.e2e.spec.js +59 -0
- package/build/test/e2e/protocol/fake-driver.js +163 -0
- package/build/test/e2e/protocol/helpers.js +25 -0
- package/build/test/e2e/protocol/protocol.e2e.spec.js +1186 -0
- package/build/test/helpers.js +2 -4
- package/build/test/unit/basedriver/capabilities.spec.js +672 -0
- package/build/test/unit/basedriver/capability.spec.js +353 -0
- package/build/test/unit/basedriver/commands/event.spec.js +110 -0
- package/build/test/unit/basedriver/commands/log.spec.js +92 -0
- package/build/test/unit/basedriver/driver.spec.js +15 -0
- package/build/test/unit/basedriver/helpers.spec.js +151 -0
- package/build/test/unit/basedriver/timeout.spec.js +135 -0
- package/build/test/unit/express/server.spec.js +155 -0
- package/build/test/unit/express/static.spec.js +26 -0
- package/build/test/unit/jsonwp-proxy/mock-request.js +91 -0
- package/build/test/unit/jsonwp-proxy/protocol-converter.spec.js +171 -0
- package/build/test/unit/jsonwp-proxy/proxy.spec.js +292 -0
- package/build/test/unit/jsonwp-proxy/url.spec.js +165 -0
- package/build/test/unit/jsonwp-status/status.spec.js +34 -0
- package/build/test/unit/protocol/errors.spec.js +390 -0
- package/build/test/unit/protocol/routes.spec.js +80 -0
- package/build/test/unit/protocol/validator.spec.js +149 -0
- package/build/tsconfig.tsbuildinfo +1 -0
- package/lib/basedriver/capabilities.js +49 -10
- package/lib/basedriver/commands/event.js +49 -31
- package/lib/basedriver/commands/find.js +107 -45
- package/lib/basedriver/commands/index.js +25 -19
- package/lib/basedriver/commands/log.js +59 -34
- package/lib/basedriver/commands/session.js +39 -142
- package/lib/basedriver/commands/settings.js +32 -14
- package/lib/basedriver/commands/timeout.js +153 -154
- package/lib/basedriver/core.js +497 -0
- package/lib/basedriver/desired-caps.js +1 -1
- package/lib/basedriver/device-settings.js +57 -13
- package/lib/basedriver/driver.js +277 -375
- package/lib/basedriver/helpers.js +31 -13
- package/lib/express/express-logging.js +1 -1
- package/lib/express/idempotency.js +1 -1
- package/lib/helpers/capabilities.js +84 -0
- package/lib/index.js +17 -13
- package/lib/jsonwp-proxy/protocol-converter.js +14 -13
- package/lib/jsonwp-proxy/proxy.js +16 -12
- package/lib/protocol/errors.js +42 -42
- package/lib/protocol/index.js +4 -4
- package/lib/protocol/protocol.js +35 -32
- package/lib/protocol/routes.js +69 -1
- package/package.json +37 -24
- package/test/basedriver/README.md +5 -0
- package/test/basedriver/driver-e2e-tests.js +1 -1
- package/test/basedriver/driver-tests.js +43 -9
- package/build/lib/protocol/sessions-cache.js +0 -88
- package/build/test/basedriver/capabilities-specs.js +0 -632
- package/build/test/basedriver/capability-specs.js +0 -396
- package/build/test/basedriver/commands/event-specs.js +0 -112
- package/build/test/basedriver/commands/log-specs.js +0 -80
- package/build/test/basedriver/driver-e2e-specs.js +0 -17
- package/build/test/basedriver/driver-specs.js +0 -17
- package/build/test/basedriver/helpers-e2e-specs.js +0 -194
- package/build/test/basedriver/helpers-specs.js +0 -153
- package/build/test/basedriver/timeout-specs.js +0 -139
- package/build/test/basedriver/websockets-e2e-specs.js +0 -84
- package/build/test/express/server-e2e-specs.js +0 -156
- package/build/test/express/server-specs.js +0 -151
- package/build/test/express/static-specs.js +0 -23
- package/build/test/jsonwp-proxy/mock-request.js +0 -93
- package/build/test/jsonwp-proxy/protocol-converter-specs.js +0 -173
- package/build/test/jsonwp-proxy/proxy-e2e-specs.js +0 -61
- package/build/test/jsonwp-proxy/proxy-specs.js +0 -294
- package/build/test/jsonwp-proxy/url-specs.js +0 -167
- package/build/test/jsonwp-status/status-specs.js +0 -36
- package/build/test/protocol/errors-specs.js +0 -388
- package/build/test/protocol/fake-driver.js +0 -168
- package/build/test/protocol/helpers.js +0 -27
- package/build/test/protocol/protocol-e2e-specs.js +0 -1182
- package/build/test/protocol/routes-specs.js +0 -82
- package/build/test/protocol/validator-specs.js +0 -151
- package/index.d.ts +0 -386
- package/lib/protocol/sessions-cache.js +0 -74
- package/test/basedriver/capabilities-specs.js +0 -505
- package/test/basedriver/capability-specs.js +0 -409
- package/test/basedriver/commands/event-specs.js +0 -74
- package/test/basedriver/commands/log-specs.js +0 -70
- package/test/basedriver/driver-e2e-specs.js +0 -8
- package/test/basedriver/driver-specs.js +0 -8
- package/test/basedriver/fixtures/BadZippedApp.zip +0 -1
- package/test/basedriver/fixtures/FakeAndroidApp.apk +0 -1
- package/test/basedriver/fixtures/FakeAndroidApp.asd +0 -0
- package/test/basedriver/fixtures/FakeIOSApp.app +0 -1
- package/test/basedriver/fixtures/FakeIOSApp.app.zip +0 -0
- package/test/basedriver/fixtures/FakeIOSApp.ipa +0 -0
- package/test/basedriver/fixtures/custom-element-finder-bad.js +0 -5
- package/test/basedriver/fixtures/custom-element-finder.js +0 -29
- package/test/basedriver/helpers-e2e-specs.js +0 -187
- package/test/basedriver/helpers-specs.js +0 -137
- package/test/basedriver/timeout-specs.js +0 -133
- package/test/basedriver/websockets-e2e-specs.js +0 -75
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.ProtocolError = void 0;
|
|
8
|
+
exports.XPathLookupError = exports.UnsupportedOperationError = exports.UnknownMethodError = exports.UnknownError = exports.UnknownCommandError = exports.UnexpectedAlertOpenError = exports.UnableToSetCookieError = exports.UnableToCaptureScreen = exports.TimeoutError = exports.StaleElementReferenceError = exports.SessionNotCreatedError = exports.ScriptTimeoutError = exports.ProxyRequestError = exports.ProtocolError = exports.NotYetImplementedError = exports.NotImplementedError = exports.NoSuchWindowError = exports.NoSuchFrameError = exports.NoSuchElementError = exports.NoSuchDriverError = exports.NoSuchCookieError = exports.NoSuchContextError = exports.NoSuchAlertError = exports.NoAlertOpenError = exports.MoveTargetOutOfBoundsError = exports.JavaScriptError = exports.InvalidSelectorError = exports.InvalidElementStateError = exports.InvalidElementCoordinatesError = exports.InvalidCoordinatesError = exports.InvalidCookieDomainError = exports.InvalidContextError = exports.InvalidArgumentError = exports.InsecureCertificateError = exports.IMENotAvailableError = exports.IMEEngineActivationFailedError = exports.ElementNotVisibleError = exports.ElementNotInteractableError = exports.ElementIsNotSelectableError = exports.ElementClickInterceptedError = exports.BadParametersError = void 0;
|
|
9
9
|
exports.errorFromMJSONWPStatusCode = errorFromMJSONWPStatusCode;
|
|
10
10
|
exports.errorFromW3CJsonCode = errorFromW3CJsonCode;
|
|
11
11
|
exports.errors = void 0;
|
|
@@ -75,6 +75,8 @@ class NoSuchDriverError extends ProtocolError {
|
|
|
75
75
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
+
exports.NoSuchDriverError = NoSuchDriverError;
|
|
79
|
+
|
|
78
80
|
class NoSuchElementError extends ProtocolError {
|
|
79
81
|
static code() {
|
|
80
82
|
return 7;
|
|
@@ -94,6 +96,8 @@ class NoSuchElementError extends ProtocolError {
|
|
|
94
96
|
|
|
95
97
|
}
|
|
96
98
|
|
|
99
|
+
exports.NoSuchElementError = NoSuchElementError;
|
|
100
|
+
|
|
97
101
|
class NoSuchFrameError extends ProtocolError {
|
|
98
102
|
static code() {
|
|
99
103
|
return 8;
|
|
@@ -113,6 +117,8 @@ class NoSuchFrameError extends ProtocolError {
|
|
|
113
117
|
|
|
114
118
|
}
|
|
115
119
|
|
|
120
|
+
exports.NoSuchFrameError = NoSuchFrameError;
|
|
121
|
+
|
|
116
122
|
class UnknownCommandError extends ProtocolError {
|
|
117
123
|
static code() {
|
|
118
124
|
return 9;
|
|
@@ -132,6 +138,8 @@ class UnknownCommandError extends ProtocolError {
|
|
|
132
138
|
|
|
133
139
|
}
|
|
134
140
|
|
|
141
|
+
exports.UnknownCommandError = UnknownCommandError;
|
|
142
|
+
|
|
135
143
|
class StaleElementReferenceError extends ProtocolError {
|
|
136
144
|
static code() {
|
|
137
145
|
return 10;
|
|
@@ -151,6 +159,8 @@ class StaleElementReferenceError extends ProtocolError {
|
|
|
151
159
|
|
|
152
160
|
}
|
|
153
161
|
|
|
162
|
+
exports.StaleElementReferenceError = StaleElementReferenceError;
|
|
163
|
+
|
|
154
164
|
class ElementNotVisibleError extends ProtocolError {
|
|
155
165
|
static code() {
|
|
156
166
|
return 11;
|
|
@@ -170,6 +180,8 @@ class ElementNotVisibleError extends ProtocolError {
|
|
|
170
180
|
|
|
171
181
|
}
|
|
172
182
|
|
|
183
|
+
exports.ElementNotVisibleError = ElementNotVisibleError;
|
|
184
|
+
|
|
173
185
|
class InvalidElementStateError extends ProtocolError {
|
|
174
186
|
static code() {
|
|
175
187
|
return 12;
|
|
@@ -189,6 +201,8 @@ class InvalidElementStateError extends ProtocolError {
|
|
|
189
201
|
|
|
190
202
|
}
|
|
191
203
|
|
|
204
|
+
exports.InvalidElementStateError = InvalidElementStateError;
|
|
205
|
+
|
|
192
206
|
class UnknownError extends ProtocolError {
|
|
193
207
|
static code() {
|
|
194
208
|
return 13;
|
|
@@ -210,6 +224,8 @@ class UnknownError extends ProtocolError {
|
|
|
210
224
|
|
|
211
225
|
}
|
|
212
226
|
|
|
227
|
+
exports.UnknownError = UnknownError;
|
|
228
|
+
|
|
213
229
|
class UnknownMethodError extends ProtocolError {
|
|
214
230
|
static code() {
|
|
215
231
|
return 405;
|
|
@@ -229,6 +245,8 @@ class UnknownMethodError extends ProtocolError {
|
|
|
229
245
|
|
|
230
246
|
}
|
|
231
247
|
|
|
248
|
+
exports.UnknownMethodError = UnknownMethodError;
|
|
249
|
+
|
|
232
250
|
class UnsupportedOperationError extends ProtocolError {
|
|
233
251
|
static code() {
|
|
234
252
|
return 405;
|
|
@@ -248,6 +266,8 @@ class UnsupportedOperationError extends ProtocolError {
|
|
|
248
266
|
|
|
249
267
|
}
|
|
250
268
|
|
|
269
|
+
exports.UnsupportedOperationError = UnsupportedOperationError;
|
|
270
|
+
|
|
251
271
|
class ElementIsNotSelectableError extends ProtocolError {
|
|
252
272
|
static code() {
|
|
253
273
|
return 15;
|
|
@@ -267,6 +287,8 @@ class ElementIsNotSelectableError extends ProtocolError {
|
|
|
267
287
|
|
|
268
288
|
}
|
|
269
289
|
|
|
290
|
+
exports.ElementIsNotSelectableError = ElementIsNotSelectableError;
|
|
291
|
+
|
|
270
292
|
class ElementClickInterceptedError extends ProtocolError {
|
|
271
293
|
static code() {
|
|
272
294
|
return 64;
|
|
@@ -286,6 +308,8 @@ class ElementClickInterceptedError extends ProtocolError {
|
|
|
286
308
|
|
|
287
309
|
}
|
|
288
310
|
|
|
311
|
+
exports.ElementClickInterceptedError = ElementClickInterceptedError;
|
|
312
|
+
|
|
289
313
|
class ElementNotInteractableError extends ProtocolError {
|
|
290
314
|
static code() {
|
|
291
315
|
return 60;
|
|
@@ -305,6 +329,8 @@ class ElementNotInteractableError extends ProtocolError {
|
|
|
305
329
|
|
|
306
330
|
}
|
|
307
331
|
|
|
332
|
+
exports.ElementNotInteractableError = ElementNotInteractableError;
|
|
333
|
+
|
|
308
334
|
class InsecureCertificateError extends ProtocolError {
|
|
309
335
|
static error() {
|
|
310
336
|
return 'insecure certificate';
|
|
@@ -316,6 +342,8 @@ class InsecureCertificateError extends ProtocolError {
|
|
|
316
342
|
|
|
317
343
|
}
|
|
318
344
|
|
|
345
|
+
exports.InsecureCertificateError = InsecureCertificateError;
|
|
346
|
+
|
|
319
347
|
class JavaScriptError extends ProtocolError {
|
|
320
348
|
static code() {
|
|
321
349
|
return 17;
|
|
@@ -335,6 +363,8 @@ class JavaScriptError extends ProtocolError {
|
|
|
335
363
|
|
|
336
364
|
}
|
|
337
365
|
|
|
366
|
+
exports.JavaScriptError = JavaScriptError;
|
|
367
|
+
|
|
338
368
|
class XPathLookupError extends ProtocolError {
|
|
339
369
|
static code() {
|
|
340
370
|
return 19;
|
|
@@ -354,6 +384,8 @@ class XPathLookupError extends ProtocolError {
|
|
|
354
384
|
|
|
355
385
|
}
|
|
356
386
|
|
|
387
|
+
exports.XPathLookupError = XPathLookupError;
|
|
388
|
+
|
|
357
389
|
class TimeoutError extends ProtocolError {
|
|
358
390
|
static code() {
|
|
359
391
|
return 21;
|
|
@@ -373,6 +405,8 @@ class TimeoutError extends ProtocolError {
|
|
|
373
405
|
|
|
374
406
|
}
|
|
375
407
|
|
|
408
|
+
exports.TimeoutError = TimeoutError;
|
|
409
|
+
|
|
376
410
|
class NoSuchWindowError extends ProtocolError {
|
|
377
411
|
static code() {
|
|
378
412
|
return 23;
|
|
@@ -392,6 +426,8 @@ class NoSuchWindowError extends ProtocolError {
|
|
|
392
426
|
|
|
393
427
|
}
|
|
394
428
|
|
|
429
|
+
exports.NoSuchWindowError = NoSuchWindowError;
|
|
430
|
+
|
|
395
431
|
class InvalidArgumentError extends ProtocolError {
|
|
396
432
|
static code() {
|
|
397
433
|
return 61;
|
|
@@ -411,6 +447,8 @@ class InvalidArgumentError extends ProtocolError {
|
|
|
411
447
|
|
|
412
448
|
}
|
|
413
449
|
|
|
450
|
+
exports.InvalidArgumentError = InvalidArgumentError;
|
|
451
|
+
|
|
414
452
|
class InvalidCookieDomainError extends ProtocolError {
|
|
415
453
|
static code() {
|
|
416
454
|
return 24;
|
|
@@ -430,6 +468,8 @@ class InvalidCookieDomainError extends ProtocolError {
|
|
|
430
468
|
|
|
431
469
|
}
|
|
432
470
|
|
|
471
|
+
exports.InvalidCookieDomainError = InvalidCookieDomainError;
|
|
472
|
+
|
|
433
473
|
class NoSuchCookieError extends ProtocolError {
|
|
434
474
|
static code() {
|
|
435
475
|
return 62;
|
|
@@ -449,6 +489,8 @@ class NoSuchCookieError extends ProtocolError {
|
|
|
449
489
|
|
|
450
490
|
}
|
|
451
491
|
|
|
492
|
+
exports.NoSuchCookieError = NoSuchCookieError;
|
|
493
|
+
|
|
452
494
|
class UnableToSetCookieError extends ProtocolError {
|
|
453
495
|
static code() {
|
|
454
496
|
return 25;
|
|
@@ -468,6 +510,8 @@ class UnableToSetCookieError extends ProtocolError {
|
|
|
468
510
|
|
|
469
511
|
}
|
|
470
512
|
|
|
513
|
+
exports.UnableToSetCookieError = UnableToSetCookieError;
|
|
514
|
+
|
|
471
515
|
class UnexpectedAlertOpenError extends ProtocolError {
|
|
472
516
|
static code() {
|
|
473
517
|
return 26;
|
|
@@ -487,6 +531,8 @@ class UnexpectedAlertOpenError extends ProtocolError {
|
|
|
487
531
|
|
|
488
532
|
}
|
|
489
533
|
|
|
534
|
+
exports.UnexpectedAlertOpenError = UnexpectedAlertOpenError;
|
|
535
|
+
|
|
490
536
|
class NoAlertOpenError extends ProtocolError {
|
|
491
537
|
static code() {
|
|
492
538
|
return 27;
|
|
@@ -506,8 +552,12 @@ class NoAlertOpenError extends ProtocolError {
|
|
|
506
552
|
|
|
507
553
|
}
|
|
508
554
|
|
|
555
|
+
exports.NoAlertOpenError = NoAlertOpenError;
|
|
556
|
+
|
|
509
557
|
class NoSuchAlertError extends NoAlertOpenError {}
|
|
510
558
|
|
|
559
|
+
exports.NoSuchAlertError = NoSuchAlertError;
|
|
560
|
+
|
|
511
561
|
class ScriptTimeoutError extends ProtocolError {
|
|
512
562
|
static code() {
|
|
513
563
|
return 28;
|
|
@@ -527,6 +577,8 @@ class ScriptTimeoutError extends ProtocolError {
|
|
|
527
577
|
|
|
528
578
|
}
|
|
529
579
|
|
|
580
|
+
exports.ScriptTimeoutError = ScriptTimeoutError;
|
|
581
|
+
|
|
530
582
|
class InvalidElementCoordinatesError extends ProtocolError {
|
|
531
583
|
static code() {
|
|
532
584
|
return 29;
|
|
@@ -546,8 +598,12 @@ class InvalidElementCoordinatesError extends ProtocolError {
|
|
|
546
598
|
|
|
547
599
|
}
|
|
548
600
|
|
|
601
|
+
exports.InvalidElementCoordinatesError = InvalidElementCoordinatesError;
|
|
602
|
+
|
|
549
603
|
class InvalidCoordinatesError extends InvalidElementCoordinatesError {}
|
|
550
604
|
|
|
605
|
+
exports.InvalidCoordinatesError = InvalidCoordinatesError;
|
|
606
|
+
|
|
551
607
|
class IMENotAvailableError extends ProtocolError {
|
|
552
608
|
static code() {
|
|
553
609
|
return 30;
|
|
@@ -567,6 +623,8 @@ class IMENotAvailableError extends ProtocolError {
|
|
|
567
623
|
|
|
568
624
|
}
|
|
569
625
|
|
|
626
|
+
exports.IMENotAvailableError = IMENotAvailableError;
|
|
627
|
+
|
|
570
628
|
class IMEEngineActivationFailedError extends ProtocolError {
|
|
571
629
|
static code() {
|
|
572
630
|
return 31;
|
|
@@ -586,6 +644,8 @@ class IMEEngineActivationFailedError extends ProtocolError {
|
|
|
586
644
|
|
|
587
645
|
}
|
|
588
646
|
|
|
647
|
+
exports.IMEEngineActivationFailedError = IMEEngineActivationFailedError;
|
|
648
|
+
|
|
589
649
|
class InvalidSelectorError extends ProtocolError {
|
|
590
650
|
static code() {
|
|
591
651
|
return 32;
|
|
@@ -605,6 +665,8 @@ class InvalidSelectorError extends ProtocolError {
|
|
|
605
665
|
|
|
606
666
|
}
|
|
607
667
|
|
|
668
|
+
exports.InvalidSelectorError = InvalidSelectorError;
|
|
669
|
+
|
|
608
670
|
class SessionNotCreatedError extends ProtocolError {
|
|
609
671
|
static code() {
|
|
610
672
|
return 33;
|
|
@@ -630,6 +692,8 @@ class SessionNotCreatedError extends ProtocolError {
|
|
|
630
692
|
|
|
631
693
|
}
|
|
632
694
|
|
|
695
|
+
exports.SessionNotCreatedError = SessionNotCreatedError;
|
|
696
|
+
|
|
633
697
|
class MoveTargetOutOfBoundsError extends ProtocolError {
|
|
634
698
|
static code() {
|
|
635
699
|
return 34;
|
|
@@ -649,6 +713,8 @@ class MoveTargetOutOfBoundsError extends ProtocolError {
|
|
|
649
713
|
|
|
650
714
|
}
|
|
651
715
|
|
|
716
|
+
exports.MoveTargetOutOfBoundsError = MoveTargetOutOfBoundsError;
|
|
717
|
+
|
|
652
718
|
class NoSuchContextError extends ProtocolError {
|
|
653
719
|
static code() {
|
|
654
720
|
return 35;
|
|
@@ -660,6 +726,8 @@ class NoSuchContextError extends ProtocolError {
|
|
|
660
726
|
|
|
661
727
|
}
|
|
662
728
|
|
|
729
|
+
exports.NoSuchContextError = NoSuchContextError;
|
|
730
|
+
|
|
663
731
|
class InvalidContextError extends ProtocolError {
|
|
664
732
|
static code() {
|
|
665
733
|
return 36;
|
|
@@ -671,6 +739,8 @@ class InvalidContextError extends ProtocolError {
|
|
|
671
739
|
|
|
672
740
|
}
|
|
673
741
|
|
|
742
|
+
exports.InvalidContextError = InvalidContextError;
|
|
743
|
+
|
|
674
744
|
class NotYetImplementedError extends UnknownMethodError {
|
|
675
745
|
constructor(err) {
|
|
676
746
|
super(err || 'Method has not yet been implemented');
|
|
@@ -678,6 +748,8 @@ class NotYetImplementedError extends UnknownMethodError {
|
|
|
678
748
|
|
|
679
749
|
}
|
|
680
750
|
|
|
751
|
+
exports.NotYetImplementedError = NotYetImplementedError;
|
|
752
|
+
|
|
681
753
|
class NotImplementedError extends UnknownMethodError {
|
|
682
754
|
constructor(err) {
|
|
683
755
|
super(err || 'Method is not implemented');
|
|
@@ -685,6 +757,8 @@ class NotImplementedError extends UnknownMethodError {
|
|
|
685
757
|
|
|
686
758
|
}
|
|
687
759
|
|
|
760
|
+
exports.NotImplementedError = NotImplementedError;
|
|
761
|
+
|
|
688
762
|
class UnableToCaptureScreen extends ProtocolError {
|
|
689
763
|
static code() {
|
|
690
764
|
return 63;
|
|
@@ -704,6 +778,8 @@ class UnableToCaptureScreen extends ProtocolError {
|
|
|
704
778
|
|
|
705
779
|
}
|
|
706
780
|
|
|
781
|
+
exports.UnableToCaptureScreen = UnableToCaptureScreen;
|
|
782
|
+
|
|
707
783
|
class BadParametersError extends _es6Error.default {
|
|
708
784
|
static error() {
|
|
709
785
|
return 'invalid argument';
|
|
@@ -724,6 +800,8 @@ class BadParametersError extends _es6Error.default {
|
|
|
724
800
|
|
|
725
801
|
}
|
|
726
802
|
|
|
803
|
+
exports.BadParametersError = BadParametersError;
|
|
804
|
+
|
|
727
805
|
class ProxyRequestError extends _es6Error.default {
|
|
728
806
|
constructor(err, responseError, httpStatus) {
|
|
729
807
|
let responseErrorObj = _support.util.safeJsonParse(responseError);
|
|
@@ -767,6 +845,7 @@ class ProxyRequestError extends _es6Error.default {
|
|
|
767
845
|
|
|
768
846
|
}
|
|
769
847
|
|
|
848
|
+
exports.ProxyRequestError = ProxyRequestError;
|
|
770
849
|
const errors = {
|
|
771
850
|
NotYetImplementedError,
|
|
772
851
|
NotImplementedError,
|
|
@@ -931,7 +1010,5 @@ function getResponseForJsonwpError(err) {
|
|
|
931
1010
|
}
|
|
932
1011
|
|
|
933
1012
|
return [httpStatus, httpResBody];
|
|
934
|
-
}
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9wcm90b2NvbC9lcnJvcnMuanMiXSwibmFtZXMiOlsibWpzb253cExvZyIsImxvZ2dlciIsImdldExvZ2dlciIsInczY0xvZyIsIlczQ19VTktOT1dOX0VSUk9SIiwiUHJvdG9jb2xFcnJvciIsIkVTNkVycm9yIiwiY29uc3RydWN0b3IiLCJtc2ciLCJqc29ud3BDb2RlIiwidzNjU3RhdHVzIiwiZXJyb3IiLCJIVFRQU3RhdHVzQ29kZXMiLCJCQURfUkVRVUVTVCIsIl9zdGFja3RyYWNlIiwic3RhY2t0cmFjZSIsInN0YWNrIiwidmFsdWUiLCJOb1N1Y2hEcml2ZXJFcnJvciIsImNvZGUiLCJOT1RfRk9VTkQiLCJlcnIiLCJOb1N1Y2hFbGVtZW50RXJyb3IiLCJOb1N1Y2hGcmFtZUVycm9yIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yIiwiRWxlbWVudE5vdFZpc2libGVFcnJvciIsIkludmFsaWRFbGVtZW50U3RhdGVFcnJvciIsIlVua25vd25FcnJvciIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsImVycm9yT3JNZXNzYWdlIiwib3JpZ01lc3NhZ2UiLCJfIiwiaXNTdHJpbmciLCJtZXNzYWdlIiwiVW5rbm93bk1ldGhvZEVycm9yIiwiTUVUSE9EX05PVF9BTExPV0VEIiwiVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciIsIkVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvciIsIkVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IiLCJFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IiLCJJbnNlY3VyZUNlcnRpZmljYXRlRXJyb3IiLCJKYXZhU2NyaXB0RXJyb3IiLCJYUGF0aExvb2t1cEVycm9yIiwiVGltZW91dEVycm9yIiwiUkVRVUVTVF9USU1FT1VUIiwiTm9TdWNoV2luZG93RXJyb3IiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIkludmFsaWRDb29raWVEb21haW5FcnJvciIsIk5vU3VjaENvb2tpZUVycm9yIiwiVW5hYmxlVG9TZXRDb29raWVFcnJvciIsIlVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvciIsIk5vQWxlcnRPcGVuRXJyb3IiLCJOb1N1Y2hBbGVydEVycm9yIiwiU2NyaXB0VGltZW91dEVycm9yIiwiSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yIiwiSW52YWxpZENvb3JkaW5hdGVzRXJyb3IiLCJJTUVOb3RBdmFpbGFibGVFcnJvciIsIklNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvciIsIkludmFsaWRTZWxlY3RvckVycm9yIiwiU2Vzc2lvbk5vdENyZWF0ZWRFcnJvciIsImRldGFpbHMiLCJNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvciIsIk5vU3VjaENvbnRleHRFcnJvciIsIkludmFsaWRDb250ZXh0RXJyb3IiLCJOb3RZZXRJbXBsZW1lbnRlZEVycm9yIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsIlVuYWJsZVRvQ2FwdHVyZVNjcmVlbiIsIkJhZFBhcmFtZXRlcnNFcnJvciIsInJlcXVpcmVkUGFyYW1zIiwiYWN0dWFsUGFyYW1zIiwiZXJyTWVzc2FnZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJQcm94eVJlcXVlc3RFcnJvciIsInJlc3BvbnNlRXJyb3IiLCJodHRwU3RhdHVzIiwicmVzcG9uc2VFcnJvck9iaiIsInV0aWwiLCJzYWZlSnNvblBhcnNlIiwiaXNQbGFpbk9iamVjdCIsImlzRW1wdHkiLCJoYXMiLCJ3M2MiLCJqc29ud3AiLCJnZXRBY3R1YWxFcnJvciIsImhhc1ZhbHVlIiwic3RhdHVzIiwiZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUiLCJpc051bWJlciIsImVycm9yRnJvbVczQ0pzb25Db2RlIiwiZXJyb3JzIiwianNvbndwRXJyb3JDb2RlTWFwIiwiRXJyb3JDbGFzcyIsInZhbHVlcyIsInczY0Vycm9yQ29kZU1hcCIsImlzVW5rbm93bkVycm9yIiwibmFtZSIsImZpbmQiLCJlcXVhbE5hbWVzIiwiaXNFcnJvclR5cGUiLCJ0eXBlIiwiZGVidWciLCJ0b0xvd2VyQ2FzZSIsInJlc3VsdEVycm9yIiwiZ2V0UmVzcG9uc2VGb3JXM0NFcnJvciIsInczY0Vycm9yU3RyaW5nIiwiaHR0cFJlc0JvZHkiLCJnZXRSZXNwb25zZUZvckpzb253cEVycm9yIiwiTk9UX0lNUExFTUVOVEVEIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLFNBQWpCLENBQW5COztBQUNBLE1BQU1DLE1BQU0sR0FBR0YsZ0JBQU9DLFNBQVAsQ0FBaUIsS0FBakIsQ0FBZjs7QUFFQSxNQUFNRSxpQkFBaUIsR0FBRyxlQUExQjs7QUFHQSxNQUFNQyxhQUFOLFNBQTRCQyxpQkFBNUIsQ0FBcUM7QUFDbkNDLEVBQUFBLFdBQVcsQ0FBRUMsR0FBRixFQUFPQyxVQUFQLEVBQW1CQyxTQUFuQixFQUE4QkMsS0FBOUIsRUFBcUM7QUFDOUMsVUFBTUgsR0FBTjtBQUNBLFNBQUtDLFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0EsU0FBS0UsS0FBTCxHQUFhQSxLQUFLLElBQUlQLGlCQUF0Qjs7QUFDQSxRQUFJLEtBQUtLLFVBQUwsS0FBb0IsSUFBeEIsRUFBOEI7QUFDNUIsV0FBS0EsVUFBTCxHQUFrQixFQUFsQjtBQUNEOztBQUNELFNBQUtDLFNBQUwsR0FBaUJBLFNBQVMsSUFBSUUsNkJBQWdCQyxXQUE5QztBQUNBLFNBQUtDLFdBQUwsR0FBbUIsSUFBbkI7QUFDRDs7QUFFYSxNQUFWQyxVQUFVLEdBQUk7QUFDaEIsV0FBTyxLQUFLRCxXQUFMLElBQW9CLEtBQUtFLEtBQWhDO0FBQ0Q7O0FBRWEsTUFBVkQsVUFBVSxDQUFFRSxLQUFGLEVBQVM7QUFDckIsU0FBS0gsV0FBTCxHQUFtQkcsS0FBbkI7QUFDRDs7QUFsQmtDOzs7O0FBeUJyQyxNQUFNQyxpQkFBTixTQUFnQ2IsYUFBaEMsQ0FBOEM7QUFDakMsU0FBSmMsSUFBSSxHQUFJO0FBQ2IsV0FBTyxDQUFQO0FBQ0Q7O0FB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N0I7QUFDRCxHQUpNLE1BSUEsSUFBSVQsV0FBVyxDQUFDL0UsR0FBRCxFQUFNc0UsTUFBTSxDQUFDekUsaUJBQWIsQ0FBZixFQUFnRDtBQUVyRDBELElBQUFBLFVBQVUsR0FBR2hFLDZCQUFnQlEsU0FBN0I7QUFDRDs7QUFHRCxTQUFPLENBQUN3RCxVQUFELEVBQWErQixXQUFiLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFUzZFcnJvciBmcm9tICdlczYtZXJyb3InO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwsIGxvZ2dlciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBTdGF0dXNDb2RlcyBhcyBIVFRQU3RhdHVzQ29kZXMgfSBmcm9tICdodHRwLXN0YXR1cy1jb2Rlcyc7XG5cbmNvbnN0IG1qc29ud3BMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdNSlNPTldQJyk7XG5jb25zdCB3M2NMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdXM0MnKTtcblxuY29uc3QgVzNDX1VOS05PV05fRVJST1IgPSAndW5rbm93biBlcnJvcic7XG5cbi8vIGJhc2UgZXJyb3IgY2xhc3MgZm9yIGFsbCBvZiBvdXIgZXJyb3JzXG5jbGFzcyBQcm90b2NvbEVycm9yIGV4dGVuZHMgRVM2RXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobXNnLCBqc29ud3BDb2RlLCB3M2NTdGF0dXMsIGVycm9yKSB7XG4gICAgc3VwZXIobXNnKTtcbiAgICB0aGlzLmpzb253cENvZGUgPSBqc29ud3BDb2RlO1xuICAgIHRoaXMuZXJyb3IgPSBlcnJvciB8fCBXM0NfVU5LTk9XTl9FUlJPUjtcbiAgICBpZiAodGhpcy5qc29ud3BDb2RlID09PSBudWxsKSB7XG4gICAgICB0aGlzLmpzb253cENvZGUgPSAxMztcbiAgICB9XG4gICAgdGhpcy53M2NTdGF0dXMgPSB3M2NTdGF0dXMgfHwgSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICAgIHRoaXMuX3N0YWNrdHJhY2UgPSBudWxsO1xuICB9XG5cbiAgZ2V0IHN0YWNrdHJhY2UgKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGFja3RyYWNlIHx8IHRoaXMuc3RhY2s7XG4gIH1cblxuICBzZXQgc3RhY2t0cmFjZSAodmFsdWUpIHtcbiAgICB0aGlzLl9zdGFja3RyYWNlID0gdmFsdWU7XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL1NlbGVuaXVtSFEvc2VsZW5pdW0vYmxvYi8xNzZiNGE5ZTMwODJhYzE5MjZmMmE0MzZlYjM0Njc2MGMzN2E1OTk4L2phdmEvY2xpZW50L3NyYy9vcmcvb3BlbnFhL3NlbGVuaXVtL3JlbW90ZS9FcnJvckNvZGVzLmphdmEjTDIxNVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL1NlbGVuaXVtSFEvc2VsZW5pdW0vaXNzdWVzLzU1NjIjaXNzdWVjb21tZW50LTM3MDM3OTQ3MFxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2Rmbi1lcnJvci1jb2RlXG5cbmNsYXNzIE5vU3VjaERyaXZlckVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNjtcbiAgfVxuICAvLyBXM0MgRXJyb3IgaXMgY2FsbGVkIEludmFsaWRTZXNzaW9uSURcbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgc2Vzc2lvbiBpZCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQSBzZXNzaW9uIGlzIGVpdGhlciB0ZXJtaW5hdGVkIG9yIG5vdCBzdGFydGVkJywgTm9TdWNoRHJpdmVyRXJyb3IuY29kZSgpLFxuICAgICAgICAgIE5vU3VjaERyaXZlckVycm9yLnczY1N0YXR1cygpLCBOb1N1Y2hEcml2ZXJFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBOb1N1Y2hFbGVtZW50RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA3O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdubyBzdWNoIGVsZW1lbnQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGVsZW1lbnQgY291bGQgbm90IGJlIGxvY2F0ZWQgb24gdGhlIHBhZ2UgdXNpbmcgdGhlIGdpdmVuICcgK1xuICAgICAgICAgICdzZWFyY2ggcGFyYW1ldGVycy4nLCBOb1N1Y2hFbGVtZW50RXJyb3IuY29kZSgpLCBOb1N1Y2hFbGVtZW50RXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgTm9TdWNoRWxlbWVudEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIE5vU3VjaEZyYW1lRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA4O1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdubyBzdWNoIGZyYW1lJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIHJlcXVlc3QgdG8gc3dpdGNoIHRvIGEgZnJhbWUgY291bGQgbm90IGJlIHNhdGlzZmllZCBiZWNhdXNlICcgK1xuICAgICAgICAgICd0aGUgZnJhbWUgY291bGQgbm90IGJlIGZvdW5kLicsIE5vU3VjaEZyYW1lRXJyb3IuY29kZSgpLFxuICAgICAgICAgIE5vU3VjaEZyYW1lRXJyb3IudzNjU3RhdHVzKCksIE5vU3VjaEZyYW1lRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgVW5rbm93bkNvbW1hbmRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDk7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3Vua25vd24gY29tbWFuZCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGhlIHJlcXVlc3RlZCByZXNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQsIG9yIGEgcmVxdWVzdCB3YXMgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkIHVzaW5nIGFuIEhUVFAgbWV0aG9kIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFwcGVkICcgK1xuICAgICAgICAgICdyZXNvdXJjZS4nLCBVbmtub3duQ29tbWFuZEVycm9yLmNvZGUoKSwgVW5rbm93bkNvbW1hbmRFcnJvci53M2NTdGF0dXMoKSwgVW5rbm93bkNvbW1hbmRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDEwO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdzdGFsZSBlbGVtZW50IHJlZmVyZW5jZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gZWxlbWVudCBjb21tYW5kIGZhaWxlZCBiZWNhdXNlIHRoZSByZWZlcmVuY2VkIGVsZW1lbnQgaXMgbm8gJyArXG4gICAgICAgICAgJ2xvbmdlciBhdHRhY2hlZCB0byB0aGUgRE9NLicsIFN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yLmNvZGUoKSxcbiAgICAgICAgICBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvci53M2NTdGF0dXMoKSwgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgRWxlbWVudE5vdFZpc2libGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDExO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2VsZW1lbnQgbm90IHZpc2libGUnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGVsZW1lbnQgY29tbWFuZCBjb3VsZCBub3QgYmUgY29tcGxldGVkIGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMgJyArXG4gICAgICAgICAgJ25vdCB2aXNpYmxlIG9uIHRoZSBwYWdlLicsIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IuY29kZSgpLFxuICAgICAgICAgIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IudzNjU3RhdHVzKCksIEVsZW1lbnROb3RWaXNpYmxlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTI7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBlbGVtZW50IHN0YXRlJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBlbGVtZW50IGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzICcgK1xuICAgICAgICAgICdpbiBhbiBpbnZhbGlkIHN0YXRlIChlLmcuIGF0dGVtcHRpbmcgdG8gY2xpY2sgYSBkaXNhYmxlZCBlbGVtZW50KS4nLFxuICAgICAgICAgIEludmFsaWRFbGVtZW50U3RhdGVFcnJvci5jb2RlKCksIEludmFsaWRFbGVtZW50U3RhdGVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBJbnZhbGlkRWxlbWVudFN0YXRlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgVW5rbm93bkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTM7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gVzNDX1VOS05PV05fRVJST1I7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycm9yT3JNZXNzYWdlKSB7XG4gICAgY29uc3Qgb3JpZ01lc3NhZ2UgPSBfLmlzU3RyaW5nKChlcnJvck9yTWVzc2FnZSB8fCB7fSkubWVzc2FnZSlcbiAgICAgID8gZXJyb3JPck1lc3NhZ2UubWVzc2FnZVxuICAgICAgOiBlcnJvck9yTWVzc2FnZTtcbiAgICBjb25zdCBtZXNzYWdlID0gJ0FuIHVua25vd24gc2VydmVyLXNpZGUgZXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgY29tbWFuZC4nICtcbiAgICAgIChvcmlnTWVzc2FnZSA/IGAgT3JpZ2luYWwgZXJyb3I6ICR7b3JpZ01lc3NhZ2V9YCA6ICcnKTtcbiAgICBzdXBlcihtZXNzYWdlLCBVbmtub3duRXJyb3IuY29kZSgpLCBVbmtub3duRXJyb3IudzNjU3RhdHVzKCksIFVua25vd25FcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBVbmtub3duTWV0aG9kRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA0MDU7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5NRVRIT0RfTk9UX0FMTE9XRUQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3Vua25vd24gbWV0aG9kJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdUaGUgcmVxdWVzdGVkIGNvbW1hbmQgbWF0Y2hlZCBhIGtub3duIFVSTCBidXQgZGlkIG5vdCBtYXRjaCBhbiBtZXRob2QgZm9yIHRoYXQgVVJMJyxcbiAgICAgICAgICBVbmtub3duTWV0aG9kRXJyb3IuY29kZSgpLCBVbmtub3duTWV0aG9kRXJyb3IudzNjU3RhdHVzKCksIFVua25vd25NZXRob2RFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNDA1O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bnN1cHBvcnRlZCBvcGVyYXRpb24nO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0Egc2VydmVyLXNpZGUgZXJyb3Igb2NjdXJyZWQuIENvbW1hbmQgY2Fubm90IGJlIHN1cHBvcnRlZC4nLFxuICAgICAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IuY29kZSgpLCBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTU7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2VsZW1lbnQgbm90IHNlbGVjdGFibGUnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBzZWxlY3QgYW4gZWxlbWVudCB0aGF0IGNhbm5vdCBiZSBzZWxlY3RlZC4nLFxuICAgICAgICAgIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvci5jb2RlKCksIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDY0O1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IGNsaWNrIGludGVyY2VwdGVkJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ1RoZSBFbGVtZW50IENsaWNrIGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IHJlY2VpdmluZyAnICtcbiAgICAgICAgICAndGhlIGV2ZW50cyBpcyBvYnNjdXJpbmcgdGhlIGVsZW1lbnQgdGhhdCB3YXMgcmVxdWVzdGVkIGNsaWNrZWQnLFxuICAgICAgICAgIEVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IuY29kZSgpLCBFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIEVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNjA7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2VsZW1lbnQgbm90IGludGVyYWN0YWJsZSc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIG5vdCBwb2ludGVyLSBvciBrZXlib2FyZCBpbnRlcmFjdGFibGUnLFxuICAgICAgICAgIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvci5jb2RlKCksIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnNlY3VyZSBjZXJ0aWZpY2F0ZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTmF2aWdhdGlvbiBjYXVzZWQgdGhlIHVzZXIgYWdlbnQgdG8gaGl0IGEgY2VydGlmaWNhdGUgd2FybmluZywgd2hpY2ggaXMgdXN1YWxseSB0aGUgcmVzdWx0IG9mIGFuIGV4cGlyZWQgb3IgaW52YWxpZCBUTFMgY2VydGlmaWNhdGUnLFxuICAgICAgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yLmNvZGUoKSwgbnVsbCwgSW5zZWN1cmVDZXJ0aWZpY2F0ZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIEphdmFTY3JpcHRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDE3O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdqYXZhc2NyaXB0IGVycm9yJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBleGVjdXRpbmcgdXNlciBzdXBwbGllZCBKYXZhU2NyaXB0LicsXG4gICAgICAgICAgSmF2YVNjcmlwdEVycm9yLmNvZGUoKSwgSmF2YVNjcmlwdEVycm9yLnczY1N0YXR1cygpLCBKYXZhU2NyaXB0RXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgWFBhdGhMb29rdXBFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDE5O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgc2VsZWN0b3InO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNlYXJjaGluZyBmb3IgYW4gZWxlbWVudCBieSBYUGF0aC4nLFxuICAgICAgICAgIFhQYXRoTG9va3VwRXJyb3IuY29kZSgpLCBYUGF0aExvb2t1cEVycm9yLnczY1N0YXR1cygpLCBYUGF0aExvb2t1cEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDIxO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuUkVRVUVTVF9USU1FT1VUO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd0aW1lb3V0JztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBvcGVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZSBiZWZvcmUgaXRzIHRpbWVvdXQgZXhwaXJlZC4nLFxuICAgICAgICAgIFRpbWVvdXRFcnJvci5jb2RlKCksIFRpbWVvdXRFcnJvci53M2NTdGF0dXMoKSwgVGltZW91dEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIE5vU3VjaFdpbmRvd0Vycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMjM7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ25vIHN1Y2ggd2luZG93JztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIHJlcXVlc3QgdG8gc3dpdGNoIHRvIGEgZGlmZmVyZW50IHdpbmRvdyBjb3VsZCBub3QgYmUgc2F0aXNmaWVkICcgK1xuICAgICAgICAgICdiZWNhdXNlIHRoZSB3aW5kb3cgY291bGQgbm90IGJlIGZvdW5kLicsIE5vU3VjaFdpbmRvd0Vycm9yLmNvZGUoKSxcbiAgICAgICAgICBOb1N1Y2hXaW5kb3dFcnJvci53M2NTdGF0dXMoKSwgTm9TdWNoV2luZG93RXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA2MTtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBhcmd1bWVudCc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgY29tbWFuZCBhcmUgZWl0aGVyIGludmFsaWQgb3IgbWFsZm9ybWVkJyxcbiAgICAgICAgICBJbnZhbGlkQXJndW1lbnRFcnJvci5jb2RlKCksIEludmFsaWRBcmd1bWVudEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIEludmFsaWRBcmd1bWVudEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIEludmFsaWRDb29raWVEb21haW5FcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDI0O1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGNvb2tpZSBkb21haW4nO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gaWxsZWdhbCBhdHRlbXB0IHdhcyBtYWRlIHRvIHNldCBhIGNvb2tpZSB1bmRlciBhIGRpZmZlcmVudCAnICtcbiAgICAgICAgICAnZG9tYWluIHRoYW4gdGhlIGN1cnJlbnQgcGFnZS4nLCBJbnZhbGlkQ29va2llRG9tYWluRXJyb3IuY29kZSgpLFxuICAgICAgICAgIEludmFsaWRDb29raWVEb21haW5FcnJvci53M2NTdGF0dXMoKSwgSW52YWxpZENvb2tpZURvbWFpbkVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIE5vU3VjaENvb2tpZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNjI7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ25vIHN1Y2ggY29va2llJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdObyBjb29raWUgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGggbmFtZSB3YXMgZm91bmQgYW1vbmdzdCB0aGUgYXNzb2NpYXRlZCBjb29raWVzIG9mIHRoZSBjdXJyZW50IGJyb3dzaW5nIGNvbnRleHTigJlzIGFjdGl2ZSBkb2N1bWVudCcsXG4gICAgICAgICAgTm9TdWNoQ29va2llRXJyb3IuY29kZSgpLCBOb1N1Y2hDb29raWVFcnJvci53M2NTdGF0dXMoKSwgTm9TdWNoQ29va2llRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgVW5hYmxlVG9TZXRDb29raWVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDI1O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bmFibGUgdG8gc2V0IGNvb2tpZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQSByZXF1ZXN0IHRvIHNldCBhIGNvb2tpZVxcJ3MgdmFsdWUgY291bGQgbm90IGJlIHNhdGlzZmllZC4nLFxuICAgICAgICAgIFVuYWJsZVRvU2V0Q29va2llRXJyb3IuY29kZSgpLCBVbmFibGVUb1NldENvb2tpZUVycm9yLnczY1N0YXR1cygpLCBVbmFibGVUb1NldENvb2tpZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIFVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDI2O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bmV4cGVjdGVkIGFsZXJ0IG9wZW4nO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0EgbW9kYWwgZGlhbG9nIHdhcyBvcGVuLCBibG9ja2luZyB0aGlzIG9wZXJhdGlvbicsXG4gICAgICAgICAgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLmNvZGUoKSwgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLnczY1N0YXR1cygpLCBVbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgTm9BbGVydE9wZW5FcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDI3O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdubyBzdWNoIGFsZXJ0JztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIG9wZXJhdGUgb24gYSBtb2RhbCBkaWFsb2cgd2hlbiBvbmUgJyArXG4gICAgICAgICAgJ3dhcyBub3Qgb3Blbi4nLCBOb0FsZXJ0T3BlbkVycm9yLmNvZGUoKSwgTm9BbGVydE9wZW5FcnJvci53M2NTdGF0dXMoKSwgTm9BbGVydE9wZW5FcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBOb1N1Y2hBbGVydEVycm9yIGV4dGVuZHMgTm9BbGVydE9wZW5FcnJvciB7fVxuXG5jbGFzcyBTY3JpcHRUaW1lb3V0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyODtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLlJFUVVFU1RfVElNRU9VVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnc2NyaXB0IHRpbWVvdXQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0Egc2NyaXB0IGRpZCBub3QgY29tcGxldGUgYmVmb3JlIGl0cyB0aW1lb3V0IGV4cGlyZWQuJyxcbiAgICAgICAgICBTY3JpcHRUaW1lb3V0RXJyb3IuY29kZSgpLCBTY3JpcHRUaW1lb3V0RXJyb3IudzNjU3RhdHVzKCksIFNjcmlwdFRpbWVvdXRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyOTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGNvb3JkaW5hdGVzJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdUaGUgY29vcmRpbmF0ZXMgcHJvdmlkZWQgdG8gYW4gaW50ZXJhY3Rpb25zIG9wZXJhdGlvbiBhcmUgaW52YWxpZC4nLFxuICAgICAgICAgIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvci5jb2RlKCksIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZENvb3JkaW5hdGVzRXJyb3IgZXh0ZW5kcyBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3Ige31cblxuY2xhc3MgSU1FTm90QXZhaWxhYmxlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAzMDtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5zdXBwb3J0ZWQgb3BlcmF0aW9uJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdJTUUgd2FzIG5vdCBhdmFpbGFibGUuJywgSU1FTm90QXZhaWxhYmxlRXJyb3IuY29kZSgpLFxuICAgICAgICAgIElNRU5vdEF2YWlsYWJsZUVycm9yLnczY1N0YXR1cygpLCBJTUVOb3RBdmFpbGFibGVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBJTUVFbmdpbmVBY3RpdmF0aW9uRmFpbGVkRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAzMTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5zdXBwb3J0ZWQgb3BlcmF0aW9uJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBJTUUgZW5naW5lIGNvdWxkIG5vdCBiZSBzdGFydGVkLicsXG4gICAgICAgICAgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yLmNvZGUoKSwgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBJbnZhbGlkU2VsZWN0b3JFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDMyO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgc2VsZWN0b3InO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FyZ3VtZW50IHdhcyBhbiBpbnZhbGlkIHNlbGVjdG9yIChlLmcuIFhQYXRoL0NTUykuJyxcbiAgICAgICAgICBJbnZhbGlkU2VsZWN0b3JFcnJvci5jb2RlKCksIEludmFsaWRTZWxlY3RvckVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIEludmFsaWRTZWxlY3RvckVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIFNlc3Npb25Ob3RDcmVhdGVkRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAzMztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnc2Vzc2lvbiBub3QgY3JlYXRlZCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGRldGFpbHMpIHtcbiAgICBsZXQgbWVzc2FnZSA9ICdBIG5ldyBzZXNzaW9uIGNvdWxkIG5vdCBiZSBjcmVhdGVkLic7XG4gICAgaWYgKGRldGFpbHMpIHtcbiAgICAgIG1lc3NhZ2UgKz0gYCBEZXRhaWxzOiAke2RldGFpbHN9YDtcbiAgICB9XG5cbiAgICBzdXBlcihtZXNzYWdlLCBTZXNzaW9uTm90Q3JlYXRlZEVycm9yLmNvZGUoKSwgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvci53M2NTdGF0dXMoKSwgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5jbGFzcyBNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDM0O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdtb3ZlIHRhcmdldCBvdXQgb2YgYm91bmRzJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdUYXJnZXQgcHJvdmlkZWQgZm9yIGEgbW92ZSBhY3Rpb24gaXMgb3V0IG9mIGJvdW5kcy4nLFxuICAgICAgICAgIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yLmNvZGUoKSwgTW92ZVRhcmdldE91dE9mQm91bmRzRXJyb3IudzNjU3RhdHVzKCksIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmNsYXNzIE5vU3VjaENvbnRleHRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDM1O1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ05vIHN1Y2ggY29udGV4dCBmb3VuZC4nLCBOb1N1Y2hDb250ZXh0RXJyb3IuY29kZSgpKTtcbiAgfVxufVxuXG5jbGFzcyBJbnZhbGlkQ29udGV4dEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzY7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGhhdCBjb21tYW5kIGNvdWxkIG5vdCBiZSBleGVjdXRlZCBpbiB0aGUgY3VycmVudCBjb250ZXh0LicsXG4gICAgICAgICAgSW52YWxpZENvbnRleHRFcnJvci5jb2RlKCkpO1xuICB9XG59XG5cbi8vIFRoZXNlIGFyZSBhbGlhc2VzIGZvciBVbmtub3duTWV0aG9kRXJyb3JcbmNsYXNzIE5vdFlldEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBVbmtub3duTWV0aG9kRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdNZXRob2QgaGFzIG5vdCB5ZXQgYmVlbiBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG5jbGFzcyBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgVW5rbm93bk1ldGhvZEVycm9yIHtcbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG5cbmNsYXNzIFVuYWJsZVRvQ2FwdHVyZVNjcmVlbiBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDYzO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bmFibGUgdG8gY2FwdHVyZSBzY3JlZW4nO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0Egc2NyZWVuIGNhcHR1cmUgd2FzIG1hZGUgaW1wb3NzaWJsZScsXG4gICAgICAgICAgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLmNvZGUoKSwgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLnczY1N0YXR1cygpLCBVbmFibGVUb0NhcHR1cmVTY3JlZW4uZXJyb3IoKSk7XG4gIH1cbn1cblxuXG4vLyBFcXVpdmFsZW50IHRvIFczQyBJbnZhbGlkQXJndW1lbnRFcnJvclxuY2xhc3MgQmFkUGFyYW1ldGVyc0Vycm9yIGV4dGVuZHMgRVM2RXJyb3Ige1xuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBhcmd1bWVudCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKHJlcXVpcmVkUGFyYW1zLCBhY3R1YWxQYXJhbXMsIGVyck1lc3NhZ2UpIHtcbiAgICBsZXQgbWVzc2FnZTtcbiAgICBpZiAoIWVyck1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UgPSBgUGFyYW1ldGVycyB3ZXJlIGluY29ycmVjdC4gV2Ugd2FudGVkIGAgK1xuICAgICAgICAgIGAke0pTT04uc3RyaW5naWZ5KHJlcXVpcmVkUGFyYW1zKX0gYW5kIHlvdSBgICtcbiAgICAgICAgICBgc2VudCAke0pTT04uc3RyaW5naWZ5KGFjdHVhbFBhcmFtcyl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSA9IGBQYXJhbWV0ZXJzIHdlcmUgaW5jb3JyZWN0LiBZb3Ugc2VudCAke0pTT04uc3RyaW5naWZ5KGFjdHVhbFBhcmFtcyl9LCAke2Vyck1lc3NhZ2V9YDtcbiAgICB9XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy53M2NTdGF0dXMgPSBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm94eVJlcXVlc3RFcnJvciBpcyBhIGN1c3RvbSBlcnJvciBhbmQgd2lsbCBiZSB0aHJvd24gdXAgb24gdW5zdWNjZXNzZnVsIHByb3h5IHJlcXVlc3QgYW5kXG4gKiB3aWxsIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb3h5IGZhaWx1cmUuXG4gKiBJbiBjYXNlIG9mIFByb3h5UmVxdWVzdEVycm9yIHNob3VsZCBmZXRjaCB0aGUgYWN0dWFsIGVycm9yIGJ5IGNhbGxpbmcgYGdldEFjdHVhbEVycm9yKClgXG4gKiBmb3IgcHJveHkgZmFpbHVyZSB0byBnZW5lcmF0ZSB0aGUgY2xpZW50IHJlc3BvbnNlLlxuICovXG5jbGFzcyBQcm94eVJlcXVlc3RFcnJvciBleHRlbmRzIEVTNkVycm9yIHtcbiAgY29uc3RydWN0b3IgKGVyciwgcmVzcG9uc2VFcnJvciwgaHR0cFN0YXR1cykge1xuICAgIGxldCByZXNwb25zZUVycm9yT2JqID0gdXRpbC5zYWZlSnNvblBhcnNlKHJlc3BvbnNlRXJyb3IpO1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmopKSB7XG4gICAgICByZXNwb25zZUVycm9yT2JqID0ge307XG4gICAgfVxuICAgIGxldCBvcmlnTWVzc2FnZSA9IF8uaXNTdHJpbmcocmVzcG9uc2VFcnJvcikgPyByZXNwb25zZUVycm9yIDogJyc7XG4gICAgaWYgKCFfLmlzRW1wdHkocmVzcG9uc2VFcnJvck9iaikpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpKSB7XG4gICAgICAgIG9yaWdNZXNzYWdlID0gcmVzcG9uc2VFcnJvck9iai52YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpICYmIF8uaXNTdHJpbmcocmVzcG9uc2VFcnJvck9iai52YWx1ZS5tZXNzYWdlKSkge1xuICAgICAgICBvcmlnTWVzc2FnZSA9IHJlc3BvbnNlRXJyb3JPYmoudmFsdWUubWVzc2FnZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIoXy5pc0VtcHR5KGVycikgPyBgUHJveHkgcmVxdWVzdCB1bnN1Y2Nlc3NmdWwuICR7b3JpZ01lc3NhZ2V9YCA6IGVycik7XG5cbiAgICB0aGlzLnczY1N0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcblxuICAgIC8vIElmIHRoZSByZXNwb25zZSBlcnJvciBpcyBhbiBvYmplY3QgYW5kIHZhbHVlIGlzIGFuIG9iamVjdCwgaXQncyBhIFczQyBlcnJvciAoZm9yIEpTT05XUCB2YWx1ZSBpcyBhIHN0cmluZylcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpICYmIF8uaGFzKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUsICdlcnJvcicpKSB7XG4gICAgICB0aGlzLnczYyA9IHJlc3BvbnNlRXJyb3JPYmoudmFsdWU7XG4gICAgICB0aGlzLnczY1N0YXR1cyA9IGh0dHBTdGF0dXMgfHwgSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmpzb253cCA9IHJlc3BvbnNlRXJyb3JPYmo7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWN0dWFsRXJyb3IgKCkge1xuICAgIC8vIElmIGl0J3MgTUpTT05XUCBlcnJvciwgcmV0dXJucyBhY3R1YWwgZXJyb3IgY2F1c2UgZm9yIHJlcXVlc3QgZmFpbHVyZSBiYXNlZCBvbiBganNvbndwLnN0YXR1c2BcbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLmpzb253cD8uc3RhdHVzKSAmJiB1dGlsLmhhc1ZhbHVlKHRoaXMuanNvbndwPy52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSh0aGlzLmpzb253cC5zdGF0dXMsIHRoaXMuanNvbndwLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy53M2MpICYmIF8uaXNOdW1iZXIodGhpcy53M2NTdGF0dXMpICYmIHRoaXMudzNjU3RhdHVzID49IDMwMCkge1xuICAgICAgcmV0dXJuIGVycm9yRnJvbVczQ0pzb25Db2RlKHRoaXMudzNjLmVycm9yLCB0aGlzLnczYy5tZXNzYWdlIHx8IHRoaXMubWVzc2FnZSwgdGhpcy53M2Muc3RhY2t0cmFjZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVW5rbm93bkVycm9yKHRoaXMubWVzc2FnZSk7XG4gIH1cbn1cbi8vIG1hcCBvZiBlcnJvciBjbGFzcyBuYW1lIHRvIGVycm9yIGNsYXNzXG5jb25zdCBlcnJvcnMgPSB7Tm90WWV0SW1wbGVtZW50ZWRFcnJvcixcbiAgICAgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLFxuICAgICAgICAgICAgICAgIEJhZFBhcmFtZXRlcnNFcnJvcixcbiAgICAgICAgICAgICAgICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hEcml2ZXJFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hFbGVtZW50RXJyb3IsXG4gICAgICAgICAgICAgICAgVW5rbm93bkNvbW1hbmRFcnJvcixcbiAgICAgICAgICAgICAgICBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcixcbiAgICAgICAgICAgICAgICBFbGVtZW50Tm90VmlzaWJsZUVycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRFbGVtZW50U3RhdGVFcnJvcixcbiAgICAgICAgICAgICAgICBVbmtub3duRXJyb3IsXG4gICAgICAgICAgICAgICAgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yLFxuICAgICAgICAgICAgICAgIEVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IsXG4gICAgICAgICAgICAgICAgRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yLFxuICAgICAgICAgICAgICAgIEluc2VjdXJlQ2VydGlmaWNhdGVFcnJvcixcbiAgICAgICAgICAgICAgICBKYXZhU2NyaXB0RXJyb3IsXG4gICAgICAgICAgICAgICAgWFBhdGhMb29rdXBFcnJvcixcbiAgICAgICAgICAgICAgICBUaW1lb3V0RXJyb3IsXG4gICAgICAgICAgICAgICAgTm9TdWNoV2luZG93RXJyb3IsXG4gICAgICAgICAgICAgICAgTm9TdWNoQ29va2llRXJyb3IsXG4gICAgICAgICAgICAgICAgSW52YWxpZENvb2tpZURvbWFpbkVycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRDb29yZGluYXRlc0Vycm9yLFxuICAgICAgICAgICAgICAgIFVuYWJsZVRvU2V0Q29va2llRXJyb3IsXG4gICAgICAgICAgICAgICAgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLFxuICAgICAgICAgICAgICAgIE5vQWxlcnRPcGVuRXJyb3IsXG4gICAgICAgICAgICAgICAgU2NyaXB0VGltZW91dEVycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvcixcbiAgICAgICAgICAgICAgICBJTUVOb3RBdmFpbGFibGVFcnJvcixcbiAgICAgICAgICAgICAgICBJTUVFbmdpbmVBY3RpdmF0aW9uRmFpbGVkRXJyb3IsXG4gICAgICAgICAgICAgICAgSW52YWxpZFNlbGVjdG9yRXJyb3IsXG4gICAgICAgICAgICAgICAgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcixcbiAgICAgICAgICAgICAgICBNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hBbGVydEVycm9yLFxuICAgICAgICAgICAgICAgIE5vU3VjaENvbnRleHRFcnJvcixcbiAgICAgICAgICAgICAgICBJbnZhbGlkQ29udGV4dEVycm9yLFxuICAgICAgICAgICAgICAgIE5vU3VjaEZyYW1lRXJyb3IsXG4gICAgICAgICAgICAgICAgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLFxuICAgICAgICAgICAgICAgIFVua25vd25NZXRob2RFcnJvcixcbiAgICAgICAgICAgICAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yLFxuICAgICAgICAgICAgICAgIFByb3h5UmVxdWVzdEVycm9yfTtcblxuLy8gbWFwIG9mIGVycm9yIGNvZGUgdG8gZXJyb3IgY2xhc3NcbmNvbnN0IGpzb253cEVycm9yQ29kZU1hcCA9IHt9O1xuZm9yIChsZXQgRXJyb3JDbGFzcyBvZiBfLnZhbHVlcyhlcnJvcnMpKSB7XG4gIGlmIChFcnJvckNsYXNzLmNvZGUpIHtcbiAgICBqc29ud3BFcnJvckNvZGVNYXBbRXJyb3JDbGFzcy5jb2RlKCldID0gRXJyb3JDbGFzcztcbiAgfVxufVxuXG5jb25zdCB3M2NFcnJvckNvZGVNYXAgPSB7fTtcbmZvciAobGV0IEVycm9yQ2xhc3Mgb2YgXy52YWx1ZXMoZXJyb3JzKSkge1xuICBpZiAoRXJyb3JDbGFzcy5lcnJvcikge1xuICAgIHczY0Vycm9yQ29kZU1hcFtFcnJvckNsYXNzLmVycm9yKCldID0gRXJyb3JDbGFzcztcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1Vua25vd25FcnJvciAoZXJyKSB7XG4gIHJldHVybiAhZXJyLmNvbnN0cnVjdG9yLm5hbWUgfHxcbiAgICAgICAgICFfLnZhbHVlcyhlcnJvcnMpLmZpbmQoZnVuY3Rpb24gZXF1YWxOYW1lcyAoZXJyb3IpIHtcbiAgICAgICAgICAgcmV0dXJuIGVycm9yLm5hbWUgPT09IGVyci5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzRXJyb3JUeXBlIChlcnIsIHR5cGUpIHtcbiAgLy8gYG5hbWVgIHByb3BlcnR5IGlzIHRoZSBjb25zdHJ1Y3RvciBuYW1lXG4gIGlmICh0eXBlLm5hbWUgPT09IFByb3RvY29sRXJyb3IubmFtZSkge1xuICAgIC8vIGBqc29ud3BDb2RlYCBpcyBgMGAgb24gc3VjY2Vzc1xuICAgIHJldHVybiAhIWVyci5qc29ud3BDb2RlO1xuICB9IGVsc2UgaWYgKHR5cGUubmFtZSA9PT0gUHJveHlSZXF1ZXN0RXJyb3IubmFtZSkge1xuICAgIC8vIGBzdGF0dXNgIGlzIGAwYCBvbiBzdWNjZXNzXG4gICAgaWYgKGVyci5qc29ud3ApIHtcbiAgICAgIHJldHVybiAhIWVyci5qc29ud3Auc3RhdHVzO1xuICAgIH1cblxuICAgIGlmIChfLmlzUGxhaW5PYmplY3QoZXJyLnczYykpIHtcbiAgICAgIHJldHVybiBfLmlzTnVtYmVyKGVyci53M2NTdGF0dXMpICYmIGVyci53M2NTdGF0dXMgPj0gMzAwO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZXJyLmNvbnN0cnVjdG9yLm5hbWUgPT09IHR5cGUubmFtZTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbiBlcnJvciBkZXJpdmVkIGZyb20gTUpTT05XUCBzdGF0dXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlIEpTT05XUCBzdGF0dXMgY29kZVxuICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSB2YWx1ZSBUaGUgZXJyb3IgbWVzc2FnZSwgb3IgYW4gb2JqZWN0IHdpdGggYSBgbWVzc2FnZWAgcHJvcGVydHlcbiAqIEByZXR1cm4ge1Byb3RvY29sRXJyb3J9IFRoZSBlcnJvciB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBwcm92aWRlZCBKU09OV1Agc3RhdHVzIGNvZGVcbiAqL1xuZnVuY3Rpb24gZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUgKGNvZGUsIHZhbHVlID0gJycpIHtcbiAgLy8gaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIHB1bGwgbWVzc2FnZSBmcm9tIGl0LCBvdGhlcndpc2UgdXNlIHRoZSBwbGFpblxuICAvLyB2YWx1ZSwgb3IgZGVmYXVsdCB0byBhbiBlbXB0eSBzdHJpbmcsIGlmIG51bGxcbiAgY29uc3QgbWVzc2FnZSA9ICh2YWx1ZSB8fCB7fSkubWVzc2FnZSB8fCB2YWx1ZSB8fCAnJztcbiAgaWYgKGNvZGUgIT09IFVua25vd25FcnJvci5jb2RlKCkgJiYganNvbndwRXJyb3JDb2RlTWFwW2NvZGVdKSB7XG4gICAgbWpzb253cExvZy5kZWJ1ZyhgTWF0Y2hlZCBKU09OV1AgZXJyb3IgY29kZSAke2NvZGV9IHRvICR7anNvbndwRXJyb3JDb2RlTWFwW2NvZGVdLm5hbWV9YCk7XG4gICAgcmV0dXJuIG5ldyBqc29ud3BFcnJvckNvZGVNYXBbY29kZV0obWVzc2FnZSk7XG4gIH1cbiAgbWpzb253cExvZy5kZWJ1ZyhgTWF0Y2hlZCBKU09OV1AgZXJyb3IgY29kZSAke2NvZGV9IHRvIFVua25vd25FcnJvcmApO1xuICByZXR1cm4gbmV3IFVua25vd25FcnJvcihtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbiBlcnJvciBkZXJpdmVkIGZyb20gVzNDIEpTT04gQ29kZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgVzNDIGVycm9yIHN0cmluZyAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2hhbmRsaW5nLWVycm9ycyBgSlNPTiBFcnJvciBDb2RlYCBjb2x1bW4pXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSB0aGUgZXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHs/c3RyaW5nfSBzdGFja3RyYWNlIGFuIG9wdGlvbmFsIGVycm9yIHN0YWNrdHJhY2VcbiAqIEByZXR1cm4ge1Byb3RvY29sRXJyb3J9ICBUaGUgZXJyb3IgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIFczQyBlcnJvciBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZXJyb3JGcm9tVzNDSnNvbkNvZGUgKGNvZGUsIG1lc3NhZ2UsIHN0YWNrdHJhY2UgPSBudWxsKSB7XG4gIGlmIChjb2RlICYmIHczY0Vycm9yQ29kZU1hcFtjb2RlLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgdzNjTG9nLmRlYnVnKGBNYXRjaGVkIFczQyBlcnJvciBjb2RlICcke2NvZGV9JyB0byAke3czY0Vycm9yQ29kZU1hcFtjb2RlLnRvTG93ZXJDYXNlKCldLm5hbWV9YCk7XG4gICAgY29uc3QgcmVzdWx0RXJyb3IgPSBuZXcgdzNjRXJyb3JDb2RlTWFwW2NvZGUudG9Mb3dlckNhc2UoKV0obWVzc2FnZSk7XG4gICAgcmVzdWx0RXJyb3Iuc3RhY2t0cmFjZSA9IHN0YWNrdHJhY2U7XG4gICAgcmV0dXJuIHJlc3VsdEVycm9yO1xuICB9XG4gIHczY0xvZy5kZWJ1ZyhgTWF0Y2hlZCBXM0MgZXJyb3IgY29kZSAnJHtjb2RlfScgdG8gVW5rbm93bkVycm9yYCk7XG4gIGNvbnN0IHJlc3VsdEVycm9yID0gbmV3IFVua25vd25FcnJvcihtZXNzYWdlKTtcbiAgcmVzdWx0RXJyb3Iuc3RhY2t0cmFjZSA9IHN0YWNrdHJhY2U7XG4gIHJldHVybiByZXN1bHRFcnJvcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIEFwcGl1bSBlcnJvciB0byBwcm9wZXIgVzNDIEhUVFAgcmVzcG9uc2VcbiAqIEBwYXJhbSB7UHJvdG9jb2xFcnJvcn0gZXJyIFRoZSBlcnJvciB0aGF0IG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWRcbiAqL1xuZnVuY3Rpb24gZ2V0UmVzcG9uc2VGb3JXM0NFcnJvciAoZXJyKSB7XG4gIGxldCBodHRwU3RhdHVzO1xuXG4gIC8vIFczQyBkZWZpbmVkIGVycm9yIG1lc3NhZ2UgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2Rmbi1lcnJvci1jb2RlKVxuICBsZXQgdzNjRXJyb3JTdHJpbmc7XG5cbiAgaWYgKCFlcnIudzNjU3RhdHVzKSB7XG4gICAgZXJyID0gdXRpbC5oYXNWYWx1ZShlcnIuc3RhdHVzKVxuICAgICAgLy8gSWYgaXQncyBhIEpTT05XUCBlcnJvciwgZmluZCBjb3JyZXNwb25kaW5nIGVycm9yXG4gICAgICA/IGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKGVyci5zdGF0dXMsIGVyci52YWx1ZSlcbiAgICAgIDogbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLkJhZFBhcmFtZXRlcnNFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA0MDAgaWYgd2UgaGF2ZSBiYWQgcGFyYW1ldGVyc1xuICAgIHczY0xvZy5kZWJ1ZyhgQmFkIHBhcmFtZXRlcnM6ICR7ZXJyfWApO1xuICAgIHczY0Vycm9yU3RyaW5nID0gQmFkUGFyYW1ldGVyc0Vycm9yLmVycm9yKCk7XG4gIH0gZWxzZSB7XG4gICAgdzNjRXJyb3JTdHJpbmcgPSBlcnIuZXJyb3I7XG4gIH1cblxuICBodHRwU3RhdHVzID0gZXJyLnczY1N0YXR1cztcblxuICBpZiAoIXczY0Vycm9yU3RyaW5nKSB7XG4gICAgdzNjRXJyb3JTdHJpbmcgPSBVbmtub3duRXJyb3IuZXJyb3IoKTtcbiAgfVxuXG4gIGxldCBodHRwUmVzQm9keSA9IHtcbiAgICB2YWx1ZToge1xuICAgICAgZXJyb3I6IHczY0Vycm9yU3RyaW5nLFxuICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICBzdGFja3RyYWNlOiBlcnIuc3RhY2t0cmFjZSB8fCBlcnIuc3RhY2ssXG4gICAgfVxuICB9O1xuICByZXR1cm4gW2h0dHBTdGF0dXMsIGh0dHBSZXNCb2R5XTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIEFwcGl1bSBlcnJvciB0byBhIHByb3BlciBKU09OV1AgcmVzcG9uc2VcbiAqIEBwYXJhbSB7UHJvdG9jb2xFcnJvcn0gZXJyIFRoZSBlcnJvciB0byBiZSBjb252ZXJ0ZWRcbiAqL1xuZnVuY3Rpb24gZ2V0UmVzcG9uc2VGb3JKc29ud3BFcnJvciAoZXJyKSB7XG4gIGlmIChpc1Vua25vd25FcnJvcihlcnIpKSB7XG4gICAgZXJyID0gbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoZXJyKTtcbiAgfVxuICAvLyBNSlNPTldQIGVycm9ycyBhcmUgdXN1YWxseSA1MDAgc3RhdHVzIGNvZGUgc28gc2V0IGl0IHRvIHRoYXQgYnkgZGVmYXVsdFxuICBsZXQgaHR0cFN0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIGxldCBodHRwUmVzQm9keSA9IHtcbiAgICBzdGF0dXM6IGVyci5qc29ud3BDb2RlLFxuICAgIHZhbHVlOiB7XG4gICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZVxuICAgIH1cbiAgfTtcblxuICBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuQmFkUGFyYW1ldGVyc0Vycm9yKSkge1xuICAgIC8vIHJlc3BvbmQgd2l0aCBhIDQwMCBpZiB3ZSBoYXZlIGJhZCBwYXJhbWV0ZXJzXG4gICAgbWpzb253cExvZy5kZWJ1ZyhgQmFkIHBhcmFtZXRlcnM6ICR7ZXJyfWApO1xuICAgIGh0dHBTdGF0dXMgPSBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gICAgaHR0cFJlc0JvZHkgPSBlcnIubWVzc2FnZTtcbiAgfSBlbHNlIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob3RZZXRJbXBsZW1lbnRlZEVycm9yKSB8fFxuICAgICAgICAgICAgIGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IpKSB7XG4gICAgLy8gcmVzcG9uZCB3aXRoIGEgNTAxIGlmIHRoZSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkXG4gICAgaHR0cFN0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5OT1RfSU1QTEVNRU5URUQ7XG4gIH0gZWxzZSBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuTm9TdWNoRHJpdmVyRXJyb3IpKSB7XG4gICAgLy8gcmVzcG9uZCB3aXRoIGEgNDA0IGlmIHRoZXJlIGlzIG5vIGRyaXZlciBmb3IgdGhlIHNlc3Npb25cbiAgICBodHRwU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuXG5cbiAgcmV0dXJuIFtodHRwU3RhdHVzLCBodHRwUmVzQm9keV07XG59XG5cbmV4cG9ydCB7XG4gIFByb3RvY29sRXJyb3IsIGVycm9ycywgaXNFcnJvclR5cGUsIGlzVW5rbm93bkVycm9yLFxuICBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSwgZXJyb3JGcm9tVzNDSnNvbkNvZGUsXG4gIGdldFJlc3BvbnNlRm9yVzNDRXJyb3IsIGdldFJlc3BvbnNlRm9ySnNvbndwRXJyb3IsXG59O1xuIl0sImZpbGUiOiJsaWIvcHJvdG9jb2wvZXJyb3JzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
1013
|
+
}
|
|
1014
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9wcm90b2NvbC9lcnJvcnMuanMiXSwibmFtZXMiOlsibWpzb253cExvZyIsImxvZ2dlciIsImdldExvZ2dlciIsInczY0xvZyIsIlczQ19VTktOT1dOX0VSUk9SIiwiUHJvdG9jb2xFcnJvciIsIkVTNkVycm9yIiwiY29uc3RydWN0b3IiLCJtc2ciLCJqc29ud3BDb2RlIiwidzNjU3RhdHVzIiwiZXJyb3IiLCJIVFRQU3RhdHVzQ29kZXMiLCJCQURfUkVRVUVTVCIsIl9zdGFja3RyYWNlIiwic3RhY2t0cmFjZSIsInN0YWNrIiwidmFsdWUiLCJOb1N1Y2hEcml2ZXJFcnJvciIsImNvZGUiLCJOT1RfRk9VTkQiLCJlcnIiLCJOb1N1Y2hFbGVtZW50RXJyb3IiLCJOb1N1Y2hGcmFtZUVycm9yIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yIiwiRWxlbWVudE5vdFZpc2libGVFcnJvciIsIkludmFsaWRFbGVtZW50U3RhdGVFcnJvciIsIlVua25vd25FcnJvciIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsImVycm9yT3JNZXNzYWdlIiwib3JpZ01lc3NhZ2UiLCJfIiwiaXNTdHJpbmciLCJtZXNzYWdlIiwiVW5rbm93bk1ldGhvZEVycm9yIiwiTUVUSE9EX05PVF9BTExPV0VEIiwiVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciIsIkVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvciIsIkVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IiLCJFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IiLCJJbnNlY3VyZUNlcnRpZmljYXRlRXJyb3IiLCJKYXZhU2NyaXB0RXJyb3IiLCJYUGF0aExvb2t1cEVycm9yIiwiVGltZW91dEVycm9yIiwiUkVRVUVTVF9USU1FT1VUIiwiTm9TdWNoV2luZG93RXJyb3IiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIkludmFsaWRDb29raWVEb21haW5FcnJvciIsIk5vU3VjaENvb2tpZUVycm9yIiwiVW5hYmxlVG9TZXRDb29raWVFcnJvciIsIlVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvciIsIk5vQWxlcnRPcGVuRXJyb3IiLCJOb1N1Y2hBbGVydEVycm9yIiwiU2NyaXB0VGltZW91dEVycm9yIiwiSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yIiwiSW52YWxpZENvb3JkaW5hdGVzRXJyb3IiLCJJTUVOb3RBdmFpbGFibGVFcnJvciIsIklNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvciIsIkludmFsaWRTZWxlY3RvckVycm9yIiwiU2Vzc2lvbk5vdENyZWF0ZWRFcnJvciIsImRldGFpbHMiLCJNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvciIsIk5vU3VjaENvbnRleHRFcnJvciIsIkludmFsaWRDb250ZXh0RXJyb3IiLCJOb3RZZXRJbXBsZW1lbnRlZEVycm9yIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsIlVuYWJsZVRvQ2FwdHVyZVNjcmVlbiIsIkJhZFBhcmFtZXRlcnNFcnJvciIsInJlcXVpcmVkUGFyYW1zIiwiYWN0dWFsUGFyYW1zIiwiZXJyTWVzc2FnZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJQcm94eVJlcXVlc3RFcnJvciIsInJlc3BvbnNlRXJyb3IiLCJodHRwU3RhdHVzIiwicmVzcG9uc2VFcnJvck9iaiIsInV0aWwiLCJzYWZlSnNvblBhcnNlIiwiaXNQbGFpbk9iamVjdCIsImlzRW1wdHkiLCJoYXMiLCJ3M2MiLCJqc29ud3AiLCJnZXRBY3R1YWxFcnJvciIsImhhc1ZhbHVlIiwic3RhdHVzIiwiZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUiLCJpc051bWJlciIsImVycm9yRnJvbVczQ0pzb25Db2RlIiwiZXJyb3JzIiwianNvbndwRXJyb3JDb2RlTWFwIiwiRXJyb3JDbGFzcyIsInZhbHVlcyIsInczY0Vycm9yQ29kZU1hcCIsImlzVW5rbm93bkVycm9yIiwibmFtZSIsImZpbmQiLCJlcXVhbE5hbWVzIiwiaXNFcnJvclR5cGUiLCJ0eXBlIiwiZGVidWciLCJ0b0xvd2VyQ2FzZSIsInJlc3VsdEVycm9yIiwiZ2V0UmVzcG9uc2VGb3JXM0NFcnJvciIsInczY0Vycm9yU3RyaW5nIiwiaHR0cFJlc0JvZHkiLCJnZXRSZXNwb25zZUZvckpzb253cEVycm9yIiwiTk9UX0lNUExFTUVOVEVEIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLFNBQWpCLENBQW5COztBQUNBLE1BQU1DLE1BQU0sR0FBR0YsZ0JBQU9DLFNBQVAsQ0FBaUIsS0FBakIsQ0FBZjs7QUFFQSxNQUFNRSxpQkFBaUIsR0FBRyxlQUExQjs7QUFHTyxNQUFNQyxhQUFOLFNBQTRCQyxpQkFBNUIsQ0FBcUM7QUFDMUNDLEVBQUFBLFdBQVcsQ0FBRUMsR0FBRixFQUFPQyxVQUFQLEVBQW1CQyxTQUFuQixFQUE4QkMsS0FBOUIsRUFBcUM7QUFDOUMsVUFBTUgsR0FBTjtBQUNBLFNBQUtDLFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0EsU0FBS0UsS0FBTCxHQUFhQSxLQUFLLElBQUlQLGlCQUF0Qjs7QUFDQSxRQUFJLEtBQUtLLFVBQUwsS0FBb0IsSUFBeEIsRUFBOEI7QUFDNUIsV0FBS0EsVUFBTCxHQUFrQixFQUFsQjtBQUNEOztBQUNELFNBQUtDLFNBQUwsR0FBaUJBLFNBQVMsSUFBSUUsNkJBQWdCQyxXQUE5QztBQUNBLFNBQUtDLFdBQUwsR0FBbUIsSUFBbkI7QUFDRDs7QUFFYSxNQUFWQyxVQUFVLEdBQUk7QUFDaEIsV0FBTyxLQUFLRCxXQUFMLElBQW9CLEtBQUtFLEtBQWhDO0FBQ0Q7O0FBRWEsTUFBVkQsVUFBVSxDQUFFRSxLQUFGLEVBQVM7QUFDckIsU0FBS0gsV0FBTCxHQUFtQkcsS0FBbkI7QUFDRDs7QUFsQnlDOzs7O0FBeUJyQyxNQUFNQyxpQkFBTixTQUFnQ2IsYUFBaEMsQ0FBOEM7QUFDeEMsU0FBSmMsSUFBSSxHQUFJO0FBQ2IsV0FBTyxDQUFQ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QVcsQ0FBQy9FLEdBQUQsRUFBTXNFLE1BQU0sQ0FBQ3pCLG1CQUFiLENBRGYsRUFDa0Q7QUFFdkRVLElBQUFBLFVBQVUsR0FBR2hFLDZCQUFnQmlHLGVBQTdCO0FBQ0QsR0FKTSxNQUlBLElBQUlULFdBQVcsQ0FBQy9FLEdBQUQsRUFBTXNFLE1BQU0sQ0FBQ3pFLGlCQUFiLENBQWYsRUFBZ0Q7QUFFckQwRCxJQUFBQSxVQUFVLEdBQUdoRSw2QkFBZ0JRLFNBQTdCO0FBQ0Q7O0FBR0QsU0FBTyxDQUFDd0QsVUFBRCxFQUFhK0IsV0FBYixDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRVM2RXJyb3IgZnJvbSAnZXM2LWVycm9yJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsLCBsb2dnZXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgU3RhdHVzQ29kZXMgYXMgSFRUUFN0YXR1c0NvZGVzIH0gZnJvbSAnaHR0cC1zdGF0dXMtY29kZXMnO1xuXG5jb25zdCBtanNvbndwTG9nID0gbG9nZ2VyLmdldExvZ2dlcignTUpTT05XUCcpO1xuY29uc3QgdzNjTG9nID0gbG9nZ2VyLmdldExvZ2dlcignVzNDJyk7XG5cbmNvbnN0IFczQ19VTktOT1dOX0VSUk9SID0gJ3Vua25vd24gZXJyb3InO1xuXG4vLyBiYXNlIGVycm9yIGNsYXNzIGZvciBhbGwgb2Ygb3VyIGVycm9yc1xuZXhwb3J0IGNsYXNzIFByb3RvY29sRXJyb3IgZXh0ZW5kcyBFUzZFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtc2csIGpzb253cENvZGUsIHczY1N0YXR1cywgZXJyb3IpIHtcbiAgICBzdXBlcihtc2cpO1xuICAgIHRoaXMuanNvbndwQ29kZSA9IGpzb253cENvZGU7XG4gICAgdGhpcy5lcnJvciA9IGVycm9yIHx8IFczQ19VTktOT1dOX0VSUk9SO1xuICAgIGlmICh0aGlzLmpzb253cENvZGUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuanNvbndwQ29kZSA9IDEzO1xuICAgIH1cbiAgICB0aGlzLnczY1N0YXR1cyA9IHczY1N0YXR1cyB8fCBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gICAgdGhpcy5fc3RhY2t0cmFjZSA9IG51bGw7XG4gIH1cblxuICBnZXQgc3RhY2t0cmFjZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWNrdHJhY2UgfHwgdGhpcy5zdGFjaztcbiAgfVxuXG4gIHNldCBzdGFja3RyYWNlICh2YWx1ZSkge1xuICAgIHRoaXMuX3N0YWNrdHJhY2UgPSB2YWx1ZTtcbiAgfVxufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vU2VsZW5pdW1IUS9zZWxlbml1bS9ibG9iLzE3NmI0YTllMzA4MmFjMTkyNmYyYTQzNmViMzQ2NzYwYzM3YTU5OTgvamF2YS9jbGllbnQvc3JjL29yZy9vcGVucWEvc2VsZW5pdW0vcmVtb3RlL0Vycm9yQ29kZXMuamF2YSNMMjE1XG4vLyBodHRwczovL2dpdGh1Yi5jb20vU2VsZW5pdW1IUS9zZWxlbml1bS9pc3N1ZXMvNTU2MiNpc3N1ZWNvbW1lbnQtMzcwMzc5NDcwXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViZHJpdmVyL3dlYmRyaXZlci1zcGVjLmh0bWwjZGZuLWVycm9yLWNvZGVcblxuZXhwb3J0IGNsYXNzIE5vU3VjaERyaXZlckVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNjtcbiAgfVxuICAvLyBXM0MgRXJyb3IgaXMgY2FsbGVkIEludmFsaWRTZXNzaW9uSURcbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgc2Vzc2lvbiBpZCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQSBzZXNzaW9uIGlzIGVpdGhlciB0ZXJtaW5hdGVkIG9yIG5vdCBzdGFydGVkJywgTm9TdWNoRHJpdmVyRXJyb3IuY29kZSgpLFxuICAgICAgICAgIE5vU3VjaERyaXZlckVycm9yLnczY1N0YXR1cygpLCBOb1N1Y2hEcml2ZXJFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoRWxlbWVudEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCBlbGVtZW50JztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBlbGVtZW50IGNvdWxkIG5vdCBiZSBsb2NhdGVkIG9uIHRoZSBwYWdlIHVzaW5nIHRoZSBnaXZlbiAnICtcbiAgICAgICAgICAnc2VhcmNoIHBhcmFtZXRlcnMuJywgTm9TdWNoRWxlbWVudEVycm9yLmNvZGUoKSwgTm9TdWNoRWxlbWVudEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIE5vU3VjaEVsZW1lbnRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoRnJhbWVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDg7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ25vIHN1Y2ggZnJhbWUnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0EgcmVxdWVzdCB0byBzd2l0Y2ggdG8gYSBmcmFtZSBjb3VsZCBub3QgYmUgc2F0aXNmaWVkIGJlY2F1c2UgJyArXG4gICAgICAgICAgJ3RoZSBmcmFtZSBjb3VsZCBub3QgYmUgZm91bmQuJywgTm9TdWNoRnJhbWVFcnJvci5jb2RlKCksXG4gICAgICAgICAgTm9TdWNoRnJhbWVFcnJvci53M2NTdGF0dXMoKSwgTm9TdWNoRnJhbWVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5rbm93bkNvbW1hbmRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDk7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3Vua25vd24gY29tbWFuZCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGhlIHJlcXVlc3RlZCByZXNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQsIG9yIGEgcmVxdWVzdCB3YXMgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkIHVzaW5nIGFuIEhUVFAgbWV0aG9kIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFwcGVkICcgK1xuICAgICAgICAgICdyZXNvdXJjZS4nLCBVbmtub3duQ29tbWFuZEVycm9yLmNvZGUoKSwgVW5rbm93bkNvbW1hbmRFcnJvci53M2NTdGF0dXMoKSwgVW5rbm93bkNvbW1hbmRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAxMDtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnc3RhbGUgZWxlbWVudCByZWZlcmVuY2UnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGVsZW1lbnQgY29tbWFuZCBmYWlsZWQgYmVjYXVzZSB0aGUgcmVmZXJlbmNlZCBlbGVtZW50IGlzIG5vICcgK1xuICAgICAgICAgICdsb25nZXIgYXR0YWNoZWQgdG8gdGhlIERPTS4nLCBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvci5jb2RlKCksXG4gICAgICAgICAgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IudzNjU3RhdHVzKCksIFN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50Tm90VmlzaWJsZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTE7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnZWxlbWVudCBub3QgdmlzaWJsZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gZWxlbWVudCBjb21tYW5kIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyAnICtcbiAgICAgICAgICAnbm90IHZpc2libGUgb24gdGhlIHBhZ2UuJywgRWxlbWVudE5vdFZpc2libGVFcnJvci5jb2RlKCksXG4gICAgICAgICAgRWxlbWVudE5vdFZpc2libGVFcnJvci53M2NTdGF0dXMoKSwgRWxlbWVudE5vdFZpc2libGVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTI7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBlbGVtZW50IHN0YXRlJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBbiBlbGVtZW50IGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzICcgK1xuICAgICAgICAgICdpbiBhbiBpbnZhbGlkIHN0YXRlIChlLmcuIGF0dGVtcHRpbmcgdG8gY2xpY2sgYSBkaXNhYmxlZCBlbGVtZW50KS4nLFxuICAgICAgICAgIEludmFsaWRFbGVtZW50U3RhdGVFcnJvci5jb2RlKCksIEludmFsaWRFbGVtZW50U3RhdGVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBJbnZhbGlkRWxlbWVudFN0YXRlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVua25vd25FcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDEzO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuIFczQ19VTktOT1dOX0VSUk9SO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnJvck9yTWVzc2FnZSkge1xuICAgIGNvbnN0IG9yaWdNZXNzYWdlID0gXy5pc1N0cmluZygoZXJyb3JPck1lc3NhZ2UgfHwge30pLm1lc3NhZ2UpXG4gICAgICA/IGVycm9yT3JNZXNzYWdlLm1lc3NhZ2VcbiAgICAgIDogZXJyb3JPck1lc3NhZ2U7XG4gICAgY29uc3QgbWVzc2FnZSA9ICdBbiB1bmtub3duIHNlcnZlci1zaWRlIGVycm9yIG9jY3VycmVkIHdoaWxlIHByb2Nlc3NpbmcgdGhlIGNvbW1hbmQuJyArXG4gICAgICAob3JpZ01lc3NhZ2UgPyBgIE9yaWdpbmFsIGVycm9yOiAke29yaWdNZXNzYWdlfWAgOiAnJyk7XG4gICAgc3VwZXIobWVzc2FnZSwgVW5rbm93bkVycm9yLmNvZGUoKSwgVW5rbm93bkVycm9yLnczY1N0YXR1cygpLCBVbmtub3duRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVua25vd25NZXRob2RFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDQwNTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk1FVEhPRF9OT1RfQUxMT1dFRDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5rbm93biBtZXRob2QnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ1RoZSByZXF1ZXN0ZWQgY29tbWFuZCBtYXRjaGVkIGEga25vd24gVVJMIGJ1dCBkaWQgbm90IG1hdGNoIGFuIG1ldGhvZCBmb3IgdGhhdCBVUkwnLFxuICAgICAgICAgIFVua25vd25NZXRob2RFcnJvci5jb2RlKCksIFVua25vd25NZXRob2RFcnJvci53M2NTdGF0dXMoKSwgVW5rbm93bk1ldGhvZEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNDA1O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bnN1cHBvcnRlZCBvcGVyYXRpb24nO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0Egc2VydmVyLXNpZGUgZXJyb3Igb2NjdXJyZWQuIENvbW1hbmQgY2Fubm90IGJlIHN1cHBvcnRlZC4nLFxuICAgICAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IuY29kZSgpLCBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDE1O1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdlbGVtZW50IG5vdCBzZWxlY3RhYmxlJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGF0dGVtcHQgd2FzIG1hZGUgdG8gc2VsZWN0IGFuIGVsZW1lbnQgdGhhdCBjYW5ub3QgYmUgc2VsZWN0ZWQuJyxcbiAgICAgICAgICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IuY29kZSgpLCBFbGVtZW50SXNOb3RTZWxlY3RhYmxlRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNjQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2VsZW1lbnQgY2xpY2sgaW50ZXJjZXB0ZWQnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnVGhlIEVsZW1lbnQgQ2xpY2sgY29tbWFuZCBjb3VsZCBub3QgYmUgY29tcGxldGVkIGJlY2F1c2UgdGhlIGVsZW1lbnQgcmVjZWl2aW5nICcgK1xuICAgICAgICAgICd0aGUgZXZlbnRzIGlzIG9ic2N1cmluZyB0aGUgZWxlbWVudCB0aGF0IHdhcyByZXF1ZXN0ZWQgY2xpY2tlZCcsXG4gICAgICAgICAgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvci5jb2RlKCksIEVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gNjA7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2VsZW1lbnQgbm90IGludGVyYWN0YWJsZSc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIG5vdCBwb2ludGVyLSBvciBrZXlib2FyZCBpbnRlcmFjdGFibGUnLFxuICAgICAgICAgIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvci5jb2RlKCksIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvci53M2NTdGF0dXMoKSxcbiAgICAgICAgICBFbGVtZW50Tm90SW50ZXJhY3RhYmxlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluc2VjdXJlQ2VydGlmaWNhdGVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW5zZWN1cmUgY2VydGlmaWNhdGUnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ05hdmlnYXRpb24gY2F1c2VkIHRoZSB1c2VyIGFnZW50IHRvIGhpdCBhIGNlcnRpZmljYXRlIHdhcm5pbmcsIHdoaWNoIGlzIHVzdWFsbHkgdGhlIHJlc3VsdCBvZiBhbiBleHBpcmVkIG9yIGludmFsaWQgVExTIGNlcnRpZmljYXRlJyxcbiAgICAgIEVsZW1lbnRJc05vdFNlbGVjdGFibGVFcnJvci5jb2RlKCksIG51bGwsIEluc2VjdXJlQ2VydGlmaWNhdGVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSmF2YVNjcmlwdEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMTc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2phdmFzY3JpcHQgZXJyb3InO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyB1c2VyIHN1cHBsaWVkIEphdmFTY3JpcHQuJyxcbiAgICAgICAgICBKYXZhU2NyaXB0RXJyb3IuY29kZSgpLCBKYXZhU2NyaXB0RXJyb3IudzNjU3RhdHVzKCksIEphdmFTY3JpcHRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgWFBhdGhMb29rdXBFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDE5O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgc2VsZWN0b3InO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNlYXJjaGluZyBmb3IgYW4gZWxlbWVudCBieSBYUGF0aC4nLFxuICAgICAgICAgIFhQYXRoTG9va3VwRXJyb3IuY29kZSgpLCBYUGF0aExvb2t1cEVycm9yLnczY1N0YXR1cygpLCBYUGF0aExvb2t1cEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyMTtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLlJFUVVFU1RfVElNRU9VVDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndGltZW91dCc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQW4gb3BlcmF0aW9uIGRpZCBub3QgY29tcGxldGUgYmVmb3JlIGl0cyB0aW1lb3V0IGV4cGlyZWQuJyxcbiAgICAgICAgICBUaW1lb3V0RXJyb3IuY29kZSgpLCBUaW1lb3V0RXJyb3IudzNjU3RhdHVzKCksIFRpbWVvdXRFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoV2luZG93RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyMztcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCB3aW5kb3cnO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuTk9UX0ZPVU5EO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0EgcmVxdWVzdCB0byBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgd2luZG93IGNvdWxkIG5vdCBiZSBzYXRpc2ZpZWQgJyArXG4gICAgICAgICAgJ2JlY2F1c2UgdGhlIHdpbmRvdyBjb3VsZCBub3QgYmUgZm91bmQuJywgTm9TdWNoV2luZG93RXJyb3IuY29kZSgpLFxuICAgICAgICAgIE5vU3VjaFdpbmRvd0Vycm9yLnczY1N0YXR1cygpLCBOb1N1Y2hXaW5kb3dFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA2MTtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBhcmd1bWVudCc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgY29tbWFuZCBhcmUgZWl0aGVyIGludmFsaWQgb3IgbWFsZm9ybWVkJyxcbiAgICAgICAgICBJbnZhbGlkQXJndW1lbnRFcnJvci5jb2RlKCksIEludmFsaWRBcmd1bWVudEVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIEludmFsaWRBcmd1bWVudEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQ29va2llRG9tYWluRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyNDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnaW52YWxpZCBjb29raWUgZG9tYWluJztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGlsbGVnYWwgYXR0ZW1wdCB3YXMgbWFkZSB0byBzZXQgYSBjb29raWUgdW5kZXIgYSBkaWZmZXJlbnQgJyArXG4gICAgICAgICAgJ2RvbWFpbiB0aGFuIHRoZSBjdXJyZW50IHBhZ2UuJywgSW52YWxpZENvb2tpZURvbWFpbkVycm9yLmNvZGUoKSxcbiAgICAgICAgICBJbnZhbGlkQ29va2llRG9tYWluRXJyb3IudzNjU3RhdHVzKCksIEludmFsaWRDb29raWVEb21haW5FcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9TdWNoQ29va2llRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA2MjtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAnbm8gc3VjaCBjb29raWUnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ05vIGNvb2tpZSBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCBuYW1lIHdhcyBmb3VuZCBhbW9uZ3N0IHRoZSBhc3NvY2lhdGVkIGNvb2tpZXMgb2YgdGhlIGN1cnJlbnQgYnJvd3NpbmcgY29udGV4dOKAmXMgYWN0aXZlIGRvY3VtZW50JyxcbiAgICAgICAgICBOb1N1Y2hDb29raWVFcnJvci5jb2RlKCksIE5vU3VjaENvb2tpZUVycm9yLnczY1N0YXR1cygpLCBOb1N1Y2hDb29raWVFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5hYmxlVG9TZXRDb29raWVFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDI1O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bmFibGUgdG8gc2V0IGNvb2tpZSc7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnQSByZXF1ZXN0IHRvIHNldCBhIGNvb2tpZVxcJ3MgdmFsdWUgY291bGQgbm90IGJlIHNhdGlzZmllZC4nLFxuICAgICAgICAgIFVuYWJsZVRvU2V0Q29va2llRXJyb3IuY29kZSgpLCBVbmFibGVUb1NldENvb2tpZUVycm9yLnczY1N0YXR1cygpLCBVbmFibGVUb1NldENvb2tpZUVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IgZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiAyNjtcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5leHBlY3RlZCBhbGVydCBvcGVuJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIG1vZGFsIGRpYWxvZyB3YXMgb3BlbiwgYmxvY2tpbmcgdGhpcyBvcGVyYXRpb24nLFxuICAgICAgICAgIFVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvci5jb2RlKCksIFVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvci53M2NTdGF0dXMoKSwgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb0FsZXJ0T3BlbkVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMjc7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ25vIHN1Y2ggYWxlcnQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIGF0dGVtcHQgd2FzIG1hZGUgdG8gb3BlcmF0ZSBvbiBhIG1vZGFsIGRpYWxvZyB3aGVuIG9uZSAnICtcbiAgICAgICAgICAnd2FzIG5vdCBvcGVuLicsIE5vQWxlcnRPcGVuRXJyb3IuY29kZSgpLCBOb0FsZXJ0T3BlbkVycm9yLnczY1N0YXR1cygpLCBOb0FsZXJ0T3BlbkVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb1N1Y2hBbGVydEVycm9yIGV4dGVuZHMgTm9BbGVydE9wZW5FcnJvciB7fVxuXG5leHBvcnQgY2xhc3MgU2NyaXB0VGltZW91dEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMjg7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5SRVFVRVNUX1RJTUVPVVQ7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3NjcmlwdCB0aW1lb3V0JztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIHNjcmlwdCBkaWQgbm90IGNvbXBsZXRlIGJlZm9yZSBpdHMgdGltZW91dCBleHBpcmVkLicsXG4gICAgICAgICAgU2NyaXB0VGltZW91dEVycm9yLmNvZGUoKSwgU2NyaXB0VGltZW91dEVycm9yLnczY1N0YXR1cygpLCBTY3JpcHRUaW1lb3V0RXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDI5O1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgY29vcmRpbmF0ZXMnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ1RoZSBjb29yZGluYXRlcyBwcm92aWRlZCB0byBhbiBpbnRlcmFjdGlvbnMgb3BlcmF0aW9uIGFyZSBpbnZhbGlkLicsXG4gICAgICAgICAgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yLmNvZGUoKSwgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlc0Vycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvci5lcnJvcigpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZENvb3JkaW5hdGVzRXJyb3IgZXh0ZW5kcyBJbnZhbGlkRWxlbWVudENvb3JkaW5hdGVzRXJyb3Ige31cblxuZXhwb3J0IGNsYXNzIElNRU5vdEF2YWlsYWJsZUVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzA7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3Vuc3VwcG9ydGVkIG9wZXJhdGlvbic7XG4gIH1cbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnSU1FIHdhcyBub3QgYXZhaWxhYmxlLicsIElNRU5vdEF2YWlsYWJsZUVycm9yLmNvZGUoKSxcbiAgICAgICAgICBJTUVOb3RBdmFpbGFibGVFcnJvci53M2NTdGF0dXMoKSwgSU1FTm90QXZhaWxhYmxlRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDMxO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICB9XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICd1bnN1cHBvcnRlZCBvcGVyYXRpb24nO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FuIElNRSBlbmdpbmUgY291bGQgbm90IGJlIHN0YXJ0ZWQuJyxcbiAgICAgICAgICBJTUVFbmdpbmVBY3RpdmF0aW9uRmFpbGVkRXJyb3IuY29kZSgpLCBJTUVFbmdpbmVBY3RpdmF0aW9uRmFpbGVkRXJyb3IudzNjU3RhdHVzKCksXG4gICAgICAgICAgSU1FRW5naW5lQWN0aXZhdGlvbkZhaWxlZEVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkU2VsZWN0b3JFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDMyO1xuICB9XG4gIHN0YXRpYyB3M2NTdGF0dXMgKCkge1xuICAgIHJldHVybiBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ2ludmFsaWQgc2VsZWN0b3InO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ0FyZ3VtZW50IHdhcyBhbiBpbnZhbGlkIHNlbGVjdG9yIChlLmcuIFhQYXRoL0NTUykuJyxcbiAgICAgICAgICBJbnZhbGlkU2VsZWN0b3JFcnJvci5jb2RlKCksIEludmFsaWRTZWxlY3RvckVycm9yLnczY1N0YXR1cygpLFxuICAgICAgICAgIEludmFsaWRTZWxlY3RvckVycm9yLmVycm9yKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uTm90Q3JlYXRlZEVycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzM7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ3Nlc3Npb24gbm90IGNyZWF0ZWQnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChkZXRhaWxzKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSAnQSBuZXcgc2Vzc2lvbiBjb3VsZCBub3QgYmUgY3JlYXRlZC4nO1xuICAgIGlmIChkZXRhaWxzKSB7XG4gICAgICBtZXNzYWdlICs9IGAgRGV0YWlsczogJHtkZXRhaWxzfWA7XG4gICAgfVxuXG4gICAgc3VwZXIobWVzc2FnZSwgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvci5jb2RlKCksIFNlc3Npb25Ob3RDcmVhdGVkRXJyb3IudzNjU3RhdHVzKCksIFNlc3Npb25Ob3RDcmVhdGVkRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1vdmVUYXJnZXRPdXRPZkJvdW5kc0Vycm9yIGV4dGVuZHMgUHJvdG9jb2xFcnJvciB7XG4gIHN0YXRpYyBjb2RlICgpIHtcbiAgICByZXR1cm4gMzQ7XG4gIH1cbiAgc3RhdGljIHczY1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIH1cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICByZXR1cm4gJ21vdmUgdGFyZ2V0IG91dCBvZiBib3VuZHMnO1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ1RhcmdldCBwcm92aWRlZCBmb3IgYSBtb3ZlIGFjdGlvbiBpcyBvdXQgb2YgYm91bmRzLicsXG4gICAgICAgICAgTW92ZVRhcmdldE91dE9mQm91bmRzRXJyb3IuY29kZSgpLCBNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvci53M2NTdGF0dXMoKSwgTW92ZVRhcmdldE91dE9mQm91bmRzRXJyb3IuZXJyb3IoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vU3VjaENvbnRleHRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDM1O1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ05vIHN1Y2ggY29udGV4dCBmb3VuZC4nLCBOb1N1Y2hDb250ZXh0RXJyb3IuY29kZSgpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZENvbnRleHRFcnJvciBleHRlbmRzIFByb3RvY29sRXJyb3Ige1xuICBzdGF0aWMgY29kZSAoKSB7XG4gICAgcmV0dXJuIDM2O1xuICB9XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ1RoYXQgY29tbWFuZCBjb3VsZCBub3QgYmUgZXhlY3V0ZWQgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4nLFxuICAgICAgICAgIEludmFsaWRDb250ZXh0RXJyb3IuY29kZSgpKTtcbiAgfVxufVxuXG4vLyBUaGVzZSBhcmUgYWxpYXNlcyBmb3IgVW5rbm93bk1ldGhvZEVycm9yXG5leHBvcnQgY2xhc3MgTm90WWV0SW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIFVua25vd25NZXRob2RFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChlcnIpIHtcbiAgICBzdXBlcihlcnIgfHwgJ01ldGhvZCBoYXMgbm90IHlldCBiZWVuIGltcGxlbWVudGVkJyk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgVW5rbm93bk1ldGhvZEVycm9yIHtcbiAgY29uc3RydWN0b3IgKGVycikge1xuICAgIHN1cGVyKGVyciB8fCAnTWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmFibGVUb0NhcHR1cmVTY3JlZW4gZXh0ZW5kcyBQcm90b2NvbEVycm9yIHtcbiAgc3RhdGljIGNvZGUgKCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuICBzdGF0aWMgdzNjU3RhdHVzICgpIHtcbiAgICByZXR1cm4gSFRUUFN0YXR1c0NvZGVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgfVxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIHJldHVybiAndW5hYmxlIHRvIGNhcHR1cmUgc2NyZWVuJztcbiAgfVxuICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgc3VwZXIoZXJyIHx8ICdBIHNjcmVlbiBjYXB0dXJlIHdhcyBtYWRlIGltcG9zc2libGUnLFxuICAgICAgICAgIFVuYWJsZVRvQ2FwdHVyZVNjcmVlbi5jb2RlKCksIFVuYWJsZVRvQ2FwdHVyZVNjcmVlbi53M2NTdGF0dXMoKSwgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLmVycm9yKCkpO1xuICB9XG59XG5cblxuLy8gRXF1aXZhbGVudCB0byBXM0MgSW52YWxpZEFyZ3VtZW50RXJyb3JcbmV4cG9ydCBjbGFzcyBCYWRQYXJhbWV0ZXJzRXJyb3IgZXh0ZW5kcyBFUzZFcnJvciB7XG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgcmV0dXJuICdpbnZhbGlkIGFyZ3VtZW50JztcbiAgfVxuICBjb25zdHJ1Y3RvciAocmVxdWlyZWRQYXJhbXMsIGFjdHVhbFBhcmFtcywgZXJyTWVzc2FnZSkge1xuICAgIGxldCBtZXNzYWdlO1xuICAgIGlmICghZXJyTWVzc2FnZSkge1xuICAgICAgbWVzc2FnZSA9IGBQYXJhbWV0ZXJzIHdlcmUgaW5jb3JyZWN0LiBXZSB3YW50ZWQgYCArXG4gICAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkocmVxdWlyZWRQYXJhbXMpfSBhbmQgeW91IGAgK1xuICAgICAgICAgIGBzZW50ICR7SlNPTi5zdHJpbmdpZnkoYWN0dWFsUGFyYW1zKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXNzYWdlID0gYFBhcmFtZXRlcnMgd2VyZSBpbmNvcnJlY3QuIFlvdSBzZW50ICR7SlNPTi5zdHJpbmdpZnkoYWN0dWFsUGFyYW1zKX0sICR7ZXJyTWVzc2FnZX1gO1xuICAgIH1cbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLnczY1N0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcbiAgfVxufVxuXG4vKipcbiAqIFByb3h5UmVxdWVzdEVycm9yIGlzIGEgY3VzdG9tIGVycm9yIGFuZCB3aWxsIGJlIHRocm93biB1cCBvbiB1bnN1Y2Nlc3NmdWwgcHJveHkgcmVxdWVzdCBhbmRcbiAqIHdpbGwgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJveHkgZmFpbHVyZS5cbiAqIEluIGNhc2Ugb2YgUHJveHlSZXF1ZXN0RXJyb3Igc2hvdWxkIGZldGNoIHRoZSBhY3R1YWwgZXJyb3IgYnkgY2FsbGluZyBgZ2V0QWN0dWFsRXJyb3IoKWBcbiAqIGZvciBwcm94eSBmYWlsdXJlIHRvIGdlbmVyYXRlIHRoZSBjbGllbnQgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm94eVJlcXVlc3RFcnJvciBleHRlbmRzIEVTNkVycm9yIHtcbiAgY29uc3RydWN0b3IgKGVyciwgcmVzcG9uc2VFcnJvciwgaHR0cFN0YXR1cykge1xuICAgIGxldCByZXNwb25zZUVycm9yT2JqID0gdXRpbC5zYWZlSnNvblBhcnNlKHJlc3BvbnNlRXJyb3IpO1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmopKSB7XG4gICAgICByZXNwb25zZUVycm9yT2JqID0ge307XG4gICAgfVxuICAgIGxldCBvcmlnTWVzc2FnZSA9IF8uaXNTdHJpbmcocmVzcG9uc2VFcnJvcikgPyByZXNwb25zZUVycm9yIDogJyc7XG4gICAgaWYgKCFfLmlzRW1wdHkocmVzcG9uc2VFcnJvck9iaikpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpKSB7XG4gICAgICAgIG9yaWdNZXNzYWdlID0gcmVzcG9uc2VFcnJvck9iai52YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpICYmIF8uaXNTdHJpbmcocmVzcG9uc2VFcnJvck9iai52YWx1ZS5tZXNzYWdlKSkge1xuICAgICAgICBvcmlnTWVzc2FnZSA9IHJlc3BvbnNlRXJyb3JPYmoudmFsdWUubWVzc2FnZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIoXy5pc0VtcHR5KGVycikgPyBgUHJveHkgcmVxdWVzdCB1bnN1Y2Nlc3NmdWwuICR7b3JpZ01lc3NhZ2V9YCA6IGVycik7XG5cbiAgICB0aGlzLnczY1N0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5CQURfUkVRVUVTVDtcblxuICAgIC8vIElmIHRoZSByZXNwb25zZSBlcnJvciBpcyBhbiBvYmplY3QgYW5kIHZhbHVlIGlzIGFuIG9iamVjdCwgaXQncyBhIFczQyBlcnJvciAoZm9yIEpTT05XUCB2YWx1ZSBpcyBhIHN0cmluZylcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlRXJyb3JPYmoudmFsdWUpICYmIF8uaGFzKHJlc3BvbnNlRXJyb3JPYmoudmFsdWUsICdlcnJvcicpKSB7XG4gICAgICB0aGlzLnczYyA9IHJlc3BvbnNlRXJyb3JPYmoudmFsdWU7XG4gICAgICB0aGlzLnczY1N0YXR1cyA9IGh0dHBTdGF0dXMgfHwgSFRUUFN0YXR1c0NvZGVzLkJBRF9SRVFVRVNUO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmpzb253cCA9IHJlc3BvbnNlRXJyb3JPYmo7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWN0dWFsRXJyb3IgKCkge1xuICAgIC8vIElmIGl0J3MgTUpTT05XUCBlcnJvciwgcmV0dXJucyBhY3R1YWwgZXJyb3IgY2F1c2UgZm9yIHJlcXVlc3QgZmFpbHVyZSBiYXNlZCBvbiBganNvbndwLnN0YXR1c2BcbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLmpzb253cD8uc3RhdHVzKSAmJiB1dGlsLmhhc1ZhbHVlKHRoaXMuanNvbndwPy52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSh0aGlzLmpzb253cC5zdGF0dXMsIHRoaXMuanNvbndwLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy53M2MpICYmIF8uaXNOdW1iZXIodGhpcy53M2NTdGF0dXMpICYmIHRoaXMudzNjU3RhdHVzID49IDMwMCkge1xuICAgICAgcmV0dXJuIGVycm9yRnJvbVczQ0pzb25Db2RlKHRoaXMudzNjLmVycm9yLCB0aGlzLnczYy5tZXNzYWdlIHx8IHRoaXMubWVzc2FnZSwgdGhpcy53M2Muc3RhY2t0cmFjZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVW5rbm93bkVycm9yKHRoaXMubWVzc2FnZSk7XG4gIH1cbn1cbi8vIG1hcCBvZiBlcnJvciBjbGFzcyBuYW1lIHRvIGVycm9yIGNsYXNzXG5jb25zdCBlcnJvcnMgPSB7Tm90WWV0SW1wbGVtZW50ZWRFcnJvcixcbiAgICAgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLFxuICAgICAgICAgICAgICAgIEJhZFBhcmFtZXRlcnNFcnJvcixcbiAgICAgICAgICAgICAgICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hEcml2ZXJFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hFbGVtZW50RXJyb3IsXG4gICAgICAgICAgICAgICAgVW5rbm93bkNvbW1hbmRFcnJvcixcbiAgICAgICAgICAgICAgICBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcixcbiAgICAgICAgICAgICAgICBFbGVtZW50Tm90VmlzaWJsZUVycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRFbGVtZW50U3RhdGVFcnJvcixcbiAgICAgICAgICAgICAgICBVbmtub3duRXJyb3IsXG4gICAgICAgICAgICAgICAgRWxlbWVudElzTm90U2VsZWN0YWJsZUVycm9yLFxuICAgICAgICAgICAgICAgIEVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3IsXG4gICAgICAgICAgICAgICAgRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yLFxuICAgICAgICAgICAgICAgIEluc2VjdXJlQ2VydGlmaWNhdGVFcnJvcixcbiAgICAgICAgICAgICAgICBKYXZhU2NyaXB0RXJyb3IsXG4gICAgICAgICAgICAgICAgWFBhdGhMb29rdXBFcnJvcixcbiAgICAgICAgICAgICAgICBUaW1lb3V0RXJyb3IsXG4gICAgICAgICAgICAgICAgTm9TdWNoV2luZG93RXJyb3IsXG4gICAgICAgICAgICAgICAgTm9TdWNoQ29va2llRXJyb3IsXG4gICAgICAgICAgICAgICAgSW52YWxpZENvb2tpZURvbWFpbkVycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRDb29yZGluYXRlc0Vycm9yLFxuICAgICAgICAgICAgICAgIFVuYWJsZVRvU2V0Q29va2llRXJyb3IsXG4gICAgICAgICAgICAgICAgVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yLFxuICAgICAgICAgICAgICAgIE5vQWxlcnRPcGVuRXJyb3IsXG4gICAgICAgICAgICAgICAgU2NyaXB0VGltZW91dEVycm9yLFxuICAgICAgICAgICAgICAgIEludmFsaWRFbGVtZW50Q29vcmRpbmF0ZXNFcnJvcixcbiAgICAgICAgICAgICAgICBJTUVOb3RBdmFpbGFibGVFcnJvcixcbiAgICAgICAgICAgICAgICBJTUVFbmdpbmVBY3RpdmF0aW9uRmFpbGVkRXJyb3IsXG4gICAgICAgICAgICAgICAgSW52YWxpZFNlbGVjdG9yRXJyb3IsXG4gICAgICAgICAgICAgICAgU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcixcbiAgICAgICAgICAgICAgICBNb3ZlVGFyZ2V0T3V0T2ZCb3VuZHNFcnJvcixcbiAgICAgICAgICAgICAgICBOb1N1Y2hBbGVydEVycm9yLFxuICAgICAgICAgICAgICAgIE5vU3VjaENvbnRleHRFcnJvcixcbiAgICAgICAgICAgICAgICBJbnZhbGlkQ29udGV4dEVycm9yLFxuICAgICAgICAgICAgICAgIE5vU3VjaEZyYW1lRXJyb3IsXG4gICAgICAgICAgICAgICAgVW5hYmxlVG9DYXB0dXJlU2NyZWVuLFxuICAgICAgICAgICAgICAgIFVua25vd25NZXRob2RFcnJvcixcbiAgICAgICAgICAgICAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yLFxuICAgICAgICAgICAgICAgIFByb3h5UmVxdWVzdEVycm9yfTtcblxuLy8gbWFwIG9mIGVycm9yIGNvZGUgdG8gZXJyb3IgY2xhc3NcbmNvbnN0IGpzb253cEVycm9yQ29kZU1hcCA9IHt9O1xuZm9yIChsZXQgRXJyb3JDbGFzcyBvZiBfLnZhbHVlcyhlcnJvcnMpKSB7XG4gIGlmIChFcnJvckNsYXNzLmNvZGUpIHtcbiAgICBqc29ud3BFcnJvckNvZGVNYXBbRXJyb3JDbGFzcy5jb2RlKCldID0gRXJyb3JDbGFzcztcbiAgfVxufVxuXG5jb25zdCB3M2NFcnJvckNvZGVNYXAgPSB7fTtcbmZvciAobGV0IEVycm9yQ2xhc3Mgb2YgXy52YWx1ZXMoZXJyb3JzKSkge1xuICBpZiAoRXJyb3JDbGFzcy5lcnJvcikge1xuICAgIHczY0Vycm9yQ29kZU1hcFtFcnJvckNsYXNzLmVycm9yKCldID0gRXJyb3JDbGFzcztcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1Vua25vd25FcnJvciAoZXJyKSB7XG4gIHJldHVybiAhZXJyLmNvbnN0cnVjdG9yLm5hbWUgfHxcbiAgICAgICAgICFfLnZhbHVlcyhlcnJvcnMpLmZpbmQoZnVuY3Rpb24gZXF1YWxOYW1lcyAoZXJyb3IpIHtcbiAgICAgICAgICAgcmV0dXJuIGVycm9yLm5hbWUgPT09IGVyci5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzRXJyb3JUeXBlIChlcnIsIHR5cGUpIHtcbiAgLy8gYG5hbWVgIHByb3BlcnR5IGlzIHRoZSBjb25zdHJ1Y3RvciBuYW1lXG4gIGlmICh0eXBlLm5hbWUgPT09IFByb3RvY29sRXJyb3IubmFtZSkge1xuICAgIC8vIGBqc29ud3BDb2RlYCBpcyBgMGAgb24gc3VjY2Vzc1xuICAgIHJldHVybiAhIWVyci5qc29ud3BDb2RlO1xuICB9IGVsc2UgaWYgKHR5cGUubmFtZSA9PT0gUHJveHlSZXF1ZXN0RXJyb3IubmFtZSkge1xuICAgIC8vIGBzdGF0dXNgIGlzIGAwYCBvbiBzdWNjZXNzXG4gICAgaWYgKGVyci5qc29ud3ApIHtcbiAgICAgIHJldHVybiAhIWVyci5qc29ud3Auc3RhdHVzO1xuICAgIH1cblxuICAgIGlmIChfLmlzUGxhaW5PYmplY3QoZXJyLnczYykpIHtcbiAgICAgIHJldHVybiBfLmlzTnVtYmVyKGVyci53M2NTdGF0dXMpICYmIGVyci53M2NTdGF0dXMgPj0gMzAwO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZXJyLmNvbnN0cnVjdG9yLm5hbWUgPT09IHR5cGUubmFtZTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbiBlcnJvciBkZXJpdmVkIGZyb20gTUpTT05XUCBzdGF0dXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlIEpTT05XUCBzdGF0dXMgY29kZVxuICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSB2YWx1ZSBUaGUgZXJyb3IgbWVzc2FnZSwgb3IgYW4gb2JqZWN0IHdpdGggYSBgbWVzc2FnZWAgcHJvcGVydHlcbiAqIEByZXR1cm4ge1Byb3RvY29sRXJyb3J9IFRoZSBlcnJvciB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBwcm92aWRlZCBKU09OV1Agc3RhdHVzIGNvZGVcbiAqL1xuZnVuY3Rpb24gZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUgKGNvZGUsIHZhbHVlID0gJycpIHtcbiAgLy8gaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIHB1bGwgbWVzc2FnZSBmcm9tIGl0LCBvdGhlcndpc2UgdXNlIHRoZSBwbGFpblxuICAvLyB2YWx1ZSwgb3IgZGVmYXVsdCB0byBhbiBlbXB0eSBzdHJpbmcsIGlmIG51bGxcbiAgY29uc3QgbWVzc2FnZSA9ICh2YWx1ZSB8fCB7fSkubWVzc2FnZSB8fCB2YWx1ZSB8fCAnJztcbiAgaWYgKGNvZGUgIT09IFVua25vd25FcnJvci5jb2RlKCkgJiYganNvbndwRXJyb3JDb2RlTWFwW2NvZGVdKSB7XG4gICAgbWpzb253cExvZy5kZWJ1ZyhgTWF0Y2hlZCBKU09OV1AgZXJyb3IgY29kZSAke2NvZGV9IHRvICR7anNvbndwRXJyb3JDb2RlTWFwW2NvZGVdLm5hbWV9YCk7XG4gICAgcmV0dXJuIG5ldyBqc29ud3BFcnJvckNvZGVNYXBbY29kZV0obWVzc2FnZSk7XG4gIH1cbiAgbWpzb253cExvZy5kZWJ1ZyhgTWF0Y2hlZCBKU09OV1AgZXJyb3IgY29kZSAke2NvZGV9IHRvIFVua25vd25FcnJvcmApO1xuICByZXR1cm4gbmV3IFVua25vd25FcnJvcihtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbiBlcnJvciBkZXJpdmVkIGZyb20gVzNDIEpTT04gQ29kZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgVzNDIGVycm9yIHN0cmluZyAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2hhbmRsaW5nLWVycm9ycyBgSlNPTiBFcnJvciBDb2RlYCBjb2x1bW4pXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSB0aGUgZXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHs/c3RyaW5nfSBzdGFja3RyYWNlIGFuIG9wdGlvbmFsIGVycm9yIHN0YWNrdHJhY2VcbiAqIEByZXR1cm4ge1Byb3RvY29sRXJyb3J9ICBUaGUgZXJyb3IgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIFczQyBlcnJvciBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZXJyb3JGcm9tVzNDSnNvbkNvZGUgKGNvZGUsIG1lc3NhZ2UsIHN0YWNrdHJhY2UgPSBudWxsKSB7XG4gIGlmIChjb2RlICYmIHczY0Vycm9yQ29kZU1hcFtjb2RlLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgdzNjTG9nLmRlYnVnKGBNYXRjaGVkIFczQyBlcnJvciBjb2RlICcke2NvZGV9JyB0byAke3czY0Vycm9yQ29kZU1hcFtjb2RlLnRvTG93ZXJDYXNlKCldLm5hbWV9YCk7XG4gICAgY29uc3QgcmVzdWx0RXJyb3IgPSBuZXcgdzNjRXJyb3JDb2RlTWFwW2NvZGUudG9Mb3dlckNhc2UoKV0obWVzc2FnZSk7XG4gICAgcmVzdWx0RXJyb3Iuc3RhY2t0cmFjZSA9IHN0YWNrdHJhY2U7XG4gICAgcmV0dXJuIHJlc3VsdEVycm9yO1xuICB9XG4gIHczY0xvZy5kZWJ1ZyhgTWF0Y2hlZCBXM0MgZXJyb3IgY29kZSAnJHtjb2RlfScgdG8gVW5rbm93bkVycm9yYCk7XG4gIGNvbnN0IHJlc3VsdEVycm9yID0gbmV3IFVua25vd25FcnJvcihtZXNzYWdlKTtcbiAgcmVzdWx0RXJyb3Iuc3RhY2t0cmFjZSA9IHN0YWNrdHJhY2U7XG4gIHJldHVybiByZXN1bHRFcnJvcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIEFwcGl1bSBlcnJvciB0byBwcm9wZXIgVzNDIEhUVFAgcmVzcG9uc2VcbiAqIEBwYXJhbSB7UHJvdG9jb2xFcnJvcn0gZXJyIFRoZSBlcnJvciB0aGF0IG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWRcbiAqL1xuZnVuY3Rpb24gZ2V0UmVzcG9uc2VGb3JXM0NFcnJvciAoZXJyKSB7XG4gIGxldCBodHRwU3RhdHVzO1xuXG4gIC8vIFczQyBkZWZpbmVkIGVycm9yIG1lc3NhZ2UgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2Rmbi1lcnJvci1jb2RlKVxuICBsZXQgdzNjRXJyb3JTdHJpbmc7XG5cbiAgaWYgKCFlcnIudzNjU3RhdHVzKSB7XG4gICAgZXJyID0gdXRpbC5oYXNWYWx1ZShlcnIuc3RhdHVzKVxuICAgICAgLy8gSWYgaXQncyBhIEpTT05XUCBlcnJvciwgZmluZCBjb3JyZXNwb25kaW5nIGVycm9yXG4gICAgICA/IGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlKGVyci5zdGF0dXMsIGVyci52YWx1ZSlcbiAgICAgIDogbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoZXJyLm1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLkJhZFBhcmFtZXRlcnNFcnJvcikpIHtcbiAgICAvLyByZXNwb25kIHdpdGggYSA0MDAgaWYgd2UgaGF2ZSBiYWQgcGFyYW1ldGVyc1xuICAgIHczY0xvZy5kZWJ1ZyhgQmFkIHBhcmFtZXRlcnM6ICR7ZXJyfWApO1xuICAgIHczY0Vycm9yU3RyaW5nID0gQmFkUGFyYW1ldGVyc0Vycm9yLmVycm9yKCk7XG4gIH0gZWxzZSB7XG4gICAgdzNjRXJyb3JTdHJpbmcgPSBlcnIuZXJyb3I7XG4gIH1cblxuICBodHRwU3RhdHVzID0gZXJyLnczY1N0YXR1cztcblxuICBpZiAoIXczY0Vycm9yU3RyaW5nKSB7XG4gICAgdzNjRXJyb3JTdHJpbmcgPSBVbmtub3duRXJyb3IuZXJyb3IoKTtcbiAgfVxuXG4gIGxldCBodHRwUmVzQm9keSA9IHtcbiAgICB2YWx1ZToge1xuICAgICAgZXJyb3I6IHczY0Vycm9yU3RyaW5nLFxuICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICBzdGFja3RyYWNlOiBlcnIuc3RhY2t0cmFjZSB8fCBlcnIuc3RhY2ssXG4gICAgfVxuICB9O1xuICByZXR1cm4gW2h0dHBTdGF0dXMsIGh0dHBSZXNCb2R5XTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIEFwcGl1bSBlcnJvciB0byBhIHByb3BlciBKU09OV1AgcmVzcG9uc2VcbiAqIEBwYXJhbSB7UHJvdG9jb2xFcnJvcn0gZXJyIFRoZSBlcnJvciB0byBiZSBjb252ZXJ0ZWRcbiAqL1xuZnVuY3Rpb24gZ2V0UmVzcG9uc2VGb3JKc29ud3BFcnJvciAoZXJyKSB7XG4gIGlmIChpc1Vua25vd25FcnJvcihlcnIpKSB7XG4gICAgZXJyID0gbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoZXJyKTtcbiAgfVxuICAvLyBNSlNPTldQIGVycm9ycyBhcmUgdXN1YWxseSA1MDAgc3RhdHVzIGNvZGUgc28gc2V0IGl0IHRvIHRoYXQgYnkgZGVmYXVsdFxuICBsZXQgaHR0cFN0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIGxldCBodHRwUmVzQm9keSA9IHtcbiAgICBzdGF0dXM6IGVyci5qc29ud3BDb2RlLFxuICAgIHZhbHVlOiB7XG4gICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZVxuICAgIH1cbiAgfTtcblxuICBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuQmFkUGFyYW1ldGVyc0Vycm9yKSkge1xuICAgIC8vIHJlc3BvbmQgd2l0aCBhIDQwMCBpZiB3ZSBoYXZlIGJhZCBwYXJhbWV0ZXJzXG4gICAgbWpzb253cExvZy5kZWJ1ZyhgQmFkIHBhcmFtZXRlcnM6ICR7ZXJyfWApO1xuICAgIGh0dHBTdGF0dXMgPSBIVFRQU3RhdHVzQ29kZXMuQkFEX1JFUVVFU1Q7XG4gICAgaHR0cFJlc0JvZHkgPSBlcnIubWVzc2FnZTtcbiAgfSBlbHNlIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob3RZZXRJbXBsZW1lbnRlZEVycm9yKSB8fFxuICAgICAgICAgICAgIGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IpKSB7XG4gICAgLy8gcmVzcG9uZCB3aXRoIGEgNTAxIGlmIHRoZSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkXG4gICAgaHR0cFN0YXR1cyA9IEhUVFBTdGF0dXNDb2Rlcy5OT1RfSU1QTEVNRU5URUQ7XG4gIH0gZWxzZSBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuTm9TdWNoRHJpdmVyRXJyb3IpKSB7XG4gICAgLy8gcmVzcG9uZCB3aXRoIGEgNDA0IGlmIHRoZXJlIGlzIG5vIGRyaXZlciBmb3IgdGhlIHNlc3Npb25cbiAgICBodHRwU3RhdHVzID0gSFRUUFN0YXR1c0NvZGVzLk5PVF9GT1VORDtcbiAgfVxuXG5cbiAgcmV0dXJuIFtodHRwU3RhdHVzLCBodHRwUmVzQm9keV07XG59XG5cbmV4cG9ydCB7XG4gIGVycm9ycywgaXNFcnJvclR5cGUsIGlzVW5rbm93bkVycm9yLFxuICBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSwgZXJyb3JGcm9tVzNDSnNvbkNvZGUsXG4gIGdldFJlc3BvbnNlRm9yVzNDRXJyb3IsIGdldFJlc3BvbnNlRm9ySnNvbndwRXJyb3IsXG59O1xuIl19
|