appium-xcuitest-driver 4.18.2 → 4.18.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [4.18.4](https://github.com/appium/appium-xcuitest-driver/compare/v4.18.3...v4.18.4) (2023-02-28)
2
+
3
+
4
+ ### Miscellaneous Chores
5
+
6
+ * Short circuit if the app under test crashes while checking for alerts ([#1510](https://github.com/appium/appium-xcuitest-driver/issues/1510)) ([5684cdf](https://github.com/appium/appium-xcuitest-driver/commit/5684cdf8c55a2d6a59d51e56c94bf0cec01f79a4))
7
+
8
+ ## [4.18.3](https://github.com/appium/appium-xcuitest-driver/compare/v4.18.2...v4.18.3) (2023-02-27)
9
+
10
+
11
+ ### Miscellaneous Chores
12
+
13
+ * Bump @appium/docutils from 0.1.6 to 0.2.2 ([#1509](https://github.com/appium/appium-xcuitest-driver/issues/1509)) ([5e7c927](https://github.com/appium/appium-xcuitest-driver/commit/5e7c927353e38b096d0e7e82f52163e0e022e6bd))
14
+
1
15
  ## [4.18.2](https://github.com/appium/appium-xcuitest-driver/compare/v4.18.1...v4.18.2) (2023-02-26)
2
16
 
3
17
 
@@ -54,6 +54,7 @@ const {
54
54
  const ATOM_WAIT_TIMEOUT_MS = 2 * 60000;
55
55
  const ATOM_INITIAL_WAIT_MS = 1000;
56
56
  const ON_OBSTRUCTING_ALERT_EVENT = 'alert';
57
+ const ON_APP_CRASH_EVENT = 'app_crash';
57
58
  const VISIBLE = 'visible';
58
59
  const INVISIBLE = 'invisible';
59
60
  const DETECT = 'detect';
@@ -490,7 +491,7 @@ extensions.waitForAtom = async function waitForAtom(promise) {
490
491
  const originalError = err instanceof _bluebird.default.AggregateError ? err[0] : err;
491
492
  this.log.debug(`Error received while executing atom: ${originalError.message}`);
492
493
  if (originalError instanceof _bluebird.default.TimeoutError) {
493
- throw new Error(`Did not get any response for atom execution after ` + `${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);
494
+ throw new _driver.errors.TimeoutError(`Did not get any response for atom execution after ` + `${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);
494
495
  }
495
496
  throw originalError;
496
497
  }
@@ -508,6 +509,7 @@ extensions.waitForAtom = async function waitForAtom(promise) {
508
509
  }
509
510
  this._waitingAtoms.count++;
510
511
  let onAlertCallback;
512
+ let onAppCrashCallback;
511
513
  try {
512
514
  if (this._waitingAtoms.alertMonitor.isResolved()) {
513
515
  this._waitingAtoms.alertMonitor = _bluebird.default.resolve((async () => {
@@ -516,20 +518,29 @@ extensions.waitForAtom = async function waitForAtom(promise) {
516
518
  if (await this.checkForAlert()) {
517
519
  this._waitingAtoms.alertNotifier.emit(ON_OBSTRUCTING_ALERT_EVENT);
518
520
  }
519
- } catch (ign) {}
521
+ } catch (err) {
522
+ if ((0, _driver.isErrorType)(err, _driver.errors.InvalidElementStateError)) {
523
+ this._waitingAtoms.alertNotifier.emit(ON_APP_CRASH_EVENT, err);
524
+ }
525
+ }
520
526
  await _bluebird.default.delay(ATOM_INITIAL_WAIT_MS / 2);
521
527
  }
522
528
  })());
523
529
  }
524
530
  return await new _bluebird.default((resolve, reject) => {
525
531
  onAlertCallback = () => reject(new _driver.errors.UnexpectedAlertOpenError());
532
+ onAppCrashCallback = reject;
526
533
  this._waitingAtoms.alertNotifier.once(ON_OBSTRUCTING_ALERT_EVENT, onAlertCallback);
534
+ this._waitingAtoms.alertNotifier.once(ON_APP_CRASH_EVENT, onAppCrashCallback);
527
535
  handlePromiseError(timedAtomPromise).then(resolve).catch(reject);
528
536
  });
529
537
  } finally {
530
538
  if (onAlertCallback) {
531
539
  this._waitingAtoms.alertNotifier.removeListener(ON_OBSTRUCTING_ALERT_EVENT, onAlertCallback);
532
540
  }
541
+ if (onAppCrashCallback) {
542
+ this._waitingAtoms.alertNotifier.removeListener(ON_APP_CRASH_EVENT, onAppCrashCallback);
543
+ }
533
544
  this._waitingAtoms.count--;
534
545
  }
535
546
  };
@@ -557,4 +568,4 @@ commands.mobileUpdateSafariPreferences = async function mobileUpdateSafariPrefer
557
568
  Object.assign(commands, extensions, helpers);
558
569
  var _default = commands;
559
570
  exports.default = _default;
560
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXN5bmNib3giLCJyZXF1aXJlIiwiX3N1cHBvcnQiLCJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9ibHVlYmlyZCIsIl9kcml2ZXIiLCJfY29va2llcyIsIl9ldmVudHMiLCJJUEhPTkVfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfWF9TQ1JPTExFRF9PRkZTRVQiLCJJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TIiwiSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyIsIklQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQiLCJUQUJfQkFSX09GRlNFVCIsIklQSE9ORV9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQiLCJJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCIsIk5PVENIRURfREVWSUNFX1NJWkVTIiwidyIsImgiLCJXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiIsInV0aWwiLCJBVE9NX1dBSVRfVElNRU9VVF9NUyIsIkFUT01fSU5JVElBTF9XQUlUX01TIiwiT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQiLCJWSVNJQkxFIiwiSU5WSVNJQkxFIiwiREVURUNUIiwiVklTSUJJTElUSUVTIiwiVEFCX0JBUl9QT1NJVElPTl9UT1AiLCJUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSIsIlRBQl9CQVJfUE9TU0lUSU9OUyIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIiLCJpZCIsIl8iLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNFbXB0eSIsImlzTmFOIiwic2V0RnJhbWUiLCJmcmFtZSIsImlzV2ViQ29udGV4dCIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJpc051bGwiLCJjdXJXZWJGcmFtZXMiLCJsb2ciLCJkZWJ1ZyIsImhhc0VsZW1lbnRJZCIsImF0b21zRWxlbWVudCIsImdldEF0b21zRWxlbWVudCIsInZhbHVlIiwiZXhlY3V0ZUF0b20iLCJXSU5ET1ciLCJ1bnNoaWZ0IiwiYXRvbSIsImlzVW5kZWZpbmVkIiwiTm9TdWNoRnJhbWVFcnJvciIsImdldENzc1Byb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZWwiLCJzdWJtaXQiLCJyZWZyZXNoIiwiZ2V0VXJsIiwicmVtb3RlIiwiZXhlY3V0ZSIsInRpdGxlIiwic2V0Q29va2llIiwiY29va2llIiwiY2xvbmUiLCJwYXRoIiwianNDb29raWUiLCJjb29raWVVdGlscyIsImNyZWF0ZUpTQ29va2llIiwibmFtZSIsImV4cGlyZXMiLCJleHBpcnkiLCJEYXRlIiwidG9VVENTdHJpbmciLCJkb21haW4iLCJodHRwT25seSIsInNlY3VyZSIsInNjcmlwdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJjYWNoZVdlYkVsZW1lbnQiLCJpc1BsYWluT2JqZWN0IiwiZWxJZCIsInVud3JhcEVsZW1lbnQiLCJjYWNoZUlkIiwiaW5jbHVkZXMiLCJ1dWlkVjQiLCJ3ZWJFbGVtZW50c0NhY2hlIiwic2V0Iiwid3JhcEVsZW1lbnQiLCJjYWNoZVdlYkVsZW1lbnRzIiwicmVzcG9uc2UiLCJ0b0NhY2hlZCIsInYiLCJpc0FycmF5IiwibWFwIiwicmVzdWx0IiwidG9QYWlycyIsInJlZHVjZSIsImFjYyIsImtleSIsImZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYW55IiwiY3R4IiwiY29udGV4dEVsZW1lbnQiLCJpc05pbCIsImVsZW1lbnQiLCJkb0ZpbmQiLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJlcnIiLCJtZXNzYWdlIiwiaXNGdW5jdGlvbiIsIm1hdGNoIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiY2xpY2tXZWJDb29yZHMiLCJjb29yZHMiLCJ0cmFuc2xhdGVXZWJDb29yZHMiLCJjdXJXZWJDb29yZHMiLCJjbGlja0Nvb3JkcyIsImFyZ3MiLCJhbHdheXNEZWZhdWx0RnJhbWUiLCJmcmFtZXMiLCJwcm9taXNlIiwid2FpdEZvckF0b20iLCJleGVjdXRlQXRvbUFzeW5jIiwicmVzcG9uc2VVcmwiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsImFzeW5jUHJvbWlzZSIsImVsT3JJZCIsImhhcyIsIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yIiwiRUxFTUVOVCIsImdldCIsImNvbnZlcnRFbGVtZW50c0ZvckF0b21zIiwiYXJnIiwiaXNFcnJvclR5cGUiLCJnZXRFbGVtZW50SWQiLCJoYXNWYWx1ZSIsImdldFNhZmFyaUlzSXBob25lIiwiaXNCb29sZWFuIiwiX2lzU2FmYXJpSXBob25lIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJ3YXJuIiwiZ2V0U2FmYXJpRGV2aWNlU2l6ZSIsIndpZHRoIiwiaGVpZ2h0Iiwibm9ybUhlaWdodCIsIm5vcm1XaWR0aCIsImdldFNhZmFyaUlzTm90Y2hlZCIsIl9pc1NhZmFyaU5vdGNoZWQiLCJkZXZpY2UiLCJnZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCIsInd2UG9zIiwicmVhbERpbXMiLCJ0b3BPZmZzZXQiLCJib3R0b21PZmZzZXQiLCJpc0lwaG9uZSIsIm5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkiLCJuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkiLCJzYWZhcmlUYWJCYXJQb3NpdGlvbiIsImNvbXBhcmVWZXJzaW9ucyIsIm9wdHMiLCJwbGF0Zm9ybVZlcnNpb24iLCJzZXR0aW5ncyIsImdldFNldHRpbmdzIiwidGFiQmFyVmlzaWJpbGl0eSIsImxvd2VyQ2FzZSIsImJhbm5lclZpc2liaWxpdHkiLCJ0YWJCYXJQb3NpdGlvbiIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiaXNOb3RjaGVkIiwib3JpZW50YXRpb24iLCJub3RjaE9mZnNldCIsImlzU2Nyb2xsZWQiLCJjb250ZXh0c0FuZFZpZXdzIiwiZ2V0Q29udGV4dHNBbmRWaWV3cyIsInRhYnMiLCJmaWx0ZXIiLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwiZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQiLCJ5Iiwib2Zmc2V0IiwiYmFubmVycyIsImZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyIsInRhcFdlYkVsZW1lbnROYXRpdmVseSIsImRyaXZlciIsInRleHQiLCJlbHMiLCJyZWN0IiwicHJveHlDb21tYW5kIiwiZWwyIiwicmVjdDIiLCJ4IiwiTWF0aCIsInJvdW5kIiwibmF0aXZlV2ViVGFwIiwibmF0aXZlV2ViVGFwU3RyaWN0IiwiUHJvbWlzZSIsImFsbCIsInNpemUiLCJjb29yZGluYXRlcyIsInBlcmZvcm1Ub3VjaCIsImFjdGlvbiIsIm9wdGlvbnMiLCJ3ZWJ2aWV3IiwicmV0cnlJbnRlcnZhbCIsImlnbiIsIkVycm9yIiwiY21kIiwid3ZEaW1zIiwiaW1wbGljaXRXYWl0TXMiLCJzZXRJbXBsaWNpdFdhaXQiLCJ4UmF0aW8iLCJ5UmF0aW8iLCJuZXdDb29yZHMiLCJjaGVja0ZvckFsZXJ0IiwiZ2V0QWxlcnRUZXh0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidGltZWRBdG9tUHJvbWlzZSIsInRpbWVvdXQiLCJoYW5kbGVQcm9taXNlRXJyb3IiLCJwIiwib3JpZ2luYWxFcnJvciIsIkFnZ3JlZ2F0ZUVycm9yIiwiVGltZW91dEVycm9yIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJhbnkiLCJkZWxheSIsImlzRnVsZmlsbGVkIiwiX3dhaXRpbmdBdG9tcyIsImNvdW50IiwiYWxlcnROb3RpZmllciIsIkV2ZW50RW1pdHRlciIsImFsZXJ0TW9uaXRvciIsIm9uQWxlcnRDYWxsYmFjayIsImlzUmVzb2x2ZWQiLCJlbWl0IiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwib25jZSIsInRoZW4iLCJjYXRjaCIsInJlbW92ZUxpc3RlbmVyIiwibW9iaWxlV2ViTmF2IiwibmF2VHlwZSIsImFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQiLCJtb2JpbGVVcGRhdGVTYWZhcmlQcmVmZXJlbmNlcyIsImlzU2ltdWxhdG9yIiwicHJlZmVyZW5jZXMiLCJ1cGRhdGVTYWZhcmlTZXR0aW5ncyIsIk9iamVjdCIsImFzc2lnbiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvd2ViLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB1dGlsLCB0aW1pbmcgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzLCBpc0Vycm9yVHlwZSB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IGNvb2tpZVV0aWxzIGZyb20gJy4uL2Nvb2tpZXMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuY29uc3QgSVBIT05FX1RPUF9CQVJfSEVJR0hUID0gNzE7XG5jb25zdCBJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQgPSA0MTtcbmNvbnN0IElQSE9ORV9YX1NDUk9MTEVEX09GRlNFVCA9IDU1O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPUyA9IDI0O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyA9IDIwO1xuXG5jb25zdCBJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUID0gNTE7XG5jb25zdCBJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQgPSA0OTtcbmNvbnN0IFRBQl9CQVJfT0ZGU0VUID0gMzM7XG5jb25zdCBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUID0gODQ7XG5jb25zdCBJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA9IDk1O1xuXG5jb25zdCBOT1RDSEVEX0RFVklDRV9TSVpFUyA9IFtcbiAge3c6IDExMjUsIGg6IDI0MzZ9LCAvLyAxMSBQcm8sIFgsIFhzXG4gIHt3OiA4MjgsIGg6IDE3OTJ9LCAvLyAxMSwgWHJcbiAge3c6IDEyNDIsIGg6IDI2ODh9LCAvLyAxMSBQcm8gTWF4LCBYcyBNYXhcbiAge3c6IDEwODAsIGg6IDIzNDB9LCAvLyAxMyBtaW5pLCAxMiBtaW5pXG4gIHt3OiAxMTcwLCBoOiAyNTMyfSwgLy8gMTQsIDEzLCAxMyBQcm8sIDEyLCAxMiBQcm9cbiAge3c6IDEyODQsIGg6IDI3Nzh9LCAvLyAxNCBQbHVzLCAxMyBQcm8gTWF4LCAxMiBQcm8gTWF4XG4gIHt3OiAxMTc5LCBoOiAyNTU2fSwgLy8gMTQgUHJvXG4gIHt3OiAxMjkwLCBoOiAyNzk2fSwgLy8gMTQgUHJvIE1heFxuXTtcblxuY29uc3QgeyBXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiB9ID0gdXRpbDtcblxuY29uc3QgQVRPTV9XQUlUX1RJTUVPVVRfTVMgPSAyICogNjAwMDA7XG5jb25zdCBBVE9NX0lOSVRJQUxfV0FJVF9NUyA9IDEwMDA7XG5cbmNvbnN0IE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UID0gJ2FsZXJ0JztcblxuY29uc3QgVklTSUJMRSA9ICd2aXNpYmxlJztcbmNvbnN0IElOVklTSUJMRSA9ICdpbnZpc2libGUnO1xuY29uc3QgREVURUNUID0gJ2RldGVjdCc7XG5jb25zdCBWSVNJQklMSVRJRVMgPSBbVklTSUJMRSwgSU5WSVNJQkxFLCBERVRFQ1RdO1xuXG4vLyBUaGUgcG9zaXRpb24gb2YgU2FmYXJpJ3MgdGFiIChzZWFyY2ggYmFyKS5cbi8vIFNpbmNlIGlPUyAxNSwgdGhlIGJhciBpcyB0aGUgYm90dG9tIGJ5IGRlZmF1bHQuXG5jb25zdCBUQUJfQkFSX1BPU0lUSU9OX1RPUCA9ICd0b3AnO1xuY29uc3QgVEFCX0JBUl9QT1NJVElPTl9CT1RUT00gPSAnYm90dG9tJztcbmNvbnN0IFRBQl9CQVJfUE9TU0lUSU9OUyA9IFtUQUJfQkFSX1BPU0lUSU9OX1RPUCwgVEFCX0JBUl9QT1NJVElPTl9CT1RUT01dO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRJZGVudGlmaWVyIChpZCkge1xuICBpZiAoIV8uaXNTdHJpbmcoaWQpICYmICFfLmlzTnVtYmVyKGlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXy5pc1N0cmluZyhpZCkgJiYgXy5pc0VtcHR5KGlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXy5pc051bWJlcihpZCkgJiYgaXNOYU4oaWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5jb21tYW5kcy5zZXRGcmFtZSA9IGFzeW5jIGZ1bmN0aW9uIHNldEZyYW1lIChmcmFtZSkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGlmIChfLmlzTnVsbChmcmFtZSkpIHtcbiAgICB0aGlzLmN1cldlYkZyYW1lcyA9IFtdO1xuICAgIHRoaXMubG9nLmRlYnVnKCdMZWF2aW5nIHdlYiBmcmFtZSBhbmQgZ29pbmcgYmFjayB0byBkZWZhdWx0IGNvbnRlbnQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaGVscGVycy5oYXNFbGVtZW50SWQoZnJhbWUpKSB7XG4gICAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZnJhbWUpO1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X2ZyYW1lX3dpbmRvdycsIFthdG9tc0VsZW1lbnRdKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRW50ZXJpbmcgbmV3IHdlYiBmcmFtZTogJyR7dmFsdWUuV0lORE9XfSdgKTtcbiAgICB0aGlzLmN1cldlYkZyYW1lcy51bnNoaWZ0KHZhbHVlLldJTkRPVyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXRvbSA9IF8uaXNOdW1iZXIoZnJhbWUpID8gJ2ZyYW1lX2J5X2luZGV4JyA6ICdmcmFtZV9ieV9pZF9vcl9uYW1lJztcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oYXRvbSwgW2ZyYW1lXSk7XG4gICAgaWYgKF8uaXNOdWxsKHZhbHVlKSB8fCBfLmlzVW5kZWZpbmVkKHZhbHVlLldJTkRPVykpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRnJhbWVFcnJvcigpO1xuICAgIH1cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRW50ZXJpbmcgbmV3IHdlYiBmcmFtZTogJyR7dmFsdWUuV0lORE9XfSdgKTtcbiAgICB0aGlzLmN1cldlYkZyYW1lcy51bnNoaWZ0KHZhbHVlLldJTkRPVyk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldENzc1Byb3BlcnR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q3NzUHJvcGVydHkgKHByb3BlcnR5TmFtZSwgZWwpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfdmFsdWVfb2ZfY3NzX3Byb3BlcnR5JywgW2F0b21zRWxlbWVudCwgcHJvcGVydHlOYW1lXSk7XG59O1xuXG5jb21tYW5kcy5zdWJtaXQgPSBhc3luYyBmdW5jdGlvbiBzdWJtaXQgKGVsKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdzdWJtaXQnLCBbYXRvbXNFbGVtZW50XSk7XG59O1xuXG5jb21tYW5kcy5yZWZyZXNoID0gYXN5bmMgZnVuY3Rpb24gcmVmcmVzaCAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgncmVmcmVzaCcsIFtdKTtcbn07XG5cbmNvbW1hbmRzLmdldFVybCA9IGFzeW5jIGZ1bmN0aW9uIGdldFVybCAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMucmVtb3RlLmV4ZWN1dGUoJ3dpbmRvdy5sb2NhdGlvbi5ocmVmJyk7XG59O1xuXG5jb21tYW5kcy50aXRsZSA9IGFzeW5jIGZ1bmN0aW9uIHRpdGxlICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgndGl0bGUnLCBbXSwgdHJ1ZSk7XG59O1xuXG5jb21tYW5kcy5zZXRDb29raWUgPSBhc3luYyBmdW5jdGlvbiBzZXRDb29raWUgKGNvb2tpZSkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGNvb2tpZSA9IF8uY2xvbmUoY29va2llKTtcblxuICAvLyBpZiBgcGF0aGAgZmllbGQgaXMgbm90IHNwZWNpZmllZCwgU2FmYXJpIHdpbGwgbm90IHVwZGF0ZSBjb29raWVzIGFzIGV4cGVjdGVkOyBlZyBpc3N1ZSAjMTcwOFxuICBpZiAoIWNvb2tpZS5wYXRoKSB7XG4gICAgY29va2llLnBhdGggPSAnLyc7XG4gIH1cblxuICBjb25zdCBqc0Nvb2tpZSA9IGNvb2tpZVV0aWxzLmNyZWF0ZUpTQ29va2llKGNvb2tpZS5uYW1lLCBjb29raWUudmFsdWUsIHtcbiAgICBleHBpcmVzOiBfLmlzTnVtYmVyKGNvb2tpZS5leHBpcnkpID8gKG5ldyBEYXRlKGNvb2tpZS5leHBpcnkgKiAxMDAwKSkudG9VVENTdHJpbmcoKSA6XG4gICAgICBjb29raWUuZXhwaXJ5LFxuICAgIHBhdGg6IGNvb2tpZS5wYXRoLFxuICAgIGRvbWFpbjogY29va2llLmRvbWFpbixcbiAgICBodHRwT25seTogY29va2llLmh0dHBPbmx5LFxuICAgIHNlY3VyZTogY29va2llLnNlY3VyZVxuICB9KTtcbiAgbGV0IHNjcmlwdCA9IGBkb2N1bWVudC5jb29raWUgPSAke0pTT04uc3RyaW5naWZ5KGpzQ29va2llKX1gO1xuICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIFtdXSk7XG59O1xuXG5oZWxwZXJzLmNhY2hlV2ViRWxlbWVudCA9IGZ1bmN0aW9uIGNhY2hlV2ViRWxlbWVudCAoZWwpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoZWwpKSB7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIGNvbnN0IGVsSWQgPSB1dGlsLnVud3JhcEVsZW1lbnQoZWwpO1xuICBpZiAoIWlzVmFsaWRFbGVtZW50SWRlbnRpZmllcihlbElkKSkge1xuICAgIHJldHVybiBlbDtcbiAgfVxuICAvLyBJbiBuZXdlciBkZWJ1Z2dlciByZWxlYXNlcyBlbGVtZW50IGlkZW50aWZpZXJzIGxvb2sgbGlrZSBgOndkYzoxNjI4MTUxNjQ5MzI1YFxuICAvLyBXZSBhc3N1bWUgaXQgaXMgc2FmZSB0byB1c2UgdGhlc2UgdG8gaWRlbnRpZnkgY2FjaGVkIGVsZW1lbnRzXG4gIGNvbnN0IGNhY2hlSWQgPSBfLmluY2x1ZGVzKGVsSWQsICc6JykgPyBlbElkIDogdXRpbC51dWlkVjQoKTtcbiAgdGhpcy53ZWJFbGVtZW50c0NhY2hlLnNldChjYWNoZUlkLCBlbElkKTtcbiAgcmV0dXJuIHV0aWwud3JhcEVsZW1lbnQoY2FjaGVJZCk7XG59O1xuXG5oZWxwZXJzLmNhY2hlV2ViRWxlbWVudHMgPSBmdW5jdGlvbiBjYWNoZVdlYkVsZW1lbnRzIChyZXNwb25zZSkge1xuICBjb25zdCB0b0NhY2hlZCA9ICh2KSA9PiBfLmlzQXJyYXkodikgfHwgXy5pc1BsYWluT2JqZWN0KHYpXG4gICAgPyB0aGlzLmNhY2hlV2ViRWxlbWVudHModilcbiAgICA6IHY7XG5cbiAgaWYgKF8uaXNBcnJheShyZXNwb25zZSkpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UubWFwKHRvQ2FjaGVkKTtcbiAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3QocmVzcG9uc2UpKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gey4uLnJlc3BvbnNlLCAuLi4odGhpcy5jYWNoZVdlYkVsZW1lbnQocmVzcG9uc2UpKX07XG4gICAgcmV0dXJuIF8udG9QYWlycyhyZXN1bHQpLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBhY2Nba2V5XSA9IHRvQ2FjaGVkKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9XG4gICAgKTtcbiAgfVxuICByZXR1cm4gcmVzcG9uc2U7XG59O1xuXG5leHRlbnNpb25zLmZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyA9IGFzeW5jIGZ1bmN0aW9uIGZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyAoc3RyYXRlZ3ksIHNlbGVjdG9yLCBtYW55LCBjdHgpIHtcbiAgY29uc3QgY29udGV4dEVsZW1lbnQgPSBfLmlzTmlsKGN0eCkgPyBudWxsIDogdGhpcy5nZXRBdG9tc0VsZW1lbnQoY3R4KTtcbiAgbGV0IGVsZW1lbnQ7XG4gIGxldCBkb0ZpbmQgPSBhc3luYyAoKSA9PiB7XG4gICAgZWxlbWVudCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oYGZpbmRfZWxlbWVudCR7bWFueSA/ICdzJyA6ICcnfWAsIFtzdHJhdGVneSwgc2VsZWN0b3IsIGNvbnRleHRFbGVtZW50XSk7XG4gICAgcmV0dXJuICFfLmlzTnVsbChlbGVtZW50KTtcbiAgfTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmltcGxpY2l0V2FpdEZvckNvbmRpdGlvbihkb0ZpbmQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLm1lc3NhZ2UgJiYgXy5pc0Z1bmN0aW9uKGVyci5tZXNzYWdlLm1hdGNoKSAmJiBlcnIubWVzc2FnZS5tYXRjaCgvQ29uZGl0aW9uIHVubWV0LykpIHtcbiAgICAgIC8vIGNvbmRpdGlvbiB3YXMgbm90IG1ldCBzZXR0aW5nIHJlcyB0byBlbXB0eSBhcnJheVxuICAgICAgZWxlbWVudCA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgaWYgKG1hbnkpIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKGVsZW1lbnQpO1xuICB9XG4gIGlmIChfLmlzRW1wdHkoZWxlbWVudCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaEVsZW1lbnRFcnJvcigpO1xuICB9XG4gIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMoZWxlbWVudCk7XG59O1xuXG5leHRlbnNpb25zLmNsaWNrV2ViQ29vcmRzID0gYXN5bmMgZnVuY3Rpb24gY2xpY2tXZWJDb29yZHMgKCkge1xuICBsZXQgY29vcmRzID0gYXdhaXQgdGhpcy50cmFuc2xhdGVXZWJDb29yZHModGhpcy5jdXJXZWJDb29yZHMpO1xuICBhd2FpdCB0aGlzLmNsaWNrQ29vcmRzKGNvb3Jkcyk7XG59O1xuXG5oZWxwZXJzLmV4ZWN1dGVBdG9tID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUF0b20gKGF0b20sIGFyZ3MsIGFsd2F5c0RlZmF1bHRGcmFtZSA9IGZhbHNlKSB7XG4gIGxldCBmcmFtZXMgPSBhbHdheXNEZWZhdWx0RnJhbWUgPT09IHRydWUgPyBbXSA6IHRoaXMuY3VyV2ViRnJhbWVzO1xuICBsZXQgcHJvbWlzZSA9IHRoaXMucmVtb3RlLmV4ZWN1dGVBdG9tKGF0b20sIGFyZ3MsIGZyYW1lcyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLndhaXRGb3JBdG9tKHByb21pc2UpO1xufTtcblxuaGVscGVycy5leGVjdXRlQXRvbUFzeW5jID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUF0b21Bc3luYyAoYXRvbSwgYXJncywgcmVzcG9uc2VVcmwpIHtcbiAgLy8gc2F2ZSB0aGUgcmVzb2x2ZSBhbmQgcmVqZWN0IG1ldGhvZHMgb2YgdGhlIHByb21pc2UgdG8gYmUgd2FpdGVkIGZvclxuICBsZXQgcHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0aGlzLmFzeW5jUHJvbWlzZSA9IHtyZXNvbHZlLCByZWplY3R9O1xuICB9KTtcbiAgYXdhaXQgdGhpcy5yZW1vdGUuZXhlY3V0ZUF0b21Bc3luYyhhdG9tLCBhcmdzLCB0aGlzLmN1cldlYkZyYW1lcywgcmVzcG9uc2VVcmwpO1xuICByZXR1cm4gYXdhaXQgdGhpcy53YWl0Rm9yQXRvbShwcm9taXNlKTtcbn07XG5cbmhlbHBlcnMuZ2V0QXRvbXNFbGVtZW50ID0gZnVuY3Rpb24gZ2V0QXRvbXNFbGVtZW50IChlbE9ySWQpIHtcbiAgY29uc3QgZWxJZCA9IHV0aWwudW53cmFwRWxlbWVudChlbE9ySWQpO1xuICBpZiAoIXRoaXMud2ViRWxlbWVudHNDYWNoZS5oYXMoZWxJZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yKCk7XG4gIH1cbiAgcmV0dXJuIHtFTEVNRU5UOiB0aGlzLndlYkVsZW1lbnRzQ2FjaGUuZ2V0KGVsSWQpfTtcbn07XG5cbmhlbHBlcnMuY29udmVydEVsZW1lbnRzRm9yQXRvbXMgPSBmdW5jdGlvbiBjb252ZXJ0RWxlbWVudHNGb3JBdG9tcyAoYXJncyA9IFtdKSB7XG4gIHJldHVybiBhcmdzLm1hcCgoYXJnKSA9PiB7XG4gICAgaWYgKGhlbHBlcnMuaGFzRWxlbWVudElkKGFyZykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEF0b21zRWxlbWVudChhcmcpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IpKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gXy5pc0FycmF5KGFyZykgPyB0aGlzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zKGFyZykgOiBhcmc7XG4gIH0pO1xufTtcblxuaGVscGVycy5nZXRFbGVtZW50SWQgPSBmdW5jdGlvbiBnZXRFbGVtZW50SWQgKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuRUxFTUVOVCB8fCBlbGVtZW50W1czQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSXTtcbn07XG5cbmhlbHBlcnMuaGFzRWxlbWVudElkID0gZnVuY3Rpb24gaGFzRWxlbWVudElkIChlbGVtZW50KSB7XG4gIHJldHVybiB1dGlsLmhhc1ZhbHVlKGVsZW1lbnQpICYmICh1dGlsLmhhc1ZhbHVlKGVsZW1lbnQuRUxFTUVOVCkgfHwgdXRpbC5oYXNWYWx1ZShlbGVtZW50W1czQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSXSkpO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlJc0lwaG9uZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFNhZmFyaUlzSXBob25lICgpIHtcbiAgaWYgKF8uaXNCb29sZWFuKHRoaXMuX2lzU2FmYXJpSXBob25lKSkge1xuICAgIHJldHVybiB0aGlzLl9pc1NhZmFyaUlwaG9uZTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHVzZXJBZ2VudCA9IGF3YWl0IHRoaXMuZXhlY3V0ZSgncmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQnKTtcbiAgICB0aGlzLl9pc1NhZmFyaUlwaG9uZSA9IHVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdpcGhvbmUnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIGZpbmQgZGV2aWNlIHR5cGUgZnJvbSB1c2VyYWdlbnQuIEFzc3VtaW5nIGlQaG9uZWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGBFcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gdGhpcy5faXNTYWZhcmlJcGhvbmUgPz8gdHJ1ZTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0U2FmYXJpRGV2aWNlU2l6ZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFNhZmFyaURldmljZVNpemUgKCkge1xuICBjb25zdCBzY3JpcHQgPSAncmV0dXJuIHtoZWlnaHQ6IHdpbmRvdy5zY3JlZW4uYXZhaWxIZWlnaHQgKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbywgd2lkdGg6IHdpbmRvdy5zY3JlZW4uYXZhaWxXaWR0aCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfTsnO1xuICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmV4ZWN1dGUoc2NyaXB0KTtcbiAgY29uc3QgW25vcm1IZWlnaHQsIG5vcm1XaWR0aF0gPSBoZWlnaHQgPiB3aWR0aCA/IFtoZWlnaHQsIHdpZHRoXSA6IFt3aWR0aCwgaGVpZ2h0XTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogbm9ybVdpZHRoLFxuICAgIGhlaWdodDogbm9ybUhlaWdodCxcbiAgfTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0U2FmYXJpSXNOb3RjaGVkID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpSXNOb3RjaGVkICgpIHtcbiAgaWYgKF8uaXNCb29sZWFuKHRoaXMuX2lzU2FmYXJpTm90Y2hlZCkpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTYWZhcmlOb3RjaGVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmdldFNhZmFyaURldmljZVNpemUoKTtcbiAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBOT1RDSEVEX0RFVklDRV9TSVpFUykge1xuICAgICAgaWYgKGRldmljZS53ID09PSB3aWR0aCAmJiBkZXZpY2UuaCA9PT0gaGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuX2lzU2FmYXJpTm90Y2hlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gZmluZCBkZXZpY2UgdHlwZSBmcm9tIGRpbWVuc2lvbnMuIEFzc3VtaW5nIHRoZSBkZXZpY2UgaXMgbm90IG5vdGNoZWRgKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuX2lzU2FmYXJpTm90Y2hlZCA/PyBmYWxzZTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0RXh0cmFUcmFuc2xhdGVXZWJDb29yZHNPZmZzZXQgPSBhc3luYyBmdW5jdGlvbiBnZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCAod3ZQb3MsIHJlYWxEaW1zKSB7XG4gIGxldCB0b3BPZmZzZXQgPSAwO1xuICBsZXQgYm90dG9tT2Zmc2V0ID0gMDtcblxuICBjb25zdCBpc0lwaG9uZSA9IGF3YWl0IHRoaXMuZ2V0U2FmYXJpSXNJcGhvbmUoKTtcblxuICAvLyBObyBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIFNtYXJ0IEFwcCBCYW5uZXIgb3IgVGFiIEJhciBpcyB2aXNpYmxlIG9yIG5vdFxuICAvLyBpZiBhbHJlYWR5IGRlZmluZWQgYnkgbmF0aXZlV2ViVGFwVGFiQmFyVmlzaWJpbGl0eSBvciBuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkgaW4gc2V0dGluZ3MuXG4gIGNvbnN0IHtcbiAgICBuYXRpdmVXZWJUYXBUYWJCYXJWaXNpYmlsaXR5LFxuICAgIG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSxcbiAgICBzYWZhcmlUYWJCYXJQb3NpdGlvbiA9IHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc+PScsICcxNS4wJykgJiYgaXNJcGhvbmVcbiAgICAgID8gVEFCX0JBUl9QT1NJVElPTl9CT1RUT00gOiBUQUJfQkFSX1BPU0lUSU9OX1RPUCxcbiAgfSA9IGF3YWl0IHRoaXMuc2V0dGluZ3MuZ2V0U2V0dGluZ3MoKTtcbiAgbGV0IHRhYkJhclZpc2liaWxpdHkgPSBfLmxvd2VyQ2FzZShuYXRpdmVXZWJUYXBUYWJCYXJWaXNpYmlsaXR5KTtcbiAgbGV0IGJhbm5lclZpc2liaWxpdHkgPSBfLmxvd2VyQ2FzZShuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkpO1xuICBjb25zdCB0YWJCYXJQb3NpdGlvbiA9IF8ubG93ZXJDYXNlKHNhZmFyaVRhYkJhclBvc2l0aW9uKTtcblxuICBpZiAoIVZJU0lCSUxJVElFUy5pbmNsdWRlcyh0YWJCYXJWaXNpYmlsaXR5KSkge1xuICAgIHRhYkJhclZpc2liaWxpdHkgPSBERVRFQ1Q7XG4gIH1cbiAgaWYgKCFWSVNJQklMSVRJRVMuaW5jbHVkZXMoYmFubmVyVmlzaWJpbGl0eSkpIHtcbiAgICBiYW5uZXJWaXNpYmlsaXR5ID0gREVURUNUO1xuICB9XG5cbiAgaWYgKCFUQUJfQkFSX1BPU1NJVElPTlMuaW5jbHVkZXModGFiQmFyUG9zaXRpb24pKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgIGAke3NhZmFyaVRhYkJhclBvc2l0aW9ufSBpcyBpbnZhbGlkIGFzIFNhZmFyaSB0YWIgYmFyIHBvc2l0aW9uLiBBdmFpbGFibGUgcG9zaXRpb25zIGFyZSAke1RBQl9CQVJfUE9TU0lUSU9OU30uYCk7XG4gIH1cblxuICBjb25zdCBpc05vdGNoZWQgPSBpc0lwaG9uZSAmJiBhd2FpdCB0aGlzLmdldFNhZmFyaUlzTm90Y2hlZCgpO1xuXG4gIGNvbnN0IG9yaWVudGF0aW9uID0gcmVhbERpbXMuaCA+IHJlYWxEaW1zLncgPyAnUE9SVFJBSVQnIDogJ0xBTkRTQ0FQRSc7XG5cbiAgY29uc3Qgbm90Y2hPZmZzZXQgPSBpc05vdGNoZWRcbiAgICA/IHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc9JywgJzEzLjAnKVxuICAgICAgPyBJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TXzEzXG4gICAgICA6IElQSE9ORV9YX05PVENIX09GRlNFVF9JT1NcbiAgICA6IDA7XG5cbiAgY29uc3QgaXNTY3JvbGxlZCA9IGF3YWl0IHRoaXMuZXhlY3V0ZSgncmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPiAwJyk7XG4gIGlmIChpc1Njcm9sbGVkKSB7XG4gICAgdG9wT2Zmc2V0ID0gSVBIT05FX1NDUk9MTEVEX1RPUF9CQVJfSEVJR0hUICsgbm90Y2hPZmZzZXQ7XG5cbiAgICBpZiAoaXNOb3RjaGVkKSB7XG4gICAgICB0b3BPZmZzZXQgLT0gSVBIT05FX1hfU0NST0xMRURfT0ZGU0VUO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBpUGhvbmUgaXMgbGFuZHNjYXBlIHRoZW4gdGhlcmUgaXMgbm8gdG9wIGJhclxuICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ0xBTkRTQ0FQRScgJiYgaXNJcGhvbmUpIHtcbiAgICAgIHRvcE9mZnNldCA9IDA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRvcE9mZnNldCA9IHRhYkJhclBvc2l0aW9uID09PSBUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSA/IDAgOiBJUEhPTkVfVE9QX0JBUl9IRUlHSFQ7XG4gICAgdG9wT2Zmc2V0ICs9IG5vdGNoT2Zmc2V0O1xuICAgIHRoaXMubG9nLmRlYnVnKGB0YWJCYXJQb3NpdGlvbiBhbmQgdG9wT2Zmc2V0OiAke3RhYkJhclBvc2l0aW9ufSwgJHt0b3BPZmZzZXR9YCk7XG5cbiAgICBpZiAoaXNJcGhvbmUpIHtcbiAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ1BPUlRSQUlUJykge1xuICAgICAgICAvLyBUaGUgYm90dG9tIGJhciBpcyBvbmx5IHZpc2libGUgd2hlbiBwb3J0cmFpdFxuICAgICAgICBib3R0b21PZmZzZXQgPSBJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3BPZmZzZXQgPSBJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ0xBTkRTQ0FQRScgfHwgIWlzSXBob25lKSB7XG4gICAgICBpZiAodGFiQmFyVmlzaWJpbGl0eSA9PT0gVklTSUJMRSkge1xuICAgICAgICB0b3BPZmZzZXQgKz0gVEFCX0JBUl9PRkZTRVQ7XG4gICAgICB9IGVsc2UgaWYgKHRhYkJhclZpc2liaWxpdHkgPT09IERFVEVDVCkge1xuICAgICAgICAvLyBUYWJzIG9ubHkgYXBwZWFyIGlmIHRoZSBkZXZpY2UgaXMgbGFuZHNjYXBlIG9yIGlmIGl0J3MgYW4gaVBhZCBzbyB3ZSBvbmx5IGNoZWNrIHZpc2liaWxpdHkgaW4gdGhpcyBjYXNlXG4gICAgICAgIC8vIEFzc3VtZSB0aGF0IGVhY2ggdGFiIGJhciBpcyBhIFdlYlZpZXdcbiAgICAgICAgY29uc3QgY29udGV4dHNBbmRWaWV3cyA9IGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cygpO1xuICAgICAgICBjb25zdCB0YWJzID0gY29udGV4dHNBbmRWaWV3cy5maWx0ZXIoKGN0eCkgPT4gY3R4LmlkLnN0YXJ0c1dpdGgoJ1dFQlZJRVdfJykpO1xuXG4gICAgICAgIGlmICh0YWJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgRm91bmQgJHt0YWJzLmxlbmd0aH0gdGFicy4gQXNzdW1pbmcgdGhlIHRhYiBiYXIgaXMgdmlzaWJsZWApO1xuICAgICAgICAgIHRvcE9mZnNldCArPSBUQUJfQkFSX09GRlNFVDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvcE9mZnNldCArPSBhd2FpdCB0aGlzLmdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0KGlzSXBob25lLCBiYW5uZXJWaXNpYmlsaXR5KTtcblxuICB3dlBvcy55ICs9IHRvcE9mZnNldDtcbiAgcmVhbERpbXMuaCAtPSAodG9wT2Zmc2V0ICsgYm90dG9tT2Zmc2V0KTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQgPSBhc3luYyBmdW5jdGlvbiBnZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldCAoaXNJcGhvbmUsIGJhbm5lclZpc2liaWxpdHkpIHtcbiAgbGV0IG9mZnNldCA9IDA7XG5cbiAgaWYgKGJhbm5lclZpc2liaWxpdHkgPT09IFZJU0lCTEUpIHtcbiAgICBvZmZzZXQgKz0gaXNJcGhvbmUgP1xuICAgICAgSVBIT05FX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA6XG4gICAgICBJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVDtcbiAgfSBlbHNlIGlmIChiYW5uZXJWaXNpYmlsaXR5ID09PSBERVRFQ1QpIHtcbiAgICAvLyB0cnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIFNtYXJ0IEFwcCBCYW5uZXJcbiAgICBjb25zdCBiYW5uZXJzID0gYXdhaXQgdGhpcy5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2FjY2Vzc2liaWxpdHkgaWQnLCAnQ2xvc2UgYXBwIGRvd25sb2FkIG9mZmVyJywgdHJ1ZSk7XG4gICAgaWYgKGJhbm5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgb2Zmc2V0ICs9IGlzSXBob25lID9cbiAgICAgICAgSVBIT05FX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA6XG4gICAgICAgIElQQURfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMubG9nLmRlYnVnKGBBZGRpdGlvbmFsIG5hdGl2ZSB3ZWIgdGFwIG9mZnNldCBjb21wdXRlZDogJHtvZmZzZXR9YCk7XG4gIHJldHVybiBvZmZzZXQ7XG59O1xuXG5hc3luYyBmdW5jdGlvbiB0YXBXZWJFbGVtZW50TmF0aXZlbHkgKGRyaXZlciwgYXRvbXNFbGVtZW50KSB7XG4gIC8vIHRyeSB0byBnZXQgdGhlIHRleHQgb2YgdGhlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgYWNjZXNzaWJsZSBpbiB0aGVcbiAgLy8gbmF0aXZlIGNvbnRleHRcbiAgdHJ5IHtcbiAgICBsZXQgdGV4dCA9IGF3YWl0IGRyaXZlci5leGVjdXRlQXRvbSgnZ2V0X3RleHQnLCBbYXRvbXNFbGVtZW50XSk7XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICB0ZXh0ID0gYXdhaXQgZHJpdmVyLmV4ZWN1dGVBdG9tKCdnZXRfYXR0cmlidXRlX3ZhbHVlJywgW2F0b21zRWxlbWVudCwgJ3ZhbHVlJ10pO1xuICAgIH1cblxuICAgIGlmICh0ZXh0KSB7XG4gICAgICBjb25zdCBlbHMgPSBhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdhY2Nlc3NpYmlsaXR5IGlkJywgdGV4dCwgdHJ1ZSk7XG4gICAgICBpZiAoZWxzLmxlbmd0aCA9PT0gMSB8fCBlbHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGNvbnN0IGVsID0gZWxzWzBdO1xuICAgICAgICAvLyB1c2UgdGFwIGJlY2F1c2Ugb24gaU9TIDExLjIgYW5kIGJlbG93IGBuYXRpdmVDbGlja2AgY3Jhc2hlcyBXREFcbiAgICAgICAgY29uc3QgcmVjdCA9IGF3YWl0IGRyaXZlci5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7dXRpbC51bndyYXBFbGVtZW50KGVsKX0vcmVjdGAsICdHRVQnKTtcbiAgICAgICAgaWYgKGVscy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBjb25zdCBlbDIgPSBlbHNbMV07XG4gICAgICAgICAgY29uc3QgcmVjdDIgPSBhd2FpdCBkcml2ZXIucHJveHlDb21tYW5kKGAvZWxlbWVudC8ke3V0aWwudW53cmFwRWxlbWVudChlbDIpfS9yZWN0YCwgJ0dFVCcpO1xuXG4gICAgICAgICAgaWYgKChyZWN0LnggIT09IHJlY3QyLnggfHwgcmVjdC55ICE9PSByZWN0Mi55KSB8fFxuICAgICAgICAgIChyZWN0LndpZHRoICE9PSByZWN0Mi53aWR0aCB8fCByZWN0LmhlaWdodCAhPT0gcmVjdDIuaGVpZ2h0KSkge1xuICAgICAgICAgICAgLy8gVGhlc2UgMiBuYXRpdmUgZWxlbWVudHMgYXJlIG5vdCByZWZlcnJpbmcgdG8gdGhlIHNhbWUgd2ViIGVsZW1lbnRcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICAgIHg6IE1hdGgucm91bmQocmVjdC54ICsgcmVjdC53aWR0aCAvIDIpLFxuICAgICAgICAgIHk6IE1hdGgucm91bmQocmVjdC55ICsgcmVjdC5oZWlnaHQgLyAyKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgZHJpdmVyLmNsaWNrQ29vcmRzKGNvb3Jkcyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gYW55IGZhaWx1cmUgc2hvdWxkIGZhbGwgdGhyb3VnaCBhbmQgdHJpZ2dlciB0aGUgbW9yZSBlbGFib3JhdGVcbiAgICAvLyBtZXRob2Qgb2YgY2xpY2tpbmdcbiAgICBkcml2ZXIubG9nLndhcm4oYEVycm9yIGF0dGVtcHRpbmcgdG8gY2xpY2s6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHRlbnNpb25zLm5hdGl2ZVdlYlRhcCA9IGFzeW5jIGZ1bmN0aW9uIG5hdGl2ZVdlYlRhcCAoZWwpIHtcbiAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuXG4gIC8vIGlmIHN0cmljdCBuYXRpdmUgdGFwLCBkbyBub3QgdHJ5IHRvIGRvIGl0IHdpdGggV0RBIGRpcmVjdGx5XG4gIGlmICghKGF3YWl0IHRoaXMuc2V0dGluZ3MuZ2V0U2V0dGluZ3MoKSkubmF0aXZlV2ViVGFwU3RyaWN0ICYmIGF3YWl0IHRhcFdlYkVsZW1lbnROYXRpdmVseSh0aGlzLCBhdG9tc0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMubG9nLndhcm4oJ1VuYWJsZSB0byBkbyBzaW1wbGUgbmF0aXZlIHdlYiB0YXAuIEF0dGVtcHRpbmcgdG8gY29udmVydCBjb29yZGluYXRlcycpO1xuXG4gIC8vIGBnZXRfdG9wX2xlZnRfY29vcmRpbmF0ZXNgIHJldHVybnMgdGhlIHdyb25nIHZhbHVlIHNvbWV0aW1lcyxcbiAgLy8gdW5sZXNzIHdlIHByZS1jYWxsIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIGJlZm9yZSB0aGUgYWN0dWFsIGNhbGxzXG4gIGF3YWl0IEIuUHJvbWlzZS5hbGwoW1xuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF9zaXplJywgW2F0b21zRWxlbWVudF0pLFxuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF90b3BfbGVmdF9jb29yZGluYXRlcycsIFthdG9tc0VsZW1lbnRdKSxcbiAgXSk7XG5cbiAgY29uc3QgW3NpemUsIGNvb3JkaW5hdGVzXSA9IGF3YWl0IEIuUHJvbWlzZS5hbGwoW1xuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF9zaXplJywgW2F0b21zRWxlbWVudF0pLFxuICAgIHRoaXMuZXhlY3V0ZUF0b20oJ2dldF90b3BfbGVmdF9jb29yZGluYXRlcycsIFthdG9tc0VsZW1lbnRdKSxcbiAgXSk7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHNpemU7XG4gIGxldCB7eCwgeX0gPSBjb29yZGluYXRlcztcbiAgeCArPSB3aWR0aCAvIDI7XG4gIHkgKz0gaGVpZ2h0IC8gMjtcblxuICB0aGlzLmN1cldlYkNvb3JkcyA9IHt4LCB5fTtcbiAgYXdhaXQgdGhpcy5jbGlja1dlYkNvb3JkcygpO1xufTtcblxuZXh0ZW5zaW9ucy5jbGlja0Nvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIGNsaWNrQ29vcmRzIChjb29yZHMpIHtcbiAgYXdhaXQgdGhpcy5wZXJmb3JtVG91Y2goW1xuICAgIHtcbiAgICAgIGFjdGlvbjogJ3RhcCcsXG4gICAgICBvcHRpb25zOiBjb29yZHMsXG4gICAgfSxcbiAgXSk7XG59O1xuXG5leHRlbnNpb25zLnRyYW5zbGF0ZVdlYkNvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIHRyYW5zbGF0ZVdlYkNvb3JkcyAoY29vcmRzKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBUcmFuc2xhdGluZyBjb29yZGluYXRlcyAoJHtKU09OLnN0cmluZ2lmeShjb29yZHMpfSkgdG8gd2ViIGNvb3JkaW5hdGVzYCk7XG5cbiAgLy8gYWJzb2x1dGl6ZSB3ZWIgY29vcmRzXG4gIGxldCB3ZWJ2aWV3O1xuICB0cnkge1xuICAgIHdlYnZpZXcgPSBhd2FpdCByZXRyeUludGVydmFsKDUsIDEwMCwgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2NsYXNzIG5hbWUnLCAnWENVSUVsZW1lbnRUeXBlV2ViVmlldycsIGZhbHNlKSk7XG4gIH0gY2F0Y2ggKGlnbikge31cblxuICBpZiAoIXdlYnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIFdlYlZpZXcgZm91bmQuIFVuYWJsZSB0byB0cmFuc2xhdGUgd2ViIGNvb3JkaW5hdGVzIGZvciBuYXRpdmUgd2ViIHRhcC5gKTtcbiAgfVxuXG4gIHdlYnZpZXcgPSB1dGlsLnVud3JhcEVsZW1lbnQod2Vidmlldyk7XG5cbiAgY29uc3QgcmVjdCA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvZWxlbWVudC8ke3dlYnZpZXd9L3JlY3RgLCAnR0VUJyk7XG4gIGNvbnN0IHd2UG9zID0ge3g6IHJlY3QueCwgeTogcmVjdC55fTtcbiAgY29uc3QgcmVhbERpbXMgPSB7dzogcmVjdC53aWR0aCwgaDogcmVjdC5oZWlnaHR9O1xuXG4gIGNvbnN0IGNtZCA9ICcoZnVuY3Rpb24gKCkgeyByZXR1cm4ge3c6IHdpbmRvdy5pbm5lcldpZHRoLCBoOiB3aW5kb3cuaW5uZXJIZWlnaHR9OyB9KSgpJztcbiAgY29uc3Qgd3ZEaW1zID0gYXdhaXQgdGhpcy5yZW1vdGUuZXhlY3V0ZShjbWQpO1xuXG4gIC8vIGtlZXAgdHJhY2sgb2YgaW1wbGljaXQgd2FpdCwgYW5kIHNldCBsb2NhbGx5IHRvIDBcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE0OTg4XG4gIGNvbnN0IGltcGxpY2l0V2FpdE1zID0gdGhpcy5pbXBsaWNpdFdhaXRNcztcbiAgYXdhaXQgdGhpcy5zZXRJbXBsaWNpdFdhaXQoMCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5nZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCh3dlBvcywgcmVhbERpbXMpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHRoaXMuc2V0SW1wbGljaXRXYWl0KGltcGxpY2l0V2FpdE1zKTtcbiAgfVxuXG4gIGlmICh3dkRpbXMgJiYgcmVhbERpbXMgJiYgd3ZQb3MpIHtcbiAgICBsZXQgeFJhdGlvID0gcmVhbERpbXMudyAvIHd2RGltcy53O1xuICAgIGxldCB5UmF0aW8gPSByZWFsRGltcy5oIC8gd3ZEaW1zLmg7XG4gICAgbGV0IG5ld0Nvb3JkcyA9IHtcbiAgICAgIHg6IHd2UG9zLnggKyBNYXRoLnJvdW5kKHhSYXRpbyAqIGNvb3Jkcy54KSxcbiAgICAgIHk6IHd2UG9zLnkgKyBNYXRoLnJvdW5kKHlSYXRpbyAqIGNvb3Jkcy55KSxcbiAgICB9O1xuXG4gICAgLy8gYWRkaXRpb25hbCBsb2dnaW5nIGZvciBjb29yZGluYXRlcywgc2luY2UgaXQgaXMgc29tZXRpbWVzIGJyb2tlblxuICAgIC8vICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy85MTU5XG4gICAgdGhpcy5sb2cuZGVidWcoYENvbnZlcnRlZCBjb29yZGluYXRlczogJHtKU09OLnN0cmluZ2lmeShuZXdDb29yZHMpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgcmVjdDogJHtKU09OLnN0cmluZ2lmeShyZWN0KX1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgIHd2UG9zOiAke0pTT04uc3RyaW5naWZ5KHd2UG9zKX1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgIHJlYWxEaW1zOiAke0pTT04uc3RyaW5naWZ5KHJlYWxEaW1zKX1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgIHd2RGltczogJHtKU09OLnN0cmluZ2lmeSh3dkRpbXMpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgeFJhdGlvOiAke0pTT04uc3RyaW5naWZ5KHhSYXRpbyl9YCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICB5UmF0aW86ICR7SlNPTi5zdHJpbmdpZnkoeVJhdGlvKX1gKTtcblxuICAgIHRoaXMubG9nLmRlYnVnKGBDb252ZXJ0ZWQgd2ViIGNvb3JkcyAke0pTT04uc3RyaW5naWZ5KGNvb3Jkcyl9IGAgK1xuICAgICAgYGludG8gcmVhbCBjb29yZHMgJHtKU09OLnN0cmluZ2lmeShuZXdDb29yZHMpfWApO1xuICAgIHJldHVybiBuZXdDb29yZHM7XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMuY2hlY2tGb3JBbGVydCA9IGFzeW5jIGZ1bmN0aW9uIGNoZWNrRm9yQWxlcnQgKCkge1xuICByZXR1cm4gXy5pc1N0cmluZyhhd2FpdCB0aGlzLmdldEFsZXJ0VGV4dCgpKTtcbn07XG5cbmV4dGVuc2lvbnMud2FpdEZvckF0b20gPSBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yQXRvbSAocHJvbWlzZSkge1xuICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuXG4gIC8vIG5lZWQgdG8gY2hlY2sgZm9yIGFsZXJ0IHdoaWxlIHRoZSBhdG9tIGlzIGJlaW5nIGV4ZWN1dGVkLlxuICAvLyBzbyBub3RpZnkgb3Vyc2VsdmVzIHdoZW4gaXQgaGFwcGVuc1xuICBjb25zdCB0aW1lZEF0b21Qcm9taXNlID0gQi5yZXNvbHZlKHByb21pc2UpLnRpbWVvdXQoQVRPTV9XQUlUX1RJTUVPVVRfTVMpO1xuICBjb25zdCBoYW5kbGVQcm9taXNlRXJyb3IgPSBhc3luYyAocCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgcDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsRXJyb3IgPSAoZXJyIGluc3RhbmNlb2YgQi5BZ2dyZWdhdGVFcnJvcikgPyBlcnJbMF0gOiBlcnI7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgRXJyb3IgcmVjZWl2ZWQgd2hpbGUgZXhlY3V0aW5nIGF0b206ICR7b3JpZ2luYWxFcnJvci5tZXNzYWdlfWApO1xuICAgICAgaWYgKG9yaWdpbmFsRXJyb3IgaW5zdGFuY2VvZiBCLlRpbWVvdXRFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpZCBub3QgZ2V0IGFueSByZXNwb25zZSBmb3IgYXRvbSBleGVjdXRpb24gYWZ0ZXIgYCArXG4gICAgICAgICAgYCR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgIH1cbiAgfTtcbiAgLy8gaWYgdGhlIGF0b20gcHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aGluIEFUT01fSU5JVElBTF9XQUlUX01TXG4gIC8vIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgYW4gYWxlcnQgcHJlc2VuY2VcbiAgYXdhaXQgaGFuZGxlUHJvbWlzZUVycm9yKEIuYW55KFtCLmRlbGF5KEFUT01fSU5JVElBTF9XQUlUX01TKSwgdGltZWRBdG9tUHJvbWlzZV0pKTtcbiAgaWYgKHRpbWVkQXRvbVByb21pc2UuaXNGdWxmaWxsZWQoKSkge1xuICAgIHJldHVybiBhd2FpdCB0aW1lZEF0b21Qcm9taXNlO1xuICB9XG5cbiAgLy8gLi4ub3RoZXJ3aXNlIG1ha2Ugc3VyZSB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIGFsZXJ0IGNvdmVyaW5nIHRoZSBlbGVtZW50XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KHRoaXMuX3dhaXRpbmdBdG9tcykpIHtcbiAgICB0aGlzLl93YWl0aW5nQXRvbXMgPSB7XG4gICAgICBjb3VudDogMCxcbiAgICAgIGFsZXJ0Tm90aWZpZXI6IG5ldyBFdmVudEVtaXR0ZXIoKSxcbiAgICAgIGFsZXJ0TW9uaXRvcjogQi5yZXNvbHZlKCksXG4gICAgfTtcbiAgfVxuICB0aGlzLl93YWl0aW5nQXRvbXMuY291bnQrKztcblxuICBsZXQgb25BbGVydENhbGxiYWNrO1xuICB0cnkge1xuICAgIC8vIG9ubHkgcmVzdGFydCB0aGUgbW9uaXRvciBpZiBpdCBpcyBub3QgcnVubmluZyBhbHJlYWR5XG4gICAgaWYgKHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE1vbml0b3IuaXNSZXNvbHZlZCgpKSB7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnRNb25pdG9yID0gQi5yZXNvbHZlKChhc3luYyAoKSA9PiB7XG4gICAgICAgIHdoaWxlICh0aGlzLl93YWl0aW5nQXRvbXMuY291bnQgPiAwKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrRm9yQWxlcnQoKSkge1xuICAgICAgICAgICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5lbWl0KE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICAgICAgYXdhaXQgQi5kZWxheShBVE9NX0lOSVRJQUxfV0FJVF9NUyAvIDIpO1xuICAgICAgICB9XG4gICAgICB9KSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgb25BbGVydENhbGxiYWNrID0gKCkgPT4gcmVqZWN0KG5ldyBlcnJvcnMuVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yKCkpO1xuICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0Tm90aWZpZXIub25jZShPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCwgb25BbGVydENhbGxiYWNrKTtcbiAgICAgIGhhbmRsZVByb21pc2VFcnJvcih0aW1lZEF0b21Qcm9taXNlKVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tdGhlblxuICAgICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAob25BbGVydENhbGxiYWNrKSB7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5yZW1vdmVMaXN0ZW5lcihPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCwgb25BbGVydENhbGxiYWNrKTtcbiAgICB9XG4gICAgdGhpcy5fd2FpdGluZ0F0b21zLmNvdW50LS07XG4gIH1cbn07XG5cbmV4dGVuc2lvbnMubW9iaWxlV2ViTmF2ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlV2ViTmF2IChuYXZUeXBlKSB7XG4gIHRoaXMucmVtb3RlLmFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQgPSB0cnVlO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW2BoaXN0b3J5LiR7bmF2VHlwZX0oKTtgLCBudWxsXSk7XG4gIH0gZmluYWxseSB7XG4gICAgdGhpcy5yZW1vdGUuYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZCA9IGZhbHNlO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNhZmFyaU9wdHNcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwcmVmZXJlbmNlcyBBbiBvYmplY3QgY29udGFpbmluZyBTYWZhcmkgc2V0dGluZ3MgdG8gYmUgdXBkYXRlZC5cbiAqIFRoZSBsaXN0IG9mIGF2YWlsYWJsZSBzZXR0aW5nIG5hbWVzIGFuZCB0aGVpciB2YWx1ZXMgY291bGQgYmUgcmV0cmlldmVkIGJ5XG4gKiBjaGFuZ2luZyB0aGUgY29ycmVzcG9uZGluZyBTYWZhcmkgc2V0dGluZ3MgaW4gdGhlIFVJIGFuZCB0aGVuIGluc3BlY3RpbmdcbiAqICdMaWJyYXJ5L1ByZWZlcmVuY2VzL2NvbS5hcHBsZS5tb2JpbGVzYWZhcmkucGxpc3QnIGZpbGUgaW5zaWRlIG9mXG4gKiBjb20uYXBwbGUubW9iaWxlc2FmYXJpIGFwcCBjb250YWluZXIuXG4gKiBUaGUgZnVsbCBwYXRoIHRvIHRoZSBNb2JpbGUgU2FmYXJpJ3MgY29udGFpbmVyIGNvdWxkIGJlIHJldHJpZXZlZCBmcm9tXG4gKiBgeGNydW4gc2ltY3RsIGdldF9hcHBfY29udGFpbmVyIDxzaW1fdWRpZD4gY29tLmFwcGxlLm1vYmlsZXNhZmFyaSBkYXRhYFxuICogY29tbWFuZCBvdXRwdXQuXG4gKiBVc2UgdGhlIGB4Y3J1biBzaW1jdGwgc3Bhd24gPHNpbV91ZGlkPiBkZWZhdWx0cyByZWFkIDxwYXRoX3RvX3BsaXN0PmAgY29tbWFuZFxuICogdG8gcHJpbnQgdGhlIHBsaXN0IGNvbnRlbnQgdG8gdGhlIFRlcm1pbmFsLlxuICovXG5cbi8qKlxuICogVXBkYXRlcyBwcmVmZXJlbmNlcyBvZiBNb2JpbGUgU2FmYXJpIG9uIFNpbXVsYXRvclxuICpcbiAqIEBwYXJhbSB7U2FmYXJpT3B0c30gb3B0c1xuICovXG5jb21tYW5kcy5tb2JpbGVVcGRhdGVTYWZhcmlQcmVmZXJlbmNlcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVVwZGF0ZVNhZmFyaVByZWZlcmVuY2VzIChvcHRzID0ge30pIHtcbiAgaWYgKCF0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgZXh0ZW5zaW9uIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBTaW11bGF0b3InKTtcbiAgfVxuICBjb25zdCB7IHByZWZlcmVuY2VzIH0gPSBvcHRzO1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChwcmVmZXJlbmNlcykpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdcInByZWZlcmVuY2VzXCIgYXJndW1lbnQgbXVzdCBiZSBhIHZhbGlkIG9iamVjdCcpO1xuICB9XG5cbiAgdGhpcy5sb2cuZGVidWcoYEFib3V0IHRvIHVwZGF0ZSBTYWZhcmkgcHJlZmVyZW5jZXM6ICR7SlNPTi5zdHJpbmdpZnkocHJlZmVyZW5jZXMpfWApO1xuICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnVwZGF0ZVNhZmFyaVNldHRpbmdzKHByZWZlcmVuY2VzKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oY29tbWFuZHMsIGV4dGVuc2lvbnMsIGhlbHBlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxTQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxTQUFBLEdBQUFELHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxRQUFBLEdBQUFILHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFQLE9BQUE7QUFFQSxNQUFNUSxxQkFBcUIsR0FBRyxFQUFFO0FBQ2hDLE1BQU1DLDhCQUE4QixHQUFHLEVBQUU7QUFDekMsTUFBTUMsd0JBQXdCLEdBQUcsRUFBRTtBQUNuQyxNQUFNQyx5QkFBeUIsR0FBRyxFQUFFO0FBQ3BDLE1BQU1DLDRCQUE0QixHQUFHLEVBQUU7QUFFdkMsTUFBTUMsK0JBQStCLEdBQUcsRUFBRTtBQUMxQyxNQUFN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
571
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXN5bmNib3giLCJyZXF1aXJlIiwiX3N1cHBvcnQiLCJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9ibHVlYmlyZCIsIl9kcml2ZXIiLCJfY29va2llcyIsIl9ldmVudHMiLCJJUEhPTkVfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfWF9TQ1JPTExFRF9PRkZTRVQiLCJJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TIiwiSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyIsIklQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQiLCJUQUJfQkFSX09GRlNFVCIsIklQSE9ORV9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQiLCJJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCIsIk5PVENIRURfREVWSUNFX1NJWkVTIiwidyIsImgiLCJXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiIsInV0aWwiLCJBVE9NX1dBSVRfVElNRU9VVF9NUyIsIkFUT01fSU5JVElBTF9XQUlUX01TIiwiT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQiLCJPTl9BUFBfQ1JBU0hfRVZFTlQiLCJWSVNJQkxFIiwiSU5WSVNJQkxFIiwiREVURUNUIiwiVklTSUJJTElUSUVTIiwiVEFCX0JBUl9QT1NJVElPTl9UT1AiLCJUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSIsIlRBQl9CQVJfUE9TU0lUSU9OUyIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIiLCJpZCIsIl8iLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNFbXB0eSIsImlzTmFOIiwic2V0RnJhbWUiLCJmcmFtZSIsImlzV2ViQ29udGV4dCIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJpc051bGwiLCJjdXJXZWJGcmFtZXMiLCJsb2ciLCJkZWJ1ZyIsImhhc0VsZW1lbnRJZCIsImF0b21zRWxlbWVudCIsImdldEF0b21zRWxlbWVudCIsInZhbHVlIiwiZXhlY3V0ZUF0b20iLCJXSU5ET1ciLCJ1bnNoaWZ0IiwiYXRvbSIsImlzVW5kZWZpbmVkIiwiTm9TdWNoRnJhbWVFcnJvciIsImdldENzc1Byb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZWwiLCJzdWJtaXQiLCJyZWZyZXNoIiwiZ2V0VXJsIiwicmVtb3RlIiwiZXhlY3V0ZSIsInRpdGxlIiwic2V0Q29va2llIiwiY29va2llIiwiY2xvbmUiLCJwYXRoIiwianNDb29raWUiLCJjb29raWVVdGlscyIsImNyZWF0ZUpTQ29va2llIiwibmFtZSIsImV4cGlyZXMiLCJleHBpcnkiLCJEYXRlIiwidG9VVENTdHJpbmciLCJkb21haW4iLCJodHRwT25seSIsInNlY3VyZSIsInNjcmlwdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJjYWNoZVdlYkVsZW1lbnQiLCJpc1BsYWluT2JqZWN0IiwiZWxJZCIsInVud3JhcEVsZW1lbnQiLCJjYWNoZUlkIiwiaW5jbHVkZXMiLCJ1dWlkVjQiLCJ3ZWJFbGVtZW50c0NhY2hlIiwic2V0Iiwid3JhcEVsZW1lbnQiLCJjYWNoZVdlYkVsZW1lbnRzIiwicmVzcG9uc2UiLCJ0b0NhY2hlZCIsInYiLCJpc0FycmF5IiwibWFwIiwicmVzdWx0IiwidG9QYWlycyIsInJlZHVjZSIsImFjYyIsImtleSIsImZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYW55IiwiY3R4IiwiY29udGV4dEVsZW1lbnQiLCJpc05pbCIsImVsZW1lbnQiLCJkb0ZpbmQiLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJlcnIiLCJtZXNzYWdlIiwiaXNGdW5jdGlvbiIsIm1hdGNoIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiY2xpY2tXZWJDb29yZHMiLCJjb29yZHMiLCJ0cmFuc2xhdGVXZWJDb29yZHMiLCJjdXJXZWJDb29yZHMiLCJjbGlja0Nvb3JkcyIsImFyZ3MiLCJhbHdheXNEZWZhdWx0RnJhbWUiLCJmcmFtZXMiLCJwcm9taXNlIiwid2FpdEZvckF0b20iLCJleGVjdXRlQXRvbUFzeW5jIiwicmVzcG9uc2VVcmwiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsImFzeW5jUHJvbWlzZSIsImVsT3JJZCIsImhhcyIsIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yIiwiRUxFTUVOVCIsImdldCIsImNvbnZlcnRFbGVtZW50c0ZvckF0b21zIiwiYXJnIiwiaXNFcnJvclR5cGUiLCJnZXRFbGVtZW50SWQiLCJoYXNWYWx1ZSIsImdldFNhZmFyaUlzSXBob25lIiwiaXNCb29sZWFuIiwiX2lzU2FmYXJpSXBob25lIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJ3YXJuIiwiZ2V0U2FmYXJpRGV2aWNlU2l6ZSIsIndpZHRoIiwiaGVpZ2h0Iiwibm9ybUhlaWdodCIsIm5vcm1XaWR0aCIsImdldFNhZmFyaUlzTm90Y2hlZCIsIl9pc1NhZmFyaU5vdGNoZWQiLCJkZXZpY2UiLCJnZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCIsInd2UG9zIiwicmVhbERpbXMiLCJ0b3BPZmZzZXQiLCJib3R0b21PZmZzZXQiLCJpc0lwaG9uZSIsIm5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkiLCJuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkiLCJzYWZhcmlUYWJCYXJQb3NpdGlvbiIsImNvbXBhcmVWZXJzaW9ucyIsIm9wdHMiLCJwbGF0Zm9ybVZlcnNpb24iLCJzZXR0aW5ncyIsImdldFNldHRpbmdzIiwidGFiQmFyVmlzaWJpbGl0eSIsImxvd2VyQ2FzZSIsImJhbm5lclZpc2liaWxpdHkiLCJ0YWJCYXJQb3NpdGlvbiIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiaXNOb3RjaGVkIiwib3JpZW50YXRpb24iLCJub3RjaE9mZnNldCIsImlzU2Nyb2xsZWQiLCJjb250ZXh0c0FuZFZpZXdzIiwiZ2V0Q29udGV4dHNBbmRWaWV3cyIsInRhYnMiLCJmaWx0ZXIiLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwiZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQiLCJ5Iiwib2Zmc2V0IiwiYmFubmVycyIsImZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyIsInRhcFdlYkVsZW1lbnROYXRpdmVseSIsImRyaXZlciIsInRleHQiLCJlbHMiLCJyZWN0IiwicHJveHlDb21tYW5kIiwiZWwyIiwicmVjdDIiLCJ4IiwiTWF0aCIsInJvdW5kIiwibmF0aXZlV2ViVGFwIiwibmF0aXZlV2ViVGFwU3RyaWN0IiwiUHJvbWlzZSIsImFsbCIsInNpemUiLCJjb29yZGluYXRlcyIsInBlcmZvcm1Ub3VjaCIsImFjdGlvbiIsIm9wdGlvbnMiLCJ3ZWJ2aWV3IiwicmV0cnlJbnRlcnZhbCIsImlnbiIsIkVycm9yIiwiY21kIiwid3ZEaW1zIiwiaW1wbGljaXRXYWl0TXMiLCJzZXRJbXBsaWNpdFdhaXQiLCJ4UmF0aW8iLCJ5UmF0aW8iLCJuZXdDb29yZHMiLCJjaGVja0ZvckFsZXJ0IiwiZ2V0QWxlcnRUZXh0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidGltZWRBdG9tUHJvbWlzZSIsInRpbWVvdXQiLCJoYW5kbGVQcm9taXNlRXJyb3IiLCJwIiwib3JpZ2luYWxFcnJvciIsIkFnZ3JlZ2F0ZUVycm9yIiwiVGltZW91dEVycm9yIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJhbnkiLCJkZWxheSIsImlzRnVsZmlsbGVkIiwiX3dhaXRpbmdBdG9tcyIsImNvdW50IiwiYWxlcnROb3RpZmllciIsIkV2ZW50RW1pdHRlciIsImFsZXJ0TW9uaXRvciIsIm9uQWxlcnRDYWxsYmFjayIsIm9uQXBwQ3Jhc2hDYWxsYmFjayIsImlzUmVzb2x2ZWQiLCJlbWl0IiwiSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yIiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwib25jZSIsInRoZW4iLCJjYXRjaCIsInJlbW92ZUxpc3RlbmVyIiwibW9iaWxlV2ViTmF2IiwibmF2VHlwZSIsImFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQiLCJtb2JpbGVVcGRhdGVTYWZhcmlQcmVmZXJlbmNlcyIsImlzU2ltdWxhdG9yIiwicHJlZmVyZW5jZXMiLCJ1cGRhdGVTYWZhcmlTZXR0aW5ncyIsIk9iamVjdCIsImFzc2lnbiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvd2ViLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB1dGlsLCB0aW1pbmcgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzLCBpc0Vycm9yVHlwZSB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IGNvb2tpZVV0aWxzIGZyb20gJy4uL2Nvb2tpZXMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuY29uc3QgSVBIT05FX1RPUF9CQVJfSEVJR0hUID0gNzE7XG5jb25zdCBJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQgPSA0MTtcbmNvbnN0IElQSE9ORV9YX1NDUk9MTEVEX09GRlNFVCA9IDU1O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPUyA9IDI0O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyA9IDIwO1xuXG5jb25zdCBJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUID0gNTE7XG5jb25zdCBJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQgPSA0OTtcbmNvbnN0IFRBQl9CQVJfT0ZGU0VUID0gMzM7XG5jb25zdCBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUID0gODQ7XG5jb25zdCBJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA9IDk1O1xuXG5jb25zdCBOT1RDSEVEX0RFVklDRV9TSVpFUyA9IFtcbiAge3c6IDExMjUsIGg6IDI0MzZ9LCAvLyAxMSBQcm8sIFgsIFhzXG4gIHt3OiA4MjgsIGg6IDE3OTJ9LCAvLyAxMSwgWHJcbiAge3c6IDEyNDIsIGg6IDI2ODh9LCAvLyAxMSBQcm8gTWF4LCBYcyBNYXhcbiAge3c6IDEwODAsIGg6IDIzNDB9LCAvLyAxMyBtaW5pLCAxMiBtaW5pXG4gIHt3OiAxMTcwLCBoOiAyNTMyfSwgLy8gMTQsIDEzLCAxMyBQcm8sIDEyLCAxMiBQcm9cbiAge3c6IDEyODQsIGg6IDI3Nzh9LCAvLyAxNCBQbHVzLCAxMyBQcm8gTWF4LCAxMiBQcm8gTWF4XG4gIHt3OiAxMTc5LCBoOiAyNTU2fSwgLy8gMTQgUHJvXG4gIHt3OiAxMjkwLCBoOiAyNzk2fSwgLy8gMTQgUHJvIE1heFxuXTtcblxuY29uc3QgeyBXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiB9ID0gdXRpbDtcblxuY29uc3QgQVRPTV9XQUlUX1RJTUVPVVRfTVMgPSAyICogNjAwMDA7XG5jb25zdCBBVE9NX0lOSVRJQUxfV0FJVF9NUyA9IDEwMDA7XG5cbmNvbnN0IE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UID0gJ2FsZXJ0JztcbmNvbnN0IE9OX0FQUF9DUkFTSF9FVkVOVCA9ICdhcHBfY3Jhc2gnO1xuXG5jb25zdCBWSVNJQkxFID0gJ3Zpc2libGUnO1xuY29uc3QgSU5WSVNJQkxFID0gJ2ludmlzaWJsZSc7XG5jb25zdCBERVRFQ1QgPSAnZGV0ZWN0JztcbmNvbnN0IFZJU0lCSUxJVElFUyA9IFtWSVNJQkxFLCBJTlZJU0lCTEUsIERFVEVDVF07XG5cbi8vIFRoZSBwb3NpdGlvbiBvZiBTYWZhcmkncyB0YWIgKHNlYXJjaCBiYXIpLlxuLy8gU2luY2UgaU9TIDE1LCB0aGUgYmFyIGlzIHRoZSBib3R0b20gYnkgZGVmYXVsdC5cbmNvbnN0IFRBQl9CQVJfUE9TSVRJT05fVE9QID0gJ3RvcCc7XG5jb25zdCBUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSA9ICdib3R0b20nO1xuY29uc3QgVEFCX0JBUl9QT1NTSVRJT05TID0gW1RBQl9CQVJfUE9TSVRJT05fVE9QLCBUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTV07XG5cbmNvbnN0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIgKGlkKSB7XG4gIGlmICghXy5pc1N0cmluZyhpZCkgJiYgIV8uaXNOdW1iZXIoaWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChfLmlzU3RyaW5nKGlkKSAmJiBfLmlzRW1wdHkoaWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChfLmlzTnVtYmVyKGlkKSAmJiBpc05hTihpZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmNvbW1hbmRzLnNldEZyYW1lID0gYXN5bmMgZnVuY3Rpb24gc2V0RnJhbWUgKGZyYW1lKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgaWYgKF8uaXNOdWxsKGZyYW1lKSkge1xuICAgIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gICAgdGhpcy5sb2cuZGVidWcoJ0xlYXZpbmcgd2ViIGZyYW1lIGFuZCBnb2luZyBiYWNrIHRvIGRlZmF1bHQgY29udGVudCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChoZWxwZXJzLmhhc0VsZW1lbnRJZChmcmFtZSkpIHtcbiAgICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChmcmFtZSk7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfZnJhbWVfd2luZG93JywgW2F0b21zRWxlbWVudF0pO1xuICAgIHRoaXMubG9nLmRlYnVnKGBFbnRlcmluZyBuZXcgd2ViIGZyYW1lOiAnJHt2YWx1ZS5XSU5ET1d9J2ApO1xuICAgIHRoaXMuY3VyV2ViRnJhbWVzLnVuc2hpZnQodmFsdWUuV0lORE9XKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBhdG9tID0gXy5pc051bWJlcihmcmFtZSkgPyAnZnJhbWVfYnlfaW5kZXgnIDogJ2ZyYW1lX2J5X2lkX29yX25hbWUnO1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbShhdG9tLCBbZnJhbWVdKTtcbiAgICBpZiAoXy5pc051bGwodmFsdWUpIHx8IF8uaXNVbmRlZmluZWQodmFsdWUuV0lORE9XKSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hGcmFtZUVycm9yKCk7XG4gICAgfVxuICAgIHRoaXMubG9nLmRlYnVnKGBFbnRlcmluZyBuZXcgd2ViIGZyYW1lOiAnJHt2YWx1ZS5XSU5ET1d9J2ApO1xuICAgIHRoaXMuY3VyV2ViRnJhbWVzLnVuc2hpZnQodmFsdWUuV0lORE9XKTtcbiAgfVxufTtcblxuY29tbWFuZHMuZ2V0Q3NzUHJvcGVydHkgPSBhc3luYyBmdW5jdGlvbiBnZXRDc3NQcm9wZXJ0eSAocHJvcGVydHlOYW1lLCBlbCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGNvbnN0IGF0b21zRWxlbWVudCA9IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGVsKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2dldF92YWx1ZV9vZl9jc3NfcHJvcGVydHknLCBbYXRvbXNFbGVtZW50LCBwcm9wZXJ0eU5hbWVdKTtcbn07XG5cbmNvbW1hbmRzLnN1Ym1pdCA9IGFzeW5jIGZ1bmN0aW9uIHN1Ym1pdCAoZWwpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ3N1Ym1pdCcsIFthdG9tc0VsZW1lbnRdKTtcbn07XG5cbmNvbW1hbmRzLnJlZnJlc2ggPSBhc3luYyBmdW5jdGlvbiByZWZyZXNoICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdyZWZyZXNoJywgW10pO1xufTtcblxuY29tbWFuZHMuZ2V0VXJsID0gYXN5bmMgZnVuY3Rpb24gZ2V0VXJsICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5yZW1vdGUuZXhlY3V0ZSgnd2luZG93LmxvY2F0aW9uLmhyZWYnKTtcbn07XG5cbmNvbW1hbmRzLnRpdGxlID0gYXN5bmMgZnVuY3Rpb24gdGl0bGUgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCd0aXRsZScsIFtdLCB0cnVlKTtcbn07XG5cbmNvbW1hbmRzLnNldENvb2tpZSA9IGFzeW5jIGZ1bmN0aW9uIHNldENvb2tpZSAoY29va2llKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgY29va2llID0gXy5jbG9uZShjb29raWUpO1xuXG4gIC8vIGlmIGBwYXRoYCBmaWVsZCBpcyBub3Qgc3BlY2lmaWVkLCBTYWZhcmkgd2lsbCBub3QgdXBkYXRlIGNvb2tpZXMgYXMgZXhwZWN0ZWQ7IGVnIGlzc3VlICMxNzA4XG4gIGlmICghY29va2llLnBhdGgpIHtcbiAgICBjb29raWUucGF0aCA9ICcvJztcbiAgfVxuXG4gIGNvbnN0IGpzQ29va2llID0gY29va2llVXRpbHMuY3JlYXRlSlNDb29raWUoY29va2llLm5hbWUsIGNvb2tpZS52YWx1ZSwge1xuICAgIGV4cGlyZXM6IF8uaXNOdW1iZXIoY29va2llLmV4cGlyeSkgPyAobmV3IERhdGUoY29va2llLmV4cGlyeSAqIDEwMDApKS50b1VUQ1N0cmluZygpIDpcbiAgICAgIGNvb2tpZS5leHBpcnksXG4gICAgcGF0aDogY29va2llLnBhdGgsXG4gICAgZG9tYWluOiBjb29raWUuZG9tYWluLFxuICAgIGh0dHBPbmx5OiBjb29raWUuaHR0cE9ubHksXG4gICAgc2VjdXJlOiBjb29raWUuc2VjdXJlXG4gIH0pO1xuICBsZXQgc2NyaXB0ID0gYGRvY3VtZW50LmNvb2tpZSA9ICR7SlNPTi5zdHJpbmdpZnkoanNDb29raWUpfWA7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgW11dKTtcbn07XG5cbmhlbHBlcnMuY2FjaGVXZWJFbGVtZW50ID0gZnVuY3Rpb24gY2FjaGVXZWJFbGVtZW50IChlbCkge1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChlbCkpIHtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgY29uc3QgZWxJZCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG4gIGlmICghaXNWYWxpZEVsZW1lbnRJZGVudGlmaWVyKGVsSWQpKSB7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIC8vIEluIG5ld2VyIGRlYnVnZ2VyIHJlbGVhc2VzIGVsZW1lbnQgaWRlbnRpZmllcnMgbG9vayBsaWtlIGA6d2RjOjE2MjgxNTE2NDkzMjVgXG4gIC8vIFdlIGFzc3VtZSBpdCBpcyBzYWZlIHRvIHVzZSB0aGVzZSB0byBpZGVudGlmeSBjYWNoZWQgZWxlbWVudHNcbiAgY29uc3QgY2FjaGVJZCA9IF8uaW5jbHVkZXMoZWxJZCwgJzonKSA/IGVsSWQgOiB1dGlsLnV1aWRWNCgpO1xuICB0aGlzLndlYkVsZW1lbnRzQ2FjaGUuc2V0KGNhY2hlSWQsIGVsSWQpO1xuICByZXR1cm4gdXRpbC53cmFwRWxlbWVudChjYWNoZUlkKTtcbn07XG5cbmhlbHBlcnMuY2FjaGVXZWJFbGVtZW50cyA9IGZ1bmN0aW9uIGNhY2hlV2ViRWxlbWVudHMgKHJlc3BvbnNlKSB7XG4gIGNvbnN0IHRvQ2FjaGVkID0gKHYpID0+IF8uaXNBcnJheSh2KSB8fCBfLmlzUGxhaW5PYmplY3QodilcbiAgICA/IHRoaXMuY2FjaGVXZWJFbGVtZW50cyh2KVxuICAgIDogdjtcblxuICBpZiAoXy5pc0FycmF5KHJlc3BvbnNlKSkge1xuICAgIHJldHVybiByZXNwb25zZS5tYXAodG9DYWNoZWQpO1xuICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChyZXNwb25zZSkpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7Li4ucmVzcG9uc2UsIC4uLih0aGlzLmNhY2hlV2ViRWxlbWVudChyZXNwb25zZSkpfTtcbiAgICByZXR1cm4gXy50b1BhaXJzKHJlc3VsdCkucmVkdWNlKFxuICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGFjY1trZXldID0gdG9DYWNoZWQodmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge31cbiAgICApO1xuICB9XG4gIHJldHVybiByZXNwb25zZTtcbn07XG5cbmV4dGVuc2lvbnMuZmluZFdlYkVsZW1lbnRPckVsZW1lbnRzID0gYXN5bmMgZnVuY3Rpb24gZmluZFdlYkVsZW1lbnRPckVsZW1lbnRzIChzdHJhdGVneSwgc2VsZWN0b3IsIG1hbnksIGN0eCkge1xuICBjb25zdCBjb250ZXh0RWxlbWVudCA9IF8uaXNOaWwoY3R4KSA/IG51bGwgOiB0aGlzLmdldEF0b21zRWxlbWVudChjdHgpO1xuICBsZXQgZWxlbWVudDtcbiAgbGV0IGRvRmluZCA9IGFzeW5jICgpID0+IHtcbiAgICBlbGVtZW50ID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbShgZmluZF9lbGVtZW50JHttYW55ID8gJ3MnIDogJyd9YCwgW3N0cmF0ZWd5LCBzZWxlY3RvciwgY29udGV4dEVsZW1lbnRdKTtcbiAgICByZXR1cm4gIV8uaXNOdWxsKGVsZW1lbnQpO1xuICB9O1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuaW1wbGljaXRXYWl0Rm9yQ29uZGl0aW9uKGRvRmluZCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubWVzc2FnZSAmJiBfLmlzRnVuY3Rpb24oZXJyLm1lc3NhZ2UubWF0Y2gpICYmIGVyci5tZXNzYWdlLm1hdGNoKC9Db25kaXRpb24gdW5tZXQvKSkge1xuICAgICAgLy8gY29uZGl0aW9uIHdhcyBub3QgbWV0IHNldHRpbmcgcmVzIHRvIGVtcHR5IGFycmF5XG4gICAgICBlbGVtZW50ID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBpZiAobWFueSkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMoZWxlbWVudCk7XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShlbGVtZW50KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRWxlbWVudEVycm9yKCk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuY2FjaGVXZWJFbGVtZW50cyhlbGVtZW50KTtcbn07XG5cbmV4dGVuc2lvbnMuY2xpY2tXZWJDb29yZHMgPSBhc3luYyBmdW5jdGlvbiBjbGlja1dlYkNvb3JkcyAoKSB7XG4gIGxldCBjb29yZHMgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVdlYkNvb3Jkcyh0aGlzLmN1cldlYkNvb3Jkcyk7XG4gIGF3YWl0IHRoaXMuY2xpY2tDb29yZHMoY29vcmRzKTtcbn07XG5cbmhlbHBlcnMuZXhlY3V0ZUF0b20gPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXRvbSAoYXRvbSwgYXJncywgYWx3YXlzRGVmYXVsdEZyYW1lID0gZmFsc2UpIHtcbiAgbGV0IGZyYW1lcyA9IGFsd2F5c0RlZmF1bHRGcmFtZSA9PT0gdHJ1ZSA/IFtdIDogdGhpcy5jdXJXZWJGcmFtZXM7XG4gIGxldCBwcm9taXNlID0gdGhpcy5yZW1vdGUuZXhlY3V0ZUF0b20oYXRvbSwgYXJncywgZnJhbWVzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2FpdEZvckF0b20ocHJvbWlzZSk7XG59O1xuXG5oZWxwZXJzLmV4ZWN1dGVBdG9tQXN5bmMgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXRvbUFzeW5jIChhdG9tLCBhcmdzLCByZXNwb25zZVVybCkge1xuICAvLyBzYXZlIHRoZSByZXNvbHZlIGFuZCByZWplY3QgbWV0aG9kcyBvZiB0aGUgcHJvbWlzZSB0byBiZSB3YWl0ZWQgZm9yXG4gIGxldCBwcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRoaXMuYXN5bmNQcm9taXNlID0ge3Jlc29sdmUsIHJlamVjdH07XG4gIH0pO1xuICBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlQXRvbUFzeW5jKGF0b20sIGFyZ3MsIHRoaXMuY3VyV2ViRnJhbWVzLCByZXNwb25zZVVybCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLndhaXRGb3JBdG9tKHByb21pc2UpO1xufTtcblxuaGVscGVycy5nZXRBdG9tc0VsZW1lbnQgPSBmdW5jdGlvbiBnZXRBdG9tc0VsZW1lbnQgKGVsT3JJZCkge1xuICBjb25zdCBlbElkID0gdXRpbC51bndyYXBFbGVtZW50KGVsT3JJZCk7XG4gIGlmICghdGhpcy53ZWJFbGVtZW50c0NhY2hlLmhhcyhlbElkKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IoKTtcbiAgfVxuICByZXR1cm4ge0VMRU1FTlQ6IHRoaXMud2ViRWxlbWVudHNDYWNoZS5nZXQoZWxJZCl9O1xufTtcblxuaGVscGVycy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyA9IGZ1bmN0aW9uIGNvbnZlcnRFbGVtZW50c0ZvckF0b21zIChhcmdzID0gW10pIHtcbiAgcmV0dXJuIGFyZ3MubWFwKChhcmcpID0+IHtcbiAgICBpZiAoaGVscGVycy5oYXNFbGVtZW50SWQoYXJnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXRvbXNFbGVtZW50KGFyZyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCFpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5TdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcikpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmc7XG4gICAgfVxuICAgIHJldHVybiBfLmlzQXJyYXkoYXJnKSA/IHRoaXMuY29udmVydEVsZW1lbnRzRm9yQXRvbXMoYXJnKSA6IGFyZztcbiAgfSk7XG59O1xuXG5oZWxwZXJzLmdldEVsZW1lbnRJZCA9IGZ1bmN0aW9uIGdldEVsZW1lbnRJZCAoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5FTEVNRU5UIHx8IGVsZW1lbnRbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVJdO1xufTtcblxuaGVscGVycy5oYXNFbGVtZW50SWQgPSBmdW5jdGlvbiBoYXNFbGVtZW50SWQgKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHV0aWwuaGFzVmFsdWUoZWxlbWVudCkgJiYgKHV0aWwuaGFzVmFsdWUoZWxlbWVudC5FTEVNRU5UKSB8fCB1dGlsLmhhc1ZhbHVlKGVsZW1lbnRbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVJdKSk7XG59O1xuXG5leHRlbnNpb25zLmdldFNhZmFyaUlzSXBob25lID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpSXNJcGhvbmUgKCkge1xuICBpZiAoXy5pc0Jvb2xlYW4odGhpcy5faXNTYWZhcmlJcGhvbmUpKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2FmYXJpSXBob25lO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgdXNlckFnZW50ID0gYXdhaXQgdGhpcy5leGVjdXRlKCdyZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudCcpO1xuICAgIHRoaXMuX2lzU2FmYXJpSXBob25lID0gdXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2lwaG9uZScpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gZmluZCBkZXZpY2UgdHlwZSBmcm9tIHVzZXJhZ2VudC4gQXNzdW1pbmcgaVBob25lYCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiB0aGlzLl9pc1NhZmFyaUlwaG9uZSA/PyB0cnVlO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlEZXZpY2VTaXplID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpRGV2aWNlU2l6ZSAoKSB7XG4gIGNvbnN0IHNjcmlwdCA9ICdyZXR1cm4ge2hlaWdodDogd2luZG93LnNjcmVlbi5hdmFpbEhlaWdodCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLCB3aWR0aDogd2luZG93LnNjcmVlbi5hdmFpbFdpZHRoICogd2luZG93LmRldmljZVBpeGVsUmF0aW99Oyc7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZXhlY3V0ZShzY3JpcHQpO1xuICBjb25zdCBbbm9ybUhlaWdodCwgbm9ybVdpZHRoXSA9IGhlaWdodCA+IHdpZHRoID8gW2hlaWdodCwgd2lkdGhdIDogW3dpZHRoLCBoZWlnaHRdO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBub3JtV2lkdGgsXG4gICAgaGVpZ2h0OiBub3JtSGVpZ2h0LFxuICB9O1xufTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlJc05vdGNoZWQgPSBhc3luYyBmdW5jdGlvbiBnZXRTYWZhcmlJc05vdGNoZWQgKCkge1xuICBpZiAoXy5pc0Jvb2xlYW4odGhpcy5faXNTYWZhcmlOb3RjaGVkKSkge1xuICAgIHJldHVybiB0aGlzLl9pc1NhZmFyaU5vdGNoZWQ7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0U2FmYXJpRGV2aWNlU2l6ZSgpO1xuICAgIGZvciAoY29uc3QgZGV2aWNlIG9mIE5PVENIRURfREVWSUNFX1NJWkVTKSB7XG4gICAgICBpZiAoZGV2aWNlLncgPT09IHdpZHRoICYmIGRldmljZS5oID09PSBoZWlnaHQpIHtcbiAgICAgICAgdGhpcy5faXNTYWZhcmlOb3RjaGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byBmaW5kIGRldmljZSB0eXBlIGZyb20gZGltZW5zaW9ucy4gQXNzdW1pbmcgdGhlIGRldmljZSBpcyBub3Qgbm90Y2hlZGApO1xuICAgIHRoaXMubG9nLmRlYnVnKGBFcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gdGhpcy5faXNTYWZhcmlOb3RjaGVkID8/IGZhbHNlO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCA9IGFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0ICh3dlBvcywgcmVhbERpbXMpIHtcbiAgbGV0IHRvcE9mZnNldCA9IDA7XG4gIGxldCBib3R0b21PZmZzZXQgPSAwO1xuXG4gIGNvbnN0IGlzSXBob25lID0gYXdhaXQgdGhpcy5nZXRTYWZhcmlJc0lwaG9uZSgpO1xuXG4gIC8vIE5vIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgU21hcnQgQXBwIEJhbm5lciBvciBUYWIgQmFyIGlzIHZpc2libGUgb3Igbm90XG4gIC8vIGlmIGFscmVhZHkgZGVmaW5lZCBieSBuYXRpdmVXZWJUYXBUYWJCYXJWaXNpYmlsaXR5IG9yIG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSBpbiBzZXR0aW5ncy5cbiAgY29uc3Qge1xuICAgIG5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHksXG4gICAgbmF0aXZlV2ViVGFwU21hcnRBcHBCYW5uZXJWaXNpYmlsaXR5LFxuICAgIHNhZmFyaVRhYkJhclBvc2l0aW9uID0gdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzE1LjAnKSAmJiBpc0lwaG9uZVxuICAgICAgPyBUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSA6IFRBQl9CQVJfUE9TSVRJT05fVE9QLFxuICB9ID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpO1xuICBsZXQgdGFiQmFyVmlzaWJpbGl0eSA9IF8ubG93ZXJDYXNlKG5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkpO1xuICBsZXQgYmFubmVyVmlzaWJpbGl0eSA9IF8ubG93ZXJDYXNlKG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSk7XG4gIGNvbnN0IHRhYkJhclBvc2l0aW9uID0gXy5sb3dlckNhc2Uoc2FmYXJpVGFiQmFyUG9zaXRpb24pO1xuXG4gIGlmICghVklTSUJJTElUSUVTLmluY2x1ZGVzKHRhYkJhclZpc2liaWxpdHkpKSB7XG4gICAgdGFiQmFyVmlzaWJpbGl0eSA9IERFVEVDVDtcbiAgfVxuICBpZiAoIVZJU0lCSUxJVElFUy5pbmNsdWRlcyhiYW5uZXJWaXNpYmlsaXR5KSkge1xuICAgIGJhbm5lclZpc2liaWxpdHkgPSBERVRFQ1Q7XG4gIH1cblxuICBpZiAoIVRBQl9CQVJfUE9TU0lUSU9OUy5pbmNsdWRlcyh0YWJCYXJQb3NpdGlvbikpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgYCR7c2FmYXJpVGFiQmFyUG9zaXRpb259IGlzIGludmFsaWQgYXMgU2FmYXJpIHRhYiBiYXIgcG9zaXRpb24uIEF2YWlsYWJsZSBwb3NpdGlvbnMgYXJlICR7VEFCX0JBUl9QT1NTSVRJT05TfS5gKTtcbiAgfVxuXG4gIGNvbnN0IGlzTm90Y2hlZCA9IGlzSXBob25lICYmIGF3YWl0IHRoaXMuZ2V0U2FmYXJpSXNOb3RjaGVkKCk7XG5cbiAgY29uc3Qgb3JpZW50YXRpb24gPSByZWFsRGltcy5oID4gcmVhbERpbXMudyA/ICdQT1JUUkFJVCcgOiAnTEFORFNDQVBFJztcblxuICBjb25zdCBub3RjaE9mZnNldCA9IGlzTm90Y2hlZFxuICAgID8gdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz0nLCAnMTMuMCcpXG4gICAgICA/IElQSE9ORV9YX05PVENIX09GRlNFVF9JT1NfMTNcbiAgICAgIDogSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU1xuICAgIDogMDtcblxuICBjb25zdCBpc1Njcm9sbGVkID0gYXdhaXQgdGhpcy5leGVjdXRlKCdyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA+IDAnKTtcbiAgaWYgKGlzU2Nyb2xsZWQpIHtcbiAgICB0b3BPZmZzZXQgPSBJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQgKyBub3RjaE9mZnNldDtcblxuICAgIGlmIChpc05vdGNoZWQpIHtcbiAgICAgIHRvcE9mZnNldCAtPSBJUEhPTkVfWF9TQ1JPTExFRF9PRkZTRVQ7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGlQaG9uZSBpcyBsYW5kc2NhcGUgdGhlbiB0aGVyZSBpcyBubyB0b3AgYmFyXG4gICAgaWYgKG9yaWVudGF0aW9uID09PSAnTEFORFNDQVBFJyAmJiBpc0lwaG9uZSkge1xuICAgICAgdG9wT2Zmc2V0ID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdG9wT2Zmc2V0ID0gdGFiQmFyUG9zaXRpb24gPT09IFRBQl9CQVJfUE9TSVRJT05fQk9UVE9NID8gMCA6IElQSE9ORV9UT1BfQkFSX0hFSUdIVDtcbiAgICB0b3BPZmZzZXQgKz0gbm90Y2hPZmZzZXQ7XG4gICAgdGhpcy5sb2cuZGVidWcoYHRhYkJhclBvc2l0aW9uIGFuZCB0b3BPZmZzZXQ6ICR7dGFiQmFyUG9zaXRpb259LCAke3RvcE9mZnNldH1gKTtcblxuICAgIGlmIChpc0lwaG9uZSkge1xuICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnUE9SVFJBSVQnKSB7XG4gICAgICAgIC8vIFRoZSBib3R0b20gYmFyIGlzIG9ubHkgdmlzaWJsZSB3aGVuIHBvcnRyYWl0XG4gICAgICAgIGJvdHRvbU9mZnNldCA9IElQSE9ORV9CT1RUT01fQkFSX09GRlNFVDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvcE9mZnNldCA9IElQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9yaWVudGF0aW9uID09PSAnTEFORFNDQVBFJyB8fCAhaXNJcGhvbmUpIHtcbiAgICAgIGlmICh0YWJCYXJWaXNpYmlsaXR5ID09PSBWSVNJQkxFKSB7XG4gICAgICAgIHRvcE9mZnNldCArPSBUQUJfQkFSX09GRlNFVDtcbiAgICAgIH0gZWxzZSBpZiAodGFiQmFyVmlzaWJpbGl0eSA9PT0gREVURUNUKSB7XG4gICAgICAgIC8vIFRhYnMgb25seSBhcHBlYXIgaWYgdGhlIGRldmljZSBpcyBsYW5kc2NhcGUgb3IgaWYgaXQncyBhbiBpUGFkIHNvIHdlIG9ubHkgY2hlY2sgdmlzaWJpbGl0eSBpbiB0aGlzIGNhc2VcbiAgICAgICAgLy8gQXNzdW1lIHRoYXQgZWFjaCB0YWIgYmFyIGlzIGEgV2ViVmlld1xuICAgICAgICBjb25zdCBjb250ZXh0c0FuZFZpZXdzID0gYXdhaXQgdGhpcy5nZXRDb250ZXh0c0FuZFZpZXdzKCk7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBjb250ZXh0c0FuZFZpZXdzLmZpbHRlcigoY3R4KSA9PiBjdHguaWQuc3RhcnRzV2l0aCgnV0VCVklFV18nKSk7XG5cbiAgICAgICAgaWYgKHRhYnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCAke3RhYnMubGVuZ3RofSB0YWJzLiBBc3N1bWluZyB0aGUgdGFiIGJhciBpcyB2aXNpYmxlYCk7XG4gICAgICAgICAgdG9wT2Zmc2V0ICs9IFRBQl9CQVJfT0ZGU0VUO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9wT2Zmc2V0ICs9IGF3YWl0IHRoaXMuZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQoaXNJcGhvbmUsIGJhbm5lclZpc2liaWxpdHkpO1xuXG4gIHd2UG9zLnkgKz0gdG9wT2Zmc2V0O1xuICByZWFsRGltcy5oIC09ICh0b3BPZmZzZXQgKyBib3R0b21PZmZzZXQpO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldCA9IGFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0IChpc0lwaG9uZSwgYmFubmVyVmlzaWJpbGl0eSkge1xuICBsZXQgb2Zmc2V0ID0gMDtcblxuICBpZiAoYmFubmVyVmlzaWJpbGl0eSA9PT0gVklTSUJMRSkge1xuICAgIG9mZnNldCArPSBpc0lwaG9uZSA/XG4gICAgICBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIDpcbiAgICAgIElQQURfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUO1xuICB9IGVsc2UgaWYgKGJhbm5lclZpc2liaWxpdHkgPT09IERFVEVDVCkge1xuICAgIC8vIHRyeSB0byBzZWUgaWYgdGhlcmUgaXMgYW4gU21hcnQgQXBwIEJhbm5lclxuICAgIGNvbnN0IGJhbm5lcnMgPSBhd2FpdCB0aGlzLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnYWNjZXNzaWJpbGl0eSBpZCcsICdDbG9zZSBhcHAgZG93bmxvYWQgb2ZmZXInLCB0cnVlKTtcbiAgICBpZiAoYmFubmVycy5sZW5ndGggPiAwKSB7XG4gICAgICBvZmZzZXQgKz0gaXNJcGhvbmUgP1xuICAgICAgICBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIDpcbiAgICAgICAgSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQ7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5sb2cuZGVidWcoYEFkZGl0aW9uYWwgbmF0aXZlIHdlYiB0YXAgb2Zmc2V0IGNvbXB1dGVkOiAke29mZnNldH1gKTtcbiAgcmV0dXJuIG9mZnNldDtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIHRhcFdlYkVsZW1lbnROYXRpdmVseSAoZHJpdmVyLCBhdG9tc0VsZW1lbnQpIHtcbiAgLy8gdHJ5IHRvIGdldCB0aGUgdGV4dCBvZiB0aGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBhY2Nlc3NpYmxlIGluIHRoZVxuICAvLyBuYXRpdmUgY29udGV4dFxuICB0cnkge1xuICAgIGxldCB0ZXh0ID0gYXdhaXQgZHJpdmVyLmV4ZWN1dGVBdG9tKCdnZXRfdGV4dCcsIFthdG9tc0VsZW1lbnRdKTtcbiAgICBpZiAoIXRleHQpIHtcbiAgICAgIHRleHQgPSBhd2FpdCBkcml2ZXIuZXhlY3V0ZUF0b20oJ2dldF9hdHRyaWJ1dGVfdmFsdWUnLCBbYXRvbXNFbGVtZW50LCAndmFsdWUnXSk7XG4gICAgfVxuXG4gICAgaWYgKHRleHQpIHtcbiAgICAgIGNvbnN0IGVscyA9IGF3YWl0IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2FjY2Vzc2liaWxpdHkgaWQnLCB0ZXh0LCB0cnVlKTtcbiAgICAgIGlmIChlbHMubGVuZ3RoID09PSAxIHx8IGVscy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgY29uc3QgZWwgPSBlbHNbMF07XG4gICAgICAgIC8vIHVzZSB0YXAgYmVjYXVzZSBvbiBpT1MgMTEuMiBhbmQgYmVsb3cgYG5hdGl2ZUNsaWNrYCBjcmFzaGVzIFdEQVxuICAgICAgICBjb25zdCByZWN0ID0gYXdhaXQgZHJpdmVyLnByb3h5Q29tbWFuZChgL2VsZW1lbnQvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWwpfS9yZWN0YCwgJ0dFVCcpO1xuICAgICAgICBpZiAoZWxzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGNvbnN0IGVsMiA9IGVsc1sxXTtcbiAgICAgICAgICBjb25zdCByZWN0MiA9IGF3YWl0IGRyaXZlci5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7dXRpbC51bndyYXBFbGVtZW50KGVsMil9L3JlY3RgLCAnR0VUJyk7XG5cbiAgICAgICAgICBpZiAoKHJlY3QueCAhPT0gcmVjdDIueCB8fCByZWN0LnkgIT09IHJlY3QyLnkpIHx8XG4gICAgICAgICAgKHJlY3Qud2lkdGggIT09IHJlY3QyLndpZHRoIHx8IHJlY3QuaGVpZ2h0ICE9PSByZWN0Mi5oZWlnaHQpKSB7XG4gICAgICAgICAgICAvLyBUaGVzZSAyIG5hdGl2ZSBlbGVtZW50cyBhcmUgbm90IHJlZmVycmluZyB0byB0aGUgc2FtZSB3ZWIgZWxlbWVudFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgICAgeDogTWF0aC5yb3VuZChyZWN0LnggKyByZWN0LndpZHRoIC8gMiksXG4gICAgICAgICAgeTogTWF0aC5yb3VuZChyZWN0LnkgKyByZWN0LmhlaWdodCAvIDIpLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBkcml2ZXIuY2xpY2tDb29yZHMoY29vcmRzKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBhbnkgZmFpbHVyZSBzaG91bGQgZmFsbCB0aHJvdWdoIGFuZCB0cmlnZ2VyIHRoZSBtb3JlIGVsYWJvcmF0ZVxuICAgIC8vIG1ldGhvZCBvZiBjbGlja2luZ1xuICAgIGRyaXZlci5sb2cud2FybihgRXJyb3IgYXR0ZW1wdGluZyB0byBjbGljazogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4dGVuc2lvbnMubmF0aXZlV2ViVGFwID0gYXN5bmMgZnVuY3Rpb24gbmF0aXZlV2ViVGFwIChlbCkge1xuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG5cbiAgLy8gaWYgc3RyaWN0IG5hdGl2ZSB0YXAsIGRvIG5vdCB0cnkgdG8gZG8gaXQgd2l0aCBXREEgZGlyZWN0bHlcbiAgaWYgKCEoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS5uYXRpdmVXZWJUYXBTdHJpY3QgJiYgYXdhaXQgdGFwV2ViRWxlbWVudE5hdGl2ZWx5KHRoaXMsIGF0b21zRWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5sb2cud2FybignVW5hYmxlIHRvIGRvIHNpbXBsZSBuYXRpdmUgd2ViIHRhcC4gQXR0ZW1wdGluZyB0byBjb252ZXJ0IGNvb3JkaW5hdGVzJyk7XG5cbiAgLy8gYGdldF90b3BfbGVmdF9jb29yZGluYXRlc2AgcmV0dXJucyB0aGUgd3JvbmcgdmFsdWUgc29tZXRpbWVzLFxuICAvLyB1bmxlc3Mgd2UgcHJlLWNhbGwgYm90aCBvZiB0aGVzZSBmdW5jdGlvbnMgYmVmb3JlIHRoZSBhY3R1YWwgY2FsbHNcbiAgYXdhaXQgQi5Qcm9taXNlLmFsbChbXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3NpemUnLCBbYXRvbXNFbGVtZW50XSksXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3RvcF9sZWZ0X2Nvb3JkaW5hdGVzJywgW2F0b21zRWxlbWVudF0pLFxuICBdKTtcblxuICBjb25zdCBbc2l6ZSwgY29vcmRpbmF0ZXNdID0gYXdhaXQgQi5Qcm9taXNlLmFsbChbXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3NpemUnLCBbYXRvbXNFbGVtZW50XSksXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3RvcF9sZWZ0X2Nvb3JkaW5hdGVzJywgW2F0b21zRWxlbWVudF0pLFxuICBdKTtcbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gc2l6ZTtcbiAgbGV0IHt4LCB5fSA9IGNvb3JkaW5hdGVzO1xuICB4ICs9IHdpZHRoIC8gMjtcbiAgeSArPSBoZWlnaHQgLyAyO1xuXG4gIHRoaXMuY3VyV2ViQ29vcmRzID0ge3gsIHl9O1xuICBhd2FpdCB0aGlzLmNsaWNrV2ViQ29vcmRzKCk7XG59O1xuXG5leHRlbnNpb25zLmNsaWNrQ29vcmRzID0gYXN5bmMgZnVuY3Rpb24gY2xpY2tDb29yZHMgKGNvb3Jkcykge1xuICBhd2FpdCB0aGlzLnBlcmZvcm1Ub3VjaChbXG4gICAge1xuICAgICAgYWN0aW9uOiAndGFwJyxcbiAgICAgIG9wdGlvbnM6IGNvb3JkcyxcbiAgICB9LFxuICBdKTtcbn07XG5cbmV4dGVuc2lvbnMudHJhbnNsYXRlV2ViQ29vcmRzID0gYXN5bmMgZnVuY3Rpb24gdHJhbnNsYXRlV2ViQ29vcmRzIChjb29yZHMpIHtcbiAgdGhpcy5sb2cuZGVidWcoYFRyYW5zbGF0aW5nIGNvb3JkaW5hdGVzICgke0pTT04uc3RyaW5naWZ5KGNvb3Jkcyl9KSB0byB3ZWIgY29vcmRpbmF0ZXNgKTtcblxuICAvLyBhYnNvbHV0aXplIHdlYiBjb29yZHNcbiAgbGV0IHdlYnZpZXc7XG4gIHRyeSB7XG4gICAgd2VidmlldyA9IGF3YWl0IHJldHJ5SW50ZXJ2YWwoNSwgMTAwLCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnY2xhc3MgbmFtZScsICdYQ1VJRWxlbWVudFR5cGVXZWJWaWV3JywgZmFsc2UpKTtcbiAgfSBjYXRjaCAoaWduKSB7fVxuXG4gIGlmICghd2Vidmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gV2ViVmlldyBmb3VuZC4gVW5hYmxlIHRvIHRyYW5zbGF0ZSB3ZWIgY29vcmRpbmF0ZXMgZm9yIG5hdGl2ZSB3ZWIgdGFwLmApO1xuICB9XG5cbiAgd2VidmlldyA9IHV0aWwudW53cmFwRWxlbWVudCh3ZWJ2aWV3KTtcblxuICBjb25zdCByZWN0ID0gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7d2Vidmlld30vcmVjdGAsICdHRVQnKTtcbiAgY29uc3Qgd3ZQb3MgPSB7eDogcmVjdC54LCB5OiByZWN0Lnl9O1xuICBjb25zdCByZWFsRGltcyA9IHt3OiByZWN0LndpZHRoLCBoOiByZWN0LmhlaWdodH07XG5cbiAgY29uc3QgY21kID0gJyhmdW5jdGlvbiAoKSB7IHJldHVybiB7dzogd2luZG93LmlubmVyV2lkdGgsIGg6IHdpbmRvdy5pbm5lckhlaWdodH07IH0pKCknO1xuICBjb25zdCB3dkRpbXMgPSBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlKGNtZCk7XG5cbiAgLy8ga2VlcCB0cmFjayBvZiBpbXBsaWNpdCB3YWl0LCBhbmQgc2V0IGxvY2FsbHkgdG8gMFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTQ5ODhcbiAgY29uc3QgaW1wbGljaXRXYWl0TXMgPSB0aGlzLmltcGxpY2l0V2FpdE1zO1xuICBhd2FpdCB0aGlzLnNldEltcGxpY2l0V2FpdCgwKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0KHd2UG9zLCByZWFsRGltcyk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgdGhpcy5zZXRJbXBsaWNpdFdhaXQoaW1wbGljaXRXYWl0TXMpO1xuICB9XG5cbiAgaWYgKHd2RGltcyAmJiByZWFsRGltcyAmJiB3dlBvcykge1xuICAgIGxldCB4UmF0aW8gPSByZWFsRGltcy53IC8gd3ZEaW1zLnc7XG4gICAgbGV0IHlSYXRpbyA9IHJlYWxEaW1zLmggLyB3dkRpbXMuaDtcbiAgICBsZXQgbmV3Q29vcmRzID0ge1xuICAgICAgeDogd3ZQb3MueCArIE1hdGgucm91bmQoeFJhdGlvICogY29vcmRzLngpLFxuICAgICAgeTogd3ZQb3MueSArIE1hdGgucm91bmQoeVJhdGlvICogY29vcmRzLnkpLFxuICAgIH07XG5cbiAgICAvLyBhZGRpdGlvbmFsIGxvZ2dpbmcgZm9yIGNvb3JkaW5hdGVzLCBzaW5jZSBpdCBpcyBzb21ldGltZXMgYnJva2VuXG4gICAgLy8gICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzkxNTlcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgQ29udmVydGVkIGNvb3JkaW5hdGVzOiAke0pTT04uc3RyaW5naWZ5KG5ld0Nvb3Jkcyl9YCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICByZWN0OiAke0pTT04uc3RyaW5naWZ5KHJlY3QpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgd3ZQb3M6ICR7SlNPTi5zdHJpbmdpZnkod3ZQb3MpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgcmVhbERpbXM6ICR7SlNPTi5zdHJpbmdpZnkocmVhbERpbXMpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgd3ZEaW1zOiAke0pTT04uc3RyaW5naWZ5KHd2RGltcyl9YCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICB4UmF0aW86ICR7SlNPTi5zdHJpbmdpZnkoeFJhdGlvKX1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgIHlSYXRpbzogJHtKU09OLnN0cmluZ2lmeSh5UmF0aW8pfWApO1xuXG4gICAgdGhpcy5sb2cuZGVidWcoYENvbnZlcnRlZCB3ZWIgY29vcmRzICR7SlNPTi5zdHJpbmdpZnkoY29vcmRzKX0gYCArXG4gICAgICBgaW50byByZWFsIGNvb3JkcyAke0pTT04uc3RyaW5naWZ5KG5ld0Nvb3Jkcyl9YCk7XG4gICAgcmV0dXJuIG5ld0Nvb3JkcztcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5jaGVja0ZvckFsZXJ0ID0gYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JBbGVydCAoKSB7XG4gIHJldHVybiBfLmlzU3RyaW5nKGF3YWl0IHRoaXMuZ2V0QWxlcnRUZXh0KCkpO1xufTtcblxuZXh0ZW5zaW9ucy53YWl0Rm9yQXRvbSA9IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JBdG9tIChwcm9taXNlKSB7XG4gIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG5cbiAgLy8gbmVlZCB0byBjaGVjayBmb3IgYWxlcnQgd2hpbGUgdGhlIGF0b20gaXMgYmVpbmcgZXhlY3V0ZWQuXG4gIC8vIHNvIG5vdGlmeSBvdXJzZWx2ZXMgd2hlbiBpdCBoYXBwZW5zXG4gIGNvbnN0IHRpbWVkQXRvbVByb21pc2UgPSBCLnJlc29sdmUocHJvbWlzZSkudGltZW91dChBVE9NX1dBSVRfVElNRU9VVF9NUyk7XG4gIGNvbnN0IGhhbmRsZVByb21pc2VFcnJvciA9IGFzeW5jIChwKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3Qgb3JpZ2luYWxFcnJvciA9IChlcnIgaW5zdGFuY2VvZiBCLkFnZ3JlZ2F0ZUVycm9yKSA/IGVyclswXSA6IGVycjtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBFcnJvciByZWNlaXZlZCB3aGlsZSBleGVjdXRpbmcgYXRvbTogJHtvcmlnaW5hbEVycm9yLm1lc3NhZ2V9YCk7XG4gICAgICBpZiAob3JpZ2luYWxFcnJvciBpbnN0YW5jZW9mIEIuVGltZW91dEVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuVGltZW91dEVycm9yKGBEaWQgbm90IGdldCBhbnkgcmVzcG9uc2UgZm9yIGF0b20gZXhlY3V0aW9uIGFmdGVyIGAgK1xuICAgICAgICAgIGAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgICAgfVxuICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICB9XG4gIH07XG4gIC8vIGlmIHRoZSBhdG9tIHByb21pc2UgaXMgZnVsZmlsbGVkIHdpdGhpbiBBVE9NX0lOSVRJQUxfV0FJVF9NU1xuICAvLyB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGFuIGFsZXJ0IHByZXNlbmNlXG4gIGF3YWl0IGhhbmRsZVByb21pc2VFcnJvcihCLmFueShbQi5kZWxheShBVE9NX0lOSVRJQUxfV0FJVF9NUyksIHRpbWVkQXRvbVByb21pc2VdKSk7XG4gIGlmICh0aW1lZEF0b21Qcm9taXNlLmlzRnVsZmlsbGVkKCkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGltZWRBdG9tUHJvbWlzZTtcbiAgfVxuXG4gIC8vIC4uLm90aGVyd2lzZSBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gdW5leHBlY3RlZCBhbGVydCBjb3ZlcmluZyB0aGUgZWxlbWVudFxuICBpZiAoIV8uaXNQbGFpbk9iamVjdCh0aGlzLl93YWl0aW5nQXRvbXMpKSB7XG4gICAgdGhpcy5fd2FpdGluZ0F0b21zID0ge1xuICAgICAgY291bnQ6IDAsXG4gICAgICBhbGVydE5vdGlmaWVyOiBuZXcgRXZlbnRFbWl0dGVyKCksXG4gICAgICBhbGVydE1vbml0b3I6IEIucmVzb2x2ZSgpLFxuICAgIH07XG4gIH1cbiAgdGhpcy5fd2FpdGluZ0F0b21zLmNvdW50Kys7XG5cbiAgbGV0IG9uQWxlcnRDYWxsYmFjaztcbiAgbGV0IG9uQXBwQ3Jhc2hDYWxsYmFjaztcbiAgdHJ5IHtcbiAgICAvLyBvbmx5IHJlc3RhcnQgdGhlIG1vbml0b3IgaWYgaXQgaXMgbm90IHJ1bm5pbmcgYWxyZWFkeVxuICAgIGlmICh0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnRNb25pdG9yLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0TW9uaXRvciA9IEIucmVzb2x2ZSgoYXN5bmMgKCkgPT4ge1xuICAgICAgICB3aGlsZSAodGhpcy5fd2FpdGluZ0F0b21zLmNvdW50ID4gMCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5jaGVja0ZvckFsZXJ0KCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0Tm90aWZpZXIuZW1pdChPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuSW52YWxpZEVsZW1lbnRTdGF0ZUVycm9yKSkge1xuICAgICAgICAgICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5lbWl0KE9OX0FQUF9DUkFTSF9FVkVOVCwgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgQi5kZWxheShBVE9NX0lOSVRJQUxfV0FJVF9NUyAvIDIpO1xuICAgICAgICB9XG4gICAgICB9KSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgb25BbGVydENhbGxiYWNrID0gKCkgPT4gcmVqZWN0KG5ldyBlcnJvcnMuVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yKCkpO1xuICAgICAgb25BcHBDcmFzaENhbGxiYWNrID0gcmVqZWN0O1xuICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0Tm90aWZpZXIub25jZShPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCwgb25BbGVydENhbGxiYWNrKTtcbiAgICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE5vdGlmaWVyLm9uY2UoT05fQVBQX0NSQVNIX0VWRU5ULCBvbkFwcENyYXNoQ2FsbGJhY2spO1xuICAgICAgaGFuZGxlUHJvbWlzZUVycm9yKHRpbWVkQXRvbVByb21pc2UpXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by10aGVuXG4gICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChvbkFsZXJ0Q2FsbGJhY2spIHtcbiAgICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5ULCBvbkFsZXJ0Q2FsbGJhY2spO1xuICAgIH1cbiAgICBpZiAob25BcHBDcmFzaENhbGxiYWNrKSB7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5yZW1vdmVMaXN0ZW5lcihPTl9BUFBfQ1JBU0hfRVZFTlQsIG9uQXBwQ3Jhc2hDYWxsYmFjayk7XG4gICAgfVxuICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5jb3VudC0tO1xuICB9XG59O1xuXG5leHRlbnNpb25zLm1vYmlsZVdlYk5hdiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVdlYk5hdiAobmF2VHlwZSkge1xuICB0aGlzLnJlbW90ZS5hbGxvd05hdmlnYXRpb25XaXRob3V0UmVsb2FkID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtgaGlzdG9yeS4ke25hdlR5cGV9KCk7YCwgbnVsbF0pO1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMucmVtb3RlLmFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQgPSBmYWxzZTtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTYWZhcmlPcHRzXG4gKiBAcHJvcGVydHkge29iamVjdH0gcHJlZmVyZW5jZXMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgU2FmYXJpIHNldHRpbmdzIHRvIGJlIHVwZGF0ZWQuXG4gKiBUaGUgbGlzdCBvZiBhdmFpbGFibGUgc2V0dGluZyBuYW1lcyBhbmQgdGhlaXIgdmFsdWVzIGNvdWxkIGJlIHJldHJpZXZlZCBieVxuICogY2hhbmdpbmcgdGhlIGNvcnJlc3BvbmRpbmcgU2FmYXJpIHNldHRpbmdzIGluIHRoZSBVSSBhbmQgdGhlbiBpbnNwZWN0aW5nXG4gKiAnTGlicmFyeS9QcmVmZXJlbmNlcy9jb20uYXBwbGUubW9iaWxlc2FmYXJpLnBsaXN0JyBmaWxlIGluc2lkZSBvZlxuICogY29tLmFwcGxlLm1vYmlsZXNhZmFyaSBhcHAgY29udGFpbmVyLlxuICogVGhlIGZ1bGwgcGF0aCB0byB0aGUgTW9iaWxlIFNhZmFyaSdzIGNvbnRhaW5lciBjb3VsZCBiZSByZXRyaWV2ZWQgZnJvbVxuICogYHhjcnVuIHNpbWN0bCBnZXRfYXBwX2NvbnRhaW5lciA8c2ltX3VkaWQ+IGNvbS5hcHBsZS5tb2JpbGVzYWZhcmkgZGF0YWBcbiAqIGNvbW1hbmQgb3V0cHV0LlxuICogVXNlIHRoZSBgeGNydW4gc2ltY3RsIHNwYXduIDxzaW1fdWRpZD4gZGVmYXVsdHMgcmVhZCA8cGF0aF90b19wbGlzdD5gIGNvbW1hbmRcbiAqIHRvIHByaW50IHRoZSBwbGlzdCBjb250ZW50IHRvIHRoZSBUZXJtaW5hbC5cbiAqL1xuXG4vKipcbiAqIFVwZGF0ZXMgcHJlZmVyZW5jZXMgb2YgTW9iaWxlIFNhZmFyaSBvbiBTaW11bGF0b3JcbiAqXG4gKiBAcGFyYW0ge1NhZmFyaU9wdHN9IG9wdHNcbiAqL1xuY29tbWFuZHMubW9iaWxlVXBkYXRlU2FmYXJpUHJlZmVyZW5jZXMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVVcGRhdGVTYWZhcmlQcmVmZXJlbmNlcyAob3B0cyA9IHt9KSB7XG4gIGlmICghdGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGV4dGVuc2lvbiBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgU2ltdWxhdG9yJyk7XG4gIH1cbiAgY29uc3QgeyBwcmVmZXJlbmNlcyB9ID0gb3B0cztcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QocHJlZmVyZW5jZXMpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignXCJwcmVmZXJlbmNlc1wiIGFyZ3VtZW50IG11c3QgYmUgYSB2YWxpZCBvYmplY3QnKTtcbiAgfVxuXG4gIHRoaXMubG9nLmRlYnVnKGBBYm91dCB0byB1cGRhdGUgU2FmYXJpIHByZWZlcmVuY2VzOiAke0pTT04uc3RyaW5naWZ5KHByZWZlcmVuY2VzKX1gKTtcbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS51cGRhdGVTYWZhcmlTZXR0aW5ncyhwcmVmZXJlbmNlcyk7XG59O1xuXG5PYmplY3QuYXNzaWduKGNvbW1hbmRzLCBleHRlbnNpb25zLCBoZWxwZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsU0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksU0FBQSxHQUFBRCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sUUFBQSxHQUFBSCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQU8sT0FBQSxHQUFBUCxPQUFBO0FBRUEsTUFBTVEscUJBQXFCLEdBQUcsRUFBRTtBQUNoQyxNQUFNQyw4QkFBOEIsR0FBRyxFQUFFO0FBQ3pDLE1BQU1DLHdCQUF3QixHQUFHLEVBQUU7QUFDbkMsTUFBTUMseUJBQXlCLEdBQUcsRUFBRTtBQUNwQyxNQUFNQyw0QkFBNEIsR0FBRyxFQUFFO0FBRXZDLE1BQU1DLCtCQUErQixHQUFHLEVBQUU7QUFDMUMsTUFBTUMsd0JBQXdCLEdBQUcsRUFBRTtBQUNuQyxNQUFNQyxjQUFjLEdBQUcsRUFBRTtBQUN6QixNQUFNQyx3Q0FBd0MsR0FBRyxFQUFFO0FBQ25ELE1BQU1DLHNDQUFzQyxHQUFHLEVBQUU7QUFFakQsTUFBTUMsb0JBQW9CLEdBQUcsQ0FDM0I7RUFBQ0MsQ0FBQyxFQUFFLElBQUk7RUFBRUMsQ0FBQyxFQUFFO0FBQUksQ0FBQyxFQUNsQjtFQUFDRCxDQUFDLEVBQUUsR0FBRztFQUFFQyxDQUFDLEVBQUU7QUFBSSxDQUFDLEVBQ2pCO0VBQUNELENBQUMsRUFBRSxJQUFJO0VBQUVDLENBQUMsRUFBRTtBQUFJLENBQUMsRUFDbEI7RUFBQ0QsQ0FBQyxFQUFFLElBQUk7RUFB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