appium-remote-debugger 8.13.2 → 9.0.2

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.
@@ -21,7 +21,7 @@ var _bluebird = _interopRequireDefault(require("bluebird"));
21
21
 
22
22
  var _rpcMessageHandler = _interopRequireDefault(require("./rpc-message-handler"));
23
23
 
24
- var _appiumSupport = require("appium-support");
24
+ var _support = require("@appium/support");
25
25
 
26
26
  const DATA_LOG_LENGTH = {
27
27
  length: 200
@@ -32,7 +32,7 @@ const MIN_PLATFORM_FOR_TARGET_BASED = '12.2';
32
32
  const MIN_PLATFORM_NO_TARGET_EXISTS = '13.4';
33
33
 
34
34
  function isTargetBased(isSafari, platformVersion) {
35
- const isHighVersion = _appiumSupport.util.compareVersions(platformVersion, '>=', MIN_PLATFORM_FOR_TARGET_BASED);
35
+ const isHighVersion = _support.util.compareVersions(platformVersion, '>=', MIN_PLATFORM_FOR_TARGET_BASED);
36
36
 
37
37
  _logger.default.debug(`Checking which communication style to use (${isSafari ? '' : 'non-'}Safari on platform version '${platformVersion}')`);
38
38
 
@@ -57,8 +57,8 @@ class RpcClient {
57
57
  } = opts;
58
58
  this.isSafari = isSafari;
59
59
  this.isConnected = false;
60
- this.connId = _appiumSupport.util.uuidV4();
61
- this.senderId = _appiumSupport.util.uuidV4();
60
+ this.connId = _support.util.uuidV4();
61
+ this.senderId = _support.util.uuidV4();
62
62
  this.msgId = 0;
63
63
  this.logAllCommunication = logAllCommunication;
64
64
  this.logAllCommunicationHexDump = logAllCommunicationHexDump;
@@ -167,7 +167,7 @@ class RpcClient {
167
167
  }
168
168
 
169
169
  async send(command, opts = {}, waitForResponse = true) {
170
- const timer = new _appiumSupport.timing.Timer().start();
170
+ const timer = new _support.timing.Timer().start();
171
171
  const {
172
172
  appIdKey,
173
173
  pageIdKey
@@ -231,7 +231,7 @@ class RpcClient {
231
231
 
232
232
  const cmd = this.remoteMessages.getRemoteCommand(command, fullOpts);
233
233
 
234
- if (cmd === null || cmd === void 0 ? void 0 : (_cmd$__argument = cmd.__argument) === null || _cmd$__argument === void 0 ? void 0 : _cmd$__argument.WIRSocketDataKey) {
234
+ if (cmd !== null && cmd !== void 0 && (_cmd$__argument = cmd.__argument) !== null && _cmd$__argument !== void 0 && _cmd$__argument.WIRSocketDataKey) {
235
235
  if (_lodash.default.isNil(cmd.__argument.WIRSocketDataKey.id)) {
236
236
  cmd.__argument.WIRSocketDataKey.id = wrapperMsgId;
237
237
  }
@@ -260,7 +260,7 @@ class RpcClient {
260
260
 
261
261
  resolve(args);
262
262
  });
263
- } else if (cmd === null || cmd === void 0 ? void 0 : (_cmd$__argument2 = cmd.__argument) === null || _cmd$__argument2 === void 0 ? void 0 : _cmd$__argument2.WIRSocketDataKey) {
263
+ } else if (cmd !== null && cmd !== void 0 && (_cmd$__argument2 = cmd.__argument) !== null && _cmd$__argument2 !== void 0 && _cmd$__argument2.WIRSocketDataKey) {
264
264
  this.messageHandler.once(msgId.toString(), function (err, value) {
265
265
  if (err) {
266
266
  return reject(new Error(`Remote debugger error with code '${err.code}': ${err.message}`));
@@ -419,7 +419,7 @@ class RpcClient {
419
419
 
420
420
  _logger.default.debug('Sender key set');
421
421
 
422
- if (this.isTargetBased && _appiumSupport.util.compareVersions(this.platformVersion, '<', MIN_PLATFORM_NO_TARGET_EXISTS)) {
422
+ if (this.isTargetBased && _support.util.compareVersions(this.platformVersion, '<', MIN_PLATFORM_NO_TARGET_EXISTS)) {
423
423
  await this.send('Target.exists', sendOpts, false);
424
424
  }
425
425
 
@@ -568,4 +568,4 @@ class RpcClient {
568
568
  exports.default = RpcClient;require('source-map-support').install();
569
569
 
570
570
 
571
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9ycGMvcnBjLWNsaWVudC5qcyJdLCJuYW1lcyI6WyJEQVRBX0xPR19MRU5HVEgiLCJsZW5ndGgiLCJXQUlUX0ZPUl9UQVJHRVRfVElNRU9VVCIsIldBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCIsIk1JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEIiwiTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMiLCJpc1RhcmdldEJhc2VkIiwiaXNTYWZhcmkiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc0hpZ2hWZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsImxvZyIsImRlYnVnIiwiUnBjQ2xpZW50IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiX3RhcmdldHMiLCJfc2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJzaG91bGRDaGVja0ZvclRhcmdldCIsImJ1bmRsZUlkIiwibG9nQWxsQ29tbXVuaWNhdGlvbiIsImxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwid2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGgiLCJzb2NrZXRDaHVua1NpemUiLCJmdWxsUGFnZUluaXRpYWxpemF0aW9uIiwiaXNDb25uZWN0ZWQiLCJjb25uSWQiLCJ1dWlkVjQiLCJzZW5kZXJJZCIsIm1zZ0lkIiwiX2NvbnRleHRzIiwiY29udGV4dHMiLCJuZWVkc1RhcmdldCIsInRhcmdldHMiLCJjb25uZWN0ZWQiLCJvbiIsImV2ZW50IiwibGlzdGVuZXIiLCJtZXNzYWdlSGFuZGxlciIsIm9uY2UiLCJvZmYiLCJ3YXJuIiwiX2lzVGFyZ2V0QmFzZWQiLCJyZW1vdGVNZXNzYWdlcyIsIlJlbW90ZU1lc3NhZ2VzIiwiUnBjTWVzc2FnZUhhbmRsZXIiLCJhZGRUYXJnZXQiLCJiaW5kIiwidXBkYXRlVGFyZ2V0IiwicmVtb3ZlVGFyZ2V0Iiwib25FeGVjdXRpb25Db250ZXh0Q3JlYXRlZCIsIm9uR2FyYmFnZUNvbGxlY3RlZCIsIndhaXRGb3JUYXJnZXQiLCJhcHBJZEtleSIsInBhZ2VJZEtleSIsImZvcmNlIiwiZ2V0VGFyZ2V0IiwiXyIsImlzRW1wdHkiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiZXJyb3IiLCJlcnIiLCJtZXNzYWdlIiwiaW5jbHVkZXMiLCJFcnJvciIsInNlbmQiLCJjb21tYW5kIiwid2FpdEZvclJlc3BvbnNlIiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0Iiwic2VuZFRvRGV2aWNlIiwidG9Mb3dlckNhc2UiLCJpbmZvIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsIndyYXBwZXJNc2dJZCIsInRvU3RyaW5nIiwidGFyZ2V0SWQiLCJmdWxsT3B0cyIsImRlZmF1bHRzIiwiaWQiLCJjbWQiLCJnZXRSZW1vdGVDb21tYW5kIiwiX19hcmd1bWVudCIsIldJUlNvY2tldERhdGFLZXkiLCJpc05pbCIsIkJ1ZmZlciIsImZyb20iLCJKU09OIiwic3RyaW5naWZ5IiwibWVzc2FnZUhhbmRsZWQiLCJ0cnVuY2F0ZSIsImxpc3RlbmVycyIsIl9fc2VsZWN0b3IiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwiYXJncyIsInZhbHVlIiwiY29kZSIsIm1zZyIsInJlcyIsInNlbmRNZXNzYWdlIiwiY29ubmVjdCIsImRpc2Nvbm5lY3QiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJyZWNlaXZlIiwiYXBwIiwidGFyZ2V0SW5mbyIsInBlbmRpbmdUYXJnZXROb3RpZmljYXRpb24iLCJpc1Byb3Zpc2lvbmFsIiwiaGFzIiwib2xkVGFyZ2V0SWQiLCJuZXdUYXJnZXRJZCIsInByb3Zpc2lvbmFsIiwicGFnZSIsInRvUGFpcnMiLCJzZWxlY3RQYWdlIiwic2VuZE9wdHMiLCJlbmFibGVkIiwiT2JqZWN0IiwiYXNzaWduIiwiaW5pdGlhbGl6ZVBhZ2VGdWxsIiwiaW5pdGlhbGl6ZVBhZ2UiLCJkaXNhYmxlZCIsImluc3RydW1lbnRzIiwiYWN0aXZlIiwic3RhdGUiLCJkZXB0aCIsInNob3VsZFBhdXNlIiwibG9nZ2luZ0NoYW5uZWxzIiwic291cmNlIiwiY2hhbm5lbHMiLCJtYXAiLCJlbnRyeSIsImxldmVsIiwic2VsZWN0QXBwIiwib25BcHBDaGFuZ2UiLCJkaWN0Iiwib2xkQXBwSWRLZXkiLCJXSVJIb3N0QXBwbGljYXRpb25JZGVudGlmaWVyS2V5IiwiY29ycmVjdEFwcElkS2V5IiwiV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5IiwicGFnZURpY3QiLCJjb25uZWN0ZWRBcHBJZEtleSIsImNvbnRleHQiLCJwdXNoIiwib25TY3JpcHRQYXJzZWQiLCJzY3JpcHRJbmZvIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLGVBQWUsR0FBRztBQUFDQyxFQUFBQSxNQUFNLEVBQUU7QUFBVCxDQUF4QjtBQUVBLE1BQU1DLHVCQUF1QixHQUFHLEtBQWhDO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUcsSUFBakM7QUFFQSxNQUFNQyw2QkFBNkIsR0FBRyxNQUF0QztBQUdBLE1BQU1DLDZCQUE2QixHQUFHLE1BQXRDOztBQUVBLFNBQVNDLGFBQVQsQ0FBd0JDLFFBQXhCLEVBQWtDQyxlQUFsQyxFQUFtRDtBQUlqRCxRQUFNQyxhQUFhLEdBQUdDLG9CQUFLQyxlQUFMLENBQXFCSCxlQUFyQixFQUFzQyxJQUF0QyxFQUE0Q0osNkJBQTVDLENBQXRCOztBQUNBUSxrQkFBSUMsS0FBSixDQUFXLDhDQUE2Q04sUUFBUSxHQUFHLEVBQUgsR0FBUSxNQUFPLCtCQUE4QkMsZUFBZ0IsSUFBN0g7O0FBQ0FJLGtCQUFJQyxLQUFKLENBQVcsMENBQXlDVCw2QkFBOEIsTUFBS0ssYUFBYyxFQUFyRzs7QUFDQSxTQUFPQSxhQUFQO0FBQ0Q7O0FBRWMsTUFBTUssU0FBTixDQUFnQjtBQUM3QkMsRUFBQUEsV0FBVyxDQUFFQyxJQUFJLEdBQUcsRUFBVCxFQUFhO0FBQ3RCLFNBQUtDLFFBQUwsR0FBZ0IsRUFBaEI7QUFDQSxTQUFLQyxxQkFBTCxHQUE2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QUEwQjtBQUMvRGIsWUFBQUE7QUFEK0QsV0FBMUIsQ0FBdkM7QUFHRCxTQUpELENBSUUsT0FBT1MsR0FBUCxFQUFZO0FBQ1puRCwwQkFBSThCLElBQUosQ0FBVSw2QkFBNEJxQixHQUFHLENBQUNDLE9BQVEsRUFBbEQ7O0FBQ0FrQixVQUFBQSxNQUFNLENBQUNuQixHQUFELENBQU47QUFDRDs7QUFJRCxZQUFJTCxnQkFBRUMsT0FBRixDQUFVMEYsUUFBVixDQUFKLEVBQXlCO0FBQ3ZCLGNBQUkzQyxHQUFHLEdBQUcsZ0NBQVY7O0FBQ0E5RiwwQkFBSUMsS0FBSixDQUFVNkYsR0FBVjs7QUFDQXhCLFVBQUFBLE1BQU0sQ0FBQyxJQUFJaEIsS0FBSixDQUFVd0MsR0FBVixDQUFELENBQU47QUFDRCxTQUpELE1BSU87QUFDTHpCLFVBQUFBLE9BQU8sQ0FBQyxDQUFDcUUsaUJBQUQsRUFBb0JELFFBQXBCLENBQUQsQ0FBUDtBQUNEO0FBQ0YsT0FwQk0sR0FBUDtBQXFCRCxLQTdDWSxDQUFiO0FBOENEOztBQUVEbEcsRUFBQUEseUJBQXlCLENBQUVZLEdBQUYsRUFBT3dGLE9BQVAsRUFBZ0I7QUFJdkMsU0FBS3ZILFFBQUwsQ0FBY3dILElBQWQsQ0FBbUJELE9BQU8sQ0FBQy9ELEVBQTNCO0FBQ0Q7O0FBRURwQyxFQUFBQSxrQkFBa0IsR0FBSTtBQUVwQnhDLG9CQUFJQyxLQUFKLENBQVcsaUNBQVg7QUFDRDs7QUFFRDRJLEVBQUFBLGNBQWMsQ0FBRTFGLEdBQUYsRUFBTzJGLFVBQVAsRUFBbUI7QUFFL0I5SSxvQkFBSUMsS0FBSixDQUFXLGtCQUFpQm1GLElBQUksQ0FBQ0MsU0FBTCxDQUFleUQsVUFBZixDQUEyQixFQUF2RDtBQUNEOztBQWxpQjRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlbW90ZU1lc3NhZ2VzIGZyb20gJy4vcmVtb3RlLW1lc3NhZ2VzJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IFJwY01lc3NhZ2VIYW5kbGVyIGZyb20gJy4vcnBjLW1lc3NhZ2UtaGFuZGxlcic7XG5pbXBvcnQgeyB1dGlsLCB0aW1pbmcgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5cblxuY29uc3QgREFUQV9MT0dfTEVOR1RIID0ge2xlbmd0aDogMjAwfTtcblxuY29uc3QgV0FJVF9GT1JfVEFSR0VUX1RJTUVPVVQgPSAxMDAwMDtcbmNvbnN0IFdBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCA9IDEwMDA7XG5cbmNvbnN0IE1JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEID0gJzEyLjInO1xuXG4vLyBgVGFyZ2V0LmV4aXN0c2AgcHJvdG9jb2wgbWV0aG9kIHdhcyByZW1vdmVkIGZyb20gV2ViS2l0aW4gMTMuNFxuY29uc3QgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMgPSAnMTMuNCc7XG5cbmZ1bmN0aW9uIGlzVGFyZ2V0QmFzZWQgKGlzU2FmYXJpLCBwbGF0Zm9ybVZlcnNpb24pIHtcbiAgLy8gT24gaU9TIDEyLjIgdGhlIG1lc3NhZ2VzIGdldCBzZW50IHRocm91Z2ggdGhlIFRhcmdldCBkb21haW5cbiAgLy8gT24gaU9TIDEzLjArLCBXS1dlYlZpZXcgYWxzbyBuZWVkcyB0byBmb2xsb3cgdGhlIFRhcmdldCBkb21haW4sXG4gIC8vIHNvIGhlcmUgb25seSBjaGVjayB0aGUgdGFyZ2V0IE9TIHZlcnNpb24gYXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLlxuICBjb25zdCBpc0hpZ2hWZXJzaW9uID0gdXRpbC5jb21wYXJlVmVyc2lvbnMocGxhdGZvcm1WZXJzaW9uLCAnPj0nLCBNSU5fUExBVEZPUk1fRk9SX1RBUkdFVF9CQVNFRCk7XG4gIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgd2hpY2ggY29tbXVuaWNhdGlvbiBzdHlsZSB0byB1c2UgKCR7aXNTYWZhcmkgPyAnJyA6ICdub24tJ31TYWZhcmkgb24gcGxhdGZvcm0gdmVyc2lvbiAnJHtwbGF0Zm9ybVZlcnNpb259JylgKTtcbiAgbG9nLmRlYnVnKGBQbGF0Zm9ybSB2ZXJzaW9uIGVxdWFsIG9yIGhpZ2hlciB0aGFuICcke01JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEfSc6ICR7aXNIaWdoVmVyc2lvbn1gKTtcbiAgcmV0dXJuIGlzSGlnaFZlcnNpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJwY0NsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICB0aGlzLl90YXJnZXRzID0gW107XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIW9wdHMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG5cbiAgICBjb25zdCB7XG4gICAgICBidW5kbGVJZCxcbiAgICAgIHBsYXRmb3JtVmVyc2lvbiA9IHt9LFxuICAgICAgaXNTYWZhcmkgPSB0cnVlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbiA9IGZhbHNlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAgPSBmYWxzZSxcbiAgICAgIHdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoLFxuICAgICAgc29ja2V0Q2h1bmtTaXplLFxuICAgICAgZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZhbHNlLFxuICAgIH0gPSBvcHRzO1xuXG4gICAgdGhpcy5pc1NhZmFyaSA9IGlzU2FmYXJpO1xuXG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29ubklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLnNlbmRlcklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLm1zZ0lkID0gMDtcblxuICAgIHRoaXMubG9nQWxsQ29tbXVuaWNhdGlvbiA9IGxvZ0FsbENvbW11bmljYXRpb247XG4gICAgdGhpcy5sb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCA9IGxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wO1xuICAgIHRoaXMuc29ja2V0Q2h1bmtTaXplID0gc29ja2V0Q2h1bmtTaXplO1xuICAgIHRoaXMud2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGggPSB3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aDtcblxuICAgIHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZ1bGxQYWdlSW5pdGlhbGl6YXRpb247XG5cbiAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBwbGF0Zm9ybVZlcnNpb247XG5cbiAgICB0aGlzLl9jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuX3RhcmdldHMgPSB7fTtcblxuICAgIC8vIHN0YXJ0IHdpdGggYSBiZXN0IGd1ZXNzIGZvciB0aGUgcHJvdG9jb2xcbiAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBpc1RhcmdldEJhc2VkKGlzU2FmYXJpLCB0aGlzLnBsYXRmb3JtVmVyc2lvbik7XG4gIH1cblxuICBnZXQgY29udGV4dHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0cztcbiAgfVxuXG4gIGdldCBuZWVkc1RhcmdldCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgJiYgdGhpcy5pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgZ2V0IHRhcmdldHMgKCkge1xuICAgIHJldHVybiB0aGlzLl90YXJnZXRzO1xuICB9XG5cbiAgZ2V0IHNob3VsZENoZWNrRm9yVGFyZ2V0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG4gIH1cblxuICBzZXQgc2hvdWxkQ2hlY2tGb3JUYXJnZXQgKHNob3VsZENoZWNrRm9yVGFyZ2V0KSB7XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIXNob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB9XG5cbiAgZ2V0IGlzQ29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWQ7XG4gIH1cblxuICBzZXQgaXNDb25uZWN0ZWQgKGNvbm5lY3RlZCkge1xuICAgIHRoaXMuY29ubmVjdGVkID0gISFjb25uZWN0ZWQ7XG4gIH1cblxuICBvbiAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbihldmVudCwgbGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb25jZSAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvZmYgKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub2ZmKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXQgaXNUYXJnZXRCYXNlZCAoaXNUYXJnZXRCYXNlZCkge1xuICAgIGxvZy53YXJuKGBTZXR0aW5nIGNvbW11bmljYXRpb24gcHJvdG9jb2w6IHVzaW5nICR7aXNUYXJnZXRCYXNlZCA/ICdUYXJnZXQtYmFzZWQnIDogJ2Z1bGwgV2ViIEluc3BlY3RvciBwcm90b2NvbCd9IGNvbW11bmljYXRpb25gKTtcbiAgICB0aGlzLl9pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcblxuICAgIGlmICghdGhpcy5yZW1vdGVNZXNzYWdlcykge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcyA9IG5ldyBSZW1vdGVNZXNzYWdlcyhpc1RhcmdldEJhc2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcy5pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBuZXcgUnBjTWVzc2FnZUhhbmRsZXIoaXNUYXJnZXRCYXNlZCk7XG5cbiAgICAgIC8vIGFkZCBoYW5kbGVycyBmb3IgaW50ZXJuYWwgZXZlbnRzXG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcsIHRoaXMuYWRkVGFyZ2V0LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignVGFyZ2V0LmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0JywgdGhpcy51cGRhdGVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0RGVzdHJveWVkJywgdGhpcy5yZW1vdmVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdSdW50aW1lLmV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkJywgdGhpcy5vbkV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignSGVhcC5nYXJiYWdlQ29sbGVjdGVkJywgdGhpcy5vbkdhcmJhZ2VDb2xsZWN0ZWQuYmluZCh0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIuaXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzVGFyZ2V0QmFzZWQgKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclRhcmdldCAoYXBwSWRLZXksIHBhZ2VJZEtleSwgZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmICghZm9yY2UgJiYgIXRoaXMubmVlZHNUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2Ugd2FpdGluZyBpcyBuZWNlc3NhcnkgdG8gc2VlIHdoYXQgdGhlIHRhcmdldCBpc1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+ICFfLmlzRW1wdHkodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpLCB7XG4gICAgICAgIHdhaXRNczogV0FJVF9GT1JfVEFSR0VUX1RJTUVPVVQsXG4gICAgICAgIGludGVydmFsTXM6IFdBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCxcbiAgICAgICAgZXJyb3I6ICdObyB0YXJnZXRzIGZvdW5kLCB1bmFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBkZXZpY2UnLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb25kaXRpb24gdW5tZXQnKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRhcmdldHMgZm91bmQsIHVuYWJsZSB0byBjb21tdW5pY2F0ZSB3aXRoIGRldmljZScpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmQgKGNvbW1hbmQsIG9wdHMgPSB7fSwgd2FpdEZvclJlc3BvbnNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgY29uc3Qge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXlcbiAgICB9ID0gb3B0cztcbiAgICB0cnkge1xuICAgICAgaWYgKCFfLmlzRW1wdHkoYXBwSWRLZXkpICYmICFfLmlzRW1wdHkocGFnZUlkS2V5KSkge1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxldCB7IG1lc3NhZ2UgPSAnJyB9ID0gZXJyO1xuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKGAndGFyZ2V0JyBkb21haW4gd2FzIG5vdCBmb3VuZGApKSB7XG4gICAgICAgIGxvZy5pbmZvKCdUaGUgdGFyZ2V0IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IFRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLiAnICtcbiAgICAgICAgICAnV2lsbCBmb2xsb3cgbm9uLXRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLicpO1xuICAgICAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZFRvRGV2aWNlKGNvbW1hbmQsIG9wdHMsIHdhaXRGb3JSZXNwb25zZSk7XG4gICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoYGRvbWFpbiB3YXMgbm90IGZvdW5kYCkgfHxcbiAgICAgICAgICBtZXNzYWdlLmluY2x1ZGVzKGBzb21lIGFyZ3VtZW50cyBvZiBtZXRob2RgKSB8fFxuICAgICAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoYG1pc3NpbmcgdGFyZ2V0YCkpIHtcbiAgICAgICAgdGhpcy5pc1RhcmdldEJhc2VkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yVGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbG9nLmRlYnVnKGBTZW5kaW5nIHRvIFdlYiBJbnNwZWN0b3IgdG9vayAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmRUb0RldmljZSAoY29tbWFuZCwgb3B0cyA9IHt9LCB3YWl0Rm9yUmVzcG9uc2UgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgd2hlbmV2ZXIgcmVtb3RlIGRlYnVnZ2VyXG4gICAgICAvLyByZXBsaWVzIHRvIG91ciByZXF1ZXN0XG5cbiAgICAgIC8vIGtlZXAgdHJhY2sgb2YgdGhlIG1lc3NhZ2VzIGNvbWluZyBhbmQgZ29pbmcgdXNpbmcgYSBzaW1wbGUgc2VxdWVudGlhbCBpZFxuICAgICAgY29uc3QgbXNnSWQgPSB0aGlzLm1zZ0lkKys7XG4gICAgICBsZXQgd3JhcHBlck1zZ0lkID0gbXNnSWQ7XG4gICAgICBpZiAodGhpcy5pc1RhcmdldEJhc2VkKSB7XG4gICAgICAgIC8vIGZvciB0YXJnZXQtYmFzZSBjb21tdW5pY2F0aW9uLCBldmVyeXRoaW5nIGlzIHdyYXBwZWQgdXBcbiAgICAgICAgd3JhcHBlck1zZ0lkID0gdGhpcy5tc2dJZCsrO1xuICAgICAgICAvLyBhY2tub3dsZWRnZSB3cmFwcGVyIG1lc3NhZ2VcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbih3cmFwcGVyTXNnSWQudG9TdHJpbmcoKSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFwcElkS2V5ID0gb3B0cy5hcHBJZEtleTtcbiAgICAgIGNvbnN0IHBhZ2VJZEtleSA9IG9wdHMucGFnZUlkS2V5O1xuICAgICAgY29uc3QgdGFyZ2V0SWQgPSB0aGlzLmdldFRhcmdldChhcHBJZEtleSwgcGFnZUlkS2V5KTtcblxuICAgICAgLy8gcmV0cmlldmUgdGhlIGNvcnJlY3QgY29tbWFuZCB0byBzZW5kXG4gICAgICBjb25zdCBmdWxsT3B0cyA9IF8uZGVmYXVsdHMoe1xuICAgICAgICBjb25uSWQ6IHRoaXMuY29ubklkLFxuICAgICAgICBzZW5kZXJJZDogdGhpcy5zZW5kZXJJZCxcbiAgICAgICAgdGFyZ2V0SWQsXG4gICAgICAgIGlkOiBtc2dJZCxcbiAgICAgIH0sIG9wdHMpO1xuICAgICAgY29uc3QgY21kID0gdGhpcy5yZW1vdGVNZXNzYWdlcy5nZXRSZW1vdGVDb21tYW5kKGNvbW1hbmQsIGZ1bGxPcHRzKTtcblxuICAgICAgaWYgKGNtZD8uX19hcmd1bWVudD8uV0lSU29ja2V0RGF0YUtleSkge1xuICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIG1lc3NhZ2UgYmVpbmcgc2VudCBoYXMgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIG5lZWRlZFxuICAgICAgICBpZiAoXy5pc05pbChjbWQuX19hcmd1bWVudC5XSVJTb2NrZXREYXRhS2V5LmlkKSkge1xuICAgICAgICAgIGNtZC5fX2FyZ3VtZW50LldJUlNvY2tldERhdGFLZXkuaWQgPSB3cmFwcGVyTXNnSWQ7XG4gICAgICAgIH1cbiAgICAgICAgY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSA9XG4gICAgICAgICAgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSkpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWVzc2FnZUhhbmRsZWQgPSB0cnVlO1xuICAgICAgaWYgKCF3YWl0Rm9yUmVzcG9uc2UpIHtcbiAgICAgICAgLy8gdGhlIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCBhcyBzb29uIGFzIHRoZSBzb2NrZXQgaGFzIGJlZW4gc2VudFxuICAgICAgICBtZXNzYWdlSGFuZGxlZCA9IGZhbHNlO1xuICAgICAgICAvLyBkbyBub3QgbG9nIHJlY2VpcHRzXG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub25jZShtc2dJZC50b1N0cmluZygpLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgLy8gd2UgYXJlIG5vdCB3YWl0aW5nIGZvciB0aGlzLCBhbmQgaWYgaXQgZXJyb3JzIGl0IGlzIG1vc3QgbGlrZWx5XG4gICAgICAgICAgICAvLyBhIHByb3RvY29sIGNoYW5nZS4gTG9nIGFuZCBjaGVjayBkdXJpbmcgdGVzdGluZ1xuICAgICAgICAgICAgbG9nLmVycm9yKGBSZWNlaXZlZCBlcnJvciBmcm9tIHNlbmQgdGhhdCBpcyBub3QgYmVpbmcgd2FpdGVkIGZvciAoaWQ6ICR7bXNnSWR9KTogJyR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShlcnIpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICAgIC8vIHJlamVjdCwgdGhvdWdoIGl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoaXMgd2lsbCBiZSB0cmlnZ2VyZWQsIHNpbmNlXG4gICAgICAgICAgICAvLyB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBkaXJlY3RsdHkgYWZ0ZXIgc2VuZC4gT24gdGhlIG9mZiBjaGFuY2UsXG4gICAgICAgICAgICAvLyB0aG91Z2gsIGl0IHdpbGwgYWxlcnQgb2YgYSBwcm90b2NvbCBjaGFuZ2UuXG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyLmxpc3RlbmVycyhjbWQuX19zZWxlY3RvcikubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIucHJlcGVuZE9uY2VMaXN0ZW5lcihjbWQuX19zZWxlY3RvciwgZnVuY3Rpb24gKGVyciwgLi4uYXJncykge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoYXJncyksIERBVEFfTE9HX0xFTkdUSCl9J2ApO1xuICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChjbWQ/Ll9fYXJndW1lbnQ/LldJUlNvY2tldERhdGFLZXkpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKG1zZ0lkLnRvU3RyaW5nKCksIGZ1bmN0aW9uIChlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYFJlbW90ZSBkZWJ1Z2dlciBlcnJvciB3aXRoIGNvZGUgJyR7ZXJyLmNvZGV9JzogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgZGF0YSByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkodmFsdWUpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub3RoaW5nIGVsc2UgaXMgaGFuZGxpbmcgdGhpbmdzLCBzbyBqdXN0IHJlc29sdmUgd2hlbiB0aGUgbWVzc2FnZSBpcyBzZW50XG4gICAgICAgIG1lc3NhZ2VIYW5kbGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1zZyA9IGBTZW5kaW5nICcke2NtZC5fX3NlbGVjdG9yfScgbWVzc2FnZWAgK1xuICAgICAgICAoZnVsbE9wdHMuYXBwSWRLZXkgPyBgIHRvIGFwcCAnJHtmdWxsT3B0cy5hcHBJZEtleX0nYCA6ICcnKSArXG4gICAgICAgIChmdWxsT3B0cy5wYWdlSWRLZXkgPyBgLCBwYWdlICcke2Z1bGxPcHRzLnBhZ2VJZEtleX0nYCA6ICcnKSArXG4gICAgICAgICh0aGlzLm5lZWRzVGFyZ2V0ICYmIHRhcmdldElkID8gYCwgdGFyZ2V0ICcke3RhcmdldElkfSdgIDogJycpICtcbiAgICAgICAgYCAoaWQ6ICR7bXNnSWR9KTogJyR7Y29tbWFuZH0nYDtcbiAgICAgIGxvZy5kZWJ1Zyhtc2cpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZW5kTWVzc2FnZShjbWQpO1xuICAgICAgICBpZiAoIW1lc3NhZ2VIYW5kbGVkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGhhbmRsZXJzIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgYmVmb3JlIHJlc29sdmluZyxcbiAgICAgICAgICAvLyBhbmQgbm8gZXJyb3JzIHNlbmRpbmcgdGhlIG1lc3NhZ2Ugb3ZlciB0aGUgc29ja2V0LCBzbyByZXNvbHZlXG4gICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHRocm93IG5ldyBFcnJvcihgU3ViLWNsYXNzZXMgbmVlZCB0byBpbXBsZW1lbnQgYSAnY29ubmVjdCcgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2Nvbm5lY3QgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UgKC8qIGNvbW1hbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdzZW5kTWVzc2FnZScgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmUgKC8qIGRhdGEgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdyZWNlaXZlJyBmdW5jdGlvbmApO1xuICB9XG5cbiAgYWRkVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLndhcm4oYFJlY2VpdmVkICdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcgZXZlbnQgZm9yIGFwcCAnJHthcHB9JyB3aXRoIG5vIHRhcmdldC4gU2tpcHBpbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb24pICYmICF0YXJnZXRJbmZvLmlzUHJvdmlzaW9uYWwpIHtcbiAgICAgIGxvZy53YXJuKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldENyZWF0ZWQnIGV2ZW50IGZvciBhcHAgJyR7YXBwfScgd2l0aCBubyBwZW5kaW5nIHJlcXVlc3Q6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW5mbyl9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldEluZm8uaXNQcm92aXNpb25hbCkge1xuICAgICAgbG9nLmRlYnVnKGBQcm92aXNpb25hbCB0YXJnZXQgY3JlYXRlZCBmb3IgYXBwICcke2FwcH0nLCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScuIElnbm9yaW5nIHVudGlsIHRhcmdldCB1cGRhdGUgZXZlbnRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBbYXBwSWRLZXksIHBhZ2VJZEtleV0gPSB0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb247XG5cbiAgICBsb2cuZGVidWcoYFRhcmdldCBjcmVhdGVkIGZvciBhcHAgJyR7YXBwSWRLZXl9JyBhbmQgcGFnZSAnJHtwYWdlSWRLZXl9JzogJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbmZvKX1gKTtcbiAgICBpZiAoXy5oYXModGhpcy50YXJnZXRzW2FwcElkS2V5XSwgcGFnZUlkS2V5KSkge1xuICAgICAgbG9nLmRlYnVnKGBUaGVyZSBpcyBhbHJlYWR5IGEgdGFyZ2V0IGZvciB0aGlzIGFwcCBhbmQgcGFnZSAoJyR7dGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldfScpLiBUaGlzIG1pZ2h0IGNhdXNlIHByb2JsZW1zYCk7XG4gICAgfVxuICAgIHRoaXMudGFyZ2V0c1thcHBdID0gdGhpcy50YXJnZXRzW2FwcF0gfHwge307XG4gICAgdGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldID0gdGFyZ2V0SW5mby50YXJnZXRJZDtcbiAgfVxuXG4gIHVwZGF0ZVRhcmdldCAoZXJyLCBhcHAsIG9sZFRhcmdldElkLCBuZXdUYXJnZXRJZCkge1xuICAgIGxvZy5kZWJ1ZyhgVGFyZ2V0IHVwZGF0ZWQgZm9yIGFwcCAnJHthcHB9Jy4gT2xkIHRhcmdldDogJyR7b2xkVGFyZ2V0SWR9JywgbmV3IHRhcmdldDogJyR7bmV3VGFyZ2V0SWR9J2ApO1xuICAgIGlmICghdGhpcy50YXJnZXRzW2FwcF0pIHtcbiAgICAgIGxvZy53YXJuKGBObyBleGlzdGluZyB0YXJnZXQgZm9yIGFwcCAnJHthcHB9Jy4gTm90IHN1cmUgd2hhdCB0byBkb2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBzYXZlIHRoaXMsIHRvIGJlIHVzZWQgaWYvd2hlbiB0aGUgZXhpc3RpbmcgdGFyZ2V0IGlzIGRlc3Ryb3llZFxuICAgIHRoaXMudGFyZ2V0c1thcHBdLnByb3Zpc2lvbmFsID0ge1xuICAgICAgb2xkVGFyZ2V0SWQsXG4gICAgICBuZXdUYXJnZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcmVtb3ZlVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldERlc3Ryb3llZCcgZXZlbnQgd2l0aCBubyB0YXJnZXQuIFNraXBwaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBUYXJnZXQgZGVzdHJveWVkIGZvciBhcHAgJyR7YXBwfSc6ICR7dGFyZ2V0SW5mby50YXJnZXRJZH1gKTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHRhcmdldHMgYW5kIGZpbmQgdGhlIG9uZSB0aGF0IGhhcyBhIHdhaXRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0XG4gICAgaWYgKHRoaXMudGFyZ2V0c1thcHBdPy5wcm92aXNpb25hbD8ub2xkVGFyZ2V0SWQgPT09IHRhcmdldEluZm8udGFyZ2V0SWQpIHtcbiAgICAgIGNvbnN0IHtvbGRUYXJnZXRJZCwgbmV3VGFyZ2V0SWR9ID0gdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG4gICAgICBkZWxldGUgdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG5cbiAgICAgIC8vIHdlIGRvIG5vdCBrbm93IHRoZSBwYWdlLCBzbyBnbyB0aHJvdWdoIGFuZCBmaW5kIHRoZSBleGlzdGluZyB0YXJnZXRcbiAgICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLnRhcmdldHNbYXBwXTtcbiAgICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgICAgaWYgKHRhcmdldElkID09PSBvbGRUYXJnZXRJZCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgcHJvdmlzaW9uYWwgdGFyZ2V0IGZvciBhcHAgJyR7YXBwfScuIE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIFVwZGF0aW5nYCk7XG4gICAgICAgICAgdGFyZ2V0c1twYWdlXSA9IG5ld1RhcmdldElkO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nLndhcm4oYFByb3Zpc2lvbmFsIHRhcmdldCBmb3IgYXBwICcke2FwcH0nIGZvdW5kLCBidXQgbm8gc3VpdGFibGUgZXhpc3RpbmcgdGFyZ2V0IGZvdW5kLiBUaGlzIG1heSBjYXVzZSBwcm9ibGVtc2ApO1xuICAgICAgbG9nLndhcm4oYE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIEV4aXN0aW5nIHRhcmdldHM6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0cyl9YCk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gd2FpdGluZyBwcm92aXNpb25hbCB0YXJnZXQsIGp1c3QgZ2V0IHJpZCBvZiB0aGUgZXhpc3Rpbmcgb25lXG4gICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMudGFyZ2V0c1thcHBdO1xuICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgIGlmICh0YXJnZXRJZCA9PT0gdGFyZ2V0SW5mby50YXJnZXRJZCkge1xuICAgICAgICBkZWxldGUgdGFyZ2V0c1twYWdlXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2cuZGVidWcoYFRhcmdldCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScgZGVsZXRlZCBmb3IgYXBwICcke2FwcH0nLCBidXQgbm8gc3VjaCB0YXJnZXQgZXhpc3RzYCk7XG4gIH1cblxuICBnZXRUYXJnZXQgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICByZXR1cm4gKHRoaXMudGFyZ2V0c1thcHBJZEtleV0gfHwge30pW3BhZ2VJZEtleV07XG4gIH1cblxuICBhc3luYyBzZWxlY3RQYWdlIChhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgdGhpcy5wZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uID0gW2FwcElkS2V5LCBwYWdlSWRLZXldO1xuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSBmYWxzZTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHN0ZXBzIHRoYXQgdGhlIERlc2t0b3AgU2FmYXJpIHN5c3RlbVxuICAgIC8vIGdvZXMgdGhyb3VnaCB0byBpbml0aWFsaXplIHRoZSBXZWIgSW5zcGVjdG9yIHNlc3Npb25cblxuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIC8vIGhpZ2hsaWdodCBhbmQgdGhlbiB1bi1oaWdobGlnaHQgdGhlIHdlYnZpZXdcbiAgICBmb3IgKGNvbnN0IGVuYWJsZWQgb2YgW3RydWUsIGZhbHNlXSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdpbmRpY2F0ZVdlYlZpZXcnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgZW5hYmxlZCxcbiAgICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnc2V0U2VuZGVyS2V5Jywgc2VuZE9wdHMpO1xuICAgIGxvZy5kZWJ1ZygnU2VuZGVyIGtleSBzZXQnKTtcblxuICAgIGlmICh0aGlzLmlzVGFyZ2V0QmFzZWQgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5wbGF0Zm9ybVZlcnNpb24sICc8JywgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNlbmQoJ1RhcmdldC5leGlzdHMnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIH1cblxuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUGFnZUZ1bGwoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBhZ2UoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogUGVyZm9ybSB0aGUgbWluaW1hbCBpbml0aWFsaXphdGlvbiB0byBnZXQgdGhlIFdlYiBJbnNwZWN0b3Igd29ya2luZ1xuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZVBhZ2UgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICBjb25zdCBzZW5kT3B0cyA9IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5LFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUGFnZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuXG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdGFza3MgdG8gaW5pdGlhbGl6ZVxuICAgIGF3YWl0IHRoaXMuc2VuZCgnTmV0d29yay5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUnVudGltZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSGVhcC5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0NvbnNvbGUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5pbml0aWFsaXplZCcsIHNlbmRPcHRzLCBmYWxzZSk7XG4gIH1cblxuICAvKlxuICAgKiBNaW1pYyBldmVyeSBzdGVwIHRoYXQgRGVza3RvcCBTYWZhcmkgRGV2ZWxvcCB0b29scyB1c2VzIHRvIGluaXRpYWxpemUgYVxuICAgKiBXZWIgSW5zcGVjdG9yIHNlc3Npb25cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemVQYWdlRnVsbCAoYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5zcGVjdG9yLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG5cbiAgICAvLyBnbyB0aHJvdWdoIHRoZSB0YXNrcyB0byBpbml0aWFsaXplXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmdldFJlc291cmNlVHJlZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET01TdG9yYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEYXRhYmFzZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5kZXhlZERCLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDU1MuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1J1bnRpbWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0hlYXAuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ01lbW9yeS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5nZXRGcmFtZXNXaXRoTWFuaWZlc3RzJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEluc3RydW1lbnRzJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBpbnN0cnVtZW50czogWydUaW1lbGluZScsICdTY3JpcHRQcm9maWxlcicsICdDUFUnXSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEF1dG9DYXB0dXJlRW5hYmxlZCcsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBzdGF0ZTogJ25vbmUnLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0UGF1c2VPbkFzc2VydGlvbnMnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QXN5bmNTdGFja1RyYWNlRGVwdGgnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGRlcHRoOiAyMDAsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5zZXRQYXVzZUZvckludGVybmFsU2NyaXB0cycsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgc2hvdWxkUGF1c2U6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdMYXllclRyZWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1dvcmtlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQ2FudmFzLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET00uZ2V0RG9jdW1lbnQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGNvbnN0IGxvZ2dpbmdDaGFubmVscyA9IGF3YWl0IHRoaXMuc2VuZCgnQ29uc29sZS5nZXRMb2dnaW5nQ2hhbm5lbHMnLCBzZW5kT3B0cyk7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgKGxvZ2dpbmdDaGFubmVscy5jaGFubmVscyB8fCBbXSkubWFwKChlbnRyeSkgPT4gZW50cnkuc291cmNlKSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLnNldExvZ2dpbmdDaGFubmVsTGV2ZWwnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgc291cmNlLFxuICAgICAgICBsZXZlbDogJ3ZlcmJvc2UnLFxuICAgICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdJbnNwZWN0b3IuaW5pdGlhbGl6ZWQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0QXBwIChhcHBJZEtleSkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBsb2NhbCBjYWxsYmFjaywgdGVtcG9yYXJpbHkgYWRkZWQgYXMgY2FsbGJhY2sgdG9cbiAgICAgIC8vIGBfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOmAgcmVtb3RlIGRlYnVnZ2VyIHJlc3BvbnNlXG4gICAgICAvLyB0byBoYW5kbGUgdGhlIGluaXRpYWwgY29ubmVjdGlvblxuICAgICAgY29uc3Qgb25BcHBDaGFuZ2UgPSAoZXJyLCBkaWN0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZnJvbSB0aGUgZGljdGlvbmFyeSByZXR1cm5lZCwgZ2V0IHRoZSBpZHNcbiAgICAgICAgY29uc3Qgb2xkQXBwSWRLZXkgPSBkaWN0LldJUkhvc3RBcHBsaWNhdGlvbklkZW50aWZpZXJLZXk7XG4gICAgICAgIGNvbnN0IGNvcnJlY3RBcHBJZEtleSA9IGRpY3QuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuXG4gICAgICAgIC8vIGlmIHRoaXMgaXMgYSByZXBvcnQgb2YgYSBwcm94eSByZWRpcmVjdCBmcm9tIHRoZSByZW1vdGUgZGVidWdnZXJcbiAgICAgICAgLy8gd2Ugd2FudCB0byB1cGRhdGUgb3VyIGRpY3Rpb25hcnkgYW5kIGdldCBhIG5ldyBhcHAgaWRcbiAgICAgICAgaWYgKG9sZEFwcElkS2V5ICYmIGNvcnJlY3RBcHBJZEtleSAhPT0gb2xkQXBwSWRLZXkpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYFdlIHdlcmUgbm90aWZpZWQgd2UgbWlnaHQgaGF2ZSBjb25uZWN0ZWQgdG8gdGhlIHdyb25nIGFwcC4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBVc2luZyBpZCAke2NvcnJlY3RBcHBJZEtleX0gaW5zdGVhZCBvZiAke29sZEFwcElkS2V5fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignTmV3IGFwcGxpY2F0aW9uIGhhcyBjb25uZWN0ZWQnKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5wcmVwZW5kT25jZUxpc3RlbmVyKCdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOicsIG9uQXBwQ2hhbmdlKTtcblxuICAgICAgLy8gZG8gdGhlIGFjdHVhbCBjb25uZWN0aW5nIHRvIHRoZSBhcHBcbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgcGFnZURpY3QsIGNvbm5lY3RlZEFwcElkS2V5O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIChbY29ubmVjdGVkQXBwSWRLZXksIHBhZ2VEaWN0XSA9IGF3YWl0IHRoaXMuc2VuZCgnY29ubmVjdFRvQXBwJywge1xuICAgICAgICAgICAgYXBwSWRLZXlcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy53YXJuKGBVbmFibGUgdG8gY29ubmVjdCB0byBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzb21ldGltZXMgdGhlIGNvbm5lY3QgbG9naWMgaGFwcGVucywgYnV0IHdpdGggYW4gZW1wdHkgZGljdGlvbmFyeVxuICAgICAgICAvLyB3aGljaCBsZWFkcyB0byB0aGUgcmVtb3RlIGRlYnVnZ2VyIGdldHRpbmcgZGlzY29ubmVjdGVkLCBhbmQgaW50byBhIGxvb3BcbiAgICAgICAgaWYgKF8uaXNFbXB0eShwYWdlRGljdCkpIHtcbiAgICAgICAgICBsZXQgbXNnID0gJ0VtcHR5IHBhZ2UgZGljdGlvbmFyeSByZWNlaXZlZCc7XG4gICAgICAgICAgbG9nLmRlYnVnKG1zZyk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtc2cpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKFtjb25uZWN0ZWRBcHBJZEtleSwgcGFnZURpY3RdKTtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRXhlY3V0aW9uQ29udGV4dENyZWF0ZWQgKGVyciwgY29udGV4dCkge1xuICAgIC8vIHsgaWQ6IDIsIGlzUGFnZUNvbnRleHQ6IHRydWUsIG5hbWU6ICcnLCBmcmFtZUlkOiAnMC4xJyB9XG4gICAgLy8gcmlnaHQgbm93IHdlIGhhdmUgbm8gd2F5IHRvIG1hcCBjb250ZXh0cyB0byBhcHBzL3BhZ2VzXG4gICAgLy8gc28ganVzdCBzdG9yZVxuICAgIHRoaXMuY29udGV4dHMucHVzaChjb250ZXh0LmlkKTtcbiAgfVxuXG4gIG9uR2FyYmFnZUNvbGxlY3RlZCAoKSB7XG4gICAgLy8ganVzdCB3YW50IHRvIGxvZyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nLCBhcyBpdCBjYW4gYWZmZWN0IG9wZXJ0aW9uXG4gICAgbG9nLmRlYnVnKGBXZWIgSW5zcGVjdG9yIGdhcmJhZ2UgY29sbGVjdGVkYCk7XG4gIH1cblxuICBvblNjcmlwdFBhcnNlZCAoZXJyLCBzY3JpcHRJbmZvKSB7XG4gICAgLy8geyBzY3JpcHRJZDogJzEzJywgdXJsOiAnJywgc3RhcnRMaW5lOiAwLCBzdGFydENvbHVtbjogMCwgZW5kTGluZTogODIsIGVuZENvbHVtbjogMyB9XG4gICAgbG9nLmRlYnVnKGBTY3JpcHQgcGFyc2VkOiAke0pTT04uc3RyaW5naWZ5KHNjcmlwdEluZm8pfWApO1xuICB9XG59XG4iXSwiZmlsZSI6ImxpYi9ycGMvcnBjLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
571
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3JwYy9ycGMtY2xpZW50LmpzIiwibmFtZXMiOlsiREFUQV9MT0dfTEVOR1RIIiwibGVuZ3RoIiwiV0FJVF9GT1JfVEFSR0VUX1RJTUVPVVQiLCJXQUlUX0ZPUl9UQVJHRVRfSU5URVJWQUwiLCJNSU5fUExBVEZPUk1fRk9SX1RBUkdFVF9CQVNFRCIsIk1JTl9QTEFURk9STV9OT19UQVJHRVRfRVhJU1RTIiwiaXNUYXJnZXRCYXNlZCIsImlzU2FmYXJpIiwicGxhdGZvcm1WZXJzaW9uIiwiaXNIaWdoVmVyc2lvbiIsInV0aWwiLCJjb21wYXJlVmVyc2lvbnMiLCJsb2ciLCJkZWJ1ZyIsIlJwY0NsaWVudCIsImNvbnN0cnVjdG9yIiwib3B0cyIsIl90YXJnZXRzIiwiX3Nob3VsZENoZWNrRm9yVGFyZ2V0Iiwic2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJidW5kbGVJZCIsImxvZ0FsbENvbW11bmljYXRpb24iLCJsb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCIsIndlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoIiwic29ja2V0Q2h1bmtTaXplIiwiZnVsbFBhZ2VJbml0aWFsaXphdGlvbiIsImlzQ29ubmVjdGVkIiwiY29ubklkIiwidXVpZFY0Iiwic2VuZGVySWQiLCJtc2dJZCIsIl9jb250ZXh0cyIsImNvbnRleHRzIiwibmVlZHNUYXJnZXQiLCJ0YXJnZXRzIiwiY29ubmVjdGVkIiwib24iLCJldmVudCIsImxpc3RlbmVyIiwibWVzc2FnZUhhbmRsZXIiLCJvbmNlIiwib2ZmIiwid2FybiIsIl9pc1RhcmdldEJhc2VkIiwicmVtb3RlTWVzc2FnZXMiLCJSZW1vdGVNZXNzYWdlcyIsIlJwY01lc3NhZ2VIYW5kbGVyIiwiYWRkVGFyZ2V0IiwiYmluZCIsInVwZGF0ZVRhcmdldCIsInJlbW92ZVRhcmdldCIsIm9uRXhlY3V0aW9uQ29udGV4dENyZWF0ZWQiLCJvbkdhcmJhZ2VDb2xsZWN0ZWQiLCJ3YWl0Rm9yVGFyZ2V0IiwiYXBwSWRLZXkiLCJwYWdlSWRLZXkiLCJmb3JjZSIsImdldFRhcmdldCIsIl8iLCJpc0VtcHR5Iiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVycm9yIiwiZXJyIiwibWVzc2FnZSIsImluY2x1ZGVzIiwiRXJyb3IiLCJzZW5kIiwiY29tbWFuZCIsIndhaXRGb3JSZXNwb25zZSIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInNlbmRUb0RldmljZSIsInRvTG93ZXJDYXNlIiwiaW5mbyIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJ3cmFwcGVyTXNnSWQiLCJ0b1N0cmluZyIsInRhcmdldElkIiwiZnVsbE9wdHMiLCJkZWZhdWx0cyIsImlkIiwiY21kIiwiZ2V0UmVtb3RlQ29tbWFuZCIsIl9fYXJndW1lbnQiLCJXSVJTb2NrZXREYXRhS2V5IiwiaXNOaWwiLCJCdWZmZXIiLCJmcm9tIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1lc3NhZ2VIYW5kbGVkIiwidHJ1bmNhdGUiLCJsaXN0ZW5lcnMiLCJfX3NlbGVjdG9yIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImFyZ3MiLCJ2YWx1ZSIsImNvZGUiLCJtc2ciLCJyZXMiLCJzZW5kTWVzc2FnZSIsImNvbm5lY3QiLCJkaXNjb25uZWN0IiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwicmVjZWl2ZSIsImFwcCIsInRhcmdldEluZm8iLCJwZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uIiwiaXNQcm92aXNpb25hbCIsImhhcyIsIm9sZFRhcmdldElkIiwibmV3VGFyZ2V0SWQiLCJwcm92aXNpb25hbCIsInBhZ2UiLCJ0b1BhaXJzIiwic2VsZWN0UGFnZSIsInNlbmRPcHRzIiwiZW5hYmxlZCIsIk9iamVjdCIsImFzc2lnbiIsImluaXRpYWxpemVQYWdlRnVsbCIsImluaXRpYWxpemVQYWdlIiwiZGlzYWJsZWQiLCJpbnN0cnVtZW50cyIsImFjdGl2ZSIsInN0YXRlIiwiZGVwdGgiLCJzaG91bGRQYXVzZSIsImxvZ2dpbmdDaGFubmVscyIsInNvdXJjZSIsImNoYW5uZWxzIiwibWFwIiwiZW50cnkiLCJsZXZlbCIsInNlbGVjdEFwcCIsIm9uQXBwQ2hhbmdlIiwiZGljdCIsIm9sZEFwcElkS2V5IiwiV0lSSG9zdEFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsImNvcnJlY3RBcHBJZEtleSIsIldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsInBhZ2VEaWN0IiwiY29ubmVjdGVkQXBwSWRLZXkiLCJjb250ZXh0IiwicHVzaCIsIm9uU2NyaXB0UGFyc2VkIiwic2NyaXB0SW5mbyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9ycGMvcnBjLWNsaWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVtb3RlTWVzc2FnZXMgZnJvbSAnLi9yZW1vdGUtbWVzc2FnZXMnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgUnBjTWVzc2FnZUhhbmRsZXIgZnJvbSAnLi9ycGMtbWVzc2FnZS1oYW5kbGVyJztcbmltcG9ydCB7IHV0aWwsIHRpbWluZyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cblxuY29uc3QgREFUQV9MT0dfTEVOR1RIID0ge2xlbmd0aDogMjAwfTtcblxuY29uc3QgV0FJVF9GT1JfVEFSR0VUX1RJTUVPVVQgPSAxMDAwMDtcbmNvbnN0IFdBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCA9IDEwMDA7XG5cbmNvbnN0IE1JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEID0gJzEyLjInO1xuXG4vLyBgVGFyZ2V0LmV4aXN0c2AgcHJvdG9jb2wgbWV0aG9kIHdhcyByZW1vdmVkIGZyb20gV2ViS2l0aW4gMTMuNFxuY29uc3QgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMgPSAnMTMuNCc7XG5cbmZ1bmN0aW9uIGlzVGFyZ2V0QmFzZWQgKGlzU2FmYXJpLCBwbGF0Zm9ybVZlcnNpb24pIHtcbiAgLy8gT24gaU9TIDEyLjIgdGhlIG1lc3NhZ2VzIGdldCBzZW50IHRocm91Z2ggdGhlIFRhcmdldCBkb21haW5cbiAgLy8gT24gaU9TIDEzLjArLCBXS1dlYlZpZXcgYWxzbyBuZWVkcyB0byBmb2xsb3cgdGhlIFRhcmdldCBkb21haW4sXG4gIC8vIHNvIGhlcmUgb25seSBjaGVjayB0aGUgdGFyZ2V0IE9TIHZlcnNpb24gYXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLlxuICBjb25zdCBpc0hpZ2hWZXJzaW9uID0gdXRpbC5jb21wYXJlVmVyc2lvbnMocGxhdGZvcm1WZXJzaW9uLCAnPj0nLCBNSU5fUExBVEZPUk1fRk9SX1RBUkdFVF9CQVNFRCk7XG4gIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgd2hpY2ggY29tbXVuaWNhdGlvbiBzdHlsZSB0byB1c2UgKCR7aXNTYWZhcmkgPyAnJyA6ICdub24tJ31TYWZhcmkgb24gcGxhdGZvcm0gdmVyc2lvbiAnJHtwbGF0Zm9ybVZlcnNpb259JylgKTtcbiAgbG9nLmRlYnVnKGBQbGF0Zm9ybSB2ZXJzaW9uIGVxdWFsIG9yIGhpZ2hlciB0aGFuICcke01JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEfSc6ICR7aXNIaWdoVmVyc2lvbn1gKTtcbiAgcmV0dXJuIGlzSGlnaFZlcnNpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJwY0NsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICB0aGlzLl90YXJnZXRzID0gW107XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIW9wdHMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG5cbiAgICBjb25zdCB7XG4gICAgICBidW5kbGVJZCxcbiAgICAgIHBsYXRmb3JtVmVyc2lvbiA9IHt9LFxuICAgICAgaXNTYWZhcmkgPSB0cnVlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbiA9IGZhbHNlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAgPSBmYWxzZSxcbiAgICAgIHdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoLFxuICAgICAgc29ja2V0Q2h1bmtTaXplLFxuICAgICAgZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZhbHNlLFxuICAgIH0gPSBvcHRzO1xuXG4gICAgdGhpcy5pc1NhZmFyaSA9IGlzU2FmYXJpO1xuXG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29ubklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLnNlbmRlcklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLm1zZ0lkID0gMDtcblxuICAgIHRoaXMubG9nQWxsQ29tbXVuaWNhdGlvbiA9IGxvZ0FsbENvbW11bmljYXRpb247XG4gICAgdGhpcy5sb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCA9IGxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wO1xuICAgIHRoaXMuc29ja2V0Q2h1bmtTaXplID0gc29ja2V0Q2h1bmtTaXplO1xuICAgIHRoaXMud2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGggPSB3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aDtcblxuICAgIHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZ1bGxQYWdlSW5pdGlhbGl6YXRpb247XG5cbiAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBwbGF0Zm9ybVZlcnNpb247XG5cbiAgICB0aGlzLl9jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuX3RhcmdldHMgPSB7fTtcblxuICAgIC8vIHN0YXJ0IHdpdGggYSBiZXN0IGd1ZXNzIGZvciB0aGUgcHJvdG9jb2xcbiAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBpc1RhcmdldEJhc2VkKGlzU2FmYXJpLCB0aGlzLnBsYXRmb3JtVmVyc2lvbik7XG4gIH1cblxuICBnZXQgY29udGV4dHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0cztcbiAgfVxuXG4gIGdldCBuZWVkc1RhcmdldCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgJiYgdGhpcy5pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgZ2V0IHRhcmdldHMgKCkge1xuICAgIHJldHVybiB0aGlzLl90YXJnZXRzO1xuICB9XG5cbiAgZ2V0IHNob3VsZENoZWNrRm9yVGFyZ2V0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG4gIH1cblxuICBzZXQgc2hvdWxkQ2hlY2tGb3JUYXJnZXQgKHNob3VsZENoZWNrRm9yVGFyZ2V0KSB7XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIXNob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB9XG5cbiAgZ2V0IGlzQ29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWQ7XG4gIH1cblxuICBzZXQgaXNDb25uZWN0ZWQgKGNvbm5lY3RlZCkge1xuICAgIHRoaXMuY29ubmVjdGVkID0gISFjb25uZWN0ZWQ7XG4gIH1cblxuICBvbiAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbihldmVudCwgbGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb25jZSAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvZmYgKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub2ZmKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXQgaXNUYXJnZXRCYXNlZCAoaXNUYXJnZXRCYXNlZCkge1xuICAgIGxvZy53YXJuKGBTZXR0aW5nIGNvbW11bmljYXRpb24gcHJvdG9jb2w6IHVzaW5nICR7aXNUYXJnZXRCYXNlZCA/ICdUYXJnZXQtYmFzZWQnIDogJ2Z1bGwgV2ViIEluc3BlY3RvciBwcm90b2NvbCd9IGNvbW11bmljYXRpb25gKTtcbiAgICB0aGlzLl9pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcblxuICAgIGlmICghdGhpcy5yZW1vdGVNZXNzYWdlcykge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcyA9IG5ldyBSZW1vdGVNZXNzYWdlcyhpc1RhcmdldEJhc2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcy5pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBuZXcgUnBjTWVzc2FnZUhhbmRsZXIoaXNUYXJnZXRCYXNlZCk7XG5cbiAgICAgIC8vIGFkZCBoYW5kbGVycyBmb3IgaW50ZXJuYWwgZXZlbnRzXG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcsIHRoaXMuYWRkVGFyZ2V0LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignVGFyZ2V0LmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0JywgdGhpcy51cGRhdGVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0RGVzdHJveWVkJywgdGhpcy5yZW1vdmVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdSdW50aW1lLmV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkJywgdGhpcy5vbkV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignSGVhcC5nYXJiYWdlQ29sbGVjdGVkJywgdGhpcy5vbkdhcmJhZ2VDb2xsZWN0ZWQuYmluZCh0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIuaXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzVGFyZ2V0QmFzZWQgKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclRhcmdldCAoYXBwSWRLZXksIHBhZ2VJZEtleSwgZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmICghZm9yY2UgJiYgIXRoaXMubmVlZHNUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2Ugd2FpdGluZyBpcyBuZWNlc3NhcnkgdG8gc2VlIHdoYXQgdGhlIHRhcmdldCBpc1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+ICFfLmlzRW1wdHkodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpLCB7XG4gICAgICAgIHdhaXRNczogV0FJVF9GT1JfVEFSR0VUX1RJTUVPVVQsXG4gICAgICAgIGludGVydmFsTXM6IFdBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCxcbiAgICAgICAgZXJyb3I6ICdObyB0YXJnZXRzIGZvdW5kLCB1bmFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBkZXZpY2UnLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb25kaXRpb24gdW5tZXQnKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRhcmdldHMgZm91bmQsIHVuYWJsZSB0byBjb21tdW5pY2F0ZSB3aXRoIGRldmljZScpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmQgKGNvbW1hbmQsIG9wdHMgPSB7fSwgd2FpdEZvclJlc3BvbnNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgY29uc3Qge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXlcbiAgICB9ID0gb3B0cztcbiAgICB0cnkge1xuICAgICAgaWYgKCFfLmlzRW1wdHkoYXBwSWRLZXkpICYmICFfLmlzRW1wdHkocGFnZUlkS2V5KSkge1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxldCB7IG1lc3NhZ2UgPSAnJyB9ID0gZXJyO1xuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKGAndGFyZ2V0JyBkb21haW4gd2FzIG5vdCBmb3VuZGApKSB7XG4gICAgICAgIGxvZy5pbmZvKCdUaGUgdGFyZ2V0IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IFRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLiAnICtcbiAgICAgICAgICAnV2lsbCBmb2xsb3cgbm9uLXRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLicpO1xuICAgICAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZFRvRGV2aWNlKGNvbW1hbmQsIG9wdHMsIHdhaXRGb3JSZXNwb25zZSk7XG4gICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoYGRvbWFpbiB3YXMgbm90IGZvdW5kYCkgfHxcbiAgICAgICAgICBtZXNzYWdlLmluY2x1ZGVzKGBzb21lIGFyZ3VtZW50cyBvZiBtZXRob2RgKSB8fFxuICAgICAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoYG1pc3NpbmcgdGFyZ2V0YCkpIHtcbiAgICAgICAgdGhpcy5pc1RhcmdldEJhc2VkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yVGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbG9nLmRlYnVnKGBTZW5kaW5nIHRvIFdlYiBJbnNwZWN0b3IgdG9vayAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmRUb0RldmljZSAoY29tbWFuZCwgb3B0cyA9IHt9LCB3YWl0Rm9yUmVzcG9uc2UgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgd2hlbmV2ZXIgcmVtb3RlIGRlYnVnZ2VyXG4gICAgICAvLyByZXBsaWVzIHRvIG91ciByZXF1ZXN0XG5cbiAgICAgIC8vIGtlZXAgdHJhY2sgb2YgdGhlIG1lc3NhZ2VzIGNvbWluZyBhbmQgZ29pbmcgdXNpbmcgYSBzaW1wbGUgc2VxdWVudGlhbCBpZFxuICAgICAgY29uc3QgbXNnSWQgPSB0aGlzLm1zZ0lkKys7XG4gICAgICBsZXQgd3JhcHBlck1zZ0lkID0gbXNnSWQ7XG4gICAgICBpZiAodGhpcy5pc1RhcmdldEJhc2VkKSB7XG4gICAgICAgIC8vIGZvciB0YXJnZXQtYmFzZSBjb21tdW5pY2F0aW9uLCBldmVyeXRoaW5nIGlzIHdyYXBwZWQgdXBcbiAgICAgICAgd3JhcHBlck1zZ0lkID0gdGhpcy5tc2dJZCsrO1xuICAgICAgICAvLyBhY2tub3dsZWRnZSB3cmFwcGVyIG1lc3NhZ2VcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbih3cmFwcGVyTXNnSWQudG9TdHJpbmcoKSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFwcElkS2V5ID0gb3B0cy5hcHBJZEtleTtcbiAgICAgIGNvbnN0IHBhZ2VJZEtleSA9IG9wdHMucGFnZUlkS2V5O1xuICAgICAgY29uc3QgdGFyZ2V0SWQgPSB0aGlzLmdldFRhcmdldChhcHBJZEtleSwgcGFnZUlkS2V5KTtcblxuICAgICAgLy8gcmV0cmlldmUgdGhlIGNvcnJlY3QgY29tbWFuZCB0byBzZW5kXG4gICAgICBjb25zdCBmdWxsT3B0cyA9IF8uZGVmYXVsdHMoe1xuICAgICAgICBjb25uSWQ6IHRoaXMuY29ubklkLFxuICAgICAgICBzZW5kZXJJZDogdGhpcy5zZW5kZXJJZCxcbiAgICAgICAgdGFyZ2V0SWQsXG4gICAgICAgIGlkOiBtc2dJZCxcbiAgICAgIH0sIG9wdHMpO1xuICAgICAgY29uc3QgY21kID0gdGhpcy5yZW1vdGVNZXNzYWdlcy5nZXRSZW1vdGVDb21tYW5kKGNvbW1hbmQsIGZ1bGxPcHRzKTtcblxuICAgICAgaWYgKGNtZD8uX19hcmd1bWVudD8uV0lSU29ja2V0RGF0YUtleSkge1xuICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIG1lc3NhZ2UgYmVpbmcgc2VudCBoYXMgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIG5lZWRlZFxuICAgICAgICBpZiAoXy5pc05pbChjbWQuX19hcmd1bWVudC5XSVJTb2NrZXREYXRhS2V5LmlkKSkge1xuICAgICAgICAgIGNtZC5fX2FyZ3VtZW50LldJUlNvY2tldERhdGFLZXkuaWQgPSB3cmFwcGVyTXNnSWQ7XG4gICAgICAgIH1cbiAgICAgICAgY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSA9XG4gICAgICAgICAgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSkpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWVzc2FnZUhhbmRsZWQgPSB0cnVlO1xuICAgICAgaWYgKCF3YWl0Rm9yUmVzcG9uc2UpIHtcbiAgICAgICAgLy8gdGhlIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCBhcyBzb29uIGFzIHRoZSBzb2NrZXQgaGFzIGJlZW4gc2VudFxuICAgICAgICBtZXNzYWdlSGFuZGxlZCA9IGZhbHNlO1xuICAgICAgICAvLyBkbyBub3QgbG9nIHJlY2VpcHRzXG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub25jZShtc2dJZC50b1N0cmluZygpLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgLy8gd2UgYXJlIG5vdCB3YWl0aW5nIGZvciB0aGlzLCBhbmQgaWYgaXQgZXJyb3JzIGl0IGlzIG1vc3QgbGlrZWx5XG4gICAgICAgICAgICAvLyBhIHByb3RvY29sIGNoYW5nZS4gTG9nIGFuZCBjaGVjayBkdXJpbmcgdGVzdGluZ1xuICAgICAgICAgICAgbG9nLmVycm9yKGBSZWNlaXZlZCBlcnJvciBmcm9tIHNlbmQgdGhhdCBpcyBub3QgYmVpbmcgd2FpdGVkIGZvciAoaWQ6ICR7bXNnSWR9KTogJyR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShlcnIpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICAgIC8vIHJlamVjdCwgdGhvdWdoIGl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoaXMgd2lsbCBiZSB0cmlnZ2VyZWQsIHNpbmNlXG4gICAgICAgICAgICAvLyB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBkaXJlY3RsdHkgYWZ0ZXIgc2VuZC4gT24gdGhlIG9mZiBjaGFuY2UsXG4gICAgICAgICAgICAvLyB0aG91Z2gsIGl0IHdpbGwgYWxlcnQgb2YgYSBwcm90b2NvbCBjaGFuZ2UuXG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyLmxpc3RlbmVycyhjbWQuX19zZWxlY3RvcikubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIucHJlcGVuZE9uY2VMaXN0ZW5lcihjbWQuX19zZWxlY3RvciwgZnVuY3Rpb24gKGVyciwgLi4uYXJncykge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoYXJncyksIERBVEFfTE9HX0xFTkdUSCl9J2ApO1xuICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChjbWQ/Ll9fYXJndW1lbnQ/LldJUlNvY2tldERhdGFLZXkpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKG1zZ0lkLnRvU3RyaW5nKCksIGZ1bmN0aW9uIChlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYFJlbW90ZSBkZWJ1Z2dlciBlcnJvciB3aXRoIGNvZGUgJyR7ZXJyLmNvZGV9JzogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgZGF0YSByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkodmFsdWUpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub3RoaW5nIGVsc2UgaXMgaGFuZGxpbmcgdGhpbmdzLCBzbyBqdXN0IHJlc29sdmUgd2hlbiB0aGUgbWVzc2FnZSBpcyBzZW50XG4gICAgICAgIG1lc3NhZ2VIYW5kbGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1zZyA9IGBTZW5kaW5nICcke2NtZC5fX3NlbGVjdG9yfScgbWVzc2FnZWAgK1xuICAgICAgICAoZnVsbE9wdHMuYXBwSWRLZXkgPyBgIHRvIGFwcCAnJHtmdWxsT3B0cy5hcHBJZEtleX0nYCA6ICcnKSArXG4gICAgICAgIChmdWxsT3B0cy5wYWdlSWRLZXkgPyBgLCBwYWdlICcke2Z1bGxPcHRzLnBhZ2VJZEtleX0nYCA6ICcnKSArXG4gICAgICAgICh0aGlzLm5lZWRzVGFyZ2V0ICYmIHRhcmdldElkID8gYCwgdGFyZ2V0ICcke3RhcmdldElkfSdgIDogJycpICtcbiAgICAgICAgYCAoaWQ6ICR7bXNnSWR9KTogJyR7Y29tbWFuZH0nYDtcbiAgICAgIGxvZy5kZWJ1Zyhtc2cpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZW5kTWVzc2FnZShjbWQpO1xuICAgICAgICBpZiAoIW1lc3NhZ2VIYW5kbGVkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGhhbmRsZXJzIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgYmVmb3JlIHJlc29sdmluZyxcbiAgICAgICAgICAvLyBhbmQgbm8gZXJyb3JzIHNlbmRpbmcgdGhlIG1lc3NhZ2Ugb3ZlciB0aGUgc29ja2V0LCBzbyByZXNvbHZlXG4gICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHRocm93IG5ldyBFcnJvcihgU3ViLWNsYXNzZXMgbmVlZCB0byBpbXBsZW1lbnQgYSAnY29ubmVjdCcgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2Nvbm5lY3QgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UgKC8qIGNvbW1hbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdzZW5kTWVzc2FnZScgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmUgKC8qIGRhdGEgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdyZWNlaXZlJyBmdW5jdGlvbmApO1xuICB9XG5cbiAgYWRkVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLndhcm4oYFJlY2VpdmVkICdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcgZXZlbnQgZm9yIGFwcCAnJHthcHB9JyB3aXRoIG5vIHRhcmdldC4gU2tpcHBpbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb24pICYmICF0YXJnZXRJbmZvLmlzUHJvdmlzaW9uYWwpIHtcbiAgICAgIGxvZy53YXJuKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldENyZWF0ZWQnIGV2ZW50IGZvciBhcHAgJyR7YXBwfScgd2l0aCBubyBwZW5kaW5nIHJlcXVlc3Q6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW5mbyl9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldEluZm8uaXNQcm92aXNpb25hbCkge1xuICAgICAgbG9nLmRlYnVnKGBQcm92aXNpb25hbCB0YXJnZXQgY3JlYXRlZCBmb3IgYXBwICcke2FwcH0nLCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScuIElnbm9yaW5nIHVudGlsIHRhcmdldCB1cGRhdGUgZXZlbnRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBbYXBwSWRLZXksIHBhZ2VJZEtleV0gPSB0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb247XG5cbiAgICBsb2cuZGVidWcoYFRhcmdldCBjcmVhdGVkIGZvciBhcHAgJyR7YXBwSWRLZXl9JyBhbmQgcGFnZSAnJHtwYWdlSWRLZXl9JzogJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbmZvKX1gKTtcbiAgICBpZiAoXy5oYXModGhpcy50YXJnZXRzW2FwcElkS2V5XSwgcGFnZUlkS2V5KSkge1xuICAgICAgbG9nLmRlYnVnKGBUaGVyZSBpcyBhbHJlYWR5IGEgdGFyZ2V0IGZvciB0aGlzIGFwcCBhbmQgcGFnZSAoJyR7dGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldfScpLiBUaGlzIG1pZ2h0IGNhdXNlIHByb2JsZW1zYCk7XG4gICAgfVxuICAgIHRoaXMudGFyZ2V0c1thcHBdID0gdGhpcy50YXJnZXRzW2FwcF0gfHwge307XG4gICAgdGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldID0gdGFyZ2V0SW5mby50YXJnZXRJZDtcbiAgfVxuXG4gIHVwZGF0ZVRhcmdldCAoZXJyLCBhcHAsIG9sZFRhcmdldElkLCBuZXdUYXJnZXRJZCkge1xuICAgIGxvZy5kZWJ1ZyhgVGFyZ2V0IHVwZGF0ZWQgZm9yIGFwcCAnJHthcHB9Jy4gT2xkIHRhcmdldDogJyR7b2xkVGFyZ2V0SWR9JywgbmV3IHRhcmdldDogJyR7bmV3VGFyZ2V0SWR9J2ApO1xuICAgIGlmICghdGhpcy50YXJnZXRzW2FwcF0pIHtcbiAgICAgIGxvZy53YXJuKGBObyBleGlzdGluZyB0YXJnZXQgZm9yIGFwcCAnJHthcHB9Jy4gTm90IHN1cmUgd2hhdCB0byBkb2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBzYXZlIHRoaXMsIHRvIGJlIHVzZWQgaWYvd2hlbiB0aGUgZXhpc3RpbmcgdGFyZ2V0IGlzIGRlc3Ryb3llZFxuICAgIHRoaXMudGFyZ2V0c1thcHBdLnByb3Zpc2lvbmFsID0ge1xuICAgICAgb2xkVGFyZ2V0SWQsXG4gICAgICBuZXdUYXJnZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcmVtb3ZlVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldERlc3Ryb3llZCcgZXZlbnQgd2l0aCBubyB0YXJnZXQuIFNraXBwaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBUYXJnZXQgZGVzdHJveWVkIGZvciBhcHAgJyR7YXBwfSc6ICR7dGFyZ2V0SW5mby50YXJnZXRJZH1gKTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHRhcmdldHMgYW5kIGZpbmQgdGhlIG9uZSB0aGF0IGhhcyBhIHdhaXRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0XG4gICAgaWYgKHRoaXMudGFyZ2V0c1thcHBdPy5wcm92aXNpb25hbD8ub2xkVGFyZ2V0SWQgPT09IHRhcmdldEluZm8udGFyZ2V0SWQpIHtcbiAgICAgIGNvbnN0IHtvbGRUYXJnZXRJZCwgbmV3VGFyZ2V0SWR9ID0gdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG4gICAgICBkZWxldGUgdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG5cbiAgICAgIC8vIHdlIGRvIG5vdCBrbm93IHRoZSBwYWdlLCBzbyBnbyB0aHJvdWdoIGFuZCBmaW5kIHRoZSBleGlzdGluZyB0YXJnZXRcbiAgICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLnRhcmdldHNbYXBwXTtcbiAgICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgICAgaWYgKHRhcmdldElkID09PSBvbGRUYXJnZXRJZCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgcHJvdmlzaW9uYWwgdGFyZ2V0IGZvciBhcHAgJyR7YXBwfScuIE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIFVwZGF0aW5nYCk7XG4gICAgICAgICAgdGFyZ2V0c1twYWdlXSA9IG5ld1RhcmdldElkO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nLndhcm4oYFByb3Zpc2lvbmFsIHRhcmdldCBmb3IgYXBwICcke2FwcH0nIGZvdW5kLCBidXQgbm8gc3VpdGFibGUgZXhpc3RpbmcgdGFyZ2V0IGZvdW5kLiBUaGlzIG1heSBjYXVzZSBwcm9ibGVtc2ApO1xuICAgICAgbG9nLndhcm4oYE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIEV4aXN0aW5nIHRhcmdldHM6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0cyl9YCk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gd2FpdGluZyBwcm92aXNpb25hbCB0YXJnZXQsIGp1c3QgZ2V0IHJpZCBvZiB0aGUgZXhpc3Rpbmcgb25lXG4gICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMudGFyZ2V0c1thcHBdO1xuICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgIGlmICh0YXJnZXRJZCA9PT0gdGFyZ2V0SW5mby50YXJnZXRJZCkge1xuICAgICAgICBkZWxldGUgdGFyZ2V0c1twYWdlXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2cuZGVidWcoYFRhcmdldCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScgZGVsZXRlZCBmb3IgYXBwICcke2FwcH0nLCBidXQgbm8gc3VjaCB0YXJnZXQgZXhpc3RzYCk7XG4gIH1cblxuICBnZXRUYXJnZXQgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICByZXR1cm4gKHRoaXMudGFyZ2V0c1thcHBJZEtleV0gfHwge30pW3BhZ2VJZEtleV07XG4gIH1cblxuICBhc3luYyBzZWxlY3RQYWdlIChhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgdGhpcy5wZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uID0gW2FwcElkS2V5LCBwYWdlSWRLZXldO1xuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSBmYWxzZTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHN0ZXBzIHRoYXQgdGhlIERlc2t0b3AgU2FmYXJpIHN5c3RlbVxuICAgIC8vIGdvZXMgdGhyb3VnaCB0byBpbml0aWFsaXplIHRoZSBXZWIgSW5zcGVjdG9yIHNlc3Npb25cblxuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIC8vIGhpZ2hsaWdodCBhbmQgdGhlbiB1bi1oaWdobGlnaHQgdGhlIHdlYnZpZXdcbiAgICBmb3IgKGNvbnN0IGVuYWJsZWQgb2YgW3RydWUsIGZhbHNlXSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdpbmRpY2F0ZVdlYlZpZXcnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgZW5hYmxlZCxcbiAgICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnc2V0U2VuZGVyS2V5Jywgc2VuZE9wdHMpO1xuICAgIGxvZy5kZWJ1ZygnU2VuZGVyIGtleSBzZXQnKTtcblxuICAgIGlmICh0aGlzLmlzVGFyZ2V0QmFzZWQgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5wbGF0Zm9ybVZlcnNpb24sICc8JywgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNlbmQoJ1RhcmdldC5leGlzdHMnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIH1cblxuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUGFnZUZ1bGwoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBhZ2UoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogUGVyZm9ybSB0aGUgbWluaW1hbCBpbml0aWFsaXphdGlvbiB0byBnZXQgdGhlIFdlYiBJbnNwZWN0b3Igd29ya2luZ1xuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZVBhZ2UgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICBjb25zdCBzZW5kT3B0cyA9IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5LFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUGFnZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuXG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdGFza3MgdG8gaW5pdGlhbGl6ZVxuICAgIGF3YWl0IHRoaXMuc2VuZCgnTmV0d29yay5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUnVudGltZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSGVhcC5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0NvbnNvbGUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5pbml0aWFsaXplZCcsIHNlbmRPcHRzLCBmYWxzZSk7XG4gIH1cblxuICAvKlxuICAgKiBNaW1pYyBldmVyeSBzdGVwIHRoYXQgRGVza3RvcCBTYWZhcmkgRGV2ZWxvcCB0b29scyB1c2VzIHRvIGluaXRpYWxpemUgYVxuICAgKiBXZWIgSW5zcGVjdG9yIHNlc3Npb25cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemVQYWdlRnVsbCAoYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5zcGVjdG9yLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG5cbiAgICAvLyBnbyB0aHJvdWdoIHRoZSB0YXNrcyB0byBpbml0aWFsaXplXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmdldFJlc291cmNlVHJlZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET01TdG9yYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEYXRhYmFzZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5kZXhlZERCLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDU1MuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1J1bnRpbWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0hlYXAuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ01lbW9yeS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5nZXRGcmFtZXNXaXRoTWFuaWZlc3RzJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEluc3RydW1lbnRzJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBpbnN0cnVtZW50czogWydUaW1lbGluZScsICdTY3JpcHRQcm9maWxlcicsICdDUFUnXSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEF1dG9DYXB0dXJlRW5hYmxlZCcsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBzdGF0ZTogJ25vbmUnLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0UGF1c2VPbkFzc2VydGlvbnMnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QXN5bmNTdGFja1RyYWNlRGVwdGgnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGRlcHRoOiAyMDAsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5zZXRQYXVzZUZvckludGVybmFsU2NyaXB0cycsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgc2hvdWxkUGF1c2U6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdMYXllclRyZWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1dvcmtlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQ2FudmFzLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET00uZ2V0RG9jdW1lbnQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGNvbnN0IGxvZ2dpbmdDaGFubmVscyA9IGF3YWl0IHRoaXMuc2VuZCgnQ29uc29sZS5nZXRMb2dnaW5nQ2hhbm5lbHMnLCBzZW5kT3B0cyk7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgKGxvZ2dpbmdDaGFubmVscy5jaGFubmVscyB8fCBbXSkubWFwKChlbnRyeSkgPT4gZW50cnkuc291cmNlKSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLnNldExvZ2dpbmdDaGFubmVsTGV2ZWwnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgc291cmNlLFxuICAgICAgICBsZXZlbDogJ3ZlcmJvc2UnLFxuICAgICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdJbnNwZWN0b3IuaW5pdGlhbGl6ZWQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0QXBwIChhcHBJZEtleSkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBsb2NhbCBjYWxsYmFjaywgdGVtcG9yYXJpbHkgYWRkZWQgYXMgY2FsbGJhY2sgdG9cbiAgICAgIC8vIGBfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOmAgcmVtb3RlIGRlYnVnZ2VyIHJlc3BvbnNlXG4gICAgICAvLyB0byBoYW5kbGUgdGhlIGluaXRpYWwgY29ubmVjdGlvblxuICAgICAgY29uc3Qgb25BcHBDaGFuZ2UgPSAoZXJyLCBkaWN0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZnJvbSB0aGUgZGljdGlvbmFyeSByZXR1cm5lZCwgZ2V0IHRoZSBpZHNcbiAgICAgICAgY29uc3Qgb2xkQXBwSWRLZXkgPSBkaWN0LldJUkhvc3RBcHBsaWNhdGlvbklkZW50aWZpZXJLZXk7XG4gICAgICAgIGNvbnN0IGNvcnJlY3RBcHBJZEtleSA9IGRpY3QuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuXG4gICAgICAgIC8vIGlmIHRoaXMgaXMgYSByZXBvcnQgb2YgYSBwcm94eSByZWRpcmVjdCBmcm9tIHRoZSByZW1vdGUgZGVidWdnZXJcbiAgICAgICAgLy8gd2Ugd2FudCB0byB1cGRhdGUgb3VyIGRpY3Rpb25hcnkgYW5kIGdldCBhIG5ldyBhcHAgaWRcbiAgICAgICAgaWYgKG9sZEFwcElkS2V5ICYmIGNvcnJlY3RBcHBJZEtleSAhPT0gb2xkQXBwSWRLZXkpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYFdlIHdlcmUgbm90aWZpZWQgd2UgbWlnaHQgaGF2ZSBjb25uZWN0ZWQgdG8gdGhlIHdyb25nIGFwcC4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBVc2luZyBpZCAke2NvcnJlY3RBcHBJZEtleX0gaW5zdGVhZCBvZiAke29sZEFwcElkS2V5fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignTmV3IGFwcGxpY2F0aW9uIGhhcyBjb25uZWN0ZWQnKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5wcmVwZW5kT25jZUxpc3RlbmVyKCdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOicsIG9uQXBwQ2hhbmdlKTtcblxuICAgICAgLy8gZG8gdGhlIGFjdHVhbCBjb25uZWN0aW5nIHRvIHRoZSBhcHBcbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgcGFnZURpY3QsIGNvbm5lY3RlZEFwcElkS2V5O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIChbY29ubmVjdGVkQXBwSWRLZXksIHBhZ2VEaWN0XSA9IGF3YWl0IHRoaXMuc2VuZCgnY29ubmVjdFRvQXBwJywge1xuICAgICAgICAgICAgYXBwSWRLZXlcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy53YXJuKGBVbmFibGUgdG8gY29ubmVjdCB0byBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzb21ldGltZXMgdGhlIGNvbm5lY3QgbG9naWMgaGFwcGVucywgYnV0IHdpdGggYW4gZW1wdHkgZGljdGlvbmFyeVxuICAgICAgICAvLyB3aGljaCBsZWFkcyB0byB0aGUgcmVtb3RlIGRlYnVnZ2VyIGdldHRpbmcgZGlzY29ubmVjdGVkLCBhbmQgaW50byBhIGxvb3BcbiAgICAgICAgaWYgKF8uaXNFbXB0eShwYWdlRGljdCkpIHtcbiAgICAgICAgICBsZXQgbXNnID0gJ0VtcHR5IHBhZ2UgZGljdGlvbmFyeSByZWNlaXZlZCc7XG4gICAgICAgICAgbG9nLmRlYnVnKG1zZyk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtc2cpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKFtjb25uZWN0ZWRBcHBJZEtleSwgcGFnZURpY3RdKTtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRXhlY3V0aW9uQ29udGV4dENyZWF0ZWQgKGVyciwgY29udGV4dCkge1xuICAgIC8vIHsgaWQ6IDIsIGlzUGFnZUNvbnRleHQ6IHRydWUsIG5hbWU6ICcnLCBmcmFtZUlkOiAnMC4xJyB9XG4gICAgLy8gcmlnaHQgbm93IHdlIGhhdmUgbm8gd2F5IHRvIG1hcCBjb250ZXh0cyB0byBhcHBzL3BhZ2VzXG4gICAgLy8gc28ganVzdCBzdG9yZVxuICAgIHRoaXMuY29udGV4dHMucHVzaChjb250ZXh0LmlkKTtcbiAgfVxuXG4gIG9uR2FyYmFnZUNvbGxlY3RlZCAoKSB7XG4gICAgLy8ganVzdCB3YW50IHRvIGxvZyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nLCBhcyBpdCBjYW4gYWZmZWN0IG9wZXJ0aW9uXG4gICAgbG9nLmRlYnVnKGBXZWIgSW5zcGVjdG9yIGdhcmJhZ2UgY29sbGVjdGVkYCk7XG4gIH1cblxuICBvblNjcmlwdFBhcnNlZCAoZXJyLCBzY3JpcHRJbmZvKSB7XG4gICAgLy8geyBzY3JpcHRJZDogJzEzJywgdXJsOiAnJywgc3RhcnRMaW5lOiAwLCBzdGFydENvbHVtbjogMCwgZW5kTGluZTogODIsIGVuZENvbHVtbjogMyB9XG4gICAgbG9nLmRlYnVnKGBTY3JpcHQgcGFyc2VkOiAke0pTT04uc3RyaW5naWZ5KHNjcmlwdEluZm8pfWApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsZUFBZSxHQUFHO0VBQUNDLE1BQU0sRUFBRTtBQUFULENBQXhCO0FBRUEsTUFBTUMsdUJBQXVCLEdBQUcsS0FBaEM7QUFDQSxNQUFNQyx3QkFBd0IsR0FBRyxJQUFqQztBQUVBLE1BQU1DLDZCQUE2QixHQUFHLE1BQXRDO0FBR0EsTUFBTUMsNkJBQTZCLEdBQUcsTUFBdEM7O0FBRUEsU0FBU0MsYUFBVCxDQUF3QkMsUUFBeEIsRUFBa0NDLGVBQWxDLEVBQW1EO0VBSWpELE1BQU1DLGFBQWEsR0FBR0MsY0FBS0MsZUFBTCxDQUFxQkgsZUFBckIsRUFBc0MsSUFBdEMsRUFBNENKLDZCQUE1QyxDQUF0Qjs7RUFDQVEsZ0JBQUlDLEtBQUosQ0FBVyw4Q0FBNkNOLFFBQVEsR0FBRyxFQUFILEdBQVEsTUFBTywrQkFBOEJDLGVBQWdCLElBQTdIOztFQUNBSSxnQkFBSUMsS0FBSixDQUFXLDBDQUF5Q1QsNkJBQThCLE1BQUtLLGFBQWMsRUFBckc7O0VBQ0EsT0FBT0EsYUFBUDtBQUNEOztBQUVjLE1BQU1LLFNBQU4sQ0FBZ0I7RUFDN0JDLFdBQVcsQ0FBRUMsSUFBSSxHQUFHLEVBQVQsRUFBYTtJQUN0QixLQUFLQyxRQUFMLEdBQWdCLEVBQWhCO0lBQ0EsS0FBS0MscUJBQUwsR0FBNkIsQ0FBQyxDQUFDRixJQUFJLENBQUNHLG9CQUFwQztJQUVBLE1BQU07TUFDSkMsUUFESTtNQUVKWixlQUFlLEdBQUcsRUFGZDtNQUdKRCxRQUFRLEdBQUcsSUFIUDtNQUlKYyxtQkFBbUIsR0FBRyxLQUpsQjtNQUtKQywwQkFB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
@@ -13,7 +13,7 @@ var _logger = _interopRequireDefault(require("../logger"));
13
13
 
14
14
  var _lodash = _interopRequireDefault(require("lodash"));
15
15
 
16
- var _appiumSupport = require("appium-support");
16
+ var _support = require("@appium/support");
17
17
 
18
18
  var _events = _interopRequireDefault(require("events"));
19
19
 
@@ -205,7 +205,7 @@ class RpcMessageHandler extends _events.default {
205
205
  } catch (err) {
206
206
  _logger.default.error(`Unexpected message format from Web Inspector:`);
207
207
 
208
- this.warn(_appiumSupport.util.jsonStringify(plist));
208
+ this.warn(_support.util.jsonStringify(plist));
209
209
  throw err;
210
210
  }
211
211
  } else {
@@ -214,10 +214,10 @@ class RpcMessageHandler extends _events.default {
214
214
 
215
215
  let error = dataKey.error || null;
216
216
 
217
- if ((_result2 = result) === null || _result2 === void 0 ? void 0 : _result2.wasThrown) {
217
+ if ((_result2 = result) !== null && _result2 !== void 0 && _result2.wasThrown) {
218
218
  var _result3, _result3$result, _result4, _result4$result, _result5, _result5$result, _result6, _result6$result;
219
219
 
220
- const message = ((_result3 = result) === null || _result3 === void 0 ? void 0 : (_result3$result = _result3.result) === null || _result3$result === void 0 ? void 0 : _result3$result.value) || ((_result4 = result) === null || _result4 === void 0 ? void 0 : (_result4$result = _result4.result) === null || _result4$result === void 0 ? void 0 : _result4$result.description) ? ((_result5 = result) === null || _result5 === void 0 ? void 0 : (_result5$result = _result5.result) === null || _result5$result === void 0 ? void 0 : _result5$result.value) || ((_result6 = result) === null || _result6 === void 0 ? void 0 : (_result6$result = _result6.result) === null || _result6$result === void 0 ? void 0 : _result6$result.description) : 'Error occurred in handling data message';
220
+ const message = (_result3 = result) !== null && _result3 !== void 0 && (_result3$result = _result3.result) !== null && _result3$result !== void 0 && _result3$result.value || (_result4 = result) !== null && _result4 !== void 0 && (_result4$result = _result4.result) !== null && _result4$result !== void 0 && _result4$result.description ? ((_result5 = result) === null || _result5 === void 0 ? void 0 : (_result5$result = _result5.result) === null || _result5$result === void 0 ? void 0 : _result5$result.value) || ((_result6 = result) === null || _result6 === void 0 ? void 0 : (_result6$result = _result6.result) === null || _result6$result === void 0 ? void 0 : _result6$result.description) : 'Error occurred in handling data message';
221
221
  error = new Error(message);
222
222
  }
223
223
 
@@ -229,4 +229,4 @@ class RpcMessageHandler extends _events.default {
229
229
  exports.default = RpcMessageHandler;require('source-map-support').install();
230
230
 
231
231
 
232
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9ycGMvcnBjLW1lc3NhZ2UtaGFuZGxlci5qcyJdLCJuYW1lcyI6WyJScGNNZXNzYWdlSGFuZGxlciIsIkV2ZW50RW1pdHRlcnMiLCJjb25zdHJ1Y3RvciIsImlzVGFyZ2V0QmFzZWQiLCJfaXNUYXJnZXRCYXNlZCIsImhhbmRsZU1lc3NhZ2UiLCJwbGlzdCIsInNlbGVjdG9yIiwiX19zZWxlY3RvciIsImxvZyIsImRlYnVnIiwiYXJndW1lbnQiLCJfX2FyZ3VtZW50IiwiZW1pdCIsIldJUlNpbXVsYXRvck5hbWVLZXkiLCJXSVJTaW11bGF0b3JCdWlsZEtleSIsIldJUlNpbXVsYXRvclByb2R1Y3RWZXJzaW9uS2V5IiwiV0lSQXBwbGljYXRpb25EaWN0aW9uYXJ5S2V5IiwiV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5IiwiV0lSTGlzdGluZ0tleSIsImhhbmRsZURhdGFNZXNzYWdlIiwicGFyc2VEYXRhS2V5IiwiSlNPTiIsInBhcnNlIiwiV0lSTWVzc2FnZURhdGFLZXkiLCJ0b1N0cmluZyIsImVyciIsImVycm9yIiwiXyIsInRydW5jYXRlIiwic3RyaW5naWZ5IiwibGVuZ3RoIiwiRXJyb3IiLCJtZXNzYWdlIiwiZGlzcGF0Y2hEYXRhTWVzc2FnZSIsIm1zZ0lkIiwibWV0aG9kIiwicGFyYW1zIiwicmVzdWx0IiwiaXNFbXB0eSIsImxpc3RlbmVyQ291bnQiLCJoYXMiLCJ2YWx1ZSIsImV2ZW50TmFtZXMiLCJhcmdzIiwicHVzaCIsInJlY29yZCIsImNvbnRleHQiLCJzdGFydHNXaXRoIiwibmFtZSIsImRhdGFLZXkiLCJpZCIsImFwcCIsInRhcmdldEluZm8iLCJvbGRUYXJnZXRJZCIsIm5ld1RhcmdldElkIiwidGFyZ2V0SWQiLCJ3YXJuIiwidXRpbCIsImpzb25TdHJpbmdpZnkiLCJ3YXNUaHJvd24iLCJkZXNjcmlwdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHZSxNQUFNQSxpQkFB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LE1BQWpCO0FBQ0FFLFFBQUFBLE1BQU0sR0FBR0wsT0FBTyxDQUFDSyxNQUFSLElBQWtCTCxPQUEzQjtBQUNBSSxRQUFBQSxNQUFNLEdBQUdDLE1BQU0sQ0FBQ0QsTUFBaEI7QUFDRCxPQU5ELENBTUUsT0FBT1gsR0FBUCxFQUFZO0FBR1pqQix3QkFBSWtCLEtBQUosQ0FBVywrQ0FBWDs7QUFDQSxhQUFLOEIsSUFBTCxDQUFVQyxvQkFBS0MsYUFBTCxDQUFtQnJELEtBQW5CLENBQVY7QUFDQSxjQUFNb0IsR0FBTjtBQUNEO0FBQ0YsS0F0QkQsTUFzQk87QUFDTFcsTUFBQUEsTUFBTSxHQUFHYSxPQUFPLENBQUNiLE1BQWpCO0FBQ0Q7O0FBR0QsUUFBSVYsS0FBSyxHQUFHdUIsT0FBTyxDQUFDdkIsS0FBUixJQUFpQixJQUE3Qjs7QUFDQSxvQkFBSVcsTUFBSiw2Q0FBSSxTQUFRc0IsU0FBWixFQUF1QjtBQUFBOztBQUNyQixZQUFNM0IsT0FBTyxHQUFJLGFBQUFLLE1BQU0sVUFBTiwrREFBUUEsTUFBUixvRUFBZ0JJLEtBQWhCLGtCQUF5QkosTUFBekIsZ0VBQXlCLFNBQVFBLE1BQWpDLG9EQUF5QixnQkFBZ0J1QixXQUF6QyxDQUFELEdBQ1gsYUFBQXZCLE1BQU0sVUFBTiwrREFBUUEsTUFBUixvRUFBZ0JJLEtBQWhCLGtCQUF5QkosTUFBekIsZ0VBQXlCLFNBQVFBLE1BQWpDLG9EQUF5QixnQkFBZ0J1QixXQUF6QyxDQURXLEdBRVoseUNBRko7QUFHQWxDLE1BQUFBLEtBQUssR0FBRyxJQUFJSyxLQUFKLENBQVVDLE9BQVYsQ0FBUjtBQUNEOztBQUVELFVBQU0sS0FBS0MsbUJBQUwsQ0FBeUJDLEtBQXpCLEVBQWdDQyxNQUFoQyxFQUF3Q0MsTUFBeEMsRUFBZ0RDLE1BQWhELEVBQXdEWCxLQUF4RCxDQUFOO0FBQ0Q7O0FBNU0wRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IEV2ZW50RW1pdHRlcnMgZnJvbSAnZXZlbnRzJztcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBScGNNZXNzYWdlSGFuZGxlciBleHRlbmRzIEV2ZW50RW1pdHRlcnMge1xuICBjb25zdHJ1Y3RvciAoaXNUYXJnZXRCYXNlZCA9IGZhbHNlKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuaXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG4gIH1cblxuICBnZXQgaXNUYXJnZXRCYXNlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVGFyZ2V0QmFzZWQ7XG4gIH1cblxuICBzZXQgaXNUYXJnZXRCYXNlZCAoaXNUYXJnZXRCYXNlZCkge1xuICAgIHRoaXMuX2lzVGFyZ2V0QmFzZWQgPSAhIWlzVGFyZ2V0QmFzZWQ7XG4gIH1cblxuICBhc3luYyBoYW5kbGVNZXNzYWdlIChwbGlzdCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gcGxpc3QuX19zZWxlY3RvcjtcbiAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICBsb2cuZGVidWcoJ0dvdCBhbiBpbnZhbGlkIHBsaXN0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXJndW1lbnQgPSBwbGlzdC5fX2FyZ3VtZW50O1xuICAgIHN3aXRjaCAoc2VsZWN0b3IpIHtcbiAgICAgIGNhc2UgJ19ycGNfcmVwb3J0U2V0dXA6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX3JlcG9ydFNldHVwOicsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBhcmd1bWVudC5XSVJTaW11bGF0b3JOYW1lS2V5LFxuICAgICAgICAgIGFyZ3VtZW50LldJUlNpbXVsYXRvckJ1aWxkS2V5LFxuICAgICAgICAgIGFyZ3VtZW50LldJUlNpbXVsYXRvclByb2R1Y3RWZXJzaW9uS2V5XG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19yZXBvcnRDb25uZWN0ZWRBcHBsaWNhdGlvbkxpc3Q6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX3JlcG9ydENvbm5lY3RlZEFwcGxpY2F0aW9uTGlzdDonLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgYXJndW1lbnQuV0lSQXBwbGljYXRpb25EaWN0aW9uYXJ5S2V5XG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19hcHBsaWNhdGlvblNlbnRMaXN0aW5nOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19mb3J3YXJkR2V0TGlzdGluZzonLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgYXJndW1lbnQuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5LFxuICAgICAgICAgIGFyZ3VtZW50LldJUkxpc3RpbmdLZXlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19hcHBsaWNhdGlvbkNvbm5lY3RlZDonLCBudWxsLCBhcmd1bWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19hcHBsaWNhdGlvbkRpc2Nvbm5lY3RlZDonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfYXBwbGljYXRpb25EaXNjb25uZWN0ZWQ6JywgbnVsbCwgYXJndW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfYXBwbGljYXRpb25VcGRhdGVkOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19hcHBsaWNhdGlvblVwZGF0ZWQ6JywgbnVsbCwgYXJndW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfcmVwb3J0Q29ubmVjdGVkRHJpdmVyTGlzdDonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfcmVwb3J0Q29ubmVjdGVkRHJpdmVyTGlzdDonLCBudWxsLCBhcmd1bWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19yZXBvcnRDdXJyZW50U3RhdGU6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX3JlcG9ydEN1cnJlbnRTdGF0ZTonLCBudWxsLCBhcmd1bWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19hcHBsaWNhdGlvblNlbnREYXRhOic6XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRGF0YU1lc3NhZ2UocGxpc3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGxvZy5kZWJ1ZyhgRGVidWdnZXIgZ290IGEgbWVzc2FnZSBmb3IgJyR7c2VsZWN0b3J9JyBhbmQgaGF2ZSBubyBgICtcbiAgICAgICAgICBgaGFuZGxlciwgZG9pbmcgbm90aGluZy5gKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZURhdGFLZXkgKHBsaXN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHBsaXN0Ll9fYXJndW1lbnQuV0lSTWVzc2FnZURhdGFLZXkudG9TdHJpbmcoJ3V0ZjgnKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZXJyb3IoYFVucGFyc2VhYmxlIG1lc3NhZ2UgZGF0YTogJHtfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KHBsaXN0KSwge2xlbmd0aDogMTAwfSl9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBtZXNzYWdlIGRhdGE6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGlzcGF0Y2hEYXRhTWVzc2FnZSAobXNnSWQsIG1ldGhvZCwgcGFyYW1zLCByZXN1bHQsIGVycm9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIGlmICghXy5pc0VtcHR5KG1zZ0lkKSkge1xuICAgICAgbG9nLmRlYnVnKGBIYW5kbGluZyBtZXNzYWdlIChpZDogJyR7bXNnSWR9JylgKTtcbiAgICB9XG5cbiAgICBpZiAobXNnSWQpIHtcbiAgICAgIGlmICh0aGlzLmxpc3RlbmVyQ291bnQobXNnSWQpKSB7XG4gICAgICAgIGlmIChfLmhhcyhyZXN1bHQ/LnJlc3VsdCwgJ3ZhbHVlJykpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVzdWx0LnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdChtc2dJZCwgZXJyb3IsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZXJyb3IoYFdlYiBJbnNwZWN0b3IgcmV0dXJuZWQgZGF0YSBmb3IgbWVzc2FnZSAnJHttc2dJZH0nIGAgK1xuICAgICAgICAgIGBidXQgd2Ugd2VyZSBub3Qgd2FpdGluZyBmb3IgdGhhdCBtZXNzYWdlISBgICtcbiAgICAgICAgICBgcmVzdWx0OiAnJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfSc7IGAgK1xuICAgICAgICAgIGBlcnJvcjogJyR7SlNPTi5zdHJpbmdpZnkoZXJyb3IpfSdgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZXZlbnROYW1lcyA9IFttZXRob2RdO1xuICAgIGxldCBhcmdzID0gW3BhcmFtc107XG5cbiAgICAvLyBzb21lIGV2ZW50cyBoYXZlIGRpZmZlcmVudCBuYW1lcywgb3IgdGhlIGFyZ3VtZW50cyBhcmUgbWFwcGVkIGZyb20gdGhlXG4gICAgLy8gcGFyYW1ldGVycyByZWNlaXZlZFxuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICBjYXNlICdQYWdlLmZyYW1lU3RvcHBlZExvYWRpbmcnOlxuICAgICAgICBldmVudE5hbWVzLnB1c2goJ1BhZ2UuZnJhbWVOYXZpZ2F0ZWQnKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSAnUGFnZS5mcmFtZU5hdmlnYXRlZCc6XG4gICAgICAgIGFyZ3MgPSBbYCcke21ldGhvZH0nIGV2ZW50YF07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVGltZWxpbmUuZXZlbnRSZWNvcmRlZCc6XG4gICAgICAgIGFyZ3MgPSBbcGFyYW1zIHx8IHBhcmFtcy5yZWNvcmRdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0NvbnNvbGUubWVzc2FnZUFkZGVkJzpcbiAgICAgICAgYXJncyA9IFtwYXJhbXMubWVzc2FnZV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUnVudGltZS5leGVjdXRpb25Db250ZXh0Q3JlYXRlZCc6XG4gICAgICAgIGFyZ3MgPSBbcGFyYW1zLmNvbnRleHRdO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIHBhc3NcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKF8uc3RhcnRzV2l0aChtZXRob2QsICdOZXR3b3JrLicpKSB7XG4gICAgICAvLyBhZ2dyZWdhdGUgTmV0d29yayBldmVudHMsIGFuZCBhZGQgb3JpZ2luYWwgbWV0aG9kIG5hbWUgdG8gdGhlIGFyZ3VtZW50c1xuICAgICAgZXZlbnROYW1lcy5wdXNoKCdOZXR3b3JrRXZlbnQnKTtcbiAgICAgIGFyZ3MucHVzaChtZXRob2QpO1xuICAgIH1cbiAgICBpZiAoXy5zdGFydHNXaXRoKG1ldGhvZCwgJ0NvbnNvbGUuJykpIHtcbiAgICAgIC8vIGFnZ3JlZ2F0ZSBOZXR3b3JrIGV2ZW50cywgYW5kIGFkZCBvcmlnaW5hbCBtZXRob2QgbmFtZSB0byB0aGUgYXJndW1lbnRzXG4gICAgICBldmVudE5hbWVzLnB1c2goJ0NvbnNvbGVFdmVudCcpO1xuICAgICAgYXJncy5wdXNoKG1ldGhvZCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIGV2ZW50TmFtZXMpIHtcbiAgICAgIHRoaXMuZW1pdChuYW1lLCBlcnJvciwgLi4uYXJncyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlRGF0YU1lc3NhZ2UgKHBsaXN0KSB7XG4gICAgY29uc3QgZGF0YUtleSA9IHRoaXMucGFyc2VEYXRhS2V5KHBsaXN0KTtcbiAgICBsZXQgbXNnSWQgPSAoZGF0YUtleS5pZCB8fCAnJykudG9TdHJpbmcoKTtcbiAgICBsZXQgcmVzdWx0ID0gZGF0YUtleS5yZXN1bHQ7XG5cbiAgICBsZXQgbWV0aG9kID0gZGF0YUtleS5tZXRob2Q7XG4gICAgbGV0IHBhcmFtcztcblxuICAgIGlmIChtZXRob2QgPT09ICdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcpIHtcbiAgICAgIC8vIHRoaXMgaXMgaW4gcmVzcG9uc2UgdG8gYSBgX3JwY19mb3J3YXJkU29ja2V0U2V0dXA6YCBjYWxsXG4gICAgICAvLyB0YXJnZXRJbmZvOiB7IHRhcmdldElkOiAncGFnZS0xJywgdHlwZTogJ3BhZ2UnIH1cbiAgICAgIGNvbnN0IGFwcCA9IHBsaXN0Ll9fYXJndW1lbnQuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuICAgICAgY29uc3QgdGFyZ2V0SW5mbyA9IGRhdGFLZXkucGFyYW1zLnRhcmdldEluZm87XG4gICAgICB0aGlzLmVtaXQoJ1RhcmdldC50YXJnZXRDcmVhdGVkJywgbnVsbCwgYXBwLCB0YXJnZXRJbmZvKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ1RhcmdldC5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCcpIHtcbiAgICAgIGNvbnN0IGFwcCA9IHBsaXN0Ll9fYXJndW1lbnQuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuICAgICAgY29uc3Qgb2xkVGFyZ2V0SWQgPSBkYXRhS2V5LnBhcmFtcy5vbGRUYXJnZXRJZDtcbiAgICAgIGNvbnN0IG5ld1RhcmdldElkID0gZGF0YUtleS5wYXJhbXMubmV3VGFyZ2V0SWQ7XG4gICAgICB0aGlzLmVtaXQoJ1RhcmdldC5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCcsIG51bGwsIGFwcCwgb2xkVGFyZ2V0SWQsIG5ld1RhcmdldElkKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ1RhcmdldC50YXJnZXREZXN0cm95ZWQnKSB7XG4gICAgICBjb25zdCBhcHAgPSBwbGlzdC5fX2FyZ3VtZW50LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleTtcbiAgICAgIGNvbnN0IHRhcmdldEluZm8gPSBkYXRhS2V5LnBhcmFtcy50YXJnZXRJbmZvIHx8IHt0YXJnZXRJZDogZGF0YUtleS5wYXJhbXMudGFyZ2V0SWR9O1xuICAgICAgdGhpcy5lbWl0KCdUYXJnZXQudGFyZ2V0RGVzdHJveWVkJywgbnVsbCwgYXBwLCB0YXJnZXRJbmZvKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGFLZXkuZXJyb3IgJiYgdGhpcy5pc1RhcmdldEJhc2VkKSB7XG4gICAgICBpZiAoZGF0YUtleS5tZXRob2QgIT09ICdUYXJnZXQuZGlzcGF0Y2hNZXNzYWdlRnJvbVRhcmdldCcpIHtcbiAgICAgICAgLy8gdGhpcyBzb3J0IG9mIG1lc3NhZ2UsIGF0IHRoaXMgcG9pbnQsIGlzIGp1c3QgYW4gYWNrbm93bGVkZ2VtZW50XG4gICAgICAgIC8vIHRoYXQgdGhlIG9yaWdpbmFsIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhIFRhcmdldC1iYXNlZCBtZXNzYWdlIHdyYXBwaW5nIGEgcHJvdG9jb2wgbWVzc2FnZVxuICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICB0cnkge1xuICAgICAgICBtZXNzYWdlID0gSlNPTi5wYXJzZShkYXRhS2V5LnBhcmFtcy5tZXNzYWdlKTtcbiAgICAgICAgbXNnSWQgPSBtZXNzYWdlLmlkO1xuICAgICAgICBtZXRob2QgPSBtZXNzYWdlLm1ldGhvZDtcbiAgICAgICAgcmVzdWx0ID0gbWVzc2FnZS5yZXN1bHQgfHwgbWVzc2FnZTtcbiAgICAgICAgcGFyYW1zID0gcmVzdWx0LnBhcmFtcztcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBpZiB0aGlzIGhhcHBlbnMgdGhlbiBzb21lIGFzcGVjdCBvZiB0aGUgcHJvdG9jb2wgaXMgbWlzc2luZyB0byB1c1xuICAgICAgICAvLyBzbyBwcmludCB0aGUgZW50aXJlIG1lc3NhZ2UgdG8gZ2V0IHZpc2liaWl0eSBpbnRvIHdoYXQgaXMgZ29pbmcgb25cbiAgICAgICAgbG9nLmVycm9yKGBVbmV4cGVjdGVkIG1lc3NhZ2UgZm9ybWF0IGZyb20gV2ViIEluc3BlY3RvcjpgKTtcbiAgICAgICAgdGhpcy53YXJuKHV0aWwuanNvblN0cmluZ2lmeShwbGlzdCkpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtcyA9IGRhdGFLZXkucGFyYW1zO1xuICAgIH1cblxuICAgIC8vIHdlIGNhbiBnZXQgYW4gZXJyb3IsIG9yIHdlIGNhbiBnZXQgYSByZXNwb25zZSB0aGF0IGlzIGFuIGVycm9yXG4gICAgbGV0IGVycm9yID0gZGF0YUtleS5lcnJvciB8fCBudWxsO1xuICAgIGlmIChyZXN1bHQ/Lndhc1Rocm93bikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IChyZXN1bHQ/LnJlc3VsdD8udmFsdWUgfHwgcmVzdWx0Py5yZXN1bHQ/LmRlc2NyaXB0aW9uKVxuICAgICAgICA/IChyZXN1bHQ/LnJlc3VsdD8udmFsdWUgfHwgcmVzdWx0Py5yZXN1bHQ/LmRlc2NyaXB0aW9uKVxuICAgICAgICA6ICdFcnJvciBvY2N1cnJlZCBpbiBoYW5kbGluZyBkYXRhIG1lc3NhZ2UnO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5kaXNwYXRjaERhdGFNZXNzYWdlKG1zZ0lkLCBtZXRob2QsIHBhcmFtcywgcmVzdWx0LCBlcnJvcik7XG4gIH1cbn1cbiJdLCJmaWxlIjoibGliL3JwYy9ycGMtbWVzc2FnZS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
232
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3JwYy9ycGMtbWVzc2FnZS1oYW5kbGVyLmpzIiwibmFtZXMiOlsiUnBjTWVzc2FnZUhhbmRsZXIiLCJFdmVudEVtaXR0ZXJzIiwiY29uc3RydWN0b3IiLCJpc1RhcmdldEJhc2VkIiwiX2lzVGFyZ2V0QmFzZWQiLCJoYW5kbGVNZXNzYWdlIiwicGxpc3QiLCJzZWxlY3RvciIsIl9fc2VsZWN0b3IiLCJsb2ciLCJkZWJ1ZyIsImFyZ3VtZW50IiwiX19hcmd1bWVudCIsImVtaXQiLCJXSVJTaW11bGF0b3JOYW1lS2V5IiwiV0lSU2ltdWxhdG9yQnVpbGRLZXkiLCJXSVJTaW11bGF0b3JQcm9kdWN0VmVyc2lvbktleSIsIldJUkFwcGxpY2F0aW9uRGljdGlvbmFyeUtleSIsIldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsIldJUkxpc3RpbmdLZXkiLCJoYW5kbGVEYXRhTWVzc2FnZSIsInBhcnNlRGF0YUtleSIsIkpTT04iLCJwYXJzZSIsIldJUk1lc3NhZ2VEYXRhS2V5IiwidG9TdHJpbmciLCJlcnIiLCJlcnJvciIsIl8iLCJ0cnVuY2F0ZSIsInN0cmluZ2lmeSIsImxlbmd0aCIsIkVycm9yIiwibWVzc2FnZSIsImRpc3BhdGNoRGF0YU1lc3NhZ2UiLCJtc2dJZCIsIm1ldGhvZCIsInBhcmFtcyIsInJlc3VsdCIsImlzRW1wdHkiLCJsaXN0ZW5lckNvdW50IiwiaGFzIiwidmFsdWUiLCJldmVudE5hbWVzIiwiYXJncyIsInB1c2giLCJyZWNvcmQiLCJjb250ZXh0Iiwic3RhcnRzV2l0aCIsIm5hbWUiLCJkYXRhS2V5IiwiaWQiLCJhcHAiLCJ0YXJnZXRJbmZvIiwib2xkVGFyZ2V0SWQiLCJuZXdUYXJnZXRJZCIsInRhcmdldElkIiwid2FybiIsInV0aWwiLCJqc29uU3RyaW5naWZ5Iiwid2FzVGhyb3duIiwiZGVzY3JpcHRpb24iXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvcnBjL3JwYy1tZXNzYWdlLWhhbmRsZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IEV2ZW50RW1pdHRlcnMgZnJvbSAnZXZlbnRzJztcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBScGNNZXNzYWdlSGFuZGxlciBleHRlbmRzIEV2ZW50RW1pdHRlcnMge1xuICBjb25zdHJ1Y3RvciAoaXNUYXJnZXRCYXNlZCA9IGZhbHNlKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuaXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG4gIH1cblxuICBnZXQgaXNUYXJnZXRCYXNlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVGFyZ2V0QmFzZWQ7XG4gIH1cblxuICBzZXQgaXNUYXJnZXRCYXNlZCAoaXNUYXJnZXRCYXNlZCkge1xuICAgIHRoaXMuX2lzVGFyZ2V0QmFzZWQgPSAhIWlzVGFyZ2V0QmFzZWQ7XG4gIH1cblxuICBhc3luYyBoYW5kbGVNZXNzYWdlIChwbGlzdCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gcGxpc3QuX19zZWxlY3RvcjtcbiAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICBsb2cuZGVidWcoJ0dvdCBhbiBpbnZhbGlkIHBsaXN0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXJndW1lbnQgPSBwbGlzdC5fX2FyZ3VtZW50O1xuICAgIHN3aXRjaCAoc2VsZWN0b3IpIHtcbiAgICAgIGNhc2UgJ19ycGNfcmVwb3J0U2V0dXA6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX3JlcG9ydFNldHVwOicsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBhcmd1bWVudC5XSVJTaW11bGF0b3JOYW1lS2V5LFxuICAgICAgICAgIGFyZ3VtZW50LldJUlNpbXVsYXRvckJ1aWxkS2V5LFxuICAgICAgICAgIGFyZ3VtZW50LldJUlNpbXVsYXRvclByb2R1Y3RWZXJzaW9uS2V5XG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19yZXBvcnRDb25uZWN0ZWRBcHBsaWNhdGlvbkxpc3Q6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX3JlcG9ydENvbm5lY3RlZEFwcGxpY2F0aW9uTGlzdDonLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgYXJndW1lbnQuV0lSQXBwbGljYXRpb25EaWN0aW9uYXJ5S2V5XG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19hcHBsaWNhdGlvblNlbnRMaXN0aW5nOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19mb3J3YXJkR2V0TGlzdGluZzonLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgYXJndW1lbnQuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5LFxuICAgICAgICAgIGFyZ3VtZW50LldJUkxpc3RpbmdLZXlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19hcHBsaWNhdGlvbkNvbm5lY3RlZDonLCBudWxsLCBhcmd1bWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19hcHBsaWNhdGlvbkRpc2Nvbm5lY3RlZDonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfYXBwbGljYXRpb25EaXNjb25uZWN0ZWQ6JywgbnVsbCwgYXJndW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfYXBwbGljYXRpb25VcGRhdGVkOic6XG4gICAgICAgIHRoaXMuZW1pdCgnX3JwY19hcHBsaWNhdGlvblVwZGF0ZWQ6JywgbnVsbCwgYXJndW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ19ycGNfcmVwb3J0Q29ubmVjdGVkRHJpdmVyTGlzdDonOlxuICAgICAgICB0aGlzLmVtaXQoJ19ycGNfcmVwb3J0Q29ubmVjdGVkRHJpdmVyTGlzdDonLCBudWxsLCBhcmd1bWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19yZXBvcnRDdXJyZW50U3RhdGU6JzpcbiAgICAgICAgdGhpcy5lbWl0KCdfcnBjX3JlcG9ydEN1cnJlbnRTdGF0ZTonLCBudWxsLCBhcmd1bWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnX3JwY19hcHBsaWNhdGlvblNlbnREYXRhOic6XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRGF0YU1lc3NhZ2UocGxpc3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGxvZy5kZWJ1ZyhgRGVidWdnZXIgZ290IGEgbWVzc2FnZSBmb3IgJyR7c2VsZWN0b3J9JyBhbmQgaGF2ZSBubyBgICtcbiAgICAgICAgICBgaGFuZGxlciwgZG9pbmcgbm90aGluZy5gKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZURhdGFLZXkgKHBsaXN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHBsaXN0Ll9fYXJndW1lbnQuV0lSTWVzc2FnZURhdGFLZXkudG9TdHJpbmcoJ3V0ZjgnKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZXJyb3IoYFVucGFyc2VhYmxlIG1lc3NhZ2UgZGF0YTogJHtfLnRydW5jYXRlKEpTT04uc3RyaW5naWZ5KHBsaXN0KSwge2xlbmd0aDogMTAwfSl9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBtZXNzYWdlIGRhdGE6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGlzcGF0Y2hEYXRhTWVzc2FnZSAobXNnSWQsIG1ldGhvZCwgcGFyYW1zLCByZXN1bHQsIGVycm9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIGlmICghXy5pc0VtcHR5KG1zZ0lkKSkge1xuICAgICAgbG9nLmRlYnVnKGBIYW5kbGluZyBtZXNzYWdlIChpZDogJyR7bXNnSWR9JylgKTtcbiAgICB9XG5cbiAgICBpZiAobXNnSWQpIHtcbiAgICAgIGlmICh0aGlzLmxpc3RlbmVyQ291bnQobXNnSWQpKSB7XG4gICAgICAgIGlmIChfLmhhcyhyZXN1bHQ/LnJlc3VsdCwgJ3ZhbHVlJykpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVzdWx0LnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdChtc2dJZCwgZXJyb3IsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZXJyb3IoYFdlYiBJbnNwZWN0b3IgcmV0dXJuZWQgZGF0YSBmb3IgbWVzc2FnZSAnJHttc2dJZH0nIGAgK1xuICAgICAgICAgIGBidXQgd2Ugd2VyZSBub3Qgd2FpdGluZyBmb3IgdGhhdCBtZXNzYWdlISBgICtcbiAgICAgICAgICBgcmVzdWx0OiAnJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfSc7IGAgK1xuICAgICAgICAgIGBlcnJvcjogJyR7SlNPTi5zdHJpbmdpZnkoZXJyb3IpfSdgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZXZlbnROYW1lcyA9IFttZXRob2RdO1xuICAgIGxldCBhcmdzID0gW3BhcmFtc107XG5cbiAgICAvLyBzb21lIGV2ZW50cyBoYXZlIGRpZmZlcmVudCBuYW1lcywgb3IgdGhlIGFyZ3VtZW50cyBhcmUgbWFwcGVkIGZyb20gdGhlXG4gICAgLy8gcGFyYW1ldGVycyByZWNlaXZlZFxuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICBjYXNlICdQYWdlLmZyYW1lU3RvcHBlZExvYWRpbmcnOlxuICAgICAgICBldmVudE5hbWVzLnB1c2goJ1BhZ2UuZnJhbWVOYXZpZ2F0ZWQnKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSAnUGFnZS5mcmFtZU5hdmlnYXRlZCc6XG4gICAgICAgIGFyZ3MgPSBbYCcke21ldGhvZH0nIGV2ZW50YF07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVGltZWxpbmUuZXZlbnRSZWNvcmRlZCc6XG4gICAgICAgIGFyZ3MgPSBbcGFyYW1zIHx8IHBhcmFtcy5yZWNvcmRdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0NvbnNvbGUubWVzc2FnZUFkZGVkJzpcbiAgICAgICAgYXJncyA9IFtwYXJhbXMubWVzc2FnZV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUnVudGltZS5leGVjdXRpb25Db250ZXh0Q3JlYXRlZCc6XG4gICAgICAgIGFyZ3MgPSBbcGFyYW1zLmNvbnRleHRdO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIHBhc3NcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKF8uc3RhcnRzV2l0aChtZXRob2QsICdOZXR3b3JrLicpKSB7XG4gICAgICAvLyBhZ2dyZWdhdGUgTmV0d29yayBldmVudHMsIGFuZCBhZGQgb3JpZ2luYWwgbWV0aG9kIG5hbWUgdG8gdGhlIGFyZ3VtZW50c1xuICAgICAgZXZlbnROYW1lcy5wdXNoKCdOZXR3b3JrRXZlbnQnKTtcbiAgICAgIGFyZ3MucHVzaChtZXRob2QpO1xuICAgIH1cbiAgICBpZiAoXy5zdGFydHNXaXRoKG1ldGhvZCwgJ0NvbnNvbGUuJykpIHtcbiAgICAgIC8vIGFnZ3JlZ2F0ZSBOZXR3b3JrIGV2ZW50cywgYW5kIGFkZCBvcmlnaW5hbCBtZXRob2QgbmFtZSB0byB0aGUgYXJndW1lbnRzXG4gICAgICBldmVudE5hbWVzLnB1c2goJ0NvbnNvbGVFdmVudCcpO1xuICAgICAgYXJncy5wdXNoKG1ldGhvZCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIGV2ZW50TmFtZXMpIHtcbiAgICAgIHRoaXMuZW1pdChuYW1lLCBlcnJvciwgLi4uYXJncyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlRGF0YU1lc3NhZ2UgKHBsaXN0KSB7XG4gICAgY29uc3QgZGF0YUtleSA9IHRoaXMucGFyc2VEYXRhS2V5KHBsaXN0KTtcbiAgICBsZXQgbXNnSWQgPSAoZGF0YUtleS5pZCB8fCAnJykudG9TdHJpbmcoKTtcbiAgICBsZXQgcmVzdWx0ID0gZGF0YUtleS5yZXN1bHQ7XG5cbiAgICBsZXQgbWV0aG9kID0gZGF0YUtleS5tZXRob2Q7XG4gICAgbGV0IHBhcmFtcztcblxuICAgIGlmIChtZXRob2QgPT09ICdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcpIHtcbiAgICAgIC8vIHRoaXMgaXMgaW4gcmVzcG9uc2UgdG8gYSBgX3JwY19mb3J3YXJkU29ja2V0U2V0dXA6YCBjYWxsXG4gICAgICAvLyB0YXJnZXRJbmZvOiB7IHRhcmdldElkOiAncGFnZS0xJywgdHlwZTogJ3BhZ2UnIH1cbiAgICAgIGNvbnN0IGFwcCA9IHBsaXN0Ll9fYXJndW1lbnQuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuICAgICAgY29uc3QgdGFyZ2V0SW5mbyA9IGRhdGFLZXkucGFyYW1zLnRhcmdldEluZm87XG4gICAgICB0aGlzLmVtaXQoJ1RhcmdldC50YXJnZXRDcmVhdGVkJywgbnVsbCwgYXBwLCB0YXJnZXRJbmZvKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ1RhcmdldC5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCcpIHtcbiAgICAgIGNvbnN0IGFwcCA9IHBsaXN0Ll9fYXJndW1lbnQuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuICAgICAgY29uc3Qgb2xkVGFyZ2V0SWQgPSBkYXRhS2V5LnBhcmFtcy5vbGRUYXJnZXRJZDtcbiAgICAgIGNvbnN0IG5ld1RhcmdldElkID0gZGF0YUtleS5wYXJhbXMubmV3VGFyZ2V0SWQ7XG4gICAgICB0aGlzLmVtaXQoJ1RhcmdldC5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCcsIG51bGwsIGFwcCwgb2xkVGFyZ2V0SWQsIG5ld1RhcmdldElkKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ1RhcmdldC50YXJnZXREZXN0cm95ZWQnKSB7XG4gICAgICBjb25zdCBhcHAgPSBwbGlzdC5fX2FyZ3VtZW50LldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleTtcbiAgICAgIGNvbnN0IHRhcmdldEluZm8gPSBkYXRhS2V5LnBhcmFtcy50YXJnZXRJbmZvIHx8IHt0YXJnZXRJZDogZGF0YUtleS5wYXJhbXMudGFyZ2V0SWR9O1xuICAgICAgdGhpcy5lbWl0KCdUYXJnZXQudGFyZ2V0RGVzdHJveWVkJywgbnVsbCwgYXBwLCB0YXJnZXRJbmZvKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGFLZXkuZXJyb3IgJiYgdGhpcy5pc1RhcmdldEJhc2VkKSB7XG4gICAgICBpZiAoZGF0YUtleS5tZXRob2QgIT09ICdUYXJnZXQuZGlzcGF0Y2hNZXNzYWdlRnJvbVRhcmdldCcpIHtcbiAgICAgICAgLy8gdGhpcyBzb3J0IG9mIG1lc3NhZ2UsIGF0IHRoaXMgcG9pbnQsIGlzIGp1c3QgYW4gYWNrbm93bGVkZ2VtZW50XG4gICAgICAgIC8vIHRoYXQgdGhlIG9yaWdpbmFsIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gYXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhIFRhcmdldC1iYXNlZCBtZXNzYWdlIHdyYXBwaW5nIGEgcHJvdG9jb2wgbWVzc2FnZVxuICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICB0cnkge1xuICAgICAgICBtZXNzYWdlID0gSlNPTi5wYXJzZShkYXRhS2V5LnBhcmFtcy5tZXNzYWdlKTtcbiAgICAgICAgbXNnSWQgPSBtZXNzYWdlLmlkO1xuICAgICAgICBtZXRob2QgPSBtZXNzYWdlLm1ldGhvZDtcbiAgICAgICAgcmVzdWx0ID0gbWVzc2FnZS5yZXN1bHQgfHwgbWVzc2FnZTtcbiAgICAgICAgcGFyYW1zID0gcmVzdWx0LnBhcmFtcztcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBpZiB0aGlzIGhhcHBlbnMgdGhlbiBzb21lIGFzcGVjdCBvZiB0aGUgcHJvdG9jb2wgaXMgbWlzc2luZyB0byB1c1xuICAgICAgICAvLyBzbyBwcmludCB0aGUgZW50aXJlIG1lc3NhZ2UgdG8gZ2V0IHZpc2liaWl0eSBpbnRvIHdoYXQgaXMgZ29pbmcgb25cbiAgICAgICAgbG9nLmVycm9yKGBVbmV4cGVjdGVkIG1lc3NhZ2UgZm9ybWF0IGZyb20gV2ViIEluc3BlY3RvcjpgKTtcbiAgICAgICAgdGhpcy53YXJuKHV0aWwuanNvblN0cmluZ2lmeShwbGlzdCkpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtcyA9IGRhdGFLZXkucGFyYW1zO1xuICAgIH1cblxuICAgIC8vIHdlIGNhbiBnZXQgYW4gZXJyb3IsIG9yIHdlIGNhbiBnZXQgYSByZXNwb25zZSB0aGF0IGlzIGFuIGVycm9yXG4gICAgbGV0IGVycm9yID0gZGF0YUtleS5lcnJvciB8fCBudWxsO1xuICAgIGlmIChyZXN1bHQ/Lndhc1Rocm93bikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IChyZXN1bHQ/LnJlc3VsdD8udmFsdWUgfHwgcmVzdWx0Py5yZXN1bHQ/LmRlc2NyaXB0aW9uKVxuICAgICAgICA/IChyZXN1bHQ/LnJlc3VsdD8udmFsdWUgfHwgcmVzdWx0Py5yZXN1bHQ/LmRlc2NyaXB0aW9uKVxuICAgICAgICA6ICdFcnJvciBvY2N1cnJlZCBpbiBoYW5kbGluZyBkYXRhIG1lc3NhZ2UnO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5kaXNwYXRjaERhdGFNZXNzYWdlKG1zZ0lkLCBtZXRob2QsIHBhcmFtcywgcmVzdWx0LCBlcnJvcik7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6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
@@ -5,15 +5,15 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.RESPONSE_LOG_LENGTH = void 0;
8
9
  exports.appInfoFromDict = appInfoFromDict;
9
- exports.pageArrayFromDict = pageArrayFromDict;
10
+ exports.checkParams = checkParams;
11
+ exports.convertResult = convertResult;
12
+ exports.deferredPromise = deferredPromise;
10
13
  exports.getDebuggerAppKey = getDebuggerAppKey;
11
14
  exports.getPossibleDebuggerAppKeys = getPossibleDebuggerAppKeys;
12
- exports.checkParams = checkParams;
15
+ exports.pageArrayFromDict = pageArrayFromDict;
13
16
  exports.simpleStringify = simpleStringify;
14
- exports.deferredPromise = deferredPromise;
15
- exports.convertResult = convertResult;
16
- exports.RESPONSE_LOG_LENGTH = void 0;
17
17
 
18
18
  require("source-map-support/register");
19
19
 
@@ -23,9 +23,9 @@ var _lodash = _interopRequireDefault(require("lodash"));
23
23
 
24
24
  var _bluebird = _interopRequireDefault(require("bluebird"));
25
25
 
26
- var _appiumBaseDriver = require("appium-base-driver");
26
+ var _baseDriver = require("@appium/base-driver");
27
27
 
28
- var _appiumSupport = require("appium-support");
28
+ var _support = require("@appium/support");
29
29
 
30
30
  const WEB_CONTENT_BUNDLE_ID = 'com.apple.WebKit.WebContent';
31
31
  const WEB_CONTENT_PROCESS_BUNDLE_ID = 'process-com.apple.WebKit.WebContent';
@@ -165,7 +165,7 @@ function checkParams(params) {
165
165
  const errors = _lodash.default.toPairs(params).filter(([, value]) => _lodash.default.isNil(value)).map(([param]) => param);
166
166
 
167
167
  if (errors.length) {
168
- throw new Error(`Missing ${_appiumSupport.util.pluralize('parameter', errors.length)}: ${errors.join(', ')}`);
168
+ throw new Error(`Missing ${_support.util.pluralize('parameter', errors.length)}: ${errors.join(', ')}`);
169
169
  }
170
170
  }
171
171
 
@@ -211,7 +211,7 @@ function convertResult(res) {
211
211
  }
212
212
 
213
213
  if (res.status && res.status !== 0) {
214
- throw (0, _appiumBaseDriver.errorFromMJSONWPStatusCode)(res.status, res.value.message || res.value);
214
+ throw (0, _baseDriver.errorFromMJSONWPStatusCode)(res.status, res.value.message || res.value);
215
215
  }
216
216
 
217
217
  const value = _lodash.default.has(res, 'value') ? res.value : res;
@@ -226,4 +226,4 @@ function convertResult(res) {
226
226
  }require('source-map-support').install();
227
227
 
228
228
 
229
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJXRUJfQ09OVEVOVF9CVU5ETEVfSUQiLCJXRUJfQ09OVEVOVF9QUk9DRVNTX0JVTkRMRV9JRCIsIlNBRkFSSV9WSUVXX1BST0NFU1NfQlVORExFX0lEIiwiU0FGQVJJX1ZJRVdfQlVORExFX0lEIiwiV0lMRENBUkRfQlVORExFX0lEIiwiSU5BQ1RJVkVfQVBQX0NPREUiLCJBQ0NFUFRFRF9QQUdFX1RZUEVTIiwiUkVTUE9OU0VfTE9HX0xFTkdUSCIsImFwcEluZm9Gcm9tRGljdCIsImRpY3QiLCJpZCIsIldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsImlzUHJveHkiLCJfIiwiaXNTdHJpbmciLCJXSVJJc0FwcGxpY2F0aW9uUHJveHlLZXkiLCJ0b0xvd2VyQ2FzZSIsImlzQXV0b21hdGlvbkVuYWJsZWQiLCJXSVJSZW1vdGVBdXRvbWF0aW9uRW5hYmxlZEtleSIsImhhcyIsIldJUkF1dG9tYXRpb25BdmFpbGFiaWxpdHlLZXkiLCJlbnRyeSIsIm5hbWUiLCJXSVJBcHBsaWNhdGlvbk5hbWVLZXkiLCJidW5kbGVJZCIsIldJUkFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcktleSIsImhvc3RJZCIsIldJUkhvc3RBcHBsaWNhdGlvbklkZW50aWZpZXJLZXkiLCJpc0FjdGl2ZSIsIldJUklzQXBwbGljYXRpb25BY3RpdmVLZXkiLCJwYWdlQXJyYXlGcm9tRGljdCIsInBhZ2VEaWN0IiwibmV3UGFnZUFycmF5IiwidmFsdWVzIiwiaXNVbmRlZmluZWQiLCJXSVJUeXBlS2V5IiwiaW5jbHVkZXMiLCJwdXNoIiwiV0lSUGFnZUlkZW50aWZpZXJLZXkiLCJ0aXRsZSIsIldJUlRpdGxlS2V5IiwidXJsIiwiV0lSVVJMS2V5IiwiaXNLZXkiLCJXSVJDb25uZWN0aW9uSWRlbnRpZmllcktleSIsImdldERlYnVnZ2VyQXBwS2V5IiwiYXBwRGljdCIsImFwcElkIiwia2V5IiwiZGF0YSIsInRvUGFpcnMiLCJsb2ciLCJkZWJ1ZyIsInByb3h5QXBwSWQiLCJhcHBJZEZvckJ1bmRsZSIsImVuZHNXaXRoIiwiZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMiLCJidW5kbGVJZHMiLCJwcm94aWVkQXBwSWRzIiwicG9zc2libGVCdW5kbGVJZHMiLCJ1bmlxIiwiam9pbiIsImNoZWNrUGFyYW1zIiwicGFyYW1zIiwiZXJyb3JzIiwiZmlsdGVyIiwidmFsdWUiLCJpc05pbCIsIm1hcCIsInBhcmFtIiwibGVuZ3RoIiwiRXJyb3IiLCJ1dGlsIiwicGx1cmFsaXplIiwic2ltcGxlU3RyaW5naWZ5IiwibXVsdGlsaW5lIiwiSlNPTiIsInN0cmluZ2lmeSIsImNsZWFuVmFsdWUiLCJjbG9uZSIsInByb3BlcnR5IiwiZGVmZXJyZWRQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInByb21pc2UiLCJCIiwicmVzIiwicmVqIiwiY29udmVydFJlc3VsdCIsInRydW5jYXRlIiwicGFyc2UiLCJlcnIiLCJpc09iamVjdCIsInN0YXR1cyIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxxQkFBcUIsR0FBRyw2QkFBOUI7QUFDQSxNQUFNQyw2QkFBNkIsR0FBRyxxQ0FBdEM7QUFDQSxNQUFNQyw2QkFBNkIsR0FBRywyQkFBdEM7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyw2QkFBOUI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxHQUEzQjtBQUVBLE1BQU1DLGlCQUFpQixHQUFHLENBQTFCO0FBR0EsTUFBTUMsbUJBQW1CLEdBQUcsQ0FDMUIsWUFEMEIsRUFFMUIsZ0JBRjBCLEVBRzFCLGFBSDBCLENBQTVCO0FBTUEsTUFBTUMsbUJBQW1CLEdBQUcsR0FBNUI7OztBQU1BLFNBQVNDLGVBQVQsQ0FBMEJDLElBQTFCLEVBQWdDO0FBQzlCLFFBQU1DLEVBQUUsR0FBR0QsSUFBSSxDQUFDRSwyQkFBaEI7QUFDQSxRQUFNQyxPQUFPLEdBQUdDLGdCQUFF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QyxPQUFwQyxFQUE2QyxVQUE3QyxDQUF2QixFQUFpRjtBQUMvRSxhQUFPZCxLQUFLLENBQUNjLFFBQUQsQ0FBWjtBQUNEO0FBQ0Y7O0FBQ0QsU0FBT2QsS0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcblxuXG5jb25zdCBXRUJfQ09OVEVOVF9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50JztcbmNvbnN0IFdFQl9DT05URU5UX1BST0NFU1NfQlVORExFX0lEID0gJ3Byb2Nlc3MtY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50JztcbmNvbnN0IFNBRkFSSV9WSUVXX1BST0NFU1NfQlVORExFX0lEID0gJ3Byb2Nlc3MtU2FmYXJpVmlld1NlcnZpY2UnO1xuY29uc3QgU0FGQVJJX1ZJRVdfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5TYWZhcmlWaWV3U2VydmljZSc7XG5jb25zdCBXSUxEQ0FSRF9CVU5ETEVfSUQgPSAnKic7XG5cbmNvbnN0IElOQUNUSVZFX0FQUF9DT0RFID0gMDtcblxuLy8gdmFsdWVzIGZvciB0aGUgcGFnZSBgV0lSVHlwZUtleWAgZW50cnlcbmNvbnN0IEFDQ0VQVEVEX1BBR0VfVFlQRVMgPSBbXG4gICdXSVJUeXBlV2ViJywgLy8gdXAgdG8gaU9TIDExLjNcbiAgJ1dJUlR5cGVXZWJQYWdlJywgLy8gaU9TIDExLjRcbiAgJ1dJUlR5cGVQYWdlJywgLy8gaU9TIDExLjQgd2Vidmlld1xuXTtcblxuY29uc3QgUkVTUE9OU0VfTE9HX0xFTkdUSCA9IDEwMDtcblxuLypcbiAqIFRha2VzIGEgZGljdGlvbmFyeSBmcm9tIHRoZSByZW1vdGUgZGVidWdnZXIgYW5kIG1ha2VzIGEgbW9yZSBtYW5hZ2VhYmxlXG4gKiBkaWN0aW9uYXJ5IHdob3NlIGtleXMgYXJlIHVuZGVyc3RhbmRhYmxlXG4gKi9cbmZ1bmN0aW9uIGFwcEluZm9Gcm9tRGljdCAoZGljdCkge1xuICBjb25zdCBpZCA9IGRpY3QuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuICBjb25zdCBpc1Byb3h5ID0gXy5pc1N0cmluZyhkaWN0LldJUklzQXBwbGljYXRpb25Qcm94eUtleSlcbiAgICA/IGRpY3QuV0lSSXNBcHBsaWNhdGlvblByb3h5S2V5LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJ1xuICAgIDogZGljdC5XSVJJc0FwcGxpY2F0aW9uUHJveHlLZXk7XG4gIC8vIGF1dG9tYXRpb24gZW5hYmxlZCBjYW4gYmUgZWl0aGVyIGZyb20gdGhlIGtleXNcbiAgLy8gICAtIFdJUlJlbW90ZUF1dG9tYXRpb25FbmFibGVkS2V5IChib29sZWFuKVxuICAvLyAgIC0gV0lSQXV0b21hdGlvbkF2YWlsYWJpbGl0eUtleSAoc3RyaW5nIG9yIGJvb2xlYW4pXG4gIGxldCBpc0F1dG9tYXRpb25FbmFibGVkID0gISFkaWN0LldJUlJlbW90ZUF1dG9tYXRpb25FbmFibGVkS2V5O1xuICBpZiAoXy5oYXMoZGljdCwgJ1dJUkF1dG9tYXRpb25BdmFpbGFiaWxpdHlLZXknKSkge1xuICAgIGlmIChfLmlzU3RyaW5nKGRpY3QuV0lSQXV0b21hdGlvbkF2YWlsYWJpbGl0eUtleSkpIHtcbiAgICAgIGlzQXV0b21hdGlvbkVuYWJsZWQgPSBkaWN0LldJUkF1dG9tYXRpb25BdmFpbGFiaWxpdHlLZXkgPT09ICdXSVJBdXRvbWF0aW9uQXZhaWxhYmlsaXR5VW5rbm93bidcbiAgICAgICAgPyAnVW5rbm93bidcbiAgICAgICAgOiBkaWN0LldJUkF1dG9tYXRpb25BdmFpbGFiaWxpdHlLZXkgPT09ICdXSVJBdXRvbWF0aW9uQXZhaWxhYmlsaXR5QXZhaWxhYmxlJztcbiAgICB9IGVsc2Uge1xuICAgICAgaXNBdXRvbWF0aW9uRW5hYmxlZCA9ICEhZGljdC5XSVJBdXRvbWF0aW9uQXZhaWxhYmlsaXR5S2V5O1xuICAgIH1cbiAgfVxuICBjb25zdCBlbnRyeSA9IHtcbiAgICBpZCxcbiAgICBpc1Byb3h5LFxuICAgIG5hbWU6IGRpY3QuV0lSQXBwbGljYXRpb25OYW1lS2V5LFxuICAgIGJ1bmRsZUlkOiBkaWN0LldJUkFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcktleSxcbiAgICBob3N0SWQ6IGRpY3QuV0lSSG9zdEFwcGxpY2F0aW9uSWRlbnRpZmllcktleSxcbiAgICBpc0FjdGl2ZTogZGljdC5XSVJJc0FwcGxpY2F0aW9uQWN0aXZlS2V5ICE9PSBJTkFDVElWRV9BUFBfQ09ERSxcbiAgICBpc0F1dG9tYXRpb25FbmFibGVkLFxuICB9O1xuXG4gIHJldHVybiBbaWQsIGVudHJ5XTtcbn1cblxuLypcbiAqIFRha2UgYSBkaWN0aW9uYXJ5IGZyb20gdGhlIHJlbW90ZSBkZWJ1Z2dlciBhbmQgbWFrZXMgYSBtb3JlIG1hbmFnZWFibGVcbiAqIGRpY3Rpb25hcnkgb2YgcGFnZXMgYXZhaWxhYmxlLlxuICovXG5mdW5jdGlvbiBwYWdlQXJyYXlGcm9tRGljdCAocGFnZURpY3QpIHtcbiAgaWYgKHBhZ2VEaWN0LmlkKSB7XG4gICAgLy8gdGhlIHBhZ2UgaXMgYWxyZWFkeSB0cmFuc2xhdGVkLCBzbyB3cmFwIGluIGFuIGFycmF5IGFuZCBwYXNzIGJhY2tcbiAgICByZXR1cm4gW3BhZ2VEaWN0XTtcbiAgfVxuICBsZXQgbmV3UGFnZUFycmF5ID0gW107XG4gIGZvciAoY29uc3QgZGljdCBvZiBfLnZhbHVlcyhwYWdlRGljdCkpIHtcbiAgICAvLyBjb3VudCBvbmx5IFdJUlR5cGVXZWIgcGFnZXMgYW5kIGlnbm9yZSBhbGwgb3RoZXJzIChXSVJUeXBlSmF2YVNjcmlwdCBldGMpXG4gICAgaWYgKF8uaXNVbmRlZmluZWQoZGljdC5XSVJUeXBlS2V5KSB8fCBBQ0NFUFRFRF9QQUdFX1RZUEVTLmluY2x1ZGVzKGRpY3QuV0lSVHlwZUtleSkpIHtcbiAgICAgIG5ld1BhZ2VBcnJheS5wdXNoKHtcbiAgICAgICAgaWQ6IGRpY3QuV0lSUGFnZUlkZW50aWZpZXJLZXksXG4gICAgICAgIHRpdGxlOiBkaWN0LldJUlRpdGxlS2V5LFxuICAgICAgICB1cmw6IGRpY3QuV0lSVVJMS2V5LFxuICAgICAgICBpc0tleTogIV8uaXNVbmRlZmluZWQoZGljdC5XSVJDb25uZWN0aW9uSWRlbnRpZmllcktleSksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld1BhZ2VBcnJheTtcbn1cblxuLypcbiAqIEdpdmVuIGEgYnVuZGxlIGlkLCBmaW5kcyB0aGUgY29ycmVjdCByZW1vdGUgZGVidWdnZXIgYXBwIHRoYXQgaXNcbiAqIGNvbm5lY3RlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVidWdnZXJBcHBLZXkgKGJ1bmRsZUlkLCBhcHBEaWN0KSB7XG4gIGxldCBhcHBJZDtcbiAgZm9yIChjb25zdCBba2V5LCBkYXRhXSBvZiBfLnRvUGFpcnMoYXBwRGljdCkpIHtcbiAgICBpZiAoZGF0YS5idW5kbGVJZCA9PT0gYnVuZGxlSWQpIHtcbiAgICAgIGFwcElkID0ga2V5O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIC8vIG5vdyB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgcGljayBhIHByb3h5IGZvciB0aGlzIGluc3RlYWRcbiAgaWYgKGFwcElkKSB7XG4gICAgbG9nLmRlYnVnKGBGb3VuZCBhcHAgaWQga2V5ICcke2FwcElkfScgZm9yIGJ1bmRsZSAnJHtidW5kbGVJZH0nYCk7XG4gICAgbGV0IHByb3h5QXBwSWQ7XG4gICAgZm9yIChjb25zdCBba2V5LCBkYXRhXSBvZiBfLnRvUGFpcnMoYXBwRGljdCkpIHtcbiAgICAgIGlmIChkYXRhLmlzUHJveHkgJiYgZGF0YS5ob3N0SWQgPT09IGFwcElkKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgc2VwYXJhdGUgYnVuZGxlSWQgJyR7ZGF0YS5idW5kbGVJZH0nIGAgK1xuICAgICAgICAgICAgICAgICAgYGFjdGluZyBhcyBwcm94eSBmb3IgJyR7YnVuZGxlSWR9Jywgd2l0aCBhcHAgaWQgJyR7a2V5fSdgKTtcbiAgICAgICAgLy8gc2V0IHRoZSBhcHAgaWQuLi4gdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZCwgc28ganVzdCBrZWVwIHJlLWFzc2lnbmluZ1xuICAgICAgICBwcm94eUFwcElkID0ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJveHlBcHBJZCkge1xuICAgICAgYXBwSWQgPSBwcm94eUFwcElkO1xuICAgICAgbG9nLmRlYnVnKGBVc2luZyBwcm94aWVkIGFwcCBpZCAnJHthcHBJZH0nYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFwcElkO1xufVxuXG5mdW5jdGlvbiBhcHBJZEZvckJ1bmRsZSAoYnVuZGxlSWQsIGFwcERpY3QpIHtcbiAgbGV0IGFwcElkO1xuICBmb3IgKGNvbnN0IFtrZXksIGRhdGFdIG9mIF8udG9QYWlycyhhcHBEaWN0KSkge1xuICAgIGlmIChkYXRhLmJ1bmRsZUlkLmVuZHNXaXRoKGJ1bmRsZUlkKSkge1xuICAgICAgYXBwSWQgPSBrZXk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBpZiBub3RoaW5nIGlzIGZvdW5kLCB0cnkgdG8gZ2V0IHRoZSBnZW5lcmljIGFwcFxuICBpZiAoIWFwcElkICYmIGJ1bmRsZUlkICE9PSBXRUJfQ09OVEVOVF9CVU5ETEVfSUQpIHtcbiAgICByZXR1cm4gYXBwSWRGb3JCdW5kbGUoV0VCX0NPTlRFTlRfQlVORExFX0lELCBhcHBEaWN0KTtcbiAgfVxuXG4gIHJldHVybiBhcHBJZDtcbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMgKGJ1bmRsZUlkcywgYXBwRGljdCkge1xuICBsZXQgcHJveGllZEFwcElkcyA9IFtdO1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIHBvc3NpYmxlIGJ1bmRsZSBpZGVudGlmaWVyc1xuICBjb25zdCBwb3NzaWJsZUJ1bmRsZUlkcyA9IF8udW5pcShbXG4gICAgV0VCX0NPTlRFTlRfQlVORExFX0lELFxuICAgIFdFQl9DT05URU5UX1BST0NFU1NfQlVORExFX0lELFxuICAgIFNBRkFSSV9WSUVXX1BST0NFU1NfQlVORExFX0lELFxuICAgIFNBRkFSSV9WSUVXX0JVTkRMRV9JRCxcbiAgICBXSUxEQ0FSRF9CVU5ETEVfSUQsXG4gICAgLi4uYnVuZGxlSWRzLFxuICBdKTtcbiAgbG9nLmRlYnVnKGBDaGVja2luZyBmb3IgYnVuZGxlIGlkZW50aWZpZXJzOiAke3Bvc3NpYmxlQnVuZGxlSWRzLmpvaW4oJywgJyl9YCk7XG4gIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgcG9zc2libGVCdW5kbGVJZHMpIHtcbiAgICBjb25zdCBhcHBJZCA9IGFwcElkRm9yQnVuZGxlKGJ1bmRsZUlkLCBhcHBEaWN0KTtcblxuICAgIC8vIG5vdyB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgcGljayBhIHByb3h5IGZvciB0aGlzIGluc3RlYWRcbiAgICBpZiAoYXBwSWQpIHtcbiAgICAgIHByb3hpZWRBcHBJZHMucHVzaChhcHBJZCk7XG4gICAgICBsb2cuZGVidWcoYEZvdW5kIGFwcCBpZCBrZXkgJyR7YXBwSWR9JyBmb3IgYnVuZGxlICcke2J1bmRsZUlkfSdgKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgZGF0YV0gb2YgXy50b1BhaXJzKGFwcERpY3QpKSB7XG4gICAgICAgIGlmIChkYXRhLmlzUHJveHkgJiYgZGF0YS5ob3N0SWQgPT09IGFwcElkKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBGb3VuZCBzZXBhcmF0ZSBidW5kbGVJZCAnJHtkYXRhLmJ1bmRsZUlkfScgYCArXG4gICAgICAgICAgICAgICAgICAgIGBhY3RpbmcgYXMgcHJveHkgZm9yICcke2J1bmRsZUlkfScsIHdpdGggYXBwIGlkICcke2tleX0nYCk7XG4gICAgICAgICAgcHJveGllZEFwcElkcy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gXy51bmlxKHByb3hpZWRBcHBJZHMpO1xufVxuXG5mdW5jdGlvbiBjaGVja1BhcmFtcyAocGFyYW1zKSB7XG4gIC8vIGNoZWNrIGlmIGFsbCBwYXJhbWV0ZXJzIGhhdmUgYSB2YWx1ZVxuICBjb25zdCBlcnJvcnMgPSBfLnRvUGFpcnMocGFyYW1zKVxuICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gXy5pc05pbCh2YWx1ZSkpXG4gICAgLm1hcCgoW3BhcmFtXSkgPT4gcGFyYW0pO1xuICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyAke3V0aWwucGx1cmFsaXplKCdwYXJhbWV0ZXInLCBlcnJvcnMubGVuZ3RoKX06ICR7ZXJyb3JzLmpvaW4oJywgJyl9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2ltcGxlU3RyaW5naWZ5ICh2YWx1ZSwgbXVsdGlsaW5lID0gZmFsc2UpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH1cblxuICAvLyB3ZSBnZXQgYmFjayBvYmplY3RzIHNvbWV0aW1lcyB3aXRoIHN0cmluZyB2ZXJzaW9ucyBvZiBmdW5jdGlvbnNcbiAgLy8gd2hpY2ggbXVkZHkgdGhlIGxvZ3NcbiAgbGV0IGNsZWFuVmFsdWUgPSBfLmNsb25lKHZhbHVlKTtcbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBbJ2NlaWwnLCAnY2xvbmUnLCAnZmxvb3InLCAncm91bmQnLCAnc2NhbGUnLCAndG9TdHJpbmcnXSkge1xuICAgIGRlbGV0ZSBjbGVhblZhbHVlW3Byb3BlcnR5XTtcbiAgfVxuICByZXR1cm4gbXVsdGlsaW5lID8gSlNPTi5zdHJpbmdpZnkoY2xlYW5WYWx1ZSwgbnVsbCwgMikgOiBKU09OLnN0cmluZ2lmeShjbGVhblZhbHVlKTtcbn1cblxuZnVuY3Rpb24gZGVmZXJyZWRQcm9taXNlICgpIHtcbiAgLy8gaHR0cDovL2JsdWViaXJkanMuY29tL2RvY3MvYXBpL2RlZmVycmVkLW1pZ3JhdGlvbi5odG1sXG4gIGxldCByZXNvbHZlO1xuICBsZXQgcmVqZWN0O1xuICBjb25zdCBwcm9taXNlID0gbmV3IEIoKHJlcywgcmVqKSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJvbWlzZS9wYXJhbS1uYW1lc1xuICAgIHJlc29sdmUgPSByZXM7XG4gICAgcmVqZWN0ID0gcmVqO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBwcm9taXNlLFxuICAgIHJlc29sdmUsXG4gICAgcmVqZWN0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSZXN1bHQgKHJlcykge1xuICBpZiAoXy5pc1VuZGVmaW5lZChyZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgbm90IGdldCBPSyByZXN1bHQgZnJvbSByZW1vdGUgZGVidWdnZXIuIFJlc3VsdCB3YXM6ICR7Xy50cnVuY2F0ZShzaW1wbGVTdHJpbmdpZnkocmVzKSwge2xlbmd0aDogUkVTUE9OU0VfTE9HX0xFTkdUSH0pfWApO1xuICB9IGVsc2UgaWYgKF8uaXNTdHJpbmcocmVzKSkge1xuICAgIHRyeSB7XG4gICAgICByZXMgPSBKU09OLnBhcnNlKHJlcyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyB3ZSBtaWdodCBnZXQgYSBzZXJpYWxpemVkIG9iamVjdCwgYnV0IHdlIG1pZ2h0IG5vdFxuICAgICAgLy8gaWYgd2UgZ2V0IGhlcmUsIGl0IGlzIGp1c3QgYSB2YWx1ZVxuICAgIH1cbiAgfSBlbHNlIGlmICghXy5pc09iamVjdChyZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZXN1bHQgaGFzIHVuZXhwZWN0ZWQgdHlwZTogKCR7dHlwZW9mIHJlc30pLmApO1xuICB9XG5cbiAgaWYgKHJlcy5zdGF0dXMgJiYgcmVzLnN0YXR1cyAhPT0gMCkge1xuICAgIC8vIHdlIGdvdCBzb21lIGZvcm0gb2YgZXJyb3IuXG4gICAgdGhyb3cgZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUocmVzLnN0YXR1cywgcmVzLnZhbHVlLm1lc3NhZ2UgfHwgcmVzLnZhbHVlKTtcbiAgfVxuXG4gIC8vIHdpdGggZWl0aGVyIGhhdmUgYW4gb2JqZWN0IHdpdGggYSBgdmFsdWVgIHByb3BlcnR5IChldmVuIGlmIGBudWxsYCksXG4gIC8vIG9yIGEgcGxhaW4gb2JqZWN0XG4gIGNvbnN0IHZhbHVlID0gXy5oYXMocmVzLCAndmFsdWUnKSA/IHJlcy52YWx1ZSA6IHJlcztcblxuICAvLyBnZXQgcmlkIG9mIG5vaXN5IGZ1bmN0aW9ucyBvbiBvYmplY3RzXG4gIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgWydjZWlsJywgJ2Nsb25lJywgJ2Zsb29yJywgJ3JvdW5kJywgJ3NjYWxlJywgJ3RvU3RyaW5nJ10pIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtwcm9wZXJ0eV07XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IHtcbiAgYXBwSW5mb0Zyb21EaWN0LCBwYWdlQXJyYXlGcm9tRGljdCwgZ2V0RGVidWdnZXJBcHBLZXksXG4gIGdldFBvc3NpYmxlRGVidWdnZXJBcHBLZXlzLCBjaGVja1BhcmFtcywgc2ltcGxlU3RyaW5naWZ5LCBkZWZlcnJlZFByb21pc2UsXG4gIGNvbnZlcnRSZXN1bHQsIFJFU1BPTlNFX0xPR19MRU5HVEgsXG59O1xuIl0sImZpbGUiOiJsaWIvdXRpbHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
229
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3V0aWxzLmpzIiwibmFtZXMiOlsiV0VCX0NPTlRFTlRfQlVORExFX0lEIiwiV0VCX0NPTlRFTlRfUFJPQ0VTU19CVU5ETEVfSUQiLCJTQUZBUklfVklFV19QUk9DRVNTX0JVTkRMRV9JRCIsIlNBRkFSSV9WSUVXX0JVTkRMRV9JRCIsIldJTERDQVJEX0JVTkRMRV9JRCIsIklOQUNUSVZFX0FQUF9DT0RFIiwiQUNDRVBURURfUEFHRV9UWVBFUyIsIlJFU1BPTlNFX0xPR19MRU5HVEgiLCJhcHBJbmZvRnJvbURpY3QiLCJkaWN0IiwiaWQiLCJXSVJBcHBsaWNhdGlvbklkZW50aWZpZXJLZXkiLCJpc1Byb3h5IiwiXyIsImlzU3RyaW5nIiwiV0lSSXNBcHBsaWNhdGlvblByb3h5S2V5IiwidG9Mb3dlckNhc2UiLCJpc0F1dG9tYXRpb25FbmFibGVkIiwiV0lSUmVtb3RlQXV0b21hdGlvbkVuYWJsZWRLZXkiLCJoYXMiLCJXSVJBdXRvbWF0aW9uQXZhaWxhYmlsaXR5S2V5IiwiZW50cnkiLCJuYW1lIiwiV0lSQXBwbGljYXRpb25OYW1lS2V5IiwiYnVuZGxlSWQiLCJXSVJBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXJLZXkiLCJob3N0SWQiLCJXSVJIb3N0QXBwbGljYXRpb25JZGVudGlmaWVyS2V5IiwiaXNBY3RpdmUiLCJXSVJJc0FwcGxpY2F0aW9uQWN0aXZlS2V5IiwicGFnZUFycmF5RnJvbURpY3QiLCJwYWdlRGljdCIsIm5ld1BhZ2VBcnJheSIsInZhbHVlcyIsImlzVW5kZWZpbmVkIiwiV0lSVHlwZUtleSIsImluY2x1ZGVzIiwicHVzaCIsIldJUlBhZ2VJZGVudGlmaWVyS2V5IiwidGl0bGUiLCJXSVJUaXRsZUtleSIsInVybCIsIldJUlVSTEtleSIsImlzS2V5IiwiV0lSQ29ubmVjdGlvbklkZW50aWZpZXJLZXkiLCJnZXREZWJ1Z2dlckFwcEtleSIsImFwcERpY3QiLCJhcHBJZCIsImtleSIsImRhdGEiLCJ0b1BhaXJzIiwibG9nIiwiZGVidWciLCJwcm94eUFwcElkIiwiYXBwSWRGb3JCdW5kbGUiLCJlbmRzV2l0aCIsImdldFBvc3NpYmxlRGVidWdnZXJBcHBLZXlzIiwiYnVuZGxlSWRzIiwicHJveGllZEFwcElkcyIsInBvc3NpYmxlQnVuZGxlSWRzIiwidW5pcSIsImpvaW4iLCJjaGVja1BhcmFtcyIsInBhcmFtcyIsImVycm9ycyIsImZpbHRlciIsInZhbHVlIiwiaXNOaWwiLCJtYXAiLCJwYXJhbSIsImxlbmd0aCIsIkVycm9yIiwidXRpbCIsInBsdXJhbGl6ZSIsInNpbXBsZVN0cmluZ2lmeSIsIm11bHRpbGluZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJjbGVhblZhbHVlIiwiY2xvbmUiLCJwcm9wZXJ0eSIsImRlZmVycmVkUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9taXNlIiwiQiIsInJlcyIsInJlaiIsImNvbnZlcnRSZXN1bHQiLCJ0cnVuY2F0ZSIsInBhcnNlIiwiZXJyIiwiaXNPYmplY3QiLCJzdGF0dXMiLCJtZXNzYWdlIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBXRUJfQ09OVEVOVF9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50JztcbmNvbnN0IFdFQl9DT05URU5UX1BST0NFU1NfQlVORExFX0lEID0gJ3Byb2Nlc3MtY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50JztcbmNvbnN0IFNBRkFSSV9WSUVXX1BST0NFU1NfQlVORExFX0lEID0gJ3Byb2Nlc3MtU2FmYXJpVmlld1NlcnZpY2UnO1xuY29uc3QgU0FGQVJJX1ZJRVdfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5TYWZhcmlWaWV3U2VydmljZSc7XG5jb25zdCBXSUxEQ0FSRF9CVU5ETEVfSUQgPSAnKic7XG5cbmNvbnN0IElOQUNUSVZFX0FQUF9DT0RFID0gMDtcblxuLy8gdmFsdWVzIGZvciB0aGUgcGFnZSBgV0lSVHlwZUtleWAgZW50cnlcbmNvbnN0IEFDQ0VQVEVEX1BBR0VfVFlQRVMgPSBbXG4gICdXSVJUeXBlV2ViJywgLy8gdXAgdG8gaU9TIDExLjNcbiAgJ1dJUlR5cGVXZWJQYWdlJywgLy8gaU9TIDExLjRcbiAgJ1dJUlR5cGVQYWdlJywgLy8gaU9TIDExLjQgd2Vidmlld1xuXTtcblxuY29uc3QgUkVTUE9OU0VfTE9HX0xFTkdUSCA9IDEwMDtcblxuLypcbiAqIFRha2VzIGEgZGljdGlvbmFyeSBmcm9tIHRoZSByZW1vdGUgZGVidWdnZXIgYW5kIG1ha2VzIGEgbW9yZSBtYW5hZ2VhYmxlXG4gKiBkaWN0aW9uYXJ5IHdob3NlIGtleXMgYXJlIHVuZGVyc3RhbmRhYmxlXG4gKi9cbmZ1bmN0aW9uIGFwcEluZm9Gcm9tRGljdCAoZGljdCkge1xuICBjb25zdCBpZCA9IGRpY3QuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuICBjb25zdCBpc1Byb3h5ID0gXy5pc1N0cmluZyhkaWN0LldJUklzQXBwbGljYXRpb25Qcm94eUtleSlcbiAgICA/IGRpY3QuV0lSSXNBcHBsaWNhdGlvblByb3h5S2V5LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJ1xuICAgIDogZGljdC5XSVJJc0FwcGxpY2F0aW9uUHJveHlLZXk7XG4gIC8vIGF1dG9tYXRpb24gZW5hYmxlZCBjYW4gYmUgZWl0aGVyIGZyb20gdGhlIGtleXNcbiAgLy8gICAtIFdJUlJlbW90ZUF1dG9tYXRpb25FbmFibGVkS2V5IChib29sZWFuKVxuICAvLyAgIC0gV0lSQXV0b21hdGlvbkF2YWlsYWJpbGl0eUtleSAoc3RyaW5nIG9yIGJvb2xlYW4pXG4gIGxldCBpc0F1dG9tYXRpb25FbmFibGVkID0gISFkaWN0LldJUlJlbW90ZUF1dG9tYXRpb25FbmFibGVkS2V5O1xuICBpZiAoXy5oYXMoZGljdCwgJ1dJUkF1dG9tYXRpb25BdmFpbGFiaWxpdHlLZXknKSkge1xuICAgIGlmIChfLmlzU3RyaW5nKGRpY3QuV0lSQXV0b21hdGlvbkF2YWlsYWJpbGl0eUtleSkpIHtcbiAgICAgIGlzQXV0b21hdGlvbkVuYWJsZWQgPSBkaWN0LldJUkF1dG9tYXRpb25BdmFpbGFiaWxpdHlLZXkgPT09ICdXSVJBdXRvbWF0aW9uQXZhaWxhYmlsaXR5VW5rbm93bidcbiAgICAgICAgPyAnVW5rbm93bidcbiAgICAgICAgOiBkaWN0LldJUkF1dG9tYXRpb25BdmFpbGFiaWxpdHlLZXkgPT09ICdXSVJBdXRvbWF0aW9uQXZhaWxhYmlsaXR5QXZhaWxhYmxlJztcbiAgICB9IGVsc2Uge1xuICAgICAgaXNBdXRvbWF0aW9uRW5hYmxlZCA9ICEhZGljdC5XSVJBdXRvbWF0aW9uQXZhaWxhYmlsaXR5S2V5O1xuICAgIH1cbiAgfVxuICBjb25zdCBlbnRyeSA9IHtcbiAgICBpZCxcbiAgICBpc1Byb3h5LFxuICAgIG5hbWU6IGRpY3QuV0lSQXBwbGljYXRpb25OYW1lS2V5LFxuICAgIGJ1bmRsZUlkOiBkaWN0LldJUkFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcktleSxcbiAgICBob3N0SWQ6IGRpY3QuV0lSSG9zdEFwcGxpY2F0aW9uSWRlbnRpZmllcktleSxcbiAgICBpc0FjdGl2ZTogZGljdC5XSVJJc0FwcGxpY2F0aW9uQWN0aXZlS2V5ICE9PSBJTkFDVElWRV9BUFBfQ09ERSxcbiAgICBpc0F1dG9tYXRpb25FbmFibGVkLFxuICB9O1xuXG4gIHJldHVybiBbaWQsIGVudHJ5XTtcbn1cblxuLypcbiAqIFRha2UgYSBkaWN0aW9uYXJ5IGZyb20gdGhlIHJlbW90ZSBkZWJ1Z2dlciBhbmQgbWFrZXMgYSBtb3JlIG1hbmFnZWFibGVcbiAqIGRpY3Rpb25hcnkgb2YgcGFnZXMgYXZhaWxhYmxlLlxuICovXG5mdW5jdGlvbiBwYWdlQXJyYXlGcm9tRGljdCAocGFnZURpY3QpIHtcbiAgaWYgKHBhZ2VEaWN0LmlkKSB7XG4gICAgLy8gdGhlIHBhZ2UgaXMgYWxyZWFkeSB0cmFuc2xhdGVkLCBzbyB3cmFwIGluIGFuIGFycmF5IGFuZCBwYXNzIGJhY2tcbiAgICByZXR1cm4gW3BhZ2VEaWN0XTtcbiAgfVxuICBsZXQgbmV3UGFnZUFycmF5ID0gW107XG4gIGZvciAoY29uc3QgZGljdCBvZiBfLnZhbHVlcyhwYWdlRGljdCkpIHtcbiAgICAvLyBjb3VudCBvbmx5IFdJUlR5cGVXZWIgcGFnZXMgYW5kIGlnbm9yZSBhbGwgb3RoZXJzIChXSVJUeXBlSmF2YVNjcmlwdCBldGMpXG4gICAgaWYgKF8uaXNVbmRlZmluZWQoZGljdC5XSVJUeXBlS2V5KSB8fCBBQ0NFUFRFRF9QQUdFX1RZUEVTLmluY2x1ZGVzKGRpY3QuV0lSVHlwZUtleSkpIHtcbiAgICAgIG5ld1BhZ2VBcnJheS5wdXNoKHtcbiAgICAgICAgaWQ6IGRpY3QuV0lSUGFnZUlkZW50aWZpZXJLZXksXG4gICAgICAgIHRpdGxlOiBkaWN0LldJUlRpdGxlS2V5LFxuICAgICAgICB1cmw6IGRpY3QuV0lSVVJMS2V5LFxuICAgICAgICBpc0tleTogIV8uaXNVbmRlZmluZWQoZGljdC5XSVJDb25uZWN0aW9uSWRlbnRpZmllcktleSksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld1BhZ2VBcnJheTtcbn1cblxuLypcbiAqIEdpdmVuIGEgYnVuZGxlIGlkLCBmaW5kcyB0aGUgY29ycmVjdCByZW1vdGUgZGVidWdnZXIgYXBwIHRoYXQgaXNcbiAqIGNvbm5lY3RlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVidWdnZXJBcHBLZXkgKGJ1bmRsZUlkLCBhcHBEaWN0KSB7XG4gIGxldCBhcHBJZDtcbiAgZm9yIChjb25zdCBba2V5LCBkYXRhXSBvZiBfLnRvUGFpcnMoYXBwRGljdCkpIHtcbiAgICBpZiAoZGF0YS5idW5kbGVJZCA9PT0gYnVuZGxlSWQpIHtcbiAgICAgIGFwcElkID0ga2V5O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIC8vIG5vdyB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgcGljayBhIHByb3h5IGZvciB0aGlzIGluc3RlYWRcbiAgaWYgKGFwcElkKSB7XG4gICAgbG9nLmRlYnVnKGBGb3VuZCBhcHAgaWQga2V5ICcke2FwcElkfScgZm9yIGJ1bmRsZSAnJHtidW5kbGVJZH0nYCk7XG4gICAgbGV0IHByb3h5QXBwSWQ7XG4gICAgZm9yIChjb25zdCBba2V5LCBkYXRhXSBvZiBfLnRvUGFpcnMoYXBwRGljdCkpIHtcbiAgICAgIGlmIChkYXRhLmlzUHJveHkgJiYgZGF0YS5ob3N0SWQgPT09IGFwcElkKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgc2VwYXJhdGUgYnVuZGxlSWQgJyR7ZGF0YS5idW5kbGVJZH0nIGAgK1xuICAgICAgICAgICAgICAgICAgYGFjdGluZyBhcyBwcm94eSBmb3IgJyR7YnVuZGxlSWR9Jywgd2l0aCBhcHAgaWQgJyR7a2V5fSdgKTtcbiAgICAgICAgLy8gc2V0IHRoZSBhcHAgaWQuLi4gdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZCwgc28ganVzdCBrZWVwIHJlLWFzc2lnbmluZ1xuICAgICAgICBwcm94eUFwcElkID0ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJveHlBcHBJZCkge1xuICAgICAgYXBwSWQgPSBwcm94eUFwcElkO1xuICAgICAgbG9nLmRlYnVnKGBVc2luZyBwcm94aWVkIGFwcCBpZCAnJHthcHBJZH0nYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFwcElkO1xufVxuXG5mdW5jdGlvbiBhcHBJZEZvckJ1bmRsZSAoYnVuZGxlSWQsIGFwcERpY3QpIHtcbiAgbGV0IGFwcElkO1xuICBmb3IgKGNvbnN0IFtrZXksIGRhdGFdIG9mIF8udG9QYWlycyhhcHBEaWN0KSkge1xuICAgIGlmIChkYXRhLmJ1bmRsZUlkLmVuZHNXaXRoKGJ1bmRsZUlkKSkge1xuICAgICAgYXBwSWQgPSBrZXk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBpZiBub3RoaW5nIGlzIGZvdW5kLCB0cnkgdG8gZ2V0IHRoZSBnZW5lcmljIGFwcFxuICBpZiAoIWFwcElkICYmIGJ1bmRsZUlkICE9PSBXRUJfQ09OVEVOVF9CVU5ETEVfSUQpIHtcbiAgICByZXR1cm4gYXBwSWRGb3JCdW5kbGUoV0VCX0NPTlRFTlRfQlVORExFX0lELCBhcHBEaWN0KTtcbiAgfVxuXG4gIHJldHVybiBhcHBJZDtcbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVEZWJ1Z2dlckFwcEtleXMgKGJ1bmRsZUlkcywgYXBwRGljdCkge1xuICBsZXQgcHJveGllZEFwcElkcyA9IFtdO1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIHBvc3NpYmxlIGJ1bmRsZSBpZGVudGlmaWVyc1xuICBjb25zdCBwb3NzaWJsZUJ1bmRsZUlkcyA9IF8udW5pcShbXG4gICAgV0VCX0NPTlRFTlRfQlVORExFX0lELFxuICAgIFdFQl9DT05URU5UX1BST0NFU1NfQlVORExFX0lELFxuICAgIFNBRkFSSV9WSUVXX1BST0NFU1NfQlVORExFX0lELFxuICAgIFNBRkFSSV9WSUVXX0JVTkRMRV9JRCxcbiAgICBXSUxEQ0FSRF9CVU5ETEVfSUQsXG4gICAgLi4uYnVuZGxlSWRzLFxuICBdKTtcbiAgbG9nLmRlYnVnKGBDaGVja2luZyBmb3IgYnVuZGxlIGlkZW50aWZpZXJzOiAke3Bvc3NpYmxlQnVuZGxlSWRzLmpvaW4oJywgJyl9YCk7XG4gIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgcG9zc2libGVCdW5kbGVJZHMpIHtcbiAgICBjb25zdCBhcHBJZCA9IGFwcElkRm9yQnVuZGxlKGJ1bmRsZUlkLCBhcHBEaWN0KTtcblxuICAgIC8vIG5vdyB3ZSBuZWVkIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgcGljayBhIHByb3h5IGZvciB0aGlzIGluc3RlYWRcbiAgICBpZiAoYXBwSWQpIHtcbiAgICAgIHByb3hpZWRBcHBJZHMucHVzaChhcHBJZCk7XG4gICAgICBsb2cuZGVidWcoYEZvdW5kIGFwcCBpZCBrZXkgJyR7YXBwSWR9JyBmb3IgYnVuZGxlICcke2J1bmRsZUlkfSdgKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgZGF0YV0gb2YgXy50b1BhaXJzKGFwcERpY3QpKSB7XG4gICAgICAgIGlmIChkYXRhLmlzUHJveHkgJiYgZGF0YS5ob3N0SWQgPT09IGFwcElkKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBGb3VuZCBzZXBhcmF0ZSBidW5kbGVJZCAnJHtkYXRhLmJ1bmRsZUlkfScgYCArXG4gICAgICAgICAgICAgICAgICAgIGBhY3RpbmcgYXMgcHJveHkgZm9yICcke2J1bmRsZUlkfScsIHdpdGggYXBwIGlkICcke2tleX0nYCk7XG4gICAgICAgICAgcHJveGllZEFwcElkcy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gXy51bmlxKHByb3hpZWRBcHBJZHMpO1xufVxuXG5mdW5jdGlvbiBjaGVja1BhcmFtcyAocGFyYW1zKSB7XG4gIC8vIGNoZWNrIGlmIGFsbCBwYXJhbWV0ZXJzIGhhdmUgYSB2YWx1ZVxuICBjb25zdCBlcnJvcnMgPSBfLnRvUGFpcnMocGFyYW1zKVxuICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gXy5pc05pbCh2YWx1ZSkpXG4gICAgLm1hcCgoW3BhcmFtXSkgPT4gcGFyYW0pO1xuICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyAke3V0aWwucGx1cmFsaXplKCdwYXJhbWV0ZXInLCBlcnJvcnMubGVuZ3RoKX06ICR7ZXJyb3JzLmpvaW4oJywgJyl9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2ltcGxlU3RyaW5naWZ5ICh2YWx1ZSwgbXVsdGlsaW5lID0gZmFsc2UpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH1cblxuICAvLyB3ZSBnZXQgYmFjayBvYmplY3RzIHNvbWV0aW1lcyB3aXRoIHN0cmluZyB2ZXJzaW9ucyBvZiBmdW5jdGlvbnNcbiAgLy8gd2hpY2ggbXVkZHkgdGhlIGxvZ3NcbiAgbGV0IGNsZWFuVmFsdWUgPSBfLmNsb25lKHZhbHVlKTtcbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBbJ2NlaWwnLCAnY2xvbmUnLCAnZmxvb3InLCAncm91bmQnLCAnc2NhbGUnLCAndG9TdHJpbmcnXSkge1xuICAgIGRlbGV0ZSBjbGVhblZhbHVlW3Byb3BlcnR5XTtcbiAgfVxuICByZXR1cm4gbXVsdGlsaW5lID8gSlNPTi5zdHJpbmdpZnkoY2xlYW5WYWx1ZSwgbnVsbCwgMikgOiBKU09OLnN0cmluZ2lmeShjbGVhblZhbHVlKTtcbn1cblxuZnVuY3Rpb24gZGVmZXJyZWRQcm9taXNlICgpIHtcbiAgLy8gaHR0cDovL2JsdWViaXJkanMuY29tL2RvY3MvYXBpL2RlZmVycmVkLW1pZ3JhdGlvbi5odG1sXG4gIGxldCByZXNvbHZlO1xuICBsZXQgcmVqZWN0O1xuICBjb25zdCBwcm9taXNlID0gbmV3IEIoKHJlcywgcmVqKSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJvbWlzZS9wYXJhbS1uYW1lc1xuICAgIHJlc29sdmUgPSByZXM7XG4gICAgcmVqZWN0ID0gcmVqO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBwcm9taXNlLFxuICAgIHJlc29sdmUsXG4gICAgcmVqZWN0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSZXN1bHQgKHJlcykge1xuICBpZiAoXy5pc1VuZGVmaW5lZChyZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgbm90IGdldCBPSyByZXN1bHQgZnJvbSByZW1vdGUgZGVidWdnZXIuIFJlc3VsdCB3YXM6ICR7Xy50cnVuY2F0ZShzaW1wbGVTdHJpbmdpZnkocmVzKSwge2xlbmd0aDogUkVTUE9OU0VfTE9HX0xFTkdUSH0pfWApO1xuICB9IGVsc2UgaWYgKF8uaXNTdHJpbmcocmVzKSkge1xuICAgIHRyeSB7XG4gICAgICByZXMgPSBKU09OLnBhcnNlKHJlcyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyB3ZSBtaWdodCBnZXQgYSBzZXJpYWxpemVkIG9iamVjdCwgYnV0IHdlIG1pZ2h0IG5vdFxuICAgICAgLy8gaWYgd2UgZ2V0IGhlcmUsIGl0IGlzIGp1c3QgYSB2YWx1ZVxuICAgIH1cbiAgfSBlbHNlIGlmICghXy5pc09iamVjdChyZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZXN1bHQgaGFzIHVuZXhwZWN0ZWQgdHlwZTogKCR7dHlwZW9mIHJlc30pLmApO1xuICB9XG5cbiAgaWYgKHJlcy5zdGF0dXMgJiYgcmVzLnN0YXR1cyAhPT0gMCkge1xuICAgIC8vIHdlIGdvdCBzb21lIGZvcm0gb2YgZXJyb3IuXG4gICAgdGhyb3cgZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUocmVzLnN0YXR1cywgcmVzLnZhbHVlLm1lc3NhZ2UgfHwgcmVzLnZhbHVlKTtcbiAgfVxuXG4gIC8vIHdpdGggZWl0aGVyIGhhdmUgYW4gb2JqZWN0IHdpdGggYSBgdmFsdWVgIHByb3BlcnR5IChldmVuIGlmIGBudWxsYCksXG4gIC8vIG9yIGEgcGxhaW4gb2JqZWN0XG4gIGNvbnN0IHZhbHVlID0gXy5oYXMocmVzLCAndmFsdWUnKSA/IHJlcy52YWx1ZSA6IHJlcztcblxuICAvLyBnZXQgcmlkIG9mIG5vaXN5IGZ1bmN0aW9ucyBvbiBvYmplY3RzXG4gIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgWydjZWlsJywgJ2Nsb25lJywgJ2Zsb29yJywgJ3JvdW5kJywgJ3NjYWxlJywgJ3RvU3RyaW5nJ10pIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtwcm9wZXJ0eV07XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IHtcbiAgYXBwSW5mb0Zyb21EaWN0LCBwYWdlQXJyYXlGcm9tRGljdCwgZ2V0RGVidWdnZXJBcHBLZXksXG4gIGdldFBvc3NpYmxlRGVidWdnZXJBcHBLZXlzLCBjaGVja1BhcmFtcywgc2ltcGxlU3RyaW5naWZ5LCBkZWZlcnJlZFByb21pc2UsXG4gIGNvbnZlcnRSZXN1bHQsIFJFU1BPTlNFX0xPR19MRU5HVEgsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEscUJBQXFCLEdBQUcsNkJBQTlCO0FBQ0EsTUFBTUMsNkJBQTZCLEdBQUcscUNBQXRDO0FBQ0EsTUFBTUMsNkJBQTZCLEdBQUcsMkJBQXRDO0FBQ0EsTUFBTUMscUJBQXFCLEdBQUcsNkJBQTlCO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsR0FBM0I7QUFFQSxNQUFNQyxpQkFBaUIsR0FBRyxDQUExQjtBQUdBLE1BQU1DLG1CQUFtQixHQUFHLENBQzFCLFlBRDBCLEVBRTFCLGdCQUYwQixFQUcxQixhQUgwQixDQUE1QjtBQU1BLE1BQU1DLG1CQUFtQixHQUFHLEdBQTVCOzs7QUFNQSxTQUFTQyxlQUFULENBQTBCQyxJQUExQixFQUFnQztFQUM5QixNQUFNQyxFQUFFLEdBQUdELElBQUksQ0FBQ0UsMkJBQWhCO0VBQ0EsTUFBTUMsT0FBTyxHQUFHQyxnQkFBRUMsUUFBRixDQUFXTCxJQUFJLENBQUNNLHdCQUFoQixJQUNaTixJQUFJLENBQUNNLHdCQUFMLENBQThCQyxXQUE5QixPQUFnRCxNQURwQyxHQUVaUCxJQUFJLENBQUNNLHdCQUZUO0VBTUEsSUFBSUUsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDUixJQUFJLENBQUNTLDZCQUFqQzs7RUFDQSxJQUFJTCxnQkFBRU0sR0FBRixDQUFNVixJQUFOLEVBQVksOEJBQVosQ0FBSixFQUFpRDtJQUMvQyxJQUFJSSxnQkFBRUMsUUFBRixDQUFXTCxJQUFJLENBQUNXLDRCQUFoQixDQUFKLEVBQW1EO01BQ2pESCxtQkFBbUIsR0FBR1IsSUFBSSxDQUFDVyw0QkFBTCxLQUFzQyxrQ0FBdEMsR0FDbEIsU0FEa0IsR0FFbEJYLElBQUksQ0FBQ1csNEJBQUwsS0FBc0Msb0NBRjFDO0lBR0QsQ0FKRCxNQUlPO01BQ0xILG1CQUFtQixHQUFHLENBQUMsQ0FBQ1IsSUFBSSxDQUFDVyw0QkFBN0I7SUFDRDtFQUNGOztFQUNELE1BQU1DLEtBQUssR0FBRztJQUNaWCxFQURZO0lBRVpFLE9BRlk7SUFHWlUsSUFBSSxFQUFFYixJQUFJLENBQUNjLHFCQUhDO0lBSVpDLFFBQVEsRUFBRWYsSUFBSSxDQUFDZ0IsaUNBSkg7SUFLWkMsTUFBTSxFQUFFakIsSUFBSSxDQUFDa0IsK0JBTEQ7SUFNWkMsUUFBUSxFQUFFbkIsSUFBSSxDQUFDb0IseUJBQUwsS0FBbUN4QixpQkFOakM7SUFPWlk7RUFQWSxDQUFkO0VBVUEsT0FBTyxDQUFDUCxFQUFELEVBQUtXLEtBQUwsQ0FBUDtBQUNEOztBQU1ELFNBQVNTLGlCQUFULENBQTRCQyxRQUE1QixFQUFzQztFQUNwQyxJQUFJQSxRQUFRLENBQUNyQixFQUFiLEVBQWlCO0lBRWYsT0FBTyxDQUFDcUIsUUFBRCxDQUFQO0VBQ0Q7O0VBQ0QsSUFBSUMsWUFBWSxHQUFHLEVBQW5COztFQUNBLEtBQUssTUFBTXZCLElBQVgsSUFBbUJJLGdCQUFFb0IsTUFBRixDQUFTRixRQUFULENBQW5CLEVBQXVDO0lBRXJDLElBQUlsQixnQkFBRXFCLFdBQUYsQ0FBY3pCLElBQUksQ0FBQzBCLFVBQW5CLEtBQWtDN0IsbUJBQW1CLENBQUM4QixRQUFwQixDQUE2QjNCLElBQUksQ0FBQzBCLFVBQWxDLENBQXRDLEVBQXFGO01BQ25GSCxZQUFZLENBQUNLLElBQWIsQ0FBa0I7UUFDaEIzQixFQUFFLEVBQUVELElBQUksQ0FBQzZCLG9CQURPO1FBRWhCQyxLQUFLLEVBQUU5QixJQUFJLENBQUMrQixXQUZJO1FBR2hCQyxHQUFHLEVBQUVoQyxJQUFJLENBQUNpQyxTQUhNO1FBSWhCQyxLQUFLLEVBQUUsQ0FBQzlCLGdCQUFFcUIsV0FBRixDQUFjekIsSUFBSSxDQUFDbUMsMEJBQW5CO01BSlEsQ0FBbEI7SUFNRDtFQUNGOztFQUNELE9BQU9aLFlBQVA7QUFDRDs7QUFNRCxTQUFTYSxpQkFBVCxDQUE0QnJCLFFBQTVCLEVBQXNDc0IsT0FBdEMsRUFBK0M7RUFDN0MsSUFBSUMsS0FBSjs7RUFDQSxLQUFLLE1BQU0sQ0FBQ0MsR0FBRCxFQUFNQyxJQUFOLENBQVgsSUFBMEJwQyxnQkFBRXFDLE9BQUYsQ0FBVUosT0FBVixDQUExQixFQUE4QztJQUM1QyxJQUFJRyxJQUFJLENBQUN6QixRQUFMLEtBQWtCQSxRQUF0QixFQUFnQztNQUM5QnVCLEtBQUssR0FBR0MsR0FBUjtNQUNBO0lBQ0Q7RUFDRjs7RUFFRCxJQUFJRCxLQUFKLEVBQVc7SUFDVEksZ0JBQUlDLEtBQUosQ0FBVyxxQkFBb0JMLEtBQU0saUJBQWdCdkIsUUFBUyxHQUE5RDs7SUFDQSxJQUFJNkIsVUFBSjs7SUFDQSxLQUFLLE1BQU0sQ0FBQ0wsR0FBRCxFQUFNQyxJQUFOLENBQVgsSUFBMEJwQyxnQkFBRXFDLE9BQUYsQ0FBVUosT0FBVixDQUExQixFQUE4QztNQUM1QyxJQUFJRyxJQUFJLENBQUNyQyxPQUFMLElBQWdCcUMsSUFBSSxDQUFDdkIsTUFBTCxLQUFnQnFCLEtBQXBDLEVBQTJDO1FBQ3pDSSxnQkFBSUMsS0FBSixDQUFXLDRCQUEyQkgsSUFBSSxDQUFDekIsUUFBUyxJQUExQyxHQUNDLHdCQUF1QkEsUUFBUyxtQkFBa0J3QixHQUFJLEdBRGpFOztRQUdBSyxVQUFVLEdBQUdMLEdBQWI7TUFDRDtJQUNGOztJQUNELElBQUlLLFVBQUosRUFBZ0I7TUFDZE4sS0FBSyxHQUFHTSxVQUFSOztNQUNBRixnQkFBSUMsS0FBSixDQUFXLHlCQUF3QkwsS0FBTSxHQUF6QztJQUNEO0VBQ0Y7O0VBRUQsT0FBT0EsS0FBUDtBQUNEOztBQUVELFNBQVNPLGNBQVQsQ0FBeUI5QixRQUF6QixFQUFtQ3NCLE9BQW5DLEVBQTRDO0VBQzFDLElBQUlDLEtBQUo7O0VBQ0EsS0FBSyxNQUFNLENBQUNDLEdBQUQsRUFBTUMsSUFBTixDQUFYLElBQTBCcEMsZ0JBQUVxQyxPQUFGLENBQVVKLE9BQVYsQ0FBMUIsRUFBOEM7SUFDNUMsSUFBSUcsSUFBSSxDQUFDekIsUUFBTCxDQUFjK0IsUUFBZCxDQUF1Qi9CLFFBQXZCLENBQUosRUFBc0M7TUFDcEN1QixLQUFLLEdBQUdDLEdBQVI7TUFDQTtJQUNEO0VBQ0Y7O0VBR0QsSUFBSSxDQUFDRCxLQUFELElBQVV2QixRQUFRLEtBQUt4QixxQkFBM0IsRUFBa0Q7SUFDaEQsT0FBT3NELGNBQWMsQ0FBQ3RELHFCQUFELEVBQXdCOEMsT0FBeEIsQ0FBckI7RUFDRDs7RUFFRCxPQUFPQyxLQUFQO0FBQ0Q7O0FBRUQsU0FBU1MsMEJBQVQsQ0FBcUNDLFNBQXJDLEVBQWdEWCxPQUFoRCxFQUF5RDtFQUN2RCxJQUFJWSxhQUFhLEdBQUcsRUFBcEI7O0VBR0EsTUFBTUMsaUJBQWlCLEdBQUc5QyxnQkFBRStDLElBQUYsQ0FBTyxDQUMvQjVELHFCQUQrQixFQUUvQkMsNkJBRitCLEVBRy9CQyw2QkFIK0IsRUFJL0JDLHFCQUorQixFQUsvQkMsa0JBTCtCLEVBTS9CLEdBQUdxRCxTQU40QixDQUFQLENBQTFCOztFQVFBTixnQkFBSUMsS0FBSixDQUFXLG9DQUFtQ08saUJBQWlCLENBQUNFLElBQWxCLENBQXVCLElBQXZCLENBQTZCLEVBQTNFOztFQUNBLEtBQUssTUFBTXJDLFFBQVgsSUFBdUJtQyxpQkFBdkIsRUFBMEM7SUFDeEMsTUFBTVosS0FBSyxHQUFHTyxjQUFjLENBQUM5QixRQUFELEVBQVdzQixPQUFYLENBQTVCOztJQUdBLElBQUlDLEtBQUosRUFBVztNQUNUVyxhQUFhLENBQUNyQixJQUFkLENBQW1CVSxLQUFuQjs7TUFDQUksZ0JBQUlDLEtBQUosQ0FBVyxxQkFBb0JMLEtBQU0saUJBQWdCdkIsUUFBUyxHQUE5RDs7TUFDQSxLQUFLLE1BQU0sQ0FBQ3dCLEdBQUQsRUFBTUMsSUFBTixDQUFYLElBQTBCcEMsZ0JBQUVxQyxPQUFGLENBQVVKLE9BQVYsQ0FBMUIsRUFBOEM7UUFDNUMsSUFBSUcsSUFBSSxDQUFDckMsT0FBTCxJQUFnQnFDLElBQUksQ0FBQ3ZCLE1BQUwsS0FBZ0JxQixLQUFwQyxFQUEyQztVQUN6Q0ksZ0JBQUlDLEtBQUosQ0FBVyw0QkFBMkJILElBQUksQ0FBQ3pCLFFBQVMsSUFBMUMsR0FDQyx3QkFBdUJBLFFBQVMsbUJBQWtCd0IsR0FBSSxHQURqRTs7VUFFQVUsYUFBYSxDQUFDckIsSUFBZCxDQUFtQlcsR0FBbkI7UUFDRDtNQUNGO0lBQ0Y7RUFDRjs7RUFFRCxPQUFPbkMsZ0JBQUUrQyxJQUFGLENBQU9GLGFBQVAsQ0FBUDtBQUNEOztBQUVELFNBQVNJLFdBQVQsQ0FBc0JDLE1BQXRCLEVBQThCO0VBRTVCLE1BQU1DLE1BQU0sR0FBR25ELGdCQUFFcUMsT0FBRixDQUFVYSxNQUFWLEVBQ1pFLE1BRFksQ0FDTCxDQUFDLEdBQUdDLEtBQUgsQ0FBRCxLQUFlckQsZ0JBQUVzRCxLQUFGLENBQVFELEtBQVIsQ0FEVixFQUVaRSxHQUZZLENBRVIsQ0FBQyxDQUFDQyxLQUFELENBQUQsS0FBYUEsS0FGTCxDQUFmOztFQUdBLElBQUlMLE1BQU0sQ0FBQ00sTUFBWCxFQUFtQjtJQUNqQixNQUFNLElBQUlDLEtBQUosQ0FBVyxXQUFVQyxjQUFLQyxTQUFMLENBQWUsV0FBZixFQUE0QlQsTUFBTSxDQUFDTSxNQUFuQyxDQUEyQyxLQUFJTixNQUFNLENBQUNILElBQVAsQ0FBWSxJQUFaLENBQWtCLEVBQXRGLENBQU47RUFDRDtBQUNGOztBQUVELFNBQVNhLGVBQVQsQ0FBMEJSLEtBQTFCLEVBQWlDUyxTQUFTLEdBQUcsS0FBN0MsRUFBb0Q7RUFDbEQsSUFBSSxDQUFDVCxLQUFMLEVBQVk7SUFDVixPQUFPVSxJQUFJLENBQUNDLFNBQUwsQ0FBZVgsS0FBZixDQUFQO0VBQ0Q7O0VBSUQsSUFBSVksVUFBVSxHQUFHakUsZ0JBQUVrRSxLQUFGLENBQVFiLEtBQVIsQ0FBakI7O0VBQ0EsS0FBSyxNQUFNYyxRQUFYLElBQXVCLENBQUMsTUFBRCxFQUFTLE9BQVQsRUFBa0IsT0FBbEIsRUFBMkIsT0FBM0IsRUFBb0MsT0FBcEMsRUFBNkMsVUFBN0MsQ0FBdkIsRUFBaUY7SUFDL0UsT0FBT0YsVUFBVSxDQUFDRSxRQUFELENBQWpCO0VBQ0Q7O0VBQ0QsT0FBT0wsU0FBUyxHQUFHQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUMsVUFBZixFQUEyQixJQUEzQixFQUFpQyxDQUFqQyxDQUFILEdBQXlDRixJQUFJLENBQUNDLFNBQUwsQ0FBZUMsVUFBZixDQUF6RDtBQUNEOztBQUVELFNBQVNHLGVBQVQsR0FBNEI7RUFFMUIsSUFBSUMsT0FBSjtFQUNBLElBQUlDLE1BQUo7RUFDQSxNQUFNQyxPQUFPLEdBQUcsSUFBSUMsaUJBQUosQ0FBTSxDQUFDQyxHQUFELEVBQU1DLEdBQU4sS0FBYztJQUNsQ0wsT0FBTyxHQUFHSSxHQUFWO0lBQ0FILE1BQU0sR0FBR0ksR0FBVDtFQUNELENBSGUsQ0FBaEI7RUFJQSxPQUFPO0lBQ0xILE9BREs7SUFFTEYsT0FGSztJQUdMQztFQUhLLENBQVA7QUFLRDs7QUFFRCxTQUFTSyxhQUFULENBQXdCRixHQUF4QixFQUE2QjtFQUMzQixJQUFJekUsZ0JBQUVxQixXQUFGLENBQWNvRCxHQUFkLENBQUosRUFBd0I7SUFDdEIsTUFBTSxJQUFJZixLQUFKLENBQVcsMkRBQTBEMUQsZ0JBQUU0RSxRQUFGLENBQVdmLGVBQWUsQ0FBQ1ksR0FBRCxDQUExQixFQUFpQztNQUFDaEIsTUFBTSxFQUFFL0Q7SUFBVCxDQUFqQyxDQUFnRSxFQUFySSxDQUFOO0VBQ0QsQ0FGRCxNQUVPLElBQUlNLGdCQUFFQyxRQUFGLENBQVd3RSxHQUFYLENBQUosRUFBcUI7SUFDMUIsSUFBSTtNQUNGQSxHQUFHLEdBQUdWLElBQUksQ0FBQ2MsS0FBTCxDQUFXSixHQUFYLENBQU47SUFDRCxDQUZELENBRUUsT0FBT0ssR0FBUCxFQUFZLENBR2I7RUFDRixDQVBNLE1BT0EsSUFBSSxDQUFDOUUsZ0JBQUUrRSxRQUFGLENBQVdOLEdBQVgsQ0FBTCxFQUFzQjtJQUMzQixNQUFNLElBQUlmLEtBQUosQ0FBVyxnQ0FBK0IsT0FBT2UsR0FBSSxJQUFyRCxDQUFOO0VBQ0Q7O0VBRUQsSUFBSUEsR0FBRyxDQUFDTyxNQUFKLElBQWNQLEdBQUcsQ0FBQ08sTUFBSixLQUFlLENBQWpDLEVBQW9DO0lBRWxDLE1BQU0sNENBQTJCUCxHQUFHLENBQUNPLE1BQS9CLEVBQXVDUCxHQUFHLENBQUNwQixLQUFKLENBQVU0QixPQUFWLElBQXFCUixHQUFHLENBQUNwQixLQUFoRSxDQUFOO0VBQ0Q7O0VBSUQsTUFBTUEsS0FBSyxHQUFHckQsZ0JBQUVNLEdBQUYsQ0FBTW1FLEdBQU4sRUFBVyxPQUFYLElBQXNCQSxHQUFHLENBQUNwQixLQUExQixHQUFrQ29CLEdBQWhEOztFQUdBLElBQUl6RSxnQkFBRStFLFFBQUYsQ0FBVzFCLEtBQVgsQ0FBSixFQUF1QjtJQUNyQixLQUFLLE1BQU1jLFFBQVgsSUFBdUIsQ0FBQyxNQUFELEVBQVMsT0FBVCxFQUFrQixPQUFsQixFQUEyQixPQUEzQixFQUFvQyxPQUFwQyxFQUE2QyxVQUE3QyxDQUF2QixFQUFpRjtNQUMvRSxPQUFPZCxLQUFLLENBQUNjLFFBQUQsQ0FBWjtJQUNEO0VBQ0Y7O0VBQ0QsT0FBT2QsS0FBUDtBQUNEIn0=
package/lib/atoms.js CHANGED
@@ -1,4 +1,4 @@
1
- import { fs } from 'appium-support';
1
+ import { fs } from '@appium/support';
2
2
  import path from 'path';
3
3
  import _ from 'lodash';
4
4
  import log from './logger';
package/lib/logger.js CHANGED
@@ -1,4 +1,4 @@
1
- import { logger } from 'appium-support';
1
+ import { logger } from '@appium/support';
2
2
 
3
3
 
4
4
  const log = logger.getLogger('RemoteDebugger');
@@ -2,7 +2,7 @@ import log from '../logger';
2
2
  import { appInfoFromDict, pageArrayFromDict, getDebuggerAppKey,
3
3
  getPossibleDebuggerAppKeys, simpleStringify, deferredPromise } from '../utils';
4
4
  import events from './events';
5
- import { timing } from 'appium-support';
5
+ import { timing } from '@appium/support';
6
6
  import { retryInterval, waitForCondition } from 'asyncbox';
7
7
  import _ from 'lodash';
8
8