appium-mac2-driver 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/WebDriverAgentMac/WebDriverAgentLib/Routing/FBWebServer.m +7 -3
- package/WebDriverAgentMac/WebDriverAgentMac.xcodeproj/project.xcworkspace/xcuserdata/elf.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/WebDriverAgentMac/WebDriverAgentRunner/WebDriverAgentRunner.m +8 -0
- package/build/lib/wda-mac.js +26 -4
- package/lib/wda-mac.js +27 -5
- package/package.json +3 -2
|
@@ -190,9 +190,13 @@ static NSString *const FBServerURLEndMarker = @"<-ServerURLHere";
|
|
|
190
190
|
[response respondWithString:@"I-AM-ALIVE"];
|
|
191
191
|
}];
|
|
192
192
|
|
|
193
|
-
[self.server
|
|
194
|
-
|
|
195
|
-
|
|
193
|
+
[self.server delete:@"/" withBlock:^(RouteRequest *request, RouteResponse *response) {
|
|
194
|
+
@try {
|
|
195
|
+
[FBSession.activeSession kill];
|
|
196
|
+
} @finally {
|
|
197
|
+
[response respondWithString:@"Shutting down"];
|
|
198
|
+
[self.delegate webServerDidRequestShutdown:self];
|
|
199
|
+
}
|
|
196
200
|
}];
|
|
197
201
|
|
|
198
202
|
[self registerRouteHandlers:@[FBUnknownCommands.class]];
|
|
Binary file
|
|
@@ -30,6 +30,14 @@
|
|
|
30
30
|
[super setUp];
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
- (void)setUp
|
|
34
|
+
{
|
|
35
|
+
[super setUp];
|
|
36
|
+
self.continueAfterFailure = YES;
|
|
37
|
+
[self setValue:@(NO) forKey:@"_shouldSetShouldHaltWhenReceivesControl"];
|
|
38
|
+
[self setValue:@(NO) forKey:@"_shouldHaltWhenReceivesControl"];
|
|
39
|
+
}
|
|
40
|
+
|
|
33
41
|
/**
|
|
34
42
|
Never ending test used to start WebDriverAgent
|
|
35
43
|
*/
|
package/build/lib/wda-mac.js
CHANGED
|
@@ -15,6 +15,10 @@ var _path = _interopRequireDefault(require("path"));
|
|
|
15
15
|
|
|
16
16
|
var _url = _interopRequireDefault(require("url"));
|
|
17
17
|
|
|
18
|
+
var _axios = _interopRequireDefault(require("axios"));
|
|
19
|
+
|
|
20
|
+
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
21
|
+
|
|
18
22
|
var _appiumBaseDriver = require("appium-base-driver");
|
|
19
23
|
|
|
20
24
|
var _appiumSupport = require("appium-support");
|
|
@@ -239,10 +243,28 @@ class WDAMacProcess {
|
|
|
239
243
|
|
|
240
244
|
log.debug(`Using ${this.host} as server host`);
|
|
241
245
|
log.debug(`Using port ${this.port}`);
|
|
242
|
-
const isPortBusy = (await (0, _portscanner.checkPortStatus)(this.port, this.host)) === 'open';
|
|
243
246
|
|
|
244
|
-
|
|
245
|
-
|
|
247
|
+
const isPortBusy = async () => (await (0, _portscanner.checkPortStatus)(this.port, this.host)) === 'open';
|
|
248
|
+
|
|
249
|
+
if (await isPortBusy()) {
|
|
250
|
+
log.warn(`The port #${this.port} at ${this.host} is busy. ` + `Assuming it is an obsolete WDA server instance and ` + `trying to terminate it in order to start a new one`);
|
|
251
|
+
const timer = new _appiumSupport.timing.Timer().start();
|
|
252
|
+
|
|
253
|
+
try {
|
|
254
|
+
await _axios.default.delete(`http://${this.host}:${this.port}/`, {
|
|
255
|
+
timeout: 5000
|
|
256
|
+
});
|
|
257
|
+
await _bluebird.default.delay(500);
|
|
258
|
+
await (0, _asyncbox.waitForCondition)(async () => !(await isPortBusy()), {
|
|
259
|
+
waitMs: 3000,
|
|
260
|
+
intervalMs: 100
|
|
261
|
+
});
|
|
262
|
+
} catch (e) {
|
|
263
|
+
log.warn(`Did not know how to terminate the process at ${this.host}:${this.port}: ${e.message}. ` + `Perhaps, it is not a WDA server, which is hogging the port?`);
|
|
264
|
+
throw new Error(`The port #${this.port} at ${this.host} is busy. ` + `Consider setting 'systemPort' capability to another free port number and/or ` + `make sure previous driver sessions have been closed properly.`);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
log.info(`The previously running WDA server has been successfully terminated after ` + `${Math.round(timer.getDuration().asMilliSeconds)}ms`);
|
|
246
268
|
}
|
|
247
269
|
|
|
248
270
|
const args = ['build-for-testing', 'test-without-building', '-project', WDA_PROJECT(this.bootstrapRoot), '-scheme', RUNNER_SCHEME, DISABLE_STORE_ARG];
|
|
@@ -490,4 +512,4 @@ var _default = WDA_MAC_SERVER;
|
|
|
490
512
|
exports.default = _default;require('source-map-support').install();
|
|
491
513
|
|
|
492
514
|
|
|
493
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi93ZGEtbWFjLmpzIl0sIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsIlJPT1RfRElSIiwicGF0aCIsImJhc2VuYW1lIiwiX19kaXJuYW1lIiwicmVzb2x2ZSIsInByb2Nlc3MiLCJlbnYiLCJOT19QUkVDT01QSUxFIiwiREVGQVVMVF9XREFfUk9PVCIsIldEQV9QUk9KRUNUX05BTUUiLCJXREFfUFJPSkVDVCIsIndkYVJvb3QiLCJSVU5ORVJfU0NIRU1FIiwiRElTQUJMRV9TVE9SRV9BUkciLCJYQ09ERUJVSUxEIiwiU1RBUlRVUF9USU1FT1VUX01TIiwiREVGQVVMVF9TWVNURU1fUE9SVCIsIkRFRkFVTFRfU1lTVEVNX0hPU1QiLCJERUZBVUxUX1NIT1dfU0VSVkVSX0xPR1MiLCJSVU5OSU5HX1BST0NFU1NfSURTIiwiUkVDRU5UX1VQR1JBREVfVElNRVNUQU1QX1BBVEgiLCJqb2luIiwiZ2V0VXBncmFkZVRpbWVzdGFtcCIsInBhY2thZ2VNYW5pZmVzdCIsImZzIiwiZXhpc3RzIiwibXRpbWUiLCJzdGF0IiwiZ2V0VGltZSIsImNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcyIsIl8iLCJpc0VtcHR5IiwiZGVidWciLCJsZW5ndGgiLCJ1dGlsIiwicGx1cmFsaXplIiwiaWduIiwicHVsbEFsbCIsIm9uY2UiLCJXREFNYWNQcm94eSIsIkpXUHJveHkiLCJwcm94eUNvbW1hbmQiLCJ1cmwiLCJtZXRob2QiLCJib2R5IiwiZGlkUHJvY2Vzc0V4aXQiLCJlcnJvcnMiLCJJbnZhbGlkQ29udGV4dEVycm9yIiwiV0RBTWFjUHJvY2VzcyIsImNvbnN0cnVjdG9yIiwic2hvd1NlcnZlckxvZ3MiLCJwb3J0IiwiaG9zdCIsImJvb3RzdHJhcFJvb3QiLCJwcm9jIiwiaXNSdW5uaW5nIiwicGlkIiwibGlzdENoaWxkcmVuUGlkcyIsImlzRnJlc2hVcGdyYWRlIiwiaG9tZUZvbGRlciIsIkhPTUUiLCJpbmZvIiwiY3VycmVudFVwZ3JhZGVUaW1lc3RhbXAiLCJpc0ludGVnZXIiLCJ0aW1lc3RhbXBQYXRoIiwiYWNjZXNzIiwiV19PSyIsInJlY2VudFVwZ3JhZGVUaW1lc3RhbXAiLCJwYXJzZUludCIsInJlYWRGaWxlIiwid2FybiIsImRpcm5hbWUiLCJ3cml0ZUZpbGUiLCJlIiwibWVzc2FnZSIsImhhc1NhbWVPcHRzIiwic3lzdGVtUG9ydCIsInN5c3RlbUhvc3QiLCJpc0Jvb2xlYW4iLCJpc05pbCIsImluaXQiLCJvcHRzIiwiRXJyb3IiLCJraWxsIiwieGNvZGVidWlsZCIsIndoaWNoIiwiYXJncyIsImN3ZCIsInN0ZGVyciIsImlzUG9ydEJ1c3kiLCJPYmplY3QiLCJhc3NpZ24iLCJVU0VfUE9SVCIsIlVTRV9IT1NUIiwiU3ViUHJvY2VzcyIsIm9uIiwic3Rkb3V0IiwibGluZSIsInRyaW0iLCJjb2RlIiwic2lnbmFsIiwicXVvdGUiLCJzdGFydCIsInN0b3AiLCJjaGlsZHJlblBpZHMiLCJXREFNYWNTZXJ2ZXIiLCJzZXJ2ZXJTdGFydHVwVGltZW91dE1zIiwicHJveHkiLCJpc1Byb3h5aW5nVG9SZW1vdGVTZXJ2ZXIiLCJpc1Byb3h5UmVhZHkiLCJ0aHJvd09uRXhpdCIsImNvbW1hbmQiLCJlcnIiLCJwYXJzZVByb3h5UHJvcGVydGllcyIsImNhcHMiLCJzY2hlbWUiLCJ3ZWJEcml2ZXJBZ2VudE1hY1VybCIsInNlcnZlciIsInBhcnNlZFVybCIsIlVSTCIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJwYXRobmFtZSIsImlzU3RyaW5nIiwic3BsaXQiLCJzdGFydFNlc3Npb24iLCJzZXJ2ZXJTdGFydHVwVGltZW91dCIsIndhc1Byb2Nlc3NJbml0TmVjZXNzYXJ5IiwiYmFzZSIsImtlZXBBbGl2ZSIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwidGVzdCIsIm1zZyIsInB1c2giLCJwdWxsIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJjYXBhYmlsaXRpZXMiLCJmaXJzdE1hdGNoIiwiYWx3YXlzTWF0Y2giLCJzdG9wU2Vzc2lvbiIsInNlc3Npb25JZCIsIldEQV9NQUNfU0VSVkVSIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLEdBQUcsR0FBR0Msc0JBQU9DLFNBQVAsQ0FBaUIsbUJBQWpCLENBQVo7O0FBRUEsTUFBTUMsUUFBUSxHQUFHQyxjQUFLQyxRQUFMLENBQWNDLFNBQWQsTUFBNkIsS0FBN0IsR0FDYkYsY0FBS0csT0FBTCxDQUFhRCxTQUFiLEVBQXdCRSxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsYUFBWixHQUE0QixJQUE1QixHQUFtQyxPQUEzRCxDQURhLEdBRWJKLFNBRko7O0FBR0EsTUFBTUssZ0JBQWdCLEdBQUdQLGNBQUtHLE9BQUwsQ0FBYUosUUFBYixFQUF1QixtQkFBdkIsQ0FBekI7O0FBQ0EsTUFBTVMsZ0JBQWdCLEdBQUcsNkJBQXpCOztBQUNBLE1BQU1DLFdBQVcsR0FBRyxDQUFDQyxPQUFPLEdBQUdILGdCQUFYLEtBQWdDUCxjQUFLRyxPQUFMLENBQWFPLE9BQWIsRUFBc0JGLGdCQUF0QixDQUFwRDs7QUFDQSxNQUFNRyxhQUFhLEdBQUcsc0JBQXRCO0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUcsZ0NBQTFCO0FBQ0EsTUFBTUMsVUFBVSxHQUFHLFlBQW5CO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsTUFBM0I7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxLQUE1QjtBQUNBLE1BQU1DLG1CQUFtQixHQUFHLFdBQTVCO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUcsS0FBakM7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxFQUE1Qjs7QUFDQSxNQUFNQyw2QkFBNkIsR0FBR25CLGNBQUtvQixJQUFMLENBQVUsU0FBVixFQUNwQyxvQkFEb0MsRUFDZCxjQURjLENBQXRDOztBQUlBLGVBQWVDLG1CQUFmLEdBQXNDO0FBQ3BDLFFBQU1DLGVBQWUsR0FB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QVU7QUFDVjVFLFFBQUFBLEdBQUcsQ0FBQ2dFLElBQUosQ0FBVSx5REFBd0RZLENBQUMsQ0FBQ0MsT0FBUSxFQUE1RTtBQUNEO0FBQ0Y7QUFDRjs7QUF2S2dCOztBQTBLbkIsTUFBTXlFLGNBQWMsR0FBRyxJQUFJMUMsWUFBSixFQUF2QjtlQUVlMEMsYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB1cmwgZnJvbSAndXJsJztcbmltcG9ydCB7IEpXUHJveHksIGVycm9ycyB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcywgbG9nZ2VyLCB1dGlsLCB0aW1pbmcsIG1rZGlycCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCB7IFN1YlByb2Nlc3MsIGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IGNoZWNrUG9ydFN0YXR1cyB9IGZyb20gJ3BvcnRzY2FubmVyJztcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBsaXN0Q2hpbGRyZW5Qcm9jZXNzSWRzIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1dlYkRyaXZlckFnZW50TWFjJyk7XG5cbmNvbnN0IFJPT1RfRElSID0gcGF0aC5iYXNlbmFtZShfX2Rpcm5hbWUpID09PSAnbGliJ1xuICA/IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsIHByb2Nlc3MuZW52Lk5PX1BSRUNPTVBJTEUgPyAnLi4nIDogJy4uLy4uJylcbiAgOiBfX2Rpcm5hbWU7XG5jb25zdCBERUZBVUxUX1dEQV9ST09UID0gcGF0aC5yZXNvbHZlKFJPT1RfRElSLCAnV2ViRHJpdmVyQWdlbnRNYWMnKTtcbmNvbnN0IFdEQV9QUk9KRUNUX05BTUUgPSAnV2ViRHJpdmVyQWdlbnRNYWMueGNvZGVwcm9qJztcbmNvbnN0IFdEQV9QUk9KRUNUID0gKHdkYVJvb3QgPSBERUZBVUxUX1dEQV9ST09UKSA9PiBwYXRoLnJlc29sdmUod2RhUm9vdCwgV0RBX1BST0pFQ1RfTkFNRSk7XG5jb25zdCBSVU5ORVJfU0NIRU1FID0gJ1dlYkRyaXZlckFnZW50UnVubmVyJztcbmNvbnN0IERJU0FCTEVfU1RPUkVfQVJHID0gJ0NPTVBJTEVSX0lOREVYX1NUT1JFX0VOQUJMRT1OTyc7XG5jb25zdCBYQ09ERUJVSUxEID0gJ3hjb2RlYnVpbGQnO1xuY29uc3QgU1RBUlRVUF9USU1FT1VUX01TID0gMTIwMDAwO1xuY29uc3QgREVGQVVMVF9TWVNURU1fUE9SVCA9IDEwMTAwO1xuY29uc3QgREVGQVVMVF9TWVNURU1fSE9TVCA9ICcxMjcuMC4wLjEnO1xuY29uc3QgREVGQVVMVF9TSE9XX1NFUlZFUl9MT0dTID0gZmFsc2U7XG5jb25zdCBSVU5OSU5HX1BST0NFU1NfSURTID0gW107XG5jb25zdCBSRUNFTlRfVVBHUkFERV9USU1FU1RBTVBfUEFUSCA9IHBhdGguam9pbignLmFwcGl1bScsXG4gICd3ZWJkcml2ZXJhZ2VudF9tYWMnLCAndXBncmFkZS50aW1lJyk7XG5cblxuYXN5bmMgZnVuY3Rpb24gZ2V0VXBncmFkZVRpbWVzdGFtcCAoKSB7XG4gIGNvbnN0IHBhY2thZ2VNYW5pZmVzdCA9IHBhdGgucmVzb2x2ZShST09UX0RJUiwgJ3BhY2thZ2UuanNvbicpO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwYWNrYWdlTWFuaWZlc3QpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qge210aW1lfSA9IGF3YWl0IGZzLnN0YXQocGFja2FnZU1hbmlmZXN0KTtcbiAgcmV0dXJuIG10aW1lLmdldFRpbWUoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzICgpIHtcbiAgaWYgKCFfLmlzRW1wdHkoUlVOTklOR19QUk9DRVNTX0lEUykpIHtcbiAgICBsb2cuZGVidWcoYENsZWFuaW5nIHVwICR7UlVOTklOR19QUk9DRVNTX0lEUy5sZW5ndGh9IG9ic29sZXRlIGAgK1xuICAgICAgdXRpbC5wbHVyYWxpemUoJ3Byb2Nlc3MnLCBSVU5OSU5HX1BST0NFU1NfSURTLmxlbmd0aCwgZmFsc2UpKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYygna2lsbCcsIFsnLTknLCAuLi5SVU5OSU5HX1BST0NFU1NfSURTXSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIF8ucHVsbEFsbChSVU5OSU5HX1BST0NFU1NfSURTLCBSVU5OSU5HX1BST0NFU1NfSURTKTtcbiAgfVxufVxuXG5wcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gIGlmICghXy5pc0VtcHR5KFJVTk5JTkdfUFJPQ0VTU19JRFMpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNTeW5jKGBraWxsIC05ICR7UlVOTklOR19QUk9DRVNTX0lEUy5qb2luKCcgJyl9YCk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIF8ucHVsbEFsbChSVU5OSU5HX1BST0NFU1NfSURTLCBSVU5OSU5HX1BST0NFU1NfSURTKTtcbiAgfVxufSk7XG5cblxuY2xhc3MgV0RBTWFjUHJveHkgZXh0ZW5kcyBKV1Byb3h5IHtcbiAgYXN5bmMgcHJveHlDb21tYW5kICh1cmwsIG1ldGhvZCwgYm9keSA9IG51bGwpIHtcbiAgICBpZiAodGhpcy5kaWRQcm9jZXNzRXhpdCkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQ29udGV4dEVycm9yKFxuICAgICAgICBgJyR7bWV0aG9kfSAke3VybH0nIGNhbm5vdCBiZSBwcm94aWVkIHRvIE1hYzIgRHJpdmVyIHNlcnZlciBiZWNhdXNlIGAgK1xuICAgICAgICAnaXRzIHByb2Nlc3MgaXMgbm90IHJ1bm5pbmcgKHByb2JhYmx5IGNyYXNoZWQpLiBDaGVjayB0aGUgQXBwaXVtIGxvZyBmb3IgbW9yZSBkZXRhaWxzJyk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBzdXBlci5wcm94eUNvbW1hbmQodXJsLCBtZXRob2QsIGJvZHkpO1xuICB9XG59XG5cbmNsYXNzIFdEQU1hY1Byb2Nlc3Mge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5zaG93U2VydmVyTG9ncyA9IERFRkFVTFRfU0hPV19TRVJWRVJfTE9HUztcbiAgICB0aGlzLnBvcnQgPSBERUZBVUxUX1NZU1RFTV9QT1JUO1xuICAgIHRoaXMuaG9zdCA9IERFRkFVTFRfU1lTVEVNX0hPU1Q7XG4gICAgdGhpcy5ib290c3RyYXBSb290ID0gREVGQVVMVF9XREFfUk9PVDtcbiAgICB0aGlzLnByb2MgPSBudWxsO1xuICB9XG5cbiAgZ2V0IGlzUnVubmluZyAoKSB7XG4gICAgcmV0dXJuICEhKHRoaXMucHJvYz8uaXNSdW5uaW5nKTtcbiAgfVxuXG4gIGdldCBwaWQgKCkge1xuICAgIHJldHVybiB0aGlzLmlzUnVubmluZyA/IHRoaXMucHJvYy5waWQgOiBudWxsO1xuICB9XG5cbiAgYXN5bmMgbGlzdENoaWxkcmVuUGlkcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMucGlkID8gKGF3YWl0IGxpc3RDaGlsZHJlblByb2Nlc3NJZHModGhpcy5waWQpKSA6IFtdO1xuICB9XG5cbiAgYXN5bmMgaXNGcmVzaFVwZ3JhZGUgKCkge1xuICAgIGNvbnN0IGhvbWVGb2xkZXIgPSBwcm9jZXNzLmVudi5IT01FO1xuICAgIGlmICghaG9tZUZvbGRlcikge1xuICAgICAgbG9nLmluZm8oJ1RoZSBIT01FIGZvbGRlciBwYXRoIGNhbm5vdCBiZSBkZXRlcm1pbmVkJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFVwZ3JhZGVUaW1lc3RhbXAgPSBhd2FpdCBnZXRVcGdyYWRlVGltZXN0YW1wKCk7XG4gICAgaWYgKCFfLmlzSW50ZWdlcihjdXJyZW50VXBncmFkZVRpbWVzdGFtcCkpIHtcbiAgICAgIGxvZy5pbmZvKCdJdCBpcyBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgdGltZXN0YW1wIG9mIHRoZSBwYWNrYWdlJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZXN0YW1wUGF0aCA9IHBhdGgucmVzb2x2ZShob21lRm9sZGVyLCBSRUNFTlRfVVBHUkFERV9USU1FU1RBTVBfUEFUSCk7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyh0aW1lc3RhbXBQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMuYWNjZXNzKHRpbWVzdGFtcFBhdGgsIGZzLldfT0spO1xuICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgIGxvZy5pbmZvKGBXZWJEcml2ZXJBZ2VudCB1cGdyYWRlIHRpbWVzdGFtcCBhdCAnJHt0aW1lc3RhbXBQYXRofScgaXMgbm90IHdyaXRlYWJsZWApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCByZWNlbnRVcGdyYWRlVGltZXN0YW1wID0gcGFyc2VJbnQoYXdhaXQgZnMucmVhZEZpbGUodGltZXN0YW1wUGF0aCwgJ3V0ZjgnKSwgMTApO1xuICAgICAgaWYgKF8uaXNJbnRlZ2VyKHJlY2VudFVwZ3JhZGVUaW1lc3RhbXApKSB7XG4gICAgICAgIGlmIChyZWNlbnRVcGdyYWRlVGltZXN0YW1wID49IGN1cnJlbnRVcGdyYWRlVGltZXN0YW1wKSB7XG4gICAgICAgICAgbG9nLmluZm8oYFdlYkRyaXZlckFnZW50IHNvdXJjZXMgYXJlIHVwIHRvIGRhdGUgYCArXG4gICAgICAgICAgICBgKCR7cmVjZW50VXBncmFkZVRpbWVzdGFtcH0gPj0gJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0pYCk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGxvZy5pbmZvKGBXZWJEcml2ZXJBZ2VudCBzb3VyY2VzIGhhdmUgYmVlbiB1cGdyYWRlZCBgICtcbiAgICAgICAgICBgKCR7cmVjZW50VXBncmFkZVRpbWVzdGFtcH0gPCAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfSlgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy53YXJuKGBUaGUgcmVjZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9JyBpcyBjb3JydXB0ZWQuIFRyeWluZyB0byBmaXggaXRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgbWtkaXJwKHBhdGguZGlybmFtZSh0aW1lc3RhbXBQYXRoKSk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUodGltZXN0YW1wUGF0aCwgYCR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9YCwgJ3V0ZjgnKTtcbiAgICAgIGxvZy5kZWJ1ZyhgU3RvcmVkIHRoZSByZWNlbnQgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0gYCArXG4gICAgICAgIGBhdCAnJHt0aW1lc3RhbXBQYXRofSdgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuaW5mbyhgVW5hYmxlIHRvIGNyZWF0ZSB0aGUgcmVjZW50IFdlYkRyaXZlckFnZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9Jy4gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYXNTYW1lT3B0cyAoeyBzaG93U2VydmVyTG9ncywgc3lzdGVtUG9ydCwgc3lzdGVtSG9zdCwgYm9vdHN0cmFwUm9vdCB9KSB7XG4gICAgaWYgKF8uaXNCb29sZWFuKHNob3dTZXJ2ZXJMb2dzKSAmJiB0aGlzLnNob3dTZXJ2ZXJMb2dzICE9PSBzaG93U2VydmVyTG9nc1xuICAgICAgfHwgXy5pc05pbChzaG93U2VydmVyTG9ncykgJiYgdGhpcy5zaG93U2VydmVyTG9ncyAhPT0gREVGQVVMVF9TSE9XX1NFUlZFUl9MT0dTKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChzeXN0ZW1Qb3J0ICYmIHRoaXMucG9ydCAhPT0gc3lzdGVtUG9ydFxuICAgICAgfHwgIXN5c3RlbVBvcnQgJiYgdGhpcy5wb3J0ICE9PSBERUZBVUxUX1NZU1RFTV9QT1JUKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChzeXN0ZW1Ib3N0ICYmIHRoaXMuaG9zdCAhPT0gc3lzdGVtSG9zdFxuICAgICAgfHwgIXN5c3RlbUhvc3QgJiYgdGhpcy5ob3N0ICE9PSBERUZBVUxUX1NZU1RFTV9IT1NUKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChib290c3RyYXBSb290ICYmIHRoaXMuYm9vdHN0cmFwUm9vdCAhPT0gYm9vdHN0cmFwUm9vdFxuICAgICAgfHwgIWJvb3RzdHJhcFJvb3QgJiYgdGhpcy5ib290c3RyYXBSb290ICE9PSBERUZBVUxUX1dEQV9ST09UKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBpbml0IChvcHRzID0ge30pIHtcbiAgICBpZiAodGhpcy5pc1J1bm5pbmcgJiYgdGhpcy5oYXNTYW1lT3B0cyhvcHRzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd1NlcnZlckxvZ3MgPSBvcHRzLnNob3dTZXJ2ZXJMb2dzID8/IHRoaXMuc2hvd1NlcnZlckxvZ3M7XG4gICAgdGhpcy5wb3J0ID0gb3B0cy5zeXN0ZW1Qb3J0ID8/IHRoaXMucG9ydDtcbiAgICB0aGlzLmhvc3QgPSBvcHRzLnN5c3RlbUhvc3QgPz8gdGhpcy5ob3N0O1xuICAgIHRoaXMuYm9vdHN0cmFwUm9vdCA9IG9wdHMuYm9vdHN0cmFwUm9vdCA/PyB0aGlzLmJvb3RzdHJhcFJvb3Q7XG5cbiAgICBsb2cuZGVidWcoYFVzaW5nIGJvb3RzdHJhcCByb290OiAke3RoaXMuYm9vdHN0cmFwUm9vdH1gKTtcbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhXREFfUFJPSkVDVCh0aGlzLmJvb3RzdHJhcFJvb3QpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke1dEQV9QUk9KRUNUX05BTUV9IGRvZXMgbm90IGV4aXN0IGF0ICcke1dEQV9QUk9KRUNUKHRoaXMuYm9vdHN0cmFwUm9vdCl9Jy4gYCArXG4gICAgICAgIGBXYXMgJ2Jvb3RzdHJhcFJvb3QnIHNldCB0byBhIHByb3BlciB2YWx1ZT9gKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmtpbGwoKTtcbiAgICBhd2FpdCBjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMoKTtcblxuICAgIGxldCB4Y29kZWJ1aWxkO1xuICAgIHRyeSB7XG4gICAgICB4Y29kZWJ1aWxkID0gYXdhaXQgZnMud2hpY2goWENPREVCVUlMRCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke1hDT0RFQlVJTER9IGJpbmFyeSBjYW5ub3QgYmUgZm91bmQgaW4gUEFUSC4gYCArXG4gICAgICAgIGBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgWGNvZGUgaXMgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtYCk7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgVXNpbmcgJHtYQ09ERUJVSUxEfSBiaW5hcnkgYXQgJyR7eGNvZGVidWlsZH0nYCk7XG5cbiAgICBpZiAoYXdhaXQgdGhpcy5pc0ZyZXNoVXBncmFkZSgpKSB7XG4gICAgICBsb2cuaW5mbygnUGVyZm9ybWluZyBwcm9qZWN0IGNsZWFudXAnKTtcbiAgICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAgICdjbGVhbicsXG4gICAgICAgICctcHJvamVjdCcsIFdEQV9QUk9KRUNUKHRoaXMuYm9vdHN0cmFwUm9vdCksXG4gICAgICAgICctc2NoZW1lJywgUlVOTkVSX1NDSEVNRSxcbiAgICAgIF07XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBleGVjKFhDT0RFQlVJTEQsIGFyZ3MsIHtcbiAgICAgICAgICBjd2Q6IHRoaXMuYm9vdHN0cmFwUm9vdCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy53YXJuKGBDYW5ub3QgcGVyZm9ybSBwcm9qZWN0IGNsZWFudXAuIGAgK1xuICAgICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBVc2luZyAke3RoaXMuaG9zdH0gYXMgc2VydmVyIGhvc3RgKTtcbiAgICBsb2cuZGVidWcoYFVzaW5nIHBvcnQgJHt0aGlzLnBvcnR9YCk7XG4gICAgY29uc3QgaXNQb3J0QnVzeSA9IChhd2FpdCBjaGVja1BvcnRTdGF0dXModGhpcy5wb3J0LCB0aGlzLmhvc3QpKSA9PT0gJ29wZW4nO1xuICAgIGlmIChpc1BvcnRCdXN5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwb3J0ICMke3RoaXMucG9ydH0gYXQgJHt0aGlzLmhvc3R9IGlzIGJ1c3kuIGAgK1xuICAgICAgICBgQ29uc2lkZXIgc2V0dGluZyAnc3lzdGVtUG9ydCcgY2FwYWJpbGl0eSB0byBhbm90aGVyIGZyZWUgcG9ydCBudW1iZXIgYW5kL29yIGAgK1xuICAgICAgICBgbWFrZSBzdXJlIHRoZSBwcmV2aW91cyBkcml2ZXIgc2Vzc2lvbihzKSBoYXZlIGJlZW4gY2xvc2VkIHByb3Blcmx5LmApO1xuICAgIH1cblxuICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAnYnVpbGQtZm9yLXRlc3RpbmcnLCAndGVzdC13aXRob3V0LWJ1aWxkaW5nJyxcbiAgICAgICctcHJvamVjdCcsIFdEQV9QUk9KRUNUKHRoaXMuYm9vdHN0cmFwUm9vdCksXG4gICAgICAnLXNjaGVtZScsIFJVTk5FUl9TQ0hFTUUsXG4gICAgICBESVNBQkxFX1NUT1JFX0FSRyxcbiAgICBdO1xuICAgIGNvbnN0IGVudiA9IE9iamVjdC5hc3NpZ24oe30sIHByb2Nlc3MuZW52LCB7XG4gICAgICBVU0VfUE9SVDogYCR7dGhpcy5wb3J0fWAsXG4gICAgICBVU0VfSE9TVDogdGhpcy5ob3N0LFxuICAgIH0pO1xuICAgIHRoaXMucHJvYyA9IG5ldyBTdWJQcm9jZXNzKHhjb2RlYnVpbGQsIGFyZ3MsIHtcbiAgICAgIGN3ZDogdGhpcy5ib290c3RyYXBSb290LFxuICAgICAgZW52LFxuICAgIH0pO1xuICAgIGlmICghdGhpcy5zaG93U2VydmVyTG9ncykge1xuICAgICAgbG9nLmluZm8oYE1hYzJEcml2ZXIgaG9zdCBwcm9jZXNzIGxvZ2dpbmcgaXMgZGlzYWJsZWQuIGAgK1xuICAgICAgICBgQWxsIHRoZSAke1hDT0RFQlVJTER9IG91dHB1dCBpcyBnb2luZyB0byBiZSBzdXBwcmVzc2VkLiBgICtcbiAgICAgICAgYFNldCB0aGUgJ3Nob3dTZXJ2ZXJMb2dzJyBjYXBhYmlsaXR5IHRvICd0cnVlJyBpZiB0aGlzIGlzIGFuIHVuZGVzaXJlZCBiZWhhdmlvcmApO1xuICAgIH1cbiAgICB0aGlzLnByb2Mub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgaWYgKCF0aGlzLnNob3dTZXJ2ZXJMb2dzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGluZSA9IF8udHJpbShzdGRvdXQgfHwgc3RkZXJyKTtcbiAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgWyR7WENPREVCVUlMRH1dICR7bGluZX1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICBsb2cuaW5mbyhgTWFjMkRyaXZlciBob3N0IHByb2Nlc3MgaGFzIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfSwgc2lnbmFsICR7c2lnbmFsfWApO1xuICAgIH0pO1xuICAgIGxvZy5pbmZvKGBTdGFydGluZyBNYWMyRHJpdmVyIGhvc3QgcHJvY2VzczogJHtYQ09ERUJVSUxEfSAke3V0aWwucXVvdGUoYXJncyl9YCk7XG4gICAgYXdhaXQgdGhpcy5wcm9jLnN0YXJ0KDApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgc3RvcCAoKSB7XG4gICAgaWYgKCF0aGlzLmlzUnVubmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkcmVuUGlkcyA9IGF3YWl0IHRoaXMubGlzdENoaWxkcmVuUGlkcygpO1xuICAgIGlmICghXy5pc0VtcHR5KGNoaWxkcmVuUGlkcykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV4ZWMoJ2tpbGwnLCBjaGlsZHJlblBpZHMpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLnByb2Muc3RvcCgnU0lHVEVSTScsIDMwMDApO1xuICB9XG5cbiAgYXN5bmMga2lsbCAoKSB7XG4gICAgaWYgKCF0aGlzLmlzUnVubmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkcmVuUGlkcyA9IGF3YWl0IHRoaXMubGlzdENoaWxkcmVuUGlkcygpO1xuICAgIGlmICghXy5pc0VtcHR5KGNoaWxkcmVuUGlkcykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV4ZWMoJ2tpbGwnLCBbJy05JywgLi4uY2hpbGRyZW5QaWRzXSk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RvcCgnU0lHS0lMTCcpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxufVxuXG5jbGFzcyBXREFNYWNTZXJ2ZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5wcm9jZXNzID0gbnVsbDtcbiAgICB0aGlzLnNlcnZlclN0YXJ0dXBUaW1lb3V0TXMgPSBTVEFSVFVQX1RJTUVPVVRfTVM7XG4gICAgdGhpcy5wcm94eSA9IG51bGw7XG5cbiAgICAvLyBUbyBoYW5kbGUgaWYgdGhlIFdEQU1hYyBzZXJ2ZXIgaXMgcHJveHlpbmcgcmVxdWVzdHMgdG8gYSByZW1vdGUgV0RBTWFjIGFwcCBpbnN0YW5jZVxuICAgIHRoaXMuaXNQcm94eWluZ1RvUmVtb3RlU2VydmVyID0gZmFsc2U7XG4gIH1cblxuICBhc3luYyBpc1Byb3h5UmVhZHkgKHRocm93T25FeGl0ID0gdHJ1ZSkge1xuICAgIGlmICghdGhpcy5wcm94eSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnByb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aHJvd09uRXhpdCAmJiB0aGlzLnByb3h5LmRpZFByb2Nlc3NFeGl0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnIubWVzc2FnZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gUHJveHlQcm9wZXJ0aWVzXG4gICAqXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzY2hlbWUgLSBUaGUgc2NoZW1lIHByb3h5IHRvLlxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gaG9zdCAtIFRoZSBob3N0IG5hbWUgcHJveHkgdG8uXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwb3J0IC0gVGhlIHBvcnQgbnVtYmVyIHByb3h5IHRvLlxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHByb3h5IHRvLlxuICAgKi9cblxuICAvKipcbiAgICogUmV0dXJucyBwcm94eSBpbmZvcm1hdGlvbiB3aGVyZSBXREFNYWNTZXJ2ZXIgcHJveHkgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjYXBzIC0gVGhlIGNhcGFiaWxpdGllcyBpbiB0aGUgc2Vzc2lvbi5cbiAgICogQHJldHVybiB7UHJveHlQcm9wZXJ0aWVzfVxuICAgKiBAdGhyb3dzIEVycm9yIGlmICd3ZWJEcml2ZXJBZ2VudE1hY1VybCcgaGFkIGludmFsaWQgVVJMXG4gICAqL1xuICBwYXJzZVByb3h5UHJvcGVydGllcyAoY2Fwcykge1xuICAgIGxldCBzY2hlbWUgPSAnaHR0cCc7XG4gICAgaWYgKCFjYXBzLndlYkRyaXZlckFnZW50TWFjVXJsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzY2hlbWUsXG4gICAgICAgIHNlcnZlcjogKHRoaXMucHJvY2Vzcz8uaG9zdCA/PyBjYXBzLnN5c3RlbUhvc3QpID8/IERFRkFVTFRfU1lTVEVNX0hPU1QsXG4gICAgICAgIHBvcnQ6ICh0aGlzLnByb2Nlc3M/LnBvcnQgPz8gY2Fwcy5zeXN0ZW1Qb3J0KSA/PyBERUZBVUxUX1NZU1RFTV9QT1JULFxuICAgICAgICBwYXRoOiAnJ1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBsZXQgcGFyc2VkVXJsO1xuICAgIHRyeSB7XG4gICAgICBwYXJzZWRVcmwgPSBuZXcgdXJsLlVSTChjYXBzLndlYkRyaXZlckFnZW50TWFjVXJsKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHdlYkRyaXZlckFnZW50TWFjVXJsLCAnJHtjYXBzLndlYkRyaXZlckFnZW50TWFjVXJsfScsIGAgK1xuICAgICAgICBgaW4gdGhlIGNhcGFiaWxpdGllcyBpcyBpbnZhbGlkLiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHByb3RvY29sLCBob3N0bmFtZSwgcG9ydCwgcGF0aG5hbWUgfSA9IHBhcnNlZFVybDtcbiAgICBpZiAoXy5pc1N0cmluZyhwcm90b2NvbCkpIHtcbiAgICAgIHNjaGVtZSA9IHByb3RvY29sLnNwbGl0KCc6JylbMF07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWUsXG4gICAgICBzZXJ2ZXI6IGhvc3RuYW1lID8/IERFRkFVTFRfU1lTVEVNX0hPU1QsXG4gICAgICBwb3J0OiBfLmlzRW1wdHkocG9ydCkgPyBERUZBVUxUX1NZU1RFTV9QT1JUIDogXy5wYXJzZUludChwb3J0KSxcbiAgICAgIHBhdGg6IHBhdGhuYW1lID09PSAnLycgPyAnJyA6IHBhdGhuYW1lXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2Vzc2lvbiAoY2Fwcykge1xuICAgIHRoaXMuc2VydmVyU3RhcnR1cFRpbWVvdXRNcyA9IGNhcHMuc2VydmVyU3RhcnR1cFRpbWVvdXQgPz8gdGhpcy5zZXJ2ZXJTdGFydHVwVGltZW91dE1zO1xuXG4gICAgdGhpcy5pc1Byb3h5aW5nVG9SZW1vdGVTZXJ2ZXIgPSAhIWNhcHMud2ViRHJpdmVyQWdlbnRNYWNVcmw7XG5cbiAgICBsZXQgd2FzUHJvY2Vzc0luaXROZWNlc3Nhcnk7XG4gICAgaWYgKHRoaXMuaXNQcm94eWluZ1RvUmVtb3RlU2VydmVyKSB7XG4gICAgICBpZiAodGhpcy5wcm9jZXNzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzcy5raWxsKCk7XG4gICAgICAgIGF3YWl0IGNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcygpO1xuICAgICAgICB0aGlzLnByb2Nlc3MgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB3YXNQcm9jZXNzSW5pdE5lY2Vzc2FyeSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMucHJvY2Vzcykge1xuICAgICAgICB0aGlzLnByb2Nlc3MgPSBuZXcgV0RBTWFjUHJvY2VzcygpO1xuICAgICAgfVxuICAgICAgd2FzUHJvY2Vzc0luaXROZWNlc3NhcnkgPSBhd2FpdCB0aGlzLnByb2Nlc3MuaW5pdChjYXBzKTtcbiAgICB9XG5cbiAgICBpZiAod2FzUHJvY2Vzc0luaXROZWNlc3NhcnkgfHwgdGhpcy5pc1Byb3h5aW5nVG9SZW1vdGVTZXJ2ZXIgfHwgIXRoaXMucHJveHkpIHtcbiAgICAgIGNvbnN0IHtzY2hlbWUsIHNlcnZlciwgcG9ydCwgcGF0aH0gPSB0aGlzLnBhcnNlUHJveHlQcm9wZXJ0aWVzKGNhcHMpO1xuICAgICAgdGhpcy5wcm94eSA9IG5ldyBXREFNYWNQcm94eSh7XG4gICAgICAgIHNjaGVtZSxcbiAgICAgICAgc2VydmVyLFxuICAgICAgICBwb3J0LFxuICAgICAgICBiYXNlOiBwYXRoLFxuICAgICAgICBrZWVwQWxpdmU6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQgPSBmYWxzZTtcblxuICAgICAgaWYgKHRoaXMucHJvY2Vzcykge1xuICAgICAgICB0aGlzLnByb2Nlc3MucHJvYy5vbignZXhpdCcsICgpID0+IHtcbiAgICAgICAgICB0aGlzLnByb3h5LmRpZFByb2Nlc3NFeGl0ID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IGF3YWl0IHRoaXMuaXNQcm94eVJlYWR5KCksIHtcbiAgICAgICAgICB3YWl0TXM6IHRoaXMuc2VydmVyU3RhcnR1cFRpbWVvdXRNcyxcbiAgICAgICAgICBpbnRlcnZhbE1zOiAxMDAwLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvY2Vzcz8uaXNSdW5uaW5nKSB7XG4gICAgICAgICAgLy8gYXZvaWQgXCJmcm96ZW5cIiBwcm9jZXNzZXMsXG4gICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzLmtpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoL0NvbmRpdGlvbiB1bm1ldC8udGVzdChlLm1lc3NhZ2UpKSB7XG4gICAgICAgICAgY29uc3QgbXNnID0gdGhpcy5pc1Byb3h5aW5nVG9SZW1vdGVTZXJ2ZXJcbiAgICAgICAgICAgID8gYE5vIHJlc3BvbnNlIGZyb20gJyR7c2NoZW1lfTovLyR7c2VydmVyfToke3BvcnR9JHtwYXRofScgd2l0aGluICR7dGhpcy5zZXJ2ZXJTdGFydHVwVGltZW91dE1zfW1zIHRpbWVvdXQuYCArXG4gICAgICAgICAgICBgUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcmVtb3RlIHNlcnZlciBpcyBydW5uaW5nIGFuZCBhY2Nlc3NpYmxlIGJ5IEFwcGl1bWBcbiAgICAgICAgICAgIDogYE1hYzJEcml2ZXIgc2VydmVyIGlzIG5vdCBsaXN0ZW5pbmcgd2l0aGluICR7dGhpcy5zZXJ2ZXJTdGFydHVwVGltZW91dE1zfW1zIHRpbWVvdXQuIGAgK1xuICAgICAgICAgICAgYFRyeSB0byBpbmNyZWFzZSB0aGUgdmFsdWUgb2YgJ3NlcnZlclN0YXJ0dXBUaW1lb3V0JyBjYXBhYmlsaXR5LCBjaGVjayB0aGUgc2VydmVyIGxvZ3MgYCArXG4gICAgICAgICAgICBgYW5kIG1ha2Ugc3VyZSB0aGUgJHtYQ09ERUJVSUxEfSBob3N0IHByb2Nlc3MgY291bGQgYmUgc3RhcnRlZCBtYW51YWxseSBmcm9tIGEgdGVybWluYWxgO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnByb2Nlc3MpIHtcbiAgICAgICAgY29uc3QgcGlkID0gdGhpcy5wcm9jZXNzLnBpZDtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5QaWRzID0gYXdhaXQgdGhpcy5wcm9jZXNzLmxpc3RDaGlsZHJlblBpZHMoKTtcbiAgICAgICAgUlVOTklOR19QUk9DRVNTX0lEUy5wdXNoKC4uLmNoaWxkcmVuUGlkcywgcGlkKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzLnByb2Mub24oJ2V4aXQnLCAoKSA9PiB2b2lkIF8ucHVsbChSVU5OSU5HX1BST0NFU1NfSURTLCBwaWQpKTtcbiAgICAgICAgbG9nLmluZm8oYFRoZSBob3N0IHByb2Nlc3MgaXMgcmVhZHkgd2l0aGluICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5pbmZvKCdUaGUgaG9zdCBwcm9jZXNzIGhhcyBhbHJlYWR5IGJlZW4gbGlzdGVuaW5nLiBQcm9jZWVkaW5nIHdpdGggc2Vzc2lvbiBjcmVhdGlvbicpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucHJveHkuY29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgICAgICBhbHdheXNNYXRjaDogY2FwcyxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0b3BTZXNzaW9uICgpIHtcbiAgICBpZiAoIXRoaXMuaXNQcm94eWluZ1RvUmVtb3RlU2VydmVyICYmICEodGhpcy5wcm9jZXNzPy5pc1J1bm5pbmcpKSB7XG4gICAgICBsb2cuaW5mbyhgTWFjMkRyaXZlciBzZXNzaW9uIGNhbm5vdCBiZSBzdG9wcGVkLCBiZWNhdXNlIHRoZSBzZXJ2ZXIgaXMgbm90IHJ1bm5pbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm94eT8uc2Vzc2lvbklkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnByb3h5LmNvbW1hbmQoYC9zZXNzaW9uLyR7dGhpcy5wcm94eS5zZXNzaW9uSWR9YCwgJ0RFTEVURScpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2cuaW5mbyhgTWFjMkRyaXZlciBzZXNzaW9uIGNhbm5vdCBiZSBkZWxldGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IFdEQV9NQUNfU0VSVkVSID0gbmV3IFdEQU1hY1NlcnZlcigpO1xuXG5leHBvcnQgZGVmYXVsdCBXREFfTUFDX1NFUlZFUjtcbiJdLCJmaWxlIjoibGliL3dkYS1tYWMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
|
515
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi93ZGEtbWFjLmpzIl0sIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsIlJPT1RfRElSIiwicGF0aCIsImJhc2VuYW1lIiwiX19kaXJuYW1lIiwicmVzb2x2ZSIsInByb2Nlc3MiLCJlbnYiLCJOT19QUkVDT01QSUxFIiwiREVGQVVMVF9XREFfUk9PVCIsIldEQV9QUk9KRUNUX05BTUUiLCJXREFfUFJPSkVDVCIsIndkYVJvb3QiLCJSVU5ORVJfU0NIRU1FIiwiRElTQUJMRV9TVE9SRV9BUkciLCJYQ09ERUJVSUxEIiwiU1RBUlRVUF9USU1FT1VUX01TIiwiREVGQVVMVF9TWVNURU1fUE9SVCIsIkRFRkFVTFRfU1lTVEVNX0hPU1QiLCJERUZBVUxUX1NIT1dfU0VSVkVSX0xPR1MiLCJSVU5OSU5HX1BST0NFU1NfSURTIiwiUkVDRU5UX1VQR1JBREVfVElNRVNUQU1QX1BBVEgiLCJqb2luIiwiZ2V0VXBncmFkZVRpbWVzdGFtcCIsInBhY2thZ2VNYW5pZmVzdCIsImZzIiwiZXhpc3RzIiwibXRpbWUiLCJzdGF0IiwiZ2V0VGltZSIsImNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcyIsIl8iLCJpc0VtcHR5IiwiZGVidWciLCJsZW5ndGgiLCJ1dGlsIiwicGx1cmFsaXplIiwiaWduIiwicHVsbEFsbCIsIm9uY2UiLCJXREFNYWNQcm94eSIsIkpXUHJveHkiLCJwcm94eUNvbW1hbmQiLCJ1cmwiLCJtZXRob2QiLCJib2R5IiwiZGlkUHJvY2Vzc0V4aXQiLCJlcnJvcnMiLCJJbnZhbGlkQ29udGV4dEVycm9yIiwiV0RBTWFjUHJvY2VzcyIsImNvbnN0cnVjdG9yIiwic2hvd1NlcnZlckxvZ3MiLCJwb3J0IiwiaG9zdCIsImJvb3RzdHJhcFJvb3QiLCJwcm9jIiwiaXNSdW5uaW5nIiwicGlkIiwibGlzdENoaWxkcmVuUGlkcyIsImlzRnJlc2hVcGdyYWRlIiwiaG9tZUZvbGRlciIsIkhPTUUiLCJpbmZvIiwiY3VycmVudFVwZ3JhZGVUaW1lc3RhbXAiLCJpc0ludGVnZXIiLCJ0aW1lc3RhbXBQYXRoIiwiYWNjZXNzIiwiV19PSyIsInJlY2VudFVwZ3JhZGVUaW1lc3RhbXAiLCJwYXJzZUludCIsInJlYWRGaWxlIiwid2FybiIsImRpcm5hbWUiLCJ3cml0ZUZpbGUiLCJlIiwibWVzc2FnZSIsImhhc1NhbWVPcHRzIiwic3lzdGVtUG9ydCIsInN5c3RlbUhvc3QiLCJpc0Jvb2xlYW4iLCJpc05pbCIsImluaXQiLCJvcHRzIiwiRXJyb3IiLCJraWxsIiwieGNvZGVidWlsZCIsIndoaWNoIiwiYXJncyIsImN3ZCIsInN0ZGVyciIsImlzUG9ydEJ1c3kiLCJ0aW1lciIsInRpbWluZyIsIlRpbWVyIiwic3RhcnQiLCJheGlvcyIsImRlbGV0ZSIsInRpbWVvdXQiLCJCIiwiZGVsYXkiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiTWF0aCIsInJvdW5kIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsIk9iamVjdCIsImFzc2lnbiIsIlVTRV9QT1JUIiwiVVNFX0hPU1QiLCJTdWJQcm9jZXNzIiwib24iLCJzdGRvdXQiLCJsaW5lIiwidHJpbSIsImNvZGUiLCJzaWduYWwiLCJxdW90ZSIsInN0b3AiLCJjaGlsZHJlblBpZHMiLCJXREFNYWNTZXJ2ZXIiLCJzZXJ2ZXJTdGFydHVwVGltZW91dE1zIiwicHJveHkiLCJpc1Byb3h5aW5nVG9SZW1vdGVTZXJ2ZXIiLCJpc1Byb3h5UmVhZHkiLCJ0aHJvd09uRXhpdCIsImNvbW1hbmQiLCJlcnIiLCJwYXJzZVByb3h5UHJvcGVydGllcyIsImNhcHMiLCJzY2hlbWUiLCJ3ZWJEcml2ZXJBZ2VudE1hY1VybCIsInNlcnZlciIsInBhcnNlZFVybCIsIlVSTCIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJwYXRobmFtZSIsImlzU3RyaW5nIiwic3BsaXQiLCJzdGFydFNlc3Npb24iLCJzZXJ2ZXJTdGFydHVwVGltZW91dCIsIndhc1Byb2Nlc3NJbml0TmVjZXNzYXJ5IiwiYmFzZSIsImtlZXBBbGl2ZSIsInRlc3QiLCJtc2ciLCJwdXNoIiwicHVsbCIsInRvRml4ZWQiLCJjYXBhYmlsaXRpZXMiLCJmaXJzdE1hdGNoIiwiYWx3YXlzTWF0Y2giLCJzdG9wU2Vzc2lvbiIsInNlc3Npb25JZCIsIldEQV9NQUNfU0VSVkVSIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLEdBQUcsR0FBR0Msc0JBQU9DLFNBQVAsQ0FBaUIsbUJBQWpCLENBQVo7O0FBRUEsTUFBTUMsUUFBUSxHQUFHQyxjQUFLQyxRQUFMLENBQWNDLFNBQWQsTUFBNkIsS0FBN0IsR0FDYkYsY0FBS0csT0FBTCxDQUFhRCxTQUFiLEVBQXdCRSxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsYUFBWixHQUE0QixJQUE1QixHQUFtQyxPQUEzRCxDQURhLEdBRWJKLFNBRko7O0FBR0EsTUFBTUssZ0JBQWdCLEdBQUdQLGNBQUtHLE9BQUwsQ0FBYUosUUFBYixFQUF1QixtQkFBdkIsQ0FBekI7O0FBQ0EsTUFBTVMsZ0JBQWdCLEdBQUcsNkJBQXpCOztBQUNBLE1BQU1DLFdBQVcsR0FBRyxDQUFDQyxPQUFPLEdBQUdILGdCQUFYLEtBQWdDUCxjQUFLRyxPQUFMLENBQWFPLE9BQWIsRUFBc0JGLGdCQUF0QixDQUFwRDs7QUFDQSxNQUFNRyxhQUFhLEdBQUcsc0JBQXRCO0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUcsZ0NBQTFCO0FBQ0EsTUFBTUMsVUFBVSxHQUFHLFlBQW5CO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsTUFBM0I7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxLQUE1QjtBQUNBLE1BQU1DLG1CQUFtQixHQUFHLFdBQTVCO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUcsS0FBakM7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxFQUE1Qjs7QUFDQSxNQUFNQyw2QkFBNkIsR0FBR25CLGNBQUtvQixJQUFMLENBQVUsU0FBVixFQUNwQyxv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RixjQUFjLEdBQUcsSUFBSW5DLFlBQUosRUFBdkI7ZUFFZW1DLGMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgSldQcm94eSwgZXJyb3JzIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCB7IGZzLCBsb2dnZXIsIHV0aWwsIHRpbWluZywgbWtkaXJwIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgU3ViUHJvY2VzcywgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgY2hlY2tQb3J0U3RhdHVzIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGxpc3RDaGlsZHJlblByb2Nlc3NJZHMgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignV2ViRHJpdmVyQWdlbnRNYWMnKTtcblxuY29uc3QgUk9PVF9ESVIgPSBwYXRoLmJhc2VuYW1lKF9fZGlybmFtZSkgPT09ICdsaWInXG4gID8gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgcHJvY2Vzcy5lbnYuTk9fUFJFQ09NUElMRSA/ICcuLicgOiAnLi4vLi4nKVxuICA6IF9fZGlybmFtZTtcbmNvbnN0IERFRkFVTFRfV0RBX1JPT1QgPSBwYXRoLnJlc29sdmUoUk9PVF9ESVIsICdXZWJEcml2ZXJBZ2VudE1hYycpO1xuY29uc3QgV0RBX1BST0pFQ1RfTkFNRSA9ICdXZWJEcml2ZXJBZ2VudE1hYy54Y29kZXByb2onO1xuY29uc3QgV0RBX1BST0pFQ1QgPSAod2RhUm9vdCA9IERFRkFVTFRfV0RBX1JPT1QpID0+IHBhdGgucmVzb2x2ZSh3ZGFSb290LCBXREFfUFJPSkVDVF9OQU1FKTtcbmNvbnN0IFJVTk5FUl9TQ0hFTUUgPSAnV2ViRHJpdmVyQWdlbnRSdW5uZXInO1xuY29uc3QgRElTQUJMRV9TVE9SRV9BUkcgPSAnQ09NUElMRVJfSU5ERVhfU1RPUkVfRU5BQkxFPU5PJztcbmNvbnN0IFhDT0RFQlVJTEQgPSAneGNvZGVidWlsZCc7XG5jb25zdCBTVEFSVFVQX1RJTUVPVVRfTVMgPSAxMjAwMDA7XG5jb25zdCBERUZBVUxUX1NZU1RFTV9QT1JUID0gMTAxMDA7XG5jb25zdCBERUZBVUxUX1NZU1RFTV9IT1NUID0gJzEyNy4wLjAuMSc7XG5jb25zdCBERUZBVUxUX1NIT1dfU0VSVkVSX0xPR1MgPSBmYWxzZTtcbmNvbnN0IFJVTk5JTkdfUFJPQ0VTU19JRFMgPSBbXTtcbmNvbnN0IFJFQ0VOVF9VUEdSQURFX1RJTUVTVEFNUF9QQVRIID0gcGF0aC5qb2luKCcuYXBwaXVtJyxcbiAgJ3dlYmRyaXZlcmFnZW50X21hYycsICd1cGdyYWRlLnRpbWUnKTtcblxuXG5hc3luYyBmdW5jdGlvbiBnZXRVcGdyYWRlVGltZXN0YW1wICgpIHtcbiAgY29uc3QgcGFja2FnZU1hbmlmZXN0ID0gcGF0aC5yZXNvbHZlKFJPT1RfRElSLCAncGFja2FnZS5qc29uJyk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHBhY2thZ2VNYW5pZmVzdCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB7bXRpbWV9ID0gYXdhaXQgZnMuc3RhdChwYWNrYWdlTWFuaWZlc3QpO1xuICByZXR1cm4gbXRpbWUuZ2V0VGltZSgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMgKCkge1xuICBpZiAoIV8uaXNFbXB0eShSVU5OSU5HX1BST0NFU1NfSURTKSkge1xuICAgIGxvZy5kZWJ1ZyhgQ2xlYW5pbmcgdXAgJHtSVU5OSU5HX1BST0NFU1NfSURTLmxlbmd0aH0gb2Jzb2xldGUgYCArXG4gICAgICB1dGlsLnBsdXJhbGl6ZSgncHJvY2VzcycsIFJVTk5JTkdfUFJPQ0VTU19JRFMubGVuZ3RoLCBmYWxzZSkpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKCdraWxsJywgWyctOScsIC4uLlJVTk5JTkdfUFJPQ0VTU19JRFNdKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgXy5wdWxsQWxsKFJVTk5JTkdfUFJPQ0VTU19JRFMsIFJVTk5JTkdfUFJPQ0VTU19JRFMpO1xuICB9XG59XG5cbnByb2Nlc3Mub25jZSgnZXhpdCcsICgpID0+IHtcbiAgaWYgKCFfLmlzRW1wdHkoUlVOTklOR19QUk9DRVNTX0lEUykpIHtcbiAgICB0cnkge1xuICAgICAgZXhlY1N5bmMoYGtpbGwgLTkgJHtSVU5OSU5HX1BST0NFU1NfSURTLmpvaW4oJyAnKX1gKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgXy5wdWxsQWxsKFJVTk5JTkdfUFJPQ0VTU19JRFMsIFJVTk5JTkdfUFJPQ0VTU19JRFMpO1xuICB9XG59KTtcblxuXG5jbGFzcyBXREFNYWNQcm94eSBleHRlbmRzIEpXUHJveHkge1xuICBhc3luYyBwcm94eUNvbW1hbmQgKHVybCwgbWV0aG9kLCBib2R5ID0gbnVsbCkge1xuICAgIGlmICh0aGlzLmRpZFByb2Nlc3NFeGl0KSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRDb250ZXh0RXJyb3IoXG4gICAgICAgIGAnJHttZXRob2R9ICR7dXJsfScgY2Fubm90IGJlIHByb3hpZWQgdG8gTWFjMiBEcml2ZXIgc2VydmVyIGJlY2F1c2UgYCArXG4gICAgICAgICdpdHMgcHJvY2VzcyBpcyBub3QgcnVubmluZyAocHJvYmFibHkgY3Jhc2hlZCkuIENoZWNrIHRoZSBBcHBpdW0gbG9nIGZvciBtb3JlIGRldGFpbHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnByb3h5Q29tbWFuZCh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cbn1cblxuY2xhc3MgV0RBTWFjUHJvY2VzcyB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLnNob3dTZXJ2ZXJMb2dzID0gREVGQVVMVF9TSE9XX1NFUlZFUl9MT0dTO1xuICAgIHRoaXMucG9ydCA9IERFRkFVTFRfU1lTVEVNX1BPUlQ7XG4gICAgdGhpcy5ob3N0ID0gREVGQVVMVF9TWVNURU1fSE9TVDtcbiAgICB0aGlzLmJvb3RzdHJhcFJvb3QgPSBERUZBVUxUX1dEQV9ST09UO1xuICAgIHRoaXMucHJvYyA9IG51bGw7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEodGhpcy5wcm9jPy5pc1J1bm5pbmcpO1xuICB9XG5cbiAgZ2V0IHBpZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSdW5uaW5nID8gdGhpcy5wcm9jLnBpZCA6IG51bGw7XG4gIH1cblxuICBhc3luYyBsaXN0Q2hpbGRyZW5QaWRzICgpIHtcbiAgICByZXR1cm4gdGhpcy5waWQgPyAoYXdhaXQgbGlzdENoaWxkcmVuUHJvY2Vzc0lkcyh0aGlzLnBpZCkpIDogW107XG4gIH1cblxuICBhc3luYyBpc0ZyZXNoVXBncmFkZSAoKSB7XG4gICAgY29uc3QgaG9tZUZvbGRlciA9IHByb2Nlc3MuZW52LkhPTUU7XG4gICAgaWYgKCFob21lRm9sZGVyKSB7XG4gICAgICBsb2cuaW5mbygnVGhlIEhPTUUgZm9sZGVyIHBhdGggY2Fubm90IGJlIGRldGVybWluZWQnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VXBncmFkZVRpbWVzdGFtcCA9IGF3YWl0IGdldFVwZ3JhZGVUaW1lc3RhbXAoKTtcbiAgICBpZiAoIV8uaXNJbnRlZ2VyKGN1cnJlbnRVcGdyYWRlVGltZXN0YW1wKSkge1xuICAgICAgbG9nLmluZm8oJ0l0IGlzIGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lc3RhbXAgb2YgdGhlIHBhY2thZ2UnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lc3RhbXBQYXRoID0gcGF0aC5yZXNvbHZlKGhvbWVGb2xkZXIsIFJFQ0VOVF9VUEdSQURFX1RJTUVTVEFNUF9QQVRIKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHRpbWVzdGFtcFBhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5hY2Nlc3ModGltZXN0YW1wUGF0aCwgZnMuV19PSyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgbG9nLmluZm8oYFdlYkRyaXZlckFnZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9JyBpcyBub3Qgd3JpdGVhYmxlYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY2VudFVwZ3JhZGVUaW1lc3RhbXAgPSBwYXJzZUludChhd2FpdCBmcy5yZWFkRmlsZSh0aW1lc3RhbXBQYXRoLCAndXRmOCcpLCAxMCk7XG4gICAgICBpZiAoXy5pc0ludGVnZXIocmVjZW50VXBncmFkZVRpbWVzdGFtcCkpIHtcbiAgICAgICAgaWYgKHJlY2VudFVwZ3JhZGVUaW1lc3RhbXAgPj0gY3VycmVudFVwZ3JhZGVUaW1lc3RhbXApIHtcbiAgICAgICAgICBsb2cuaW5mbyhgV2ViRHJpdmVyQWdlbnQgc291cmNlcyBhcmUgdXAgdG8gZGF0ZSBgICtcbiAgICAgICAgICAgIGAoJHtyZWNlbnRVcGdyYWRlVGltZXN0YW1wfSA+PSAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfSlgKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbG9nLmluZm8oYFdlYkRyaXZlckFnZW50IHNvdXJjZXMgaGF2ZSBiZWVuIHVwZ3JhZGVkIGAgK1xuICAgICAgICAgIGAoJHtyZWNlbnRVcGdyYWRlVGltZXN0YW1wfSA8ICR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9KWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLndhcm4oYFRoZSByZWNlbnQgdXBncmFkZSB0aW1lc3RhbXAgYXQgJyR7dGltZXN0YW1wUGF0aH0nIGlzIGNvcnJ1cHRlZC4gVHJ5aW5nIHRvIGZpeCBpdGApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBta2RpcnAocGF0aC5kaXJuYW1lKHRpbWVzdGFtcFBhdGgpKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0aW1lc3RhbXBQYXRoLCBgJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH1gLCAndXRmOCcpO1xuICAgICAgbG9nLmRlYnVnKGBTdG9yZWQgdGhlIHJlY2VudCBXZWJEcml2ZXJBZ2VudCB1cGdyYWRlIHRpbWVzdGFtcCAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfSBgICtcbiAgICAgICAgYGF0ICcke3RpbWVzdGFtcFBhdGh9J2ApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5pbmZvKGBVbmFibGUgdG8gY3JlYXRlIHRoZSByZWNlbnQgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgYXQgJyR7dGltZXN0YW1wUGF0aH0nLiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGhhc1NhbWVPcHRzICh7IHNob3dTZXJ2ZXJMb2dzLCBzeXN0ZW1Qb3J0LCBzeXN0ZW1Ib3N0LCBib290c3RyYXBSb290IH0pIHtcbiAgICBpZiAoXy5pc0Jvb2xlYW4oc2hvd1NlcnZlckxvZ3MpICYmIHRoaXMuc2hvd1NlcnZlckxvZ3MgIT09IHNob3dTZXJ2ZXJMb2dzXG4gICAgICB8fCBfLmlzTmlsKHNob3dTZXJ2ZXJMb2dzKSAmJiB0aGlzLnNob3dTZXJ2ZXJMb2dzICE9PSBERUZBVUxUX1NIT1dfU0VSVkVSX0xPR1MpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHN5c3RlbVBvcnQgJiYgdGhpcy5wb3J0ICE9PSBzeXN0ZW1Qb3J0XG4gICAgICB8fCAhc3lzdGVtUG9ydCAmJiB0aGlzLnBvcnQgIT09IERFRkFVTFRfU1lTVEVNX1BPUlQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHN5c3RlbUhvc3QgJiYgdGhpcy5ob3N0ICE9PSBzeXN0ZW1Ib3N0XG4gICAgICB8fCAhc3lzdGVtSG9zdCAmJiB0aGlzLmhvc3QgIT09IERFRkFVTFRfU1lTVEVNX0hPU1QpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGJvb3RzdHJhcFJvb3QgJiYgdGhpcy5ib290c3RyYXBSb290ICE9PSBib290c3RyYXBSb290XG4gICAgICB8fCAhYm9vdHN0cmFwUm9vdCAmJiB0aGlzLmJvb3RzdHJhcFJvb3QgIT09IERFRkFVTFRfV0RBX1JPT1QpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGluaXQgKG9wdHMgPSB7fSkge1xuICAgIGlmICh0aGlzLmlzUnVubmluZyAmJiB0aGlzLmhhc1NhbWVPcHRzKG9wdHMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93U2VydmVyTG9ncyA9IG9wdHMuc2hvd1NlcnZlckxvZ3MgPz8gdGhpcy5zaG93U2VydmVyTG9ncztcbiAgICB0aGlzLnBvcnQgPSBvcHRzLnN5c3RlbVBvcnQgPz8gdGhpcy5wb3J0O1xuICAgIHRoaXMuaG9zdCA9IG9wdHMuc3lzdGVtSG9zdCA/PyB0aGlzLmhvc3Q7XG4gICAgdGhpcy5ib290c3RyYXBSb290ID0gb3B0cy5ib290c3RyYXBSb290ID8/IHRoaXMuYm9vdHN0cmFwUm9vdDtcblxuICAgIGxvZy5kZWJ1ZyhgVXNpbmcgYm9vdHN0cmFwIHJvb3Q6ICR7dGhpcy5ib290c3RyYXBSb290fWApO1xuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKFdEQV9QUk9KRUNUKHRoaXMuYm9vdHN0cmFwUm9vdCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7V0RBX1BST0pFQ1RfTkFNRX0gZG9lcyBub3QgZXhpc3QgYXQgJyR7V0RBX1BST0pFQ1QodGhpcy5ib290c3RyYXBSb290KX0nLiBgICtcbiAgICAgICAgYFdhcyAnYm9vdHN0cmFwUm9vdCcgc2V0IHRvIGEgcHJvcGVyIHZhbHVlP2ApO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMua2lsbCgpO1xuICAgIGF3YWl0IGNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcygpO1xuXG4gICAgbGV0IHhjb2RlYnVpbGQ7XG4gICAgdHJ5IHtcbiAgICAgIHhjb2RlYnVpbGQgPSBhd2FpdCBmcy53aGljaChYQ09ERUJVSUxEKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7WENPREVCVUlMRH0gYmluYXJ5IGNhbm5vdCBiZSBmb3VuZCBpbiBQQVRILiBgICtcbiAgICAgICAgYFBsZWFzZSBtYWtlIHN1cmUgdGhhdCBYY29kZSBpcyBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW1gKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBVc2luZyAke1hDT0RFQlVJTER9IGJpbmFyeSBhdCAnJHt4Y29kZWJ1aWxkfSdgKTtcblxuICAgIGlmIChhd2FpdCB0aGlzLmlzRnJlc2hVcGdyYWRlKCkpIHtcbiAgICAgIGxvZy5pbmZvKCdQZXJmb3JtaW5nIHByb2plY3QgY2xlYW51cCcpO1xuICAgICAgY29uc3QgYXJncyA9IFtcbiAgICAgICAgJ2NsZWFuJyxcbiAgICAgICAgJy1wcm9qZWN0JywgV0RBX1BST0pFQ1QodGhpcy5ib290c3RyYXBSb290KSxcbiAgICAgICAgJy1zY2hlbWUnLCBSVU5ORVJfU0NIRU1FLFxuICAgICAgXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV4ZWMoWENPREVCVUlMRCwgYXJncywge1xuICAgICAgICAgIGN3ZDogdGhpcy5ib290c3RyYXBSb290LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLndhcm4oYENhbm5vdCBwZXJmb3JtIHByb2plY3QgY2xlYW51cC4gYCArXG4gICAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2cuZGVidWcoYFVzaW5nICR7dGhpcy5ob3N0fSBhcyBzZXJ2ZXIgaG9zdGApO1xuICAgIGxvZy5kZWJ1ZyhgVXNpbmcgcG9ydCAke3RoaXMucG9ydH1gKTtcbiAgICBjb25zdCBpc1BvcnRCdXN5ID0gYXN5bmMgKCkgPT4gKGF3YWl0IGNoZWNrUG9ydFN0YXR1cyh0aGlzLnBvcnQsIHRoaXMuaG9zdCkpID09PSAnb3Blbic7XG4gICAgaWYgKGF3YWl0IGlzUG9ydEJ1c3koKSkge1xuICAgICAgbG9nLndhcm4oYFRoZSBwb3J0ICMke3RoaXMucG9ydH0gYXQgJHt0aGlzLmhvc3R9IGlzIGJ1c3kuIGAgK1xuICAgICAgICBgQXNzdW1pbmcgaXQgaXMgYW4gb2Jzb2xldGUgV0RBIHNlcnZlciBpbnN0YW5jZSBhbmQgYCArXG4gICAgICAgIGB0cnlpbmcgdG8gdGVybWluYXRlIGl0IGluIG9yZGVyIHRvIHN0YXJ0IGEgbmV3IG9uZWApO1xuICAgICAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGF4aW9zLmRlbGV0ZShgaHR0cDovLyR7dGhpcy5ob3N0fToke3RoaXMucG9ydH0vYCwge1xuICAgICAgICAgIHRpbWVvdXQ6IDUwMDAsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBHaXZlIHRoZSBzZXJ2ZXIgc29tZSB0aW1lIHRvIGZpbmlzaCBhbmQgc3RvcCBsaXN0ZW5pbmdcbiAgICAgICAgYXdhaXQgQi5kZWxheSg1MDApO1xuICAgICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+ICEoYXdhaXQgaXNQb3J0QnVzeSgpKSwge1xuICAgICAgICAgIHdhaXRNczogMzAwMCxcbiAgICAgICAgICBpbnRlcnZhbE1zOiAxMDAsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2cud2FybihgRGlkIG5vdCBrbm93IGhvdyB0byB0ZXJtaW5hdGUgdGhlIHByb2Nlc3MgYXQgJHt0aGlzLmhvc3R9OiR7dGhpcy5wb3J0fTogJHtlLm1lc3NhZ2V9LiBgICtcbiAgICAgICAgICBgUGVyaGFwcywgaXQgaXMgbm90IGEgV0RBIHNlcnZlciwgd2hpY2ggaXMgaG9nZ2luZyB0aGUgcG9ydD9gKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcG9ydCAjJHt0aGlzLnBvcnR9IGF0ICR7dGhpcy5ob3N0fSBpcyBidXN5LiBgICtcbiAgICAgICAgICBgQ29uc2lkZXIgc2V0dGluZyAnc3lzdGVtUG9ydCcgY2FwYWJpbGl0eSB0byBhbm90aGVyIGZyZWUgcG9ydCBudW1iZXIgYW5kL29yIGAgK1xuICAgICAgICAgIGBtYWtlIHN1cmUgcHJldmlvdXMgZHJpdmVyIHNlc3Npb25zIGhhdmUgYmVlbiBjbG9zZWQgcHJvcGVybHkuYCk7XG4gICAgICB9XG4gICAgICBsb2cuaW5mbyhgVGhlIHByZXZpb3VzbHkgcnVubmluZyBXREEgc2VydmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB0ZXJtaW5hdGVkIGFmdGVyIGAgK1xuICAgICAgICBgJHtNYXRoLnJvdW5kKHRpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMpfW1zYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICdidWlsZC1mb3ItdGVzdGluZycsICd0ZXN0LXdpdGhvdXQtYnVpbGRpbmcnLFxuICAgICAgJy1wcm9qZWN0JywgV0RBX1BST0pFQ1QodGhpcy5ib290c3RyYXBSb290KSxcbiAgICAgICctc2NoZW1lJywgUlVOTkVSX1NDSEVNRSxcbiAgICAgIERJU0FCTEVfU1RPUkVfQVJHLFxuICAgIF07XG4gICAgY29uc3QgZW52ID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIHtcbiAgICAgIFVTRV9QT1JUOiBgJHt0aGlzLnBvcnR9YCxcbiAgICAgIFVTRV9IT1NUOiB0aGlzLmhvc3QsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9jID0gbmV3IFN1YlByb2Nlc3MoeGNvZGVidWlsZCwgYXJncywge1xuICAgICAgY3dkOiB0aGlzLmJvb3RzdHJhcFJvb3QsXG4gICAgICBlbnYsXG4gICAgfSk7XG4gICAgaWYgKCF0aGlzLnNob3dTZXJ2ZXJMb2dzKSB7XG4gICAgICBsb2cuaW5mbyhgTWFjMkRyaXZlciBob3N0IHByb2Nlc3MgbG9nZ2luZyBpcyBkaXNhYmxlZC4gYCArXG4gICAgICAgIGBBbGwgdGhlICR7WENPREVCVUlMRH0gb3V0cHV0IGlzIGdvaW5nIHRvIGJlIHN1cHByZXNzZWQuIGAgK1xuICAgICAgICBgU2V0IHRoZSAnc2hvd1NlcnZlckxvZ3MnIGNhcGFiaWxpdHkgdG8gJ3RydWUnIGlmIHRoaXMgaXMgYW4gdW5kZXNpcmVkIGJlaGF2aW9yYCk7XG4gICAgfVxuICAgIHRoaXMucHJvYy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuc2hvd1NlcnZlckxvZ3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsaW5lID0gXy50cmltKHN0ZG91dCB8fCBzdGRlcnIpO1xuICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBbJHtYQ09ERUJVSUxEfV0gJHtsaW5lfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgIGxvZy5pbmZvKGBNYWMyRHJpdmVyIGhvc3QgcHJvY2VzcyBoYXMgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9LCBzaWduYWwgJHtzaWduYWx9YCk7XG4gICAgfSk7XG4gICAgbG9nLmluZm8oYFN0YXJ0aW5nIE1hYzJEcml2ZXIgaG9zdCBwcm9jZXNzOiAke1hDT0RFQlVJTER9ICR7dXRpbC5xdW90ZShhcmdzKX1gKTtcbiAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoMCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBzdG9wICgpIHtcbiAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRyZW5QaWRzID0gYXdhaXQgdGhpcy5saXN0Q2hpbGRyZW5QaWRzKCk7XG4gICAgaWYgKCFfLmlzRW1wdHkoY2hpbGRyZW5QaWRzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZXhlYygna2lsbCcsIGNoaWxkcmVuUGlkcyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCdTSUdURVJNJywgMzAwMCk7XG4gIH1cblxuICBhc3luYyBraWxsICgpIHtcbiAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRyZW5QaWRzID0gYXdhaXQgdGhpcy5saXN0Q2hpbGRyZW5QaWRzKCk7XG4gICAgaWYgKCFfLmlzRW1wdHkoY2hpbGRyZW5QaWRzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZXhlYygna2lsbCcsIFsnLTknLCAuLi5jaGlsZHJlblBpZHNdKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCdTSUdLSUxMJyk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG59XG5cbmNsYXNzIFdEQU1hY1NlcnZlciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLnByb2Nlc3MgPSBudWxsO1xuICAgIHRoaXMuc2VydmVyU3RhcnR1cFRpbWVvdXRNcyA9IFNUQVJUVVBfVElNRU9VVF9NUztcbiAgICB0aGlzLnByb3h5ID0gbnVsbDtcblxuICAgIC8vIFRvIGhhbmRsZSBpZiB0aGUgV0RBTWFjIHNlcnZlciBpcyBwcm94eWluZyByZXF1ZXN0cyB0byBhIHJlbW90ZSBXREFNYWMgYXBwIGluc3RhbmNlXG4gICAgdGhpcy5pc1Byb3h5aW5nVG9SZW1vdGVTZXJ2ZXIgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGlzUHJveHlSZWFkeSAodGhyb3dPbkV4aXQgPSB0cnVlKSB7XG4gICAgaWYgKCF0aGlzLnByb3h5KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRocm93T25FeGl0ICYmIHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBQcm94eVByb3BlcnRpZXNcbiAgICpcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHNjaGVtZSAtIFRoZSBzY2hlbWUgcHJveHkgdG8uXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBob3N0IC0gVGhlIGhvc3QgbmFtZSBwcm94eSB0by5cbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IHBvcnQgLSBUaGUgcG9ydCBudW1iZXIgcHJveHkgdG8uXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggcHJveHkgdG8uXG4gICAqL1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHByb3h5IGluZm9ybWF0aW9uIHdoZXJlIFdEQU1hY1NlcnZlciBwcm94eSB0by5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNhcHMgLSBUaGUgY2FwYWJpbGl0aWVzIGluIHRoZSBzZXNzaW9uLlxuICAgKiBAcmV0dXJuIHtQcm94eVByb3BlcnRpZXN9XG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgJ3dlYkRyaXZlckFnZW50TWFjVXJsJyBoYWQgaW52YWxpZCBVUkxcbiAgICovXG4gIHBhcnNlUHJveHlQcm9wZXJ0aWVzIChjYXBzKSB7XG4gICAgbGV0IHNjaGVtZSA9ICdodHRwJztcbiAgICBpZiAoIWNhcHMud2ViRHJpdmVyQWdlbnRNYWNVcmwpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNjaGVtZSxcbiAgICAgICAgc2VydmVyOiAodGhpcy5wcm9jZXNzPy5ob3N0ID8/IGNhcHMuc3lzdGVtSG9zdCkgPz8gREVGQVVMVF9TWVNURU1fSE9TVCxcbiAgICAgICAgcG9ydDogKHRoaXMucHJvY2Vzcz8ucG9ydCA/PyBjYXBzLnN5c3RlbVBvcnQpID8/IERFRkFVTFRfU1lTVEVNX1BPUlQsXG4gICAgICAgIHBhdGg6ICcnXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBwYXJzZWRVcmw7XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZFVybCA9IG5ldyB1cmwuVVJMKGNhcHMud2ViRHJpdmVyQWdlbnRNYWNVcmwpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgd2ViRHJpdmVyQWdlbnRNYWNVcmwsICcke2NhcHMud2ViRHJpdmVyQWdlbnRNYWNVcmx9JywgYCArXG4gICAgICAgIGBpbiB0aGUgY2FwYWJpbGl0aWVzIGlzIGludmFsaWQuICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcHJvdG9jb2wsIGhvc3RuYW1lLCBwb3J0LCBwYXRobmFtZSB9ID0gcGFyc2VkVXJsO1xuICAgIGlmIChfLmlzU3RyaW5nKHByb3RvY29sKSkge1xuICAgICAgc2NoZW1lID0gcHJvdG9jb2wuc3BsaXQoJzonKVswXTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtZSxcbiAgICAgIHNlcnZlcjogaG9zdG5hbWUgPz8gREVGQVVMVF9TWVNURU1fSE9TVCxcbiAgICAgIHBvcnQ6IF8uaXNFbXB0eShwb3J0KSA/IERFRkFVTFRfU1lTVEVNX1BPUlQgOiBfLnBhcnNlSW50KHBvcnQpLFxuICAgICAgcGF0aDogcGF0aG5hbWUgPT09ICcvJyA/ICcnIDogcGF0aG5hbWVcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc3RhcnRTZXNzaW9uIChjYXBzKSB7XG4gICAgdGhpcy5zZXJ2ZXJTdGFydHVwVGltZW91dE1zID0gY2Fwcy5zZXJ2ZXJTdGFydHVwVGltZW91dCA/PyB0aGlzLnNlcnZlclN0YXJ0dXBUaW1lb3V0TXM7XG5cbiAgICB0aGlzLmlzUHJveHlpbmdUb1JlbW90ZVNlcnZlciA9ICEhY2Fwcy53ZWJEcml2ZXJBZ2VudE1hY1VybDtcblxuICAgIGxldCB3YXNQcm9jZXNzSW5pdE5lY2Vzc2FyeTtcbiAgICBpZiAodGhpcy5pc1Byb3h5aW5nVG9SZW1vdGVTZXJ2ZXIpIHtcbiAgICAgIGlmICh0aGlzLnByb2Nlc3MpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzLmtpbGwoKTtcbiAgICAgICAgYXdhaXQgY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzKCk7XG4gICAgICAgIHRoaXMucHJvY2VzcyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHdhc1Byb2Nlc3NJbml0TmVjZXNzYXJ5ID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5wcm9jZXNzKSB7XG4gICAgICAgIHRoaXMucHJvY2VzcyA9IG5ldyBXREFNYWNQcm9jZXNzKCk7XG4gICAgICB9XG4gICAgICB3YXNQcm9jZXNzSW5pdE5lY2Vzc2FyeSA9IGF3YWl0IHRoaXMucHJvY2Vzcy5pbml0KGNhcHMpO1xuICAgIH1cblxuICAgIGlmICh3YXNQcm9jZXNzSW5pdE5lY2Vzc2FyeSB8fCB0aGlzLmlzUHJveHlpbmdUb1JlbW90ZVNlcnZlciB8fCAhdGhpcy5wcm94eSkge1xuICAgICAgY29uc3Qge3NjaGVtZSwgc2VydmVyLCBwb3J0LCBwYXRofSA9IHRoaXMucGFyc2VQcm94eVByb3BlcnRpZXMoY2Fwcyk7XG4gICAgICB0aGlzLnByb3h5ID0gbmV3IFdEQU1hY1Byb3h5KHtcbiAgICAgICAgc2NoZW1lLFxuICAgICAgICBzZXJ2ZXIsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIGJhc2U6IHBhdGgsXG4gICAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcm94eS5kaWRQcm9jZXNzRXhpdCA9IGZhbHNlO1xuXG4gICAgICBpZiAodGhpcy5wcm9jZXNzKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzcy5wcm9jLm9uKCdleGl0JywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5pc1Byb3h5UmVhZHkoKSwge1xuICAgICAgICAgIHdhaXRNczogdGhpcy5zZXJ2ZXJTdGFydHVwVGltZW91dE1zLFxuICAgICAgICAgIGludGVydmFsTXM6IDEwMDAsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAodGhpcy5wcm9jZXNzPy5pc1J1bm5pbmcpIHtcbiAgICAgICAgICAvLyBhdm9pZCBcImZyb3plblwiIHByb2Nlc3NlcyxcbiAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3Mua2lsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvQ29uZGl0aW9uIHVubWV0Ly50ZXN0KGUubWVzc2FnZSkpIHtcbiAgICAgICAgICBjb25zdCBtc2cgPSB0aGlzLmlzUHJveHlpbmdUb1JlbW90ZVNlcnZlclxuICAgICAgICAgICAgPyBgTm8gcmVzcG9uc2UgZnJvbSAnJHtzY2hlbWV9Oi8vJHtzZXJ2ZXJ9OiR7cG9ydH0ke3BhdGh9JyB3aXRoaW4gJHt0aGlzLnNlcnZlclN0YXJ0dXBUaW1lb3V0TXN9bXMgdGltZW91dC5gICtcbiAgICAgICAgICAgIGBQbGVhc2UgbWFrZSBzdXJlIHRoZSByZW1vdGUgc2VydmVyIGlzIHJ1bm5pbmcgYW5kIGFjY2Vzc2libGUgYnkgQXBwaXVtYFxuICAgICAgICAgICAgOiBgTWFjMkRyaXZlciBzZXJ2ZXIgaXMgbm90IGxpc3RlbmluZyB3aXRoaW4gJHt0aGlzLnNlcnZlclN0YXJ0dXBUaW1lb3V0TXN9bXMgdGltZW91dC4gYCArXG4gICAgICAgICAgICBgVHJ5IHRvIGluY3JlYXNlIHRoZSB2YWx1ZSBvZiAnc2VydmVyU3RhcnR1cFRpbWVvdXQnIGNhcGFiaWxpdHksIGNoZWNrIHRoZSBzZXJ2ZXIgbG9ncyBgICtcbiAgICAgICAgICAgIGBhbmQgbWFrZSBzdXJlIHRoZSAke1hDT0RFQlVJTER9IGhvc3QgcHJvY2VzcyBjb3VsZCBiZSBzdGFydGVkIG1hbnVhbGx5IGZyb20gYSB0ZXJtaW5hbGA7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvY2Vzcykge1xuICAgICAgICBjb25zdCBwaWQgPSB0aGlzLnByb2Nlc3MucGlkO1xuICAgICAgICBjb25zdCBjaGlsZHJlblBpZHMgPSBhd2FpdCB0aGlzLnByb2Nlc3MubGlzdENoaWxkcmVuUGlkcygpO1xuICAgICAgICBSVU5OSU5HX1BST0NFU1NfSURTLnB1c2goLi4uY2hpbGRyZW5QaWRzLCBwaWQpO1xuICAgICAgICB0aGlzLnByb2Nlc3MucHJvYy5vbignZXhpdCcsICgpID0+IHZvaWQgXy5wdWxsKFJVTk5JTkdfUFJPQ0VTU19JRFMsIHBpZCkpO1xuICAgICAgICBsb2cuaW5mbyhgVGhlIGhvc3QgcHJvY2VzcyBpcyByZWFkeSB3aXRoaW4gJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmluZm8oJ1RoZSBob3N0IHByb2Nlc3MgaGFzIGFscmVhZHkgYmVlbiBsaXN0ZW5pbmcuIFByb2NlZWRpbmcgd2l0aCBzZXNzaW9uIGNyZWF0aW9uJyk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5wcm94eS5jb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywge1xuICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICAgIGFsd2F5c01hdGNoOiBjYXBzLFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc3RvcFNlc3Npb24gKCkge1xuICAgIGlmICghdGhpcy5pc1Byb3h5aW5nVG9SZW1vdGVTZXJ2ZXIgJiYgISh0aGlzLnByb2Nlc3M/LmlzUnVubmluZykpIHtcbiAgICAgIGxvZy5pbmZvKGBNYWMyRHJpdmVyIHNlc3Npb24gY2Fubm90IGJlIHN0b3BwZWQsIGJlY2F1c2UgdGhlIHNlcnZlciBpcyBub3QgcnVubmluZ2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3h5Py5zZXNzaW9uSWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJveHkuY29tbWFuZChgL3Nlc3Npb24vJHt0aGlzLnByb3h5LnNlc3Npb25JZH1gLCAnREVMRVRFJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5pbmZvKGBNYWMyRHJpdmVyIHNlc3Npb24gY2Fubm90IGJlIGRlbGV0ZWQuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgV0RBX01BQ19TRVJWRVIgPSBuZXcgV0RBTWFjU2VydmVyKCk7XG5cbmV4cG9ydCBkZWZhdWx0IFdEQV9NQUNfU0VSVkVSO1xuIl0sImZpbGUiOiJsaWIvd2RhLW1hYy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
package/lib/wda-mac.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import url from 'url';
|
|
4
|
+
import axios from 'axios';
|
|
5
|
+
import B from 'bluebird';
|
|
4
6
|
import { JWProxy, errors } from 'appium-base-driver';
|
|
5
7
|
import { fs, logger, util, timing, mkdirp } from 'appium-support';
|
|
6
8
|
import { SubProcess, exec } from 'teen_process';
|
|
@@ -208,11 +210,31 @@ class WDAMacProcess {
|
|
|
208
210
|
|
|
209
211
|
log.debug(`Using ${this.host} as server host`);
|
|
210
212
|
log.debug(`Using port ${this.port}`);
|
|
211
|
-
const isPortBusy = (await checkPortStatus(this.port, this.host)) === 'open';
|
|
212
|
-
if (isPortBusy) {
|
|
213
|
-
|
|
214
|
-
`
|
|
215
|
-
`
|
|
213
|
+
const isPortBusy = async () => (await checkPortStatus(this.port, this.host)) === 'open';
|
|
214
|
+
if (await isPortBusy()) {
|
|
215
|
+
log.warn(`The port #${this.port} at ${this.host} is busy. ` +
|
|
216
|
+
`Assuming it is an obsolete WDA server instance and ` +
|
|
217
|
+
`trying to terminate it in order to start a new one`);
|
|
218
|
+
const timer = new timing.Timer().start();
|
|
219
|
+
try {
|
|
220
|
+
await axios.delete(`http://${this.host}:${this.port}/`, {
|
|
221
|
+
timeout: 5000,
|
|
222
|
+
});
|
|
223
|
+
// Give the server some time to finish and stop listening
|
|
224
|
+
await B.delay(500);
|
|
225
|
+
await waitForCondition(async () => !(await isPortBusy()), {
|
|
226
|
+
waitMs: 3000,
|
|
227
|
+
intervalMs: 100,
|
|
228
|
+
});
|
|
229
|
+
} catch (e) {
|
|
230
|
+
log.warn(`Did not know how to terminate the process at ${this.host}:${this.port}: ${e.message}. ` +
|
|
231
|
+
`Perhaps, it is not a WDA server, which is hogging the port?`);
|
|
232
|
+
throw new Error(`The port #${this.port} at ${this.host} is busy. ` +
|
|
233
|
+
`Consider setting 'systemPort' capability to another free port number and/or ` +
|
|
234
|
+
`make sure previous driver sessions have been closed properly.`);
|
|
235
|
+
}
|
|
236
|
+
log.info(`The previously running WDA server has been successfully terminated after ` +
|
|
237
|
+
`${Math.round(timer.getDuration().asMilliSeconds)}ms`);
|
|
216
238
|
}
|
|
217
239
|
|
|
218
240
|
const args = [
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"mac",
|
|
7
7
|
"XCTest"
|
|
8
8
|
],
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.13.0",
|
|
10
10
|
"author": "appium",
|
|
11
11
|
"license": "Apache-2.0",
|
|
12
12
|
"repository": {
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"appium-base-driver": "^7.1.0",
|
|
35
35
|
"appium-support": "^2.46.0",
|
|
36
36
|
"asyncbox": "^2.0.2",
|
|
37
|
+
"axios": "^0.x",
|
|
37
38
|
"bluebird": "^3.5.1",
|
|
38
39
|
"lodash": "^4.17.4",
|
|
39
40
|
"portscanner": "2.2.0",
|
|
@@ -65,7 +66,7 @@
|
|
|
65
66
|
"gulp": "^4.0.0",
|
|
66
67
|
"mocha": "^8.0.1",
|
|
67
68
|
"pre-commit": "^1.1.3",
|
|
68
|
-
"sinon": "^
|
|
69
|
+
"sinon": "^10.0.0",
|
|
69
70
|
"wd": "^1.5.0"
|
|
70
71
|
},
|
|
71
72
|
"files": [
|