appium-xcuitest-driver 3.56.0 → 3.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -389,10 +389,6 @@ extensions.connectToRemoteDebugger = async function connectToRemoteDebugger() {
389
389
  };
390
390
 
391
391
  extensions.listWebFrames = async function listWebFrames(useUrl = true) {
392
- if (!this.opts.bundleId) {
393
- _logger.default.errorAndThrow('Cannot enter web frame without a bundle ID');
394
- }
395
-
396
392
  useUrl = useUrl && !this.isRealDevice() && !!this.getCurrentUrl();
397
393
 
398
394
  _logger.default.debug(`Selecting by url: ${useUrl} ${useUrl ? `(expected url: '${this.getCurrentUrl()}')` : ''}`);
@@ -676,4 +672,4 @@ var _default = commands;
676
672
  exports.default = _default;require('source-map-support').install();
677
673
 
678
674
 
679
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIl0sIm5hbWVzIjpbIk5BVElWRV9XSU4iLCJXRUJWSUVXX1dJTiIsIldFQlZJRVdfQkFTRSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRDdXJyZW50Q29udGV4dCIsImN1ckNvbnRleHQiLCJnZXRDb250ZXh0c0FuZFZpZXdzIiwidXNlVXJsIiwibG9nIiwiZGVidWciLCJ3ZWJ2aWV3cyIsImxpc3RXZWJGcmFtZXMiLCJjdHhzIiwiaWQiLCJ2aWV3IiwiY29udGV4dHMiLCJwdXNoIiwidG9TdHJpbmciLCJ1c2VOZXdTYWZhcmkiLCJwYXJzZUZsb2F0IiwiaW9zU2RrVmVyc2lvbiIsIm9wdHMiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc1JlYWxEZXZpY2UiLCJzYWZhcmkiLCJ0eXBlQW5kTmF2VG9VcmwiLCJhZGRyZXNzIiwic2V0Q3VycmVudFVybCIsImNhcHMiLCJzYWZhcmlJbml0aWFsVXJsIiwicG9ydCIsInRyaWVzIiwiTUFYX1RSSUVTIiwibmF2aWdhdGUiLCJvbGRJbXBXYWl0IiwiaW1wbGljaXRXYWl0TXMiLCJlbCIsImZpbmRFbGVtZW50IiwibmF0aXZlVGFwIiwiRUxFTUVOVCIsImVyciIsIl8iLCJpbmNsdWRlcyIsIm1lc3NhZ2UiLCJuZXdQYWdlQnV0dG9uIiwic2V0VmFsdWVJbW1lZGlhdGUiLCJnZXRDdXJyZW50VXJsIiwiZXJyb3IiLCJuYXZUb1ZpZXdXaXRoVGl0bGUiLCJ1bmRlZmluZWQiLCJSZWdFeHAiLCJyZW1vdGUiLCJwYWdlVW5sb2FkIiwibmF2VG9WaWV3VGhyb3VnaEZhdm9yaXRlcyIsIm1zZyIsInRpdGxlUmVnZXgiLCJ1cmxSZWdFeHAiLCJzdGFydCIsIkRhdGUiLCJub3ciLCJzcGluVGltZSIsInNwaW5IYW5kbGVzIiwicmVzIiwiZ2V0TGF0ZXN0V2Vidmlld0NvbnRleHRGb3JUaXRsZSIsIkVycm9yIiwic3RhY2siLCJsYXRlc3RXaW5kb3ciLCJzZXRDb250ZXh0IiwiY2FuY2VsUGFnZUxvYWQiLCJ3YXJuIiwiQiIsImRlbGF5IiwiZWxlbWVudCIsImZpbmRVSUVsZW1lbnRPckVsZW1lbnRzIiwic3RvcFJlbW90ZSIsImNsb3NlV2luZG93QmVmb3JlRGlzY29ubmVjdGluZyIsImVycm9yQW5kVGhyb3ciLCJjbG9zZVdpbmRvdyIsImRpc2Nvbm5lY3QiLCJjdXJXZWJGcmFtZXMiLCJjdXJXZWJDb29yZHMiLCJ1cmwiLCJfY3VycmVudFVybCIsImNsb3NlQWxlcnRCZWZvcmVUZXN0IiwibmF2VG9Jbml0aWFsV2VidmlldyIsInJlZ0V4cCIsImN1cnJlbnRVcmwiLCJmaWx0ZXIiLCJjdHgiLCJ0aXRsZSIsInRlc3QiLCJpc1dlYkNvbnRleHQiLCJpc1dlYnZpZXciLCJnZXROZXdSZW1vdGVEZWJ1Z2dlciIsInNvY2tldFBhdGgiLCJkZXZpY2UiLCJnZXRXZWJJbnNwZWN0b3JTb2NrZXQiLCJidW5kbGVJZCIsImFkZGl0aW9uYWxCdW5kbGVJZHMiLCJhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyIsImlzU2FmYXJpIiwiaW5jbHVkZVNhZmFyaSIsImluY2x1ZGVTYWZhcmlJbldlYnZpZXdzIiwicGFnZUxvYWRNcyIsInJlbW90ZURlYnVnUHJveHkiLCJnYXJiYWdlQ29sbGVjdE9uRXhlY3V0ZSIsInV0aWwiLCJoYXNWYWx1ZSIsInNhZmFyaUdhcmJhZ2VDb2xsZWN0IiwidWRpZCIsImxvZ0FsbENvbW11bmljYXRpb24iLCJzYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uIiwibG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAiLCJzYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCIsInNvY2tldENodW5rU2l6ZSIsInNhZmFyaVNvY2tldENodW5rU2l6ZSIsIndlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoIiwic2FmYXJpV2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGgiLCJuYW1lIiwiY2FsbGJhY2siLCJza2lwUmVhZHlDaGVjayIsImFscmVhZHlJbkNvbnRleHQiLCJkZXNpcmVkIiwiY3VycmVudCIsImlzTmF0aXZlQ29udGV4dCIsImNvbnRleHQiLCJyZXBsYWNlIiwiaXNVbmRlZmluZWQiLCJnZXRDb250ZXh0cyIsImNvbnRleHRJZCIsImVycm9ycyIsIk5vU3VjaENvbnRleHRFcnJvciIsIm9sZENvbnRleHQiLCJjdXJXaW5kb3dIYW5kbGUiLCJhcHBJZEtleSIsInBhZ2VJZEtleSIsIm1hcCIsInNwbGl0IiwicGFyc2VJbnQiLCJzZWxlY3RpbmdOZXdQYWdlIiwic2VsZWN0UGFnZSIsImVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZyIsImxvZ3MiLCJwZXJmb3JtYW5jZSIsIklPU1BlcmZvcm1hbmNlTG9nIiwic3RhcnRDYXB0dXJlIiwic2FmYXJpQ29uc29sZSIsInN0YXJ0Q29uc29sZSIsImFkZExvZ0xpbmUiLCJiaW5kIiwic2FmYXJpTmV0d29yayIsInN0YXJ0TmV0d29yayIsImNvbm5lY3RUb1JlbW90ZURlYnVnZ2VyIiwib24iLCJSZW1vdGVEZWJ1Z2dlciIsIkVWRU5UX1BBR0VfQ0hBTkdFIiwib25QYWdlQ2hhbmdlIiwiRVZFTlRfRlJBTUVTX0RFVEFDSEVEIiwiaXNFbXB0eSIsInBsdXJhbGl6ZSIsImxlbmd0aCIsImpvaW4iLCJjb25uZWN0Iiwid2Vidmlld0Nvbm5lY3RUaW1lb3V0IiwicGFnZUFycmF5IiwiZ2V0V2Vidmlld1BhZ2VzIiwic2VsZWN0QXBwIiwid2Vidmlld0Nvbm5lY3RSZXRyaWVzIiwiaWdub3JlQWJvdXRCbGFua1VybCIsInNldENvbm5lY3Rpb25LZXkiLCJhbGVydEVycm9yTXNnIiwibWFwRm4iLCJmdWxsQ29udGV4dExpc3QiLCJtb2JpbGVHZXRDb250ZXh0cyIsIndhaXRGb3JXZWJ2aWV3TXMiLCJpc051bWJlciIsImlzTmFOIiwiY3VyT3B0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwic2V0V2luZG93Iiwibm9vcCIsIk5vU3VjaFdpbmRvd0Vycm9yIiwiZ2V0V2luZG93SGFuZGxlIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImdldFdpbmRvd0hhbmRsZXMiLCJwYWdlQ2hhbmdlTm90aWZpY2F0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsImlzQ29ubmVjdGVkIiwibmV3SWRzIiwibmV3UGFnZXMiLCJrZXlJZCIsImlzVXJsSWdub3JlZCIsInNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcyIsImlnbm9yZWRIb3N0cyIsImIiLCJ0cmltIiwiaWdub3JlZEhvc3QiLCJob3N0bmFtZSIsIlVSTCIsImlnbiIsInBhZ2UiLCJpc0tleSIsImluZm8iLCJjdXJBcHBJZEtleSIsImN1clBhZ2VJZEtleSIsIm5ld1BhZ2UiLCJsYXN0IiwibmVlZHNQYWdlTG9hZCIsImNvbnRleHRBcnJheSIsImlzRXF1YWwiLCJmaW5kIiwicGFnZUxvYWQiLCJjdXJyZW50UGFnZUlkIiwicCIsImNhdGNoIiwid2luZG93SGFuZGxlQ2FjaGUiLCJPYmplY3QiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsVUFBVSxHQUFHLFlBQW5CO0FBQ0EsTUFBTUMsV0FBVyxHQUFHLFNBQXBCO0FBQ0EsTUFBTUMsWUFBWSxHQUFJLEdBQUVELFdBQVksR0FBcEM7QUFFQSxNQUFNRSxRQUFRLEdBQUcsRUFBakI7QUFBQSxNQUFxQkMsT0FBTyxHQUFHLEVBQS9CO0FBQUEsTUFBbUNDLFVBQVUsR0FBRyxFQUFoRDs7QUFHQUYsUUFBUSxDQUFDRyxpQkFBVCxHQUE2QixlQUFlQSxpQkFBZixHQUFvQztBQUMvRCxNQUFJLEtBQUtDLFVBQUwsSUFBbUIsS0FBS0EsVUFBTCxLQUFvQlAsVUFBM0MsRUFBdUQ7QUFDckQsV0FBUSxHQUFFRSxZQUFhLEdBQUUsS0FBS0ssVUFBVyxFQUF6QztBQUNEOztBQUNELFNBQU9QLFVBQVA7QUFDRCxDQUxEOztBQU9BSyxVQUFVLENBQUNHLG1C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RUFDR1MsS0FESCxDQUNVcEwsR0FBRCxJQUFTO0FBQ2RoQyxzQkFBSTZELElBQUosQ0FBVSwwQkFBeUI3QixHQUFHLENBQUNHLE9BQVEsRUFBL0M7O0FBQ0EsV0FBS3RDLFVBQUwsR0FBa0IrSCxVQUFsQjtBQUNELEtBSkg7QUFLQSxTQUFLTyxnQkFBTCxHQUF3QixLQUF4QjtBQUNEOztBQUNELE9BQUtrRixpQkFBTCxHQUF5QnpELFNBQXpCO0FBQ0QsQ0E3SUQ7O0FBZ0pBMEQsTUFBTSxDQUFDQyxNQUFQLENBQWM5TixRQUFkLEVBQXdCRSxVQUF4QixFQUFvQ0QsT0FBcEM7ZUFDZUQsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlbW90ZURlYnVnZ2VyLCBSZW1vdGVEZWJ1Z2dlciB9IGZyb20gJ2FwcGl1bS1yZW1vdGUtZGVidWdnZXInO1xuaW1wb3J0IHsgZXJyb3JzLCBpc0Vycm9yVHlwZSB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyB1dGlsLCB0aW1pbmcgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgSU9TUGVyZm9ybWFuY2VMb2cgZnJvbSAnLi4vZGV2aWNlLWxvZy9pb3MtcGVyZm9ybWFuY2UtbG9nJztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5jb25zdCBOQVRJVkVfV0lOID0gJ05BVElWRV9BUFAnO1xuY29uc3QgV0VCVklFV19XSU4gPSAnV0VCVklFVyc7XG5jb25zdCBXRUJWSUVXX0JBU0UgPSBgJHtXRUJWSUVXX1dJTn1fYDtcblxuY29uc3QgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cblxuY29tbWFuZHMuZ2V0Q3VycmVudENvbnRleHQgPSBhc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50Q29udGV4dCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICBpZiAodGhpcy5jdXJDb250ZXh0ICYmIHRoaXMuY3VyQ29udGV4dCAhPT0gTkFUSVZFX1dJTikge1xuICAgIHJldHVybiBgJHtXRUJWSUVXX0JBU0V9JHt0aGlzLmN1ckNvbnRleHR9YDtcbiAgfVxuICByZXR1cm4gTkFUSVZFX1dJTjtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0Q29udGV4dHNBbmRWaWV3cyA9IGFzeW5jIGZ1bmN0aW9uIGdldENvbnRleHRzQW5kVmlld3MgKHVzZVVybCA9IHRydWUpIHtcbiAgbG9nLmRlYnVnKCdSZXRyaWV2aW5nIGNvbnRleHRzIGFuZCB2aWV3cycpO1xuICBsZXQgd2Vidmlld3MgPSBhd2FpdCB0aGlzLmxpc3RXZWJGcmFtZXModXNlVXJsKTtcblxuICBsZXQgY3R4cyA9IFt7aWQ6IE5BVElWRV9XSU4sIHZpZXc6IHt9fV07XG4gIHRoaXMuY29udGV4dHMgPSBbTkFUSVZFX1dJTl07XG4gIGZvciAobGV0IHZpZXcgb2Ygd2Vidmlld3MpIHtcbiAgICBjdHhzLnB1c2goe2lkOiBgJHtXRUJWSUVXX0JBU0V9JHt2aWV3LmlkfWAsIHZpZXd9KTtcbiAgICB0aGlzLmNvbnRleHRzLnB1c2godmlldy5pZC50b1N0cmluZygpKTtcbiAgfVxuICByZXR1cm4gY3R4cztcbn07XG5cbi8vIFJpZ2h0IG5vdyB3ZSBkb24ndCBuZWNlc3NhcmlseSB3YWl0IGZvciB3ZWJ2aWV3XG4vLyBhbmQgZnJhbWUgdG8gbG9hZCwgd2hpY2ggbGVhZHMgdG8gcmFjZSBjb25kaXRpb25zIGFuZCBmbGFraW5lc3MsXG4vLyBsZXQncyBzZWUgaWYgd2UgY2FuIHRyYW5zaXRpb24gdG8gc29tZXRoaW5nIGJldHRlclxuZXh0ZW5zaW9ucy51c2VOZXdTYWZhcmkgPSBmdW5jdGlvbiB1c2VOZXdTYWZhcmkgKCkge1xuICByZXR1cm4gcGFyc2VGbG9hdCh0aGlzLmlvc1Nka1ZlcnNpb24pID49IDguMSAmJlxuICAgIHBhcnNlRmxvYXQodGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbikgPj0gOC4xICYmXG4gICAgIXRoaXMuaXNSZWFsRGV2aWNlKCkgJiZcbiAgICB0aGlzLm9wdHMuc2FmYXJpO1xufTtcblxuZXh0ZW5zaW9ucy50eXBlQW5kTmF2VG9VcmwgPSBhc3luYyBmdW5jdGlvbiB0eXBlQW5kTmF2VG9VcmwgKCkge1xuICBsZXQgYWRkcmVzcyA9IHRoaXMub3B0cy5hZGRyZXNzID8gdGhpcy5vcHRzLmFkZHJlc3MgOiAnMTI3LjAuMC4xJztcbiAgdGhpcy5zZXRDdXJyZW50VXJsKHRoaXMuY2Fwcy5zYWZhcmlJbml0aWFsVXJsIHx8IGBodHRwOi8vJHthZGRyZXNzfToke3RoaXMub3B0cy5wb3J0fS93ZWxjb21lYCk7XG5cbiAgbGV0IHRyaWVzID0gMDtcbiAgY29uc3QgTUFYX1RSSUVTID0gMjtcbiAgbGV0IG5hdmlnYXRlID0gYXN5bmMgKCkgPT4ge1xuICAgIGxldCBvbGRJbXBXYWl0ID0gdGhpcy5pbXBsaWNpdFdhaXRNcztcbiAgICB0aGlzLmltcGxpY2l0V2FpdE1zID0gNzAwMDtcblxuICAgIC8vIGZpbmQgdGhlIHVybCBiYXIsIGFuZCB0YXAgb24gaXQuIHJldHJ5IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCB0cnlcbiAgICAvLyB0b28gc29vbiB3aGlsZSB0aGUgdmlldyBpcyBzdGlsbCBsb2FkaW5nXG4gICAgbGV0IGVsID0gYXdhaXQgcmV0cnlJbnRlcnZhbCgzLCAxMDAwLCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmZpbmRFbGVtZW50KCdhY2Nlc3NpYmlsaXR5IGlkJywgJ1VSTCcpKTtcbiAgICB0aGlzLmltcGxpY2l0V2FpdE1zID0gb2xkSW1wV2FpdDtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm5hdGl2ZVRhcChlbC5FTEVNRU5UKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChfLmluY2x1ZGVzKGVyci5tZXNzYWdlLCAnY291bGQgbm90IGJlIHRhcHBlZCcpKSB7XG4gICAgICAgIGlmICh0cmllcysrID49IE1BWF9UUklFUykgdGhyb3cgZXJyOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG5cbiAgICAgICAgLy8gZ2VuZXJhbGx5IHRoaXMgbWVhbnMgdGhhdCBTYWZhcmkgaXMgaW4gcGFnZSB2aWV3aW5nIG1vZGVcbiAgICAgICAgLy8gc28gdHJ5IHRvIG9wZW4gYSBuZXcgcGFnZSBhbmQgdGhlbiByZWRvIHRoZSBuYXZpZ2F0aW9uXG4gICAgICAgIGxldCBuZXdQYWdlQnV0dG9uID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudCgneHBhdGgnLCBcIi8vWENVSUVsZW1lbnRUeXBlQnV0dG9uW2NvbnRhaW5zKEBuYW1lLCdOZXcgcGFnZScpXVwiKTtcbiAgICAgICAgYXdhaXQgdGhpcy5uYXRpdmVUYXAobmV3UGFnZUJ1dHRvbi5FTEVNRU5UKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG5hdmlnYXRlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSBsYXN0IGFkZHJlc3MgZWxlbWVudCBhbmQgc2V0IHRoZSB1cmxcbiAgICB0cnkge1xuICAgICAgbGV0IGVsID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudCgnY2xhc3MgbmFtZScsICdYQ1VJRWxlbWVudFR5cGVUZXh0RmllbGQnKTtcbiAgICAgIGF3YWl0IHRoaXMuc2V0VmFsdWVJbW1lZGlhdGUodGhpcy5nZXRDdXJyZW50VXJsKCksIGVsKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIHRoaXMgaXMgZmxha2V5IG9uIGNlcnRhaW4gc3lzdGVtcyBzbyB3ZSByZXRyeSB1bnRpbCB3ZSBnZXQgc29tZXRoaW5nXG4gICAgICAvLyBpb3Mgc2ltczogc2FmYXJpIG9wZW5zIGJ1dCB0aGUgdGV4dCBmaWVsZCBjYW4ndCBiZSBmb3VuZFxuICAgICAgaWYgKHRyaWVzKysgPj0gTUFYX1RSSUVTKSB0aHJvdyBlcnI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICAgIHJldHVybiBhd2FpdCBuYXZpZ2F0ZSgpO1xuICAgIH1cblxuICAgIC8vIG1ha2UgaXQgaGFwcGVuXG4gICAgdHJ5IHtcbiAgICAgIGVsID0gYXdhaXQgdGhpcy5maW5kRWxlbWVudCgnYWNjZXNzaWJpbGl0eSBpZCcsICdHbycpO1xuICAgICAgYXdhaXQgdGhpcy5uYXRpdmVUYXAoZWwuRUxFTUVOVCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoXy5pbmNsdWRlcyhlcnIubWVzc2FnZSwgJ2NvdWxkIG5vdCBiZSB0YXBwZWQnKSkge1xuICAgICAgICBsb2cuZXJyb3IoJ1VuYWJsZSB0byBzdWJtaXQgVVJMIGJlY2F1c2UgXFwnR29cXCcgYnV0dG9uIGNvdWxkIG5vdCBiZSB0YXBwZWQuICcgK1xuICAgICAgICAgICdQbGVhc2UgbWFrZSBzdXJlIHlvdXIga2V5Ym9hcmQgaXMgdG9nZ2xlZCBvbi4nKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5uYXZUb1ZpZXdXaXRoVGl0bGUodW5kZWZpbmVkLCBuZXcgUmVnRXhwKHRoaXMuZ2V0Q3VycmVudFVybCgpLCAnaScpKTtcblxuICAgIC8vIHdhaXQgZm9yIHBhZ2UgdG8gZmluaXNoIGxvYWRpbmcuXG4gICAgYXdhaXQgdGhpcy5yZW1vdGUucGFnZVVubG9hZCgpO1xuICB9O1xuICBhd2FpdCBuYXZpZ2F0ZSgpO1xufTtcblxuZXh0ZW5zaW9ucy5uYXZUb1ZpZXdUaHJvdWdoRmF2b3JpdGVzID0gYXN5bmMgZnVuY3Rpb24gbmF2VG9WaWV3VGhyb3VnaEZhdm9yaXRlcyAoKSB7XG4gIGxvZy5kZWJ1ZygnV2UgYXJlIG9uIGlPUzcrIHNpbXVsYXRvcjogY2xpY2tpbmcgYXBwbGUgYnV0dG9uIHRvIGdldCBpbnRvIGEgd2VidmlldycpO1xuICBsZXQgb2xkSW1wV2FpdCA9IHRoaXMuaW1wbGljaXRXYWl0TXM7XG4gIHRoaXMuaW1wbGljaXRXYWl0TXMgPSA3MDAwOyAvLyB3YWl0IDdzIGZvciBhcHBsZSBidXR0b24gdG8gZXhpc3RcblxuICBsZXQgZWw7XG4gIHRyeSB7XG4gICAgZWwgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50KCd4cGF0aCcsICcvL1hDVUlFbGVtZW50VHlwZVNjcm9sbFZpZXdbMV0vWENVSUVsZW1lbnRUeXBlQnV0dG9uWzFdJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxldCBtc2cgPSAnQ291bGQgbm90IGZpbmQgYnV0dG9uIHRvIGNsaWNrIHRvIGdldCBpbnRvIHdlYnZpZXcuICcgK1xuICAgICAgICAgICAgICAnUHJvY2VlZGluZyBvbiB0aGUgYXNzdW1wdGlvbiB3ZSBoYXZlIGEgd29ya2luZyBvbmUuJztcbiAgICBsb2cuZXJyb3IobXNnKTtcbiAgICB0aGlzLmltcGxpY2l0V2FpdE1zID0gb2xkSW1wV2FpdDtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5uYXZUb1ZpZXdXaXRoVGl0bGUoLy4qL2kpO1xuICB9XG4gIHRoaXMuaW1wbGljaXRXYWl0TXMgPSBvbGRJbXBXYWl0O1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMubmF0aXZlVGFwKGVsLkVMRU1FTlQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsZXQgbXNnID0gJ0NvdWxkIG5vdCBjbGljayBidXR0b24gdG8gZ2V0IGludG8gd2Vidmlldy4gJyArXG4gICAgICAgICAgICAgICdQcm9jZWVkaW5nIG9uIHRoZSBhc3N1bXB0aW9uIHdlIGhhdmUgYSB3b3JraW5nIG9uZS4nO1xuICAgIGxvZy5lcnJvcihtc2cpO1xuICB9XG4gIGF3YWl0IHRoaXMubmF2VG9WaWV3V2l0aFRpdGxlKC9hcHBsZS9pKTtcbn07XG5cbmV4dGVuc2lvbnMubmF2VG9WaWV3V2l0aFRpdGxlID0gYXN5bmMgZnVuY3Rpb24gbmF2VG9WaWV3V2l0aFRpdGxlICh0aXRsZVJlZ2V4LCB1cmxSZWdFeHApIHtcbiAgbG9nLmRlYnVnKCdOYXZpZ2F0aW5nIHRvIG1vc3QgcmVjZW50bHkgb3BlbmVkIHdlYnZpZXcnKTtcbiAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgbGV0IHNwaW5UaW1lID0gNTAwO1xuICBsZXQgc3BpbkhhbmRsZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgbGV0IHJlcztcbiAgICB0cnkge1xuICAgICAgcmVzID0gYXdhaXQgdGhpcy5nZXRMYXRlc3RXZWJ2aWV3Q29udGV4dEZvclRpdGxlKHRpdGxlUmVnZXggfHwgdXJsUmVnRXhwKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICghZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0NvdWxkIG5vdCBjb25uZWN0IHRvIGEgdmFsaWQgYXBwIGFmdGVyJykpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYENvdWxkIG5vdCBuYXZpZ2F0ZSB0byB3ZWJ2aWV3ISBFcnI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIGVycm9yLnN0YWNrICs9IGBcXG5DYXVzZWQgYnk6ICR7ZXJyLnN0YWNrfWA7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKCdDb3VsZCBub3QgbmF2aWdhdGUgdG8gd2Vidmlldy4gUmV0cnlpbmcgaWYgcG9zc2libGUuJyk7XG4gICAgfVxuICAgIGlmIChyZXMpIHtcbiAgICAgIGxldCBsYXRlc3RXaW5kb3cgPSByZXM7XG4gICAgICBsb2cuZGVidWcoYFBpY2tpbmcgd2VidmlldyAnJHtsYXRlc3RXaW5kb3d9J2ApO1xuICAgICAgYXdhaXQgdGhpcy5zZXRDb250ZXh0KGxhdGVzdFdpbmRvdyk7XG4gICAgICBhd2FpdCB0aGlzLnJlbW90ZS5jYW5jZWxQYWdlTG9hZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG5vIHdlYnZpZXcgd2FzIGZvdW5kXG4gICAgaWYgKChEYXRlLm5vdygpIC0gc3RhcnQpID49IDkwMDAwKSB7XG4gICAgICAvLyB0b28gc2xvdywgZ2V0IG91dFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgbmF2aWdhdGUgdG8gd2VidmlldzsgdGhlcmUgYXJlIG5vbmUhJyk7XG4gICAgfVxuXG4gICAgbG9nLndhcm4oJ0NvdWxkIG5vdCBmaW5kIGFueSB3ZWJ2aWV3cyB5ZXQsIHJlZnJlc2hpbmcvcmV0cnlpbmcnKTtcbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSB8fCAhdGhpcy5vcHRzLnNhZmFyaSkge1xuICAgICAgLy8gb24gYSByZWFsIGRldmljZSwgd2hlbiBub3QgdXNpbmcgU2FmYXJpLCB3ZSBqdXN0IHdhbnQgdG8gdHJ5IGFnYWluXG4gICAgICBhd2FpdCBCLmRlbGF5KHNwaW5UaW1lKTtcbiAgICAgIHJldHVybiBhd2FpdCBzcGluSGFuZGxlcygpO1xuICAgIH1cblxuICAgIC8vIGZpbmQgdGhlIHJlbG9hZCBidXR0b24gYW5kIHRhcCBpdCwgaWYgcG9zc2libGVcbiAgICBsZXQgZWxlbWVudDtcbiAgICB0cnkge1xuICAgICAgbG9nLmRlYnVnKCdGaW5kaW5nIGFuZCB0YXBwaW5nIHJlbG9hZCBidXR0b24nKTtcbiAgICAgIGVsZW1lbnQgPSBhd2FpdCB0aGlzLmZpbmRVSUVsZW1lbnRPckVsZW1lbnRzKCdhY2Nlc3NpYmlsaXR5IGlkJywgJ1JlbG9hZEJ1dHRvbicsICcnLCBmYWxzZSk7XG4gICAgICBhd2FpdCB0aGlzLm5hdGl2ZVRhcChlbGVtZW50LkVMRU1FTlQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYEVycm9yIGZpbmRpbmcgYW5kIHRhcHBpbmcgcmVsb2FkIGJ1dHRvbjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIGxvZy53YXJuKCdSZXRyeWluZy4nKTtcbiAgICAgIGF3YWl0IEIuZGVsYXkoc3BpblRpbWUpO1xuICAgIH1cblxuICAgIC8vIHRyeSBpdCBhbGwgYWdhaW5cbiAgICByZXR1cm4gYXdhaXQgc3BpbkhhbmRsZXMoKTtcbiAgfTtcbiAgYXdhaXQgc3BpbkhhbmRsZXMoKTtcbn07XG5cbmhlbHBlcnMuc3RvcFJlbW90ZSA9IGFzeW5jIGZ1bmN0aW9uIHN0b3BSZW1vdGUgKGNsb3NlV2luZG93QmVmb3JlRGlzY29ubmVjdGluZyA9IGZhbHNlKSB7XG4gIGlmICghdGhpcy5yZW1vdGUpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdygnVHJpZWQgdG8gbGVhdmUgYSB3ZWIgZnJhbWUgYnV0IHdlcmUgbm90IGluIG9uZScpO1xuICB9XG5cbiAgaWYgKGNsb3NlV2luZG93QmVmb3JlRGlzY29ubmVjdGluZykge1xuICAgIGF3YWl0IHRoaXMuY2xvc2VXaW5kb3coKTtcbiAgfVxuICBhd2FpdCB0aGlzLnJlbW90ZS5kaXNjb25uZWN0KCk7XG4gIHRoaXMuY3VyQ29udGV4dCA9IG51bGw7XG4gIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gIHRoaXMuY3VyV2ViQ29vcmRzID0gbnVsbDtcbiAgdGhpcy5yZW1vdGUgPSBudWxsO1xufTtcblxuaGVscGVycy5zZXRDdXJyZW50VXJsID0gZnVuY3Rpb24gc2V0Q3VycmVudFVybCAodXJsKSB7XG4gIHRoaXMuX2N1cnJlbnRVcmwgPSB1cmw7XG59O1xuXG5oZWxwZXJzLmdldEN1cnJlbnRVcmwgPSBmdW5jdGlvbiBnZXRDdXJyZW50VXJsICgpIHtcbiAgcmV0dXJuIHRoaXMuX2N1cnJlbnRVcmw7XG59O1xuXG5leHRlbnNpb25zLmNsb3NlQWxlcnRCZWZvcmVUZXN0ID0gYXN5bmMgZnVuY3Rpb24gY2xvc2VBbGVydEJlZm9yZVRlc3QgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5leHRlbnNpb25zLm5hdlRvSW5pdGlhbFdlYnZpZXcgPSBhc3luYyBmdW5jdGlvbiBuYXZUb0luaXRpYWxXZWJ2aWV3ICgpIHtcbiAgaWYgKHRoaXMudXNlTmV3U2FmYXJpKCkpIHtcbiAgICBhd2FpdCB0aGlzLnR5cGVBbmROYXZUb1VybCgpO1xuICB9IGVsc2UgaWYgKCF0aGlzLmlzUmVhbERldmljZSgpICYmIHRoaXMub3B0cy5zYWZhcmkpIHtcbiAgICBhd2FpdCB0aGlzLm5hdlRvVmlld1Rocm91Z2hGYXZvcml0ZXMoKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCB0aGlzLm5hdlRvVmlld1dpdGhUaXRsZSgvLiovKTtcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5nZXRMYXRlc3RXZWJ2aWV3Q29udGV4dEZvclRpdGxlID0gYXN5bmMgZnVuY3Rpb24gZ2V0TGF0ZXN0V2Vidmlld0NvbnRleHRGb3JUaXRsZSAocmVnRXhwKSB7XG4gIGNvbnN0IGN1cnJlbnRVcmwgPSB0aGlzLmdldEN1cnJlbnRVcmwoKTtcblxuICBjb25zdCBjb250ZXh0cyA9IF8uZmlsdGVyKGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cygpLCAndmlldycpO1xuXG4gIGlmIChjdXJyZW50VXJsKSB7XG4gICAgLy8gZmlyc3QgdHJ5IHRvIG1hdGNoIGJ5IGN1cnJlbnQgdXJsXG4gICAgZm9yIChjb25zdCBjdHggb2YgY29udGV4dHMpIHtcbiAgICAgIGlmICgoY3R4LnZpZXcudXJsIHx8ICcnKSA9PT0gdGhpcy5nZXRDdXJyZW50VXJsKCkpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBpZiBub3QsIHRyeSB0byBtYXRjaCBieSByZWd1bGFyIGV4cHJlc3Npb25cbiAgZm9yIChjb25zdCBjdHggb2YgY29udGV4dHMpIHtcbiAgICBpZiAoKGN0eC52aWV3LnRpdGxlICYmIHJlZ0V4cC50ZXN0KGN0eC52aWV3LnRpdGxlKSkgfHwgKGN0eC52aWV3LnVybCAmJiByZWdFeHAudGVzdChjdHgudmlldy51cmwpKSkge1xuICAgICAgcmV0dXJuIGN0eC5pZDtcbiAgICB9XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMuaXNXZWJDb250ZXh0ID0gZnVuY3Rpb24gaXNXZWJDb250ZXh0ICgpIHtcbiAgcmV0dXJuICEhdGhpcy5jdXJDb250ZXh0ICYmIHRoaXMuY3VyQ29udGV4dCAhPT0gTkFUSVZFX1dJTjtcbn07XG5cbmV4dGVuc2lvbnMuaXNXZWJ2aWV3ID0gZnVuY3Rpb24gaXNXZWJ2aWV3ICgpIHtcbiAgcmV0dXJuIHRoaXMuaXNXZWJDb250ZXh0KCk7XG59O1xuXG5leHRlbnNpb25zLmdldE5ld1JlbW90ZURlYnVnZ2VyID0gYXN5bmMgZnVuY3Rpb24gZ2V0TmV3UmVtb3RlRGVidWdnZXIgKCkge1xuICBsZXQgc29ja2V0UGF0aDtcbiAgaWYgKCF0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgc29ja2V0UGF0aCA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZ2V0V2ViSW5zcGVjdG9yU29ja2V0KCk7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZVJlbW90ZURlYnVnZ2VyKHtcbiAgICBidW5kbGVJZDogdGhpcy5vcHRzLmJ1bmRsZUlkLFxuICAgIGFkZGl0aW9uYWxCdW5kbGVJZHM6IHRoaXMub3B0cy5hZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyxcbiAgICBpc1NhZmFyaTogdGhpcy5pc1NhZmFyaSgpLFxuICAgIGluY2x1ZGVTYWZhcmk6IHRoaXMub3B0cy5pbmNsdWRlU2FmYXJpSW5XZWJ2aWV3cyxcbiAgICB1c2VOZXdTYWZhcmk6IHRoaXMudXNlTmV3U2FmYXJpKCksXG4gICAgcGFnZUxvYWRNczogdGhpcy5wYWdlTG9hZE1zLFxuICAgIHBsYXRmb3JtVmVyc2lvbjogdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbixcbiAgICBzb2NrZXRQYXRoLFxuICAgIHJlbW90ZURlYnVnUHJveHk6IHRoaXMub3B0cy5yZW1vdGVEZWJ1Z1Byb3h5LFxuICAgIGdhcmJhZ2VDb2xsZWN0T25FeGVjdXRlOiB1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5zYWZhcmlHYXJiYWdlQ29sbGVjdClcbiAgICAgID8gISF0aGlzLm9wdHMuc2FmYXJpR2FyYmFnZUNvbGxlY3RcbiAgICAgIDogZmFsc2UsXG4gICAgdWRpZDogdGhpcy5vcHRzLnVkaWQsXG4gICAgbG9nQWxsQ29tbXVuaWNhdGlvbjogdGhpcy5vcHRzLnNhZmFyaUxvZ0FsbENvbW11bmljYXRpb24sXG4gICAgbG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXA6IHRoaXMub3B0cy5zYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCxcbiAgICBzb2NrZXRDaHVua1NpemU6IHRoaXMub3B0cy5zYWZhcmlTb2NrZXRDaHVua1NpemUsXG4gICAgd2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGg6IHRoaXMub3B0cy5zYWZhcmlXZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aFxuICB9LCB0aGlzLmlzUmVhbERldmljZSgpKTtcbn07XG5cbi8qKlxuICogU2V0IGNvbnRleHRcbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiBjb250ZXh0IHRvIHNldC4gSXQgY291bGQgYmUgJ251bGwnIGFzIE5BVElWRV9XSU4uXG4gKiBAcGFyYW0ge2NhbGxiYWNrfSBjYWxsYmFjayBUaGUgY2FsbGJhY2suIChJdCBpcyBub3QgY2FsbGVkIGluIHRoaXMgbWV0aG9kKVxuICogQHBhcmFtIHtib29sZWFufSBza2lwUmVhZHlDaGVjayAtIFdoZXRoZXIgaXQgd2FpdHMgZm9yIHRoZSBuZXcgY29udGV4dCBpcyByZWFkeVxuICovXG5jb21tYW5kcy5zZXRDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gc2V0Q29udGV4dCAobmFtZSwgY2FsbGJhY2ssIHNraXBSZWFkeUNoZWNrKSB7XG4gIGZ1bmN0aW9uIGFscmVhZHlJbkNvbnRleHQgKGRlc2lyZWQsIGN1cnJlbnQpIHtcbiAgICByZXR1cm4gKGRlc2lyZWQgPT09IGN1cnJlbnQgfHxcbiAgICAgIChkZXNpcmVkID09PSBudWxsICYmIGN1cnJlbnQgPT09IE5BVElWRV9XSU4pIHx8XG4gICAgICAoZGVzaXJlZCA9PT0gTkFUSVZFX1dJTiAmJiBjdXJyZW50ID09PSBudWxsKSk7XG4gIH1cbiAgZnVuY3Rpb24gaXNOYXRpdmVDb250ZXh0IChjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgPT09IE5BVElWRV9XSU4gfHwgY29udGV4dCA9PT0gbnVsbDtcbiAgfVxuXG4gIC8vIGFsbG93IHRoZSBmdWxsIGNvbnRleHQgbGlzdCB0byBiZSBwYXNzZWQgaW5cbiAgaWYgKG5hbWUgJiYgbmFtZS5pZCkge1xuICAgIG5hbWUgPSBuYW1lLmlkO1xuICB9XG5cbiAgbG9nLmRlYnVnKGBBdHRlbXB0aW5nIHRvIHNldCBjb250ZXh0IHRvICcke25hbWUgfHwgTkFUSVZFX1dJTn0nIGZyb20gJyR7dGhpcy5jdXJDb250ZXh0ID8gdGhpcy5jdXJDb250ZXh0IDogTkFUSVZFX1dJTn0nYCk7XG5cbiAgaWYgKGFscmVhZHlJbkNvbnRleHQobmFtZSwgdGhpcy5jdXJDb250ZXh0KSB8fCBhbHJlYWR5SW5Db250ZXh0KF8ucmVwbGFjZShuYW1lLCBXRUJWSUVXX0JBU0UsICcnKSwgdGhpcy5jdXJDb250ZXh0KSkge1xuICAgIC8vIGFscmVhZHkgaW4gdGhlIG5hbWVkIGNvbnRleHQsIG5vIG5lZWQgdG8gZG8gYW55dGhpbmdcbiAgICBsb2cuZGVidWcoYEFscmVhZHkgaW4gJyR7bmFtZSB8fCBOQVRJVkVfV0lOfScgY29udGV4dC4gRG9pbmcgbm90aGluZy5gKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGlzTmF0aXZlQ29udGV4dChuYW1lKSkge1xuICAgIC8vIHN3aXRjaGluZyBpbnRvIHRoZSBuYXRpdmUgY29udGV4dFxuICAgIHRoaXMuY3VyQ29udGV4dCA9IG51bGw7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gc3dpdGNoaW5nIGludG8gYSB3ZWJ2aWV3IGNvbnRleHRcblxuICAvLyBpZiBjb250ZXh0cyBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gcmV0cmlldmVkLCBnZXQgdGhlbVxuICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLmNvbnRleHRzKSkge1xuICAgIGF3YWl0IHRoaXMuZ2V0Q29udGV4dHMoKTtcbiAgfVxuXG4gIGxldCBjb250ZXh0SWQgPSBfLnJlcGxhY2UobmFtZSwgV0VCVklFV19CQVNFLCAnJyk7XG4gIGlmIChjb250ZXh0SWQgPT09ICcnKSB7XG4gICAgLy8gYWxsb3cgdXNlciB0byBwYXNzIGluIFwiV0VCVklFV1wiIHdpdGhvdXQgYW4gaW5kZXhcbiAgICAvLyB0aGUgc2Vjb25kIGNvbnRleHQgd2lsbCBiZSB0aGUgZmlyc3Qgd2VidmlldyBhc1xuICAgIC8vIHRoZSBmaXJzdCBpcyBhbHdheXMgTkFUSVZFX0FQUFxuICAgIGNvbnRleHRJZCA9IHRoaXMuY29udGV4dHNbMV07XG4gIH1cbiAgaWYgKCFfLmluY2x1ZGVzKHRoaXMuY29udGV4dHMsIGNvbnRleHRJZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaENvbnRleHRFcnJvcigpO1xuICB9XG5cbiAgY29uc3Qgb2xkQ29udGV4dCA9IHRoaXMuY3VyQ29udGV4dDtcbiAgdGhpcy5jdXJDb250ZXh0ID0gdGhpcy5jdXJXaW5kb3dIYW5kbGUgPSBjb250ZXh0SWQ7XG5cbiAgLy8gYGNvbnRleHRJZGAgd2lsbCBiZSBpbiB0aGUgZm9ybSBvZiBgYXBwSWQucGFnZUlkYCBpbiB0aGlzIGNhc2VcbiAgY29uc3QgW2FwcElkS2V5LCBwYWdlSWRLZXldID0gXy5tYXAoY29udGV4dElkLnNwbGl0KCcuJyksIChpZCkgPT4gcGFyc2VJbnQoaWQsIDEwKSk7XG4gIHRyeSB7XG4gICAgdGhpcy5zZWxlY3RpbmdOZXdQYWdlID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLnJlbW90ZS5zZWxlY3RQYWdlKGFwcElkS2V5LCBwYWdlSWRLZXksIHNraXBSZWFkeUNoZWNrKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5jdXJDb250ZXh0ID0gdGhpcy5jdXJXaW5kb3dIYW5kbGUgPSBvbGRDb250ZXh0O1xuICAgIHRocm93IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLnNlbGVjdGluZ05ld1BhZ2UgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIGF0dGVtcHQgdG8gc3RhcnQgcGVyZm9ybWFuY2UgbG9nZ2luZywgaWYgcmVxdWVzdGVkXG4gIGlmICh0aGlzLm9wdHMuZW5hYmxlUGVyZm9ybWFuY2VMb2dnaW5nICYmIHRoaXMucmVtb3RlKSB7XG4gICAgbG9nLmRlYnVnKGBTdGFydGluZyBwZXJmb3JtYW5jZSBsb2cgb24gJyR7dGhpcy5jdXJDb250ZXh0fSdgKTtcbiAgICB0aGlzLmxvZ3MucGVyZm9ybWFuY2UgPSBuZXcgSU9TUGVyZm9ybWFuY2VMb2codGhpcy5yZW1vdGUpO1xuICAgIGF3YWl0IHRoaXMubG9ncy5wZXJmb3JtYW5jZS5zdGFydENhcHR1cmUoKTtcbiAgfVxuXG4gIC8vIHN0YXJ0IHNhZmFyaSBsb2dnaW5nIGlmIHRoZSBsb2dzIGhhbmRsZXJzIGFyZSBhY3RpdmVcbiAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gTkFUSVZFX1dJTiAmJiB0aGlzLmxvZ3MpIHtcbiAgICBpZiAodGhpcy5sb2dzLnNhZmFyaUNvbnNvbGUpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVtb3RlLnN0YXJ0Q29uc29sZSh0aGlzLmxvZ3Muc2FmYXJpQ29uc29sZS5hZGRMb2dMaW5lLmJpbmQodGhpcy5sb2dzLnNhZmFyaUNvbnNvbGUpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubG9ncy5zYWZhcmlOZXR3b3JrKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlbW90ZS5zdGFydE5ldHdvcmsodGhpcy5sb2dzLnNhZmFyaU5ldHdvcmsuYWRkTG9nTGluZS5iaW5kKHRoaXMubG9ncy5zYWZhcmlOZXR3b3JrKSk7XG4gICAgfVxuICB9XG59O1xuXG5leHRlbnNpb25zLmNvbm5lY3RUb1JlbW90ZURlYnVnZ2VyID0gYXN5bmMgZnVuY3Rpb24gY29ubmVjdFRvUmVtb3RlRGVidWdnZXIgKCkge1xuICB0aGlzLnJlbW90ZSA9IGF3YWl0IHRoaXMuZ2V0TmV3UmVtb3RlRGVidWdnZXIoKTtcblxuICB0aGlzLnJlbW90ZS5vbihSZW1vdGVEZWJ1Z2dlci5FVkVOVF9QQUdFX0NIQU5HRSwgdGhpcy5vblBhZ2VDaGFuZ2UuYmluZCh0aGlzKSk7XG4gIHRoaXMucmVtb3RlLm9uKFJlbW90ZURlYnVnZ2VyLkVWRU5UX0ZSQU1FU19ERVRBQ0hFRCwgKCkgPT4ge1xuICAgIGlmICghXy5pc0VtcHR5KHRoaXMuY3VyV2ViRnJhbWVzKSkge1xuICAgICAgbG9nLmRlYnVnKGBDbGVhcmluZyAke3V0aWwucGx1cmFsaXplKCdmcmFtZScsIHRoaXMuY3VyV2ViRnJhbWVzLmxlbmd0aCwgdHJ1ZSl9OiAke3RoaXMuY3VyV2ViRnJhbWVzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gIH0pO1xuXG4gIGF3YWl0IHRoaXMucmVtb3RlLmNvbm5lY3QodGhpcy5vcHRzLndlYnZpZXdDb25uZWN0VGltZW91dCk7XG59O1xuXG5leHRlbnNpb25zLmxpc3RXZWJGcmFtZXMgPSBhc3luYyBmdW5jdGlvbiBsaXN0V2ViRnJhbWVzICh1c2VVcmwgPSB0cnVlKSB7XG4gIGlmICghdGhpcy5vcHRzLmJ1bmRsZUlkKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coJ0Nhbm5vdCBlbnRlciB3ZWIgZnJhbWUgd2l0aG91dCBhIGJ1bmRsZSBJRCcpO1xuICB9XG5cbiAgdXNlVXJsID0gdXNlVXJsICYmICF0aGlzLmlzUmVhbERldmljZSgpICYmICEhdGhpcy5nZXRDdXJyZW50VXJsKCk7XG4gIGxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGJ5IHVybDogJHt1c2VVcmx9ICR7dXNlVXJsID8gYChleHBlY3RlZCB1cmw6ICcke3RoaXMuZ2V0Q3VycmVudFVybCgpfScpYCA6ICcnfWApO1xuXG4gIGNvbnN0IGN1cnJlbnRVcmwgPSB1c2VVcmwgPyB0aGlzLmdldEN1cnJlbnRVcmwoKSA6IHVuZGVmaW5lZDtcbiAgbGV0IHBhZ2VBcnJheSA9IFtdO1xuICBjb25zdCBnZXRXZWJ2aWV3UGFnZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlbW90ZS5zZWxlY3RBcHAoY3VycmVudFVybCwgdGhpcy5vcHRzLndlYnZpZXdDb25uZWN0UmV0cmllcywgdGhpcy5vcHRzLmlnbm9yZUFib3V0QmxhbmtVcmwpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmRlYnVnKGBObyBhdmFpbGFibGUgd2ViIHBhZ2VzOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfTtcblxuICBpZiAodGhpcy5yZW1vdGUgJiYgdGhpcy5yZW1vdGUuYXBwSWRLZXkpIHtcbiAgICAvLyBhbHJlYWR5IGNvbm5lY3RlZFxuICAgIHBhZ2VBcnJheSA9IGF3YWl0IGdldFdlYnZpZXdQYWdlcygpO1xuICB9IGVsc2Uge1xuICAgIGlmICghdGhpcy5yZW1vdGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdFRvUmVtb3RlRGVidWdnZXIoKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZW1vdGUuc2V0Q29ubmVjdGlvbktleSgpO1xuXG4gICAgcGFnZUFycmF5ID0gYXdhaXQgZ2V0V2Vidmlld1BhZ2VzKCk7XG5cbiAgICBjb25zdCBhbGVydEVycm9yTXNnID0gJ0Nsb3NlIGFsZXJ0IGZhaWxlZC4gUmV0cnkuJztcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbCg2LCAxMDAwLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghYXdhaXQgdGhpcy5jbG9zZUFsZXJ0QmVmb3JlVGVzdCgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFsZXJ0RXJyb3JNc2cpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGlmIHRoZSBsb29wIHRvIGNsb3NlIGFsZXJ0cyBmYWlsZWQgdG8gZGlzbWlzcywgaWdub3JlLFxuICAgICAgLy8gb3RoZXJ3aXNlIGxvZyBhbmQgdGhyb3cgdGhlIGVycm9yXG4gICAgICBpZiAoZXJyLm1lc3NhZ2UgIT09IGFsZXJ0RXJyb3JNc2cpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocGFnZUFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIHdlIGhhdmUgbm8gd2ViIGZyYW1lcywgYnV0IGNvbnRpbnVlIGFueXdheVxuICAgIGxvZy5kZWJ1ZygnTm8gd2ViIGZyYW1lcyBmb3VuZC4nKTtcbiAgfVxuICByZXR1cm4gcGFnZUFycmF5O1xufTtcblxuY29tbWFuZHMuZ2V0Q29udGV4dHMgPSBhc3luYyBmdW5jdGlvbiBnZXRDb250ZXh0cyAoKSB7XG4gIGxvZy5kZWJ1ZygnR2V0dGluZyBsaXN0IG9mIGF2YWlsYWJsZSBjb250ZXh0cycpO1xuICBjb25zdCBjb250ZXh0cyA9IGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cyhmYWxzZSk7XG5cbiAgY29uc3QgbWFwRm4gPSB0aGlzLm9wdHMuZnVsbENvbnRleHRMaXN0XG4gICAgPyBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGNvbnRleHQuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgdGl0bGU6IGNvbnRleHQudmlldy50aXRsZSxcbiAgICAgICAgdXJsOiBjb250ZXh0LnZpZXcudXJsLFxuICAgICAgICBidW5kbGVJZDogY29udGV4dC52aWV3LmJ1bmRsZUlkLFxuICAgICAgfTtcbiAgICB9XG4gICAgOiAoY29udGV4dCkgPT4gY29udGV4dC5pZC50b1N0cmluZygpO1xuICByZXR1cm4gY29udGV4dHMubWFwKG1hcEZuKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ29udGV4dFxuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBjb250ZXh0LiBUaGUgbmF0aXZlIGNvbnRleHRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlICdOQVRJVkVfQVBQJyBhbmQgdGhlIHdlYnZpZXdzIHdpbGwgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAnV0VCVklFV194eHgnXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHRpdGxlIC0gVGhlIHRpdGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgd2VidmlldyBjb250ZW50XG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHVybCAtIFRoZSB1cmwgYXNzb2NpYXRlZCB3aXRoIHRoZSB3ZWJ2aWV3IGNvbnRlbnRcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUgY29udGV4dHMgYXZhaWxhYmxlLCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1cmwgYW5kIHRpdGxlIG9mIGVhY2hcbiAqIHdlYnZpZXdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMgc2V0LCB3aGljaCBjYW4gaW5jbHVkZSBgd2FpdEZvcldlYnZpZXdNc2AgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgcGVyaW9kIHRvIHBvbGwgZm9yIGF2YWlsYWJsZSB3ZWJ2aWV3c1xuICogQHJldHVybnMge0FycmF5fSBMaXN0IG9mIENvbnRleHQgb2JqZWN0c1xuICovXG5leHRlbnNpb25zLm1vYmlsZUdldENvbnRleHRzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0Q29udGV4dHMgKG9wdHMgPSB7fSkge1xuICBsZXQge1xuICAgIHdhaXRGb3JXZWJ2aWV3TXMgPSAwLFxuICB9ID0gb3B0cztcblxuICAvLyBtYWtlIHN1cmUgaXQgaXMgYSBudW1iZXIsIHNvIHRoZSBkdXJhdGlvbiBjaGVjayB3b3JrcyBwcm9wZXJseVxuICBpZiAoIV8uaXNOdW1iZXIod2FpdEZvcldlYnZpZXdNcykpIHtcbiAgICB3YWl0Rm9yV2Vidmlld01zID0gcGFyc2VJbnQod2FpdEZvcldlYnZpZXdNcywgMTApO1xuICAgIGlmIChpc05hTih3YWl0Rm9yV2Vidmlld01zKSkge1xuICAgICAgd2FpdEZvcldlYnZpZXdNcyA9IDA7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY3VyT3B0ID0gdGhpcy5vcHRzLmZ1bGxDb250ZXh0TGlzdDtcbiAgdGhpcy5vcHRzLmZ1bGxDb250ZXh0TGlzdCA9IHRydWU7XG5cbiAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgdHJ5IHtcbiAgICBsZXQgY29udGV4dHM7XG4gICAgZG8ge1xuICAgICAgY29udGV4dHMgPSBhd2FpdCB0aGlzLmdldENvbnRleHRzKCk7XG5cbiAgICAgIGlmIChjb250ZXh0cy5sZW5ndGggPj0gMikge1xuICAgICAgICBsb2cuZGVidWcoYEZvdW5kIHdlYnZpZXcgY29udGV4dCBhZnRlciAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgICAgICByZXR1cm4gY29udGV4dHM7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYE5vIHdlYnZpZXdzIGZvdW5kIGluICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgfSB3aGlsZSAodGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcyA8IHdhaXRGb3JXZWJ2aWV3TXMpO1xuICAgIHJldHVybiBjb250ZXh0cztcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyByZXNldCB0aGUgb3B0aW9uIHNvIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHNcbiAgICB0aGlzLm9wdHMuZnVsbENvbnRleHRMaXN0ID0gY3VyT3B0O1xuICB9XG59O1xuXG5jb21tYW5kcy5zZXRXaW5kb3cgPSBhc3luYyBmdW5jdGlvbiBzZXRXaW5kb3cgKG5hbWUsIHNraXBSZWFkeUNoZWNrKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5zZXRDb250ZXh0KG5hbWUsIF8ubm9vcCwgc2tpcFJlYWR5Q2hlY2spO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyB0cmFuc2xhdGUgdGhlIGVycm9yIGluIHRlcm1zIG9mIHdpbmRvd3NcbiAgICB0aHJvdyBpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob1N1Y2hDb250ZXh0RXJyb3IpXG4gICAgICA/IG5ldyBlcnJvcnMuTm9TdWNoV2luZG93RXJyb3IoKVxuICAgICAgOiBlcnI7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldFdpbmRvd0hhbmRsZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd0hhbmRsZSAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuICBsb2cuZGVidWcoYEdldHRpbmcgY3VycmVudCB3aW5kb3cgaGFuZGxlYCk7XG4gIHJldHVybiB0aGlzLmN1ckNvbnRleHQ7XG59O1xuXG5jb21tYW5kcy5nZXRXaW5kb3dIYW5kbGVzID0gYXN5bmMgZnVuY3Rpb24gZ2V0V2luZG93SGFuZGxlcyAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG4gIGxvZy5kZWJ1ZygnR2V0dGluZyBsaXN0IG9mIGF2YWlsYWJsZSB3aW5kb3cgaGFuZGxlcycpO1xuICBjb25zdCBjb250ZXh0cyA9IGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cyhmYWxzZSk7XG4gIHJldHVybiBjb250ZXh0c1xuICAgIC8vIGdldCByaWQgb2YgdGhlIG5hdGl2ZSBhcHAgY29udGV4dFxuICAgIC5maWx0ZXIoKGNvbnRleHQpID0+IGNvbnRleHQuaWQgIT09IE5BVElWRV9XSU4pXG4gICAgLy8gZ2V0IHRoZSBgYXBwLmlkYCBmb3JtYXQgZXhwZWN0ZWRcbiAgICAubWFwKChjb250ZXh0KSA9PiBjb250ZXh0LnZpZXcuaWQudG9TdHJpbmcoKSk7XG59O1xuXG5leHRlbnNpb25zLm9uUGFnZUNoYW5nZSA9IGFzeW5jIGZ1bmN0aW9uIG9uUGFnZUNoYW5nZSAocGFnZUNoYW5nZU5vdGlmaWNhdGlvbikge1xuICBsb2cuZGVidWcoYFJlbW90ZSBkZWJ1Z2dlciBub3RpZmllZCB1cyBvZiBhIG5ldyBwYWdlIGxpc3Rpbmc6ICR7SlNPTi5zdHJpbmdpZnkocGFnZUNoYW5nZU5vdGlmaWNhdGlvbil9YCk7XG4gIGlmICh0aGlzLnNlbGVjdGluZ05ld1BhZ2UpIHtcbiAgICBsb2cuZGVidWcoJ1dlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIHNlbGVjdGluZyBhIHBhZ2UsIGlnbm9yaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghdGhpcy5yZW1vdGUgfHwgIXRoaXMucmVtb3RlLmlzQ29ubmVjdGVkKSB7XG4gICAgbG9nLmRlYnVnKCdXZSBoYXZlIG5vdCB5ZXQgY29ubmVjdGVkLCBpZ25vcmluZycpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHthcHBJZEtleSwgcGFnZUFycmF5fSA9IHBhZ2VDaGFuZ2VOb3RpZmljYXRpb247XG5cbiAgbGV0IG5ld0lkcyA9IFtdO1xuICBsZXQgbmV3UGFnZXMgPSBbXTtcbiAgbGV0IGtleUlkID0gbnVsbDtcblxuICAvLyBDaGVja3MgaWYgYSBVUkwgaXMgYmxhY2tsaXN0ZWQgaW4gdGhlICdzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMnIGNhcGFiaWxpdHlcbiAgZnVuY3Rpb24gaXNVcmxJZ25vcmVkICh1cmwsIHNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcykge1xuICAgIGNvbnN0IGlnbm9yZWRIb3N0cyA9IChzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMgfHwgJycpXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcCgoYikgPT4gYi50cmltKCkpXG4gICAgICAuZmlsdGVyKChiKSA9PiAhXy5pc0VtcHR5KGIpKTtcbiAgICBmb3IgKGNvbnN0IGlnbm9yZWRIb3N0IG9mIGlnbm9yZWRIb3N0cykge1xuICAgICAgaWYgKGlnbm9yZWRIb3N0ID09PSAnYWJvdXQ6YmxhbmsnICYmIHVybCA9PT0gJ2Fib3V0OmJsYW5rJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaG9zdG5hbWUgPSBuZXcgVVJMKHVybCkuaG9zdG5hbWU7XG4gICAgICAgICAgaWYgKGhvc3RuYW1lID09PSBpZ25vcmVkSG9zdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgICAvLyBkbyBub3RoaW5nIGlmIGludmFsaWQgVVJMXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChjb25zdCBwYWdlIG9mIHBhZ2VBcnJheSkge1xuICAgIGNvbnN0IGlkID0gcGFnZS5pZC50b1N0cmluZygpO1xuICAgIG5ld0lkcy5wdXNoKGlkKTtcbiAgICBpZiAocGFnZS5pc0tleSkge1xuICAgICAga2V5SWQgPSBpZDtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dElkID0gYCR7YXBwSWRLZXl9LiR7aWR9YDtcblxuICAgIC8vIGFkZCBpZiB0aGlzIGlzIGEgbmV3IHBhZ2VcbiAgICBpZiAoIV8uaW5jbHVkZXModGhpcy5jb250ZXh0cywgY29udGV4dElkKSkge1xuICAgICAgaWYgKGlzVXJsSWdub3JlZChwYWdlLnVybCwgdGhpcy5vcHRzLnNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcykpIHtcbiAgICAgICAgbG9nLmluZm8oYE5vdCB0cmFja2luZyAnJHtwYWdlLnVybH0nIHBhZ2UgYmVjYXVzZSBpdCBpcyBibGFja2xpc3RlZC4gYCArXG4gICAgICAgICAgYCdzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMnPSR7dGhpcy5vcHRzLnNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lc31gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1BhZ2VzLnB1c2goaWQpO1xuICAgICAgICB0aGlzLmNvbnRleHRzLnB1c2goY29udGV4dElkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWtleUlkKSB7XG4gICAgLy8gaWYgdGhlcmUgaXMgbm8ga2V5IGlkLCBwdWxsIHRoZSBmaXJzdCBpZCBmcm9tIHRoZSBwYWdlIGFycmF5IGFuZCB1c2UgdGhhdFxuICAgIC8vIGFzIGEgc3RhbmQgaW5cbiAgICBsb2cuZGVidWcoJ05vIGtleSBpZCBmb3VuZC4gQ2hvb3NpbmcgZmlyc3QgaWQgZnJvbSBwYWdlIGFycmF5Jyk7XG4gICAga2V5SWQgPSBuZXdJZHNbMF0gfHwgbnVsbDtcbiAgfVxuXG4gIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLmN1ckNvbnRleHQpKSB7XG4gICAgbG9nLmRlYnVnKCdXZSBkbyBub3QgYXBwZWFyIHRvIGhhdmUgd2luZG93IHNldCB5ZXQsIGlnbm9yaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgW2N1ckFwcElkS2V5LCBjdXJQYWdlSWRLZXldID0gdGhpcy5jdXJDb250ZXh0LnNwbGl0KCcuJyk7XG5cbiAgaWYgKGN1ckFwcElkS2V5ICE9PSBhcHBJZEtleSkge1xuICAgIGxvZy5kZWJ1ZygnUGFnZSBjaGFuZ2Ugbm90IHJlZmVycmluZyB0byBjdXJyZW50bHkgc2VsZWN0ZWQgYXBwLCBpZ25vcmluZy4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgbmV3UGFnZSA9IG51bGw7XG4gIGlmIChuZXdQYWdlcy5sZW5ndGgpIHtcbiAgICBuZXdQYWdlID0gXy5sYXN0KG5ld1BhZ2VzKTtcbiAgICBsb2cuZGVidWcoYFdlIGhhdmUgbmV3IHBhZ2VzLCBzZWxlY3RpbmcgcGFnZSAnJHtuZXdQYWdlfSdgKTtcbiAgfSBlbHNlIGlmICghXy5pbmNsdWRlcyhuZXdJZHMsIGN1clBhZ2VJZEtleSkpIHtcbiAgICBsb2cuZGVidWcoJ05ldyBwYWdlIGxpc3RpbmcgZnJvbSByZW1vdGUgZGVidWdnZXIgZG9lcyBub3QgY29udGFpbiAnICtcbiAgICAgICAgICAgICAgICAgJ2N1cnJlbnQgd2luZG93OyBhc3N1bWluZyBpdCBpcyBjbG9zZWQnKTtcbiAgICBpZiAoIXV0aWwuaGFzVmFsdWUoa2V5SWQpKSB7XG4gICAgICBsb2cuZXJyb3IoJ0RvIG5vdCBoYXZlIG91ciBjdXJyZW50IHdpbmRvdyBhbnltb3JlLCBhbmQgdGhlcmUgJyArXG4gICAgICAgICAgICAgICAgICAgJ2FyZSBub3QgYW55IG1vcmUgdG8gbG9hZCEgRG9pbmcgbm90aGluZy4uLicpO1xuICAgICAgdGhpcy5zZXRDdXJyZW50VXJsKHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBEZWJ1Z2dlciBhbHJlYWR5IHNlbGVjdGVkIHBhZ2UgJyR7a2V5SWR9JywgYCArXG4gICAgICAgICAgICAgICAgIGBjb25maXJtaW5nIHRoYXQgY2hvaWNlLmApO1xuICAgIHRoaXMuY3VyQ29udGV4dCA9IGAke2FwcElkS2V5fS4ke2tleUlkfWA7XG4gICAgbmV3UGFnZSA9IGtleUlkO1xuICB9IGVsc2Uge1xuICAgIC8vIGF0IHRoaXMgcG9pbnQsIHRoZXJlIGFyZSBubyBuZXcgcGFnZXMsIGFuZCB0aGUgY3VycmVudCBwYWdlIHN0aWxsIGV4aXN0c1xuICAgIGxvZy5kZWJ1ZygnQ2hlY2tpbmcgaWYgcGFnZSBuZWVkcyB0byBsb2FkJyk7XG4gICAgLy8gSWYgYSB3aW5kb3cgbmF2aWdhdGVzIHRvIGFuIGFuY2hvciBpdCBkb2Vzbid0IGFsd2F5cyBmaXJlIGEgcGFnZVxuICAgIC8vIGNhbGxiYWNrIGV2ZW50LiBMZXQncyBjaGVjayBpZiB3ZSB3b3VuZCB1cCBpbiBzdWNoIGEgc2l0dWF0aW9uLlxuICAgIGNvbnN0IG5lZWRzUGFnZUxvYWQgPSAoKCkgPT4ge1xuICAgICAgLy8gbmVlZCB0byBtYXAgdGhlIHBhZ2UgaWRzIHRvIGNvbnRleHQgaWRzXG4gICAgICBjb25zdCBjb250ZXh0QXJyYXkgPSBfLm1hcChwYWdlQXJyYXksIChwYWdlKSA9PiBgJHthcHBJZEtleX0uJHtwYWdlLmlkfWApO1xuICAgICAgLy8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgY29udGV4dCBleGlzdHMgaW4gYm90aCBvdXIgcmVjb3JkZWQgY29udGV4dHMsXG4gICAgICAvLyBhbmQgdGhlIHBhZ2UgYXJyYXlcbiAgICAgIHJldHVybiAhXy5pc0VxdWFsKF8uZmluZCh0aGlzLmNvbnRleHRzLCB0aGlzLmN1ckNvbnRleHQpLCBfLmZpbmQoY29udGV4dEFycmF5LCB0aGlzLmN1ckNvbnRleHQpKTtcbiAgICB9KSgpO1xuXG4gICAgaWYgKG5lZWRzUGFnZUxvYWQpIHtcbiAgICAgIGxvZy5kZWJ1ZygnUGFnZSBsb2FkIG5lZWRlZC4gTG9hZGluZy4uLicpO1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdGUucGFnZUxvYWQoKTtcbiAgICB9XG5cbiAgICBsb2cuZGVidWcoJ05ldyBwYWdlIGxpc3RpbmcgaXMgc2FtZSBhcyBvbGQsIGRvaW5nIG5vdGhpbmcnKTtcbiAgfVxuXG4gIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYWdlIGxpc3RpbmcgaXNuJ3QgaW5kaWNhdGluZyBhIHJlZGlyZWN0XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMuY3VyQ29udGV4dCkpIHtcbiAgICBsZXQgY3VycmVudFBhZ2VJZCA9IHBhcnNlSW50KF8ubGFzdCh0aGlzLmN1ckNvbnRleHQuc3BsaXQoJy4nKSksIDEwKTtcbiAgICBsZXQgcGFnZSA9IF8uZmluZChwYWdlQXJyYXksIChwKSA9PiBwYXJzZUludChwLmlkLCAxMCkgPT09IGN1cnJlbnRQYWdlSWQpO1xuICAgIGlmIChwYWdlICYmIHBhZ2UudXJsICE9PSB0aGlzLmdldEN1cnJlbnRVcmwoKSkge1xuICAgICAgbG9nLmRlYnVnKGBSZWRpcmVjdGVkIGZyb20gJyR7dGhpcy5nZXRDdXJyZW50VXJsKCl9JyB0byAnJHtwYWdlLnVybH0nYCk7XG4gICAgICB0aGlzLnNldEN1cnJlbnRVcmwocGFnZS51cmwpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1dGlsLmhhc1ZhbHVlKG5ld1BhZ2UpKSB7XG4gICAgdGhpcy5zZWxlY3RpbmdOZXdQYWdlID0gdHJ1ZTtcbiAgICBjb25zdCBvbGRDb250ZXh0ID0gdGhpcy5jdXJDb250ZXh0O1xuICAgIHRoaXMuY3VyQ29udGV4dCA9IGAke2FwcElkS2V5fS4ke25ld1BhZ2V9YDtcbiAgICAvLyBkbyBub3Qgd2FpdCwgYXMgdGhpcyBjYW4gdGFrZSBhIGxvbmcgdGltZSwgYW5kIHRoZSByZXNwb25zZSBpcyBub3QgbmVjZXNzYXJ5XG4gICAgdGhpcy5yZW1vdGUuc2VsZWN0UGFnZShhcHBJZEtleSwgcGFyc2VJbnQobmV3UGFnZSwgMTApKVxuICAgICAgLmNhdGNoKChlcnIpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3NcbiAgICAgICAgbG9nLndhcm4oYEZhaWxlZCB0byBzZWxlY3QgcGFnZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgdGhpcy5jdXJDb250ZXh0ID0gb2xkQ29udGV4dDtcbiAgICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0aW5nTmV3UGFnZSA9IGZhbHNlO1xuICB9XG4gIHRoaXMud2luZG93SGFuZGxlQ2FjaGUgPSBwYWdlQXJyYXk7XG59O1xuXG5cbk9iamVjdC5hc3NpZ24oY29tbWFuZHMsIGV4dGVuc2lvbnMsIGhlbHBlcnMpO1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
675
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIl0sIm5hbWVzIjpbIk5BVElWRV9XSU4iLCJXRUJWSUVXX1dJTiIsIldFQlZJRVdfQkFTRSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRDdXJyZW50Q29udGV4dCIsImN1ckNvbnRleHQiLCJnZXRDb250ZXh0c0FuZFZpZXdzIiwidXNlVXJsIiwibG9nIiwiZGVidWciLCJ3ZWJ2aWV3cyIsImxpc3RXZWJGcmFtZXMiLCJjdHhzIiwiaWQiLCJ2aWV3IiwiY29udGV4dHMiLCJwdXNoIiwidG9TdHJpbmciLCJ1c2VOZXdTYWZhcmkiLCJwYXJzZUZsb2F0IiwiaW9zU2RrVmVyc2lvbiIsIm9wdHMiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc1JlYWxEZXZpY2UiLCJzYWZhcmkiLCJ0eXBlQW5kTmF2VG9VcmwiLCJhZGRyZXNzIiwic2V0Q3VycmVudFVybCIsImNhcHMiLCJzYWZhcmlJbml0aWFsVXJsIiwicG9ydCIsInRyaWVzIiwiTUFYX1RSSUVTIiwibmF2aWdhdGUiLCJvbGRJbXBXYWl0IiwiaW1wbGljaXRXYWl0TXMiLCJlbCIsImZpbmRFbGVtZW50IiwibmF0aXZlVGFwIiwiRUxFTUVOVCIsImVyciIsIl8iLCJpbmNsdWRlcyIsIm1lc3NhZ2UiLCJuZXdQYWdlQnV0dG9uIiwic2V0VmFsdWVJbW1lZGlhdGUiLCJnZXRDdXJyZW50VXJsIiwiZXJyb3IiLCJuYXZUb1ZpZXdXaXRoVGl0bGUiLCJ1bmRlZmluZWQiLCJSZWdFeHAiLCJyZW1vdGUiLCJwYWdlVW5sb2FkIiwibmF2VG9WaWV3VGhyb3VnaEZhdm9yaXRlcyIsIm1zZyIsInRpdGxlUmVnZXgiLCJ1cmxSZWdFeHAiLCJzdGFydCIsIkRhdGUiLCJub3ciLCJzcGluVGltZSIsInNwaW5IYW5kbGVzIiwicmVzIiwiZ2V0TGF0ZXN0V2Vidmlld0NvbnRleHRGb3JUaXRsZSIsIkVycm9yIiwic3RhY2siLCJsYXRlc3RXaW5kb3ciLCJzZXRDb250ZXh0IiwiY2FuY2VsUGFnZUxvYWQiLCJ3YXJuIiwiQiIsImRlbGF5IiwiZWxlbWVudCIsImZpbmRVSUVsZW1lbnRPckVsZW1lbnRzIiwic3RvcFJlbW90ZSIsImNsb3NlV2luZG93QmVmb3JlRGlzY29ubmVjdGluZyIsImVycm9yQW5kVGhyb3ciLCJjbG9zZVdpbmRvdyIsImRpc2Nvbm5lY3QiLCJjdXJXZWJGcmFtZXMiLCJjdXJXZWJDb29yZHMiLCJ1cmwiLCJfY3VycmVudFVybCIsImNsb3NlQWxlcnRCZWZvcmVUZXN0IiwibmF2VG9Jbml0aWFsV2VidmlldyIsInJlZ0V4cCIsImN1cnJlbnRVcmwiLCJmaWx0ZXIiLCJjdHgiLCJ0aXRsZSIsInRlc3QiLCJpc1dlYkNvbnRleHQiLCJpc1dlYnZpZXciLCJnZXROZXdSZW1vdGVEZWJ1Z2dlciIsInNvY2tldFBhdGgiLCJkZXZpY2UiLCJnZXRXZWJJbnNwZWN0b3JTb2NrZXQiLCJidW5kbGVJZCIsImFkZGl0aW9uYWxCdW5kbGVJZHMiLCJhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyIsImlzU2FmYXJpIiwiaW5jbHVkZVNhZmFyaSIsImluY2x1ZGVTYWZhcmlJbldlYnZpZXdzIiwicGFnZUxvYWRNcyIsInJlbW90ZURlYnVnUHJveHkiLCJnYXJiYWdlQ29sbGVjdE9uRXhlY3V0ZSIsInV0aWwiLCJoYXNWYWx1ZSIsInNhZmFyaUdhcmJhZ2VDb2xsZWN0IiwidWRpZCIsImxvZ0FsbENvbW11bmljYXRpb24iLCJzYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uIiwibG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAiLCJzYWZhcmlMb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCIsInNvY2tldENodW5rU2l6ZSIsInNhZmFyaVNvY2tldENodW5rU2l6ZSIsIndlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoIiwic2FmYXJpV2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGgiLCJuYW1lIiwiY2FsbGJhY2siLCJza2lwUmVhZHlDaGVjayIsImFscmVhZHlJbkNvbnRleHQiLCJkZXNpcmVkIiwiY3VycmVudCIsImlzTmF0aXZlQ29udGV4dCIsImNvbnRleHQiLCJyZXBsYWNlIiwiaXNVbmRlZmluZWQiLCJnZXRDb250ZXh0cyIsImNvbnRleHRJZCIsImVycm9ycyIsIk5vU3VjaENvbnRleHRFcnJvciIsIm9sZENvbnRleHQiLCJjdXJXaW5kb3dIYW5kbGUiLCJhcHBJZEtleSIsInBhZ2VJZEtleSIsIm1hcCIsInNwbGl0IiwicGFyc2VJbnQiLCJzZWxlY3RpbmdOZXdQYWdlIiwic2VsZWN0UGFnZSIsImVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZyIsImxvZ3MiLCJwZXJmb3JtYW5jZSIsIklPU1BlcmZvcm1hbmNlTG9nIiwic3RhcnRDYXB0dXJlIiwic2FmYXJpQ29uc29sZSIsInN0YXJ0Q29uc29sZSIsImFkZExvZ0xpbmUiLCJiaW5kIiwic2FmYXJpTmV0d29yayIsInN0YXJ0TmV0d29yayIsImNvbm5lY3RUb1JlbW90ZURlYnVnZ2VyIiwib24iLCJSZW1vdGVEZWJ1Z2dlciIsIkVWRU5UX1BBR0VfQ0hBTkdFIiwib25QYWdlQ2hhbmdlIiwiRVZFTlRfRlJBTUVTX0RFVEFDSEVEIiwiaXNFbXB0eSIsInBsdXJhbGl6ZSIsImxlbmd0aCIsImpvaW4iLCJjb25uZWN0Iiwid2Vidmlld0Nvbm5lY3RUaW1lb3V0IiwicGFnZUFycmF5IiwiZ2V0V2Vidmlld1BhZ2VzIiwic2VsZWN0QXBwIiwid2Vidmlld0Nvbm5lY3RSZXRyaWVzIiwiaWdub3JlQWJvdXRCbGFua1VybCIsInNldENvbm5lY3Rpb25LZXkiLCJhbGVydEVycm9yTXNnIiwibWFwRm4iLCJmdWxsQ29udGV4dExpc3QiLCJtb2JpbGVHZXRDb250ZXh0cyIsIndhaXRGb3JXZWJ2aWV3TXMiLCJpc051bWJlciIsImlzTmFOIiwiY3VyT3B0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwic2V0V2luZG93Iiwibm9vcCIsIk5vU3VjaFdpbmRvd0Vycm9yIiwiZ2V0V2luZG93SGFuZGxlIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImdldFdpbmRvd0hhbmRsZXMiLCJwYWdlQ2hhbmdlTm90aWZpY2F0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsImlzQ29ubmVjdGVkIiwibmV3SWRzIiwibmV3UGFnZXMiLCJrZXlJZCIsImlzVXJsSWdub3JlZCIsInNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcyIsImlnbm9yZWRIb3N0cyIsImIiLCJ0cmltIiwiaWdub3JlZEhvc3QiLCJob3N0bmFtZSIsIlVSTCIsImlnbiIsInBhZ2UiLCJpc0tleSIsImluZm8iLCJjdXJBcHBJZEtleSIsImN1clBhZ2VJZEtleSIsIm5ld1BhZ2UiLCJsYXN0IiwibmVlZHNQYWdlTG9hZCIsImNvbnRleHRBcnJheSIsImlzRXF1YWwiLCJmaW5kIiwicGFnZUxvYWQiLCJjdXJyZW50UGFnZUlkIiwicCIsImNhdGNoIiwid2luZG93SGFuZGxlQ2FjaGUiLCJPYmplY3QiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsVUFBVSxHQUFHLFlBQW5CO0FBQ0EsTUFBTUMsV0FBVyxHQUFHLFNBQXBCO0FBQ0EsTUFBTUMsWUFBWSxHQUFJLEdBQUVELFdBQVksR0FBcEM7QUFFQSxNQUFNRSxRQUFRLEdBQUcsRUFBakI7QUFBQSxNQUFxQkMsT0FBTyxHQUFHLEVBQS9CO0FBQUEsTUFBbUNDLFVBQVUsR0FBRyxFQUFoRDs7QUFHQUYsUUFBUSxDQUFDRyxpQkFBVCxHQUE2QixlQUFlQSxpQkFBZixHQUFvQztBQUMvRCxNQUFJLEtBQUtDLFVBQUwsSUFBbUIsS0FBS0EsVUFBTCxLQUFvQlAsVUFBM0MsRUFBdUQ7QUFDckQsV0FBUSxHQUFFRSxZQUFhLEdBQUUsS0FBS0ssVUFBVyxFQUF6QztBQUNEOztBQUNELFNBQU9QLFVBQVA7QUFDRCxDQUxEOztBQU9BSyxVQUFVLENBQUNHLG1CQUFYLEdBQWlDLGVBQWVBLG1CQUFmLENBQW9DQyxNQUFNLEdBQUcsSUFBN0MsRUFBbUQ7QUFDbEZDLGtCQUFJQyxLQUFKLENBQVUsK0JBQVY7O0FBQ0EsTUFBSUMsUUFBUSxHQUFHLE1BQU0sS0FBS0MsYUFBTCxDQUFtQkosTUFBbkIsQ0FBckI7QUFFQSxNQUFJSyxJQUFJLEdBQUcsQ0FBQztBQUFDQyxJQUFBQSxFQUFFLEVBQUVmLFVBQUw7QUFBaUJnQixJQUFBQSxJQUFJLEVBQUU7QUFBdkIsR0FBRCxDQUFYO0FBQ0EsT0FBS0MsUUFBTCxHQUFnQixDQUFDakIsVUFBRCxDQUFoQjs7QUFDQSxPQUFLLElBQUlnQixJQUFULElBQWlCSixRQUFqQixFQUEyQjtBQUN6QkUsSUFBQUEsSUFBSSxDQUFDSSxJQUFMLENBQVU7QUFBQ0gsTUFBQUEsRUFBRSxFQUFHLEdBQUViLFlBQWEsR0FBRWMsSUFBSSxDQUFDRCxFQUFHLEVBQS9CO0FBQWtDQyxNQUFBQTtBQUFsQyxLQUFWO0FBQ0EsU0FBS0MsUUFBTCxDQUFjQyxJQUFkLENBQW1CRixJQUFJLENBQUNELEVBQUwsQ0FBUUksUUFBUixFQUFuQjtBQUNEOztBQUNELFNBQU9MLElBQVA7QUFDRCxDQVhEOztBQWdCQVQsVUFBVSxDQUFDZSxZQUFYLEdBQTBCLFNBQVNBLFlBQVQsR0FBeUI7QUFDakQsU0FBT0MsVUFBVSxDQUFDLEtBQUtDLGFBQU4sQ0FBVixJQUFrQyxHQUFsQyxJQUNMRCxVQUFVLENBQUMsS0FBS0UsSUFBTCxDQUFVQyxlQUFYLENBQVYsSUFBeUMsR0FEcEMsSUFFTCxDQUFDLEtBQUtDLFlBQUwsRUFGSSxJQUdMLEtBQUtGLElBQUwsQ0FBVUcsTUFIWjtBQUlELENBTEQ7O0FBT0FyQixVQUFVLENBQUNzQixlQUFYLEdBQTZCLGVBQWVBLGVBQWYsR0FBa0M7QUFDN0QsTUFBSUMsT0FBTyxHQUFHLEtBQUtMLElBQUwsQ0FBVUssT0FBVixHQUFvQixLQUFLTCxJQUFMLENBQVVLLE9BQTlCLEdBQXdDLFdBQXREO0FBQ0EsT0FBS0MsYUFBTCxDQUFtQixLQUFLQyxJQUFMLENBQVVDLGdCQUFWLElBQStCLFVBQVNILE9BQVEsSUFBRyxLQUFLTCxJQUFMLENBQVVTLElBQUssVUFBckY7QUFFQSxNQUFJQyxLQUFLLEdBQUcsQ0FBWjtBQUNBLFFBQU1DLFNBQVMsR0FBRyxDQUFsQjs7QUFDQSxNQUFJQyxRQUFRLEdBQUcsWUFBWTtBQUN6QixRQUFJQyxVQUFVLEdBQUcsS0FBS0MsY0FBdEI7QUFDQSxTQUFLQSxjQUFMLEdBQXNCLElBQXRCO0FBSUEsUUFBSUMsRUFBRSxHQUFHLE1BQU0sNkJBQWMsQ0FBZCxFQUFpQixJQUFqQixFQUF1QixZQUFZLE1BQU0sS0FBS0MsV0FBTCxDQUFpQixrQkFBakIsRUFBcUMsS0FBckMsQ0FBekMsQ0FBZjtBQUNBLFNBQUtGLGNBQUwsR0FBc0JELFVBQXRCOztBQUVBLFFBQUk7QUFDRixZQUFNLEtBQUtJLFNBQUwsQ0FBZUYsRUFBRSxDQUFDRyxPQUFsQixDQUFOO0FBQ0QsS0FGRCxDQUVFLE9BQU9DLEdBQVAsRUFBWTtBQUNaLFVBQUlDLGdCQUFFQyxRQUFGLENBQVdGLEdBQUcsQ0FBQ0csT0FBZixFQUF3QixxQkFBeEIsQ0FBSixFQUFvRDtBQUNsRCxZQUFJWixLQUFLLE1BQU1DLFNBQWYsRUFBMEIsTUFBTVEsR0FBTjtBQUkxQixZQUFJSSxhQUFhLEdBQUcsTUFBTSxLQUFLUCxXQUFMLENBQWlCLE9BQWpCLEVBQTBCLHFEQUExQixDQUExQjtBQUNBLGNBQU0sS0FBS0MsU0FBTCxDQUFlTSxhQUFhLENBQUNMLE9BQTdCLENBQU47QUFDQSxlQUFPLE1BQU1OLFFBQVEsRUFBckI7QUFDRCxPQVJELE1BUU87QUFDTCxjQUFNTyxHQUFOO0FBQ0Q7QUFDRjs7QUFHRCxRQUFJO0FBQ0YsVUFBSUosRUFBRSxHQUFHLE1BQU0sS0FBS0MsV0FBTCxDQUFpQixZQUFqQixFQUErQiwwQkFBL0IsQ0FBZjtBQUNBLFlBQU0sS0FBS1EsaUJBQUwsQ0FBdUIsS0FBS0MsYUFBTCxFQUF2QixFQUE2Q1YsRUFBN0MsQ0FBTjtBQUNELEtBSEQsQ0FHRSxPQUFPSSxHQUFQLEVBQVk7QUFHWixVQUFJVCxLQUFLLE1BQU1DLFNBQWYsRUFBMEIsTUFBTVEsR0FBTjtBQUMxQixhQUFPLE1BQU1QLFFBQVEsRUFBckI7QUFDRDs7QUFHRCxRQUFJO0FBQ0ZHLE1BQUFBLEVBQUUsR0FBRyxNQUFNLEtBQUtDLFdBQUwsQ0FBaUIsa0JBQWpCLEVBQXFDLElBQXJDLENBQVg7QUFDQSxZQUFNLEtBQUtDLFNBQUwsQ0FBZUYsRUFBRSxDQUFDRyxPQUFsQixDQUFOO0FBQ0QsS0FIRCxDQUdFLE9BQU9DLEdBQVAsRUFBWTtBQUNaLFVBQUlDLGdCQUFFQyxRQUFGLENBQVdGLEdBQUcsQ0FBQ0csT0FBZixFQUF3QixxQkFBeEIsQ0FBSixFQUFvRDtBQUNsRG5DLHdCQUFJdUMsS0FBSixDQUFVLHFFQUNSLCtDQURGO0FBRUQ7O0FBQ0QsWUFBTVAsR0FBTjtBQUNEOztBQUNELFVBQU0sS0FBS1Esa0JBQUwsQ0FBd0JDLFNBQXhCLEVBQW1DLElBQUlDLE1BQUosQ0FBVyxLQUFLSixhQUFMLEVBQVgsRUFBaUMsR0FBakMsQ0FBbkMsQ0FBTjtBQUdBLFVBQU0sS0FBS0ssTUFBTCxDQUFZQyxVQUFaLEVBQU47QUFDRCxHQW5ERDs7QUFvREEsUUFBTW5CLFFBQVEsRUFBZDtBQUNELENBM0REOztBQTZEQTlCLFVBQVUsQ0FBQ2tELHlCQUFYLEdBQXVDLGVBQWVBLHlCQUFmLEdBQTRDO0FBQ2pGN0Msa0JBQUlDLEtBQUosQ0FBVSx3RUFBVjs7QUFDQSxNQUFJeUIsVUFBVSxHQUFHLEtBQUtDLGNBQXRCO0FBQ0EsT0FBS0EsY0FBTCxHQUFzQixJQUF0QjtBQUVBLE1BQUlDLEVBQUo7O0FBQ0EsTUFBSTtBQUNGQSxJQUFBQSxFQUFFLEdBQUcsTUFBTSxLQUFLQyxXQUFMLENBQWlCLE9BQWpCLEVBQTBCLHlEQUExQixDQUFYO0FBQ0QsR0FGRCxDQUVFLE9BQU9HLEdBQVAsRUFBWTtBQUNaLFFBQUljLEdBQUcsR0FBRyx5REFDQSxxREFEVjs7QUFFQTlDLG9CQUFJdUMsS0FBSixDQUFVTyxHQUFWOztBQUNBLFNBQUtuQixjQUFMLEdBQXNCRCxVQUF0QjtBQUNBLFdBQU8sTUFBTSxLQUFLYyxrQkFBTCxDQUF3QixLQUF4QixDQUFiO0FBQ0Q7O0FBQ0QsT0FBS2IsY0FBTCxHQUFzQkQsVUFBdEI7O0FBQ0EsTUFBSTtBQUNGLFVBQU0sS0FBS0ksU0FBTCxDQUFlRixFQUFFLENBQUNHLE9BQWxCLENBQU47QUFDRCxHQUZELENBRUUsT0FBT0MsR0FBUCxFQUFZO0FBQ1osUUFBSWMsR0FBRyxHQUFHLGlEQUNBLHFEQURWOztBQUVBOUMsb0JBQUl1QyxLQUFKLENBQVVPLEdBQVY7QUFDRDs7QUFDRCxRQUFNLEtBQUtOLGtCQUFMLENBQXdCLFFBQXhCLENBQU47QUFDRCxDQXhCRDs7QUEwQkE3QyxVQUFVLENBQUM2QyxrQkFBWCxHQUFnQyxlQUFlQSxrQkFBZixDQUFtQ08sVUFBbkMsRUFBK0NDLFNBQS9DLEVBQTBEO0FBQ3hGaEQsa0JBQUlDLEtBQUosQ0FBVSw0Q0FBVjs7QUFDQSxNQUFJZ0QsS0FBSyxHQUFHQyxJQUFJLENBQUNDLEdBQUwsRUFBWjtBQUNBLE1BQUlDLFFBQVEsR0FBRyxHQUFmOztBQUNBLE1BQUlDLFdBQVcsR0FBRyxZQUFZO0FBQzVCLFFBQUlDLEdBQUo7O0FBQ0EsUUFBSTtBQUNGQSxNQUFBQSxHQUFHLEdBQUcsTUFBTSxLQUFLQywrQkFBTCxDQUFxQ1IsVUFBVSxJQUFJQyxTQUFuRCxDQUFaO0FBQ0QsS0FGRCxDQUVFLE9BQU9oQixHQUFQLEVBQVk7QUFDWixVQUFJLENBQUNBLEdBQUcsQ0FBQ0csT0FBSixDQUFZRCxRQUFaLENBQXFCLHdDQUFyQixDQUFMLEVBQXFFO0FBQ25FLGNBQU1LLEtBQUssR0FBRyxJQUFJaUIsS0FBSixDQUFXLHVDQUFzQ3hCLEdBQUcsQ0FBQ0csT0FBUSxFQUE3RCxDQUFkO0FBQ0FJLFFBQUFBLEtBQUssQ0FBQ2tCLEtBQU4sSUFBZ0IsZ0JBQWV6QixHQUFHLENBQUN5QixLQUFNLEVBQXpDO0FBQ0EsY0FBTWxCLEtBQU47QUFDRDs7QUFDRHZDLHNCQUFJQyxLQUFKLENBQVUsc0RBQVY7QUFDRDs7QUFDRCxRQUFJcUQsR0FBSixFQUFTO0FBQ1AsVUFBSUksWUFBWSxHQUFHSixHQUFuQjs7QUFDQXRELHNCQUFJQyxLQUFKLENBQVcsb0JBQW1CeUQsWUFBYSxHQUEzQzs7QUFDQSxZQUFNLEtBQUtDLFVBQUwsQ0FBZ0JELFlBQWhCLENBQU47QUFDQSxZQUFNLEtBQUtmLE1BQUwsQ0FBWWlCLGNBQVosRUFBTjtBQUNBO0FBQ0Q7O0FBR0QsUUFBS1YsSUFBSSxDQUFDQyxHQUFMLEtBQWFGLEtBQWQsSUFBd0IsS0FBNUIsRUFBbUM7QUFFakMsWUFBTSxJQUFJTyxLQUFKLENBQVUsZ0RBQVYsQ0FBTjtBQUNEOztBQUVEeEQsb0JBQUk2RCxJQUFKLENBQVMsc0RBQVQ7O0FBQ0EsUUFBSSxLQUFLOUMsWUFBTCxNQUF1QixDQUFDLEtBQUtGLElBQUwsQ0FBVUcsTUFBdEMsRUFBOEM7QUFFNUMsWUFBTThDLGtCQUFFQyxLQUFGLENBQVFYLFFBQVIsQ0FBTjtBQUNBLGFBQU8sTUFBTUMsV0FBVyxFQUF4QjtBQUNEOztBQUdELFFBQUlXLE9BQUo7O0FBQ0EsUUFBSTtBQUNGaEUsc0JBQUlDLEtBQUosQ0FBVSxtQ0FBVjs7QUFDQStELE1BQUFBLE9BQU8sR0FBRyxNQUFNLEtBQUtDLHVCQUFMLENBQTZCLGtCQUE3QixFQUFpRCxjQUFqRCxFQUFpRSxFQUFqRSxFQUFxRSxLQUFyRSxDQUFoQjtBQUNBLFlBQU0sS0FBS25DLFNBQUwsQ0FBZWtDLE9BQU8sQ0FBQ2pDLE9BQXZCLENBQU47QUFDRCxLQUpELENBSUUsT0FBT0MsR0FBUCxFQUFZO0FBQ1poQyxzQkFBSTZELElBQUosQ0FBVSw0Q0FBMkM3QixHQUFHLENBQUNHLE9BQVEsRUFBakU7O0FBQ0FuQyxzQkFBSTZELElBQUosQ0FBUyxXQUFUOztBQUNBLFlBQU1DLGtCQUFFQyxLQUFGLENBQVFYLFFBQVIsQ0FBTjtBQUNEOztBQUdELFdBQU8sTUFBTUMsV0FBVyxFQUF4QjtBQUNELEdBL0NEOztBQWdEQSxRQUFNQSxXQUFXLEVBQWpCO0FBQ0QsQ0FyREQ7O0FBdURBM0QsT0FBTyxDQUFDd0UsVUFBUixHQUFxQixlQUFlQSxVQUFmLENBQTJCQyw4QkFBOEIsR0FBRyxLQUE1RCxFQUFtRTtBQUN0RixNQUFJLENBQUMsS0FBS3hCLE1BQVYsRUFBa0I7QUFDaEIzQyxvQkFBSW9FLGFBQUosQ0FBa0IsZ0RBQWxCO0FBQ0Q7O0FBRUQsTUFBSUQsOEJBQUosRUFBb0M7QUFDbEMsVUFBTSxLQUFLRSxXQUFMLEVBQU47QUFDRDs7QUFDRCxRQUFNLEtBQUsxQixNQUFMLENBQVkyQixVQUFaLEVBQU47QUFDQSxPQUFLekUsVUFBTCxHQUFrQixJQUFsQjtBQUNBLE9BQUswRSxZQUFMLEdBQW9CLEVBQXBCO0FBQ0EsT0FBS0MsWUFBTCxHQUFvQixJQUFwQjtBQUNBLE9BQUs3QixNQUFMLEdBQWMsSUFBZDtBQUNELENBYkQ7O0FBZUFqRCxPQUFPLENBQUN5QixhQUFSLEdBQXdCLFNBQVNBLGFBQVQsQ0FBd0JzRCxHQUF4QixFQUE2QjtBQUNuRCxPQUFLQyxXQUFMLEdBQW1CRCxHQUFuQjtBQUNELENBRkQ7O0FBSUEvRSxPQUFPLENBQUM0QyxhQUFSLEdBQXdCLFNBQVNBLGFBQVQsR0FBMEI7QUFDaEQsU0FBTyxLQUFLb0MsV0FBWjtBQUNELENBRkQ7O0FBSUEvRSxVQUFVLENBQUNnRixvQkFBWCxHQUFrQyxlQUFlQSxvQkFBZixHQUF1QztBQUN2RSxTQUFPLElBQVA7QUFDRCxDQUZEOztBQUlBaEYsVUFBVSxDQUFDaUYsbUJBQVgsR0FBaUMsZUFBZUEsbUJBQWYsR0FBc0M7QUFDckUsTUFBSSxLQUFLbEUsWUFBTCxFQUFKLEVBQXlCO0FBQ3ZCLFVBQU0sS0FBS08sZUFBTCxFQUFOO0FBQ0QsR0FGRCxNQUVPLElBQUksQ0FBQyxLQUFLRixZQUFMLEVBQUQsSUFBd0IsS0FBS0YsSUFBTCxDQUFVRyxNQUF0QyxFQUE4QztBQUNuRCxVQUFNLEtBQUs2Qix5QkFBTCxFQUFOO0FBQ0QsR0FGTSxNQUVBO0FBQ0wsVUFBTSxLQUFLTCxrQkFBTCxDQUF3QixJQUF4QixDQUFOO0FBQ0Q7QUFDRixDQVJEOztBQVVBN0MsVUFBVSxDQUFDNEQsK0JBQVgsR0FBNkMsZUFBZUEsK0JBQWYsQ0FBZ0RzQixNQUFoRCxFQUF3RDtBQUNuRyxRQUFNQyxVQUFVLEdBQUcsS0FBS3hDLGFBQUwsRUFBbkI7O0FBRUEsUUFBTS9CLFFBQVEsR0FBRzBCLGdCQUFFOEMsTUFBRixDQUFTLE1BQU0sS0FBS2pGLG1CQUFMLEVBQWYsRUFBMkMsTUFBM0MsQ0FBakI7O0FBRUEsTUFBSWdGLFVBQUosRUFBZ0I7QUFFZCxTQUFLLE1BQU1FLEdBQVgsSUFBa0J6RSxRQUFsQixFQUE0QjtBQUMxQixVQUFJLENBQUN5RSxHQUFHLENBQUMxRSxJQUFKLENBQVNtRSxHQUFULElBQWdCLEVBQWpCLE1BQXlCLEtBQUtuQyxhQUFMLEVBQTdCLEVBQW1EO0FBQ2pELGVBQU8wQyxHQUFHLENBQUMzRSxFQUFYO0FBQ0Q7QUFDRjtBQUNGOztBQUdELE9BQUssTUFBTTJFLEdBQVgsSUFBa0J6RSxRQUFsQixFQUE0QjtBQUMxQixRQUFLeUUsR0FBRyxDQUFDMUUsSUFBSixDQUFTMkUsS0FBVCxJQUFrQkosTUFBTSxDQUFDSyxJQUFQLENBQVlGLEdBQUcsQ0FBQzFFLElBQUosQ0FBUzJFLEtBQXJCLENBQW5CLElBQW9ERCxHQUFHLENBQUMxRSxJQUFKLENBQVNtRSxHQUFULElBQWdCSSxNQUFNLENBQUNLLElBQVAsQ0FBWUYsR0FBRyxDQUFDMUUsSUFBSixDQUFTbUUsR0FBckIsQ0FBeEUsRUFBb0c7QUFDbEcsYUFBT08sR0FBRyxDQUFDM0UsRUFBWDtBQUNEO0FBQ0Y7QUFDRixDQXBCRDs7QUFzQkFWLFVBQVUsQ0FBQ3dGLFlBQVgsR0FBMEIsU0FBU0EsWUFBVCxHQUF5QjtBQUNqRCxTQUFPLENBQUMsQ0FBQyxLQUFLdEYsVUFBUCxJQUFxQixLQUFLQSxVQUFMLEtBQW9CUCxVQUFoRDtBQUNELENBRkQ7O0FBSUFLLFVBQVUsQ0FBQ3lGLFNBQVgsR0FBdUIsU0FBU0EsU0FBVCxHQUFzQjtBQUMzQyxTQUFPLEtBQUtELFlBQUwsRUFBUDtBQUNELENBRkQ7O0FBSUF4RixVQUFVLENBQUMwRixvQkFBWCxHQUFrQyxlQUFlQSxvQkFBZixHQUF1QztBQUN2RSxNQUFJQyxVQUFKOztBQUNBLE1BQUksQ0FBQyxLQUFLdkUsWUFBTCxFQUFMLEVBQTBCO0FBQ3hCdUUsSUFBQUEsVUFBVSxHQUFHLE1BQU0sS0FBS3pFLElBQUwsQ0FBVTBFLE1BQVYsQ0FBaUJDLHFCQUFqQixFQUFuQjtBQUNEOztBQUNELFNBQU8sZ0RBQXFCO0FBQzFCQyxJQUFBQSxRQUFRLEVBQUUsS0FBSzVFLElBQUwsQ0FBVTRFLFFBRE07QUFFMUJDLElBQUFBLG1CQUFtQixFQUFFLEtBQUs3RSxJQUFMLENBQVU4RSwwQkFGTDtBQUcxQkMsSUFBQUEsUUFBUSxFQUFFLEtBQUtBLFFBQUwsRUFIZ0I7QUFJMUJDLElBQUFBLGFBQWEsRUFBRSxLQUFLaEYsSUFBTCxDQUFVaUYsdUJBSkM7QUFLMUJwRixJQUFBQSxZQUFZLEVBQUUsS0FBS0EsWUFBTCxFQUxZO0FBTTFCcUYsSUFBQUEsVUFBVSxFQUFFLEtBQUtBLFVBTlM7QUFPMUJqRixJQUFBQSxlQUFlLEVBQUUsS0FBS0QsSUFBTCxDQUFVQyxlQVBEO0FBUTFCd0UsSUFBQUEsVUFSMEI7QUFTMUJVLElBQUFBLGdCQUFnQixFQUFFLEtBQUtuRixJQUFMLENBQVVtRixnQkFURjtBQVUxQkMsSUFBQUEsdUJBQXVCLEVBQUVDLG9CQUFLQyxRQUFMLENBQWMsS0FBS3RGLElBQUwsQ0FBVXVGLG9CQUF4QixJQUNyQixDQUFDLENBQUMsS0FBS3ZGLElBQUwsQ0FBVXVGLG9CQURTLEdBRXJCLEtBWnNCO0FBYTFCQyxJQUFBQSxJQUFJLEVBQUUsS0FBS3hGLElBQUwsQ0FBVXdGLElBYlU7QUFjMUJDLElBQUFBLG1CQUFtQixFQUFFLEtBQUt6RixJQUFMLENBQVUwRix5QkFkTDtBQWUxQkMsSUFBQUEsMEJBQTBCLEVBQUUsS0FBSzNGLElBQUwsQ0FBVTRGLGdDQWZaO0FBZ0IxQkMsSUFBQUEsZUFBZSxFQUFFLEtBQUs3RixJQUFMLENBQVU4RixxQkFoQkQ7QUFpQjFCQyxJQUFBQSwwQkFBMEIsRUFBRSxLQUFLL0YsSUFBTCxDQUFVZ0c7QUFqQlosR0FBckIsRUFrQkosS0FBSzlGLFlBQUwsRUFsQkksQ0FBUDtBQW1CRCxDQXhCRDs7QUFpQ0F0QixRQUFRLENBQUNrRSxVQUFULEdBQXNCLGVBQWVBLFVBQWYsQ0FBMkJtRCxJQUEzQixFQUFpQ0MsUUFBakMsRUFBMkNDLGNBQTNDLEVBQTJEO0FBQy9FLFdBQVNDLGdCQUFULENBQTJCQyxPQUEzQixFQUFvQ0MsT0FBcEMsRUFBNkM7QUFDM0MsV0FBUUQsT0FBTyxLQUFLQyxPQUFaLElBQ0xELE9BQU8sS0FBSyxJQUFaLElBQW9CQyxPQUFPLEtBQUs3SCxVQUQzQixJQUVMNEgsT0FBTyxLQUFLNUgsVUFBWixJQUEwQjZILE9BQU8sS0FBSyxJQUZ6QztBQUdEOztBQUNELFdBQVNDLGVBQVQsQ0FBMEJDLE9BQTFCLEVBQW1DO0FBQ2pDLFdBQU9BLE9BQU8sS0FBSy9ILFVBQVosSUFBMEIrSCxPQUFPLEtBQUssSUFBN0M7QUFDRDs7QUFHRCxNQUFJUCxJQUFJLElBQUlBLElBQUksQ0FBQ3pHLEVBQWpCLEVBQXFCO0FBQ25CeUcsSUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUN6RyxFQUFaO0FBQ0Q7O0FBRURMLGtCQUFJQyxLQUFKLENBQVcsaUNBQWdDNkcsSUFBSSxJQUFJeEgsVUFBVyxXQUFVLEtBQUtPLFVBQUwsR0FBa0IsS0FBS0EsVUFBdkIsR0FBb0NQLFVBQVcsR0FBdkg7O0FBRUEsTUFBSTJILGdCQUFnQixDQUFDSCxJQUFELEVBQU8sS0FBS2pILFVBQVosQ0FBaEIsSUFBMkNvSCxnQkFBZ0IsQ0FBQ2hGLGdCQUFFcUYsT0FBRixDQUFVUixJQUFWLEVBQWdCdEgsWUFBaEIsRUFBOEIsRUFBOUIsQ0FBRCxFQUFvQyxLQUFLSyxVQUF6QyxDQUEvRCxFQUFxSDtBQUVuSEcsb0JBQUlDLEtBQUosQ0FBVyxlQUFjNkcsSUFBSSxJQUFJeEgsVUFBVywyQkFBNUM7O0FBQ0E7QUFDRDs7QUFDRCxNQUFJOEgsZUFBZSxDQUFDTixJQUFELENBQW5CLEVBQTJCO0FBRXpCLFNBQUtqSCxVQUFMLEdBQWtCLElBQWxCO0FBQ0E7QUFDRDs7QUFLRCxNQUFJb0MsZ0JBQUVzRixXQUFGLENBQWMsS0FBS2hILFFBQW5CLENBQUosRUFBa0M7QUFDaEMsVUFBTSxLQUFLaUgsV0FBTCxFQUFOO0FBQ0Q7O0FBRUQsTUFBSUMsU0FBUyxHQUFHeEYsZ0JBQUVxRixPQUFGLENBQVVSLElBQVYsRUFBZ0J0SCxZQUFoQixFQUE4QixFQUE5QixDQUFoQjs7QUFDQSxNQUFJaUksU0FBUyxLQUFLLEVBQWxCLEVBQXNCO0FBSXBCQSxJQUFBQSxTQUFTLEdBQUcsS0FBS2xILFFBQUwsQ0FBYyxDQUFkLENBQVo7QUFDRDs7QUFDRCxNQUFJLENBQUMwQixnQkFBRUMsUUFBRixDQUFXLEtBQUszQixRQUFoQixFQUEwQmtILFNBQTFCLENBQUwsRUFBMkM7QUFDekMsVUFBTSxJQUFJQyx5QkFBT0Msa0JBQVgsRUFBTjtBQUNEOztBQUVELFFBQU1DLFVBQVUsR0FBRyxLQUFLL0gsVUFBeEI7QUFDQSxPQUFLQSxVQUFMLEdBQWtCLEtBQUtnSSxlQUFMLEdBQXVCSixTQUF6Qzs7QUFHQSxRQUFNLENBQUNLLFFBQUQsRUFBV0MsU0FBWCxJQUF3QjlGLGdCQUFFK0YsR0FBRixDQUFNUCxTQUFTLENBQUNRLEtBQVYsQ0FBZ0IsR0FBaEIsQ0FBTixFQUE2QjVILEVBQUQsSUFBUTZILFFBQVEsQ0FBQzdILEVBQUQsRUFBSyxFQUFMLENBQTVDLENBQTlCOztBQUNBLE1BQUk7QUFDRixTQUFLOEgsZ0JBQUwsR0FBd0IsSUFBeEI7QUFDQSxVQUFNLEtBQUt4RixNQUFMLENBQVl5RixVQUFaLENBQXVCTixRQUF2QixFQUFpQ0MsU0FBakMsRUFBNENmLGNBQTVDLENBQU47QUFDRCxHQUhELENBR0UsT0FBT2hGLEdBQVAsRUFBWTtBQUNaLFNBQUtuQyxVQUFMLEdBQWtCLEtBQUtnSSxlQUFMLEdBQXVCRCxVQUF6QztBQUNBLFVBQU01RixHQUFOO0FBQ0QsR0FORCxTQU1VO0FBQ1IsU0FBS21HLGdCQUFMLEdBQXdCLEtBQXhCO0FBQ0Q7O0FBR0QsTUFBSSxLQUFLdEgsSUFBTCxDQUFVd0gsd0JBQVYsSUFBc0MsS0FBSzFGLE1BQS9DLEVBQXVEO0FBQ3JEM0Msb0JBQUlDLEtBQUosQ0FBVyxnQ0FBK0IsS0FBS0osVUFBVyxHQUExRDs7QUFDQSxTQUFLeUksSUFBTCxDQUFVQyxXQUFWLEdBQXdCLElBQUlDLDBCQUFKLENBQXNCLEtBQUs3RixNQUEzQixDQUF4QjtBQUNBLFVBQU0sS0FBSzJGLElBQUwsQ0FBVUMsV0FBVixDQUFzQkUsWUFBdEIsRUFBTjtBQUNEOztBQUdELE1BQUkzQixJQUFJLElBQUlBLElBQUksS0FBS3hILFVBQWpCLElBQStCLEtBQUtnSixJQUF4QyxFQUE4QztBQUM1QyxRQUFJLEtBQUtBLElBQUwsQ0FBVUksYUFBZCxFQUE2QjtBQUMzQixZQUFNLEtBQUsvRixNQUFMLENBQVlnRyxZQUFaLENBQXlCLEtBQUtMLElBQUwsQ0FBVUksYUFBVixDQUF3QkUsVUFBeEIsQ0FBbUNDLElBQW5DLENBQXdDLEtBQUtQLElBQUwsQ0FBVUksYUFBbEQsQ0FBekIsQ0FBTjtBQUNEOztBQUNELFFBQUksS0FBS0osSUFBTCxDQUFVUSxhQUFkLEVBQTZCO0FBQzNCLFlBQU0sS0FBS25HLE1BQUwsQ0FBWW9HLFlBQVosQ0FBeUIsS0FBS1QsSUFBTCxDQUFVUSxhQUFWLENBQXdCRixVQUF4QixDQUFtQ0MsSUFBbkMsQ0FBd0MsS0FBS1AsSUFBTCxDQUFVUSxhQUFsRCxDQUF6QixDQUFOO0FBQ0Q7QUFDRjtBQUNGLENBN0VEOztBQStFQW5KLFVBQVUsQ0FBQ3FKLHVCQUFYLEdBQXFDLGVBQWVBLHVCQUFmLEdBQTBDO0FBQzdFLE9BQUtyRyxNQUFMLEdBQWMsTUFBTSxLQUFLMEMsb0JBQUwsRUFBcEI7QUFFQSxPQUFLMUMsTUFBTCxDQUFZc0csRUFBWixDQUFlQyxxQ0FBZUMsaUJBQTlCLEVBQWlELEtBQUtDLFlBQUwsQ0FBa0JQLElBQWxCLENBQXVCLElBQXZCLENBQWpEO0FBQ0EsT0FBS2xHLE1BQUwsQ0FBWXNHLEVBQVosQ0FBZUMscUNBQWVHLHFCQUE5QixFQUFxRCxNQUFNO0FBQ3pELFFBQUksQ0FBQ3BILGdCQUFFcUgsT0FBRixDQUFVLEtBQUsvRSxZQUFmLENBQUwsRUFBbUM7QUFDakN2RSxzQkFBSUMsS0FBSixDQUFXLFlBQVdpRyxvQkFBS3FELFNBQUwsQ0FBZSxPQUFmLEVBQXdCLEtBQUtoRixZQUFMLENBQWtCaUYsTUFBMUMsRUFBa0QsSUFBbEQsQ0FBd0QsS0FBSSxLQUFLakYsWUFBTCxDQUFrQmtGLElBQWxCLENBQXVCLElBQXZCLENBQTZCLEVBQS9HO0FBQ0Q7O0FBQ0QsU0FBS2xGLFlBQUwsR0FBb0IsRUFBcEI7QUFDRCxHQUxEO0FBT0EsUUFBTSxLQUFLNUIsTUFBTCxDQUFZK0csT0FBWixDQUFvQixLQUFLN0ksSUFBTCxDQUFVOEkscUJBQTlCLENBQU47QUFDRCxDQVpEOztBQWNBaEssVUFBVSxDQUFDUSxhQUFYLEdBQTJCLGVBQWVBLGFBQWYsQ0FBOEJKLE1BQU0sR0FBRyxJQUF2QyxFQUE2QztBQUN0RUEsRUFBQUEsTUFBTSxHQUFHQSxNQUFNLElBQUksQ0FBQyxLQUFLZ0IsWUFBTCxFQUFYLElBQWtDLENBQUMsQ0FBQyxLQUFLdUIsYUFBTCxFQUE3Qzs7QUFDQXRDLGtCQUFJQyxLQUFKLENBQVcscUJBQW9CRixNQUFPLElBQUdBLE1BQU0sR0FBSSxtQkFBa0IsS0FBS3VDLGFBQUwsRUFBcUIsSUFBM0MsR0FBaUQsRUFBRyxFQUFuRzs7QUFFQSxRQUFNd0MsVUFBVSxHQUFHL0UsTUFBTSxHQUFHLEtBQUt1QyxhQUFMLEVBQUgsR0FBMEJHLFNBQW5EO0FBQ0EsTUFBSW1ILFNBQVMsR0FBRyxFQUFoQjs7QUFDQSxRQUFNQyxlQUFlLEdBQUcsWUFBWTtBQUNsQyxRQUFJO0FBQ0YsYUFBTyxNQUFNLEtBQUtsSCxNQUFMLENBQVltSCxTQUFaLENBQXNCaEYsVUFBdEIsRUFBa0MsS0FBS2pFLElBQUwsQ0FBVWtKLHFCQUE1QyxFQUFtRSxLQUFLbEosSUFBTCxDQUFVbUosbUJBQTdFLENBQWI7QUFDRCxLQUZELENBRUUsT0FBT2hJLEdBQVAsRUFBWTtBQUNaaEMsc0JBQUlDLEtBQUosQ0FBVywyQkFBMEIrQixHQUFHLENBQUNHLE9BQVEsRUFBakQ7O0FBQ0EsYUFBTyxFQUFQO0FBQ0Q7QUFDRixHQVBEOztBQVNBLE1BQUksS0FBS1EsTUFBTCxJQUFlLEtBQUtBLE1BQUwsQ0FBWW1GLFFBQS9CLEVBQXlDO0FBRXZDOEIsSUFBQUEsU0FBUyxHQUFHLE1BQU1DLGVBQWUsRUFBakM7QUFDRCxHQUhELE1BR087QUFDTCxRQUFJLENBQUMsS0FBS2xILE1BQVYsRUFBa0I7QUFDaEIsWUFBTSxLQUFLcUcsdUJBQUwsRUFBTjtBQUNEOztBQUNELFVBQU0sS0FBS3JHLE1BQUwsQ0FBWXNILGdCQUFaLEVBQU47QUFFQUwsSUFBQUEsU0FBUyxHQUFHLE1BQU1DLGVBQWUsRUFBakM7QUFFQSxVQUFNSyxhQUFhLEdBQUcsNEJBQXRCOztBQUNBLFFBQUk7QUFDRixZQUFNLDZCQUFjLENBQWQsRUFBaUIsSUFBakIsRUFBdUIsWUFBWTtBQUN2QyxZQUFJLEVBQUMsTUFBTSxLQUFLdkYsb0JBQUwsRUFBUCxDQUFKLEVBQXdDO0FBQ3RDLGdCQUFNLElBQUluQixLQUFKLENBQVUwRyxhQUFWLENBQU47QUFDRDtBQUNGLE9BSkssQ0FBTjtBQUtELEtBTkQsQ0FNRSxPQUFPbEksR0FBUCxFQUFZO0FBR1osVUFBSUEsR0FBRyxDQUFDRyxPQUFKLEtBQWdCK0gsYUFBcEIsRUFBbUM7QUFDakNsSyx3QkFBSW9FLGFBQUosQ0FBa0JwQyxHQUFsQjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxNQUFJNEgsU0FBUyxDQUFDSixNQUFWLEtBQXFCLENBQXpCLEVBQTRCO0FBRTFCeEosb0JBQUlDLEtBQUosQ0FBVSxzQkFBVjtBQUNEOztBQUNELFNBQU8ySixTQUFQO0FBQ0QsQ0EvQ0Q7O0FBaURBbkssUUFBUSxDQUFDK0gsV0FBVCxHQUF1QixlQUFlQSxXQUFmLEdBQThCO0FBQ25EeEgsa0JBQUlDLEtBQUosQ0FBVSxvQ0FBVjs7QUFDQSxRQUFNTSxRQUFRLEdBQUcsTUFBTSxLQUFLVCxtQkFBTCxDQUF5QixLQUF6QixDQUF2QjtBQUVBLFFBQU1xSyxLQUFLLEdBQUcsS0FBS3RKLElBQUwsQ0FBVXVKLGVBQVYsR0FDVixVQUFVL0MsT0FBVixFQUFtQjtBQUNuQixXQUFPO0FBQ0xoSCxNQUFBQSxFQUFFLEVBQUVnSCxPQUFPLENBQUNoSCxFQUFSLENBQVdJLFFBQVgsRUFEQztBQUVMd0UsTUFBQUEsS0FBSyxFQUFFb0MsT0FBTyxDQUFDL0csSUFBUixDQUFhMkUsS0FGZjtBQUdMUixNQUFBQSxHQUFHLEVBQUU0QyxPQUFPLENBQUMvRyxJQUFSLENBQWFtRSxHQUhiO0FBSUxnQixNQUFBQSxRQUFRLEVBQUU0QixPQUFPLENBQUMvRyxJQUFSLENBQWFtRjtBQUpsQixLQUFQO0FBTUQsR0FSVyxHQVNUNEIsT0FBRCxJQUFhQSxPQUFPLENBQUNoSCxFQUFSLENBQVdJLFFBQVgsRUFUakI7QUFVQSxTQUFPRixRQUFRLENBQUN5SCxHQUFULENBQWFtQyxLQUFiLENBQVA7QUFDRCxDQWZEOztBQW1DQXhLLFVBQVUsQ0FBQzBLLGlCQUFYLEdBQStCLGVBQWVBLGlCQUFmLENBQWtDeEosSUFBSSxHQUFHLEVBQXpDLEVBQTZDO0FBQzFFLE1BQUk7QUFDRnlKLElBQUFBLGdCQUFnQixHQUFHO0FBRGpCLE1BRUF6SixJQUZKOztBQUtBLE1BQUksQ0FBQ29CLGdCQUFFc0ksUUFBRixDQUFXRCxnQkFBWCxDQUFMLEVBQW1DO0FBQ2pDQSxJQUFBQSxnQkFBZ0IsR0FBR3BDLFFBQVEsQ0FBQ29DLGdCQUFELEVBQW1CLEVBQW5CLENBQTNCOztBQUNBLFFBQUlFLEtBQUssQ0FBQ0YsZ0JBQUQsQ0FBVCxFQUE2QjtBQUMzQkEsTUFBQUEsZ0JBQWdCLEdBQUcsQ0FBbkI7QUFDRDtBQUNGOztBQUVELFFBQU1HLE1BQU0sR0FBRyxLQUFLNUosSUFBTCxDQUFVdUosZUFBekI7QUFDQSxPQUFLdkosSUFBTCxDQUFVdUosZUFBVixHQUE0QixJQUE1QjtBQUVBLFFBQU1NLEtBQUssR0FBRyxJQUFJQyxzQkFBT0MsS0FBWCxHQUFtQjNILEtBQW5CLEVBQWQ7O0FBQ0EsTUFBSTtBQUNGLFFBQUkxQyxRQUFKOztBQUNBLE9BQUc7QUFDREEsTUFBQUEsUUFBUSxHQUFHLE1BQU0sS0FBS2lILFdBQUwsRUFBakI7O0FBRUEsVUFBSWpILFFBQVEsQ0FBQ2lKLE1BQVQsSUFBbUIsQ0FBdkIsRUFBMEI7QUFDeEJ4Six3QkFBSUMsS0FBSixDQUFXLCtCQUE4QnlLLEtBQUssQ0FBQ0csV0FBTixHQUFvQkMsY0FBcEIsQ0FBbUNDLE9BQW5DLENBQTJDLENBQTNDLENBQThDLElBQXZGOztBQUNBLGVBQU94SyxRQUFQO0FBQ0Q7O0FBQ0RQLHNCQUFJQyxLQUFKLENBQVcsd0JBQXVCeUssS0FBSyxDQUFDRyxXQUFOLEdBQW9CQyxjQUFwQixDQUFtQ0MsT0FBbkMsQ0FBMkMsQ0FBM0MsQ0FBOEMsSUFBaEY7QUFDRCxLQVJELFFBUVNMLEtBQUssQ0FBQ0csV0FBTixHQUFvQkMsY0FBcEIsR0FBcUNSLGdCQVI5Qzs7QUFTQSxXQUFPL0osUUFBUDtBQUNELEdBWkQsU0FZVTtBQUVSLFNBQUtNLElBQUwsQ0FBVXVKLGVBQVYsR0FBNEJLLE1BQTVCO0FBQ0Q7QUFDRixDQWpDRDs7QUFtQ0FoTCxRQUFRLENBQUN1TCxTQUFULEdBQXFCLGVBQWVBLFNBQWYsQ0FBMEJsRSxJQUExQixFQUFnQ0UsY0FBaEMsRUFBZ0Q7QUFDbkUsTUFBSTtBQUNGLFVBQU0sS0FBS3JELFVBQUwsQ0FBZ0JtRCxJQUFoQixFQUFzQjdFLGdCQUFFZ0osSUFBeEIsRUFBOEJqRSxjQUE5QixDQUFOO0FBQ0QsR0FGRCxDQUVFLE9BQU9oRixHQUFQLEVBQVk7QUFFWixVQUFNLG1DQUFZQSxHQUFaLEVBQWlCMEYseUJBQU9DLGtCQUF4QixJQUNGLElBQUlELHlCQUFPd0QsaUJBQVgsRUFERSxHQUVGbEosR0FGSjtBQUdEO0FBQ0YsQ0FURDs7QUFXQXZDLFFBQVEsQ0FBQzBMLGVBQVQsR0FBMkIsZUFBZUEsZUFBZixHQUFrQztBQUMzRCxNQUFJLENBQUMsS0FBS2hHLFlBQUwsRUFBTCxFQUEwQjtBQUN4QixVQUFNLElBQUl1Qyx5QkFBTzBELG1CQUFYLEVBQU47QUFDRDs7QUFDRHBMLGtCQUFJQyxLQUFKLENBQVcsK0JBQVg7O0FBQ0EsU0FBTyxLQUFLSixVQUFaO0FBQ0QsQ0FORDs7QUFRQUosUUFBUSxDQUFDNEwsZ0JBQVQsR0FBNEIsZUFBZUEsZ0JBQWYsR0FBbUM7QUFDN0QsTUFBSSxDQUFDLEtBQUtsRyxZQUFMLEVBQUwsRUFBMEI7QUFDeEIsVUFBTSxJQUFJdUMseUJBQU8wRCxtQkFBWCxFQUFOO0FBQ0Q7O0FBQ0RwTCxrQkFBSUMsS0FBSixDQUFVLDBDQUFWOztBQUNBLFFBQU1NLFFBQVEsR0FBRyxNQUFNLEtBQUtULG1CQUFMLENBQXlCLEtBQXpCLENBQXZCO0FBQ0EsU0FBT1MsUUFBUSxDQUVad0UsTUFGSSxDQUVJc0MsT0FBRCxJQUFhQSxPQUFPLENBQUNoSCxFQUFSLEtBQWVmLFVBRi9CLEVBSUowSSxHQUpJLENBSUNYLE9BQUQsSUFBYUEsT0FBTyxDQUFDL0csSUFBUixDQUFhRCxFQUFiLENBQWdCSSxRQUFoQixFQUpiLENBQVA7QUFLRCxDQVhEOztBQWFBZCxVQUFVLENBQUN5SixZQUFYLEdBQTBCLGVBQWVBLFlBQWYsQ0FBNkJrQyxzQkFBN0IsRUFBcUQ7QUFDN0V0TCxrQkFBSUMsS0FBSixDQUFXLHNEQUFxRHNMLElBQUksQ0FBQ0MsU0FBTCxDQUFlRixzQkFBZixDQUF1QyxFQUF2Rzs7QUFDQSxNQUFJLEtBQUtuRCxnQkFBVCxFQUEyQjtBQUN6Qm5JLG9CQUFJQyxLQUFKLENBQVUsb0RBQVY7O0FBQ0E7QUFDRDs7QUFDRCxNQUFJLENBQUMsS0FBSzBDLE1BQU4sSUFBZ0IsQ0FBQyxLQUFLQSxNQUFMLENBQVk4SSxXQUFqQyxFQUE4QztBQUM1Q3pMLG9CQUFJQyxLQUFKLENBQVUscUNBQVY7O0FBQ0E7QUFDRDs7QUFFRCxRQUFNO0FBQUM2SCxJQUFBQSxRQUFEO0FBQVc4QixJQUFBQTtBQUFYLE1BQXdCMEIsc0JBQTlCO0FBRUEsTUFBSUksTUFBTSxHQUFHLEVBQWI7QUFDQSxNQUFJQyxRQUFRLEdBQUcsRUFBZjtBQUNBLE1BQUlDLEtBQUssR0FBRyxJQUFaOztBQUdBLFdBQVNDLFlBQVQsQ0FBdUJwSCxHQUF2QixFQUE0QnFILHdCQUE1QixFQUFzRDtBQUNwRCxVQUFNQyxZQUFZLEdBQUcsQ0FBQ0Qsd0JBQXdCLElBQUksRUFBN0IsRUFDbEI3RCxLQURrQixDQUNaLEdBRFksRUFFbEJELEdBRmtCLENBRWJnRSxDQUFELElBQU9BLENBQUMsQ0FBQ0MsSUFBRixFQUZPLEVBR2xCbEgsTUFIa0IsQ0FHVmlILENBQUQsSUFBTyxDQUFDL0osZ0JBQUVxSCxPQUFGLENBQVUwQyxDQUFWLENBSEcsQ0FBckI7O0FBSUEsU0FBSyxNQUFNRSxXQUFYLElBQTBCSCxZQUExQixFQUF3QztBQUN0QyxVQUFJRyxXQUFXLEtBQUssYUFBaEIsSUFBaUN6SCxHQUFHLEtBQUssYUFBN0MsRUFBNEQ7QUFDMUQsZUFBTyxJQUFQO0FBQ0QsT0FGRCxNQUVPO0FBQ0wsWUFBSTtBQUNGLGdCQUFNMEgsUUFBUSxHQUFHLElBQUlDLEdBQUosQ0FBUTNILEdBQVIsRUFBYTBILFFBQTlCOztBQUNBLGNBQUlBLFFBQVEsS0FBS0QsV0FBakIsRUFBOEI7QUFDNUIsbUJBQU8sSUFBUDtBQUNEO0FBQ0YsU0FMRCxDQUtFLE9BQU9HLEdBQVAsRUFBWSxDQUViO0FBQ0Y7QUFDRjs7QUFDRCxXQUFPLEtBQVA7QUFDRDs7QUFFRCxPQUFLLE1BQU1DLElBQVgsSUFBbUIxQyxTQUFuQixFQUE4QjtBQUM1QixVQUFNdkosRUFBRSxHQUFHaU0sSUFBSSxDQUFDak0sRUFBTCxDQUFRSSxRQUFSLEVBQVg7QUFDQWlMLElBQUFBLE1BQU0sQ0FBQ2xMLElBQVAsQ0FBWUgsRUFBWjs7QUFDQSxRQUFJaU0sSUFBSSxDQUFDQyxLQUFULEVBQWdCO0FBQ2RYLE1BQUFBLEtBQUssR0FBR3ZMLEVBQVI7QUFDRDs7QUFDRCxVQUFNb0gsU0FBUyxHQUFJLEdBQUVLLFFBQVMsSUFBR3pILEVBQUcsRUFBcEM7O0FBR0EsUUFBSSxDQUFDNEIsZ0JBQUVDLFFBQUYsQ0FBVyxLQUFLM0IsUUFBaEIsRUFBMEJrSCxTQUExQixDQUFMLEVBQTJDO0FBQ3pDLFVBQUlvRSxZQUFZLENBQUNTLElBQUksQ0FBQzdILEdBQU4sRUFBVyxLQUFLNUQsSUFBTCxDQUFVaUwsd0JBQXJCLENBQWhCLEVBQWdFO0FBQzlEOUwsd0JBQUl3TSxJQUFKLENBQVUsaUJBQWdCRixJQUFJLENBQUM3SCxHQUFJLG9DQUExQixHQUNOLDhCQUE2QixLQUFLNUQsSUFBTCxDQUFVaUwsd0JBQXlCLEVBRG5FO0FBRUQsT0FIRCxNQUdPO0FBQ0xILFFBQUFBLFFBQVEsQ0FBQ25MLElBQVQsQ0FBY0gsRUFBZDtBQUNBLGFBQUtFLFFBQUwsQ0FBY0MsSUFBZCxDQUFtQmlILFNBQW5CO0FBQ0Q7QUFDRjtBQUNGOztBQUVELE1BQUksQ0FBQ21FLEtBQUwsRUFBWTtBQUdWNUwsb0JBQUlDLEtBQUosQ0FBVSxvREFBVjs7QUFDQTJMLElBQUFBLEtBQUssR0FBR0YsTUFBTSxDQUFDLENBQUQsQ0FBTixJQUFhLElBQXJCO0FBQ0Q7O0FBRUQsTUFBSSxDQUFDeEYsb0JBQUtDLFFBQUwsQ0FBYyxLQUFLdEcsVUFBbkIsQ0FBTCxFQUFxQztBQUNuQ0csb0JBQUlDLEtBQUosQ0FBVSxtREFBVjs7QUFDQTtBQUNEOztBQUVELFFBQU0sQ0FBQ3dNLFdBQUQsRUFBY0MsWUFBZCxJQUE4QixLQUFLN00sVUFBTCxDQUFnQm9JLEtBQWhCLENBQXNCLEdBQXRCLENBQXBDOztBQUVBLE1BQUl3RSxXQUFXLEtBQUszRSxRQUFwQixFQUE4QjtBQUM1QjlILG9CQUFJQyxLQUFKLENBQVUsZ0VBQVY7O0FBQ0E7QUFDRDs7QUFFRCxNQUFJME0sT0FBTyxHQUFHLElBQWQ7O0FBQ0EsTUFBSWhCLFFBQVEsQ0FBQ25DLE1BQWIsRUFBcUI7QUFDbkJtRCxJQUFBQSxPQUFPLEdBQUcxSyxnQkFBRTJLLElBQUYsQ0FBT2pCLFFBQVAsQ0FBVjs7QUFDQTNMLG9CQUFJQyxLQUFKLENBQVcsc0NBQXFDME0sT0FBUSxHQUF4RDtBQUNELEdBSEQsTUFHTyxJQUFJLENBQUMxSyxnQkFBRUMsUUFBRixDQUFXd0osTUFBWCxFQUFtQmdCLFlBQW5CLENBQUwsRUFBdUM7QUFDNUMxTSxvQkFBSUMsS0FBSixDQUFVLDREQUNHLHVDQURiOztBQUVBLFFBQUksQ0FBQ2lHLG9CQUFLQyxRQUFMLENBQWN5RixLQUFkLENBQUwsRUFBMkI7QUFDekI1TCxzQkFBSXVDLEtBQUosQ0FBVSx1REFDRyw0Q0FEYjs7QUFFQSxXQUFLcEIsYUFBTCxDQUFtQnNCLFNBQW5CO0FBQ0E7QUFDRDs7QUFFRHpDLG9CQUFJQyxLQUFKLENBQVcsbUNBQWtDMkwsS0FBTSxLQUF6QyxHQUNJLHlCQURkOztBQUVBLFNBQUsvTCxVQUFMLEdBQW1CLEdBQUVpSSxRQUFTLElBQUc4RCxLQUFNLEVBQXZDO0FBQ0FlLElBQUFBLE9BQU8sR0FBR2YsS0FBVjtBQUNELEdBZE0sTUFjQTtBQUVMNUwsb0JBQUlDLEtBQUosQ0FBVSxnQ0FBVjs7QUFHQSxVQUFNNE0sYUFBYSxHQUFHLENBQUMsTUFBTTtBQUUzQixZQUFNQyxZQUFZLEdBQUc3SyxnQkFBRStGLEdBQUYsQ0FBTTRCLFNBQU4sRUFBa0IwQyxJQUFELElBQVcsR0FBRXhFLFFBQVMsSUFBR3dFLElBQUksQ0FBQ2pNLEVBQUcsRUFBbEQsQ0FBckI7O0FBR0EsYUFBTyxDQUFDNEIsZ0JBQUU4SyxPQUFGLENBQVU5SyxnQkFBRStLLElBQUYsQ0FBTyxLQUFLek0sUUFBWixFQUFzQixLQUFLVixVQUEzQixDQUFWLEVBQWtEb0MsZ0JBQUUrSyxJQUFGLENBQU9GLFlBQVAsRUFBcUIsS0FBS2pOLFVBQTFCLENBQWxELENBQVI7QUFDRCxLQU5xQixHQUF0Qjs7QUFRQSxRQUFJZ04sYUFBSixFQUFtQjtBQUNqQjdNLHNCQUFJQyxLQUFKLENBQVUsOEJBQVY7O0FBQ0EsWUFBTSxLQUFLMEMsTUFBTCxDQUFZc0ssUUFBWixFQUFOO0FBQ0Q7O0FBRURqTixvQkFBSUMsS0FBSixDQUFVLGdEQUFWO0FBQ0Q7O0FBR0QsTUFBSWlHLG9CQUFLQyxRQUFMLENBQWMsS0FBS3RHLFVBQW5CLENBQUosRUFBb0M7QUFDbEMsUUFBSXFOLGFBQWEsR0FBR2hGLFFBQVEsQ0FBQ2pHLGdCQUFFMkssSUFBRixDQUFPLEtBQUsvTSxVQUFMLENBQWdCb0ksS0FBaEIsQ0FBc0IsR0FBdEIsQ0FBUCxDQUFELEVBQXFDLEVBQXJDLENBQTVCOztBQUNBLFFBQUlxRSxJQUFJLEdBQUdySyxnQkFBRStLLElBQUYsQ0FBT3BELFNBQVAsRUFBbUJ1RCxDQUFELElBQU9qRixRQUFRLENBQUNpRixDQUFDLENBQUM5TSxFQUFILEVBQU8sRUFBUCxDQUFSLEtBQXVCNk0sYUFBaEQsQ0FBWDs7QUFDQSxRQUFJWixJQUFJLElBQUlBLElBQUksQ0FBQzdILEdBQUwsS0FBYSxLQUFLbkMsYUFBTCxFQUF6QixFQUErQztBQUM3Q3RDLHNCQUFJQyxLQUFKLENBQVcsb0JBQW1CLEtBQUtxQyxhQUFMLEVBQXFCLFNBQVFnSyxJQUFJLENBQUM3SCxHQUFJLEdBQXBFOztBQUNBLFdBQUt0RCxhQUFMLENBQW1CbUwsSUFBSSxDQUFDN0gsR0FBeEI7QUFDRDtBQUNGOztBQUVELE1BQUl5QixvQkFBS0MsUUFBTCxDQUFjd0csT0FBZCxDQUFKLEVBQTRCO0FBQzFCLFNBQUt4RSxnQkFBTCxHQUF3QixJQUF4QjtBQUNBLFVBQU1QLFVBQVUsR0FBRyxLQUFLL0gsVUFBeEI7QUFDQSxTQUFLQSxVQUFMLEdBQW1CLEdBQUVpSSxRQUFTLElBQUc2RSxPQUFRLEVBQXpDO0FBRUEsU0FBS2hLLE1BQUwsQ0FBWXlGLFVBQVosQ0FBdUJOLFFBQXZCLEVBQWlDSSxRQUFRLENBQUN5RSxPQUFELEVBQVUsRUFBVixDQUF6QyxFQUNHUyxLQURILENBQ1VwTCxHQUFELElBQVM7QUFDZGhDLHNCQUFJNkQsSUFBSixDQUFVLDBCQUF5QjdCLEdBQUcsQ0FBQ0csT0FBUSxFQUEvQzs7QUFDQSxXQUFLdEMsVUFBTCxHQUFrQitILFVBQWxCO0FBQ0QsS0FKSDtBQUtBLFNBQUtPLGdCQUFMLEdBQXdCLEtBQXhCO0FBQ0Q7O0FBQ0QsT0FBS2tGLGlCQUFMLEdBQXlCekQsU0FBekI7QUFDRCxDQTdJRDs7QUFnSkEwRCxNQUFNLENBQUNDLE1BQVAsQ0FBYzlOLFFBQWQsRUFBd0JFLFVBQXhCLEVBQW9DRCxPQUFwQztlQUNlRCxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUmVtb3RlRGVidWdnZXIsIFJlbW90ZURlYnVnZ2VyIH0gZnJvbSAnYXBwaXVtLXJlbW90ZS1kZWJ1Z2dlcic7XG5pbXBvcnQgeyBlcnJvcnMsIGlzRXJyb3JUeXBlIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCB7IHV0aWwsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBJT1NQZXJmb3JtYW5jZUxvZyBmcm9tICcuLi9kZXZpY2UtbG9nL2lvcy1wZXJmb3JtYW5jZS1sb2cnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IE5BVElWRV9XSU4gPSAnTkFUSVZFX0FQUCc7XG5jb25zdCBXRUJWSUVXX1dJTiA9ICdXRUJWSUVXJztcbmNvbnN0IFdFQlZJRVdfQkFTRSA9IGAke1dFQlZJRVdfV0lOfV9gO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuXG5jb21tYW5kcy5nZXRDdXJyZW50Q29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRDb250ZXh0ICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIGlmICh0aGlzLmN1ckNvbnRleHQgJiYgdGhpcy5jdXJDb250ZXh0ICE9PSBOQVRJVkVfV0lOKSB7XG4gICAgcmV0dXJuIGAke1dFQlZJRVdfQkFTRX0ke3RoaXMuY3VyQ29udGV4dH1gO1xuICB9XG4gIHJldHVybiBOQVRJVkVfV0lOO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRDb250ZXh0c0FuZFZpZXdzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29udGV4dHNBbmRWaWV3cyAodXNlVXJsID0gdHJ1ZSkge1xuICBsb2cuZGVidWcoJ1JldHJpZXZpbmcgY29udGV4dHMgYW5kIHZpZXdzJyk7XG4gIGxldCB3ZWJ2aWV3cyA9IGF3YWl0IHRoaXMubGlzdFdlYkZyYW1lcyh1c2VVcmwpO1xuXG4gIGxldCBjdHhzID0gW3tpZDogTkFUSVZFX1dJTiwgdmlldzoge319XTtcbiAgdGhpcy5jb250ZXh0cyA9IFtOQVRJVkVfV0lOXTtcbiAgZm9yIChsZXQgdmlldyBvZiB3ZWJ2aWV3cykge1xuICAgIGN0eHMucHVzaCh7aWQ6IGAke1dFQlZJRVdfQkFTRX0ke3ZpZXcuaWR9YCwgdmlld30pO1xuICAgIHRoaXMuY29udGV4dHMucHVzaCh2aWV3LmlkLnRvU3RyaW5nKCkpO1xuICB9XG4gIHJldHVybiBjdHhzO1xufTtcblxuLy8gUmlnaHQgbm93IHdlIGRvbid0IG5lY2Vzc2FyaWx5IHdhaXQgZm9yIHdlYnZpZXdcbi8vIGFuZCBmcmFtZSB0byBsb2FkLCB3aGljaCBsZWFkcyB0byByYWNlIGNvbmRpdGlvbnMgYW5kIGZsYWtpbmVzcyxcbi8vIGxldCdzIHNlZSBpZiB3ZSBjYW4gdHJhbnNpdGlvbiB0byBzb21ldGhpbmcgYmV0dGVyXG5leHRlbnNpb25zLnVzZU5ld1NhZmFyaSA9IGZ1bmN0aW9uIHVzZU5ld1NhZmFyaSAoKSB7XG4gIHJldHVybiBwYXJzZUZsb2F0KHRoaXMuaW9zU2RrVmVyc2lvbikgPj0gOC4xICYmXG4gICAgcGFyc2VGbG9hdCh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uKSA+PSA4LjEgJiZcbiAgICAhdGhpcy5pc1JlYWxEZXZpY2UoKSAmJlxuICAgIHRoaXMub3B0cy5zYWZhcmk7XG59O1xuXG5leHRlbnNpb25zLnR5cGVBbmROYXZUb1VybCA9IGFzeW5jIGZ1bmN0aW9uIHR5cGVBbmROYXZUb1VybCAoKSB7XG4gIGxldCBhZGRyZXNzID0gdGhpcy5vcHRzLmFkZHJlc3MgPyB0aGlzLm9wdHMuYWRkcmVzcyA6ICcxMjcuMC4wLjEnO1xuICB0aGlzLnNldEN1cnJlbnRVcmwodGhpcy5jYXBzLnNhZmFyaUluaXRpYWxVcmwgfHwgYGh0dHA6Ly8ke2FkZHJlc3N9OiR7dGhpcy5vcHRzLnBvcnR9L3dlbGNvbWVgKTtcblxuICBsZXQgdHJpZXMgPSAwO1xuICBjb25zdCBNQVhfVFJJRVMgPSAyO1xuICBsZXQgbmF2aWdhdGUgPSBhc3luYyAoKSA9PiB7XG4gICAgbGV0IG9sZEltcFdhaXQgPSB0aGlzLmltcGxpY2l0V2FpdE1zO1xuICAgIHRoaXMuaW1wbGljaXRXYWl0TXMgPSA3MDAwO1xuXG4gICAgLy8gZmluZCB0aGUgdXJsIGJhciwgYW5kIHRhcCBvbiBpdC4gcmV0cnkgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHRyeVxuICAgIC8vIHRvbyBzb29uIHdoaWxlIHRoZSB2aWV3IGlzIHN0aWxsIGxvYWRpbmdcbiAgICBsZXQgZWwgPSBhd2FpdCByZXRyeUludGVydmFsKDMsIDEwMDAsIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuZmluZEVsZW1lbnQoJ2FjY2Vzc2liaWxpdHkgaWQnLCAnVVJMJykpO1xuICAgIHRoaXMuaW1wbGljaXRXYWl0TXMgPSBvbGRJbXBXYWl0O1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubmF0aXZlVGFwKGVsLkVMRU1FTlQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKF8uaW5jbHVkZXMoZXJyLm1lc3NhZ2UsICdjb3VsZCBub3QgYmUgdGFwcGVkJykpIHtcbiAgICAgICAgaWYgKHRyaWVzKysgPj0gTUFYX1RSSUVTKSB0aHJvdyBlcnI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcblxuICAgICAgICAvLyBnZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IFNhZmFyaSBpcyBpbiBwYWdlIHZpZXdpbmcgbW9kZVxuICAgICAgICAvLyBzbyB0cnkgdG8gb3BlbiBhIG5ldyBwYWdlIGFuZCB0aGVuIHJlZG8gdGhlIG5hdmlnYXRpb25cbiAgICAgICAgbGV0IG5ld1BhZ2VCdXR0b24gPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50KCd4cGF0aCcsIFwiLy9YQ1VJRWxlbWVudFR5cGVCdXR0b25bY29udGFpbnMoQG5hbWUsJ05ldyBwYWdlJyldXCIpO1xuICAgICAgICBhd2FpdCB0aGlzLm5hdGl2ZVRhcChuZXdQYWdlQnV0dG9uLkVMRU1FTlQpO1xuICAgICAgICByZXR1cm4gYXdhaXQgbmF2aWdhdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBnZXQgdGhlIGxhc3QgYWRkcmVzcyBlbGVtZW50IGFuZCBzZXQgdGhlIHVybFxuICAgIHRyeSB7XG4gICAgICBsZXQgZWwgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50KCdjbGFzcyBuYW1lJywgJ1hDVUlFbGVtZW50VHlwZVRleHRGaWVsZCcpO1xuICAgICAgYXdhaXQgdGhpcy5zZXRWYWx1ZUltbWVkaWF0ZSh0aGlzLmdldEN1cnJlbnRVcmwoKSwgZWwpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gdGhpcyBpcyBmbGFrZXkgb24gY2VydGFpbiBzeXN0ZW1zIHNvIHdlIHJldHJ5IHVudGlsIHdlIGdldCBzb21ldGhpbmdcbiAgICAgIC8vIGlvcyBzaW1zOiBzYWZhcmkgb3BlbnMgYnV0IHRoZSB0ZXh0IGZpZWxkIGNhbid0IGJlIGZvdW5kXG4gICAgICBpZiAodHJpZXMrKyA+PSBNQVhfVFJJRVMpIHRocm93IGVycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgICAgcmV0dXJuIGF3YWl0IG5hdmlnYXRlKCk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBpdCBoYXBwZW5cbiAgICB0cnkge1xuICAgICAgZWwgPSBhd2FpdCB0aGlzLmZpbmRFbGVtZW50KCdhY2Nlc3NpYmlsaXR5IGlkJywgJ0dvJyk7XG4gICAgICBhd2FpdCB0aGlzLm5hdGl2ZVRhcChlbC5FTEVNRU5UKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChfLmluY2x1ZGVzKGVyci5tZXNzYWdlLCAnY291bGQgbm90IGJlIHRhcHBlZCcpKSB7XG4gICAgICAgIGxvZy5lcnJvcignVW5hYmxlIHRvIHN1Ym1pdCBVUkwgYmVjYXVzZSBcXCdHb1xcJyBidXR0b24gY291bGQgbm90IGJlIHRhcHBlZC4gJyArXG4gICAgICAgICAgJ1BsZWFzZSBtYWtlIHN1cmUgeW91ciBrZXlib2FyZCBpcyB0b2dnbGVkIG9uLicpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLm5hdlRvVmlld1dpdGhUaXRsZSh1bmRlZmluZWQsIG5ldyBSZWdFeHAodGhpcy5nZXRDdXJyZW50VXJsKCksICdpJykpO1xuXG4gICAgLy8gd2FpdCBmb3IgcGFnZSB0byBmaW5pc2ggbG9hZGluZy5cbiAgICBhd2FpdCB0aGlzLnJlbW90ZS5wYWdlVW5sb2FkKCk7XG4gIH07XG4gIGF3YWl0IG5hdmlnYXRlKCk7XG59O1xuXG5leHRlbnNpb25zLm5hdlRvVmlld1Rocm91Z2hGYXZvcml0ZXMgPSBhc3luYyBmdW5jdGlvbiBuYXZUb1ZpZXdUaHJvdWdoRmF2b3JpdGVzICgpIHtcbiAgbG9nLmRlYnVnKCdXZSBhcmUgb24gaU9TNysgc2ltdWxhdG9yOiBjbGlja2luZyBhcHBsZSBidXR0b24gdG8gZ2V0IGludG8gYSB3ZWJ2aWV3Jyk7XG4gIGxldCBvbGRJbXBXYWl0ID0gdGhpcy5pbXBsaWNpdFdhaXRNcztcbiAgdGhpcy5pbXBsaWNpdFdhaXRNcyA9IDcwMDA7IC8vIHdhaXQgN3MgZm9yIGFwcGxlIGJ1dHRvbiB0byBleGlzdFxuXG4gIGxldCBlbDtcbiAgdHJ5IHtcbiAgICBlbCA9IGF3YWl0IHRoaXMuZmluZEVsZW1lbnQoJ3hwYXRoJywgJy8vWENVSUVsZW1lbnRUeXBlU2Nyb2xsVmlld1sxXS9YQ1VJRWxlbWVudFR5cGVCdXR0b25bMV0nKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbGV0IG1zZyA9ICdDb3VsZCBub3QgZmluZCBidXR0b24gdG8gY2xpY2sgdG8gZ2V0IGludG8gd2Vidmlldy4gJyArXG4gICAgICAgICAgICAgICdQcm9jZWVkaW5nIG9uIHRoZSBhc3N1bXB0aW9uIHdlIGhhdmUgYSB3b3JraW5nIG9uZS4nO1xuICAgIGxvZy5lcnJvcihtc2cpO1xuICAgIHRoaXMuaW1wbGljaXRXYWl0TXMgPSBvbGRJbXBXYWl0O1xuICAgIHJldHVybiBhd2FpdCB0aGlzLm5hdlRvVmlld1dpdGhUaXRsZSgvLiovaSk7XG4gIH1cbiAgdGhpcy5pbXBsaWNpdFdhaXRNcyA9IG9sZEltcFdhaXQ7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5uYXRpdmVUYXAoZWwuRUxFTUVOVCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxldCBtc2cgPSAnQ291bGQgbm90IGNsaWNrIGJ1dHRvbiB0byBnZXQgaW50byB3ZWJ2aWV3LiAnICtcbiAgICAgICAgICAgICAgJ1Byb2NlZWRpbmcgb24gdGhlIGFzc3VtcHRpb24gd2UgaGF2ZSBhIHdvcmtpbmcgb25lLic7XG4gICAgbG9nLmVycm9yKG1zZyk7XG4gIH1cbiAgYXdhaXQgdGhpcy5uYXZUb1ZpZXdXaXRoVGl0bGUoL2FwcGxlL2kpO1xufTtcblxuZXh0ZW5zaW9ucy5uYXZUb1ZpZXdXaXRoVGl0bGUgPSBhc3luYyBmdW5jdGlvbiBuYXZUb1ZpZXdXaXRoVGl0bGUgKHRpdGxlUmVnZXgsIHVybFJlZ0V4cCkge1xuICBsb2cuZGVidWcoJ05hdmlnYXRpbmcgdG8gbW9zdCByZWNlbnRseSBvcGVuZWQgd2VidmlldycpO1xuICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xuICBsZXQgc3BpblRpbWUgPSA1MDA7XG4gIGxldCBzcGluSGFuZGxlcyA9IGFzeW5jICgpID0+IHtcbiAgICBsZXQgcmVzO1xuICAgIHRyeSB7XG4gICAgICByZXMgPSBhd2FpdCB0aGlzLmdldExhdGVzdFdlYnZpZXdDb250ZXh0Rm9yVGl0bGUodGl0bGVSZWdleCB8fCB1cmxSZWdFeHApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcygnQ291bGQgbm90IGNvbm5lY3QgdG8gYSB2YWxpZCBhcHAgYWZ0ZXInKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgQ291bGQgbm90IG5hdmlnYXRlIHRvIHdlYnZpZXchIEVycjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgZXJyb3Iuc3RhY2sgKz0gYFxcbkNhdXNlZCBieTogJHtlcnIuc3RhY2t9YDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoJ0NvdWxkIG5vdCBuYXZpZ2F0ZSB0byB3ZWJ2aWV3LiBSZXRyeWluZyBpZiBwb3NzaWJsZS4nKTtcbiAgICB9XG4gICAgaWYgKHJlcykge1xuICAgICAgbGV0IGxhdGVzdFdpbmRvdyA9IHJlcztcbiAgICAgIGxvZy5kZWJ1ZyhgUGlja2luZyB3ZWJ2aWV3ICcke2xhdGVzdFdpbmRvd30nYCk7XG4gICAgICBhd2FpdCB0aGlzLnNldENvbnRleHQobGF0ZXN0V2luZG93KTtcbiAgICAgIGF3YWl0IHRoaXMucmVtb3RlLmNhbmNlbFBhZ2VMb2FkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gbm8gd2VidmlldyB3YXMgZm91bmRcbiAgICBpZiAoKERhdGUubm93KCkgLSBzdGFydCkgPj0gOTAwMDApIHtcbiAgICAgIC8vIHRvbyBzbG93LCBnZXQgb3V0XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBuYXZpZ2F0ZSB0byB3ZWJ2aWV3OyB0aGVyZSBhcmUgbm9uZSEnKTtcbiAgICB9XG5cbiAgICBsb2cud2FybignQ291bGQgbm90IGZpbmQgYW55IHdlYnZpZXdzIHlldCwgcmVmcmVzaGluZy9yZXRyeWluZycpO1xuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpIHx8ICF0aGlzLm9wdHMuc2FmYXJpKSB7XG4gICAgICAvLyBvbiBhIHJlYWwgZGV2aWNlLCB3aGVuIG5vdCB1c2luZyBTYWZhcmksIHdlIGp1c3Qgd2FudCB0byB0cnkgYWdhaW5cbiAgICAgIGF3YWl0IEIuZGVsYXkoc3BpblRpbWUpO1xuICAgICAgcmV0dXJuIGF3YWl0IHNwaW5IYW5kbGVzKCk7XG4gICAgfVxuXG4gICAgLy8gZmluZCB0aGUgcmVsb2FkIGJ1dHRvbiBhbmQgdGFwIGl0LCBpZiBwb3NzaWJsZVxuICAgIGxldCBlbGVtZW50O1xuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoJ0ZpbmRpbmcgYW5kIHRhcHBpbmcgcmVsb2FkIGJ1dHRvbicpO1xuICAgICAgZWxlbWVudCA9IGF3YWl0IHRoaXMuZmluZFVJRWxlbWVudE9yRWxlbWVudHMoJ2FjY2Vzc2liaWxpdHkgaWQnLCAnUmVsb2FkQnV0dG9uJywgJycsIGZhbHNlKTtcbiAgICAgIGF3YWl0IHRoaXMubmF0aXZlVGFwKGVsZW1lbnQuRUxFTUVOVCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihgRXJyb3IgZmluZGluZyBhbmQgdGFwcGluZyByZWxvYWQgYnV0dG9uOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgbG9nLndhcm4oJ1JldHJ5aW5nLicpO1xuICAgICAgYXdhaXQgQi5kZWxheShzcGluVGltZSk7XG4gICAgfVxuXG4gICAgLy8gdHJ5IGl0IGFsbCBhZ2FpblxuICAgIHJldHVybiBhd2FpdCBzcGluSGFuZGxlcygpO1xuICB9O1xuICBhd2FpdCBzcGluSGFuZGxlcygpO1xufTtcblxuaGVscGVycy5zdG9wUmVtb3RlID0gYXN5bmMgZnVuY3Rpb24gc3RvcFJlbW90ZSAoY2xvc2VXaW5kb3dCZWZvcmVEaXNjb25uZWN0aW5nID0gZmFsc2UpIHtcbiAgaWYgKCF0aGlzLnJlbW90ZSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KCdUcmllZCB0byBsZWF2ZSBhIHdlYiBmcmFtZSBidXQgd2VyZSBub3QgaW4gb25lJyk7XG4gIH1cblxuICBpZiAoY2xvc2VXaW5kb3dCZWZvcmVEaXNjb25uZWN0aW5nKSB7XG4gICAgYXdhaXQgdGhpcy5jbG9zZVdpbmRvdygpO1xuICB9XG4gIGF3YWl0IHRoaXMucmVtb3RlLmRpc2Nvbm5lY3QoKTtcbiAgdGhpcy5jdXJDb250ZXh0ID0gbnVsbDtcbiAgdGhpcy5jdXJXZWJGcmFtZXMgPSBbXTtcbiAgdGhpcy5jdXJXZWJDb29yZHMgPSBudWxsO1xuICB0aGlzLnJlbW90ZSA9IG51bGw7XG59O1xuXG5oZWxwZXJzLnNldEN1cnJlbnRVcmwgPSBmdW5jdGlvbiBzZXRDdXJyZW50VXJsICh1cmwpIHtcbiAgdGhpcy5fY3VycmVudFVybCA9IHVybDtcbn07XG5cbmhlbHBlcnMuZ2V0Q3VycmVudFVybCA9IGZ1bmN0aW9uIGdldEN1cnJlbnRVcmwgKCkge1xuICByZXR1cm4gdGhpcy5fY3VycmVudFVybDtcbn07XG5cbmV4dGVuc2lvbnMuY2xvc2VBbGVydEJlZm9yZVRlc3QgPSBhc3luYyBmdW5jdGlvbiBjbG9zZUFsZXJ0QmVmb3JlVGVzdCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4dGVuc2lvbnMubmF2VG9Jbml0aWFsV2VidmlldyA9IGFzeW5jIGZ1bmN0aW9uIG5hdlRvSW5pdGlhbFdlYnZpZXcgKCkge1xuICBpZiAodGhpcy51c2VOZXdTYWZhcmkoKSkge1xuICAgIGF3YWl0IHRoaXMudHlwZUFuZE5hdlRvVXJsKCk7XG4gIH0gZWxzZSBpZiAoIXRoaXMuaXNSZWFsRGV2aWNlKCkgJiYgdGhpcy5vcHRzLnNhZmFyaSkge1xuICAgIGF3YWl0IHRoaXMubmF2VG9WaWV3VGhyb3VnaEZhdm9yaXRlcygpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHRoaXMubmF2VG9WaWV3V2l0aFRpdGxlKC8uKi8pO1xuICB9XG59O1xuXG5leHRlbnNpb25zLmdldExhdGVzdFdlYnZpZXdDb250ZXh0Rm9yVGl0bGUgPSBhc3luYyBmdW5jdGlvbiBnZXRMYXRlc3RXZWJ2aWV3Q29udGV4dEZvclRpdGxlIChyZWdFeHApIHtcbiAgY29uc3QgY3VycmVudFVybCA9IHRoaXMuZ2V0Q3VycmVudFVybCgpO1xuXG4gIGNvbnN0IGNvbnRleHRzID0gXy5maWx0ZXIoYXdhaXQgdGhpcy5nZXRDb250ZXh0c0FuZFZpZXdzKCksICd2aWV3Jyk7XG5cbiAgaWYgKGN1cnJlbnRVcmwpIHtcbiAgICAvLyBmaXJzdCB0cnkgdG8gbWF0Y2ggYnkgY3VycmVudCB1cmxcbiAgICBmb3IgKGNvbnN0IGN0eCBvZiBjb250ZXh0cykge1xuICAgICAgaWYgKChjdHgudmlldy51cmwgfHwgJycpID09PSB0aGlzLmdldEN1cnJlbnRVcmwoKSkge1xuICAgICAgICByZXR1cm4gY3R4LmlkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGlmIG5vdCwgdHJ5IHRvIG1hdGNoIGJ5IHJlZ3VsYXIgZXhwcmVzc2lvblxuICBmb3IgKGNvbnN0IGN0eCBvZiBjb250ZXh0cykge1xuICAgIGlmICgoY3R4LnZpZXcudGl0bGUgJiYgcmVnRXhwLnRlc3QoY3R4LnZpZXcudGl0bGUpKSB8fCAoY3R4LnZpZXcudXJsICYmIHJlZ0V4cC50ZXN0KGN0eC52aWV3LnVybCkpKSB7XG4gICAgICByZXR1cm4gY3R4LmlkO1xuICAgIH1cbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5pc1dlYkNvbnRleHQgPSBmdW5jdGlvbiBpc1dlYkNvbnRleHQgKCkge1xuICByZXR1cm4gISF0aGlzLmN1ckNvbnRleHQgJiYgdGhpcy5jdXJDb250ZXh0ICE9PSBOQVRJVkVfV0lOO1xufTtcblxuZXh0ZW5zaW9ucy5pc1dlYnZpZXcgPSBmdW5jdGlvbiBpc1dlYnZpZXcgKCkge1xuICByZXR1cm4gdGhpcy5pc1dlYkNvbnRleHQoKTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0TmV3UmVtb3RlRGVidWdnZXIgPSBhc3luYyBmdW5jdGlvbiBnZXROZXdSZW1vdGVEZWJ1Z2dlciAoKSB7XG4gIGxldCBzb2NrZXRQYXRoO1xuICBpZiAoIXRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICBzb2NrZXRQYXRoID0gYXdhaXQgdGhpcy5vcHRzLmRldmljZS5nZXRXZWJJbnNwZWN0b3JTb2NrZXQoKTtcbiAgfVxuICByZXR1cm4gY3JlYXRlUmVtb3RlRGVidWdnZXIoe1xuICAgIGJ1bmRsZUlkOiB0aGlzLm9wdHMuYnVuZGxlSWQsXG4gICAgYWRkaXRpb25hbEJ1bmRsZUlkczogdGhpcy5vcHRzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzLFxuICAgIGlzU2FmYXJpOiB0aGlzLmlzU2FmYXJpKCksXG4gICAgaW5jbHVkZVNhZmFyaTogdGhpcy5vcHRzLmluY2x1ZGVTYWZhcmlJbldlYnZpZXdzLFxuICAgIHVzZU5ld1NhZmFyaTogdGhpcy51c2VOZXdTYWZhcmkoKSxcbiAgICBwYWdlTG9hZE1zOiB0aGlzLnBhZ2VMb2FkTXMsXG4gICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLFxuICAgIHNvY2tldFBhdGgsXG4gICAgcmVtb3RlRGVidWdQcm94eTogdGhpcy5vcHRzLnJlbW90ZURlYnVnUHJveHksXG4gICAgZ2FyYmFnZUNvbGxlY3RPbkV4ZWN1dGU6IHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLnNhZmFyaUdhcmJhZ2VDb2xsZWN0KVxuICAgICAgPyAhIXRoaXMub3B0cy5zYWZhcmlHYXJiYWdlQ29sbGVjdFxuICAgICAgOiBmYWxzZSxcbiAgICB1ZGlkOiB0aGlzLm9wdHMudWRpZCxcbiAgICBsb2dBbGxDb21tdW5pY2F0aW9uOiB0aGlzLm9wdHMuc2FmYXJpTG9nQWxsQ29tbXVuaWNhdGlvbixcbiAgICBsb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcDogdGhpcy5vcHRzLnNhZmFyaUxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wLFxuICAgIHNvY2tldENodW5rU2l6ZTogdGhpcy5vcHRzLnNhZmFyaVNvY2tldENodW5rU2l6ZSxcbiAgICB3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aDogdGhpcy5vcHRzLnNhZmFyaVdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoXG4gIH0sIHRoaXMuaXNSZWFsRGV2aWNlKCkpO1xufTtcblxuLyoqXG4gKiBTZXQgY29udGV4dFxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIGNvbnRleHQgdG8gc2V0LiBJdCBjb3VsZCBiZSAnbnVsbCcgYXMgTkFUSVZFX1dJTi5cbiAqIEBwYXJhbSB7Y2FsbGJhY2t9IGNhbGxiYWNrIFRoZSBjYWxsYmFjay4gKEl0IGlzIG5vdCBjYWxsZWQgaW4gdGhpcyBtZXRob2QpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNraXBSZWFkeUNoZWNrIC0gV2hldGhlciBpdCB3YWl0cyBmb3IgdGhlIG5ldyBjb250ZXh0IGlzIHJlYWR5XG4gKi9cbmNvbW1hbmRzLnNldENvbnRleHQgPSBhc3luYyBmdW5jdGlvbiBzZXRDb250ZXh0IChuYW1lLCBjYWxsYmFjaywgc2tpcFJlYWR5Q2hlY2spIHtcbiAgZnVuY3Rpb24gYWxyZWFkeUluQ29udGV4dCAoZGVzaXJlZCwgY3VycmVudCkge1xuICAgIHJldHVybiAoZGVzaXJlZCA9PT0gY3VycmVudCB8fFxuICAgICAgKGRlc2lyZWQgPT09IG51bGwgJiYgY3VycmVudCA9PT0gTkFUSVZFX1dJTikgfHxcbiAgICAgIChkZXNpcmVkID09PSBOQVRJVkVfV0lOICYmIGN1cnJlbnQgPT09IG51bGwpKTtcbiAgfVxuICBmdW5jdGlvbiBpc05hdGl2ZUNvbnRleHQgKGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dCA9PT0gTkFUSVZFX1dJTiB8fCBjb250ZXh0ID09PSBudWxsO1xuICB9XG5cbiAgLy8gYWxsb3cgdGhlIGZ1bGwgY29udGV4dCBsaXN0IHRvIGJlIHBhc3NlZCBpblxuICBpZiAobmFtZSAmJiBuYW1lLmlkKSB7XG4gICAgbmFtZSA9IG5hbWUuaWQ7XG4gIH1cblxuICBsb2cuZGVidWcoYEF0dGVtcHRpbmcgdG8gc2V0IGNvbnRleHQgdG8gJyR7bmFtZSB8fCBOQVRJVkVfV0lOfScgZnJvbSAnJHt0aGlzLmN1ckNvbnRleHQgPyB0aGlzLmN1ckNvbnRleHQgOiBOQVRJVkVfV0lOfSdgKTtcblxuICBpZiAoYWxyZWFkeUluQ29udGV4dChuYW1lLCB0aGlzLmN1ckNvbnRleHQpIHx8IGFscmVhZHlJbkNvbnRleHQoXy5yZXBsYWNlKG5hbWUsIFdFQlZJRVdfQkFTRSwgJycpLCB0aGlzLmN1ckNvbnRleHQpKSB7XG4gICAgLy8gYWxyZWFkeSBpbiB0aGUgbmFtZWQgY29udGV4dCwgbm8gbmVlZCB0byBkbyBhbnl0aGluZ1xuICAgIGxvZy5kZWJ1ZyhgQWxyZWFkeSBpbiAnJHtuYW1lIHx8IE5BVElWRV9XSU59JyBjb250ZXh0LiBEb2luZyBub3RoaW5nLmApO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaXNOYXRpdmVDb250ZXh0KG5hbWUpKSB7XG4gICAgLy8gc3dpdGNoaW5nIGludG8gdGhlIG5hdGl2ZSBjb250ZXh0XG4gICAgdGhpcy5jdXJDb250ZXh0ID0gbnVsbDtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBzd2l0Y2hpbmcgaW50byBhIHdlYnZpZXcgY29udGV4dFxuXG4gIC8vIGlmIGNvbnRleHRzIGhhdmUgbm90IGFscmVhZHkgYmVlbiByZXRyaWV2ZWQsIGdldCB0aGVtXG4gIGlmIChfLmlzVW5kZWZpbmVkKHRoaXMuY29udGV4dHMpKSB7XG4gICAgYXdhaXQgdGhpcy5nZXRDb250ZXh0cygpO1xuICB9XG5cbiAgbGV0IGNvbnRleHRJZCA9IF8ucmVwbGFjZShuYW1lLCBXRUJWSUVXX0JBU0UsICcnKTtcbiAgaWYgKGNvbnRleHRJZCA9PT0gJycpIHtcbiAgICAvLyBhbGxvdyB1c2VyIHRvIHBhc3MgaW4gXCJXRUJWSUVXXCIgd2l0aG91dCBhbiBpbmRleFxuICAgIC8vIHRoZSBzZWNvbmQgY29udGV4dCB3aWxsIGJlIHRoZSBmaXJzdCB3ZWJ2aWV3IGFzXG4gICAgLy8gdGhlIGZpcnN0IGlzIGFsd2F5cyBOQVRJVkVfQVBQXG4gICAgY29udGV4dElkID0gdGhpcy5jb250ZXh0c1sxXTtcbiAgfVxuICBpZiAoIV8uaW5jbHVkZXModGhpcy5jb250ZXh0cywgY29udGV4dElkKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoQ29udGV4dEVycm9yKCk7XG4gIH1cblxuICBjb25zdCBvbGRDb250ZXh0ID0gdGhpcy5jdXJDb250ZXh0O1xuICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmN1cldpbmRvd0hhbmRsZSA9IGNvbnRleHRJZDtcblxuICAvLyBgY29udGV4dElkYCB3aWxsIGJlIGluIHRoZSBmb3JtIG9mIGBhcHBJZC5wYWdlSWRgIGluIHRoaXMgY2FzZVxuICBjb25zdCBbYXBwSWRLZXksIHBhZ2VJZEtleV0gPSBfLm1hcChjb250ZXh0SWQuc3BsaXQoJy4nKSwgKGlkKSA9PiBwYXJzZUludChpZCwgMTApKTtcbiAgdHJ5IHtcbiAgICB0aGlzLnNlbGVjdGluZ05ld1BhZ2UgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMucmVtb3RlLnNlbGVjdFBhZ2UoYXBwSWRLZXksIHBhZ2VJZEtleSwgc2tpcFJlYWR5Q2hlY2spO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmN1cldpbmRvd0hhbmRsZSA9IG9sZENvbnRleHQ7XG4gICAgdGhyb3cgZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMuc2VsZWN0aW5nTmV3UGFnZSA9IGZhbHNlO1xuICB9XG5cbiAgLy8gYXR0ZW1wdCB0byBzdGFydCBwZXJmb3JtYW5jZSBsb2dnaW5nLCBpZiByZXF1ZXN0ZWRcbiAgaWYgKHRoaXMub3B0cy5lbmFibGVQZXJmb3JtYW5jZUxvZ2dpbmcgJiYgdGhpcy5yZW1vdGUpIHtcbiAgICBsb2cuZGVidWcoYFN0YXJ0aW5nIHBlcmZvcm1hbmNlIGxvZyBvbiAnJHt0aGlzLmN1ckNvbnRleHR9J2ApO1xuICAgIHRoaXMubG9ncy5wZXJmb3JtYW5jZSA9IG5ldyBJT1NQZXJmb3JtYW5jZUxvZyh0aGlzLnJlbW90ZSk7XG4gICAgYXdhaXQgdGhpcy5sb2dzLnBlcmZvcm1hbmNlLnN0YXJ0Q2FwdHVyZSgpO1xuICB9XG5cbiAgLy8gc3RhcnQgc2FmYXJpIGxvZ2dpbmcgaWYgdGhlIGxvZ3MgaGFuZGxlcnMgYXJlIGFjdGl2ZVxuICBpZiAobmFtZSAmJiBuYW1lICE9PSBOQVRJVkVfV0lOICYmIHRoaXMubG9ncykge1xuICAgIGlmICh0aGlzLmxvZ3Muc2FmYXJpQ29uc29sZSkge1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdGUuc3RhcnRDb25zb2xlKHRoaXMubG9ncy5zYWZhcmlDb25zb2xlLmFkZExvZ0xpbmUuYmluZCh0aGlzLmxvZ3Muc2FmYXJpQ29uc29sZSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2dzLnNhZmFyaU5ldHdvcmspIHtcbiAgICAgIGF3YWl0IHRoaXMucmVtb3RlLnN0YXJ0TmV0d29yayh0aGlzLmxvZ3Muc2FmYXJpTmV0d29yay5hZGRMb2dMaW5lLmJpbmQodGhpcy5sb2dzLnNhZmFyaU5ldHdvcmspKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMuY29ubmVjdFRvUmVtb3RlRGVidWdnZXIgPSBhc3luYyBmdW5jdGlvbiBjb25uZWN0VG9SZW1vdGVEZWJ1Z2dlciAoKSB7XG4gIHRoaXMucmVtb3RlID0gYXdhaXQgdGhpcy5nZXROZXdSZW1vdGVEZWJ1Z2dlcigpO1xuXG4gIHRoaXMucmVtb3RlLm9uKFJlbW90ZURlYnVnZ2VyLkVWRU5UX1BBR0VfQ0hBTkdFLCB0aGlzLm9uUGFnZUNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5yZW1vdGUub24oUmVtb3RlRGVidWdnZXIuRVZFTlRfRlJBTUVTX0RFVEFDSEVELCAoKSA9PiB7XG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5jdXJXZWJGcmFtZXMpKSB7XG4gICAgICBsb2cuZGVidWcoYENsZWFyaW5nICR7dXRpbC5wbHVyYWxpemUoJ2ZyYW1lJywgdGhpcy5jdXJXZWJGcmFtZXMubGVuZ3RoLCB0cnVlKX06ICR7dGhpcy5jdXJXZWJGcmFtZXMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgdGhpcy5jdXJXZWJGcmFtZXMgPSBbXTtcbiAgfSk7XG5cbiAgYXdhaXQgdGhpcy5yZW1vdGUuY29ubmVjdCh0aGlzLm9wdHMud2Vidmlld0Nvbm5lY3RUaW1lb3V0KTtcbn07XG5cbmV4dGVuc2lvbnMubGlzdFdlYkZyYW1lcyA9IGFzeW5jIGZ1bmN0aW9uIGxpc3RXZWJGcmFtZXMgKHVzZVVybCA9IHRydWUpIHtcbiAgdXNlVXJsID0gdXNlVXJsICYmICF0aGlzLmlzUmVhbERldmljZSgpICYmICEhdGhpcy5nZXRDdXJyZW50VXJsKCk7XG4gIGxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGJ5IHVybDogJHt1c2VVcmx9ICR7dXNlVXJsID8gYChleHBlY3RlZCB1cmw6ICcke3RoaXMuZ2V0Q3VycmVudFVybCgpfScpYCA6ICcnfWApO1xuXG4gIGNvbnN0IGN1cnJlbnRVcmwgPSB1c2VVcmwgPyB0aGlzLmdldEN1cnJlbnRVcmwoKSA6IHVuZGVmaW5lZDtcbiAgbGV0IHBhZ2VBcnJheSA9IFtdO1xuICBjb25zdCBnZXRXZWJ2aWV3UGFnZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlbW90ZS5zZWxlY3RBcHAoY3VycmVudFVybCwgdGhpcy5vcHRzLndlYnZpZXdDb25uZWN0UmV0cmllcywgdGhpcy5vcHRzLmlnbm9yZUFib3V0QmxhbmtVcmwpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmRlYnVnKGBObyBhdmFpbGFibGUgd2ViIHBhZ2VzOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfTtcblxuICBpZiAodGhpcy5yZW1vdGUgJiYgdGhpcy5yZW1vdGUuYXBwSWRLZXkpIHtcbiAgICAvLyBhbHJlYWR5IGNvbm5lY3RlZFxuICAgIHBhZ2VBcnJheSA9IGF3YWl0IGdldFdlYnZpZXdQYWdlcygpO1xuICB9IGVsc2Uge1xuICAgIGlmICghdGhpcy5yZW1vdGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdFRvUmVtb3RlRGVidWdnZXIoKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZW1vdGUuc2V0Q29ubmVjdGlvbktleSgpO1xuXG4gICAgcGFnZUFycmF5ID0gYXdhaXQgZ2V0V2Vidmlld1BhZ2VzKCk7XG5cbiAgICBjb25zdCBhbGVydEVycm9yTXNnID0gJ0Nsb3NlIGFsZXJ0IGZhaWxlZC4gUmV0cnkuJztcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbCg2LCAxMDAwLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghYXdhaXQgdGhpcy5jbG9zZUFsZXJ0QmVmb3JlVGVzdCgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFsZXJ0RXJyb3JNc2cpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGlmIHRoZSBsb29wIHRvIGNsb3NlIGFsZXJ0cyBmYWlsZWQgdG8gZGlzbWlzcywgaWdub3JlLFxuICAgICAgLy8gb3RoZXJ3aXNlIGxvZyBhbmQgdGhyb3cgdGhlIGVycm9yXG4gICAgICBpZiAoZXJyLm1lc3NhZ2UgIT09IGFsZXJ0RXJyb3JNc2cpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocGFnZUFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIHdlIGhhdmUgbm8gd2ViIGZyYW1lcywgYnV0IGNvbnRpbnVlIGFueXdheVxuICAgIGxvZy5kZWJ1ZygnTm8gd2ViIGZyYW1lcyBmb3VuZC4nKTtcbiAgfVxuICByZXR1cm4gcGFnZUFycmF5O1xufTtcblxuY29tbWFuZHMuZ2V0Q29udGV4dHMgPSBhc3luYyBmdW5jdGlvbiBnZXRDb250ZXh0cyAoKSB7XG4gIGxvZy5kZWJ1ZygnR2V0dGluZyBsaXN0IG9mIGF2YWlsYWJsZSBjb250ZXh0cycpO1xuICBjb25zdCBjb250ZXh0cyA9IGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cyhmYWxzZSk7XG5cbiAgY29uc3QgbWFwRm4gPSB0aGlzLm9wdHMuZnVsbENvbnRleHRMaXN0XG4gICAgPyBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGNvbnRleHQuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgdGl0bGU6IGNvbnRleHQudmlldy50aXRsZSxcbiAgICAgICAgdXJsOiBjb250ZXh0LnZpZXcudXJsLFxuICAgICAgICBidW5kbGVJZDogY29udGV4dC52aWV3LmJ1bmRsZUlkLFxuICAgICAgfTtcbiAgICB9XG4gICAgOiAoY29udGV4dCkgPT4gY29udGV4dC5pZC50b1N0cmluZygpO1xuICByZXR1cm4gY29udGV4dHMubWFwKG1hcEZuKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ29udGV4dFxuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBjb250ZXh0LiBUaGUgbmF0aXZlIGNvbnRleHRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlICdOQVRJVkVfQVBQJyBhbmQgdGhlIHdlYnZpZXdzIHdpbGwgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAnV0VCVklFV194eHgnXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHRpdGxlIC0gVGhlIHRpdGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgd2VidmlldyBjb250ZW50XG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHVybCAtIFRoZSB1cmwgYXNzb2NpYXRlZCB3aXRoIHRoZSB3ZWJ2aWV3IGNvbnRlbnRcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUgY29udGV4dHMgYXZhaWxhYmxlLCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1cmwgYW5kIHRpdGxlIG9mIGVhY2hcbiAqIHdlYnZpZXdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIE9wdGlvbnMgc2V0LCB3aGljaCBjYW4gaW5jbHVkZSBgd2FpdEZvcldlYnZpZXdNc2AgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgcGVyaW9kIHRvIHBvbGwgZm9yIGF2YWlsYWJsZSB3ZWJ2aWV3c1xuICogQHJldHVybnMge0FycmF5fSBMaXN0IG9mIENvbnRleHQgb2JqZWN0c1xuICovXG5leHRlbnNpb25zLm1vYmlsZUdldENvbnRleHRzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0Q29udGV4dHMgKG9wdHMgPSB7fSkge1xuICBsZXQge1xuICAgIHdhaXRGb3JXZWJ2aWV3TXMgPSAwLFxuICB9ID0gb3B0cztcblxuICAvLyBtYWtlIHN1cmUgaXQgaXMgYSBudW1iZXIsIHNvIHRoZSBkdXJhdGlvbiBjaGVjayB3b3JrcyBwcm9wZXJseVxuICBpZiAoIV8uaXNOdW1iZXIod2FpdEZvcldlYnZpZXdNcykpIHtcbiAgICB3YWl0Rm9yV2Vidmlld01zID0gcGFyc2VJbnQod2FpdEZvcldlYnZpZXdNcywgMTApO1xuICAgIGlmIChpc05hTih3YWl0Rm9yV2Vidmlld01zKSkge1xuICAgICAgd2FpdEZvcldlYnZpZXdNcyA9IDA7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY3VyT3B0ID0gdGhpcy5vcHRzLmZ1bGxDb250ZXh0TGlzdDtcbiAgdGhpcy5vcHRzLmZ1bGxDb250ZXh0TGlzdCA9IHRydWU7XG5cbiAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgdHJ5IHtcbiAgICBsZXQgY29udGV4dHM7XG4gICAgZG8ge1xuICAgICAgY29udGV4dHMgPSBhd2FpdCB0aGlzLmdldENvbnRleHRzKCk7XG5cbiAgICAgIGlmIChjb250ZXh0cy5sZW5ndGggPj0gMikge1xuICAgICAgICBsb2cuZGVidWcoYEZvdW5kIHdlYnZpZXcgY29udGV4dCBhZnRlciAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgICAgICByZXR1cm4gY29udGV4dHM7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYE5vIHdlYnZpZXdzIGZvdW5kIGluICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgfSB3aGlsZSAodGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcyA8IHdhaXRGb3JXZWJ2aWV3TXMpO1xuICAgIHJldHVybiBjb250ZXh0cztcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyByZXNldCB0aGUgb3B0aW9uIHNvIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHNcbiAgICB0aGlzLm9wdHMuZnVsbENvbnRleHRMaXN0ID0gY3VyT3B0O1xuICB9XG59O1xuXG5jb21tYW5kcy5zZXRXaW5kb3cgPSBhc3luYyBmdW5jdGlvbiBzZXRXaW5kb3cgKG5hbWUsIHNraXBSZWFkeUNoZWNrKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5zZXRDb250ZXh0KG5hbWUsIF8ubm9vcCwgc2tpcFJlYWR5Q2hlY2spO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyB0cmFuc2xhdGUgdGhlIGVycm9yIGluIHRlcm1zIG9mIHdpbmRvd3NcbiAgICB0aHJvdyBpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob1N1Y2hDb250ZXh0RXJyb3IpXG4gICAgICA/IG5ldyBlcnJvcnMuTm9TdWNoV2luZG93RXJyb3IoKVxuICAgICAgOiBlcnI7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldFdpbmRvd0hhbmRsZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd0hhbmRsZSAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuICBsb2cuZGVidWcoYEdldHRpbmcgY3VycmVudCB3aW5kb3cgaGFuZGxlYCk7XG4gIHJldHVybiB0aGlzLmN1ckNvbnRleHQ7XG59O1xuXG5jb21tYW5kcy5nZXRXaW5kb3dIYW5kbGVzID0gYXN5bmMgZnVuY3Rpb24gZ2V0V2luZG93SGFuZGxlcyAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG4gIGxvZy5kZWJ1ZygnR2V0dGluZyBsaXN0IG9mIGF2YWlsYWJsZSB3aW5kb3cgaGFuZGxlcycpO1xuICBjb25zdCBjb250ZXh0cyA9IGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cyhmYWxzZSk7XG4gIHJldHVybiBjb250ZXh0c1xuICAgIC8vIGdldCByaWQgb2YgdGhlIG5hdGl2ZSBhcHAgY29udGV4dFxuICAgIC5maWx0ZXIoKGNvbnRleHQpID0+IGNvbnRleHQuaWQgIT09IE5BVElWRV9XSU4pXG4gICAgLy8gZ2V0IHRoZSBgYXBwLmlkYCBmb3JtYXQgZXhwZWN0ZWRcbiAgICAubWFwKChjb250ZXh0KSA9PiBjb250ZXh0LnZpZXcuaWQudG9TdHJpbmcoKSk7XG59O1xuXG5leHRlbnNpb25zLm9uUGFnZUNoYW5nZSA9IGFzeW5jIGZ1bmN0aW9uIG9uUGFnZUNoYW5nZSAocGFnZUNoYW5nZU5vdGlmaWNhdGlvbikge1xuICBsb2cuZGVidWcoYFJlbW90ZSBkZWJ1Z2dlciBub3RpZmllZCB1cyBvZiBhIG5ldyBwYWdlIGxpc3Rpbmc6ICR7SlNPTi5zdHJpbmdpZnkocGFnZUNoYW5nZU5vdGlmaWNhdGlvbil9YCk7XG4gIGlmICh0aGlzLnNlbGVjdGluZ05ld1BhZ2UpIHtcbiAgICBsb2cuZGVidWcoJ1dlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIHNlbGVjdGluZyBhIHBhZ2UsIGlnbm9yaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghdGhpcy5yZW1vdGUgfHwgIXRoaXMucmVtb3RlLmlzQ29ubmVjdGVkKSB7XG4gICAgbG9nLmRlYnVnKCdXZSBoYXZlIG5vdCB5ZXQgY29ubmVjdGVkLCBpZ25vcmluZycpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHthcHBJZEtleSwgcGFnZUFycmF5fSA9IHBhZ2VDaGFuZ2VOb3RpZmljYXRpb247XG5cbiAgbGV0IG5ld0lkcyA9IFtdO1xuICBsZXQgbmV3UGFnZXMgPSBbXTtcbiAgbGV0IGtleUlkID0gbnVsbDtcblxuICAvLyBDaGVja3MgaWYgYSBVUkwgaXMgYmxhY2tsaXN0ZWQgaW4gdGhlICdzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMnIGNhcGFiaWxpdHlcbiAgZnVuY3Rpb24gaXNVcmxJZ25vcmVkICh1cmwsIHNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcykge1xuICAgIGNvbnN0IGlnbm9yZWRIb3N0cyA9IChzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMgfHwgJycpXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcCgoYikgPT4gYi50cmltKCkpXG4gICAgICAuZmlsdGVyKChiKSA9PiAhXy5pc0VtcHR5KGIpKTtcbiAgICBmb3IgKGNvbnN0IGlnbm9yZWRIb3N0IG9mIGlnbm9yZWRIb3N0cykge1xuICAgICAgaWYgKGlnbm9yZWRIb3N0ID09PSAnYWJvdXQ6YmxhbmsnICYmIHVybCA9PT0gJ2Fib3V0OmJsYW5rJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaG9zdG5hbWUgPSBuZXcgVVJMKHVybCkuaG9zdG5hbWU7XG4gICAgICAgICAgaWYgKGhvc3RuYW1lID09PSBpZ25vcmVkSG9zdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgICAvLyBkbyBub3RoaW5nIGlmIGludmFsaWQgVVJMXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChjb25zdCBwYWdlIG9mIHBhZ2VBcnJheSkge1xuICAgIGNvbnN0IGlkID0gcGFnZS5pZC50b1N0cmluZygpO1xuICAgIG5ld0lkcy5wdXNoKGlkKTtcbiAgICBpZiAocGFnZS5pc0tleSkge1xuICAgICAga2V5SWQgPSBpZDtcbiAgICB9XG4gICAgY29uc3QgY29udGV4dElkID0gYCR7YXBwSWRLZXl9LiR7aWR9YDtcblxuICAgIC8vIGFkZCBpZiB0aGlzIGlzIGEgbmV3IHBhZ2VcbiAgICBpZiAoIV8uaW5jbHVkZXModGhpcy5jb250ZXh0cywgY29udGV4dElkKSkge1xuICAgICAgaWYgKGlzVXJsSWdub3JlZChwYWdlLnVybCwgdGhpcy5vcHRzLnNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lcykpIHtcbiAgICAgICAgbG9nLmluZm8oYE5vdCB0cmFja2luZyAnJHtwYWdlLnVybH0nIHBhZ2UgYmVjYXVzZSBpdCBpcyBibGFja2xpc3RlZC4gYCArXG4gICAgICAgICAgYCdzYWZhcmlJZ25vcmVXZWJIb3N0bmFtZXMnPSR7dGhpcy5vcHRzLnNhZmFyaUlnbm9yZVdlYkhvc3RuYW1lc31gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1BhZ2VzLnB1c2goaWQpO1xuICAgICAgICB0aGlzLmNvbnRleHRzLnB1c2goY29udGV4dElkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWtleUlkKSB7XG4gICAgLy8gaWYgdGhlcmUgaXMgbm8ga2V5IGlkLCBwdWxsIHRoZSBmaXJzdCBpZCBmcm9tIHRoZSBwYWdlIGFycmF5IGFuZCB1c2UgdGhhdFxuICAgIC8vIGFzIGEgc3RhbmQgaW5cbiAgICBsb2cuZGVidWcoJ05vIGtleSBpZCBmb3VuZC4gQ2hvb3NpbmcgZmlyc3QgaWQgZnJvbSBwYWdlIGFycmF5Jyk7XG4gICAga2V5SWQgPSBuZXdJZHNbMF0gfHwgbnVsbDtcbiAgfVxuXG4gIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLmN1ckNvbnRleHQpKSB7XG4gICAgbG9nLmRlYnVnKCdXZSBkbyBub3QgYXBwZWFyIHRvIGhhdmUgd2luZG93IHNldCB5ZXQsIGlnbm9yaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgW2N1ckFwcElkS2V5LCBjdXJQYWdlSWRLZXldID0gdGhpcy5jdXJDb250ZXh0LnNwbGl0KCcuJyk7XG5cbiAgaWYgKGN1ckFwcElkS2V5ICE9PSBhcHBJZEtleSkge1xuICAgIGxvZy5kZWJ1ZygnUGFnZSBjaGFuZ2Ugbm90IHJlZmVycmluZyB0byBjdXJyZW50bHkgc2VsZWN0ZWQgYXBwLCBpZ25vcmluZy4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgbmV3UGFnZSA9IG51bGw7XG4gIGlmIChuZXdQYWdlcy5sZW5ndGgpIHtcbiAgICBuZXdQYWdlID0gXy5sYXN0KG5ld1BhZ2VzKTtcbiAgICBsb2cuZGVidWcoYFdlIGhhdmUgbmV3IHBhZ2VzLCBzZWxlY3RpbmcgcGFnZSAnJHtuZXdQYWdlfSdgKTtcbiAgfSBlbHNlIGlmICghXy5pbmNsdWRlcyhuZXdJZHMsIGN1clBhZ2VJZEtleSkpIHtcbiAgICBsb2cuZGVidWcoJ05ldyBwYWdlIGxpc3RpbmcgZnJvbSByZW1vdGUgZGVidWdnZXIgZG9lcyBub3QgY29udGFpbiAnICtcbiAgICAgICAgICAgICAgICAgJ2N1cnJlbnQgd2luZG93OyBhc3N1bWluZyBpdCBpcyBjbG9zZWQnKTtcbiAgICBpZiAoIXV0aWwuaGFzVmFsdWUoa2V5SWQpKSB7XG4gICAgICBsb2cuZXJyb3IoJ0RvIG5vdCBoYXZlIG91ciBjdXJyZW50IHdpbmRvdyBhbnltb3JlLCBhbmQgdGhlcmUgJyArXG4gICAgICAgICAgICAgICAgICAgJ2FyZSBub3QgYW55IG1vcmUgdG8gbG9hZCEgRG9pbmcgbm90aGluZy4uLicpO1xuICAgICAgdGhpcy5zZXRDdXJyZW50VXJsKHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBEZWJ1Z2dlciBhbHJlYWR5IHNlbGVjdGVkIHBhZ2UgJyR7a2V5SWR9JywgYCArXG4gICAgICAgICAgICAgICAgIGBjb25maXJtaW5nIHRoYXQgY2hvaWNlLmApO1xuICAgIHRoaXMuY3VyQ29udGV4dCA9IGAke2FwcElkS2V5fS4ke2tleUlkfWA7XG4gICAgbmV3UGFnZSA9IGtleUlkO1xuICB9IGVsc2Uge1xuICAgIC8vIGF0IHRoaXMgcG9pbnQsIHRoZXJlIGFyZSBubyBuZXcgcGFnZXMsIGFuZCB0aGUgY3VycmVudCBwYWdlIHN0aWxsIGV4aXN0c1xuICAgIGxvZy5kZWJ1ZygnQ2hlY2tpbmcgaWYgcGFnZSBuZWVkcyB0byBsb2FkJyk7XG4gICAgLy8gSWYgYSB3aW5kb3cgbmF2aWdhdGVzIHRvIGFuIGFuY2hvciBpdCBkb2Vzbid0IGFsd2F5cyBmaXJlIGEgcGFnZVxuICAgIC8vIGNhbGxiYWNrIGV2ZW50LiBMZXQncyBjaGVjayBpZiB3ZSB3b3VuZCB1cCBpbiBzdWNoIGEgc2l0dWF0aW9uLlxuICAgIGNvbnN0IG5lZWRzUGFnZUxvYWQgPSAoKCkgPT4ge1xuICAgICAgLy8gbmVlZCB0byBtYXAgdGhlIHBhZ2UgaWRzIHRvIGNvbnRleHQgaWRzXG4gICAgICBjb25zdCBjb250ZXh0QXJyYXkgPSBfLm1hcChwYWdlQXJyYXksIChwYWdlKSA9PiBgJHthcHBJZEtleX0uJHtwYWdlLmlkfWApO1xuICAgICAgLy8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgY29udGV4dCBleGlzdHMgaW4gYm90aCBvdXIgcmVjb3JkZWQgY29udGV4dHMsXG4gICAgICAvLyBhbmQgdGhlIHBhZ2UgYXJyYXlcbiAgICAgIHJldHVybiAhXy5pc0VxdWFsKF8uZmluZCh0aGlzLmNvbnRleHRzLCB0aGlzLmN1ckNvbnRleHQpLCBfLmZpbmQoY29udGV4dEFycmF5LCB0aGlzLmN1ckNvbnRleHQpKTtcbiAgICB9KSgpO1xuXG4gICAgaWYgKG5lZWRzUGFnZUxvYWQpIHtcbiAgICAgIGxvZy5kZWJ1ZygnUGFnZSBsb2FkIG5lZWRlZC4gTG9hZGluZy4uLicpO1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdGUucGFnZUxvYWQoKTtcbiAgICB9XG5cbiAgICBsb2cuZGVidWcoJ05ldyBwYWdlIGxpc3RpbmcgaXMgc2FtZSBhcyBvbGQsIGRvaW5nIG5vdGhpbmcnKTtcbiAgfVxuXG4gIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYWdlIGxpc3RpbmcgaXNuJ3QgaW5kaWNhdGluZyBhIHJlZGlyZWN0XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMuY3VyQ29udGV4dCkpIHtcbiAgICBsZXQgY3VycmVudFBhZ2VJZCA9IHBhcnNlSW50KF8ubGFzdCh0aGlzLmN1ckNvbnRleHQuc3BsaXQoJy4nKSksIDEwKTtcbiAgICBsZXQgcGFnZSA9IF8uZmluZChwYWdlQXJyYXksIChwKSA9PiBwYXJzZUludChwLmlkLCAxMCkgPT09IGN1cnJlbnRQYWdlSWQpO1xuICAgIGlmIChwYWdlICYmIHBhZ2UudXJsICE9PSB0aGlzLmdldEN1cnJlbnRVcmwoKSkge1xuICAgICAgbG9nLmRlYnVnKGBSZWRpcmVjdGVkIGZyb20gJyR7dGhpcy5nZXRDdXJyZW50VXJsKCl9JyB0byAnJHtwYWdlLnVybH0nYCk7XG4gICAgICB0aGlzLnNldEN1cnJlbnRVcmwocGFnZS51cmwpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1dGlsLmhhc1ZhbHVlKG5ld1BhZ2UpKSB7XG4gICAgdGhpcy5zZWxlY3RpbmdOZXdQYWdlID0gdHJ1ZTtcbiAgICBjb25zdCBvbGRDb250ZXh0ID0gdGhpcy5jdXJDb250ZXh0O1xuICAgIHRoaXMuY3VyQ29udGV4dCA9IGAke2FwcElkS2V5fS4ke25ld1BhZ2V9YDtcbiAgICAvLyBkbyBub3Qgd2FpdCwgYXMgdGhpcyBjYW4gdGFrZSBhIGxvbmcgdGltZSwgYW5kIHRoZSByZXNwb25zZSBpcyBub3QgbmVjZXNzYXJ5XG4gICAgdGhpcy5yZW1vdGUuc2VsZWN0UGFnZShhcHBJZEtleSwgcGFyc2VJbnQobmV3UGFnZSwgMTApKVxuICAgICAgLmNhdGNoKChlcnIpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3NcbiAgICAgICAgbG9nLndhcm4oYEZhaWxlZCB0byBzZWxlY3QgcGFnZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgdGhpcy5jdXJDb250ZXh0ID0gb2xkQ29udGV4dDtcbiAgICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0aW5nTmV3UGFnZSA9IGZhbHNlO1xuICB9XG4gIHRoaXMud2luZG93SGFuZGxlQ2FjaGUgPSBwYWdlQXJyYXk7XG59O1xuXG5cbk9iamVjdC5hc3NpZ24oY29tbWFuZHMsIGV4dGVuc2lvbnMsIGhlbHBlcnMpO1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -45,7 +45,8 @@ extensions.execute = async function execute(script, args) {
45
45
  return await this.executeMobile(script, _lodash.default.isArray(args) ? args[0] : args);
46
46
  } else if (this.isWebContext()) {
47
47
  args = this.convertElementsForAtoms(args);
48
- return await this.executeAtom('execute_script', [script, args]);
48
+ const result = await this.executeAtom('execute_script', [script, args]);
49
+ return this.cacheWebElements(result);
49
50
  } else {
50
51
  throw new _appiumBaseDriver.errors.NotImplementedError();
51
52
  }
@@ -137,4 +138,4 @@ var _default = extensions;
137
138
  exports.default = _default;require('source-map-support').install();
138
139
 
139
140
 
140
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sIm5hbWVzIjpbImV4dGVuc2lvbnMiLCJyZWNlaXZlQXN5bmNSZXNwb25zZSIsInN0YXR1cyIsInZhbHVlIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwidXRpbCIsImhhc1ZhbHVlIiwiYXN5bmNQcm9taXNlIiwid2FybiIsInJlamVjdCIsIm1lc3NhZ2UiLCJfIiwiaXNTdHJpbmciLCJlcnJvciIsInN0YWNrdHJhY2UiLCJyZXNvbHZlIiwiZXhlY3V0ZSIsInNjcmlwdCIsImFyZ3MiLCJtYXRjaCIsInJlcGxhY2UiLCJ0cmltIiwiZXhlY3V0ZU1vYmlsZSIsImlzQXJyYXkiLCJpc1dlYkNvbnRleHQiLCJjb252ZXJ0RWxlbWVudHNGb3JBdG9tcyIsImV4ZWN1dGVBdG9tIiwiZXJyb3JzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImV4ZWN1dGVBc3luYyIsImFzeW5jV2FpdE1zIiwicHJvbWlzZSIsInJlbW90ZSIsImV4ZWN1dGVBdG9tQXN5bmMiLCJjdXJXZWJGcmFtZXMiLCJ3YWl0Rm9yQXRvbSIsIm1vYmlsZUNvbW1hbmQiLCJvcHRzIiwiY29tbWFuZE1hcCIsInRhcCIsInNjcm9sbCIsInNlbGVjdFBpY2tlcldoZWVsVmFsdWUiLCJzd2lwZSIsInBpbmNoIiwiZG91YmxlVGFwIiwidHdvRmluZ2VyVGFwIiwidGFwV2l0aE51bWJlck9mVGFwcyIsInRvdWNoQW5kSG9sZCIsImRyYWdGcm9tVG9Gb3JEdXJhdGlvbiIsInJvdGF0ZUVsZW1lbnQiLCJhbGVydCIsInNldFBhc3RlYm9hcmQiLCJnZXRQYXN0ZWJvYXJkIiwic291cmNlIiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsQXBwIiwiaXNBcHBJbnN0YWxsZWQiLCJyZW1vdmVBcHAiLCJsYXVuY2hBcHAiLCJ0ZXJtaW5hdGVBcHAiLCJxdWVyeUFwcFN0YXRlIiwiYWN0aXZhdGVBcHAiLCJsaXN0QXBwcyIsInZpZXdwb3J0U2NyZWVuc2hvdCIsInZpZXdwb3J0UmVjdCIsInN0YXJ0UGVyZlJlY29yZCIsInN0b3BQZXJmUmVjb3JkIiwiaW5zdGFsbENlcnRpZmljYXRlIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJiYXR0ZXJ5SW5mbyIsImRldmljZUluZm8iLCJnZXREZXZpY2VUaW1lIiwiYWN0aXZlQXBwSW5mbyIsImRldmljZVNjcmVlbkluZm8iLCJwcmVzc0J1dHRvbiIsImVucm9sbEJpb21ldHJpYyIsInNlbmRCaW9tZXRyaWNNYXRjaCIsImlzQmlvbWV0cmljRW5yb2xsZWQiLCJjbGVhcktleWNoYWlucyIsImdldFBlcm1pc3Npb24iLCJzZXRQZXJtaXNzaW9uIiwicmVzZXRQZXJtaXNzaW9uIiwiZ2V0QXBwZWFyYW5jZSIsInNldEFwcGVhcmFuY2UiLCJzaXJpQ29tbWFuZCIsImRlbGV0ZUZpbGUiLCJkZWxldGVGb2xkZXIiLCJzdGFydEF1ZGlvUmVjb3JkaW5nIiwic3RvcEF1ZGlvUmVjb3JkaW5nIiwicnVuWENUZXN0IiwiaW5zdGFsbFhDVGVzdEJ1bmRsZSIsImxpc3RYQ1Rlc3RCdW5kbGVzIiwibGlzdFhDVGVzdHNJblRlc3RCdW5kbGUiLCJwdXNoTm90aWZpY2F0aW9uIiwiZXhwZWN0Tm90aWZpY2F0aW9uIiwicGVyZm9ybUlvSGlkRXZlbnQiLCJjb25maWd1cmVMb2NhbGl6YXRpb24iLCJyZXNldExvY2F0aW9uU2VydmljZSIsImhhcyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJrZXlzIiwiam9pbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUcsRUFBbkI7O0FBRUFBLFVBQVUsQ0FBQ0Msb0JBQVgsR0FBa0MsZUFBZUEsb0JBQWYsQ0FBcUNDLE1BQXJDLEVBQTZDQyxLQUE3QyxFQUFvRDtBQUNwRkMsa0JBQUlDLEtBQUosQ0FBVyw0QkFBMkJDLElBQUksQ0FBQ0MsU0FBTCxDQUFlSixLQUFmLENBQXNCLEVBQTVEOztB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QSxNQUFJLENBQUN2RixnQkFBRXdGLEdBQUYsQ0FBTTdELFVBQU4sRUFBa0JGLGFBQWxCLENBQUwsRUFBdUM7QUFDckMsVUFBTSxJQUFJVCx5QkFBT3lFLG1CQUFYLENBQWdDLDJCQUEwQmhFLGFBQWMsV0FBVXpCLGdCQUFFMEYsSUFBRixDQUFPL0QsVUFBUCxFQUFtQmdFLElBQW5CLENBQXdCLElBQXhCLENBQThCLDBCQUFoSCxDQUFOO0FBQ0Q7O0FBQ0QsU0FBTyxNQUFNLEtBQUtoRSxVQUFVLENBQUNGLGFBQUQsQ0FBZixFQUFnQ0MsSUFBaEMsQ0FBYjtBQUNELENBMUdEOztlQTRHZXhDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgZXJyb3JzLCBlcnJvckZyb21Db2RlLCBlcnJvckZyb21XM0NKc29uQ29kZVxufSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcblxuY29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5leHRlbnNpb25zLnJlY2VpdmVBc3luY1Jlc3BvbnNlID0gYXN5bmMgZnVuY3Rpb24gcmVjZWl2ZUFzeW5jUmVzcG9uc2UgKHN0YXR1cywgdmFsdWUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgYXN5bmMgcmVzcG9uc2U6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy5hc3luY1Byb21pc2UpKSB7XG4gICAgbG9nLndhcm4oYFJlY2VpdmVkIGFzeW5jIHJlc3BvbnNlIHdoZW4gd2Ugd2VyZSBub3QgZXhwZWN0aW5nIG9uZSEgYCArXG4gICAgICBgUmVzcG9uc2Ugd2FzOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodXRpbC5oYXNWYWx1ZShzdGF0dXMpICYmIHN0YXR1cyAhPT0gMCkge1xuICAgIC8vIE1KU09OV1BcbiAgICByZXR1cm4gdGhpcy5hc3luY1Byb21pc2UucmVqZWN0KGVycm9yRnJvbUNvZGUoc3RhdHVzLCB2YWx1ZS5tZXNzYWdlKSk7XG4gIH1cbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKHN0YXR1cykgJiYgdmFsdWUgJiYgXy5pc1N0cmluZyh2YWx1ZS5lcnJvcikpIHtcbiAgICAvLyBXM0NcbiAgICByZXR1cm4gdGhpcy5hc3luY1Byb21pc2UucmVqZWN0KGVycm9yRnJvbVczQ0pzb25Db2RlKHZhbHVlLmVycm9yLCB2YWx1ZS5tZXNzYWdlLCB2YWx1ZS5zdGFja3RyYWNlKSk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlc29sdmUodmFsdWUpO1xufTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZSAoc2NyaXB0LCBhcmdzKSB7XG4gIGlmIChzY3JpcHQubWF0Y2goL15tb2JpbGU6LykpIHtcbiAgICBzY3JpcHQgPSBzY3JpcHQucmVwbGFjZSgvXm1vYmlsZTovLCAnJykudHJpbSgpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVNb2JpbGUoc2NyaXB0LCBfLmlzQXJyYXkoYXJncykgPyBhcmdzWzBdIDogYXJncyk7XG4gIH0gZWxzZSBpZiAodGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIGFyZ3MgPSB0aGlzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zKGFyZ3MpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIGFyZ3NdKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlQXN5bmMgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXN5bmMgKHNjcmlwdCwgYXJncykge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGFyZ3MgPSB0aGlzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zKGFyZ3MpO1xuICB0aGlzLmFzeW5jV2FpdE1zID0gdGhpcy5hc3luY1dhaXRNcyB8fCAwO1xuICBjb25zdCBwcm9taXNlID0gdGhpcy5yZW1vdGUuZXhlY3V0ZUF0b21Bc3luYygnZXhlY3V0ZV9hc3luY19zY3JpcHQnLCBbc2NyaXB0LCBhcmdzLCB0aGlzLmFzeW5jV2FpdE1zXSwgdGhpcy5jdXJXZWJGcmFtZXMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy53YWl0Rm9yQXRvbShwcm9taXNlKTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVNb2JpbGUgKG1vYmlsZUNvbW1hbmQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBjb21tYW5kTWFwID0ge1xuICAgIC8vcmVnaW9uIGdlc3R1cmVzIHN1cHBvcnRcbiAgICB0YXA6ICdtb2JpbGVUYXAnLFxuICAgIHNjcm9sbDogJ21vYmlsZVNjcm9sbCcsXG4gICAgc2VsZWN0UGlja2VyV2hlZWxWYWx1ZTogJ21vYmlsZVNlbGVjdFBpY2tlcldoZWVsVmFsdWUnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY4LXN3aXBlbGVmdD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzQtc3dpcGVyaWdodD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2Njctc3dpcGV1cD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjQtc3dpcGVkb3duP2xhbmd1YWdlPW9iamNcbiAgICBzd2lwZTogJ21vYmlsZVN3aXBlJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2OS1waW5jaHdpdGhzY2FsZT9sYW5ndWFnZT1vYmpjXG4gICAgcGluY2g6ICdtb2JpbGVQaW5jaCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzMtZG91YmxldGFwP2xhbmd1YWdlPW9iamNcbiAgICBkb3VibGVUYXA6ICdtb2JpbGVEb3VibGVUYXAnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4Njc1LXR3b2ZpbmdlcnRhcD9sYW5ndWFnZT1vYmpjXG4gICAgdHdvRmluZ2VyVGFwOiAnbW9iaWxlVHdvRmluZ2VyVGFwJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3MS10YXB3aXRobnVtYmVyb2Z0YXBzP2xhbmd1YWdlPW9iamNcbiAgICB0YXBXaXRoTnVtYmVyT2ZUYXBzOiAnbW9iaWxlVGFwV2l0aE51bWJlck9mVGFwcycsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjMtcHJlc3Nmb3JkdXJhdGlvbj9sYW5ndWFnZT1vYmpjXG4gICAgdG91Y2hBbmRIb2xkOiAnbW9iaWxlVG91Y2hBbmRIb2xkJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3MC1wcmVzc2ZvcmR1cmF0aW9uP2xhbmd1YWdlPW9iamNcbiAgICBkcmFnRnJvbVRvRm9yRHVyYXRpb246ICdtb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24nLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY1LXJvdGF0ZT9sYW5ndWFnZT1vYmpjXG4gICAgcm90YXRlRWxlbWVudDogJ21vYmlsZVJvdGF0ZUVsZW1lbnQnLFxuXG4gICAgLy9lbmRyZWdpb24gZ2VzdHVyZXMgc3VwcG9ydFxuICAgIGFsZXJ0OiAnbW9iaWxlSGFuZGxlQWxlcnQnLFxuXG4gICAgc2V0UGFzdGVib2FyZDogJ21vYmlsZVNldFBhc3RlYm9hcmQnLFxuICAgIGdldFBhc3RlYm9hcmQ6ICdtb2JpbGVHZXRQYXN0ZWJvYXJkJyxcblxuICAgIHNvdXJjZTogJ21vYmlsZUdldFNvdXJjZScsXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICAvL3JlZ2lvbiBtdWx0aXBsZSBhcHBzIG1hbmFnZW1lbnRcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcmVtb3ZlQXBwOiAnbW9iaWxlUmVtb3ZlQXBwJyxcbiAgICBsYXVuY2hBcHA6ICdtb2JpbGVMYXVuY2hBcHAnLFxuICAgIHRlcm1pbmF0ZUFwcDogJ21vYmlsZVRlcm1pbmF0ZUFwcCcsXG4gICAgcXVlcnlBcHBTdGF0ZTogJ21vYmlsZVF1ZXJ5QXBwU3RhdGUnLFxuICAgIGFjdGl2YXRlQXBwOiAnbW9iaWxlQWN0aXZhdGVBcHAnLFxuICAgIGxpc3RBcHBzOiAnbW9iaWxlTGlzdEFwcHMnLFxuICAgIC8vZW5kcmVnaW9uIG11bHRpcGxlIGFwcHMgbWFuYWdlbWVudFxuXG4gICAgdmlld3BvcnRTY3JlZW5zaG90OiAnZ2V0Vmlld3BvcnRTY3JlZW5zaG90JyxcbiAgICB2aWV3cG9ydFJlY3Q6ICdnZXRWaWV3cG9ydFJlY3QnLFxuXG4gICAgc3RhcnRQZXJmUmVjb3JkOiAnbW9iaWxlU3RhcnRQZXJmUmVjb3JkJyxcbiAgICBzdG9wUGVyZlJlY29yZDogJ21vYmlsZVN0b3BQZXJmUmVjb3JkJyxcblxuICAgIGluc3RhbGxDZXJ0aWZpY2F0ZTogJ21vYmlsZUluc3RhbGxDZXJ0aWZpY2F0ZScsXG5cbiAgICBzdGFydExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdGFydExvZ3NCcm9hZGNhc3QnLFxuICAgIHN0b3BMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RvcExvZ3NCcm9hZGNhc3QnLFxuXG4gICAgYmF0dGVyeUluZm86ICdtb2JpbGVHZXRCYXR0ZXJ5SW5mbycsXG4gICAgZGV2aWNlSW5mbzogJ21vYmlsZUdldERldmljZUluZm8nLFxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcbiAgICBhY3RpdmVBcHBJbmZvOiAnbW9iaWxlR2V0QWN0aXZlQXBwSW5mbycsXG4gICAgZGV2aWNlU2NyZWVuSW5mbzogJ2dldFNjcmVlbkluZm8nLFxuXG4gICAgcHJlc3NCdXR0b246ICdtb2JpbGVQcmVzc0J1dHRvbicsXG5cbiAgICBlbnJvbGxCaW9tZXRyaWM6ICdtb2JpbGVFbnJvbGxCaW9tZXRyaWMnLFxuICAgIHNlbmRCaW9tZXRyaWNNYXRjaDogJ21vYmlsZVNlbmRCaW9tZXRyaWNNYXRjaCcsXG4gICAgaXNCaW9tZXRyaWNFbnJvbGxlZDogJ21vYmlsZUlzQmlvbWV0cmljRW5yb2xsZWQnLFxuXG4gICAgY2xlYXJLZXljaGFpbnM6ICdtb2JpbGVDbGVhcktleWNoYWlucycsXG5cbiAgICBnZXRQZXJtaXNzaW9uOiAnbW9iaWxlR2V0UGVybWlzc2lvbicsXG4gICAgc2V0UGVybWlzc2lvbjogJ21vYmlsZVNldFBlcm1pc3Npb25zJyxcbiAgICByZXNldFBlcm1pc3Npb246ICdtb2JpbGVSZXNldFBlcm1pc3Npb24nLFxuXG4gICAgZ2V0QXBwZWFyYW5jZTogJ21vYmlsZUdldEFwcGVhcmFuY2UnLFxuICAgIHNldEFwcGVhcmFuY2U6ICdtb2JpbGVTZXRBcHBlYXJhbmNlJyxcblxuICAgIHNpcmlDb21tYW5kOiAnbW9iaWxlU2lyaUNvbW1hbmQnLFxuXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuICAgIGRlbGV0ZUZvbGRlcjogJ21vYmlsZURlbGV0ZUZvbGRlcicsXG5cbiAgICBzdGFydEF1ZGlvUmVjb3JkaW5nOiAnc3RhcnRBdWRpb1JlY29yZGluZycsXG4gICAgc3RvcEF1ZGlvUmVjb3JkaW5nOiAnc3RvcEF1ZGlvUmVjb3JkaW5nJyxcblxuICAgIC8vIFhDVGVzdFxuICAgIHJ1blhDVGVzdDogJ21vYmlsZVJ1blhDVGVzdCcsXG4gICAgaW5zdGFsbFhDVGVzdEJ1bmRsZTogJ21vYmlsZUluc3RhbGxYQ1Rlc3RCdW5kbGUnLFxuICAgIGxpc3RYQ1Rlc3RCdW5kbGVzOiAnbW9iaWxlTGlzdFhDVGVzdEJ1bmRsZXMnLFxuICAgIGxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlOiAnbW9iaWxlTGlzdFhDVGVzdHNJblRlc3RCdW5kbGUnLFxuXG4gICAgcHVzaE5vdGlmaWNhdGlvbjogJ21vYmlsZVB1c2hOb3RpZmljYXRpb24nLFxuICAgIGV4cGVjdE5vdGlmaWNhdGlvbjogJ21vYmlsZUV4cGVjdE5vdGlmaWNhdGlvbicsXG5cbiAgICBwZXJmb3JtSW9IaWRFdmVudDogJ21vYmlsZVBlcmZvcm1Jb0hpZEV2ZW50JyxcblxuICAgIGNvbmZpZ3VyZUxvY2FsaXphdGlvbjogJ21vYmlsZUNvbmZpZ3VyZUxvY2FsaXphdGlvbicsXG5cbiAgICByZXNldExvY2F0aW9uU2VydmljZTogJ21vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKGNvbW1hbmRNYXAsIG1vYmlsZUNvbW1hbmQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duQ29tbWFuZEVycm9yKGBVbmtub3duIG1vYmlsZSBjb21tYW5kICcke21vYmlsZUNvbW1hbmR9Jy4gT25seSAke18ua2V5cyhjb21tYW5kTWFwKS5qb2luKCcsICcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW2NvbW1hbmRNYXBbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2V4ZWN1dGUuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
141
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sIm5hbWVzIjpbImV4dGVuc2lvbnMiLCJyZWNlaXZlQXN5bmNSZXNwb25zZSIsInN0YXR1cyIsInZhbHVlIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwidXRpbCIsImhhc1ZhbHVlIiwiYXN5bmNQcm9taXNlIiwid2FybiIsInJlamVjdCIsIm1lc3NhZ2UiLCJfIiwiaXNTdHJpbmciLCJlcnJvciIsInN0YWNrdHJhY2UiLCJyZXNvbHZlIiwiZXhlY3V0ZSIsInNjcmlwdCIsImFyZ3MiLCJtYXRjaCIsInJlcGxhY2UiLCJ0cmltIiwiZXhlY3V0ZU1vYmlsZSIsImlzQXJyYXkiLCJpc1dlYkNvbnRleHQiLCJjb252ZXJ0RWxlbWVudHNGb3JBdG9tcyIsInJlc3VsdCIsImV4ZWN1dGVBdG9tIiwiY2FjaGVXZWJFbGVtZW50cyIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJleGVjdXRlQXN5bmMiLCJhc3luY1dhaXRNcyIsInByb21pc2UiLCJyZW1vdGUiLCJleGVjdXRlQXRvbUFzeW5jIiwiY3VyV2ViRnJhbWVzIiwid2FpdEZvckF0b20iLCJtb2JpbGVDb21tYW5kIiwib3B0cyIsImNvbW1hbmRNYXAiLCJ0YXAiLCJzY3JvbGwiLCJzZWxlY3RQaWNrZXJXaGVlbFZhbHVlIiwic3dpcGUiLCJwaW5jaCIsImRvdWJsZVRhcCIsInR3b0ZpbmdlclRhcCIsInRhcFdpdGhOdW1iZXJPZlRhcHMiLCJ0b3VjaEFuZEhvbGQiLCJkcmFnRnJvbVRvRm9yRHVyYXRpb24iLCJyb3RhdGVFbGVtZW50IiwiYWxlcnQiLCJzZXRQYXN0ZWJvYXJkIiwiZ2V0UGFzdGVib2FyZCIsInNvdXJjZSIsImdldENvbnRleHRzIiwiaW5zdGFsbEFwcCIsImlzQXBwSW5zdGFsbGVkIiwicmVtb3ZlQXBwIiwibGF1bmNoQXBwIiwidGVybWluYXRlQXBwIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwibGlzdEFwcHMiLCJ2aWV3cG9ydFNjcmVlbnNob3QiLCJ2aWV3cG9ydFJlY3QiLCJzdGFydFBlcmZSZWNvcmQiLCJzdG9wUGVyZlJlY29yZCIsImluc3RhbGxDZXJ0aWZpY2F0ZSIsInN0YXJ0TG9nc0Jyb2FkY2FzdCIsInN0b3BMb2dzQnJvYWRjYXN0IiwiYmF0dGVyeUluZm8iLCJkZXZpY2VJbmZvIiwiZ2V0RGV2aWNlVGltZSIsImFjdGl2ZUFwcEluZm8iLCJkZXZpY2VTY3JlZW5JbmZvIiwicHJlc3NCdXR0b24iLCJlbnJvbGxCaW9tZXRyaWMiLCJzZW5kQmlvbWV0cmljTWF0Y2giLCJpc0Jpb21ldHJpY0Vucm9sbGVkIiwiY2xlYXJLZXljaGFpbnMiLCJnZXRQZXJtaXNzaW9uIiwic2V0UGVybWlzc2lvbiIsInJlc2V0UGVybWlzc2lvbiIsImdldEFwcGVhcmFuY2UiLCJzZXRBcHBlYXJhbmNlIiwic2lyaUNvbW1hbmQiLCJkZWxldGVGaWxlIiwiZGVsZXRlRm9sZGVyIiwic3RhcnRBdWRpb1JlY29yZGluZyIsInN0b3BBdWRpb1JlY29yZGluZyIsInJ1blhDVGVzdCIsImluc3RhbGxYQ1Rlc3RCdW5kbGUiLCJsaXN0WENUZXN0QnVuZGxlcyIsImxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlIiwicHVzaE5vdGlmaWNhdGlvbiIsImV4cGVjdE5vdGlmaWNhdGlvbiIsInBlcmZvcm1Jb0hpZEV2ZW50IiwiY29uZmlndXJlTG9jYWxpemF0aW9uIiwicmVzZXRMb2NhdGlvblNlcnZpY2UiLCJoYXMiLCJVbmtub3duQ29tbWFuZEVycm9yIiwia2V5cyIsImpvaW4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBRUEsTUFBTUEsVUFBVSxHQUFHLEVBQW5COztBQUVBQSxVQUFVLENBQUNDLG9CQUFYLEdBQWtDLGVBQWVBLG9CQUFmLENBQXFDQyxNQUFyQyxFQUE2Q0MsS0FBN0MsRUFBb0Q7QUFDcEZDLGtCQUFJQyxLQUFKLENBQVcsNEJBQTJCQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUosS0FBZixDQUFzQixFQUE1RDs7QUFDQSxNQUFJLENBQUNLLG9CQUFLQyxRQUFMLENBQWMsS0FBS0MsWUFBbkIsQ0FBTCxFQUF1QztBQUNyQ04sb0JBQUlPLElBQUosQ0FBVSwwREFBRCxHQUNOLGlCQUFnQkwsSUFBSSxDQUFDQyxTQUFMLENBQWVKLEtBQWYsQ0FBc0IsRUFEekM7O0FBRUE7QUFDRDs7QUFFRCxNQUFJSyxvQkFBS0MsUUFBTCxDQUFjUCxNQUFkLEtBQXlCQSxNQUFNLEtBQUssQ0FBeEMsRUFBMkM7QUFFekMsV0FBTyxLQUFLUSxZQUFMLENBQWtCRSxNQUFsQixDQUF5QixxQ0FBY1YsTUFBZCxFQUFzQkMsS0FBSyxDQUFDVSxPQUE1QixDQUF6QixDQUFQO0FBQ0Q7O0FBQ0QsTUFBSSxDQUFDTCxvQkFBS0MsUUFBTCxDQUFjUCxNQUFkLENBQUQsSUFBMEJDLEtBQTFCLElBQW1DVyxnQkFBRUMsUUFBRixDQUFXWixLQUFLLENBQUNhLEtBQWpCLENBQXZDLEVBQWdFO0FBRTlELFdBQU8sS0FBS04sWUFBTCxDQUFrQkUsTUFBbEIsQ0FBeUIsNENBQXFCVCxLQUFLLENBQUNhLEtBQTNCLEVBQWtDYixLQUFLLENBQUNVLE9BQXhDLEVBQWlEVixLQUFLLENBQUNjLFVBQXZELENBQXpCLENBQVA7QUFDRDs7QUFDRCxTQUFPLEtBQUtQLFlBQUwsQ0FBa0JRLE9BQWxCLENBQTBCZixLQUExQixDQUFQO0FBQ0QsQ0FqQkQ7O0FBbUJBSCxVQUFVLENBQUNtQixPQUFYLEdBQXFCLGVBQWVBLE9BQWYsQ0FBd0JDLE1BQXhCLEVBQWdDQyxJQUFoQyxFQUFzQztBQUN6RCxNQUFJRCxNQUFNLENBQUNFLEtBQVAsQ0FBYSxVQUFiLENBQUosRUFBOEI7QUFDNUJGLElBQUFBLE1BQU0sR0FBR0EsTUFBTSxDQUFDRyxPQUFQLENBQWUsVUFBZixFQUEyQixFQUEzQixFQUErQkMsSUFBL0IsRUFBVDtBQUNBLFdBQU8sTUFBTSxLQUFLQyxhQUFMLENBQW1CTCxNQUFuQixFQUEyQk4sZ0JBQUVZLE9BQUYsQ0FBVUwsSUFBVixJQUFrQkEsSUFBSSxDQUFDLENBQUQsQ0FBdEIsR0FBNEJBLElBQXZELENBQWI7QUFDRCxHQUhELE1BR08sSUFBSSxLQUFLTSxZQUFMLEVBQUosRUFBeUI7QUFDOUJOLElBQUFBLElBQUksR0FBRyxLQUFLTyx1QkFBTCxDQUE2QlAsSUFBN0IsQ0FBUDtBQUNBLFVBQU1RLE1BQU0sR0FBRyxNQUFNLEtBQUtDLFdBQUwsQ0FBaUIsZ0JBQWpCLEVBQW1DLENBQUNWLE1BQUQsRUFBU0MsSUFBVCxDQUFuQyxDQUFyQjtBQUNBLFdBQU8sS0FBS1UsZ0JBQUwsQ0FBc0JGLE1BQXRCLENBQVA7QUFDRCxHQUpNLE1BSUE7QUFDTCxVQUFNLElBQUlHLHlCQUFPQyxtQkFBWCxFQUFOO0FBQ0Q7QUFDRixDQVhEOztBQWFBakMsVUFBVSxDQUFDa0MsWUFBWCxHQUEwQixlQUFlQSxZQUFmLENBQTZCZCxNQUE3QixFQUFxQ0MsSUFBckMsRUFBMkM7QUFDbkUsTUFBSSxDQUFDLEtBQUtNLFlBQUwsRUFBTCxFQUEwQjtBQUN4QixVQUFNLElBQUlLLHlCQUFPQyxtQkFBWCxFQUFOO0FBQ0Q7O0FBRURaLEVBQUFBLElBQUksR0FBRyxLQUFLTyx1QkFBTCxDQUE2QlAsSUFBN0IsQ0FBUDtBQUNBLE9BQUtjLFdBQUwsR0FBbUIsS0FBS0EsV0FBTCxJQUFvQixDQUF2QztBQUNBLFFBQU1DLE9BQU8sR0FBRyxLQUFLQyxNQUFMLENBQVlDLGdCQUFaLENBQTZCLHNCQUE3QixFQUFxRCxDQUFDbEIsTUFBRCxFQUFTQyxJQUFULEVBQWUsS0FBS2MsV0FBcEIsQ0FBckQsRUFBdUYsS0FBS0ksWUFBNUYsQ0FBaEI7QUFDQSxTQUFPLE1BQU0sS0FBS0MsV0FBTCxDQUFpQkosT0FBakIsQ0FBYjtBQUNELENBVEQ7O0FBV0FwQyxVQUFVLENBQUN5QixhQUFYLEdBQTJCLGVBQWVBLGFBQWYsQ0FBOEJnQixhQUE5QixFQUE2Q0MsSUFBSSxHQUFHLEVBQXBELEVBQXdEO0FBQ2pGLFFBQU1DLFVBQVUsR0FBRztBQUVqQkMsSUFBQUEsR0FBRyxFQUFFLFdBRlk7QUFHakJDLElBQUFBLE1BQU0sRUFBRSxjQUhTO0FBSWpCQyxJQUFBQSxzQkFBc0IsRUFBRSw4QkFKUDtBQVNqQkMsSUFBQUEsS0FBSyxFQUFFLGFBVFU7QUFXakJDLElBQUFBLEtBQUssRUFBRSxhQVhVO0FBYWpCQyxJQUFBQSxTQUFTLEVBQUUsaUJBYk07QUFlakJDLElBQUFBLFlBQVksRUFBRSxvQkFmRztBQWlCakJDLElBQUFBLG1CQUFtQixFQUFFLDJCQWpCSjtBQW1CakJDLElBQUFBLFlBQVksRUFBRSxvQkFuQkc7QUFxQmpCQyxJQUFBQSxxQkFBcUIsRUFBRSw2QkFyQk47QUF1QmpCQyxJQUFBQSxhQUFhLEVBQUUscUJBdkJFO0FBMEJqQkMsSUFBQUEsS0FBSyxFQUFFLG1CQTFCVTtBQTRCakJDLElBQUFBLGFBQWEsRUFBRSxxQkE1QkU7QUE2QmpCQyxJQUFBQSxhQUFhLEVBQUUscUJBN0JFO0FBK0JqQkMsSUFBQUEsTUFBTSxFQUFFLGlCQS9CUztBQWdDakJDLElBQUFBLFdBQVcsRUFBRSxtQkFoQ0k7QUFtQ2pCQyxJQUFBQSxVQUFVLEVBQUUsa0JBbkNLO0FBb0NqQkMsSUFBQUEsY0FBYyxFQUFFLHNCQXBDQztBQXFDakJDLElBQUFBLFNBQVMsRUFBRSxpQkFyQ007QUFzQ2pCQyxJQUFBQSxTQUFTLEVBQUUsaUJBdENNO0FBdUNqQkMsSUFBQUEsWUFBWSxFQUFFLG9CQXZDRztBQXdDakJDLElBQUFBLGFBQWEsRUFBRSxxQkF4Q0U7QUF5Q2pCQyxJQUFBQSxXQUFXLEVBQUUsbUJBekNJO0FBMENqQkMsSUFBQUEsUUFBUSxFQUFFLGdCQTFDTztBQTZDakJDLElBQUFBLGtCQUFrQixFQUFFLHVCQTdDSDtBQThDakJDLElBQUFBLFlBQVksRUFBRSxpQkE5Q0c7QUFnRGpCQyxJQUFBQSxlQUFlLEVBQUUsdUJBaERBO0FBaURqQkMsSUFBQUEsY0FBYyxFQUFFLHNCQWpEQztBQW1EakJDLElBQUFBLGtCQUFrQixFQUFFLDBCQW5ESDtBQXFEakJDLElBQUFBLGtCQUFrQixFQUFFLDBCQXJESDtBQXNEakJDLElBQUFBLGlCQUFpQixFQUFFLHlCQXRERjtBQXdEakJDLElBQUFBLFdBQVcsRUFBRSxzQkF4REk7QUF5RGpCQyxJQUFBQSxVQUFVLEVBQUUscUJBekRLO0FBMERqQkMsSUFBQUEsYUFBYSxFQUFFLHFCQTFERTtBQTJEakJDLElBQUFBLGFBQWEsRUFBRSx3QkEzREU7QUE0RGpCQyxJQUFBQSxnQkFBZ0IsRUFBRSxlQTVERDtBQThEakJDLElBQUFBLFdBQVcsRUFBRSxtQkE5REk7QUFnRWpCQyxJQUFBQSxlQUFlLEVBQUUsdUJBaEVBO0FBaUVqQkMsSUFBQUEsa0JBQWtCLEVBQUUsMEJBakVIO0FBa0VqQkMsSUFBQUEsbUJBQW1CLEVBQUUsMkJBbEVKO0FBb0VqQkMsSUFBQUEsY0FBYyxFQUFFLHNCQXBFQztBQXNFakJDLElBQUFBLGFBQWEsRUFBRSxxQkF0RUU7QUF1RWpCQyxJQUFBQSxhQUFhLEVBQUUsc0JBdkVFO0FBd0VqQkMsSUFBQUEsZUFBZSxFQUFFLHVCQXhFQTtBQTBFakJDLElBQUFBLGFBQWEsRUFBRSxxQkExRUU7QUEyRWpCQyxJQUFBQSxhQUFhLEVBQUUscUJBM0VFO0FBNkVqQkMsSUFBQUEsV0FBVyxFQUFFLG1CQTdFSTtBQStFakJDLElBQUFBLFVBQVUsRUFBRSxrQkEvRUs7QUFnRmpCQyxJQUFBQSxZQUFZLEVBQUUsb0JBaEZHO0FBa0ZqQkMsSUFBQUEsbUJBQW1CLEVBQUUscUJBbEZKO0FBbUZqQkMsSUFBQUEsa0JBQWtCLEVBQUUsb0JBbkZIO0FBc0ZqQkMsSUFBQUEsU0FBUyxFQUFFLGlCQXRGTTtBQXVGakJDLElBQUFBLG1CQUFtQixFQUFFLDJCQXZGSjtBQXdGakJDLElBQUFBLGlCQUFpQixFQUFFLHlCQXhGRjtBQXlGakJDLElBQUFBLHVCQUF1QixFQUFFLCtCQXpGUjtBQTJGakJDLElBQUFBLGdCQUFnQixFQUFFLHdCQTNGRDtBQTRGakJDLElBQUFBLGtCQUFrQixFQUFFLDBCQTVGSDtBQThGakJDLElBQUFBLGlCQUFpQixFQUFFLHlCQTlGRjtBQWdHakJDLElBQUFBLHFCQUFxQixFQUFFLDZCQWhHTjtBQWtHakJDLElBQUFBLG9CQUFvQixFQUFFO0FBbEdMLEdBQW5COztBQXFHQSxNQUFJLENBQUN6RixnQkFBRTBGLEdBQUYsQ0FBTTdELFVBQU4sRUFBa0JGLGFBQWxCLENBQUwsRUFBdUM7QUFDckMsVUFBTSxJQUFJVCx5QkFBT3lFLG1CQUFYLENBQWdDLDJCQUEwQmhFLGFBQWMsV0FBVTNCLGdCQUFFNEYsSUFBRixDQUFPL0QsVUFBUCxFQUFtQmdFLElBQW5CLENBQXdCLElBQXhCLENBQThCLDBCQUFoSCxDQUFOO0FBQ0Q7O0FBQ0QsU0FBTyxNQUFNLEtBQUtoRSxVQUFVLENBQUNGLGFBQUQsQ0FBZixFQUFnQ0MsSUFBaEMsQ0FBYjtBQUNELENBMUdEOztlQTRHZTFDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgZXJyb3JzLCBlcnJvckZyb21Db2RlLCBlcnJvckZyb21XM0NKc29uQ29kZVxufSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcblxuY29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5leHRlbnNpb25zLnJlY2VpdmVBc3luY1Jlc3BvbnNlID0gYXN5bmMgZnVuY3Rpb24gcmVjZWl2ZUFzeW5jUmVzcG9uc2UgKHN0YXR1cywgdmFsdWUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgYXN5bmMgcmVzcG9uc2U6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy5hc3luY1Byb21pc2UpKSB7XG4gICAgbG9nLndhcm4oYFJlY2VpdmVkIGFzeW5jIHJlc3BvbnNlIHdoZW4gd2Ugd2VyZSBub3QgZXhwZWN0aW5nIG9uZSEgYCArXG4gICAgICBgUmVzcG9uc2Ugd2FzOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodXRpbC5oYXNWYWx1ZShzdGF0dXMpICYmIHN0YXR1cyAhPT0gMCkge1xuICAgIC8vIE1KU09OV1BcbiAgICByZXR1cm4gdGhpcy5hc3luY1Byb21pc2UucmVqZWN0KGVycm9yRnJvbUNvZGUoc3RhdHVzLCB2YWx1ZS5tZXNzYWdlKSk7XG4gIH1cbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKHN0YXR1cykgJiYgdmFsdWUgJiYgXy5pc1N0cmluZyh2YWx1ZS5lcnJvcikpIHtcbiAgICAvLyBXM0NcbiAgICByZXR1cm4gdGhpcy5hc3luY1Byb21pc2UucmVqZWN0KGVycm9yRnJvbVczQ0pzb25Db2RlKHZhbHVlLmVycm9yLCB2YWx1ZS5tZXNzYWdlLCB2YWx1ZS5zdGFja3RyYWNlKSk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlc29sdmUodmFsdWUpO1xufTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZSAoc2NyaXB0LCBhcmdzKSB7XG4gIGlmIChzY3JpcHQubWF0Y2goL15tb2JpbGU6LykpIHtcbiAgICBzY3JpcHQgPSBzY3JpcHQucmVwbGFjZSgvXm1vYmlsZTovLCAnJykudHJpbSgpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVNb2JpbGUoc2NyaXB0LCBfLmlzQXJyYXkoYXJncykgPyBhcmdzWzBdIDogYXJncyk7XG4gIH0gZWxzZSBpZiAodGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIGFyZ3MgPSB0aGlzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zKGFyZ3MpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgYXJnc10pO1xuICAgIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMocmVzdWx0KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlQXN5bmMgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXN5bmMgKHNjcmlwdCwgYXJncykge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGFyZ3MgPSB0aGlzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zKGFyZ3MpO1xuICB0aGlzLmFzeW5jV2FpdE1zID0gdGhpcy5hc3luY1dhaXRNcyB8fCAwO1xuICBjb25zdCBwcm9taXNlID0gdGhpcy5yZW1vdGUuZXhlY3V0ZUF0b21Bc3luYygnZXhlY3V0ZV9hc3luY19zY3JpcHQnLCBbc2NyaXB0LCBhcmdzLCB0aGlzLmFzeW5jV2FpdE1zXSwgdGhpcy5jdXJXZWJGcmFtZXMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy53YWl0Rm9yQXRvbShwcm9taXNlKTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVNb2JpbGUgKG1vYmlsZUNvbW1hbmQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBjb21tYW5kTWFwID0ge1xuICAgIC8vcmVnaW9uIGdlc3R1cmVzIHN1cHBvcnRcbiAgICB0YXA6ICdtb2JpbGVUYXAnLFxuICAgIHNjcm9sbDogJ21vYmlsZVNjcm9sbCcsXG4gICAgc2VsZWN0UGlja2VyV2hlZWxWYWx1ZTogJ21vYmlsZVNlbGVjdFBpY2tlcldoZWVsVmFsdWUnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY4LXN3aXBlbGVmdD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzQtc3dpcGVyaWdodD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2Njctc3dpcGV1cD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjQtc3dpcGVkb3duP2xhbmd1YWdlPW9iamNcbiAgICBzd2lwZTogJ21vYmlsZVN3aXBlJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2OS1waW5jaHdpdGhzY2FsZT9sYW5ndWFnZT1vYmpjXG4gICAgcGluY2g6ICdtb2JpbGVQaW5jaCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzMtZG91YmxldGFwP2xhbmd1YWdlPW9iamNcbiAgICBkb3VibGVUYXA6ICdtb2JpbGVEb3VibGVUYXAnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4Njc1LXR3b2ZpbmdlcnRhcD9sYW5ndWFnZT1vYmpjXG4gICAgdHdvRmluZ2VyVGFwOiAnbW9iaWxlVHdvRmluZ2VyVGFwJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3MS10YXB3aXRobnVtYmVyb2Z0YXBzP2xhbmd1YWdlPW9iamNcbiAgICB0YXBXaXRoTnVtYmVyT2ZUYXBzOiAnbW9iaWxlVGFwV2l0aE51bWJlck9mVGFwcycsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjMtcHJlc3Nmb3JkdXJhdGlvbj9sYW5ndWFnZT1vYmpjXG4gICAgdG91Y2hBbmRIb2xkOiAnbW9iaWxlVG91Y2hBbmRIb2xkJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3MC1wcmVzc2ZvcmR1cmF0aW9uP2xhbmd1YWdlPW9iamNcbiAgICBkcmFnRnJvbVRvRm9yRHVyYXRpb246ICdtb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24nLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY1LXJvdGF0ZT9sYW5ndWFnZT1vYmpjXG4gICAgcm90YXRlRWxlbWVudDogJ21vYmlsZVJvdGF0ZUVsZW1lbnQnLFxuXG4gICAgLy9lbmRyZWdpb24gZ2VzdHVyZXMgc3VwcG9ydFxuICAgIGFsZXJ0OiAnbW9iaWxlSGFuZGxlQWxlcnQnLFxuXG4gICAgc2V0UGFzdGVib2FyZDogJ21vYmlsZVNldFBhc3RlYm9hcmQnLFxuICAgIGdldFBhc3RlYm9hcmQ6ICdtb2JpbGVHZXRQYXN0ZWJvYXJkJyxcblxuICAgIHNvdXJjZTogJ21vYmlsZUdldFNvdXJjZScsXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICAvL3JlZ2lvbiBtdWx0aXBsZSBhcHBzIG1hbmFnZW1lbnRcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcmVtb3ZlQXBwOiAnbW9iaWxlUmVtb3ZlQXBwJyxcbiAgICBsYXVuY2hBcHA6ICdtb2JpbGVMYXVuY2hBcHAnLFxuICAgIHRlcm1pbmF0ZUFwcDogJ21vYmlsZVRlcm1pbmF0ZUFwcCcsXG4gICAgcXVlcnlBcHBTdGF0ZTogJ21vYmlsZVF1ZXJ5QXBwU3RhdGUnLFxuICAgIGFjdGl2YXRlQXBwOiAnbW9iaWxlQWN0aXZhdGVBcHAnLFxuICAgIGxpc3RBcHBzOiAnbW9iaWxlTGlzdEFwcHMnLFxuICAgIC8vZW5kcmVnaW9uIG11bHRpcGxlIGFwcHMgbWFuYWdlbWVudFxuXG4gICAgdmlld3BvcnRTY3JlZW5zaG90OiAnZ2V0Vmlld3BvcnRTY3JlZW5zaG90JyxcbiAgICB2aWV3cG9ydFJlY3Q6ICdnZXRWaWV3cG9ydFJlY3QnLFxuXG4gICAgc3RhcnRQZXJmUmVjb3JkOiAnbW9iaWxlU3RhcnRQZXJmUmVjb3JkJyxcbiAgICBzdG9wUGVyZlJlY29yZDogJ21vYmlsZVN0b3BQZXJmUmVjb3JkJyxcblxuICAgIGluc3RhbGxDZXJ0aWZpY2F0ZTogJ21vYmlsZUluc3RhbGxDZXJ0aWZpY2F0ZScsXG5cbiAgICBzdGFydExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdGFydExvZ3NCcm9hZGNhc3QnLFxuICAgIHN0b3BMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RvcExvZ3NCcm9hZGNhc3QnLFxuXG4gICAgYmF0dGVyeUluZm86ICdtb2JpbGVHZXRCYXR0ZXJ5SW5mbycsXG4gICAgZGV2aWNlSW5mbzogJ21vYmlsZUdldERldmljZUluZm8nLFxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcbiAgICBhY3RpdmVBcHBJbmZvOiAnbW9iaWxlR2V0QWN0aXZlQXBwSW5mbycsXG4gICAgZGV2aWNlU2NyZWVuSW5mbzogJ2dldFNjcmVlbkluZm8nLFxuXG4gICAgcHJlc3NCdXR0b246ICdtb2JpbGVQcmVzc0J1dHRvbicsXG5cbiAgICBlbnJvbGxCaW9tZXRyaWM6ICdtb2JpbGVFbnJvbGxCaW9tZXRyaWMnLFxuICAgIHNlbmRCaW9tZXRyaWNNYXRjaDogJ21vYmlsZVNlbmRCaW9tZXRyaWNNYXRjaCcsXG4gICAgaXNCaW9tZXRyaWNFbnJvbGxlZDogJ21vYmlsZUlzQmlvbWV0cmljRW5yb2xsZWQnLFxuXG4gICAgY2xlYXJLZXljaGFpbnM6ICdtb2JpbGVDbGVhcktleWNoYWlucycsXG5cbiAgICBnZXRQZXJtaXNzaW9uOiAnbW9iaWxlR2V0UGVybWlzc2lvbicsXG4gICAgc2V0UGVybWlzc2lvbjogJ21vYmlsZVNldFBlcm1pc3Npb25zJyxcbiAgICByZXNldFBlcm1pc3Npb246ICdtb2JpbGVSZXNldFBlcm1pc3Npb24nLFxuXG4gICAgZ2V0QXBwZWFyYW5jZTogJ21vYmlsZUdldEFwcGVhcmFuY2UnLFxuICAgIHNldEFwcGVhcmFuY2U6ICdtb2JpbGVTZXRBcHBlYXJhbmNlJyxcblxuICAgIHNpcmlDb21tYW5kOiAnbW9iaWxlU2lyaUNvbW1hbmQnLFxuXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuICAgIGRlbGV0ZUZvbGRlcjogJ21vYmlsZURlbGV0ZUZvbGRlcicsXG5cbiAgICBzdGFydEF1ZGlvUmVjb3JkaW5nOiAnc3RhcnRBdWRpb1JlY29yZGluZycsXG4gICAgc3RvcEF1ZGlvUmVjb3JkaW5nOiAnc3RvcEF1ZGlvUmVjb3JkaW5nJyxcblxuICAgIC8vIFhDVGVzdFxuICAgIHJ1blhDVGVzdDogJ21vYmlsZVJ1blhDVGVzdCcsXG4gICAgaW5zdGFsbFhDVGVzdEJ1bmRsZTogJ21vYmlsZUluc3RhbGxYQ1Rlc3RCdW5kbGUnLFxuICAgIGxpc3RYQ1Rlc3RCdW5kbGVzOiAnbW9iaWxlTGlzdFhDVGVzdEJ1bmRsZXMnLFxuICAgIGxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlOiAnbW9iaWxlTGlzdFhDVGVzdHNJblRlc3RCdW5kbGUnLFxuXG4gICAgcHVzaE5vdGlmaWNhdGlvbjogJ21vYmlsZVB1c2hOb3RpZmljYXRpb24nLFxuICAgIGV4cGVjdE5vdGlmaWNhdGlvbjogJ21vYmlsZUV4cGVjdE5vdGlmaWNhdGlvbicsXG5cbiAgICBwZXJmb3JtSW9IaWRFdmVudDogJ21vYmlsZVBlcmZvcm1Jb0hpZEV2ZW50JyxcblxuICAgIGNvbmZpZ3VyZUxvY2FsaXphdGlvbjogJ21vYmlsZUNvbmZpZ3VyZUxvY2FsaXphdGlvbicsXG5cbiAgICByZXNldExvY2F0aW9uU2VydmljZTogJ21vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKGNvbW1hbmRNYXAsIG1vYmlsZUNvbW1hbmQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duQ29tbWFuZEVycm9yKGBVbmtub3duIG1vYmlsZSBjb21tYW5kICcke21vYmlsZUNvbW1hbmR9Jy4gT25seSAke18ua2V5cyhjb21tYW5kTWFwKS5qb2luKCcsICcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW2NvbW1hbmRNYXBbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2V4ZWN1dGUuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
@@ -9,9 +9,7 @@ exports.helpers = exports.default = exports.commands = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
12
- var _lodash = _interopRequireDefault(require("lodash"));
13
-
14
- var _xmldom = _interopRequireDefault(require("xmldom"));
12
+ var _xmldom = _interopRequireDefault(require("@xmldom/xmldom"));
15
13
 
16
14
  var _js2xmlparser = _interopRequireDefault(require("js2xmlparser2"));
17
15
 
@@ -20,7 +18,9 @@ let commands = {},
20
18
  extensions = {};
21
19
  exports.helpers = helpers;
22
20
  exports.commands = commands;
23
- const APPIUM_SRC_XML = '<?xml version="1.0" encoding="UTF-8"?><AppiumAUT/>';
21
+ const APPIUM_AUT_TAG = 'AppiumAUT';
22
+ const APPIUM_SRC_XML = `<?xml version="1.0" encoding="UTF-8"?><${APPIUM_AUT_TAG}/>`;
23
+ const APPIUM_TAG_PATTERN = new RegExp(`</?${APPIUM_AUT_TAG}/?>`);
24
24
 
25
25
  commands.getPageSource = async function getPageSource() {
26
26
  if (this.isWebContext()) {
@@ -29,7 +29,7 @@ commands.getPageSource = async function getPageSource() {
29
29
  }
30
30
 
31
31
  if ((await this.settings.getSettings()).useJSONSource) {
32
- let srcTree = await this.mobileGetSource({
32
+ const srcTree = await this.mobileGetSource({
33
33
  format: 'json'
34
34
  });
35
35
  return getSourceXml(getTreeForXML(srcTree));
@@ -39,21 +39,23 @@ commands.getPageSource = async function getPageSource() {
39
39
  };
40
40
 
41
41
  helpers.getNativePageSource = async function getNativePageSource() {
42
- let srcTree = await this.proxyCommand('/source', 'GET');
43
- let parser = new _xmldom.default.DOMParser();
44
- let tree = parser.parseFromString(srcTree);
45
- let doc = parser.parseFromString(APPIUM_SRC_XML);
42
+ const srcTree = await this.proxyCommand(`/source?scope=${APPIUM_AUT_TAG}`, 'GET');
43
+
44
+ if (APPIUM_TAG_PATTERN.test(srcTree)) {
45
+ return srcTree;
46
+ }
47
+
48
+ const parser = new _xmldom.default.DOMParser();
49
+ const tree = parser.parseFromString(srcTree);
50
+ const doc = parser.parseFromString(APPIUM_SRC_XML);
46
51
  doc.documentElement.appendChild(tree.documentElement);
47
52
  return new _xmldom.default.XMLSerializer().serializeToString(doc);
48
53
  };
49
54
 
50
55
  helpers.mobileGetSource = async function mobileGetSource(opts = {}) {
51
- if (!_lodash.default.isString(opts.format)) {
52
- return await this.getNativePageSource();
53
- }
54
-
55
56
  const paramsMap = {
56
- format: opts.format
57
+ format: opts.format || 'xml',
58
+ scope: APPIUM_AUT_TAG
57
59
  };
58
60
 
59
61
  if (opts.excludedAttributes) {
@@ -126,4 +128,4 @@ var _default = extensions;
126
128
  exports.default = _default;require('source-map-support').install();
127
129
 
128
130
 
129
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9zb3VyY2UuanMiXSwibmFtZXMiOlsiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsIkFQUElVTV9TUkNfWE1MIiwiZ2V0UGFnZVNvdXJjZSIsImlzV2ViQ29udGV4dCIsInNjcmlwdCIsImV4ZWN1dGVBdG9tIiwic2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsInVzZUpTT05Tb3VyY2UiLCJzcmNUcmVlIiwibW9iaWxlR2V0U291cmNlIiwiZm9ybWF0IiwiZ2V0U291cmNlWG1sIiwiZ2V0VHJlZUZvclhNTCIsImdldE5hdGl2ZVBhZ2VTb3VyY2UiLCJwcm94eUNvbW1hbmQiLCJwYXJzZXIiLCJ4bWxkb20iLCJET01QYXJzZXIiLCJ0cmVlIiwicGFyc2VGcm9tU3RyaW5nIiwiZG9jIiwiZG9jdW1lbnRFbGVtZW50IiwiYXBwZW5kQ2hpbGQiLCJYTUxTZXJpYWxpemVyIiwic2VyaWFsaXplVG9TdHJpbmciLCJvcHRzIiwiXyIsImlzU3RyaW5nIiwicGFyYW1zTWFwIiwiZXhjbHVkZWRBdHRyaWJ1dGVzIiwiZXhjbHVkZWRfYXR0cmlidXRlcyIsInF1ZXJ5IiwiT2JqZWN0IiwiZW50cmllcyIsIm1hcCIsImsiLCJ2IiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwiam9pbiIsImdldFRyZWUiLCJlbGVtZW50IiwiZWxlbWVudEluZGV4IiwicGFyZW50UGF0aCIsImN1clBhdGgiLCJyZWN0Iiwic3VidHJlZSIsInR5cGUiLCJlbmFibGVkIiwicGFyc2VJbnQiLCJpc0VuYWJsZWQiLCJ2aXNpYmxlIiwiaXNWaXNpYmxlIiwieCIsInkiLCJ3aWR0aCIsImhlaWdodCIsIm5hbWUiLCJsYWJlbCIsInZhbHVlIiwiaSIsImNoaWxkcmVuIiwibGVuZ3RoIiwicHVzaCIsImpzb25Tb3VyY2UiLCJ3cmFwQXJyYXkiLCJlbGVtZW50TmFtZSIsImRlY2xhcmF0aW9uIiwiaW5jbHVkZSIsInByZXR0eVByaW50aW5nIiwiaW5kZW50U3RyaW5nIiwiYXNz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RUFBcURGLENBQUMsRUFBdEQsRUFBMEQ7QUFDeERkLE1BQUFBLE9BQU8sQ0FBQyxHQUFELENBQVAsQ0FBYWlCLElBQWIsQ0FBa0J2QixPQUFPLENBQUNDLE9BQU8sQ0FBQ29CLFFBQVIsQ0FBaUJELENBQWpCLENBQUQsRUFBc0JBLENBQXRCLEVBQXlCaEIsT0FBekIsQ0FBekI7QUFDRDs7QUFDRCxXQUFPO0FBQ0wsT0FBRSxrQkFBaUJILE9BQU8sQ0FBQ00sSUFBSyxFQUFoQyxHQUFvQ0Q7QUFEL0IsS0FBUDtBQUdEOztBQUNELE1BQUkzQixJQUFJLEdBQUdxQixPQUFPLENBQUMvQixPQUFELEVBQVUsQ0FBVixFQUFhLEVBQWIsQ0FBbEI7QUFDQSxTQUFPVSxJQUFQO0FBQ0Q7O0FBRUQsU0FBU1AsWUFBVCxDQUF1Qm9ELFVBQXZCLEVBQW1DO0FBQ2pDLFNBQU8sMkJBQU8sV0FBUCxFQUFvQkEsVUFBcEIsRUFBZ0M7QUFDckNDLElBQUFBLFNBQVMsRUFBRTtBQUFDakIsTUFBQUEsT0FBTyxFQUFFLEtBQVY7QUFBaUJrQixNQUFBQSxXQUFXLEVBQUU7QUFBOUIsS0FEMEI7QUFFckNDLElBQUFBLFdBQVcsRUFBRTtBQUFDQyxNQUFBQSxPQUFPLEVBQUU7QUFBVixLQUZ3QjtBQUdyQ0MsSUFBQUEsY0FBYyxFQUFFO0FBQUNDLE1BQUFBLFlBQVksRUFBRTtBQUFmO0FBSHFCLEdBQWhDLENBQVA7QUFLRDs7QUFHRHJDLE1BQU0sQ0FBQ3NDLE1BQVAsQ0FBY3ZFLFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB4bWxkb20gZnJvbSAneG1sZG9tJztcbmltcG9ydCBqczJ4bWwgZnJvbSAnanMyeG1scGFyc2VyMic7XG5cblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb25zdCBBUFBJVU1fU1JDX1hNTCA9ICc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz48QXBwaXVtQVVULz4nO1xuXG5cbmNvbW1hbmRzLmdldFBhZ2VTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiBnZXRQYWdlU291cmNlICgpIHtcbiAgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICBjb25zdCBzY3JpcHQgPSAncmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUwnO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIFtdXSk7XG4gIH1cblxuICBpZiAoKGF3YWl0IHRoaXMuc2V0dGluZ3MuZ2V0U2V0dGluZ3MoKSkudXNlSlNPTlNvdXJjZSkge1xuICAgIGxldCBzcmNUcmVlID0gYXdhaXQgdGhpcy5tb2JpbGVHZXRTb3VyY2Uoe2Zvcm1hdDogJ2pzb24nfSk7XG4gICAgcmV0dXJuIGdldFNvdXJjZVhtbChnZXRUcmVlRm9yWE1MKHNyY1RyZWUpKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5nZXROYXRpdmVQYWdlU291cmNlKCk7XG59O1xuXG5oZWxwZXJzLmdldE5hdGl2ZVBhZ2VTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiBnZXROYXRpdmVQYWdlU291cmNlICgpIHtcbiAgbGV0IHNyY1RyZWUgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3NvdXJjZScsICdHRVQnKTtcblxuICBsZXQgcGFyc2VyID0gbmV3IHhtbGRvbS5ET01QYXJzZXIoKTtcblxuICBsZXQgdHJlZSA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoc3JjVHJlZSk7XG5cbiAgbGV0IGRvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoQVBQSVVNX1NSQ19YTUwpO1xuICBkb2MuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHRyZWUuZG9jdW1lbnRFbGVtZW50KTtcblxuICByZXR1cm4gbmV3IHhtbGRvbS5YTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoZG9jKTtcbn07XG5cbmhlbHBlcnMubW9iaWxlR2V0U291cmNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0U291cmNlIChvcHRzID0ge30pIHtcbiAgaWYgKCFfLmlzU3RyaW5nKG9wdHMuZm9ybWF0KSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldE5hdGl2ZVBhZ2VTb3VyY2UoKTtcbiAgfVxuICBjb25zdCBwYXJhbXNNYXAgPSB7XG4gICAgZm9ybWF0OiBvcHRzLmZvcm1hdCxcbiAgfTtcbiAgaWYgKG9wdHMuZXhjbHVkZWRBdHRyaWJ1dGVzKSB7XG4gICAgcGFyYW1zTWFwLmV4Y2x1ZGVkX2F0dHJpYnV0ZXMgPSBvcHRzLmV4Y2x1ZGVkQXR0cmlidXRlcztcbiAgfVxuICBjb25zdCBxdWVyeSA9IE9iamVjdC5lbnRyaWVzKHBhcmFtc01hcClcbiAgICAubWFwKChbaywgdl0pID0+IGAke2VuY29kZVVSSUNvbXBvbmVudChrKX09JHtlbmNvZGVVUklDb21wb25lbnQodil9YClcbiAgICAuam9pbignJicpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC9zb3VyY2U/JHtxdWVyeX1gLCAnR0VUJyk7XG59O1xuXG4vKiBXaWxsIGdldCBKU09OIG9mIHRoZSBmb3JtOlxuICogICB7IGlzRW5hYmxlZDogJzEnLFxuICogICAgIGlzVmlzaWJsZTogJzEnLFxuICogICAgIGZyYW1lOiAne3swLCAwfSwgezM3NSwgNjY3fX0nLFxuICogICAgIGNoaWxkcmVuOlxuICogICAgICBbIHsgaXNFbmFibGVkOiAnMScsXG4gKiAgICAgICAgICBpc1Zpc2libGU6ICcxJyxcbiAqICAgICAgICAgIGZyYW1lOiAne3swLCAwfSwgezM3NSwgNjY3fX0nLFxuICogICAgICAgICAgY2hpbGRyZW46IFtdLFxuICogICAgICAgICAgcmVjdDogeyB4OiAwLCB5OiAwLCB3aWR0aDogMzc1LCBoZWlnaHQ6IDY2NyB9LFxuICogICAgICAgICAgdmFsdWU6IG51bGwsXG4gKiAgICAgICAgICBsYWJlbDogbnVsbCxcbiAqICAgICAgICAgIHR5cGU6ICdPdGhlcicsXG4gKiAgICAgICAgICBuYW1lOiBudWxsLFxuICogICAgICAgICAgcmF3SWRlbnRpZmllcjogbnVsbCB9LFxuICogICAgIHJlY3Q6IHsgb3JpZ2luOiB7IHg6IDAsIHk6IDAgfSwgc2l6ZTogeyB3aWR0aDogMzc1LCBoZWlnaHQ6IDY2NyB9IH0sXG4gKiAgICAgdmFsdWU6IG51bGwsXG4gKiAgICAgbGFiZWw6ICdVSUNhdGFsb2cnLFxuICogICAgIHR5cGU6ICdBcHBsaWNhdGlvbicsXG4gKiAgICAgbmFtZTogJ1VJQ2F0YWxvZycsXG4gKiAgICAgcmF3SWRlbnRpZmllcjogbnVsbCB9XG4gKi9cbmZ1bmN0aW9uIGdldFRyZWVGb3JYTUwgKHNyY1RyZWUpIHtcbiAgZnVuY3Rpb24gZ2V0VHJlZSAoZWxlbWVudCwgZWxlbWVudEluZGV4LCBwYXJlbnRQYXRoKSB7XG4gICAgbGV0IGN1clBhdGggPSBgJHtwYXJlbnRQYXRofS8ke2VsZW1lbnRJbmRleH1gO1xuICAgIGxldCByZWN0ID0gZWxlbWVudC5yZWN0IHx8IHt9O1xuICAgIGxldCBzdWJ0cmVlID0ge1xuICAgICAgJ0AnOiB7XG4gICAgICAgIHR5cGU6IGBYQ1VJRWxlbWVudFR5cGUke2VsZW1lbnQudHlwZX1gLFxuICAgICAgICBlbmFibGVkOiBwYXJzZUludChlbGVtZW50LmlzRW5hYmxlZCwgMTApID09PSAxLFxuICAgICAgICB2aXNpYmxlOiBwYXJzZUludChlbGVtZW50LmlzVmlzaWJsZSwgMTApID09PSAxLFxuICAgICAgICB4OiByZWN0LngsXG4gICAgICAgIHk6IHJlY3QueSxcbiAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgICB9LFxuICAgICAgJz4nOiBbXVxuICAgIH07XG4gICAgaWYgKGVsZW1lbnQubmFtZSAhPT0gbnVsbCkge1xuICAgICAgc3VidHJlZVsnQCddLm5hbWUgPSBlbGVtZW50Lm5hbWU7XG4gICAgfVxuICAgIGlmIChlbGVtZW50LmxhYmVsICE9PSBudWxsKSB7XG4gICAgICBzdWJ0cmVlWydAJ10ubGFiZWwgPSBlbGVtZW50LmxhYmVsO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgc3VidHJlZVsnQCddLnZhbHVlID0gZWxlbWVudC52YWx1ZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoZWxlbWVudC5jaGlsZHJlbiB8fCBbXSkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHN1YnRyZWVbJz4nXS5wdXNoKGdldFRyZWUoZWxlbWVudC5jaGlsZHJlbltpXSwgaSwgY3VyUGF0aCkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgW2BYQ1VJRWxlbWVudFR5cGUke2VsZW1lbnQudHlwZX1gXTogc3VidHJlZVxuICAgIH07XG4gIH1cbiAgbGV0IHRyZWUgPSBnZXRUcmVlKHNyY1RyZWUsIDAsICcnKTtcbiAgcmV0dXJuIHRyZWU7XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZVhtbCAoanNvblNvdXJjZSkge1xuICByZXR1cm4ganMyeG1sKCdBcHBpdW1BVVQnLCBqc29uU291cmNlLCB7XG4gICAgd3JhcEFycmF5OiB7ZW5hYmxlZDogZmFsc2UsIGVsZW1lbnROYW1lOiAnZWxlbWVudCd9LFxuICAgIGRlY2xhcmF0aW9uOiB7aW5jbHVkZTogdHJ1ZX0sXG4gICAgcHJldHR5UHJpbnRpbmc6IHtpbmRlbnRTdHJpbmc6ICcgICd9XG4gIH0pO1xufVxuXG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
131
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9zb3VyY2UuanMiXSwibmFtZXMiOlsiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsIkFQUElVTV9BVVRfVEFHIiwiQVBQSVVNX1NSQ19YTUwiLCJBUFBJVU1fVEFHX1BBVFRFUk4iLCJSZWdFeHAiLCJnZXRQYWdlU291cmNlIiwiaXNXZWJDb250ZXh0Iiwic2NyaXB0IiwiZXhlY3V0ZUF0b20iLCJzZXR0aW5ncyIsImdldFNldHRpbmdzIiwidXNlSlNPTlNvdXJjZSIsInNyY1RyZWUiLCJtb2JpbGVHZXRTb3VyY2UiLCJmb3JtYXQiLCJnZXRTb3VyY2VYbWwiLCJnZXRUcmVlRm9yWE1MIiwiZ2V0TmF0aXZlUGFnZVNvdXJjZSIsInByb3h5Q29tbWFuZCIsInRlc3QiLCJwYXJzZXIiLCJ4bWxkb20iLCJET01QYXJzZXIiLCJ0cmVlIiwicGFyc2VGcm9tU3RyaW5nIiwiZG9jIiwiZG9jdW1lbnRFbGVtZW50IiwiYXBwZW5kQ2hpbGQiLCJYTUxTZXJpYWxpemVyIiwic2VyaWFsaXplVG9TdHJpbmciLCJvcHRzIiwicGFyYW1zTWFwIiwic2NvcGUiLCJleGNsdWRlZEF0dHJpYnV0ZXMiLCJleGNsdWRlZF9hdHRyaWJ1dGVzIiwicXVlcnkiLCJPYmplY3QiLCJlbnRyaWVzIiwibWFwIiwiayIsInYiLCJlbmNvZGVVUklDb21wb25lbnQiLCJqb2luIiwiZ2V0VHJlZSIsImVsZW1lbnQiLCJlbGVtZW50SW5kZXgiLCJwYXJlbnRQYXRoIiwiY3VyUGF0aCIsInJlY3QiLCJzdWJ0cmVlIiwidHlwZSIsImVuYWJsZWQiLCJwYXJzZUludCIsImlzRW5hYmxlZCIsInZpc2libGUiLCJpc1Zpc2libGUiLCJ4IiwieSIsIndpZHRoIiwiaGVpZ2h0IiwibmFtZSIsImxhYmVsIiwidmFsdWUiLCJpIiwiY2hpbGRyZW4iLCJsZW5ndGgiLCJwdXNoIiwianNvblNvdXJjZSIsIndyYXBBcnJheSIsImVsZW1lbnROYW1lIiwiZGVjbGFyYXRpb24i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bSBmcm9tICdAeG1sZG9tL3htbGRvbSc7XG5pbXBvcnQganMyeG1sIGZyb20gJ2pzMnhtbHBhcnNlcjInO1xuXG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuY29uc3QgQVBQSVVNX0FVVF9UQUcgPSAnQXBwaXVtQVVUJztcbmNvbnN0IEFQUElVTV9TUkNfWE1MID0gYDw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/Pjwke0FQUElVTV9BVVRfVEFHfS8+YDtcbmNvbnN0IEFQUElVTV9UQUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoYDwvPyR7QVBQSVVNX0FVVF9UQUd9Lz8+YCk7XG5cblxuY29tbWFuZHMuZ2V0UGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFBhZ2VTb3VyY2UgKCkge1xuICBpZiAodGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIGNvbnN0IHNjcmlwdCA9ICdyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTCc7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgW11dKTtcbiAgfVxuXG4gIGlmICgoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS51c2VKU09OU291cmNlKSB7XG4gICAgY29uc3Qgc3JjVHJlZSA9IGF3YWl0IHRoaXMubW9iaWxlR2V0U291cmNlKHtmb3JtYXQ6ICdqc29uJ30pO1xuICAgIHJldHVybiBnZXRTb3VyY2VYbWwoZ2V0VHJlZUZvclhNTChzcmNUcmVlKSk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0TmF0aXZlUGFnZVNvdXJjZSgpO1xufTtcblxuaGVscGVycy5nZXROYXRpdmVQYWdlU291cmNlID0gYXN5bmMgZnVuY3Rpb24gZ2V0TmF0aXZlUGFnZVNvdXJjZSAoKSB7XG4gIGNvbnN0IHNyY1RyZWUgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3NvdXJjZT9zY29wZT0ke0FQUElVTV9BVVRfVEFHfWAsICdHRVQnKTtcbiAgaWYgKEFQUElVTV9UQUdfUEFUVEVSTi50ZXN0KHNyY1RyZWUpKSB7XG4gICAgcmV0dXJuIHNyY1RyZWU7XG4gIH1cbiAgLy8gVGhpcyBtaWdodCBvbmx5IGhhcHBlbiBpZiB0aGUgZHJpdmVyIGlzIHVzaW5nIGFuIG9sZGVyL2NhY2hlZCBXREFcbiAgLy8gYnVpbGQgKGUuZy4gYmVsb3cgMy4xNi4wKVxuICAvLyBUT0RPOiByZW1vdmUgdGhpcyBibG9jayBhZnRlciBhIHdoaWxlXG4gIGNvbnN0IHBhcnNlciA9IG5ldyB4bWxkb20uRE9NUGFyc2VyKCk7XG4gIGNvbnN0IHRyZWUgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHNyY1RyZWUpO1xuICBjb25zdCBkb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKEFQUElVTV9TUkNfWE1MKTtcbiAgZG9jLmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0cmVlLmRvY3VtZW50RWxlbWVudCk7XG4gIHJldHVybiBuZXcgeG1sZG9tLlhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhkb2MpO1xufTtcblxuaGVscGVycy5tb2JpbGVHZXRTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRTb3VyY2UgKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJhbXNNYXAgPSB7XG4gICAgZm9ybWF0OiBvcHRzLmZvcm1hdCB8fCAneG1sJyxcbiAgICBzY29wZTogQVBQSVVNX0FVVF9UQUcsXG4gIH07XG4gIGlmIChvcHRzLmV4Y2x1ZGVkQXR0cmlidXRlcykge1xuICAgIHBhcmFtc01hcC5leGNsdWRlZF9hdHRyaWJ1dGVzID0gb3B0cy5leGNsdWRlZEF0dHJpYnV0ZXM7XG4gIH1cbiAgY29uc3QgcXVlcnkgPSBPYmplY3QuZW50cmllcyhwYXJhbXNNYXApXG4gICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtlbmNvZGVVUklDb21wb25lbnQoayl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHYpfWApXG4gICAgLmpvaW4oJyYnKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvc291cmNlPyR7cXVlcnl9YCwgJ0dFVCcpO1xufTtcblxuLyogV2lsbCBnZXQgSlNPTiBvZiB0aGUgZm9ybTpcbiAqICAgeyBpc0VuYWJsZWQ6ICcxJyxcbiAqICAgICBpc1Zpc2libGU6ICcxJyxcbiAqICAgICBmcmFtZTogJ3t7MCwgMH0sIHszNzUsIDY2N319JyxcbiAqICAgICBjaGlsZHJlbjpcbiAqICAgICAgWyB7IGlzRW5hYmxlZDogJzEnLFxuICogICAgICAgICAgaXNWaXNpYmxlOiAnMScsXG4gKiAgICAgICAgICBmcmFtZTogJ3t7MCwgMH0sIHszNzUsIDY2N319JyxcbiAqICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAqICAgICAgICAgIHJlY3Q6IHsgeDogMCwgeTogMCwgd2lkdGg6IDM3NSwgaGVpZ2h0OiA2NjcgfSxcbiAqICAgICAgICAgIHZhbHVlOiBudWxsLFxuICogICAgICAgICAgbGFiZWw6IG51bGwsXG4gKiAgICAgICAgICB0eXBlOiAnT3RoZXInLFxuICogICAgICAgICAgbmFtZTogbnVsbCxcbiAqICAgICAgICAgIHJhd0lkZW50aWZpZXI6IG51bGwgfSxcbiAqICAgICByZWN0OiB7IG9yaWdpbjogeyB4OiAwLCB5OiAwIH0sIHNpemU6IHsgd2lkdGg6IDM3NSwgaGVpZ2h0OiA2NjcgfSB9LFxuICogICAgIHZhbHVlOiBudWxsLFxuICogICAgIGxhYmVsOiAnVUlDYXRhbG9nJyxcbiAqICAgICB0eXBlOiAnQXBwbGljYXRpb24nLFxuICogICAgIG5hbWU6ICdVSUNhdGFsb2cnLFxuICogICAgIHJhd0lkZW50aWZpZXI6IG51bGwgfVxuICovXG5mdW5jdGlvbiBnZXRUcmVlRm9yWE1MIChzcmNUcmVlKSB7XG4gIGZ1bmN0aW9uIGdldFRyZWUgKGVsZW1lbnQsIGVsZW1lbnRJbmRleCwgcGFyZW50UGF0aCkge1xuICAgIGxldCBjdXJQYXRoID0gYCR7cGFyZW50UGF0aH0vJHtlbGVtZW50SW5kZXh9YDtcbiAgICBsZXQgcmVjdCA9IGVsZW1lbnQucmVjdCB8fCB7fTtcbiAgICBsZXQgc3VidHJlZSA9IHtcbiAgICAgICdAJzoge1xuICAgICAgICB0eXBlOiBgWENVSUVsZW1lbnRUeXBlJHtlbGVtZW50LnR5cGV9YCxcbiAgICAgICAgZW5hYmxlZDogcGFyc2VJbnQoZWxlbWVudC5pc0VuYWJsZWQsIDEwKSA9PT0gMSxcbiAgICAgICAgdmlzaWJsZTogcGFyc2VJbnQoZWxlbWVudC5pc1Zpc2libGUsIDEwKSA9PT0gMSxcbiAgICAgICAgeDogcmVjdC54LFxuICAgICAgICB5OiByZWN0LnksXG4gICAgICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgICAgfSxcbiAgICAgICc+JzogW11cbiAgICB9O1xuICAgIGlmIChlbGVtZW50Lm5hbWUgIT09IG51bGwpIHtcbiAgICAgIHN1YnRyZWVbJ0AnXS5uYW1lID0gZWxlbWVudC5uYW1lO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5sYWJlbCAhPT0gbnVsbCkge1xuICAgICAgc3VidHJlZVsnQCddLmxhYmVsID0gZWxlbWVudC5sYWJlbDtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQudmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHN1YnRyZWVbJ0AnXS52YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKGVsZW1lbnQuY2hpbGRyZW4gfHwgW10pLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdWJ0cmVlWyc+J10ucHVzaChnZXRUcmVlKGVsZW1lbnQuY2hpbGRyZW5baV0sIGksIGN1clBhdGgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIFtgWENVSUVsZW1lbnRUeXBlJHtlbGVtZW50LnR5cGV9YF06IHN1YnRyZWVcbiAgICB9O1xuICB9XG4gIGxldCB0cmVlID0gZ2V0VHJlZShzcmNUcmVlLCAwLCAnJyk7XG4gIHJldHVybiB0cmVlO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VYbWwgKGpzb25Tb3VyY2UpIHtcbiAgcmV0dXJuIGpzMnhtbCgnQXBwaXVtQVVUJywganNvblNvdXJjZSwge1xuICAgIHdyYXBBcnJheToge2VuYWJsZWQ6IGZhbHNlLCBlbGVtZW50TmFtZTogJ2VsZW1lbnQnfSxcbiAgICBkZWNsYXJhdGlvbjoge2luY2x1ZGU6IHRydWV9LFxuICAgIHByZXR0eVByaW50aW5nOiB7aW5kZW50U3RyaW5nOiAnICAnfVxuICB9KTtcbn1cblxuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvc291cmNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -244,24 +244,38 @@ helpers._deleteCookie = async function _deleteCookie(cookieName) {
244
244
  await this.executeAtom('execute_script', [script, []]);
245
245
  };
246
246
 
247
- helpers.cacheWebElements = function cacheWebElements(rawElements) {
248
- if (!(_lodash.default.isArray(rawElements) || _lodash.default.isPlainObject(rawElements))) {
249
- throw new _appiumBaseDriver.errors.UnknownError(`Web element identifiers cannot be parsed from ` + JSON.stringify(rawElements));
247
+ helpers.cacheWebElement = function cacheWebElement(el) {
248
+ if (!_lodash.default.isPlainObject(el)) {
249
+ return el;
250
250
  }
251
251
 
252
- const cacheElement = el => {
253
- const elId = _appiumSupport.util.unwrapElement(el);
252
+ const elId = _appiumSupport.util.unwrapElement(el);
254
253
 
255
- if (!isValidElementIdentifier(elId)) {
256
- throw new _appiumBaseDriver.errors.UnknownError(`The web element identifier ${JSON.stringify(elId)} cannot be parsed`);
257
- }
254
+ if (!isValidElementIdentifier(elId)) {
255
+ return el;
256
+ }
258
257
 
259
- const cacheId = _lodash.default.includes(elId, ':') ? elId : _appiumSupport.util.uuidV4();
260
- this.webElementsCache.set(cacheId, elId);
261
- return _appiumSupport.util.wrapElement(cacheId);
262
- };
258
+ const cacheId = _lodash.default.includes(elId, ':') ? elId : _appiumSupport.util.uuidV4();
259
+ this.webElementsCache.set(cacheId, elId);
260
+ return _appiumSupport.util.wrapElement(cacheId);
261
+ };
262
+
263
+ helpers.cacheWebElements = function cacheWebElements(response) {
264
+ const toCached = v => _lodash.default.isArray(v) || _lodash.default.isPlainObject(v) ? this.cacheWebElements(v) : v;
265
+
266
+ if (_lodash.default.isArray(response)) {
267
+ return response.map(toCached);
268
+ } else if (_lodash.default.isPlainObject(response)) {
269
+ const result = { ...response,
270
+ ...this.cacheWebElement(response)
271
+ };
272
+ return _lodash.default.toPairs(result).reduce((acc, [key, value]) => {
273
+ acc[key] = toCached(value);
274
+ return acc;
275
+ }, {});
276
+ }
263
277
 
264
- return _lodash.default.isArray(rawElements) ? rawElements.map(cacheElement) : cacheElement(rawElements);
278
+ return response;
265
279
  };
266
280
 
267
281
  extensions.findWebElementOrElements = async function findWebElementOrElements(strategy, selector, many, ctx) {
@@ -287,7 +301,7 @@ extensions.findWebElementOrElements = async function findWebElementOrElements(st
287
301
  return this.cacheWebElements(element);
288
302
  }
289
303
 
290
- if (!element || _lodash.default.size(element) === 0) {
304
+ if (_lodash.default.isEmpty(element)) {
291
305
  throw new _appiumBaseDriver.errors.NoSuchElementError();
292
306
  }
293
307
 
@@ -709,4 +723,4 @@ var _default = commands;
709
723
  exports.default = _default;require('source-map-support').install();
710
724
 
711
725
 
712
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy93ZWIuanMiXSwibmFtZXMiOlsiSVBIT05FX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX1NDUk9MTEVEX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX1hfU0NST0xMRURfT0ZGU0VUIiwiSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPUyIsIklQSE9ORV9YX05PVENIX09GRlNFVF9JT1NfMTMiLCJJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX0JPVFRPTV9CQVJfT0ZGU0VUIiwiVEFCX0JBUl9PRkZTRVQiLCJJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIiwiSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQiLCJOT1RDSEVEX0RFVklDRV9TSVpFUyIsInciLCJoIiwiVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIiLCJ1dGlsIiwiQVRPTV9XQUlUX1RJTUVPVVRfTVMiLCJBVE9NX0lOSVRJQUxfV0FJVF9NUyIsIk9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UIiwiVklTSUJMRSIsIklOVklTSUJMRSIsIkRFVEVDVCIsIlZJU0lCSUxJVElFUyIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIiLCJpZCIsIl8iLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNFbXB0eSIsImlzTmFOIiwic2V0RnJhbWUiLCJmcmFtZSIsImlzV2ViQ29udGV4dCIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJpc051bGwiLCJjdXJXZWJGcmFtZXMiLCJsb2ciLCJkZWJ1ZyIsImhhc0VsZW1lbnRJZCIsImF0b21zRWxlbWVudCIsImdldEF0b21zRWxlbWVudCIsInZhbHVlIiwiZXhlY3V0ZUF0b20iLCJXSU5ET1ciLCJ1bnNoaWZ0IiwiYXRvbSIsImlzVW5kZWZpbmVkIiwiTm9TdWNoRnJhbWVFcnJvciIsImdldENzc1Byb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZWwiLCJzdWJtaXQiLCJyZWZyZXNoIiwiZ2V0VXJsIiwicmVtb3RlIiwiZXhlY3V0ZSIsInRpdGxlIiwiZ2V0Q29va2llcyIsInNjcmlwdCIsImpzQ29va2llcyIsImNvb2tpZXMiLCJuYW1lIiwidG9QYWlycyIsImNvb2tpZVV0aWxzIiwiY3JlYXRlSldQQ29va2llIiwidW5kZWZpbmVkIiwicHVzaCIsImVyciIsImVycm9yIiwiVW5rbm93bkVycm9yIiwic2V0Q29va2llIiwiY29va2llIiwiY2xvbmUiLCJwYXRoIiwianNDb29raWUiLCJjcmVhdGVKU0Nvb2tpZSIsImV4cGlyZXMiLCJleHBpcnkiLCJEYXRlIiwidG9VVENTdHJpbmciLCJkb21haW4iLCJodHRwT25seSIsInNlY3VyZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWxldGVDb29raWUiLCJjb29raWVOYW1lIiwiaW5kZXhPZiIsIm1hcCIsIl9kZWxldGVDb29raWUiLCJkZWxldGVDb29raWVzIiwibGVuZ3RoIiwid2ViQ29va2llIiwiZXhwaXJlQ29va2llIiwiY2FjaGVXZWJFbGVtZW50cyIsInJhd0VsZW1lbnRzIiwiaXNBcnJheSIsImlzUGxhaW5PYmplY3QiLCJjYWNoZUVsZW1lbnQiLCJlbElkIiwidW53cmFwRWxlbWVudCIsImNhY2hlSWQiLCJpbmNsdWRlcyIsInV1aWRWNCIsIndlYkVsZW1lbnRzQ2FjaGUiLCJzZXQiLCJ3cmFwRWxlbWVudCIsImZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYW55IiwiY3R4IiwiY29udGV4dEVsZW1lbnQiLCJpc05pbCIsImVsZW1lbnQiLCJkb0ZpbmQiLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJtZXNzYWdlIiwiaXNGdW5jdGlvbiIsIm1hdGNoIiwic2l6ZSIsIk5vU3VjaEVsZW1lbnRFcnJvciIsImNsaWNrV2ViQ29vcmRzIiwiY29vcmRzIiwidHJhbnNsYXRlV2ViQ29vcmRzIiwiY3VyV2ViQ29vcmRzIiwiY2xpY2tDb29yZHMiLCJhcmdzIiwiYWx3YXlzRGVmYXVsdEZyYW1lIiwiZnJhbWVzIiwicHJvbWlzZSIsIndhaXRGb3JBdG9tIiwiZXhlY3V0ZUF0b21Bc3luYyIsInJlc3BvbnNlVXJsIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJhc3luY1Byb21pc2UiLCJlbE9ySWQiLCJoYXMiLCJTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvciIsIkVMRU1FTlQiLCJnZXQiLCJjb252ZXJ0RWxlbWVudHNGb3JBdG9tcyIsImFyZyIsImdldEVsZW1lbnRJZCIsImhhc1ZhbHVlIiwiZ2V0U2FmYXJpSXNJcGhvbmUiLCJtZW1vaXplIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJ3YXJuIiwiZ2V0U2FmYXJpRGV2aWNlU2l6ZSIsIndpZHRoIiwiaGVpZ2h0Iiwibm9ybUhlaWdodCIsIm5vcm1XaWR0aCIsImdldFNhZmFyaUlzTm90Y2hlZCIsImRldmljZSIsImdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0Iiwid3ZQb3MiLCJyZWFsRGltcyIsInRvcE9mZnNldCIsImJvdHRvbU9mZnNldCIsIm5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkiLCJuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkiLCJzZXR0aW5ncyIsImdldFNldHRpbmdzIiwidGFiQmFyVmlzaWJpbGl0eSIsImxvd2VyQ2FzZSIsImJhbm5lclZpc2liaWxpdHkiLCJpc0lwaG9uZSIsImlzTm90Y2hlZCIsIm9yaWVudGF0aW9uIiwibm90Y2hPZmZzZXQiLCJjb21wYXJlVmVyc2lvbnMiLCJvcHRzIiwicGxhdGZvcm1WZXJzaW9uIiwiaXNTY3JvbGxlZCIsImNvbnRleHRzQW5kVmlld3MiLCJnZXRDb250ZXh0c0FuZFZpZXdzIiwidGFicyIsImZpbHRlciIsInN0YXJ0c1dpdGgiLCJnZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldCIsInkiLCJvZmZzZXQiLCJiYW5uZXJzIiwiZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzIiwidGFwV2ViRWxlbWVudE5hdGl2ZWx5IiwiZHJpdmVyIiwidGV4dCIsImVscyIsInJlY3QiLCJwcm94eUNvbW1hbmQiLCJlbDIiLCJyZWN0MiIsIngiLCJNYXRoIiwicm91bmQiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJQcm9taXNlIiwiYWxsIiwiY29vcmRpbmF0ZXMiLCJwZXJmb3JtVG91Y2giLCJhY3Rpb24iLCJvcHRpb25zIiwid2VidmlldyIsImlnbiIsIkVycm9yIiwiY21kIiwid3ZEaW1zIiwiaW1wbGljaXRXYWl0TXMiLCJzZXRJbXBsaWNpdFdhaXQiLCJ4UmF0aW8iLCJ5UmF0aW8iLCJuZXdDb29yZHMiLCJjaGVja0ZvckFsZXJ0IiwiZ2V0QWxlcnRUZXh0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidGltZWRBdG9tUHJvbWlzZSIsInRpbWVvdXQiLCJoYW5kbGVQcm9taXNlRXJyb3IiLCJwIiwib3JpZ2luYWxFcnJvciIsIkFnZ3JlZ2F0ZUVycm9yIiwiVGltZW91dEVycm9yIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJhbnkiLCJkZWxheSIsImlzRnVsZmlsbGVkIiwiX3dhaXRpbmdBdG9tcyIsImNvdW50IiwiYWxlcnROb3RpZmllciIsIkV2ZW50RW1pdHRlciIsImFsZXJ0TW9uaXRvciIsIm9uQWxlcnRDYWxsYmFjayIsImlzUmVzb2x2ZWQiLCJlbWl0IiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwib25jZSIsInRoZW4iLCJjYXRjaCIsInJlbW92ZUxpc3RlbmVyIiwibW9iaWxlV2ViTmF2IiwibmF2VHlwZSIsImFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQiLCJPYmplY3QiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEscUJBQXFCLEdBQUcsRUFB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RWVELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdXRpbCwgdGltaW5nIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGVycm9ycywgaXNFcnJvclR5cGUgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IGNvb2tpZVV0aWxzIGZyb20gJy4uL2Nvb2tpZXMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuY29uc3QgSVBIT05FX1RPUF9CQVJfSEVJR0hUID0gNzE7XG5jb25zdCBJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQgPSA0MTtcbmNvbnN0IElQSE9ORV9YX1NDUk9MTEVEX09GRlNFVCA9IDU1O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPUyA9IDI0O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyA9IDIwO1xuXG5jb25zdCBJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUID0gNTE7XG5jb25zdCBJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQgPSA0OTtcbmNvbnN0IFRBQl9CQVJfT0ZGU0VUID0gMzM7XG5jb25zdCBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUID0gODQ7XG5jb25zdCBJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA9IDk1O1xuXG5jb25zdCBOT1RDSEVEX0RFVklDRV9TSVpFUyA9IFtcbiAge3c6IDExMjUsIGg6IDI0MzZ9LCAvLyAxMSBQcm8sIFgsIFhzXG4gIHt3OiA4MjgsIGg6IDE3OTJ9LCAvLyAxMSwgWHJcbiAge3c6IDEyNDIsIGg6IDI2ODh9LCAvLyAxMSBQcm8gTWF4LCBYcyBNYXhcbl07XG5cbmNvbnN0IHsgVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIgfSA9IHV0aWw7XG5cbmNvbnN0IEFUT01fV0FJVF9USU1FT1VUX01TID0gMiAqIDYwMDAwO1xuY29uc3QgQVRPTV9JTklUSUFMX1dBSVRfTVMgPSAxMDAwO1xuXG5jb25zdCBPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCA9ICdhbGVydCc7XG5cbmNvbnN0IFZJU0lCTEUgPSAndmlzaWJsZSc7XG5jb25zdCBJTlZJU0lCTEUgPSAnaW52aXNpYmxlJztcbmNvbnN0IERFVEVDVCA9ICdkZXRlY3QnO1xuY29uc3QgVklTSUJJTElUSUVTID0gW1ZJU0lCTEUsIElOVklTSUJMRSwgREVURUNUXTtcblxuY29uc3QgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50SWRlbnRpZmllciAoaWQpIHtcbiAgaWYgKCFfLmlzU3RyaW5nKGlkKSAmJiAhXy5pc051bWJlcihpZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKF8uaXNTdHJpbmcoaWQpICYmIF8uaXNFbXB0eShpZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKF8uaXNOdW1iZXIoaWQpICYmIGlzTmFOKGlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuY29tbWFuZHMuc2V0RnJhbWUgPSBhc3luYyBmdW5jdGlvbiBzZXRGcmFtZSAoZnJhbWUpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBpZiAoXy5pc051bGwoZnJhbWUpKSB7XG4gICAgdGhpcy5jdXJXZWJGcmFtZXMgPSBbXTtcbiAgICBsb2cuZGVidWcoJ0xlYXZpbmcgd2ViIGZyYW1lIGFuZCBnb2luZyBiYWNrIHRvIGRlZmF1bHQgY29udGVudCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChoZWxwZXJzLmhhc0VsZW1lbnRJZChmcmFtZSkpIHtcbiAgICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChmcmFtZSk7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfZnJhbWVfd2luZG93JywgW2F0b21zRWxlbWVudF0pO1xuICAgIGxvZy5kZWJ1ZyhgRW50ZXJpbmcgbmV3IHdlYiBmcmFtZTogJyR7dmFsdWUuV0lORE9XfSdgKTtcbiAgICB0aGlzLmN1cldlYkZyYW1lcy51bnNoaWZ0KHZhbHVlLldJTkRPVyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXRvbSA9IF8uaXNOdW1iZXIoZnJhbWUpID8gJ2ZyYW1lX2J5X2luZGV4JyA6ICdmcmFtZV9ieV9pZF9vcl9uYW1lJztcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oYXRvbSwgW2ZyYW1lXSk7XG4gICAgaWYgKF8uaXNOdWxsKHZhbHVlKSB8fCBfLmlzVW5kZWZpbmVkKHZhbHVlLldJTkRPVykpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRnJhbWVFcnJvcigpO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYEVudGVyaW5nIG5ldyB3ZWIgZnJhbWU6ICcke3ZhbHVlLldJTkRPV30nYCk7XG4gICAgdGhpcy5jdXJXZWJGcmFtZXMudW5zaGlmdCh2YWx1ZS5XSU5ET1cpO1xuICB9XG59O1xuXG5jb21tYW5kcy5nZXRDc3NQcm9wZXJ0eSA9IGFzeW5jIGZ1bmN0aW9uIGdldENzc1Byb3BlcnR5IChwcm9wZXJ0eU5hbWUsIGVsKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3ZhbHVlX29mX2Nzc19wcm9wZXJ0eScsIFthdG9tc0VsZW1lbnQsIHByb3BlcnR5TmFtZV0pO1xufTtcblxuY29tbWFuZHMuc3VibWl0ID0gYXN5bmMgZnVuY3Rpb24gc3VibWl0IChlbCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGNvbnN0IGF0b21zRWxlbWVudCA9IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGVsKTtcbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnc3VibWl0JywgW2F0b21zRWxlbWVudF0pO1xufTtcblxuY29tbWFuZHMucmVmcmVzaCA9IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2ggKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ3JlZnJlc2gnLCBbXSk7XG59O1xuXG5jb21tYW5kcy5nZXRVcmwgPSBhc3luYyBmdW5jdGlvbiBnZXRVcmwgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlKCd3aW5kb3cubG9jYXRpb24uaHJlZicpO1xufTtcblxuY29tbWFuZHMudGl0bGUgPSBhc3luYyBmdW5jdGlvbiB0aXRsZSAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ3RpdGxlJywgW10sIHRydWUpO1xufTtcblxuY29tbWFuZHMuZ2V0Q29va2llcyA9IGFzeW5jIGZ1bmN0aW9uIGdldENvb2tpZXMgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGxvZy5kZWJ1ZygnUmV0cmlldmluZyBhbGwgY29va2llcycpO1xuXG4gIGxldCBzY3JpcHQgPSAncmV0dXJuIGRvY3VtZW50LmNvb2tpZSc7XG4gIGxldCBqc0Nvb2tpZXMgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIFtdXSk7XG5cbiAgbGV0IGNvb2tpZXMgPSBbXTtcbiAgdHJ5IHtcbiAgICBmb3IgKGxldCBbbmFtZSwgdmFsdWVdIG9mIF8udG9QYWlycyhjb29raWVVdGlscy5jcmVhdGVKV1BDb29raWUodW5kZWZpbmVkLCBqc0Nvb2tpZXMpKSkge1xuICAgICAgY29va2llcy5wdXNoKHtuYW1lLCB2YWx1ZX0pO1xuICAgIH1cbiAgICByZXR1cm4gY29va2llcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKGVycik7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoYEVycm9yIHBhcnNpbmcgY29va2llcyBmcm9tIHJlc3VsdDogJyR7anNDb29raWVzfSdgKTtcbiAgfVxufTtcblxuY29tbWFuZHMuc2V0Q29va2llID0gYXN5bmMgZnVuY3Rpb24gc2V0Q29va2llIChjb29raWUpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBjb29raWUgPSBfLmNsb25lKGNvb2tpZSk7XG5cbiAgLy8gaWYgYHBhdGhgIGZpZWxkIGlzIG5vdCBzcGVjaWZpZWQsIFNhZmFyaSB3aWxsIG5vdCB1cGRhdGUgY29va2llcyBhcyBleHBlY3RlZDsgZWcgaXNzdWUgIzE3MDhcbiAgaWYgKCFjb29raWUucGF0aCkge1xuICAgIGNvb2tpZS5wYXRoID0gJy8nO1xuICB9XG5cbiAgY29uc3QganNDb29raWUgPSBjb29raWVVdGlscy5jcmVhdGVKU0Nvb2tpZShjb29raWUubmFtZSwgY29va2llLnZhbHVlLCB7XG4gICAgZXhwaXJlczogXy5pc051bWJlcihjb29raWUuZXhwaXJ5KSA/IChuZXcgRGF0ZShjb29raWUuZXhwaXJ5ICogMTAwMCkpLnRvVVRDU3RyaW5nKCkgOlxuICAgICAgY29va2llLmV4cGlyeSxcbiAgICBwYXRoOiBjb29raWUucGF0aCxcbiAgICBkb21haW46IGNvb2tpZS5kb21haW4sXG4gICAgaHR0cE9ubHk6IGNvb2tpZS5odHRwT25seSxcbiAgICBzZWN1cmU6IGNvb2tpZS5zZWN1cmVcbiAgfSk7XG4gIGxldCBzY3JpcHQgPSBgZG9jdW1lbnQuY29va2llID0gJHtKU09OLnN0cmluZ2lmeShqc0Nvb2tpZSl9YDtcbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xufTtcblxuY29tbWFuZHMuZGVsZXRlQ29va2llID0gYXN5bmMgZnVuY3Rpb24gZGVsZXRlQ29va2llIChjb29raWVOYW1lKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgLy8gY2hlY2sgY29va2llIGV4aXN0ZW5jZVxuICBsZXQgY29va2llcyA9IGF3YWl0IHRoaXMuZ2V0Q29va2llcygpO1xuICBpZiAoXy5pbmRleE9mKF8ubWFwKGNvb2tpZXMsICduYW1lJyksIGNvb2tpZU5hbWUpID09PSAtMSkge1xuICAgIGxvZy5kZWJ1ZyhgQ29va2llICcke2Nvb2tpZU5hbWV9JyBub3QgZm91bmQuIElnbm9yaW5nLmApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuX2RlbGV0ZUNvb2tpZShjb29raWVOYW1lKTtcbn07XG5cbmNvbW1hbmRzLmRlbGV0ZUNvb2tpZXMgPSBhc3luYyBmdW5jdGlvbiBkZWxldGVDb29raWVzICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBsZXQgY29va2llcyA9IGF3YWl0IHRoaXMuZ2V0Q29va2llcygpO1xuICBpZiAoY29va2llcy5sZW5ndGgpIHtcbiAgICBmb3IgKGxldCBjb29raWUgb2YgY29va2llcykge1xuICAgICAgYXdhaXQgdGhpcy5fZGVsZXRlQ29va2llKGNvb2tpZS5uYW1lKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5oZWxwZXJzLl9kZWxldGVDb29raWUgPSBhc3luYyBmdW5jdGlvbiBfZGVsZXRlQ29va2llIChjb29raWVOYW1lKSB7XG4gIGxvZy5kZWJ1ZyhgRGVsZXRpbmcgY29va2llICcke2Nvb2tpZU5hbWV9J2ApO1xuICBsZXQgd2ViQ29va2llID0gY29va2llVXRpbHMuZXhwaXJlQ29va2llKGNvb2tpZU5hbWUsIHtwYXRoOiAnLyd9KTtcbiAgbGV0IHNjcmlwdCA9IGBkb2N1bWVudC5jb29raWUgPSAke0pTT04uc3RyaW5naWZ5KHdlYkNvb2tpZSl9YDtcbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xufTtcblxuaGVscGVycy5jYWNoZVdlYkVsZW1lbnRzID0gZnVuY3Rpb24gY2FjaGVXZWJFbGVtZW50cyAocmF3RWxlbWVudHMpIHtcbiAgaWYgKCEoXy5pc0FycmF5KHJhd0VsZW1lbnRzKSB8fCBfLmlzUGxhaW5PYmplY3QocmF3RWxlbWVudHMpKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkVycm9yKGBXZWIgZWxlbWVudCBpZGVudGlmaWVycyBjYW5ub3QgYmUgcGFyc2VkIGZyb20gYCArXG4gICAgICBKU09OLnN0cmluZ2lmeShyYXdFbGVtZW50cykpO1xuICB9XG5cbiAgY29uc3QgY2FjaGVFbGVtZW50ID0gKGVsKSA9PiB7XG4gICAgY29uc3QgZWxJZCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIoZWxJZCkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkVycm9yKGBUaGUgd2ViIGVsZW1lbnQgaWRlbnRpZmllciAke0pTT04uc3RyaW5naWZ5KGVsSWQpfSBjYW5ub3QgYmUgcGFyc2VkYCk7XG4gICAgfVxuICAgIC8vIEluIG5ld2VyIGRlYnVnZ2VyIHJlbGVhc2VzIGVsZW1lbnQgaWRlbnRpZmllcnMgbG9vayBsaWtlIGA6d2RjOjE2MjgxNTE2NDkzMjVgXG4gICAgLy8gV2UgYXNzdW1lIGl0IGlzIHNhZmUgdG8gdXNlIHRoZXNlIHRvIGlkZW50aWZ5IGNhY2hlZCBlbGVtZW50c1xuICAgIGNvbnN0IGNhY2hlSWQgPSBfLmluY2x1ZGVzKGVsSWQsICc6JykgPyBlbElkIDogdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLndlYkVsZW1lbnRzQ2FjaGUuc2V0KGNhY2hlSWQsIGVsSWQpO1xuICAgIHJldHVybiB1dGlsLndyYXBFbGVtZW50KGNhY2hlSWQpO1xuICB9O1xuXG4gIHJldHVybiBfLmlzQXJyYXkocmF3RWxlbWVudHMpID8gcmF3RWxlbWVudHMubWFwKGNhY2hlRWxlbWVudCkgOiBjYWNoZUVsZW1lbnQocmF3RWxlbWVudHMpO1xufTtcblxuZXh0ZW5zaW9ucy5maW5kV2ViRWxlbWVudE9yRWxlbWVudHMgPSBhc3luYyBmdW5jdGlvbiBmaW5kV2ViRWxlbWVudE9yRWxlbWVudHMgKHN0cmF0ZWd5LCBzZWxlY3RvciwgbWFueSwgY3R4KSB7XG4gIGNvbnN0IGNvbnRleHRFbGVtZW50ID0gXy5pc05pbChjdHgpID8gbnVsbCA6IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGN0eCk7XG4gIGxldCBlbGVtZW50O1xuICBsZXQgZG9GaW5kID0gYXN5bmMgKCkgPT4ge1xuICAgIGVsZW1lbnQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKGBmaW5kX2VsZW1lbnQke21hbnkgPyAncycgOiAnJ31gLCBbc3RyYXRlZ3ksIHNlbGVjdG9yLCBjb250ZXh0RWxlbWVudF0pO1xuICAgIHJldHVybiAhXy5pc051bGwoZWxlbWVudCk7XG4gIH07XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5pbXBsaWNpdFdhaXRGb3JDb25kaXRpb24oZG9GaW5kKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5tZXNzYWdlICYmIF8uaXNGdW5jdGlvbihlcnIubWVzc2FnZS5tYXRjaCkgJiYgZXJyLm1lc3NhZ2UubWF0Y2goL0NvbmRpdGlvbiB1bm1ldC8pKSB7XG4gICAgICAvLyBjb25kaXRpb24gd2FzIG5vdCBtZXQgc2V0dGluZyByZXMgdG8gZW1wdHkgYXJyYXlcbiAgICAgIGVsZW1lbnQgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVXZWJFbGVtZW50cyhlbGVtZW50KTtcbiAgfVxuICBpZiAoIWVsZW1lbnQgfHwgXy5zaXplKGVsZW1lbnQpID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hFbGVtZW50RXJyb3IoKTtcbiAgfVxuICByZXR1cm4gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKGVsZW1lbnQpO1xufTtcblxuZXh0ZW5zaW9ucy5jbGlja1dlYkNvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIGNsaWNrV2ViQ29vcmRzICgpIHtcbiAgbGV0IGNvb3JkcyA9IGF3YWl0IHRoaXMudHJhbnNsYXRlV2ViQ29vcmRzKHRoaXMuY3VyV2ViQ29vcmRzKTtcbiAgYXdhaXQgdGhpcy5jbGlja0Nvb3Jkcyhjb29yZHMpO1xufTtcblxuaGVscGVycy5leGVjdXRlQXRvbSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBdG9tIChhdG9tLCBhcmdzLCBhbHdheXNEZWZhdWx0RnJhbWUgPSBmYWxzZSkge1xuICBsZXQgZnJhbWVzID0gYWx3YXlzRGVmYXVsdEZyYW1lID09PSB0cnVlID8gW10gOiB0aGlzLmN1cldlYkZyYW1lcztcbiAgbGV0IHByb21pc2UgPSB0aGlzLnJlbW90ZS5leGVjdXRlQXRvbShhdG9tLCBhcmdzLCBmcmFtZXMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy53YWl0Rm9yQXRvbShwcm9taXNlKTtcbn07XG5cbmhlbHBlcnMuZXhlY3V0ZUF0b21Bc3luYyA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBdG9tQXN5bmMgKGF0b20sIGFyZ3MsIHJlc3BvbnNlVXJsKSB7XG4gIC8vIHNhdmUgdGhlIHJlc29sdmUgYW5kIHJlamVjdCBtZXRob2RzIG9mIHRoZSBwcm9taXNlIHRvIGJlIHdhaXRlZCBmb3JcbiAgbGV0IHByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5hc3luY1Byb21pc2UgPSB7cmVzb2x2ZSwgcmVqZWN0fTtcbiAgfSk7XG4gIGF3YWl0IHRoaXMucmVtb3RlLmV4ZWN1dGVBdG9tQXN5bmMoYXRvbSwgYXJncywgdGhpcy5jdXJXZWJGcmFtZXMsIHJlc3BvbnNlVXJsKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2FpdEZvckF0b20ocHJvbWlzZSk7XG59O1xuXG5oZWxwZXJzLmdldEF0b21zRWxlbWVudCA9IGZ1bmN0aW9uIGdldEF0b21zRWxlbWVudCAoZWxPcklkKSB7XG4gIGNvbnN0IGVsSWQgPSB1dGlsLnVud3JhcEVsZW1lbnQoZWxPcklkKTtcbiAgaWYgKCF0aGlzLndlYkVsZW1lbnRzQ2FjaGUuaGFzKGVsSWQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5TdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcigpO1xuICB9XG4gIHJldHVybiB7RUxFTUVOVDogdGhpcy53ZWJFbGVtZW50c0NhY2hlLmdldChlbElkKX07XG59O1xuXG5oZWxwZXJzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zID0gZnVuY3Rpb24gY29udmVydEVsZW1lbnRzRm9yQXRvbXMgKGFyZ3MgPSBbXSkge1xuICByZXR1cm4gYXJncy5tYXAoKGFyZykgPT4ge1xuICAgIGlmIChoZWxwZXJzLmhhc0VsZW1lbnRJZChhcmcpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBdG9tc0VsZW1lbnQoYXJnKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIWlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yKSkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFyZztcbiAgICB9XG4gICAgcmV0dXJuIF8uaXNBcnJheShhcmcpID8gdGhpcy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyhhcmcpIDogYXJnO1xuICB9KTtcbn07XG5cbmhlbHBlcnMuZ2V0RWxlbWVudElkID0gZnVuY3Rpb24gZ2V0RWxlbWVudElkIChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LkVMRU1FTlQgfHwgZWxlbWVudFtXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUl07XG59O1xuXG5oZWxwZXJzLmhhc0VsZW1lbnRJZCA9IGZ1bmN0aW9uIGhhc0VsZW1lbnRJZCAoZWxlbWVudCkge1xuICByZXR1cm4gdXRpbC5oYXNWYWx1ZShlbGVtZW50KSAmJiAodXRpbC5oYXNWYWx1ZShlbGVtZW50LkVMRU1FTlQpIHx8IHV0aWwuaGFzVmFsdWUoZWxlbWVudFtXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUl0pKTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0U2FmYXJpSXNJcGhvbmUgPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpSXNJcGhvbmUgKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHVzZXJBZ2VudCA9IGF3YWl0IHRoaXMuZXhlY3V0ZSgncmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQnKTtcbiAgICByZXR1cm4gdXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2lwaG9uZScpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvIGZpbmQgZGV2aWNlIHR5cGUgZnJvbSB1c2VyYWdlbnQuIEFzc3VtaW5nIGlQaG9uZWApO1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59KTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlEZXZpY2VTaXplID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldFNhZmFyaURldmljZVNpemUgKCkge1xuICBjb25zdCBzY3JpcHQgPSAncmV0dXJuIHtoZWlnaHQ6IHdpbmRvdy5zY3JlZW4uYXZhaWxIZWlnaHQgKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbywgd2lkdGg6IHdpbmRvdy5zY3JlZW4uYXZhaWxXaWR0aCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfTsnO1xuICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmV4ZWN1dGUoc2NyaXB0KTtcbiAgY29uc3QgW25vcm1IZWlnaHQsIG5vcm1XaWR0aF0gPSBoZWlnaHQgPiB3aWR0aCA/IFtoZWlnaHQsIHdpZHRoXSA6IFt3aWR0aCwgaGVpZ2h0XTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogbm9ybVdpZHRoLFxuICAgIGhlaWdodDogbm9ybUhlaWdodCxcbiAgfTtcbn0pO1xuXG5leHRlbnNpb25zLmdldFNhZmFyaUlzTm90Y2hlZCA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRTYWZhcmlJc05vdGNoZWQgKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0U2FmYXJpRGV2aWNlU2l6ZSgpO1xuICAgIGZvciAoY29uc3QgZGV2aWNlIG9mIE5PVENIRURfREVWSUNFX1NJWkVTKSB7XG4gICAgICBpZiAoZGV2aWNlLncgPT09IHdpZHRoICYmIGRldmljZS5oID09PSBoZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvIGZpbmQgZGV2aWNlIHR5cGUgZnJvbSBkaW1lbnNpb25zLiBBc3N1bWluZyB0aGUgZGV2aWNlIGlzIG5vdCBub3RjaGVkYCk7XG4gICAgbG9nLmRlYnVnKGBFcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KTtcblxuZXh0ZW5zaW9ucy5nZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCA9IGFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0ICh3dlBvcywgcmVhbERpbXMpIHtcbiAgbGV0IHRvcE9mZnNldCA9IDA7XG4gIGxldCBib3R0b21PZmZzZXQgPSAwO1xuXG4gIC8vIE5vIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgU21hcnQgQXBwIEJhbm5lciBvciBUYWIgQmFyIGlzIHZpc2libGUgb3Igbm90XG4gIC8vIGlmIGFscmVhZHkgZGVmaW5lZCBieSBuYXRpdmVXZWJUYXBUYWJCYXJWaXNpYmlsaXR5IG9yIG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSBpbiBzZXR0aW5ncy5cbiAgY29uc3Qge1xuICAgIG5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHksXG4gICAgbmF0aXZlV2ViVGFwU21hcnRBcHBCYW5uZXJWaXNpYmlsaXR5XG4gIH0gPSBhd2FpdCB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGxldCB0YWJCYXJWaXNpYmlsaXR5ID0gXy5sb3dlckNhc2UobmF0aXZlV2ViVGFwVGFiQmFyVmlzaWJpbGl0eSk7XG4gIGxldCBiYW5uZXJWaXNpYmlsaXR5ID0gXy5sb3dlckNhc2UobmF0aXZlV2ViVGFwU21hcnRBcHBCYW5uZXJWaXNpYmlsaXR5KTtcbiAgaWYgKCFWSVNJQklMSVRJRVMuaW5jbHVkZXModGFiQmFyVmlzaWJpbGl0eSkpIHtcbiAgICB0YWJCYXJWaXNpYmlsaXR5ID0gREVURUNUO1xuICB9XG4gIGlmICghVklTSUJJTElUSUVTLmluY2x1ZGVzKGJhbm5lclZpc2liaWxpdHkpKSB7XG4gICAgYmFubmVyVmlzaWJpbGl0eSA9IERFVEVDVDtcbiAgfVxuXG4gIGNvbnN0IGlzSXBob25lID0gYXdhaXQgdGhpcy5nZXRTYWZhcmlJc0lwaG9uZSgpO1xuICBjb25zdCBpc05vdGNoZWQgPSBpc0lwaG9uZSAmJiBhd2FpdCB0aGlzLmdldFNhZmFyaUlzTm90Y2hlZCgpO1xuXG4gIGNvbnN0IG9yaWVudGF0aW9uID0gcmVhbERpbXMuaCA+IHJlYWxEaW1zLncgPyAnUE9SVFJBSVQnIDogJ0xBTkRTQ0FQRSc7XG5cbiAgY29uc3Qgbm90Y2hPZmZzZXQgPSBpc05vdGNoZWRcbiAgICA/IHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc9JywgJzEzLjAnKVxuICAgICAgPyBJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TXzEzXG4gICAgICA6IElQSE9ORV9YX05PVENIX09GRlNFVF9JT1NcbiAgICA6IDA7XG5cbiAgY29uc3QgaXNTY3JvbGxlZCA9IGF3YWl0IHRoaXMuZXhlY3V0ZSgncmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPiAwJyk7XG4gIGlmIChpc1Njcm9sbGVkKSB7XG4gICAgdG9wT2Zmc2V0ID0gSVBIT05FX1NDUk9MTEVEX1RPUF9CQVJfSEVJR0hUICsgbm90Y2hPZmZzZXQ7XG5cbiAgICBpZiAoaXNOb3RjaGVkKSB7XG4gICAgICB0b3BPZmZzZXQgLT0gSVBIT05FX1hfU0NST0xMRURfT0ZGU0VUO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBpUGhvbmUgaXMgbGFuZHNjYXBlIHRoZW4gdGhlcmUgaXMgbm8gdG9wIGJhclxuICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ0xBTkRTQ0FQRScgJiYgaXNJcGhvbmUpIHtcbiAgICAgIHRvcE9mZnNldCA9IDA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRvcE9mZnNldCA9IElQSE9ORV9UT1BfQkFSX0hFSUdIVCArIG5vdGNoT2Zmc2V0O1xuXG4gICAgaWYgKGlzSXBob25lKSB7XG4gICAgICBpZiAob3JpZW50YXRpb24gPT09ICdQT1JUUkFJVCcpIHtcbiAgICAgICAgLy8gVGhlIGJvdHRvbSBiYXIgaXMgb25seSB2aXNpYmxlIHdoZW4gcG9ydHJhaXRcbiAgICAgICAgYm90dG9tT2Zmc2V0ID0gSVBIT05FX0JPVFRPTV9CQVJfT0ZGU0VUO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wT2Zmc2V0ID0gSVBIT05FX0xBTkRTQ0FQRV9UT1BfQkFSX0hFSUdIVDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3JpZW50YXRpb24gPT09ICdMQU5EU0NBUEUnIHx8ICFpc0lwaG9uZSkge1xuICAgICAgaWYgKHRhYkJhclZpc2liaWxpdHkgPT09IFZJU0lCTEUpIHtcbiAgICAgICAgdG9wT2Zmc2V0ICs9IFRBQl9CQVJfT0ZGU0VUO1xuICAgICAgfSBlbHNlIGlmICh0YWJCYXJWaXNpYmlsaXR5ID09PSBERVRFQ1QpIHtcbiAgICAgICAgLy8gVGFicyBvbmx5IGFwcGVhciBpZiB0aGUgZGV2aWNlIGlzIGxhbmRzY2FwZSBvciBpZiBpdCdzIGFuIGlQYWQgc28gd2Ugb25seSBjaGVjayB2aXNpYmlsaXR5IGluIHRoaXMgY2FzZVxuICAgICAgICAvLyBBc3N1bWUgdGhhdCBlYWNoIHRhYiBiYXIgaXMgYSBXZWJWaWV3XG4gICAgICAgIGNvbnN0IGNvbnRleHRzQW5kVmlld3MgPSBhd2FpdCB0aGlzLmdldENvbnRleHRzQW5kVmlld3MoKTtcbiAgICAgICAgY29uc3QgdGFicyA9IGNvbnRleHRzQW5kVmlld3MuZmlsdGVyKChjdHgpID0+IGN0eC5pZC5zdGFydHNXaXRoKCdXRUJWSUVXXycpKTtcblxuICAgICAgICBpZiAodGFicy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBGb3VuZCAke3RhYnMubGVuZ3RofSB0YWJzLiBBc3N1bWluZyB0aGUgdGFiIGJhciBpcyB2aXNpYmxlYCk7XG4gICAgICAgICAgdG9wT2Zmc2V0ICs9IFRBQl9CQVJfT0ZGU0VUO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9wT2Zmc2V0ICs9IGF3YWl0IHRoaXMuZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQoaXNJcGhvbmUsIGJhbm5lclZpc2liaWxpdHkpO1xuXG4gIHd2UG9zLnkgKz0gdG9wT2Zmc2V0O1xuICByZWFsRGltcy5oIC09ICh0b3BPZmZzZXQgKyBib3R0b21PZmZzZXQpO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldCA9IGFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0IChpc0lwaG9uZSwgYmFubmVyVmlzaWJpbGl0eSkge1xuICBsZXQgb2Zmc2V0ID0gMDtcblxuICBpZiAoYmFubmVyVmlzaWJpbGl0eSA9PT0gVklTSUJMRSkge1xuICAgIG9mZnNldCArPSBpc0lwaG9uZSA/XG4gICAgICBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIDpcbiAgICAgIElQQURfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUO1xuICB9IGVsc2UgaWYgKGJhbm5lclZpc2liaWxpdHkgPT09IERFVEVDVCkge1xuICAgIC8vIHRyeSB0byBzZWUgaWYgdGhlcmUgaXMgYW4gU21hcnQgQXBwIEJhbm5lclxuICAgIGNvbnN0IGJhbm5lcnMgPSBhd2FpdCB0aGlzLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnYWNjZXNzaWJpbGl0eSBpZCcsICdDbG9zZSBhcHAgZG93bmxvYWQgb2ZmZXInLCB0cnVlKTtcbiAgICBpZiAoYmFubmVycy5sZW5ndGggPiAwKSB7XG4gICAgICBvZmZzZXQgKz0gaXNJcGhvbmUgP1xuICAgICAgICBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIDpcbiAgICAgICAgSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQ7XG4gICAgfVxuICB9XG5cbiAgbG9nLmRlYnVnKGBBZGRpdGlvbmFsIG5hdGl2ZSB3ZWIgdGFwIG9mZnNldCBjb21wdXRlZDogJHtvZmZzZXR9YCk7XG4gIHJldHVybiBvZmZzZXQ7XG59O1xuXG5hc3luYyBmdW5jdGlvbiB0YXBXZWJFbGVtZW50TmF0aXZlbHkgKGRyaXZlciwgYXRvbXNFbGVtZW50KSB7XG4gIC8vIHRyeSB0byBnZXQgdGhlIHRleHQgb2YgdGhlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgYWNjZXNzaWJsZSBpbiB0aGVcbiAgLy8gbmF0aXZlIGNvbnRleHRcbiAgdHJ5IHtcbiAgICBsZXQgdGV4dCA9IGF3YWl0IGRyaXZlci5leGVjdXRlQXRvbSgnZ2V0X3RleHQnLCBbYXRvbXNFbGVtZW50XSk7XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICB0ZXh0ID0gYXdhaXQgZHJpdmVyLmV4ZWN1dGVBdG9tKCdnZXRfYXR0cmlidXRlX3ZhbHVlJywgW2F0b21zRWxlbWVudCwgJ3ZhbHVlJ10pO1xuICAgIH1cblxuICAgIGlmICh0ZXh0KSB7XG4gICAgICBjb25zdCBlbHMgPSBhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdhY2Nlc3NpYmlsaXR5IGlkJywgdGV4dCwgdHJ1ZSk7XG4gICAgICBpZiAoZWxzLmxlbmd0aCA9PT0gMSB8fCBlbHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGNvbnN0IGVsID0gZWxzWzBdO1xuICAgICAgICAvLyB1c2UgdGFwIGJlY2F1c2Ugb24gaU9TIDExLjIgYW5kIGJlbG93IGBuYXRpdmVDbGlja2AgY3Jhc2hlcyBXREFcbiAgICAgICAgY29uc3QgcmVjdCA9IGF3YWl0IGRyaXZlci5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7dXRpbC51bndyYXBFbGVtZW50KGVsKX0vcmVjdGAsICdHRVQnKTtcbiAgICAgICAgaWYgKGVscy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBjb25zdCBlbDIgPSBlbHNbMV07XG4gICAgICAgICAgY29uc3QgcmVjdDIgPSBhd2FpdCBkcml2ZXIucHJveHlDb21tYW5kKGAvZWxlbWVudC8ke3V0aWwudW53cmFwRWxlbWVudChlbDIpfS9yZWN0YCwgJ0dFVCcpO1xuXG4gICAgICAgICAgaWYgKChyZWN0LnggIT09IHJlY3QyLnggfHwgcmVjdC55ICE9PSByZWN0Mi55KSB8fFxuICAgICAgICAgIChyZWN0LndpZHRoICE9PSByZWN0Mi53aWR0aCB8fCByZWN0LmhlaWdodCAhPT0gcmVjdDIuaGVpZ2h0KSkge1xuICAgICAgICAgICAgLy8gVGhlc2UgMiBuYXRpdmUgZWxlbWVudHMgYXJlIG5vdCByZWZlcnJpbmcgdG8gdGhlIHNhbWUgd2ViIGVsZW1lbnRcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICAgIHg6IE1hdGgucm91bmQocmVjdC54ICsgcmVjdC53aWR0aCAvIDIpLFxuICAgICAgICAgIHk6IE1hdGgucm91bmQocmVjdC55ICsgcmVjdC5oZWlnaHQgLyAyKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgZHJpdmVyLmNsaWNrQ29vcmRzKGNvb3Jkcyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gYW55IGZhaWx1cmUgc2hvdWxkIGZhbGwgdGhyb3VnaCBhbmQgdHJpZ2dlciB0aGUgbW9yZSBlbGFib3JhdGVcbiAgICAvLyBtZXRob2Qgb2YgY2xpY2tpbmdcbiAgICBsb2cud2FybihgRXJyb3IgYXR0ZW1wdGluZyB0byBjbGljazogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4dGVuc2lvbnMubmF0aXZlV2ViVGFwID0gYXN5bmMgZnVuY3Rpb24gbmF0aXZlV2ViVGFwIChlbCkge1xuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG5cbiAgLy8gaWYgc3RyaWN0IG5hdGl2ZSB0YXAsIGRvIG5vdCB0cnkgdG8gZG8gaXQgd2l0aCBXREEgZGlyZWN0bHlcbiAgaWYgKCEoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS5uYXRpdmVXZWJUYXBTdHJpY3QgJiYgYXdhaXQgdGFwV2ViRWxlbWVudE5hdGl2ZWx5KHRoaXMsIGF0b21zRWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbG9nLndhcm4oJ1VuYWJsZSB0byBkbyBzaW1wbGUgbmF0aXZlIHdlYiB0YXAuIEF0dGVtcHRpbmcgdG8gY29udmVydCBjb29yZGluYXRlcycpO1xuXG4gIC8vIGBnZXRfdG9wX2xlZnRfY29vcmRpbmF0ZXNgIHJldHVybnMgdGhlIHdyb25nIHZhbHVlIHNvbWV0aW1lcyxcbiAgLy8gdW5sZXNzIHdlIHByZS1jYWxsIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIGJlZm9yZSB0aGUgYWN0dWFsIGNhbGxzXG4gIGF3YWl0IEIuUHJvbWlzZS5hbGwoW1xuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF9zaXplJywgW2F0b21zRWxlbWVudF0pLFxuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF90b3BfbGVmdF9jb29yZGluYXRlcycsIFthdG9tc0VsZW1lbnRdKSxcbiAgXSk7XG5cbiAgY29uc3QgW3NpemUsIGNvb3JkaW5hdGVzXSA9IGF3YWl0IEIuUHJvbWlzZS5hbGwoW1xuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF9zaXplJywgW2F0b21zRWxlbWVudF0pLFxuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF90b3BfbGVmdF9jb29yZGluYXRlcycsIFthdG9tc0VsZW1lbnRdKSxcbiAgXSk7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHNpemU7XG4gIGxldCB7eCwgeX0gPSBjb29yZGluYXRlcztcbiAgeCArPSB3aWR0aCAvIDI7XG4gIHkgKz0gaGVpZ2h0IC8gMjtcblxuICB0aGlzLmN1cldlYkNvb3JkcyA9IHt4LCB5fTtcbiAgYXdhaXQgdGhpcy5jbGlja1dlYkNvb3JkcygpO1xufTtcblxuZXh0ZW5zaW9ucy5jbGlja0Nvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIGNsaWNrQ29vcmRzIChjb29yZHMpIHtcbiAgYXdhaXQgdGhpcy5wZXJmb3JtVG91Y2goW1xuICAgIHtcbiAgICAgIGFjdGlvbjogJ3RhcCcsXG4gICAgICBvcHRpb25zOiBjb29yZHMsXG4gICAgfSxcbiAgXSk7XG59O1xuXG5leHRlbnNpb25zLnRyYW5zbGF0ZVdlYkNvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIHRyYW5zbGF0ZVdlYkNvb3JkcyAoY29vcmRzKSB7XG4gIGxvZy5kZWJ1ZyhgVHJhbnNsYXRpbmcgY29vcmRpbmF0ZXMgKCR7SlNPTi5zdHJpbmdpZnkoY29vcmRzKX0pIHRvIHdlYiBjb29yZGluYXRlc2ApO1xuXG4gIC8vIGFic29sdXRpemUgd2ViIGNvb3Jkc1xuICBsZXQgd2VidmlldztcbiAgdHJ5IHtcbiAgICB3ZWJ2aWV3ID0gYXdhaXQgcmV0cnlJbnRlcnZhbCg1LCAxMDAsIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdjbGFzcyBuYW1lJywgJ1hDVUlFbGVtZW50VHlwZVdlYlZpZXcnLCBmYWxzZSkpO1xuICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgaWYgKCF3ZWJ2aWV3KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBXZWJWaWV3IGZvdW5kLiBVbmFibGUgdG8gdHJhbnNsYXRlIHdlYiBjb29yZGluYXRlcyBmb3IgbmF0aXZlIHdlYiB0YXAuYCk7XG4gIH1cblxuICB3ZWJ2aWV3ID0gdXRpbC51bndyYXBFbGVtZW50KHdlYnZpZXcpO1xuXG4gIGNvbnN0IHJlY3QgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL2VsZW1lbnQvJHt3ZWJ2aWV3fS9yZWN0YCwgJ0dFVCcpO1xuICBjb25zdCB3dlBvcyA9IHt4OiByZWN0LngsIHk6IHJlY3QueX07XG4gIGNvbnN0IHJlYWxEaW1zID0ge3c6IHJlY3Qud2lkdGgsIGg6IHJlY3QuaGVpZ2h0fTtcblxuICBjb25zdCBjbWQgPSAnKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHt3OiB3aW5kb3cuaW5uZXJXaWR0aCwgaDogd2luZG93LmlubmVySGVpZ2h0fTsgfSkoKSc7XG4gIGNvbnN0IHd2RGltcyA9IGF3YWl0IHRoaXMucmVtb3RlLmV4ZWN1dGUoY21kKTtcblxuICAvLyBrZWVwIHRyYWNrIG9mIGltcGxpY2l0IHdhaXQsIGFuZCBzZXQgbG9jYWxseSB0byAwXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNDk4OFxuICBjb25zdCBpbXBsaWNpdFdhaXRNcyA9IHRoaXMuaW1wbGljaXRXYWl0TXM7XG4gIGF3YWl0IHRoaXMuc2V0SW1wbGljaXRXYWl0KDApO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuZ2V0RXh0cmFUcmFuc2xhdGVXZWJDb29yZHNPZmZzZXQod3ZQb3MsIHJlYWxEaW1zKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCB0aGlzLnNldEltcGxpY2l0V2FpdChpbXBsaWNpdFdhaXRNcyk7XG4gIH1cblxuICBpZiAod3ZEaW1zICYmIHJlYWxEaW1zICYmIHd2UG9zKSB7XG4gICAgbGV0IHhSYXRpbyA9IHJlYWxEaW1zLncgLyB3dkRpbXMudztcbiAgICBsZXQgeVJhdGlvID0gcmVhbERpbXMuaCAvIHd2RGltcy5oO1xuICAgIGxldCBuZXdDb29yZHMgPSB7XG4gICAgICB4OiB3dlBvcy54ICsgTWF0aC5yb3VuZCh4UmF0aW8gKiBjb29yZHMueCksXG4gICAgICB5OiB3dlBvcy55ICsgTWF0aC5yb3VuZCh5UmF0aW8gKiBjb29yZHMueSksXG4gICAgfTtcblxuICAgIC8vIGFkZGl0aW9uYWwgbG9nZ2luZyBmb3IgY29vcmRpbmF0ZXMsIHNpbmNlIGl0IGlzIHNvbWV0aW1lcyBicm9rZW5cbiAgICAvLyAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvOTE1OVxuICAgIGxvZy5kZWJ1ZyhgQ29udmVydGVkIGNvb3JkaW5hdGVzOiAke0pTT04uc3RyaW5naWZ5KG5ld0Nvb3Jkcyl9YCk7XG4gICAgbG9nLmRlYnVnKGAgICAgcmVjdDogJHtKU09OLnN0cmluZ2lmeShyZWN0KX1gKTtcbiAgICBsb2cuZGVidWcoYCAgICB3dlBvczogJHtKU09OLnN0cmluZ2lmeSh3dlBvcyl9YCk7XG4gICAgbG9nLmRlYnVnKGAgICAgcmVhbERpbXM6ICR7SlNPTi5zdHJpbmdpZnkocmVhbERpbXMpfWApO1xuICAgIGxvZy5kZWJ1ZyhgICAgIHd2RGltczogJHtKU09OLnN0cmluZ2lmeSh3dkRpbXMpfWApO1xuICAgIGxvZy5kZWJ1ZyhgICAgIHhSYXRpbzogJHtKU09OLnN0cmluZ2lmeSh4UmF0aW8pfWApO1xuICAgIGxvZy5kZWJ1ZyhgICAgIHlSYXRpbzogJHtKU09OLnN0cmluZ2lmeSh5UmF0aW8pfWApO1xuXG4gICAgbG9nLmRlYnVnKGBDb252ZXJ0ZWQgd2ViIGNvb3JkcyAke0pTT04uc3RyaW5naWZ5KGNvb3Jkcyl9IGAgK1xuICAgICAgICAgICAgICBgaW50byByZWFsIGNvb3JkcyAke0pTT04uc3RyaW5naWZ5KG5ld0Nvb3Jkcyl9YCk7XG4gICAgcmV0dXJuIG5ld0Nvb3JkcztcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5jaGVja0ZvckFsZXJ0ID0gYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JBbGVydCAoKSB7XG4gIHJldHVybiBfLmlzU3RyaW5nKGF3YWl0IHRoaXMuZ2V0QWxlcnRUZXh0KCkpO1xufTtcblxuZXh0ZW5zaW9ucy53YWl0Rm9yQXRvbSA9IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JBdG9tIChwcm9taXNlKSB7XG4gIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG5cbiAgLy8gbmVlZCB0byBjaGVjayBmb3IgYWxlcnQgd2hpbGUgdGhlIGF0b20gaXMgYmVpbmcgZXhlY3V0ZWQuXG4gIC8vIHNvIG5vdGlmeSBvdXJzZWx2ZXMgd2hlbiBpdCBoYXBwZW5zXG4gIGNvbnN0IHRpbWVkQXRvbVByb21pc2UgPSBCLnJlc29sdmUocHJvbWlzZSkudGltZW91dChBVE9NX1dBSVRfVElNRU9VVF9NUyk7XG4gIGNvbnN0IGhhbmRsZVByb21pc2VFcnJvciA9IGFzeW5jIChwKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3Qgb3JpZ2luYWxFcnJvciA9IChlcnIgaW5zdGFuY2VvZiBCLkFnZ3JlZ2F0ZUVycm9yKSA/IGVyclswXSA6IGVycjtcbiAgICAgIGxvZy5kZWJ1ZyhgRXJyb3IgcmVjZWl2ZWQgd2hpbGUgZXhlY3V0aW5nIGF0b206ICR7b3JpZ2luYWxFcnJvci5tZXNzYWdlfWApO1xuICAgICAgaWYgKG9yaWdpbmFsRXJyb3IgaW5zdGFuY2VvZiBCLlRpbWVvdXRFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpZCBub3QgZ2V0IGFueSByZXNwb25zZSBmb3IgYXRvbSBleGVjdXRpb24gYWZ0ZXIgYCArXG4gICAgICAgICAgYCR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgIH1cbiAgfTtcbiAgLy8gaWYgdGhlIGF0b20gcHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aGluIEFUT01fSU5JVElBTF9XQUlUX01TXG4gIC8vIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgYW4gYWxlcnQgcHJlc2VuY2VcbiAgYXdhaXQgaGFuZGxlUHJvbWlzZUVycm9yKEIuYW55KFtCLmRlbGF5KEFUT01fSU5JVElBTF9XQUlUX01TKSwgdGltZWRBdG9tUHJvbWlzZV0pKTtcbiAgaWYgKHRpbWVkQXRvbVByb21pc2UuaXNGdWxmaWxsZWQoKSkge1xuICAgIHJldHVybiBhd2FpdCB0aW1lZEF0b21Qcm9taXNlO1xuICB9XG5cbiAgLy8gLi4ub3RoZXJ3aXNlIG1ha2Ugc3VyZSB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIGFsZXJ0IGNvdmVyaW5nIHRoZSBlbGVtZW50XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KHRoaXMuX3dhaXRpbmdBdG9tcykpIHtcbiAgICB0aGlzLl93YWl0aW5nQXRvbXMgPSB7XG4gICAgICBjb3VudDogMCxcbiAgICAgIGFsZXJ0Tm90aWZpZXI6IG5ldyBFdmVudEVtaXR0ZXIoKSxcbiAgICAgIGFsZXJ0TW9uaXRvcjogQi5yZXNvbHZlKCksXG4gICAgfTtcbiAgfVxuICB0aGlzLl93YWl0aW5nQXRvbXMuY291bnQrKztcblxuICBsZXQgb25BbGVydENhbGxiYWNrO1xuICB0cnkge1xuICAgIC8vIG9ubHkgcmVzdGFydCB0aGUgbW9uaXRvciBpZiBpdCBpcyBub3QgcnVubmluZyBhbHJlYWR5XG4gICAgaWYgKHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE1vbml0b3IuaXNSZXNvbHZlZCgpKSB7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnRNb25pdG9yID0gQi5yZXNvbHZlKChhc3luYyAoKSA9PiB7XG4gICAgICAgIHdoaWxlICh0aGlzLl93YWl0aW5nQXRvbXMuY291bnQgPiAwKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrRm9yQWxlcnQoKSkge1xuICAgICAgICAgICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5lbWl0KE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICAgICAgYXdhaXQgQi5kZWxheShBVE9NX0lOSVRJQUxfV0FJVF9NUyAvIDIpO1xuICAgICAgICB9XG4gICAgICB9KSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgb25BbGVydENhbGxiYWNrID0gKCkgPT4gcmVqZWN0KG5ldyBlcnJvcnMuVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yKCkpO1xuICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0Tm90aWZpZXIub25jZShPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCwgb25BbGVydENhbGxiYWNrKTtcbiAgICAgIGhhbmRsZVByb21pc2VFcnJvcih0aW1lZEF0b21Qcm9taXNlKVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tdGhlblxuICAgICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAob25BbGVydENhbGxiYWNrKSB7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5yZW1vdmVMaXN0ZW5lcihPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCwgb25BbGVydENhbGxiYWNrKTtcbiAgICB9XG4gICAgdGhpcy5fd2FpdGluZ0F0b21zLmNvdW50LS07XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMubW9iaWxlV2ViTmF2ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlV2ViTmF2IChuYXZUeXBlKSB7XG4gIHRoaXMucmVtb3RlLmFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQgPSB0cnVlO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW2BoaXN0b3J5LiR7bmF2VHlwZX0oKTtgLCBudWxsXSk7XG4gIH0gZmluYWxseSB7XG4gICAgdGhpcy5yZW1vdGUuYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZCA9IGZhbHNlO1xuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGNvbW1hbmRzLCBleHRlbnNpb25zLCBoZWxwZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy93ZWIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
726
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy93ZWIuanMiXSwibmFtZXMiOlsiSVBIT05FX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX1NDUk9MTEVEX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX1hfU0NST0xMRURfT0ZGU0VUIiwiSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPUyIsIklQSE9ORV9YX05PVENIX09GRlNFVF9JT1NfMTMiLCJJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX0JPVFRPTV9CQVJfT0ZGU0VUIiwiVEFCX0JBUl9PRkZTRVQiLCJJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIiwiSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQiLCJOT1RDSEVEX0RFVklDRV9TSVpFUyIsInciLCJoIiwiVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIiLCJ1dGlsIiwiQVRPTV9XQUlUX1RJTUVPVVRfTVMiLCJBVE9NX0lOSVRJQUxfV0FJVF9NUyIsIk9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UIiwiVklTSUJMRSIsIklOVklTSUJMRSIsIkRFVEVDVCIsIlZJU0lCSUxJVElFUyIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIiLCJpZCIsIl8iLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNFbXB0eSIsImlzTmFOIiwic2V0RnJhbWUiLCJmcmFtZSIsImlzV2ViQ29udGV4dCIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJpc051bGwiLCJjdXJXZWJGcmFtZXMiLCJsb2ciLCJkZWJ1ZyIsImhhc0VsZW1lbnRJZCIsImF0b21zRWxlbWVudCIsImdldEF0b21zRWxlbWVudCIsInZhbHVlIiwiZXhlY3V0ZUF0b20iLCJXSU5ET1ciLCJ1bnNoaWZ0IiwiYXRvbSIsImlzVW5kZWZpbmVkIiwiTm9TdWNoRnJhbWVFcnJvciIsImdldENzc1Byb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZWwiLCJzdWJtaXQiLCJyZWZyZXNoIiwiZ2V0VXJsIiwicmVtb3RlIiwiZXhlY3V0ZSIsInRpdGxlIiwiZ2V0Q29va2llcyIsInNjcmlwdCIsImpzQ29va2llcyIsImNvb2tpZXMiLCJuYW1lIiwidG9QYWlycyIsImNvb2tpZVV0aWxzIiwiY3JlYXRlSldQQ29va2llIiwidW5kZWZpbmVkIiwicHVzaCIsImVyciIsImVycm9yIiwiVW5rbm93bkVycm9yIiwic2V0Q29va2llIiwiY29va2llIiwiY2xvbmUiLCJwYXRoIiwianNDb29raWUiLCJjcmVhdGVKU0Nvb2tpZSIsImV4cGlyZXMiLCJleHBpcnkiLCJEYXRlIiwidG9VVENTdHJpbmciLCJkb21haW4iLCJodHRwT25seSIsInNlY3VyZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWxldGVDb29raWUiLCJjb29raWVOYW1lIiwiaW5kZXhPZiIsIm1hcCIsIl9kZWxldGVDb29raWUiLCJkZWxldGVDb29raWVzIiwibGVuZ3RoIiwid2ViQ29va2llIiwiZXhwaXJlQ29va2llIiwiY2FjaGVXZWJFbGVtZW50IiwiaXNQbGFpbk9iamVjdCIsImVsSWQiLCJ1bndyYXBFbGVtZW50IiwiY2FjaGVJZCIsImluY2x1ZGVzIiwidXVpZFY0Iiwid2ViRWxlbWVudHNDYWNoZSIsInNldCIsIndyYXBFbGVtZW50IiwiY2FjaGVXZWJFbGVtZW50cyIsInJlc3BvbnNlIiwidG9DYWNoZWQiLCJ2IiwiaXNBcnJheSIsInJlc3VsdCIsInJlZHVjZSIsImFjYyIsImtleSIsImZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYW55IiwiY3R4IiwiY29udGV4dEVsZW1lbnQiLCJpc05pbCIsImVsZW1lbnQiLCJkb0ZpbmQiLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJtZXNzYWdlIiwiaXNGdW5jdGlvbiIsIm1hdGNoIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiY2xpY2tXZWJDb29yZHMiLCJjb29yZHMiLCJ0cmFuc2xhdGVXZWJDb29yZHMiLCJjdXJXZWJDb29yZHMiLCJjbGlja0Nvb3JkcyIsImFyZ3MiLCJhbHdheXNEZWZhdWx0RnJhbWUiLCJmcmFtZXMiLCJwcm9taXNlIiwid2FpdEZvckF0b20iLCJleGVjdXRlQXRvbUFzeW5jIiwicmVzcG9uc2VVcmwiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsImFzeW5jUHJvbWlzZSIsImVsT3JJZCIsImhhcyIsIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yIiwiRUxFTUVOVCIsImdldCIsImNvbnZlcnRFbGVtZW50c0ZvckF0b21zIiwiYXJnIiwiZ2V0RWxlbWVudElkIiwiaGFzVmFsdWUiLCJnZXRTYWZhcmlJc0lwaG9uZSIsIm1lbW9pemUiLCJ1c2VyQWdlbnQiLCJ0b0xvd2VyQ2FzZSIsIndhcm4iLCJnZXRTYWZhcmlEZXZpY2VTaXplIiwid2lkdGgiLCJoZWlnaHQiLCJub3JtSGVpZ2h0Iiwibm9ybVdpZHRoIiwiZ2V0U2FmYXJpSXNOb3RjaGVkIiwiZGV2aWNlIiwiZ2V0RXh0cmFUcmFuc2xhdGVXZWJDb29yZHNPZmZzZXQiLCJ3dlBvcyIsInJlYWxEaW1zIiwidG9wT2Zmc2V0IiwiYm90dG9tT2Zmc2V0IiwibmF0aXZlV2ViVGFwVGFiQmFyVmlzaWJpbGl0eSIsIm5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSIsInNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJ0YWJCYXJWaXNpYmlsaXR5IiwibG93ZXJDYXNlIiwiYmFubmVyVmlzaWJpbGl0eSIsImlzSXBob25lIiwiaXNOb3RjaGVkIiwib3JpZW50YXRpb24iLCJub3RjaE9mZnNldCIsImNvbXBhcmVWZXJzaW9ucyIsIm9wdHMiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc1Njcm9sbGVkIiwiY29udGV4dHNBbmRWaWV3cyIsImdldENvbnRleHRzQW5kVmlld3MiLCJ0YWJzIiwiZmlsdGVyIiwic3RhcnRzV2l0aCIsImdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0IiwieSIsIm9mZnNldCIsImJhbm5lcnMiLCJmaW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMiLCJ0YXBXZWJFbGVtZW50TmF0aXZlbHkiLCJkcml2ZXIiLCJ0ZXh0IiwiZWxzIiwicmVjdCIsInByb3h5Q29tbWFuZCIsImVsMiIsInJlY3QyIiwieCIsIk1hdGgiLCJyb3VuZCIsIm5hdGl2ZVdlYlRhcCIsIm5hdGl2ZVdlYlRhcFN0cmljdCIsIlByb21pc2UiLCJhbGwiLCJzaXplIiwiY29vcmRpbmF0ZXMiLCJwZXJmb3JtVG91Y2giLCJhY3Rpb24iLCJvcHRpb25zIiwid2VidmlldyIsImlnbiIsIkVycm9yIiwiY21kIiwid3ZEaW1zIiwiaW1wbGljaXRXYWl0TXMiLCJzZXRJbXBsaWNpdFdhaXQiLCJ4UmF0aW8iLCJ5UmF0aW8iLCJuZXdDb29yZHMiLCJjaGVja0ZvckFsZXJ0IiwiZ2V0QWxlcnRUZXh0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidGltZWRBdG9tUHJvbWlzZSIsInRpbWVvdXQiLCJoYW5kbGVQcm9taXNlRXJyb3IiLCJwIiwib3JpZ2luYWxFcnJvciIsIkFnZ3JlZ2F0ZUVycm9yIiwiVGltZW91dEVycm9yIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJhbnkiLCJkZWxheSIsImlzRnVsZmlsbGVkIiwiX3dhaXRpbmdBdG9tcyIsImNvdW50IiwiYWxlcnROb3RpZmllciIsIkV2ZW50RW1pdHRlciIsImFsZXJ0TW9uaXRvciIsIm9uQWxlcnRDYWxsYmFjayIsImlzUmVzb2x2ZWQiLCJlbWl0IiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwib25jZSIsInRoZW4iLCJjYXRjaCIsInJlbW92ZUxpc3RlbmVyIiwibW9iaWxlV2ViTmF2IiwibmF2VHlwZSIsImFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQiLCJPYmplY3QiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7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LFNBQUtMLGFBQUwsQ0FBbUJDLEtBQW5CO0FBQ0Q7QUFDRixDQWxFRDs7QUFvRUEvTixVQUFVLENBQUMyTyxZQUFYLEdBQTBCLGVBQWVBLFlBQWYsQ0FBNkJDLE9BQTdCLEVBQXNDO0FBQzlELE9BQUszTSxNQUFMLENBQVk0TSw0QkFBWixHQUEyQyxJQUEzQzs7QUFDQSxNQUFJO0FBQ0YsVUFBTSxLQUFLeE4sV0FBTCxDQUFpQixnQkFBakIsRUFBbUMsQ0FBRSxXQUFVdU4sT0FBUSxLQUFwQixFQUEwQixJQUExQixDQUFuQyxDQUFOO0FBQ0QsR0FGRCxTQUVVO0FBQ1IsU0FBSzNNLE1BQUwsQ0FBWTRNLDRCQUFaLEdBQTJDLEtBQTNDO0FBQ0Q7QUFDRixDQVBEOztBQVNBQyxNQUFNLENBQUNDLE1BQVAsQ0FBY2pQLFFBQWQsRUFBd0JFLFVBQXhCLEVBQW9DRCxPQUFwQztlQUVlRCxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHV0aWwsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBlcnJvcnMsIGlzRXJyb3JUeXBlIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCBjb29raWVVdGlscyBmcm9tICcuLi9jb29raWVzJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5cbmNvbnN0IElQSE9ORV9UT1BfQkFSX0hFSUdIVCA9IDcxO1xuY29uc3QgSVBIT05FX1NDUk9MTEVEX1RPUF9CQVJfSEVJR0hUID0gNDE7XG5jb25zdCBJUEhPTkVfWF9TQ1JPTExFRF9PRkZTRVQgPSA1NTtcbmNvbnN0IElQSE9ORV9YX05PVENIX09GRlNFVF9JT1MgPSAyNDtcbmNvbnN0IElQSE9ORV9YX05PVENIX09GRlNFVF9JT1NfMTMgPSAyMDtcblxuY29uc3QgSVBIT05FX0xBTkRTQ0FQRV9UT1BfQkFSX0hFSUdIVCA9IDUxO1xuY29uc3QgSVBIT05FX0JPVFRPTV9CQVJfT0ZGU0VUID0gNDk7XG5jb25zdCBUQUJfQkFSX09GRlNFVCA9IDMzO1xuY29uc3QgSVBIT05FX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA9IDg0O1xuY29uc3QgSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQgPSA5NTtcblxuY29uc3QgTk9UQ0hFRF9ERVZJQ0VfU0laRVMgPSBbXG4gIHt3OiAxMTI1LCBoOiAyNDM2fSwgLy8gMTEgUHJvLCBYLCBYc1xuICB7dzogODI4LCBoOiAxNzkyfSwgLy8gMTEsIFhyXG4gIHt3OiAxMjQyLCBoOiAyNjg4fSwgLy8gMTEgUHJvIE1heCwgWHMgTWF4XG5dO1xuXG5jb25zdCB7IFczQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSIH0gPSB1dGlsO1xuXG5jb25zdCBBVE9NX1dBSVRfVElNRU9VVF9NUyA9IDIgKiA2MDAwMDtcbmNvbnN0IEFUT01fSU5JVElBTF9XQUlUX01TID0gMTAwMDtcblxuY29uc3QgT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQgPSAnYWxlcnQnO1xuXG5jb25zdCBWSVNJQkxFID0gJ3Zpc2libGUnO1xuY29uc3QgSU5WSVNJQkxFID0gJ2ludmlzaWJsZSc7XG5jb25zdCBERVRFQ1QgPSAnZGV0ZWN0JztcbmNvbnN0IFZJU0lCSUxJVElFUyA9IFtWSVNJQkxFLCBJTlZJU0lCTEUsIERFVEVDVF07XG5cbmNvbnN0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIgKGlkKSB7XG4gIGlmICghXy5pc1N0cmluZyhpZCkgJiYgIV8uaXNOdW1iZXIoaWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChfLmlzU3RyaW5nKGlkKSAmJiBfLmlzRW1wdHkoaWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChfLmlzTnVtYmVyKGlkKSAmJiBpc05hTihpZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmNvbW1hbmRzLnNldEZyYW1lID0gYXN5bmMgZnVuY3Rpb24gc2V0RnJhbWUgKGZyYW1lKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgaWYgKF8uaXNOdWxsKGZyYW1lKSkge1xuICAgIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gICAgbG9nLmRlYnVnKCdMZWF2aW5nIHdlYiBmcmFtZSBhbmQgZ29pbmcgYmFjayB0byBkZWZhdWx0IGNvbnRlbnQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaGVscGVycy5oYXNFbGVtZW50SWQoZnJhbWUpKSB7XG4gICAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZnJhbWUpO1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X2ZyYW1lX3dpbmRvdycsIFthdG9tc0VsZW1lbnRdKTtcbiAgICBsb2cuZGVidWcoYEVudGVyaW5nIG5ldyB3ZWIgZnJhbWU6ICcke3ZhbHVlLldJTkRPV30nYCk7XG4gICAgdGhpcy5jdXJXZWJGcmFtZXMudW5zaGlmdCh2YWx1ZS5XSU5ET1cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGF0b20gPSBfLmlzTnVtYmVyKGZyYW1lKSA/ICdmcmFtZV9ieV9pbmRleCcgOiAnZnJhbWVfYnlfaWRfb3JfbmFtZSc7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKGF0b20sIFtmcmFtZV0pO1xuICAgIGlmIChfLmlzTnVsbCh2YWx1ZSkgfHwgXy5pc1VuZGVmaW5lZCh2YWx1ZS5XSU5ET1cpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaEZyYW1lRXJyb3IoKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBFbnRlcmluZyBuZXcgd2ViIGZyYW1lOiAnJHt2YWx1ZS5XSU5ET1d9J2ApO1xuICAgIHRoaXMuY3VyV2ViRnJhbWVzLnVuc2hpZnQodmFsdWUuV0lORE9XKTtcbiAgfVxufTtcblxuY29tbWFuZHMuZ2V0Q3NzUHJvcGVydHkgPSBhc3luYyBmdW5jdGlvbiBnZXRDc3NQcm9wZXJ0eSAocHJvcGVydHlOYW1lLCBlbCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGNvbnN0IGF0b21zRWxlbWVudCA9IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGVsKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2dldF92YWx1ZV9vZl9jc3NfcHJvcGVydHknLCBbYXRvbXNFbGVtZW50LCBwcm9wZXJ0eU5hbWVdKTtcbn07XG5cbmNvbW1hbmRzLnN1Ym1pdCA9IGFzeW5jIGZ1bmN0aW9uIHN1Ym1pdCAoZWwpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ3N1Ym1pdCcsIFthdG9tc0VsZW1lbnRdKTtcbn07XG5cbmNvbW1hbmRzLnJlZnJlc2ggPSBhc3luYyBmdW5jdGlvbiByZWZyZXNoICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdyZWZyZXNoJywgW10pO1xufTtcblxuY29tbWFuZHMuZ2V0VXJsID0gYXN5bmMgZnVuY3Rpb24gZ2V0VXJsICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5yZW1vdGUuZXhlY3V0ZSgnd2luZG93LmxvY2F0aW9uLmhyZWYnKTtcbn07XG5cbmNvbW1hbmRzLnRpdGxlID0gYXN5bmMgZnVuY3Rpb24gdGl0bGUgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCd0aXRsZScsIFtdLCB0cnVlKTtcbn07XG5cbmNvbW1hbmRzLmdldENvb2tpZXMgPSBhc3luYyBmdW5jdGlvbiBnZXRDb29raWVzICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBsb2cuZGVidWcoJ1JldHJpZXZpbmcgYWxsIGNvb2tpZXMnKTtcblxuICBsZXQgc2NyaXB0ID0gJ3JldHVybiBkb2N1bWVudC5jb29raWUnO1xuICBsZXQganNDb29raWVzID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xuXG4gIGxldCBjb29raWVzID0gW107XG4gIHRyeSB7XG4gICAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY29va2llVXRpbHMuY3JlYXRlSldQQ29va2llKHVuZGVmaW5lZCwganNDb29raWVzKSkpIHtcbiAgICAgIGNvb2tpZXMucHVzaCh7bmFtZSwgdmFsdWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvb2tpZXM7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvcihlcnIpO1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkVycm9yKGBFcnJvciBwYXJzaW5nIGNvb2tpZXMgZnJvbSByZXN1bHQ6ICcke2pzQ29va2llc30nYCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLnNldENvb2tpZSA9IGFzeW5jIGZ1bmN0aW9uIHNldENvb2tpZSAoY29va2llKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgY29va2llID0gXy5jbG9uZShjb29raWUpO1xuXG4gIC8vIGlmIGBwYXRoYCBmaWVsZCBpcyBub3Qgc3BlY2lmaWVkLCBTYWZhcmkgd2lsbCBub3QgdXBkYXRlIGNvb2tpZXMgYXMgZXhwZWN0ZWQ7IGVnIGlzc3VlICMxNzA4XG4gIGlmICghY29va2llLnBhdGgpIHtcbiAgICBjb29raWUucGF0aCA9ICcvJztcbiAgfVxuXG4gIGNvbnN0IGpzQ29va2llID0gY29va2llVXRpbHMuY3JlYXRlSlNDb29raWUoY29va2llLm5hbWUsIGNvb2tpZS52YWx1ZSwge1xuICAgIGV4cGlyZXM6IF8uaXNOdW1iZXIoY29va2llLmV4cGlyeSkgPyAobmV3IERhdGUoY29va2llLmV4cGlyeSAqIDEwMDApKS50b1VUQ1N0cmluZygpIDpcbiAgICAgIGNvb2tpZS5leHBpcnksXG4gICAgcGF0aDogY29va2llLnBhdGgsXG4gICAgZG9tYWluOiBjb29raWUuZG9tYWluLFxuICAgIGh0dHBPbmx5OiBjb29raWUuaHR0cE9ubHksXG4gICAgc2VjdXJlOiBjb29raWUuc2VjdXJlXG4gIH0pO1xuICBsZXQgc2NyaXB0ID0gYGRvY3VtZW50LmNvb2tpZSA9ICR7SlNPTi5zdHJpbmdpZnkoanNDb29raWUpfWA7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgW11dKTtcbn07XG5cbmNvbW1hbmRzLmRlbGV0ZUNvb2tpZSA9IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUNvb2tpZSAoY29va2llTmFtZSkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIC8vIGNoZWNrIGNvb2tpZSBleGlzdGVuY2VcbiAgbGV0IGNvb2tpZXMgPSBhd2FpdCB0aGlzLmdldENvb2tpZXMoKTtcbiAgaWYgKF8uaW5kZXhPZihfLm1hcChjb29raWVzLCAnbmFtZScpLCBjb29raWVOYW1lKSA9PT0gLTEpIHtcbiAgICBsb2cuZGVidWcoYENvb2tpZSAnJHtjb29raWVOYW1lfScgbm90IGZvdW5kLiBJZ25vcmluZy5gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLl9kZWxldGVDb29raWUoY29va2llTmFtZSk7XG59O1xuXG5jb21tYW5kcy5kZWxldGVDb29raWVzID0gYXN5bmMgZnVuY3Rpb24gZGVsZXRlQ29va2llcyAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgbGV0IGNvb2tpZXMgPSBhd2FpdCB0aGlzLmdldENvb2tpZXMoKTtcbiAgaWYgKGNvb2tpZXMubGVuZ3RoKSB7XG4gICAgZm9yIChsZXQgY29va2llIG9mIGNvb2tpZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2RlbGV0ZUNvb2tpZShjb29raWUubmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuaGVscGVycy5fZGVsZXRlQ29va2llID0gYXN5bmMgZnVuY3Rpb24gX2RlbGV0ZUNvb2tpZSAoY29va2llTmFtZSkge1xuICBsb2cuZGVidWcoYERlbGV0aW5nIGNvb2tpZSAnJHtjb29raWVOYW1lfSdgKTtcbiAgbGV0IHdlYkNvb2tpZSA9IGNvb2tpZVV0aWxzLmV4cGlyZUNvb2tpZShjb29raWVOYW1lLCB7cGF0aDogJy8nfSk7XG4gIGxldCBzY3JpcHQgPSBgZG9jdW1lbnQuY29va2llID0gJHtKU09OLnN0cmluZ2lmeSh3ZWJDb29raWUpfWA7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgW11dKTtcbn07XG5cbmhlbHBlcnMuY2FjaGVXZWJFbGVtZW50ID0gZnVuY3Rpb24gY2FjaGVXZWJFbGVtZW50IChlbCkge1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChlbCkpIHtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgY29uc3QgZWxJZCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG4gIGlmICghaXNWYWxpZEVsZW1lbnRJZGVudGlmaWVyKGVsSWQpKSB7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIC8vIEluIG5ld2VyIGRlYnVnZ2VyIHJlbGVhc2VzIGVsZW1lbnQgaWRlbnRpZmllcnMgbG9vayBsaWtlIGA6d2RjOjE2MjgxNTE2NDkzMjVgXG4gIC8vIFdlIGFzc3VtZSBpdCBpcyBzYWZlIHRvIHVzZSB0aGVzZSB0byBpZGVudGlmeSBjYWNoZWQgZWxlbWVudHNcbiAgY29uc3QgY2FjaGVJZCA9IF8uaW5jbHVkZXMoZWxJZCwgJzonKSA/IGVsSWQgOiB1dGlsLnV1aWRWNCgpO1xuICB0aGlzLndlYkVsZW1lbnRzQ2FjaGUuc2V0KGNhY2hlSWQsIGVsSWQpO1xuICByZXR1cm4gdXRpbC53cmFwRWxlbWVudChjYWNoZUlkKTtcbn07XG5cbmhlbHBlcnMuY2FjaGVXZWJFbGVtZW50cyA9IGZ1bmN0aW9uIGNhY2hlV2ViRWxlbWVudHMgKHJlc3BvbnNlKSB7XG4gIGNvbnN0IHRvQ2FjaGVkID0gKHYpID0+IF8uaXNBcnJheSh2KSB8fCBfLmlzUGxhaW5PYmplY3QodilcbiAgICA/IHRoaXMuY2FjaGVXZWJFbGVtZW50cyh2KVxuICAgIDogdjtcblxuICBpZiAoXy5pc0FycmF5KHJlc3BvbnNlKSkge1xuICAgIHJldHVybiByZXNwb25zZS5tYXAodG9DYWNoZWQpO1xuICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChyZXNwb25zZSkpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7Li4ucmVzcG9uc2UsIC4uLih0aGlzLmNhY2hlV2ViRWxlbWVudChyZXNwb25zZSkpfTtcbiAgICByZXR1cm4gXy50b1BhaXJzKHJlc3VsdCkucmVkdWNlKFxuICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGFjY1trZXldID0gdG9DYWNoZWQodmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge31cbiAgICApO1xuICB9XG4gIHJldHVybiByZXNwb25zZTtcbn07XG5cbmV4dGVuc2lvbnMuZmluZFdlYkVsZW1lbnRPckVsZW1lbnRzID0gYXN5bmMgZnVuY3Rpb24gZmluZFdlYkVsZW1lbnRPckVsZW1lbnRzIChzdHJhdGVneSwgc2VsZWN0b3IsIG1hbnksIGN0eCkge1xuICBjb25zdCBjb250ZXh0RWxlbWVudCA9IF8uaXNOaWwoY3R4KSA/IG51bGwgOiB0aGlzLmdldEF0b21zRWxlbWVudChjdHgpO1xuICBsZXQgZWxlbWVudDtcbiAgbGV0IGRvRmluZCA9IGFzeW5jICgpID0+IHtcbiAgICBlbGVtZW50ID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbShgZmluZF9lbGVtZW50JHttYW55ID8gJ3MnIDogJyd9YCwgW3N0cmF0ZWd5LCBzZWxlY3RvciwgY29udGV4dEVsZW1lbnRdKTtcbiAgICByZXR1cm4gIV8uaXNOdWxsKGVsZW1lbnQpO1xuICB9O1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuaW1wbGljaXRXYWl0Rm9yQ29uZGl0aW9uKGRvRmluZCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubWVzc2FnZSAmJiBfLmlzRnVuY3Rpb24oZXJyLm1lc3NhZ2UubWF0Y2gpICYmIGVyci5tZXNzYWdlLm1hdGNoKC9Db25kaXRpb24gdW5tZXQvKSkge1xuICAgICAgLy8gY29uZGl0aW9uIHdhcyBub3QgbWV0IHNldHRpbmcgcmVzIHRvIGVtcHR5IGFycmF5XG4gICAgICBlbGVtZW50ID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBpZiAobWFueSkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMoZWxlbWVudCk7XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShlbGVtZW50KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRWxlbWVudEVycm9yKCk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuY2FjaGVXZWJFbGVtZW50cyhlbGVtZW50KTtcbn07XG5cbmV4dGVuc2lvbnMuY2xpY2tXZWJDb29yZHMgPSBhc3luYyBmdW5jdGlvbiBjbGlja1dlYkNvb3JkcyAoKSB7XG4gIGxldCBjb29yZHMgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVdlYkNvb3Jkcyh0aGlzLmN1cldlYkNvb3Jkcyk7XG4gIGF3YWl0IHRoaXMuY2xpY2tDb29yZHMoY29vcmRzKTtcbn07XG5cbmhlbHBlcnMuZXhlY3V0ZUF0b20gPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXRvbSAoYXRvbSwgYXJncywgYWx3YXlzRGVmYXVsdEZyYW1lID0gZmFsc2UpIHtcbiAgbGV0IGZyYW1lcyA9IGFsd2F5c0RlZmF1bHRGcmFtZSA9PT0gdHJ1ZSA/IFtdIDogdGhpcy5jdXJXZWJGcmFtZXM7XG4gIGxldCBwcm9taXNlID0gdGhpcy5yZW1vdGUuZXhlY3V0ZUF0b20oYXRvbSwgYXJncywgZnJhbWVzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2FpdEZvckF0b20ocHJvbWlzZSk7XG59O1xuXG5oZWxwZXJzLmV4ZWN1dGVBdG9tQXN5bmMgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXRvbUFzeW5jIChhdG9tLCBhcmdzLCByZXNwb25zZVVybCkge1xuICAvLyBzYXZlIHRoZSByZXNvbHZlIGFuZCByZWplY3QgbWV0aG9kcyBvZiB0aGUgcHJvbWlzZSB0byBiZSB3YWl0ZWQgZm9yXG4gIGxldCBwcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRoaXMuYXN5bmNQcm9taXNlID0ge3Jlc29sdmUsIHJlamVjdH07XG4gIH0pO1xuICBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlQXRvbUFzeW5jKGF0b20sIGFyZ3MsIHRoaXMuY3VyV2ViRnJhbWVzLCByZXNwb25zZVVybCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLndhaXRGb3JBdG9tKHByb21pc2UpO1xufTtcblxuaGVscGVycy5nZXRBdG9tc0VsZW1lbnQgPSBmdW5jdGlvbiBnZXRBdG9tc0VsZW1lbnQgKGVsT3JJZCkge1xuICBjb25zdCBlbElkID0gdXRpbC51bndyYXBFbGVtZW50KGVsT3JJZCk7XG4gIGlmICghdGhpcy53ZWJFbGVtZW50c0NhY2hlLmhhcyhlbElkKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IoKTtcbiAgfVxuICByZXR1cm4ge0VMRU1FTlQ6IHRoaXMud2ViRWxlbWVudHNDYWNoZS5nZXQoZWxJZCl9O1xufTtcblxuaGVscGVycy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyA9IGZ1bmN0aW9uIGNvbnZlcnRFbGVtZW50c0ZvckF0b21zIChhcmdzID0gW10pIHtcbiAgcmV0dXJuIGFyZ3MubWFwKChhcmcpID0+IHtcbiAgICBpZiAoaGVscGVycy5oYXNFbGVtZW50SWQoYXJnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXRvbXNFbGVtZW50KGFyZyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCFpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5TdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcikpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmc7XG4gICAgfVxuICAgIHJldHVybiBfLmlzQXJyYXkoYXJnKSA/IHRoaXMuY29udmVydEVsZW1lbnRzRm9yQXRvbXMoYXJnKSA6IGFyZztcbiAgfSk7XG59O1xuXG5oZWxwZXJzLmdldEVsZW1lbnRJZCA9IGZ1bmN0aW9uIGdldEVsZW1lbnRJZCAoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5FTEVNRU5UIHx8IGVsZW1lbnRbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVJdO1xufTtcblxuaGVscGVycy5oYXNFbGVtZW50SWQgPSBmdW5jdGlvbiBoYXNFbGVtZW50SWQgKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHV0aWwuaGFzVmFsdWUoZWxlbWVudCkgJiYgKHV0aWwuaGFzVmFsdWUoZWxlbWVudC5FTEVNRU5UKSB8fCB1dGlsLmhhc1ZhbHVlKGVsZW1lbnRbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVJdKSk7XG59O1xuXG5leHRlbnNpb25zLmdldFNhZmFyaUlzSXBob25lID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldFNhZmFyaUlzSXBob25lICgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB1c2VyQWdlbnQgPSBhd2FpdCB0aGlzLmV4ZWN1dGUoJ3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Jyk7XG4gICAgcmV0dXJuIHVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdpcGhvbmUnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byBmaW5kIGRldmljZSB0eXBlIGZyb20gdXNlcmFnZW50LiBBc3N1bWluZyBpUGhvbmVgKTtcbiAgICBsb2cuZGVidWcoYEVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiB0cnVlO1xufSk7XG5cbmV4dGVuc2lvbnMuZ2V0U2FmYXJpRGV2aWNlU2l6ZSA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRTYWZhcmlEZXZpY2VTaXplICgpIHtcbiAgY29uc3Qgc2NyaXB0ID0gJ3JldHVybiB7aGVpZ2h0OiB3aW5kb3cuc2NyZWVuLmF2YWlsSGVpZ2h0ICogd2luZG93LmRldmljZVBpeGVsUmF0aW8sIHdpZHRoOiB3aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGggKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb307JztcbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5leGVjdXRlKHNjcmlwdCk7XG4gIGNvbnN0IFtub3JtSGVpZ2h0LCBub3JtV2lkdGhdID0gaGVpZ2h0ID4gd2lkdGggPyBbaGVpZ2h0LCB3aWR0aF0gOiBbd2lkdGgsIGhlaWdodF07XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IG5vcm1XaWR0aCxcbiAgICBoZWlnaHQ6IG5vcm1IZWlnaHQsXG4gIH07XG59KTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlJc05vdGNoZWQgPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpSXNOb3RjaGVkICgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmdldFNhZmFyaURldmljZVNpemUoKTtcbiAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBOT1RDSEVEX0RFVklDRV9TSVpFUykge1xuICAgICAgaWYgKGRldmljZS53ID09PSB3aWR0aCAmJiBkZXZpY2UuaCA9PT0gaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byBmaW5kIGRldmljZSB0eXBlIGZyb20gZGltZW5zaW9ucy4gQXNzdW1pbmcgdGhlIGRldmljZSBpcyBub3Qgbm90Y2hlZGApO1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSk7XG5cbmV4dGVuc2lvbnMuZ2V0RXh0cmFUcmFuc2xhdGVXZWJDb29yZHNPZmZzZXQgPSBhc3luYyBmdW5jdGlvbiBnZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCAod3ZQb3MsIHJlYWxEaW1zKSB7XG4gIGxldCB0b3BPZmZzZXQgPSAwO1xuICBsZXQgYm90dG9tT2Zmc2V0ID0gMDtcblxuICAvLyBObyBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIFNtYXJ0IEFwcCBCYW5uZXIgb3IgVGFiIEJhciBpcyB2aXNpYmxlIG9yIG5vdFxuICAvLyBpZiBhbHJlYWR5IGRlZmluZWQgYnkgbmF0aXZlV2ViVGFwVGFiQmFyVmlzaWJpbGl0eSBvciBuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkgaW4gc2V0dGluZ3MuXG4gIGNvbnN0IHtcbiAgICBuYXRpdmVXZWJUYXBUYWJCYXJWaXNpYmlsaXR5LFxuICAgIG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eVxuICB9ID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpO1xuICBsZXQgdGFiQmFyVmlzaWJpbGl0eSA9IF8ubG93ZXJDYXNlKG5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkpO1xuICBsZXQgYmFubmVyVmlzaWJpbGl0eSA9IF8ubG93ZXJDYXNlKG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSk7XG4gIGlmICghVklTSUJJTElUSUVTLmluY2x1ZGVzKHRhYkJhclZpc2liaWxpdHkpKSB7XG4gICAgdGFiQmFyVmlzaWJpbGl0eSA9IERFVEVDVDtcbiAgfVxuICBpZiAoIVZJU0lCSUxJVElFUy5pbmNsdWRlcyhiYW5uZXJWaXNpYmlsaXR5KSkge1xuICAgIGJhbm5lclZpc2liaWxpdHkgPSBERVRFQ1Q7XG4gIH1cblxuICBjb25zdCBpc0lwaG9uZSA9IGF3YWl0IHRoaXMuZ2V0U2FmYXJpSXNJcGhvbmUoKTtcbiAgY29uc3QgaXNOb3RjaGVkID0gaXNJcGhvbmUgJiYgYXdhaXQgdGhpcy5nZXRTYWZhcmlJc05vdGNoZWQoKTtcblxuICBjb25zdCBvcmllbnRhdGlvbiA9IHJlYWxEaW1zLmggPiByZWFsRGltcy53ID8gJ1BPUlRSQUlUJyA6ICdMQU5EU0NBUEUnO1xuXG4gIGNvbnN0IG5vdGNoT2Zmc2V0ID0gaXNOb3RjaGVkXG4gICAgPyB1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPScsICcxMy4wJylcbiAgICAgID8gSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xM1xuICAgICAgOiBJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TXG4gICAgOiAwO1xuXG4gIGNvbnN0IGlzU2Nyb2xsZWQgPSBhd2FpdCB0aGlzLmV4ZWN1dGUoJ3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID4gMCcpO1xuICBpZiAoaXNTY3JvbGxlZCkge1xuICAgIHRvcE9mZnNldCA9IElQSE9ORV9TQ1JPTExFRF9UT1BfQkFSX0hFSUdIVCArIG5vdGNoT2Zmc2V0O1xuXG4gICAgaWYgKGlzTm90Y2hlZCkge1xuICAgICAgdG9wT2Zmc2V0IC09IElQSE9ORV9YX1NDUk9MTEVEX09GRlNFVDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgaVBob25lIGlzIGxhbmRzY2FwZSB0aGVuIHRoZXJlIGlzIG5vIHRvcCBiYXJcbiAgICBpZiAob3JpZW50YXRpb24gPT09ICdMQU5EU0NBUEUnICYmIGlzSXBob25lKSB7XG4gICAgICB0b3BPZmZzZXQgPSAwO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0b3BPZmZzZXQgPSBJUEhPTkVfVE9QX0JBUl9IRUlHSFQgKyBub3RjaE9mZnNldDtcblxuICAgIGlmIChpc0lwaG9uZSkge1xuICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnUE9SVFJBSVQnKSB7XG4gICAgICAgIC8vIFRoZSBib3R0b20gYmFyIGlzIG9ubHkgdmlzaWJsZSB3aGVuIHBvcnRyYWl0XG4gICAgICAgIGJvdHRvbU9mZnNldCA9IElQSE9ORV9CT1RUT01fQkFSX09GRlNFVDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvcE9mZnNldCA9IElQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9yaWVudGF0aW9uID09PSAnTEFORFNDQVBFJyB8fCAhaXNJcGhvbmUpIHtcbiAgICAgIGlmICh0YWJCYXJWaXNpYmlsaXR5ID09PSBWSVNJQkxFKSB7XG4gICAgICAgIHRvcE9mZnNldCArPSBUQUJfQkFSX09GRlNFVDtcbiAgICAgIH0gZWxzZSBpZiAodGFiQmFyVmlzaWJpbGl0eSA9PT0gREVURUNUKSB7XG4gICAgICAgIC8vIFRhYnMgb25seSBhcHBlYXIgaWYgdGhlIGRldmljZSBpcyBsYW5kc2NhcGUgb3IgaWYgaXQncyBhbiBpUGFkIHNvIHdlIG9ubHkgY2hlY2sgdmlzaWJpbGl0eSBpbiB0aGlzIGNhc2VcbiAgICAgICAgLy8gQXNzdW1lIHRoYXQgZWFjaCB0YWIgYmFyIGlzIGEgV2ViVmlld1xuICAgICAgICBjb25zdCBjb250ZXh0c0FuZFZpZXdzID0gYXdhaXQgdGhpcy5nZXRDb250ZXh0c0FuZFZpZXdzKCk7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBjb250ZXh0c0FuZFZpZXdzLmZpbHRlcigoY3R4KSA9PiBjdHguaWQuc3RhcnRzV2l0aCgnV0VCVklFV18nKSk7XG5cbiAgICAgICAgaWYgKHRhYnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgJHt0YWJzLmxlbmd0aH0gdGFicy4gQXNzdW1pbmcgdGhlIHRhYiBiYXIgaXMgdmlzaWJsZWApO1xuICAgICAgICAgIHRvcE9mZnNldCArPSBUQUJfQkFSX09GRlNFVDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvcE9mZnNldCArPSBhd2FpdCB0aGlzLmdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0KGlzSXBob25lLCBiYW5uZXJWaXNpYmlsaXR5KTtcblxuICB3dlBvcy55ICs9IHRvcE9mZnNldDtcbiAgcmVhbERpbXMuaCAtPSAodG9wT2Zmc2V0ICsgYm90dG9tT2Zmc2V0KTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQgPSBhc3luYyBmdW5jdGlvbiBnZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldCAoaXNJcGhvbmUsIGJhbm5lclZpc2liaWxpdHkpIHtcbiAgbGV0IG9mZnNldCA9IDA7XG5cbiAgaWYgKGJhbm5lclZpc2liaWxpdHkgPT09IFZJU0lCTEUpIHtcbiAgICBvZmZzZXQgKz0gaXNJcGhvbmUgP1xuICAgICAgSVBIT05FX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA6XG4gICAgICBJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVDtcbiAgfSBlbHNlIGlmIChiYW5uZXJWaXNpYmlsaXR5ID09PSBERVRFQ1QpIHtcbiAgICAvLyB0cnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIFNtYXJ0IEFwcCBCYW5uZXJcbiAgICBjb25zdCBiYW5uZXJzID0gYXdhaXQgdGhpcy5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2FjY2Vzc2liaWxpdHkgaWQnLCAnQ2xvc2UgYXBwIGRvd25sb2FkIG9mZmVyJywgdHJ1ZSk7XG4gICAgaWYgKGJhbm5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgb2Zmc2V0ICs9IGlzSXBob25lID9cbiAgICAgICAgSVBIT05FX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA6XG4gICAgICAgIElQQURfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUO1xuICAgIH1cbiAgfVxuXG4gIGxvZy5kZWJ1ZyhgQWRkaXRpb25hbCBuYXRpdmUgd2ViIHRhcCBvZmZzZXQgY29tcHV0ZWQ6ICR7b2Zmc2V0fWApO1xuICByZXR1cm4gb2Zmc2V0O1xufTtcblxuYXN5bmMgZnVuY3Rpb24gdGFwV2ViRWxlbWVudE5hdGl2ZWx5IChkcml2ZXIsIGF0b21zRWxlbWVudCkge1xuICAvLyB0cnkgdG8gZ2V0IHRoZSB0ZXh0IG9mIHRoZSBlbGVtZW50LCB3aGljaCB3aWxsIGJlIGFjY2Vzc2libGUgaW4gdGhlXG4gIC8vIG5hdGl2ZSBjb250ZXh0XG4gIHRyeSB7XG4gICAgbGV0IHRleHQgPSBhd2FpdCBkcml2ZXIuZXhlY3V0ZUF0b20oJ2dldF90ZXh0JywgW2F0b21zRWxlbWVudF0pO1xuICAgIGlmICghdGV4dCkge1xuICAgICAgdGV4dCA9IGF3YWl0IGRyaXZlci5leGVjdXRlQXRvbSgnZ2V0X2F0dHJpYnV0ZV92YWx1ZScsIFthdG9tc0VsZW1lbnQsICd2YWx1ZSddKTtcbiAgICB9XG5cbiAgICBpZiAodGV4dCkge1xuICAgICAgY29uc3QgZWxzID0gYXdhaXQgZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnYWNjZXNzaWJpbGl0eSBpZCcsIHRleHQsIHRydWUpO1xuICAgICAgaWYgKGVscy5sZW5ndGggPT09IDEgfHwgZWxzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBjb25zdCBlbCA9IGVsc1swXTtcbiAgICAgICAgLy8gdXNlIHRhcCBiZWNhdXNlIG9uIGlPUyAxMS4yIGFuZCBiZWxvdyBgbmF0aXZlQ2xpY2tgIGNyYXNoZXMgV0RBXG4gICAgICAgIGNvbnN0IHJlY3QgPSBhd2FpdCBkcml2ZXIucHJveHlDb21tYW5kKGAvZWxlbWVudC8ke3V0aWwudW53cmFwRWxlbWVudChlbCl9L3JlY3RgLCAnR0VUJyk7XG4gICAgICAgIGlmIChlbHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgY29uc3QgZWwyID0gZWxzWzFdO1xuICAgICAgICAgIGNvbnN0IHJlY3QyID0gYXdhaXQgZHJpdmVyLnByb3h5Q29tbWFuZChgL2VsZW1lbnQvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWwyKX0vcmVjdGAsICdHRVQnKTtcblxuICAgICAgICAgIGlmICgocmVjdC54ICE9PSByZWN0Mi54IHx8IHJlY3QueSAhPT0gcmVjdDIueSkgfHxcbiAgICAgICAgICAocmVjdC53aWR0aCAhPT0gcmVjdDIud2lkdGggfHwgcmVjdC5oZWlnaHQgIT09IHJlY3QyLmhlaWdodCkpIHtcbiAgICAgICAgICAgIC8vIFRoZXNlIDIgbmF0aXZlIGVsZW1lbnRzIGFyZSBub3QgcmVmZXJyaW5nIHRvIHRoZSBzYW1lIHdlYiBlbGVtZW50XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgICB4OiBNYXRoLnJvdW5kKHJlY3QueCArIHJlY3Qud2lkdGggLyAyKSxcbiAgICAgICAgICB5OiBNYXRoLnJvdW5kKHJlY3QueSArIHJlY3QuaGVpZ2h0IC8gMiksXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IGRyaXZlci5jbGlja0Nvb3Jkcyhjb29yZHMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIGFueSBmYWlsdXJlIHNob3VsZCBmYWxsIHRocm91Z2ggYW5kIHRyaWdnZXIgdGhlIG1vcmUgZWxhYm9yYXRlXG4gICAgLy8gbWV0aG9kIG9mIGNsaWNraW5nXG4gICAgbG9nLndhcm4oYEVycm9yIGF0dGVtcHRpbmcgdG8gY2xpY2s6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHRlbnNpb25zLm5hdGl2ZVdlYlRhcCA9IGFzeW5jIGZ1bmN0aW9uIG5hdGl2ZVdlYlRhcCAoZWwpIHtcbiAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuXG4gIC8vIGlmIHN0cmljdCBuYXRpdmUgdGFwLCBkbyBub3QgdHJ5IHRvIGRvIGl0IHdpdGggV0RBIGRpcmVjdGx5XG4gIGlmICghKGF3YWl0IHRoaXMuc2V0dGluZ3MuZ2V0U2V0dGluZ3MoKSkubmF0aXZlV2ViVGFwU3RyaWN0ICYmIGF3YWl0IHRhcFdlYkVsZW1lbnROYXRpdmVseSh0aGlzLCBhdG9tc0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZy53YXJuKCdVbmFibGUgdG8gZG8gc2ltcGxlIG5hdGl2ZSB3ZWIgdGFwLiBBdHRlbXB0aW5nIHRvIGNvbnZlcnQgY29vcmRpbmF0ZXMnKTtcblxuICAvLyBgZ2V0X3RvcF9sZWZ0X2Nvb3JkaW5hdGVzYCByZXR1cm5zIHRoZSB3cm9uZyB2YWx1ZSBzb21ldGltZXMsXG4gIC8vIHVubGVzcyB3ZSBwcmUtY2FsbCBib3RoIG9mIHRoZXNlIGZ1bmN0aW9ucyBiZWZvcmUgdGhlIGFjdHVhbCBjYWxsc1xuICBhd2FpdCBCLlByb21pc2UuYWxsKFtcbiAgICB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfc2l6ZScsIFthdG9tc0VsZW1lbnRdKSxcbiAgICB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfdG9wX2xlZnRfY29vcmRpbmF0ZXMnLCBbYXRvbXNFbGVtZW50XSksXG4gIF0pO1xuXG4gIGNvbnN0IFtzaXplLCBjb29yZGluYXRlc10gPSBhd2FpdCBCLlByb21pc2UuYWxsKFtcbiAgICB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfc2l6ZScsIFthdG9tc0VsZW1lbnRdKSxcbiAgICB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfdG9wX2xlZnRfY29vcmRpbmF0ZXMnLCBbYXRvbXNFbGVtZW50XSksXG4gIF0pO1xuICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBzaXplO1xuICBsZXQge3gsIHl9ID0gY29vcmRpbmF0ZXM7XG4gIHggKz0gd2lkdGggLyAyO1xuICB5ICs9IGhlaWdodCAvIDI7XG5cbiAgdGhpcy5jdXJXZWJDb29yZHMgPSB7eCwgeX07XG4gIGF3YWl0IHRoaXMuY2xpY2tXZWJDb29yZHMoKTtcbn07XG5cbmV4dGVuc2lvbnMuY2xpY2tDb29yZHMgPSBhc3luYyBmdW5jdGlvbiBjbGlja0Nvb3JkcyAoY29vcmRzKSB7XG4gIGF3YWl0IHRoaXMucGVyZm9ybVRvdWNoKFtcbiAgICB7XG4gICAgICBhY3Rpb246ICd0YXAnLFxuICAgICAgb3B0aW9uczogY29vcmRzLFxuICAgIH0sXG4gIF0pO1xufTtcblxuZXh0ZW5zaW9ucy50cmFuc2xhdGVXZWJDb29yZHMgPSBhc3luYyBmdW5jdGlvbiB0cmFuc2xhdGVXZWJDb29yZHMgKGNvb3Jkcykge1xuICBsb2cuZGVidWcoYFRyYW5zbGF0aW5nIGNvb3JkaW5hdGVzICgke0pTT04uc3RyaW5naWZ5KGNvb3Jkcyl9KSB0byB3ZWIgY29vcmRpbmF0ZXNgKTtcblxuICAvLyBhYnNvbHV0aXplIHdlYiBjb29yZHNcbiAgbGV0IHdlYnZpZXc7XG4gIHRyeSB7XG4gICAgd2VidmlldyA9IGF3YWl0IHJldHJ5SW50ZXJ2YWwoNSwgMTAwLCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnY2xhc3MgbmFtZScsICdYQ1VJRWxlbWVudFR5cGVXZWJWaWV3JywgZmFsc2UpKTtcbiAgfSBjYXRjaCAoaWduKSB7fVxuXG4gIGlmICghd2Vidmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gV2ViVmlldyBmb3VuZC4gVW5hYmxlIHRvIHRyYW5zbGF0ZSB3ZWIgY29vcmRpbmF0ZXMgZm9yIG5hdGl2ZSB3ZWIgdGFwLmApO1xuICB9XG5cbiAgd2VidmlldyA9IHV0aWwudW53cmFwRWxlbWVudCh3ZWJ2aWV3KTtcblxuICBjb25zdCByZWN0ID0gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7d2Vidmlld30vcmVjdGAsICdHRVQnKTtcbiAgY29uc3Qgd3ZQb3MgPSB7eDogcmVjdC54LCB5OiByZWN0Lnl9O1xuICBjb25zdCByZWFsRGltcyA9IHt3OiByZWN0LndpZHRoLCBoOiByZWN0LmhlaWdodH07XG5cbiAgY29uc3QgY21kID0gJyhmdW5jdGlvbiAoKSB7IHJldHVybiB7dzogd2luZG93LmlubmVyV2lkdGgsIGg6IHdpbmRvdy5pbm5lckhlaWdodH07IH0pKCknO1xuICBjb25zdCB3dkRpbXMgPSBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlKGNtZCk7XG5cbiAgLy8ga2VlcCB0cmFjayBvZiBpbXBsaWNpdCB3YWl0LCBhbmQgc2V0IGxvY2FsbHkgdG8gMFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTQ5ODhcbiAgY29uc3QgaW1wbGljaXRXYWl0TXMgPSB0aGlzLmltcGxpY2l0V2FpdE1zO1xuICBhd2FpdCB0aGlzLnNldEltcGxpY2l0V2FpdCgwKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0KHd2UG9zLCByZWFsRGltcyk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgdGhpcy5zZXRJbXBsaWNpdFdhaXQoaW1wbGljaXRXYWl0TXMpO1xuICB9XG5cbiAgaWYgKHd2RGltcyAmJiByZWFsRGltcyAmJiB3dlBvcykge1xuICAgIGxldCB4UmF0aW8gPSByZWFsRGltcy53IC8gd3ZEaW1zLnc7XG4gICAgbGV0IHlSYXRpbyA9IHJlYWxEaW1zLmggLyB3dkRpbXMuaDtcbiAgICBsZXQgbmV3Q29vcmRzID0ge1xuICAgICAgeDogd3ZQb3MueCArIE1hdGgucm91bmQoeFJhdGlvICogY29vcmRzLngpLFxuICAgICAgeTogd3ZQb3MueSArIE1hdGgucm91bmQoeVJhdGlvICogY29vcmRzLnkpLFxuICAgIH07XG5cbiAgICAvLyBhZGRpdGlvbmFsIGxvZ2dpbmcgZm9yIGNvb3JkaW5hdGVzLCBzaW5jZSBpdCBpcyBzb21ldGltZXMgYnJva2VuXG4gICAgLy8gICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzkxNTlcbiAgICBsb2cuZGVidWcoYENvbnZlcnRlZCBjb29yZGluYXRlczogJHtKU09OLnN0cmluZ2lmeShuZXdDb29yZHMpfWApO1xuICAgIGxvZy5kZWJ1ZyhgICAgIHJlY3Q6ICR7SlNPTi5zdHJpbmdpZnkocmVjdCl9YCk7XG4gICAgbG9nLmRlYnVnKGAgICAgd3ZQb3M6ICR7SlNPTi5zdHJpbmdpZnkod3ZQb3MpfWApO1xuICAgIGxvZy5kZWJ1ZyhgICAgIHJlYWxEaW1zOiAke0pTT04uc3RyaW5naWZ5KHJlYWxEaW1zKX1gKTtcbiAgICBsb2cuZGVidWcoYCAgICB3dkRpbXM6ICR7SlNPTi5zdHJpbmdpZnkod3ZEaW1zKX1gKTtcbiAgICBsb2cuZGVidWcoYCAgICB4UmF0aW86ICR7SlNPTi5zdHJpbmdpZnkoeFJhdGlvKX1gKTtcbiAgICBsb2cuZGVidWcoYCAgICB5UmF0aW86ICR7SlNPTi5zdHJpbmdpZnkoeVJhdGlvKX1gKTtcblxuICAgIGxvZy5kZWJ1ZyhgQ29udmVydGVkIHdlYiBjb29yZHMgJHtKU09OLnN0cmluZ2lmeShjb29yZHMpfSBgICtcbiAgICAgICAgICAgICAgYGludG8gcmVhbCBjb29yZHMgJHtKU09OLnN0cmluZ2lmeShuZXdDb29yZHMpfWApO1xuICAgIHJldHVybiBuZXdDb29yZHM7XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMuY2hlY2tGb3JBbGVydCA9IGFzeW5jIGZ1bmN0aW9uIGNoZWNrRm9yQWxlcnQgKCkge1xuICByZXR1cm4gXy5pc1N0cmluZyhhd2FpdCB0aGlzLmdldEFsZXJ0VGV4dCgpKTtcbn07XG5cbmV4dGVuc2lvbnMud2FpdEZvckF0b20gPSBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yQXRvbSAocHJvbWlzZSkge1xuICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuXG4gIC8vIG5lZWQgdG8gY2hlY2sgZm9yIGFsZXJ0IHdoaWxlIHRoZSBhdG9tIGlzIGJlaW5nIGV4ZWN1dGVkLlxuICAvLyBzbyBub3RpZnkgb3Vyc2VsdmVzIHdoZW4gaXQgaGFwcGVuc1xuICBjb25zdCB0aW1lZEF0b21Qcm9taXNlID0gQi5yZXNvbHZlKHByb21pc2UpLnRpbWVvdXQoQVRPTV9XQUlUX1RJTUVPVVRfTVMpO1xuICBjb25zdCBoYW5kbGVQcm9taXNlRXJyb3IgPSBhc3luYyAocCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgcDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsRXJyb3IgPSAoZXJyIGluc3RhbmNlb2YgQi5BZ2dyZWdhdGVFcnJvcikgPyBlcnJbMF0gOiBlcnI7XG4gICAgICBsb2cuZGVidWcoYEVycm9yIHJlY2VpdmVkIHdoaWxlIGV4ZWN1dGluZyBhdG9tOiAke29yaWdpbmFsRXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIGlmIChvcmlnaW5hbEVycm9yIGluc3RhbmNlb2YgQi5UaW1lb3V0RXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgbm90IGdldCBhbnkgcmVzcG9uc2UgZm9yIGF0b20gZXhlY3V0aW9uIGFmdGVyIGAgK1xuICAgICAgICAgIGAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgICAgfVxuICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICB9XG4gIH07XG4gIC8vIGlmIHRoZSBhdG9tIHByb21pc2UgaXMgZnVsZmlsbGVkIHdpdGhpbiBBVE9NX0lOSVRJQUxfV0FJVF9NU1xuICAvLyB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGFuIGFsZXJ0IHByZXNlbmNlXG4gIGF3YWl0IGhhbmRsZVByb21pc2VFcnJvcihCLmFueShbQi5kZWxheShBVE9NX0lOSVRJQUxfV0FJVF9NUyksIHRpbWVkQXRvbVByb21pc2VdKSk7XG4gIGlmICh0aW1lZEF0b21Qcm9taXNlLmlzRnVsZmlsbGVkKCkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGltZWRBdG9tUHJvbWlzZTtcbiAgfVxuXG4gIC8vIC4uLm90aGVyd2lzZSBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gdW5leHBlY3RlZCBhbGVydCBjb3ZlcmluZyB0aGUgZWxlbWVudFxuICBpZiAoIV8uaXNQbGFpbk9iamVjdCh0aGlzLl93YWl0aW5nQXRvbXMpKSB7XG4gICAgdGhpcy5fd2FpdGluZ0F0b21zID0ge1xuICAgICAgY291bnQ6IDAsXG4gICAgICBhbGVydE5vdGlmaWVyOiBuZXcgRXZlbnRFbWl0dGVyKCksXG4gICAgICBhbGVydE1vbml0b3I6IEIucmVzb2x2ZSgpLFxuICAgIH07XG4gIH1cbiAgdGhpcy5fd2FpdGluZ0F0b21zLmNvdW50Kys7XG5cbiAgbGV0IG9uQWxlcnRDYWxsYmFjaztcbiAgdHJ5IHtcbiAgICAvLyBvbmx5IHJlc3RhcnQgdGhlIG1vbml0b3IgaWYgaXQgaXMgbm90IHJ1bm5pbmcgYWxyZWFkeVxuICAgIGlmICh0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnRNb25pdG9yLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0TW9uaXRvciA9IEIucmVzb2x2ZSgoYXN5bmMgKCkgPT4ge1xuICAgICAgICB3aGlsZSAodGhpcy5fd2FpdGluZ0F0b21zLmNvdW50ID4gMCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5jaGVja0ZvckFsZXJ0KCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0Tm90aWZpZXIuZW1pdChPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgICAgICAgIGF3YWl0IEIuZGVsYXkoQVRPTV9JTklUSUFMX1dBSVRfTVMgLyAyKTtcbiAgICAgICAgfVxuICAgICAgfSkoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIG9uQWxlcnRDYWxsYmFjayA9ICgpID0+IHJlamVjdChuZXcgZXJyb3JzLlVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvcigpKTtcbiAgICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE5vdGlmaWVyLm9uY2UoT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQsIG9uQWxlcnRDYWxsYmFjayk7XG4gICAgICBoYW5kbGVQcm9taXNlRXJyb3IodGltZWRBdG9tUHJvbWlzZSlcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW5cbiAgICAgICAgLnRoZW4ocmVzb2x2ZSlcbiAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKG9uQWxlcnRDYWxsYmFjaykge1xuICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0Tm90aWZpZXIucmVtb3ZlTGlzdGVuZXIoT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQsIG9uQWxlcnRDYWxsYmFjayk7XG4gICAgfVxuICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5jb3VudC0tO1xuICB9XG59O1xuXG5leHRlbnNpb25zLm1vYmlsZVdlYk5hdiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVdlYk5hdiAobmF2VHlwZSkge1xuICB0aGlzLnJlbW90ZS5hbGxvd05hdmlnYXRpb25XaXRob3V0UmVsb2FkID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtgaGlzdG9yeS4ke25hdlR5cGV9KCk7YCwgbnVsbF0pO1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMucmVtb3RlLmFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQgPSBmYWxzZTtcbiAgfVxufTtcblxuT2JqZWN0LmFzc2lnbihjb21tYW5kcywgZXh0ZW5zaW9ucywgaGVscGVycyk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvd2ViLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -380,10 +380,6 @@ extensions.connectToRemoteDebugger = async function connectToRemoteDebugger () {
380
380
  };
381
381
 
382
382
  extensions.listWebFrames = async function listWebFrames (useUrl = true) {
383
- if (!this.opts.bundleId) {
384
- log.errorAndThrow('Cannot enter web frame without a bundle ID');
385
- }
386
-
387
383
  useUrl = useUrl && !this.isRealDevice() && !!this.getCurrentUrl();
388
384
  log.debug(`Selecting by url: ${useUrl} ${useUrl ? `(expected url: '${this.getCurrentUrl()}')` : ''}`);
389
385
 
@@ -32,7 +32,8 @@ extensions.execute = async function execute (script, args) {
32
32
  return await this.executeMobile(script, _.isArray(args) ? args[0] : args);
33
33
  } else if (this.isWebContext()) {
34
34
  args = this.convertElementsForAtoms(args);
35
- return await this.executeAtom('execute_script', [script, args]);
35
+ const result = await this.executeAtom('execute_script', [script, args]);
36
+ return this.cacheWebElements(result);
36
37
  } else {
37
38
  throw new errors.NotImplementedError();
38
39
  }
@@ -1,11 +1,12 @@
1
- import _ from 'lodash';
2
- import xmldom from 'xmldom';
1
+ import xmldom from '@xmldom/xmldom';
3
2
  import js2xml from 'js2xmlparser2';
4
3
 
5
4
 
6
5
  let commands = {}, helpers = {}, extensions = {};
7
6
 
8
- const APPIUM_SRC_XML = '<?xml version="1.0" encoding="UTF-8"?><AppiumAUT/>';
7
+ const APPIUM_AUT_TAG = 'AppiumAUT';
8
+ const APPIUM_SRC_XML = `<?xml version="1.0" encoding="UTF-8"?><${APPIUM_AUT_TAG}/>`;
9
+ const APPIUM_TAG_PATTERN = new RegExp(`</?${APPIUM_AUT_TAG}/?>`);
9
10
 
10
11
 
11
12
  commands.getPageSource = async function getPageSource () {
@@ -15,31 +16,31 @@ commands.getPageSource = async function getPageSource () {
15
16
  }
16
17
 
17
18
  if ((await this.settings.getSettings()).useJSONSource) {
18
- let srcTree = await this.mobileGetSource({format: 'json'});
19
+ const srcTree = await this.mobileGetSource({format: 'json'});
19
20
  return getSourceXml(getTreeForXML(srcTree));
20
21
  }
21
22
  return await this.getNativePageSource();
22
23
  };
23
24
 
24
25
  helpers.getNativePageSource = async function getNativePageSource () {
25
- let srcTree = await this.proxyCommand('/source', 'GET');
26
-
27
- let parser = new xmldom.DOMParser();
28
-
29
- let tree = parser.parseFromString(srcTree);
30
-
31
- let doc = parser.parseFromString(APPIUM_SRC_XML);
26
+ const srcTree = await this.proxyCommand(`/source?scope=${APPIUM_AUT_TAG}`, 'GET');
27
+ if (APPIUM_TAG_PATTERN.test(srcTree)) {
28
+ return srcTree;
29
+ }
30
+ // This might only happen if the driver is using an older/cached WDA
31
+ // build (e.g. below 3.16.0)
32
+ // TODO: remove this block after a while
33
+ const parser = new xmldom.DOMParser();
34
+ const tree = parser.parseFromString(srcTree);
35
+ const doc = parser.parseFromString(APPIUM_SRC_XML);
32
36
  doc.documentElement.appendChild(tree.documentElement);
33
-
34
37
  return new xmldom.XMLSerializer().serializeToString(doc);
35
38
  };
36
39
 
37
40
  helpers.mobileGetSource = async function mobileGetSource (opts = {}) {
38
- if (!_.isString(opts.format)) {
39
- return await this.getNativePageSource();
40
- }
41
41
  const paramsMap = {
42
- format: opts.format,
42
+ format: opts.format || 'xml',
43
+ scope: APPIUM_AUT_TAG,
43
44
  };
44
45
  if (opts.excludedAttributes) {
45
46
  paramsMap.excluded_attributes = opts.excludedAttributes;
@@ -203,25 +203,38 @@ helpers._deleteCookie = async function _deleteCookie (cookieName) {
203
203
  await this.executeAtom('execute_script', [script, []]);
204
204
  };
205
205
 
206
- helpers.cacheWebElements = function cacheWebElements (rawElements) {
207
- if (!(_.isArray(rawElements) || _.isPlainObject(rawElements))) {
208
- throw new errors.UnknownError(`Web element identifiers cannot be parsed from ` +
209
- JSON.stringify(rawElements));
210
- }
211
-
212
- const cacheElement = (el) => {
213
- const elId = util.unwrapElement(el);
214
- if (!isValidElementIdentifier(elId)) {
215
- throw new errors.UnknownError(`The web element identifier ${JSON.stringify(elId)} cannot be parsed`);
216
- }
217
- // In newer debugger releases element identifiers look like `:wdc:1628151649325`
218
- // We assume it is safe to use these to identify cached elements
219
- const cacheId = _.includes(elId, ':') ? elId : util.uuidV4();
220
- this.webElementsCache.set(cacheId, elId);
221
- return util.wrapElement(cacheId);
222
- };
206
+ helpers.cacheWebElement = function cacheWebElement (el) {
207
+ if (!_.isPlainObject(el)) {
208
+ return el;
209
+ }
210
+ const elId = util.unwrapElement(el);
211
+ if (!isValidElementIdentifier(elId)) {
212
+ return el;
213
+ }
214
+ // In newer debugger releases element identifiers look like `:wdc:1628151649325`
215
+ // We assume it is safe to use these to identify cached elements
216
+ const cacheId = _.includes(elId, ':') ? elId : util.uuidV4();
217
+ this.webElementsCache.set(cacheId, elId);
218
+ return util.wrapElement(cacheId);
219
+ };
223
220
 
224
- return _.isArray(rawElements) ? rawElements.map(cacheElement) : cacheElement(rawElements);
221
+ helpers.cacheWebElements = function cacheWebElements (response) {
222
+ const toCached = (v) => _.isArray(v) || _.isPlainObject(v)
223
+ ? this.cacheWebElements(v)
224
+ : v;
225
+
226
+ if (_.isArray(response)) {
227
+ return response.map(toCached);
228
+ } else if (_.isPlainObject(response)) {
229
+ const result = {...response, ...(this.cacheWebElement(response))};
230
+ return _.toPairs(result).reduce(
231
+ (acc, [key, value]) => {
232
+ acc[key] = toCached(value);
233
+ return acc;
234
+ }, {}
235
+ );
236
+ }
237
+ return response;
225
238
  };
226
239
 
227
240
  extensions.findWebElementOrElements = async function findWebElementOrElements (strategy, selector, many, ctx) {
@@ -245,7 +258,7 @@ extensions.findWebElementOrElements = async function findWebElementOrElements (s
245
258
  if (many) {
246
259
  return this.cacheWebElements(element);
247
260
  }
248
- if (!element || _.size(element) === 0) {
261
+ if (_.isEmpty(element)) {
249
262
  throw new errors.NoSuchElementError();
250
263
  }
251
264
  return this.cacheWebElements(element);
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "xcuitest",
9
9
  "xctest"
10
10
  ],
11
- "version": "3.56.0",
11
+ "version": "3.57.0",
12
12
  "author": "appium",
13
13
  "license": "Apache-2.0",
14
14
  "repository": {
@@ -30,6 +30,31 @@
30
30
  "mainClass": "XCUITestDriver",
31
31
  "scripts": {
32
32
  "build-wda": "./build/lib/build-wda.js"
33
+ },
34
+ "schema": {
35
+ "$schema": "http://json-schema.org/draft-07/schema",
36
+ "type": "object",
37
+ "properties": {
38
+ "webdriveragent-port": {
39
+ "appiumCliDest": "wdaLocalPort",
40
+ "default": 8100,
41
+ "description": "Local port used for communication with WebDriverAgent",
42
+ "maximum": 65535,
43
+ "minimum": 1,
44
+ "type": "integer"
45
+ },
46
+ "webkit-debug-proxy-port": {
47
+ "appiumCliDest": "webkitDebugProxyPort",
48
+ "default": 27753,
49
+ "description": "(Real device only) Port to which `ios-webkit-debug-proxy` is connected",
50
+ "maximum": 65535,
51
+ "minimum": 1,
52
+ "type": "integer"
53
+ }
54
+ },
55
+ "additionalProperties": false,
56
+ "title": "XCUITest Driver Configuration",
57
+ "description": "Appium configuration schema for the XCUITest driver."
33
58
  }
34
59
  },
35
60
  "main": "./build/index.js",
@@ -47,19 +72,20 @@
47
72
  ],
48
73
  "dependencies": {
49
74
  "@babel/runtime": "^7.0.0",
75
+ "@xmldom/xmldom": "^0.x",
50
76
  "appium-base-driver": "^7.0.0",
51
77
  "appium-idb": "^0.x",
52
78
  "appium-ios-device": "^1.8.0",
53
79
  "appium-ios-simulator": "^3.28.0",
54
80
  "appium-remote-debugger": "^8.13.2",
55
81
  "appium-support": "^2.47.1",
56
- "appium-webdriveragent": "^3.13.0",
82
+ "appium-webdriveragent": "^3.16.0",
57
83
  "appium-xcode": "^3.8.0",
58
84
  "async-lock": "^1.0.0",
59
85
  "asyncbox": "^2.3.1",
60
86
  "bluebird": "^3.5.1",
61
87
  "css-selector-parser": "^1.4.1",
62
- "js2xmlparser2": "^0.2.0",
88
+ "js2xmlparser2": "^0.x",
63
89
  "lodash": "^4.17.10",
64
90
  "lru-cache": "^6.0.0",
65
91
  "moment": "^2.24.0",
@@ -67,10 +93,9 @@
67
93
  "node-simctl": "^6.4.0",
68
94
  "portscanner": "2.2.0",
69
95
  "semver": "^7.0.0",
70
- "source-map-support": "^0.5.5",
96
+ "source-map-support": "^0.x",
71
97
  "teen_process": "^1.14.0",
72
- "ws": "^8.0.0",
73
- "xmldom": "^0.x"
98
+ "ws": "^8.0.0"
74
99
  },
75
100
  "scripts": {
76
101
  "clean": "rm -rf node_modules && rm -f package-lock.json && npm install",
@@ -118,7 +143,7 @@
118
143
  "pngjs": "^6.0.0",
119
144
  "pre-commit": "^1.1.3",
120
145
  "semantic-release": "^17.1.2",
121
- "sinon": "^11.0.0",
146
+ "sinon": "^12.0.0",
122
147
  "wd": "^1.5.0"
123
148
  }
124
149
  }