appium-xcuitest-driver 3.57.0 → 3.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -108,7 +108,7 @@ Capability | Description
108
108
  `appium:automationName` | Must always be set to `xcuitest`. Values of `automationName` are compared case-insensitively.
109
109
  `appium:deviceName` | The name of the device under test. Consider setting `udid` for real devices and use this one for Simulator selection instead
110
110
  `appium:platformVersion` | The platform version of an emulator or a real device. This capability is used for device autodetection if `udid` is not provided
111
- `appium:udid` | UDID of the device to be tested. Could ve retrieved from Xcode->Window->Devices and Simulators window. Always set this capability if you run parallel tests or use a real device to run your tests.
111
+ `appium:udid` | UDID of the device to be tested. Could be retrieved from Xcode->Window->Devices and Simulators window. Always set this capability if you run parallel tests or use a real device to run your tests.
112
112
  `appium:noReset` | Prevents the device to be reset before the session startup if set to `true`. This means that the application under test is not going to be terminated neither its data cleaned. `false` by default
113
113
  `appium:fullReset` | Being set to `true` always enforces the application under test to be fully uninstalled before starting a new session. `false` by default
114
114
  `appium:printPageSourceOnFindFailure` | Enforces the server to dump the actual XML page source into the log if any error happens. `false` by default.
@@ -302,6 +302,7 @@ nativeWebTap | boolean | See the description of the corresponding capability.
302
302
  nativeWebTapStrict | boolean | See the description of the corresponding capability.
303
303
  nativeWebTapTabBarVisibility | enum | Bypass finding whether the existence of the _**tab bar**_ before tapping on the element. It could make native web tap faster. If it's `visible`, tab bar offset will be added without checking the existence of the tab bar. It's `invisible`, the tab bar offset will be `zero`. If you want to leave Appium to check and measure the tab bar offset, unset or set `detect`. Only applicable if `nativeWebTap` and `nativeWebTapStrict` are enabled. Unset by default.
304
304
  nativeWebTapSmartAppBannerVisibility | enum | The same as `nativeWebTapTabBarVisibility`, this keyword will bypass finding whether the existence of the _**smart app banner**_.
305
+ safariTabBarPosition | string | Handle offset of Safari tab bar in `nativeWebTap` enabled interactions. If `platformVersion` was greater than or equal to 15 and iPhone device, the value is `bottom` by default. Otherwise `top`. When the value is `top`, Appium considers offset as the bar length. iOS 15+ environment can customize the bar position in the settings app, so please adjust the offset with this. Acceptable values: `bottom`, `top`
305
306
  useJSONSource | boolean | See the description of the corresponding capability.
306
307
 
307
308
  ## Element Location
@@ -107,8 +107,8 @@ commands.mobileQueryAppState = async function mobileQueryAppState(opts = {}) {
107
107
  return await this.proxyCommand('/wda/apps/state', 'POST', requireOptions(opts, ['bundleId']));
108
108
  };
109
109
 
110
- commands.installApp = async function installApp(appPath) {
111
- await this.mobileInstallApp({
110
+ commands.installApp = async function installApp(appPath, opts = {}) {
111
+ await this.mobileInstallApp({ ...(_lodash.default.isPlainObject(opts) ? opts : {}),
112
112
  app: appPath
113
113
  });
114
114
  };
@@ -160,4 +160,4 @@ var _default = commands;
160
160
  exports.default = _default;require('source-map-support').install();
161
161
 
162
162
 
163
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInJlcXVpcmVPcHRpb25zIiwib3B0cyIsInJlcUtleXMiLCJrZXkiLCJfIiwiaXNTdHJpbmciLCJpc0VtcHR5IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVJbnN0YWxsQXBwIiwiYXBwIiwidGltZW91dE1zIiwic3RyYXRlZ3kiLCJzcmNBcHBQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImxvZyIsImluZm8iLCJpc1JlYWxEZXZpY2UiLCJkZXZpY2UiLCJ1ZGlkIiwiZnMiLCJleGlzdHMiLCJlcnJvckFuZFRocm93IiwiaW5zdGFsbEFwcCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibW9iaWxlSXNBcHBJbnN0YWxsZWQiLCJidW5kbGVJZCIsImluc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwibW9iaWxlUmVtb3ZlQXBwIiwicmVtb3ZlQXBwIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJtb2JpbGVMYXVuY2hBcHAiLCJsYXVuY2hPcHRpb25zIiwiYXJndW1lbnRzIiwiaXNBcnJheSIsImVudmlyb25tZW50IiwicHJveHlDb21tYW5kIiwibW9iaWxlVGVybWluYXRlQXBwIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJtb2JpbGVRdWVyeUFwcFN0YXRlIiwiYXBwUGF0aCIsImFjdGl2YXRlQXBwIiwiT2JqZWN0IiwiYXNzaWduIiwidGVybWluYXRlQXBwIiwicXVlcnlBcHBTdGF0ZSIsIm1vYmlsZUxpc3RBcHBzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImFwcGxpY2F0aW9uVHlwZSIsInNlcnZpY2UiLCJzZXJ2aWNlcyIsInN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlIiwibGlzdEFwcGxpY2F0aW9ucyIsImNsb3NlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNB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R0FBd0IsZUFBZUEsWUFBZixDQUE2QnJCLFFBQTdCLEVBQXVDO0FBQzdELFNBQU8sTUFBTSxLQUFLYyxrQkFBTCxDQUF3QjtBQUFDZCxJQUFBQTtBQUFELEdBQXhCLENBQWI7QUFDRCxDQUZEOztBQUlBN0IsUUFBUSxDQUFDbUQsYUFBVCxHQUF5QixlQUFlQSxhQUFmLENBQThCdEIsUUFBOUIsRUFBd0M7QUFDL0QsU0FBTyxNQUFNLEtBQUtnQixtQkFBTCxDQUF5QjtBQUFDaEIsSUFBQUE7QUFBRCxHQUF6QixDQUFiO0FBQ0QsQ0FGRDs7QUFnQkE3QixRQUFRLENBQUNvRCxjQUFULEdBQTBCLGVBQWVBLGNBQWYsQ0FBK0JsRCxJQUFJLEdBQUcsRUFBdEMsRUFBMEM7QUFDbEUsTUFBSSxDQUFDLEtBQUtpQixZQUFMLEVBQUwsRUFBMEI7QUFDeEIsVUFBTSxJQUFJWCx5QkFBTzZDLG1CQUFYLENBQWdDLGtEQUFoQyxDQUFOO0FBQ0Q7O0FBRUQsUUFBTTtBQUNKQyxJQUFBQSxlQUFlLEdBQUc7QUFEZCxNQUVGcEQsSUFGSjtBQUdBLFFBQU1xRCxPQUFPLEdBQUcsTUFBTUMsMEJBQVNDLDZCQUFULENBQXVDLEtBQUt2RCxJQUFMLENBQVVrQixNQUFWLENBQWlCQyxJQUF4RCxDQUF0Qjs7QUFDQSxNQUFJO0FBQ0YsV0FBTyxNQUFNa0MsT0FBTyxDQUFDRyxnQkFBUixDQUF5QjtBQUFDSixNQUFBQTtBQUFELEtBQXpCLENBQWI7QUFDRCxHQUZELFNBRVU7QUFDUkMsSUFBQUEsT0FBTyxDQUFDSSxLQUFSO0FBQ0Q7QUFDRixDQWREOztlQWdCZTNELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgc2VydmljZXMgfSBmcm9tICdhcHBpdW0taW9zLWRldmljZSc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHJlcXVpcmVPcHRpb25zIChvcHRzID0ge30sIHJlcUtleXMgPSBbXSkge1xuICBmb3IgKGNvbnN0IGtleSBvZiByZXFLZXlzKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKG9wdHNba2V5XSkgfHwgXy5pc0VtcHR5KG9wdHNba2V5XSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIHN0cmluZy4gJyR7b3B0c1trZXldfScgaXMgZ2l2ZW4gaW5zdGVhZGBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRzO1xufVxuXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSW5zdGFsbEFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwLCB0aW1lb3V0TXMsIHN0cmF0ZWd5IH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2FwcCddKTtcbiAgY29uc3Qgc3JjQXBwUGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCAnLmFwcCcpO1xuICBsb2cuaW5mbyhgSW5zdGFsbGluZyAnJHtzcmNBcHBQYXRofScgdG8gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gYCArXG4gICAgYHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNBcHBQYXRoKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGUgYXBwbGljYXRpb24gYXQgJyR7c3JjQXBwUGF0aH0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5pbnN0YWxsQXBwKFxuICAgIHNyY0FwcFBhdGgsIHRpbWVvdXRNcyA/PyB0aGlzLm9wdHMuYXBwUHVzaFRpbWVvdXQsIHN0cmF0ZWd5ID8/IHRoaXMub3B0cy5hcHBJbnN0YWxsU3RyYXRlZ3lcbiAgKTtcbiAgbG9nLmluZm8oYEluc3RhbGxhdGlvbiBvZiAnJHtzcmNBcHBQYXRofScgc3VjY2VlZGVkYCk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVJc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzQXBwSW5zdGFsbGVkIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2J1bmRsZUlkfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGNvbnN0IGluc3RhbGxlZCA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQoYnVuZGxlSWQpO1xuICBsb2cuaW5mbyhgQXBwICcke2J1bmRsZUlkfScgaXMke2luc3RhbGxlZCA/ICcnIDogJyBub3QnfSBpbnN0YWxsZWRgKTtcbiAgcmV0dXJuIGluc3RhbGxlZDtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJlbW92ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICBsb2cuaW5mbyhgVW5pbnN0YWxsaW5nIHRoZSBhcHBsaWNhdGlvbiB3aXRoIGJ1bmRsZSBpZGVudGlmaWVyICcke2J1bmRsZUlkfScgYCArXG4gICAgYGZyb20gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gd2l0aCBVRElEICcke3RoaXMub3B0cy5kZXZpY2UudWRpZH0nYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5yZW1vdmVBcHAoYnVuZGxlSWQpO1xuICAgIGxvZy5pbmZvKGBSZW1vdmFsIG9mICcke2J1bmRsZUlkfScgc3VjY2VlZGVkYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy53YXJuKGBDYW5ub3QgcmVtb3ZlICcke2J1bmRsZUlkfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29tbWFuZHMubW9iaWxlTGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGF1bmNoQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgbGF1bmNoT3B0aW9ucyA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGlmIChvcHRzLmFyZ3VtZW50cykge1xuICAgIGxhdW5jaE9wdGlvbnMuYXJndW1lbnRzID0gXy5pc0FycmF5KG9wdHMuYXJndW1lbnRzKSA/IG9wdHMuYXJndW1lbnRzIDogW29wdHMuYXJndW1lbnRzXTtcbiAgfVxuICBpZiAob3B0cy5lbnZpcm9ubWVudCkge1xuICAgIGxhdW5jaE9wdGlvbnMuZW52aXJvbm1lbnQgPSBvcHRzLmVudmlyb25tZW50O1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2xhdW5jaCcsICdQT1NUJywgbGF1bmNoT3B0aW9ucyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVUZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUZXJtaW5hdGVBcHAgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy90ZXJtaW5hdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlQWN0aXZhdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVBY3RpdmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2FjdGl2YXRlJywgJ1BPU1QnLCByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBzdGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyBzZXQsIHdoaWNoIG11c3QgY29udGFpbiBgYnVuZGxlSWRgIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgYWN0dWFsIGFwcGxpY2F0aW9uIHN0YXRlIGNvZGUuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlhcHBsaWNhdGlvbnN0YXRlP2xhbmd1YWdlPW9iamNcbiAqIHRvIGdldCB0aGUgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVRdWVyeUFwcFN0YXRlIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvc3RhdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMuaW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcHAgKGFwcFBhdGgpIHtcbiAgYXdhaXQgdGhpcy5tb2JpbGVJbnN0YWxsQXBwKHthcHA6IGFwcFBhdGh9KTtcbn07XG5cbmNvbW1hbmRzLmFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKGJ1bmRsZUlkLCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlTGF1bmNoQXBwKE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHtidW5kbGVJZH0pKTtcbn07XG5cbmNvbW1hbmRzLmlzQXBwSW5zdGFsbGVkID0gYXN5bmMgZnVuY3Rpb24gaXNBcHBJbnN0YWxsZWQgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUlzQXBwSW5zdGFsbGVkKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMudGVybWluYXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gdGVybWluYXRlQXBwIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVUZXJtaW5hdGVBcHAoe2J1bmRsZUlkfSk7XG59O1xuXG5jb21tYW5kcy5xdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gcXVlcnlBcHBTdGF0ZSAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlUXVlcnlBcHBTdGF0ZSh7YnVuZGxlSWR9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTGlzdEFwcHNPcHRpb25zXG4gKiBAcHJvcGVydHkgeydTeXN0ZW0nfCdVc2VyJ30gYXBwbGljYXRpb25UeXBlIFtVc2VyXSBUaGUgdHlwZSBvZiBhcHBsaWNhdGlvbnMgdG8gbGlzdFxuICovXG5cbi8qKlxuICogTGlzdCBhcHBsaWNhdGlvbnMgaW5zdGFsbGVkIG9uIHRoZSByZWFsIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtMaXN0QXBwc09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtBcnJheTxPYmplY3Q+fSBBIGxpc3Qgb2YgYXBwcywgd2hlcmUgZWFjaCBpdGVtIGlzIGEgbWFwIHdoZXJlIGtleXMgYXJlXG4gKiBidW5kbGUgaWRlbnRpZmllcnMgYW5kIHZhbHVlcyBhcmUgbWFwcyBvZiBwbGF0Zm9ybS1zcGVjaWZpYyBhcHAgcHJvcGVydGllcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlTGlzdEFwcHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMaXN0QXBwcyAob3B0cyA9IHt9KSB7XG4gIGlmICghdGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcihgVGhpcyBleHRlbnNpb24gaXMgb25seSBzdXBwb3J0ZWQgb24gcmVhbCBkZXZpY2VzYCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgYXBwbGljYXRpb25UeXBlID0gJ1VzZXInLFxuICB9ID0gb3B0cztcbiAgY29uc3Qgc2VydmljZSA9IGF3YWl0IHNlcnZpY2VzLnN0YXJ0SW5zdGFsbGF0aW9uUHJveHlTZXJ2aWNlKHRoaXMub3B0cy5kZXZpY2UudWRpZCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHNlcnZpY2UubGlzdEFwcGxpY2F0aW9ucyh7YXBwbGljYXRpb25UeXBlfSk7XG4gIH0gZmluYWxseSB7XG4gICAgc2VydmljZS5jbG9zZSgpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
163
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsInJlcXVpcmVPcHRpb25zIiwib3B0cyIsInJlcUtleXMiLCJrZXkiLCJfIiwiaXNTdHJpbmciLCJpc0VtcHR5IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVJbnN0YWxsQXBwIiwiYXBwIiwidGltZW91dE1zIiwic3RyYXRlZ3kiLCJzcmNBcHBQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImxvZyIsImluZm8iLCJpc1JlYWxEZXZpY2UiLCJkZXZpY2UiLCJ1ZGlkIiwiZnMiLCJleGlzdHMiLCJlcnJvckFuZFRocm93IiwiaW5zdGFsbEFwcCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibW9iaWxlSXNBcHBJbnN0YWxsZWQiLCJidW5kbGVJZCIsImluc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwibW9iaWxlUmVtb3ZlQXBwIiwicmVtb3ZlQXBwIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJtb2JpbGVMYXVuY2hBcHAiLCJsYXVuY2hPcHRpb25zIiwiYXJndW1lbnRzIiwiaXNBcnJheSIsImVudmlyb25tZW50IiwicHJveHlDb21tYW5kIiwibW9iaWxlVGVybWluYXRlQXBwIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJtb2JpbGVRdWVyeUFwcFN0YXRlIiwiYXBwUGF0aCIsImlzUGxhaW5PYmplY3QiLCJhY3RpdmF0ZUFwcCIsIk9iamVjdCIsImFzc2lnbiIsInRlcm1pbmF0ZUFwcCIsInF1ZXJ5QXBwU3RhdGUiLCJtb2JpbGVMaXN0QXBwcyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJhcHBsaWNhdGlvblR5cGUiLCJzZXJ2aWNlIiwic2VydmljZXMiLCJzdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSIsImxpc3RBcHBsaWNhdGlvbnMiLCJjbG9zZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7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RixRQUEvQixFQUF5QztBQUNqRSxTQUFPLE1BQU0sS0FBS0Qsb0JBQUwsQ0FBMEI7QUFBQ0MsSUFBQUE7QUFBRCxHQUExQixDQUFiO0FBQ0QsQ0FGRDs7QUFJQTdCLFFBQVEsQ0FBQ21ELFlBQVQsR0FBd0IsZUFBZUEsWUFBZixDQUE2QnRCLFFBQTdCLEVBQXVDO0FBQzdELFNBQU8sTUFBTSxLQUFLYyxrQkFBTCxDQUF3QjtBQUFDZCxJQUFBQTtBQUFELEdBQXhCLENBQWI7QUFDRCxDQUZEOztBQUlBN0IsUUFBUSxDQUFDb0QsYUFBVCxHQUF5QixlQUFlQSxhQUFmLENBQThCdkIsUUFBOUIsRUFBd0M7QUFDL0QsU0FBTyxNQUFNLEtBQUtnQixtQkFBTCxDQUF5QjtBQUFDaEIsSUFBQUE7QUFBRCxHQUF6QixDQUFiO0FBQ0QsQ0FGRDs7QUFnQkE3QixRQUFRLENBQUNxRCxjQUFULEdBQTBCLGVBQWVBLGNBQWYsQ0FBK0JuRCxJQUFJLEdBQUcsRUFBdEMsRUFBMEM7QUFDbEUsTUFBSSxDQUFDLEtBQUtpQixZQUFMLEVBQUwsRUFBMEI7QUFDeEIsVUFBTSxJQUFJWCx5QkFBTzhDLG1CQUFYLENBQWdDLGtEQUFoQyxDQUFOO0FBQ0Q7O0FBRUQsUUFBTTtBQUNKQyxJQUFBQSxlQUFlLEdBQUc7QUFEZCxNQUVGckQsSUFGSjtBQUdBLFFBQU1zRCxPQUFPLEdBQUcsTUFBTUMsMEJBQVNDLDZCQUFULENBQXVDLEtBQUt4RCxJQUFMLENBQVVrQixNQUFWLENBQWlCQyxJQUF4RCxDQUF0Qjs7QUFDQSxNQUFJO0FBQ0YsV0FBTyxNQUFNbUMsT0FBTyxDQUFDRyxnQkFBUixDQUF5QjtBQUFDSixNQUFBQTtBQUFELEtBQXpCLENBQWI7QUFDRCxHQUZELFNBRVU7QUFDUkMsSUFBQUEsT0FBTyxDQUFDSSxLQUFSO0FBQ0Q7QUFDRixDQWREOztlQWdCZTVELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgc2VydmljZXMgfSBmcm9tICdhcHBpdW0taW9zLWRldmljZSc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbmZ1bmN0aW9uIHJlcXVpcmVPcHRpb25zIChvcHRzID0ge30sIHJlcUtleXMgPSBbXSkge1xuICBmb3IgKGNvbnN0IGtleSBvZiByZXFLZXlzKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKG9wdHNba2V5XSkgfHwgXy5pc0VtcHR5KG9wdHNba2V5XSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgIGAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIHN0cmluZy4gJyR7b3B0c1trZXldfScgaXMgZ2l2ZW4gaW5zdGVhZGBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRzO1xufVxuXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSW5zdGFsbEFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwLCB0aW1lb3V0TXMsIHN0cmF0ZWd5IH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2FwcCddKTtcbiAgY29uc3Qgc3JjQXBwUGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCAnLmFwcCcpO1xuICBsb2cuaW5mbyhgSW5zdGFsbGluZyAnJHtzcmNBcHBQYXRofScgdG8gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gYCArXG4gICAgYHdpdGggVURJRCAnJHt0aGlzLm9wdHMuZGV2aWNlLnVkaWR9J2ApO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNBcHBQYXRoKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGUgYXBwbGljYXRpb24gYXQgJyR7c3JjQXBwUGF0aH0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5pbnN0YWxsQXBwKFxuICAgIHNyY0FwcFBhdGgsIHRpbWVvdXRNcyA/PyB0aGlzLm9wdHMuYXBwUHVzaFRpbWVvdXQsIHN0cmF0ZWd5ID8/IHRoaXMub3B0cy5hcHBJbnN0YWxsU3RyYXRlZ3lcbiAgKTtcbiAgbG9nLmluZm8oYEluc3RhbGxhdGlvbiBvZiAnJHtzcmNBcHBQYXRofScgc3VjY2VlZGVkYCk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVJc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzQXBwSW5zdGFsbGVkIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2J1bmRsZUlkfSA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGNvbnN0IGluc3RhbGxlZCA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQoYnVuZGxlSWQpO1xuICBsb2cuaW5mbyhgQXBwICcke2J1bmRsZUlkfScgaXMke2luc3RhbGxlZCA/ICcnIDogJyBub3QnfSBpbnN0YWxsZWRgKTtcbiAgcmV0dXJuIGluc3RhbGxlZDtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJlbW92ZUFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtidW5kbGVJZH0gPSByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pO1xuICBsb2cuaW5mbyhgVW5pbnN0YWxsaW5nIHRoZSBhcHBsaWNhdGlvbiB3aXRoIGJ1bmRsZSBpZGVudGlmaWVyICcke2J1bmRsZUlkfScgYCArXG4gICAgYGZyb20gdGhlICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnU2ltdWxhdG9yJ30gd2l0aCBVRElEICcke3RoaXMub3B0cy5kZXZpY2UudWRpZH0nYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5yZW1vdmVBcHAoYnVuZGxlSWQpO1xuICAgIGxvZy5pbmZvKGBSZW1vdmFsIG9mICcke2J1bmRsZUlkfScgc3VjY2VlZGVkYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy53YXJuKGBDYW5ub3QgcmVtb3ZlICcke2J1bmRsZUlkfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29tbWFuZHMubW9iaWxlTGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGF1bmNoQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgbGF1bmNoT3B0aW9ucyA9IHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSk7XG4gIGlmIChvcHRzLmFyZ3VtZW50cykge1xuICAgIGxhdW5jaE9wdGlvbnMuYXJndW1lbnRzID0gXy5pc0FycmF5KG9wdHMuYXJndW1lbnRzKSA/IG9wdHMuYXJndW1lbnRzIDogW29wdHMuYXJndW1lbnRzXTtcbiAgfVxuICBpZiAob3B0cy5lbnZpcm9ubWVudCkge1xuICAgIGxhdW5jaE9wdGlvbnMuZW52aXJvbm1lbnQgPSBvcHRzLmVudmlyb25tZW50O1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2xhdW5jaCcsICdQT1NUJywgbGF1bmNoT3B0aW9ucyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVUZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUZXJtaW5hdGVBcHAgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy93ZGEvYXBwcy90ZXJtaW5hdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlQWN0aXZhdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVBY3RpdmF0ZUFwcCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3dkYS9hcHBzL2FjdGl2YXRlJywgJ1BPU1QnLCByZXF1aXJlT3B0aW9ucyhvcHRzLCBbJ2J1bmRsZUlkJ10pKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBzdGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyBzZXQsIHdoaWNoIG11c3QgY29udGFpbiBgYnVuZGxlSWRgIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgYWN0dWFsIGFwcGxpY2F0aW9uIHN0YXRlIGNvZGUuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlhcHBsaWNhdGlvbnN0YXRlP2xhbmd1YWdlPW9iamNcbiAqIHRvIGdldCB0aGUgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVRdWVyeUFwcFN0YXRlIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvd2RhL2FwcHMvc3RhdGUnLCAnUE9TVCcsIHJlcXVpcmVPcHRpb25zKG9wdHMsIFsnYnVuZGxlSWQnXSkpO1xufTtcblxuY29tbWFuZHMuaW5zdGFsbEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcHAgKGFwcFBhdGgsIG9wdHMgPSB7fSkge1xuICBhd2FpdCB0aGlzLm1vYmlsZUluc3RhbGxBcHAoe1xuICAgIC4uLihfLmlzUGxhaW5PYmplY3Qob3B0cykgPyBvcHRzIDoge30pLFxuICAgIGFwcDogYXBwUGF0aCxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5hY3RpdmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlQXBwIChidW5kbGVJZCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZUxhdW5jaEFwcChPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7YnVuZGxlSWR9KSk7XG59O1xuXG5jb21tYW5kcy5pc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzQXBwSW5zdGFsbGVkIChidW5kbGVJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5tb2JpbGVJc0FwcEluc3RhbGxlZCh7YnVuZGxlSWR9KTtcbn07XG5cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYnVuZGxlSWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMubW9iaWxlVGVybWluYXRlQXBwKHtidW5kbGVJZH0pO1xufTtcblxuY29tbWFuZHMucXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5QXBwU3RhdGUgKGJ1bmRsZUlkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLm1vYmlsZVF1ZXJ5QXBwU3RhdGUoe2J1bmRsZUlkfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExpc3RBcHBzT3B0aW9uc1xuICogQHByb3BlcnR5IHsnU3lzdGVtJ3wnVXNlcid9IGFwcGxpY2F0aW9uVHlwZSBbVXNlcl0gVGhlIHR5cGUgb2YgYXBwbGljYXRpb25zIHRvIGxpc3RcbiAqL1xuXG4vKipcbiAqIExpc3QgYXBwbGljYXRpb25zIGluc3RhbGxlZCBvbiB0aGUgcmVhbCBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7TGlzdEFwcHNPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7QXJyYXk8T2JqZWN0Pn0gQSBsaXN0IG9mIGFwcHMsIHdoZXJlIGVhY2ggaXRlbSBpcyBhIG1hcCB3aGVyZSBrZXlzIGFyZVxuICogYnVuZGxlIGlkZW50aWZpZXJzIGFuZCB2YWx1ZXMgYXJlIG1hcHMgb2YgcGxhdGZvcm0tc3BlY2lmaWMgYXBwIHByb3BlcnRpZXMuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUxpc3RBcHBzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGlzdEFwcHMgKG9wdHMgPSB7fSkge1xuICBpZiAoIXRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoYFRoaXMgZXh0ZW5zaW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHJlYWwgZGV2aWNlc2ApO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGFwcGxpY2F0aW9uVHlwZSA9ICdVc2VyJyxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHNlcnZpY2UgPSBhd2FpdCBzZXJ2aWNlcy5zdGFydEluc3RhbGxhdGlvblByb3h5U2VydmljZSh0aGlzLm9wdHMuZGV2aWNlLnVkaWQpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBzZXJ2aWNlLmxpc3RBcHBsaWNhdGlvbnMoe2FwcGxpY2F0aW9uVHlwZX0pO1xuICB9IGZpbmFsbHkge1xuICAgIHNlcnZpY2UuY2xvc2UoKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -55,6 +55,9 @@ const VISIBLE = 'visible';
55
55
  const INVISIBLE = 'invisible';
56
56
  const DETECT = 'detect';
57
57
  const VISIBILITIES = [VISIBLE, INVISIBLE, DETECT];
58
+ const TAB_BAR_POSITION_TOP = 'top';
59
+ const TAB_BAR_POSITION_BOTTOM = 'bottom';
60
+ const TAB_BAR_POSSITIONS = [TAB_BAR_POSITION_TOP, TAB_BAR_POSITION_BOTTOM];
58
61
  const commands = {},
59
62
  helpers = {},
60
63
  extensions = {};
@@ -416,15 +419,19 @@ extensions.getSafariIsNotched = _lodash.default.memoize(async function getSafari
416
419
  extensions.getExtraTranslateWebCoordsOffset = async function getExtraTranslateWebCoordsOffset(wvPos, realDims) {
417
420
  let topOffset = 0;
418
421
  let bottomOffset = 0;
422
+ const isIphone = await this.getSafariIsIphone();
419
423
  const {
420
424
  nativeWebTapTabBarVisibility,
421
- nativeWebTapSmartAppBannerVisibility
425
+ nativeWebTapSmartAppBannerVisibility,
426
+ safariTabBarPosition = _appiumSupport.util.compareVersions(this.opts.platformVersion, '>=', '15.0') && isIphone ? TAB_BAR_POSITION_BOTTOM : TAB_BAR_POSITION_TOP
422
427
  } = await this.settings.getSettings();
423
428
 
424
429
  let tabBarVisibility = _lodash.default.lowerCase(nativeWebTapTabBarVisibility);
425
430
 
426
431
  let bannerVisibility = _lodash.default.lowerCase(nativeWebTapSmartAppBannerVisibility);
427
432
 
433
+ const tabBarPosition = _lodash.default.lowerCase(safariTabBarPosition);
434
+
428
435
  if (!VISIBILITIES.includes(tabBarVisibility)) {
429
436
  tabBarVisibility = DETECT;
430
437
  }
@@ -433,7 +440,10 @@ extensions.getExtraTranslateWebCoordsOffset = async function getExtraTranslateWe
433
440
  bannerVisibility = DETECT;
434
441
  }
435
442
 
436
- const isIphone = await this.getSafariIsIphone();
443
+ if (!TAB_BAR_POSSITIONS.includes(tabBarPosition)) {
444
+ throw new _appiumBaseDriver.errors.InvalidArgumentError(`${safariTabBarPosition} is invalid as Safari tab bar position. Available positions are ${TAB_BAR_POSSITIONS}.`);
445
+ }
446
+
437
447
  const isNotched = isIphone && (await this.getSafariIsNotched());
438
448
  const orientation = realDims.h > realDims.w ? 'PORTRAIT' : 'LANDSCAPE';
439
449
  const notchOffset = isNotched ? _appiumSupport.util.compareVersions(this.opts.platformVersion, '=', '13.0') ? IPHONE_X_NOTCH_OFFSET_IOS_13 : IPHONE_X_NOTCH_OFFSET_IOS : 0;
@@ -450,7 +460,10 @@ extensions.getExtraTranslateWebCoordsOffset = async function getExtraTranslateWe
450
460
  topOffset = 0;
451
461
  }
452
462
  } else {
453
- topOffset = IPHONE_TOP_BAR_HEIGHT + notchOffset;
463
+ topOffset = tabBarPosition === TAB_BAR_POSITION_BOTTOM ? 0 : IPHONE_TOP_BAR_HEIGHT;
464
+ topOffset += notchOffset;
465
+
466
+ _logger.default.debug(`tabBarPosition and topOffset: ${tabBarPosition}, ${topOffset}`);
454
467
 
455
468
  if (isIphone) {
456
469
  if (orientation === 'PORTRAIT') {
@@ -723,4 +736,4 @@ var _default = commands;
723
736
  exports.default = _default;require('source-map-support').install();
724
737
 
725
738
 
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=
739
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy93ZWIuanMiXSwibmFtZXMiOlsiSVBIT05FX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX1NDUk9MTEVEX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX1hfU0NST0xMRURfT0ZGU0VUIiwiSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPUyIsIklQSE9ORV9YX05PVENIX09GRlNFVF9JT1NfMTMiLCJJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUIiwiSVBIT05FX0JPVFRPTV9CQVJfT0ZGU0VUIiwiVEFCX0JBUl9PRkZTRVQiLCJJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIiwiSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQiLCJOT1RDSEVEX0RFVklDRV9TSVpFUyIsInciLCJoIiwiVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIiLCJ1dGlsIiwiQVRPTV9XQUlUX1RJTUVPVVRfTVMiLCJBVE9NX0lOSVRJQUxfV0FJVF9NUyIsIk9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UIiwiVklTSUJMRSIsIklOVklTSUJMRSIsIkRFVEVDVCIsIlZJU0lCSUxJVElFUyIsIlRBQl9CQVJfUE9TSVRJT05fVE9QIiwiVEFCX0JBUl9QT1NJVElPTl9CT1RUT00iLCJUQUJfQkFSX1BPU1NJVElPTlMiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiaXNWYWxpZEVsZW1lbnRJZGVudGlmaWVyIiwiaWQiLCJfIiwiaXNTdHJpbmciLCJpc051bWJlciIsImlzRW1wdHkiLCJpc05hTiIsInNldEZyYW1lIiwiZnJhbWUiLCJpc1dlYkNvbnRleHQiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiaXNOdWxsIiwiY3VyV2ViRnJhbWVzIiwibG9nIiwiZGVidWciLCJoYXNFbGVtZW50SWQiLCJhdG9tc0VsZW1lbnQiLCJnZXRBdG9tc0VsZW1lbnQiLCJ2YWx1ZSIsImV4ZWN1dGVBdG9tIiwiV0lORE9XIiwidW5zaGlmdCIsImF0b20iLCJpc1VuZGVmaW5lZCIsIk5vU3VjaEZyYW1lRXJyb3IiLCJnZXRDc3NQcm9wZXJ0eSIsInByb3BlcnR5TmFtZSIsImVsIiwic3VibWl0IiwicmVmcmVzaCIsImdldFVybCIsInJlbW90ZSIsImV4ZWN1dGUiLCJ0aXRsZSIsImdldENvb2tpZXMiLCJzY3JpcHQiLCJqc0Nvb2tpZXMiLCJjb29raWVzIiwibmFtZSIsInRvUGFpcnMiLCJjb29raWVVdGlscyIsImNyZWF0ZUpXUENvb2tpZSIsInVuZGVmaW5lZCIsInB1c2giLCJlcnIiLCJlcnJvciIsIlVua25vd25FcnJvciIsInNldENvb2tpZSIsImNvb2tpZSIsImNsb25lIiwicGF0aCIsImpzQ29va2llIiwiY3JlYXRlSlNDb29raWUiLCJleHBpcmVzIiwiZXhwaXJ5IiwiRGF0ZSIsInRvVVRDU3RyaW5nIiwiZG9tYWluIiwiaHR0cE9ubHkiLCJzZWN1cmUiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVsZXRlQ29va2llIiwiY29va2llTmFtZSIsImluZGV4T2YiLCJtYXAiLCJfZGVsZXRlQ29va2llIiwiZGVsZXRlQ29va2llcyIsImxlbmd0aCIsIndlYkNvb2tpZSIsImV4cGlyZUNvb2tpZSIsImNhY2hlV2ViRWxlbWVudCIsImlzUGxhaW5PYmplY3QiLCJlbElkIiwidW53cmFwRWxlbWVudCIsImNhY2hlSWQiLCJpbmNsdWRlcyIsInV1aWRWNCIsIndlYkVsZW1lbnRzQ2FjaGUiLCJzZXQiLCJ3cmFwRWxlbWVudCIsImNhY2hlV2ViRWxlbWVudHMiLCJyZXNwb25zZSIsInRvQ2FjaGVkIiwidiIsImlzQXJyYXkiLCJyZXN1bHQiLCJyZWR1Y2UiLCJhY2MiLCJrZXkiLCJmaW5kV2ViRWxlbWVudE9yRWxlbWVudHMiLCJzdHJhdGVneSIsInNlbGVjdG9yIiwibWFueSIsImN0eCIsImNvbnRleHRFbGVtZW50IiwiaXNOaWwiLCJlbGVtZW50IiwiZG9GaW5kIiwiaW1wbGljaXRXYWl0Rm9yQ29uZGl0aW9uIiwibWVzc2FnZSIsImlzRnVuY3Rpb24iLCJtYXRjaCIsIk5vU3VjaEVsZW1lbnRFcnJvciIsImNsaWNrV2ViQ29vcmRzIiwiY29vcmRzIiwidHJhbnNsYXRlV2ViQ29vcmRzIiwiY3VyV2ViQ29vcmRzIiwiY2xpY2tDb29yZHMiLCJhcmdzIiwiYWx3YXlzRGVmYXVsdEZyYW1lIiwiZnJhbWVzIiwicHJvbWlzZSIsIndhaXRGb3JBdG9tIiwiZXhlY3V0ZUF0b21Bc3luYyIsInJlc3BvbnNlVXJsIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJhc3luY1Byb21pc2UiLCJlbE9ySWQiLCJoYXMiLCJTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvciIsIkVMRU1FTlQiLCJnZXQiLCJjb252ZXJ0RWxlbWVudHNGb3JBdG9tcyIsImFyZyIsImdldEVsZW1lbnRJZCIsImhhc1ZhbHVlIiwiZ2V0U2FmYXJpSXNJcGhvbmUiLCJtZW1vaXplIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJ3YXJuIiwiZ2V0U2FmYXJpRGV2aWNlU2l6ZSIsIndpZHRoIiwiaGVpZ2h0Iiwibm9ybUhlaWdodCIsIm5vcm1XaWR0aCIsImdldFNhZmFyaUlzTm90Y2hlZCIsImRldmljZSIsImdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0Iiwid3ZQb3MiLCJyZWFsRGltcyIsInRvcE9mZnNldCIsImJvdHRvbU9mZnNldCIsImlzSXBob25lIiwibmF0aXZlV2ViVGFwVGFiQmFyVmlzaWJpbGl0eSIsIm5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSIsInNhZmFyaVRhYkJhclBvc2l0aW9uIiwiY29tcGFyZVZlcnNpb25zIiwib3B0cyIsInBsYXRmb3JtVmVyc2lvbiIsInNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJ0YWJCYXJWaXNpYmlsaXR5IiwibG93ZXJDYXNlIiwiYmFubmVyVmlzaWJpbGl0eSIsInRhYkJhclBvc2l0aW9uIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJpc05vdGNoZWQiLCJvcmllbnRhdGlvbiIsIm5vdGNoT2Zmc2V0IiwiaXNTY3JvbGxlZCIsImNvbnRleHRzQW5kVmlld3MiLCJnZXRDb250ZXh0c0FuZFZpZXdzIiwidGFicyIsImZpbHRlciIsInN0YXJ0c1dpdGgiLCJnZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldCIsInkiLCJvZmZzZXQiLCJiYW5uZXJzIiwiZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzIiwidGFwV2ViRWxlbWVudE5hdGl2ZWx5IiwiZHJpdmVyIiwidGV4dCIsImVscyIsInJlY3QiLCJwcm94eUNvbW1hbmQiLCJlbDIiLCJyZWN0MiIsIngiLCJNYXRoIiwicm91bmQiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJQcm9taXNlIiwiYWxsIiwic2l6ZSIsImNvb3JkaW5hdGVzIiwicGVyZm9ybVRvdWNoIiwiYWN0aW9uIiwib3B0aW9ucyIsIndlYnZpZXciLCJpZ24iLCJFcnJvciIsImNtZCIsInd2RGltcyIsImltcGxpY2l0V2FpdE1zIiwic2V0SW1wbGljaXRXYWl0IiwieFJhdGlvIiwieVJhdGlvIiwibmV3Q29vcmRzIiwiY2hlY2tGb3JBbGVydCIsImdldEFsZXJ0VGV4dCIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInRpbWVkQXRvbVByb21pc2UiLCJ0aW1lb3V0IiwiaGFuZGxlUHJvbWlzZUVycm9yIiwicCIsIm9yaWdpbmFsRXJyb3IiLCJBZ2dyZWdhdGVFcnJvciIsIlRpbWVvdXRFcnJvciIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiYW55IiwiZGVsYXkiLCJpc0Z1bGZpbGxlZCIsIl93YWl0aW5nQXRvbXMiLCJjb3VudCIsImFsZXJ0Tm90aWZpZXIiLCJFdmVudEVtaXR0ZXIiLCJhbGVydE1vbml0b3IiLCJvbkFsZXJ0Q2FsbGJhY2siLCJpc1Jlc29sdmVkIiwiZW1pdCIsIlVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvciIsIm9uY2UiLCJ0aGVuIiwiY2F0Y2giLCJyZW1vdmVMaXN0ZW5lciIsIm1vYmlsZVdlYk5hdiIsIm5hdlR5cGUiLCJhbGxvd05hdmlnYXRpb25XaXRob3V0UmVsb2FkIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLHFCQUFxQixHQUFHLEVBQTlCO0FBQ0EsTUFBTUMsOEJBQThCLEdBQUcsRUFBdkM7QUFDQSxNQUFNQyx3QkFBd0IsR0FBRyxFQUFqQztBQUNBLE1BQU1DLHlCQUF5QixHQUFHLEVBQWxDO0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsRUFBckM7QUFFQSxNQUFNQywrQkFBK0IsR0FBRyxFQUF4QztBQUNBLE1BQU1DLHdCQUF3QixHQUFHLEVBQWpDO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLEVBQXZCO0FBQ0EsTUFBTUMsd0NBQXdDLEdBQUcsRUFBakQ7QUFDQSxNQUFNQyxzQ0FBc0MsR0FBRyxFQUEvQztBQUVBLE1BQU1DLG9CQUFvQixHQUFHLENBQzNCO0FBQUNDLEVBQUFBLENBQUMsRUFBRSxJQUFKO0FBQVVDLEVBQUFBLENBQUMsRUFBRTtBQUFiLENBRDJCLEVBRTNCO0FBQUNELEVBQUFBLENBQUMsRUFBRSxHQUFKO0FBQVNDLEVBQUFBLENBQUMsRUFBRTtBQUFaLENBRjJCLEVBRzNCO0FBQUNELEVBQUFBLENBQUMsRUFBRSxJQUFKO0FBQVVDLEVBQUFBLENBQUMsRUFBRTtBQUFiLENBSDJCLENBQTdCO0FBTUEsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWlDQyxtQkFBdkM7QUFFQSxNQUFNQyxvQkFBb0IsR0FBRyxJQUFJLEtBQWpDO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsSUFBN0I7QUFFQSxNQUFNQywwQkFBMEIsR0FBRyxPQUFuQztBQUVBLE1BQU1DLE9BQU8sR0FBRyxTQUFoQjtBQUNBLE1BQU1DLFNBQVMsR0FBRyxXQUFsQjtBQUNBLE1BQU1DLE1BQU0sR0FBRyxRQUFmO0FBQ0EsTUFBTUMsWUFBWSxHQUFH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QVUwTixPQUFRLEtBQXBCLEVBQTBCLElBQTFCLENBQW5DLENBQU47QUFDRCxHQUZELFNBRVU7QUFDUixTQUFLOU0sTUFBTCxDQUFZK00sNEJBQVosR0FBMkMsS0FBM0M7QUFDRDtBQUNGLENBUEQ7O0FBU0FDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjcFAsUUFBZCxFQUF3QkUsVUFBeEIsRUFBb0NELE9BQXBDO2VBRWVELFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdXRpbCwgdGltaW5nIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGVycm9ycywgaXNFcnJvclR5cGUgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IGNvb2tpZVV0aWxzIGZyb20gJy4uL2Nvb2tpZXMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuY29uc3QgSVBIT05FX1RPUF9CQVJfSEVJR0hUID0gNzE7XG5jb25zdCBJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQgPSA0MTtcbmNvbnN0IElQSE9ORV9YX1NDUk9MTEVEX09GRlNFVCA9IDU1O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPUyA9IDI0O1xuY29uc3QgSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyA9IDIwO1xuXG5jb25zdCBJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUID0gNTE7XG5jb25zdCBJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQgPSA0OTtcbmNvbnN0IFRBQl9CQVJfT0ZGU0VUID0gMzM7XG5jb25zdCBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUID0gODQ7XG5jb25zdCBJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCA9IDk1O1xuXG5jb25zdCBOT1RDSEVEX0RFVklDRV9TSVpFUyA9IFtcbiAge3c6IDExMjUsIGg6IDI0MzZ9LCAvLyAxMSBQcm8sIFgsIFhzXG4gIHt3OiA4MjgsIGg6IDE3OTJ9LCAvLyAxMSwgWHJcbiAge3c6IDEyNDIsIGg6IDI2ODh9LCAvLyAxMSBQcm8gTWF4LCBYcyBNYXhcbl07XG5cbmNvbnN0IHsgVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIgfSA9IHV0aWw7XG5cbmNvbnN0IEFUT01fV0FJVF9USU1FT1VUX01TID0gMiAqIDYwMDAwO1xuY29uc3QgQVRPTV9JTklUSUFMX1dBSVRfTVMgPSAxMDAwO1xuXG5jb25zdCBPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCA9ICdhbGVydCc7XG5cbmNvbnN0IFZJU0lCTEUgPSAndmlzaWJsZSc7XG5jb25zdCBJTlZJU0lCTEUgPSAnaW52aXNpYmxlJztcbmNvbnN0IERFVEVDVCA9ICdkZXRlY3QnO1xuY29uc3QgVklTSUJJTElUSUVTID0gW1ZJU0lCTEUsIElOVklTSUJMRSwgREVURUNUXTtcblxuLy8gVGhlIHBvc2l0aW9uIG9mIFNhZmFyaSdzIHRhYiAoc2VhcmNoIGJhcikuXG4vLyBTaW5jZSBpT1MgMTUsIHRoZSBiYXIgaXMgdGhlIGJvdHRvbSBieSBkZWZhdWx0LlxuY29uc3QgVEFCX0JBUl9QT1NJVElPTl9UT1AgPSAndG9wJztcbmNvbnN0IFRBQl9CQVJfUE9TSVRJT05fQk9UVE9NID0gJ2JvdHRvbSc7XG5jb25zdCBUQUJfQkFSX1BPU1NJVElPTlMgPSBbVEFCX0JBUl9QT1NJVElPTl9UT1AsIFRBQl9CQVJfUE9TSVRJT05fQk9UVE9NXTtcblxuY29uc3QgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50SWRlbnRpZmllciAoaWQpIHtcbiAgaWYgKCFfLmlzU3RyaW5nKGlkKSAmJiAhXy5pc051bWJlcihpZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKF8uaXNTdHJpbmcoaWQpICYmIF8uaXNFbXB0eShpZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKF8uaXNOdW1iZXIoaWQpICYmIGlzTmFOKGlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuY29tbWFuZHMuc2V0RnJhbWUgPSBhc3luYyBmdW5jdGlvbiBzZXRGcmFtZSAoZnJhbWUpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBpZiAoXy5pc051bGwoZnJhbWUpKSB7XG4gICAgdGhpcy5jdXJXZWJGcmFtZXMgPSBbXTtcbiAgICBsb2cuZGVidWcoJ0xlYXZpbmcgd2ViIGZyYW1lIGFuZCBnb2luZyBiYWNrIHRvIGRlZmF1bHQgY29udGVudCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChoZWxwZXJzLmhhc0VsZW1lbnRJZChmcmFtZSkpIHtcbiAgICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChmcmFtZSk7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfZnJhbWVfd2luZG93JywgW2F0b21zRWxlbWVudF0pO1xuICAgIGxvZy5kZWJ1ZyhgRW50ZXJpbmcgbmV3IHdlYiBmcmFtZTogJyR7dmFsdWUuV0lORE9XfSdgKTtcbiAgICB0aGlzLmN1cldlYkZyYW1lcy51bnNoaWZ0KHZhbHVlLldJTkRPVyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXRvbSA9IF8uaXNOdW1iZXIoZnJhbWUpID8gJ2ZyYW1lX2J5X2luZGV4JyA6ICdmcmFtZV9ieV9pZF9vcl9uYW1lJztcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oYXRvbSwgW2ZyYW1lXSk7XG4gICAgaWYgKF8uaXNOdWxsKHZhbHVlKSB8fCBfLmlzVW5kZWZpbmVkKHZhbHVlLldJTkRPVykpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRnJhbWVFcnJvcigpO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYEVudGVyaW5nIG5ldyB3ZWIgZnJhbWU6ICcke3ZhbHVlLldJTkRPV30nYCk7XG4gICAgdGhpcy5jdXJXZWJGcmFtZXMudW5zaGlmdCh2YWx1ZS5XSU5ET1cpO1xuICB9XG59O1xuXG5jb21tYW5kcy5nZXRDc3NQcm9wZXJ0eSA9IGFzeW5jIGZ1bmN0aW9uIGdldENzc1Byb3BlcnR5IChwcm9wZXJ0eU5hbWUsIGVsKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3ZhbHVlX29mX2Nzc19wcm9wZXJ0eScsIFthdG9tc0VsZW1lbnQsIHByb3BlcnR5TmFtZV0pO1xufTtcblxuY29tbWFuZHMuc3VibWl0ID0gYXN5bmMgZnVuY3Rpb24gc3VibWl0IChlbCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGNvbnN0IGF0b21zRWxlbWVudCA9IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGVsKTtcbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnc3VibWl0JywgW2F0b21zRWxlbWVudF0pO1xufTtcblxuY29tbWFuZHMucmVmcmVzaCA9IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2ggKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ3JlZnJlc2gnLCBbXSk7XG59O1xuXG5jb21tYW5kcy5nZXRVcmwgPSBhc3luYyBmdW5jdGlvbiBnZXRVcmwgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlKCd3aW5kb3cubG9jYXRpb24uaHJlZicpO1xufTtcblxuY29tbWFuZHMudGl0bGUgPSBhc3luYyBmdW5jdGlvbiB0aXRsZSAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ3RpdGxlJywgW10sIHRydWUpO1xufTtcblxuY29tbWFuZHMuZ2V0Q29va2llcyA9IGFzeW5jIGZ1bmN0aW9uIGdldENvb2tpZXMgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGxvZy5kZWJ1ZygnUmV0cmlldmluZyBhbGwgY29va2llcycpO1xuXG4gIGxldCBzY3JpcHQgPSAncmV0dXJuIGRvY3VtZW50LmNvb2tpZSc7XG4gIGxldCBqc0Nvb2tpZXMgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIFtdXSk7XG5cbiAgbGV0IGNvb2tpZXMgPSBbXTtcbiAgdHJ5IHtcbiAgICBmb3IgKGxldCBbbmFtZSwgdmFsdWVdIG9mIF8udG9QYWlycyhjb29raWVVdGlscy5jcmVhdGVKV1BDb29raWUodW5kZWZpbmVkLCBqc0Nvb2tpZXMpKSkge1xuICAgICAgY29va2llcy5wdXNoKHtuYW1lLCB2YWx1ZX0pO1xuICAgIH1cbiAgICByZXR1cm4gY29va2llcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKGVycik7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoYEVycm9yIHBhcnNpbmcgY29va2llcyBmcm9tIHJlc3VsdDogJyR7anNDb29raWVzfSdgKTtcbiAgfVxufTtcblxuY29tbWFuZHMuc2V0Q29va2llID0gYXN5bmMgZnVuY3Rpb24gc2V0Q29va2llIChjb29raWUpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBjb29raWUgPSBfLmNsb25lKGNvb2tpZSk7XG5cbiAgLy8gaWYgYHBhdGhgIGZpZWxkIGlzIG5vdCBzcGVjaWZpZWQsIFNhZmFyaSB3aWxsIG5vdCB1cGRhdGUgY29va2llcyBhcyBleHBlY3RlZDsgZWcgaXNzdWUgIzE3MDhcbiAgaWYgKCFjb29raWUucGF0aCkge1xuICAgIGNvb2tpZS5wYXRoID0gJy8nO1xuICB9XG5cbiAgY29uc3QganNDb29raWUgPSBjb29raWVVdGlscy5jcmVhdGVKU0Nvb2tpZShjb29raWUubmFtZSwgY29va2llLnZhbHVlLCB7XG4gICAgZXhwaXJlczogXy5pc051bWJlcihjb29raWUuZXhwaXJ5KSA/IChuZXcgRGF0ZShjb29raWUuZXhwaXJ5ICogMTAwMCkpLnRvVVRDU3RyaW5nKCkgOlxuICAgICAgY29va2llLmV4cGlyeSxcbiAgICBwYXRoOiBjb29raWUucGF0aCxcbiAgICBkb21haW46IGNvb2tpZS5kb21haW4sXG4gICAgaHR0cE9ubHk6IGNvb2tpZS5odHRwT25seSxcbiAgICBzZWN1cmU6IGNvb2tpZS5zZWN1cmVcbiAgfSk7XG4gIGxldCBzY3JpcHQgPSBgZG9jdW1lbnQuY29va2llID0gJHtKU09OLnN0cmluZ2lmeShqc0Nvb2tpZSl9YDtcbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xufTtcblxuY29tbWFuZHMuZGVsZXRlQ29va2llID0gYXN5bmMgZnVuY3Rpb24gZGVsZXRlQ29va2llIChjb29raWVOYW1lKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgLy8gY2hlY2sgY29va2llIGV4aXN0ZW5jZVxuICBsZXQgY29va2llcyA9IGF3YWl0IHRoaXMuZ2V0Q29va2llcygpO1xuICBpZiAoXy5pbmRleE9mKF8ubWFwKGNvb2tpZXMsICduYW1lJyksIGNvb2tpZU5hbWUpID09PSAtMSkge1xuICAgIGxvZy5kZWJ1ZyhgQ29va2llICcke2Nvb2tpZU5hbWV9JyBub3QgZm91bmQuIElnbm9yaW5nLmApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuX2RlbGV0ZUNvb2tpZShjb29raWVOYW1lKTtcbn07XG5cbmNvbW1hbmRzLmRlbGV0ZUNvb2tpZXMgPSBhc3luYyBmdW5jdGlvbiBkZWxldGVDb29raWVzICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBsZXQgY29va2llcyA9IGF3YWl0IHRoaXMuZ2V0Q29va2llcygpO1xuICBpZiAoY29va2llcy5sZW5ndGgpIHtcbiAgICBmb3IgKGxldCBjb29raWUgb2YgY29va2llcykge1xuICAgICAgYXdhaXQgdGhpcy5fZGVsZXRlQ29va2llKGNvb2tpZS5uYW1lKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5oZWxwZXJzLl9kZWxldGVDb29raWUgPSBhc3luYyBmdW5jdGlvbiBfZGVsZXRlQ29va2llIChjb29raWVOYW1lKSB7XG4gIGxvZy5kZWJ1ZyhgRGVsZXRpbmcgY29va2llICcke2Nvb2tpZU5hbWV9J2ApO1xuICBsZXQgd2ViQ29va2llID0gY29va2llVXRpbHMuZXhwaXJlQ29va2llKGNvb2tpZU5hbWUsIHtwYXRoOiAnLyd9KTtcbiAgbGV0IHNjcmlwdCA9IGBkb2N1bWVudC5jb29raWUgPSAke0pTT04uc3RyaW5naWZ5KHdlYkNvb2tpZSl9YDtcbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xufTtcblxuaGVscGVycy5jYWNoZVdlYkVsZW1lbnQgPSBmdW5jdGlvbiBjYWNoZVdlYkVsZW1lbnQgKGVsKSB7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KGVsKSkge1xuICAgIHJldHVybiBlbDtcbiAgfVxuICBjb25zdCBlbElkID0gdXRpbC51bndyYXBFbGVtZW50KGVsKTtcbiAgaWYgKCFpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIoZWxJZCkpIHtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgLy8gSW4gbmV3ZXIgZGVidWdnZXIgcmVsZWFzZXMgZWxlbWVudCBpZGVudGlmaWVycyBsb29rIGxpa2UgYDp3ZGM6MTYyODE1MTY0OTMyNWBcbiAgLy8gV2UgYXNzdW1lIGl0IGlzIHNhZmUgdG8gdXNlIHRoZXNlIHRvIGlkZW50aWZ5IGNhY2hlZCBlbGVtZW50c1xuICBjb25zdCBjYWNoZUlkID0gXy5pbmNsdWRlcyhlbElkLCAnOicpID8gZWxJZCA6IHV0aWwudXVpZFY0KCk7XG4gIHRoaXMud2ViRWxlbWVudHNDYWNoZS5zZXQoY2FjaGVJZCwgZWxJZCk7XG4gIHJldHVybiB1dGlsLndyYXBFbGVtZW50KGNhY2hlSWQpO1xufTtcblxuaGVscGVycy5jYWNoZVdlYkVsZW1lbnRzID0gZnVuY3Rpb24gY2FjaGVXZWJFbGVtZW50cyAocmVzcG9uc2UpIHtcbiAgY29uc3QgdG9DYWNoZWQgPSAodikgPT4gXy5pc0FycmF5KHYpIHx8IF8uaXNQbGFpbk9iamVjdCh2KVxuICAgID8gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKHYpXG4gICAgOiB2O1xuXG4gIGlmIChfLmlzQXJyYXkocmVzcG9uc2UpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLm1hcCh0b0NhY2hlZCk7XG4gIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlKSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHsuLi5yZXNwb25zZSwgLi4uKHRoaXMuY2FjaGVXZWJFbGVtZW50KHJlc3BvbnNlKSl9O1xuICAgIHJldHVybiBfLnRvUGFpcnMocmVzdWx0KS5yZWR1Y2UoXG4gICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgYWNjW2tleV0gPSB0b0NhY2hlZCh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcblxuZXh0ZW5zaW9ucy5maW5kV2ViRWxlbWVudE9yRWxlbWVudHMgPSBhc3luYyBmdW5jdGlvbiBmaW5kV2ViRWxlbWVudE9yRWxlbWVudHMgKHN0cmF0ZWd5LCBzZWxlY3RvciwgbWFueSwgY3R4KSB7XG4gIGNvbnN0IGNvbnRleHRFbGVtZW50ID0gXy5pc05pbChjdHgpID8gbnVsbCA6IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGN0eCk7XG4gIGxldCBlbGVtZW50O1xuICBsZXQgZG9GaW5kID0gYXN5bmMgKCkgPT4ge1xuICAgIGVsZW1lbnQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKGBmaW5kX2VsZW1lbnQke21hbnkgPyAncycgOiAnJ31gLCBbc3RyYXRlZ3ksIHNlbGVjdG9yLCBjb250ZXh0RWxlbWVudF0pO1xuICAgIHJldHVybiAhXy5pc051bGwoZWxlbWVudCk7XG4gIH07XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5pbXBsaWNpdFdhaXRGb3JDb25kaXRpb24oZG9GaW5kKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5tZXNzYWdlICYmIF8uaXNGdW5jdGlvbihlcnIubWVzc2FnZS5tYXRjaCkgJiYgZXJyLm1lc3NhZ2UubWF0Y2goL0NvbmRpdGlvbiB1bm1ldC8pKSB7XG4gICAgICAvLyBjb25kaXRpb24gd2FzIG5vdCBtZXQgc2V0dGluZyByZXMgdG8gZW1wdHkgYXJyYXlcbiAgICAgIGVsZW1lbnQgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVXZWJFbGVtZW50cyhlbGVtZW50KTtcbiAgfVxuICBpZiAoXy5pc0VtcHR5KGVsZW1lbnQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hFbGVtZW50RXJyb3IoKTtcbiAgfVxuICByZXR1cm4gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKGVsZW1lbnQpO1xufTtcblxuZXh0ZW5zaW9ucy5jbGlja1dlYkNvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIGNsaWNrV2ViQ29vcmRzICgpIHtcbiAgbGV0IGNvb3JkcyA9IGF3YWl0IHRoaXMudHJhbnNsYXRlV2ViQ29vcmRzKHRoaXMuY3VyV2ViQ29vcmRzKTtcbiAgYXdhaXQgdGhpcy5jbGlja0Nvb3Jkcyhjb29yZHMpO1xufTtcblxuaGVscGVycy5leGVjdXRlQXRvbSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBdG9tIChhdG9tLCBhcmdzLCBhbHdheXNEZWZhdWx0RnJhbWUgPSBmYWxzZSkge1xuICBsZXQgZnJhbWVzID0gYWx3YXlzRGVmYXVsdEZyYW1lID09PSB0cnVlID8gW10gOiB0aGlzLmN1cldlYkZyYW1lcztcbiAgbGV0IHByb21pc2UgPSB0aGlzLnJlbW90ZS5leGVjdXRlQXRvbShhdG9tLCBhcmdzLCBmcmFtZXMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy53YWl0Rm9yQXRvbShwcm9taXNlKTtcbn07XG5cbmhlbHBlcnMuZXhlY3V0ZUF0b21Bc3luYyA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBdG9tQXN5bmMgKGF0b20sIGFyZ3MsIHJlc3BvbnNlVXJsKSB7XG4gIC8vIHNhdmUgdGhlIHJlc29sdmUgYW5kIHJlamVjdCBtZXRob2RzIG9mIHRoZSBwcm9taXNlIHRvIGJlIHdhaXRlZCBmb3JcbiAgbGV0IHByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5hc3luY1Byb21pc2UgPSB7cmVzb2x2ZSwgcmVqZWN0fTtcbiAgfSk7XG4gIGF3YWl0IHRoaXMucmVtb3RlLmV4ZWN1dGVBdG9tQXN5bmMoYXRvbSwgYXJncywgdGhpcy5jdXJXZWJGcmFtZXMsIHJlc3BvbnNlVXJsKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2FpdEZvckF0b20ocHJvbWlzZSk7XG59O1xuXG5oZWxwZXJzLmdldEF0b21zRWxlbWVudCA9IGZ1bmN0aW9uIGdldEF0b21zRWxlbWVudCAoZWxPcklkKSB7XG4gIGNvbnN0IGVsSWQgPSB1dGlsLnVud3JhcEVsZW1lbnQoZWxPcklkKTtcbiAgaWYgKCF0aGlzLndlYkVsZW1lbnRzQ2FjaGUuaGFzKGVsSWQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5TdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcigpO1xuICB9XG4gIHJldHVybiB7RUxFTUVOVDogdGhpcy53ZWJFbGVtZW50c0NhY2hlLmdldChlbElkKX07XG59O1xuXG5oZWxwZXJzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zID0gZnVuY3Rpb24gY29udmVydEVsZW1lbnRzRm9yQXRvbXMgKGFyZ3MgPSBbXSkge1xuICByZXR1cm4gYXJncy5tYXAoKGFyZykgPT4ge1xuICAgIGlmIChoZWxwZXJzLmhhc0VsZW1lbnRJZChhcmcpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBdG9tc0VsZW1lbnQoYXJnKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIWlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yKSkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFyZztcbiAgICB9XG4gICAgcmV0dXJuIF8uaXNBcnJheShhcmcpID8gdGhpcy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyhhcmcpIDogYXJnO1xuICB9KTtcbn07XG5cbmhlbHBlcnMuZ2V0RWxlbWVudElkID0gZnVuY3Rpb24gZ2V0RWxlbWVudElkIChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LkVMRU1FTlQgfHwgZWxlbWVudFtXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUl07XG59O1xuXG5oZWxwZXJzLmhhc0VsZW1lbnRJZCA9IGZ1bmN0aW9uIGhhc0VsZW1lbnRJZCAoZWxlbWVudCkge1xuICByZXR1cm4gdXRpbC5oYXNWYWx1ZShlbGVtZW50KSAmJiAodXRpbC5oYXNWYWx1ZShlbGVtZW50LkVMRU1FTlQpIHx8IHV0aWwuaGFzVmFsdWUoZWxlbWVudFtXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUl0pKTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0U2FmYXJpSXNJcGhvbmUgPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpSXNJcGhvbmUgKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHVzZXJBZ2VudCA9IGF3YWl0IHRoaXMuZXhlY3V0ZSgncmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQnKTtcbiAgICByZXR1cm4gdXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2lwaG9uZScpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvIGZpbmQgZGV2aWNlIHR5cGUgZnJvbSB1c2VyYWdlbnQuIEFzc3VtaW5nIGlQaG9uZWApO1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59KTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlEZXZpY2VTaXplID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldFNhZmFyaURldmljZVNpemUgKCkge1xuICBjb25zdCBzY3JpcHQgPSAncmV0dXJuIHtoZWlnaHQ6IHdpbmRvdy5zY3JlZW4uYXZhaWxIZWlnaHQgKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbywgd2lkdGg6IHdpbmRvdy5zY3JlZW4uYXZhaWxXaWR0aCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfTsnO1xuICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmV4ZWN1dGUoc2NyaXB0KTtcbiAgY29uc3QgW25vcm1IZWlnaHQsIG5vcm1XaWR0aF0gPSBoZWlnaHQgPiB3aWR0aCA/IFtoZWlnaHQsIHdpZHRoXSA6IFt3aWR0aCwgaGVpZ2h0XTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogbm9ybVdpZHRoLFxuICAgIGhlaWdodDogbm9ybUhlaWdodCxcbiAgfTtcbn0pO1xuXG5leHRlbnNpb25zLmdldFNhZmFyaUlzTm90Y2hlZCA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRTYWZhcmlJc05vdGNoZWQgKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0U2FmYXJpRGV2aWNlU2l6ZSgpO1xuICAgIGZvciAoY29uc3QgZGV2aWNlIG9mIE5PVENIRURfREVWSUNFX1NJWkVTKSB7XG4gICAgICBpZiAoZGV2aWNlLncgPT09IHdpZHRoICYmIGRldmljZS5oID09PSBoZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvIGZpbmQgZGV2aWNlIHR5cGUgZnJvbSBkaW1lbnNpb25zLiBBc3N1bWluZyB0aGUgZGV2aWNlIGlzIG5vdCBub3RjaGVkYCk7XG4gICAgbG9nLmRlYnVnKGBFcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KTtcblxuZXh0ZW5zaW9ucy5nZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCA9IGFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0ICh3dlBvcywgcmVhbERpbXMpIHtcbiAgbGV0IHRvcE9mZnNldCA9IDA7XG4gIGxldCBib3R0b21PZmZzZXQgPSAwO1xuXG4gIGNvbnN0IGlzSXBob25lID0gYXdhaXQgdGhpcy5nZXRTYWZhcmlJc0lwaG9uZSgpO1xuXG4gIC8vIE5vIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgU21hcnQgQXBwIEJhbm5lciBvciBUYWIgQmFyIGlzIHZpc2libGUgb3Igbm90XG4gIC8vIGlmIGFscmVhZHkgZGVmaW5lZCBieSBuYXRpdmVXZWJUYXBUYWJCYXJWaXNpYmlsaXR5IG9yIG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSBpbiBzZXR0aW5ncy5cbiAgY29uc3Qge1xuICAgIG5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHksXG4gICAgbmF0aXZlV2ViVGFwU21hcnRBcHBCYW5uZXJWaXNpYmlsaXR5LFxuICAgIHNhZmFyaVRhYkJhclBvc2l0aW9uID0gdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzE1LjAnKSAmJiBpc0lwaG9uZVxuICAgICAgPyBUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSA6IFRBQl9CQVJfUE9TSVRJT05fVE9QLFxuICB9ID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpO1xuICBsZXQgdGFiQmFyVmlzaWJpbGl0eSA9IF8ubG93ZXJDYXNlKG5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkpO1xuICBsZXQgYmFubmVyVmlzaWJpbGl0eSA9IF8ubG93ZXJDYXNlKG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSk7XG4gIGNvbnN0IHRhYkJhclBvc2l0aW9uID0gXy5sb3dlckNhc2Uoc2FmYXJpVGFiQmFyUG9zaXRpb24pO1xuXG4gIGlmICghVklTSUJJTElUSUVTLmluY2x1ZGVzKHRhYkJhclZpc2liaWxpdHkpKSB7XG4gICAgdGFiQmFyVmlzaWJpbGl0eSA9IERFVEVDVDtcbiAgfVxuICBpZiAoIVZJU0lCSUxJVElFUy5pbmNsdWRlcyhiYW5uZXJWaXNpYmlsaXR5KSkge1xuICAgIGJhbm5lclZpc2liaWxpdHkgPSBERVRFQ1Q7XG4gIH1cblxuICBpZiAoIVRBQl9CQVJfUE9TU0lUSU9OUy5pbmNsdWRlcyh0YWJCYXJQb3NpdGlvbikpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgYCR7c2FmYXJpVGFiQmFyUG9zaXRpb259IGlzIGludmFsaWQgYXMgU2FmYXJpIHRhYiBiYXIgcG9zaXRpb24uIEF2YWlsYWJsZSBwb3NpdGlvbnMgYXJlICR7VEFCX0JBUl9QT1NTSVRJT05TfS5gKTtcbiAgfVxuXG4gIGNvbnN0IGlzTm90Y2hlZCA9IGlzSXBob25lICYmIGF3YWl0IHRoaXMuZ2V0U2FmYXJpSXNOb3RjaGVkKCk7XG5cbiAgY29uc3Qgb3JpZW50YXRpb24gPSByZWFsRGltcy5oID4gcmVhbERpbXMudyA/ICdQT1JUUkFJVCcgOiAnTEFORFNDQVBFJztcblxuICBjb25zdCBub3RjaE9mZnNldCA9IGlzTm90Y2hlZFxuICAgID8gdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz0nLCAnMTMuMCcpXG4gICAgICA/IElQSE9ORV9YX05PVENIX09GRlNFVF9JT1NfMTNcbiAgICAgIDogSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU1xuICAgIDogMDtcblxuICBjb25zdCBpc1Njcm9sbGVkID0gYXdhaXQgdGhpcy5leGVjdXRlKCdyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA+IDAnKTtcbiAgaWYgKGlzU2Nyb2xsZWQpIHtcbiAgICB0b3BPZmZzZXQgPSBJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQgKyBub3RjaE9mZnNldDtcblxuICAgIGlmIChpc05vdGNoZWQpIHtcbiAgICAgIHRvcE9mZnNldCAtPSBJUEhPTkVfWF9TQ1JPTExFRF9PRkZTRVQ7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGlQaG9uZSBpcyBsYW5kc2NhcGUgdGhlbiB0aGVyZSBpcyBubyB0b3AgYmFyXG4gICAgaWYgKG9yaWVudGF0aW9uID09PSAnTEFORFNDQVBFJyAmJiBpc0lwaG9uZSkge1xuICAgICAgdG9wT2Zmc2V0ID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdG9wT2Zmc2V0ID0gdGFiQmFyUG9zaXRpb24gPT09IFRBQl9CQVJfUE9TSVRJT05fQk9UVE9NID8gMCA6IElQSE9ORV9UT1BfQkFSX0hFSUdIVDtcbiAgICB0b3BPZmZzZXQgKz0gbm90Y2hPZmZzZXQ7XG4gICAgbG9nLmRlYnVnKGB0YWJCYXJQb3NpdGlvbiBhbmQgdG9wT2Zmc2V0OiAke3RhYkJhclBvc2l0aW9ufSwgJHt0b3BPZmZzZXR9YCk7XG5cbiAgICBpZiAoaXNJcGhvbmUpIHtcbiAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ1BPUlRSQUlUJykge1xuICAgICAgICAvLyBUaGUgYm90dG9tIGJhciBpcyBvbmx5IHZpc2libGUgd2hlbiBwb3J0cmFpdFxuICAgICAgICBib3R0b21PZmZzZXQgPSBJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3BPZmZzZXQgPSBJUEhPTkVfTEFORFNDQVBFX1RPUF9CQVJfSEVJR0hUO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ0xBTkRTQ0FQRScgfHwgIWlzSXBob25lKSB7XG4gICAgICBpZiAodGFiQmFyVmlzaWJpbGl0eSA9PT0gVklTSUJMRSkge1xuICAgICAgICB0b3BPZmZzZXQgKz0gVEFCX0JBUl9PRkZTRVQ7XG4gICAgICB9IGVsc2UgaWYgKHRhYkJhclZpc2liaWxpdHkgPT09IERFVEVDVCkge1xuICAgICAgICAvLyBUYWJzIG9ubHkgYXBwZWFyIGlmIHRoZSBkZXZpY2UgaXMgbGFuZHNjYXBlIG9yIGlmIGl0J3MgYW4gaVBhZCBzbyB3ZSBvbmx5IGNoZWNrIHZpc2liaWxpdHkgaW4gdGhpcyBjYXNlXG4gICAgICAgIC8vIEFzc3VtZSB0aGF0IGVhY2ggdGFiIGJhciBpcyBhIFdlYlZpZXdcbiAgICAgICAgY29uc3QgY29udGV4dHNBbmRWaWV3cyA9IGF3YWl0IHRoaXMuZ2V0Q29udGV4dHNBbmRWaWV3cygpO1xuICAgICAgICBjb25zdCB0YWJzID0gY29udGV4dHNBbmRWaWV3cy5maWx0ZXIoKGN0eCkgPT4gY3R4LmlkLnN0YXJ0c1dpdGgoJ1dFQlZJRVdfJykpO1xuXG4gICAgICAgIGlmICh0YWJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYEZvdW5kICR7dGFicy5sZW5ndGh9IHRhYnMuIEFzc3VtaW5nIHRoZSB0YWIgYmFyIGlzIHZpc2libGVgKTtcbiAgICAgICAgICB0b3BPZmZzZXQgKz0gVEFCX0JBUl9PRkZTRVQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0b3BPZmZzZXQgKz0gYXdhaXQgdGhpcy5nZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldChpc0lwaG9uZSwgYmFubmVyVmlzaWJpbGl0eSk7XG5cbiAgd3ZQb3MueSArPSB0b3BPZmZzZXQ7XG4gIHJlYWxEaW1zLmggLT0gKHRvcE9mZnNldCArIGJvdHRvbU9mZnNldCk7XG59O1xuXG5leHRlbnNpb25zLmdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQgKGlzSXBob25lLCBiYW5uZXJWaXNpYmlsaXR5KSB7XG4gIGxldCBvZmZzZXQgPSAwO1xuXG4gIGlmIChiYW5uZXJWaXNpYmlsaXR5ID09PSBWSVNJQkxFKSB7XG4gICAgb2Zmc2V0ICs9IGlzSXBob25lID9cbiAgICAgIElQSE9ORV9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQgOlxuICAgICAgSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQ7XG4gIH0gZWxzZSBpZiAoYmFubmVyVmlzaWJpbGl0eSA9PT0gREVURUNUKSB7XG4gICAgLy8gdHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBTbWFydCBBcHAgQmFubmVyXG4gICAgY29uc3QgYmFubmVycyA9IGF3YWl0IHRoaXMuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdhY2Nlc3NpYmlsaXR5IGlkJywgJ0Nsb3NlIGFwcCBkb3dubG9hZCBvZmZlcicsIHRydWUpO1xuICAgIGlmIChiYW5uZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIG9mZnNldCArPSBpc0lwaG9uZSA/XG4gICAgICAgIElQSE9ORV9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQgOlxuICAgICAgICBJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVDtcbiAgICB9XG4gIH1cblxuICBsb2cuZGVidWcoYEFkZGl0aW9uYWwgbmF0aXZlIHdlYiB0YXAgb2Zmc2V0IGNvbXB1dGVkOiAke29mZnNldH1gKTtcbiAgcmV0dXJuIG9mZnNldDtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIHRhcFdlYkVsZW1lbnROYXRpdmVseSAoZHJpdmVyLCBhdG9tc0VsZW1lbnQpIHtcbiAgLy8gdHJ5IHRvIGdldCB0aGUgdGV4dCBvZiB0aGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBhY2Nlc3NpYmxlIGluIHRoZVxuICAvLyBuYXRpdmUgY29udGV4dFxuICB0cnkge1xuICAgIGxldCB0ZXh0ID0gYXdhaXQgZHJpdmVyLmV4ZWN1dGVBdG9tKCdnZXRfdGV4dCcsIFthdG9tc0VsZW1lbnRdKTtcbiAgICBpZiAoIXRleHQpIHtcbiAgICAgIHRleHQgPSBhd2FpdCBkcml2ZXIuZXhlY3V0ZUF0b20oJ2dldF9hdHRyaWJ1dGVfdmFsdWUnLCBbYXRvbXNFbGVtZW50LCAndmFsdWUnXSk7XG4gICAgfVxuXG4gICAgaWYgKHRleHQpIHtcbiAgICAgIGNvbnN0IGVscyA9IGF3YWl0IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2FjY2Vzc2liaWxpdHkgaWQnLCB0ZXh0LCB0cnVlKTtcbiAgICAgIGlmIChlbHMubGVuZ3RoID09PSAxIHx8IGVscy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgY29uc3QgZWwgPSBlbHNbMF07XG4gICAgICAgIC8vIHVzZSB0YXAgYmVjYXVzZSBvbiBpT1MgMTEuMiBhbmQgYmVsb3cgYG5hdGl2ZUNsaWNrYCBjcmFzaGVzIFdEQVxuICAgICAgICBjb25zdCByZWN0ID0gYXdhaXQgZHJpdmVyLnByb3h5Q29tbWFuZChgL2VsZW1lbnQvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWwpfS9yZWN0YCwgJ0dFVCcpO1xuICAgICAgICBpZiAoZWxzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGNvbnN0IGVsMiA9IGVsc1sxXTtcbiAgICAgICAgICBjb25zdCByZWN0MiA9IGF3YWl0IGRyaXZlci5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7dXRpbC51bndyYXBFbGVtZW50KGVsMil9L3JlY3RgLCAnR0VUJyk7XG5cbiAgICAgICAgICBpZiAoKHJlY3QueCAhPT0gcmVjdDIueCB8fCByZWN0LnkgIT09IHJlY3QyLnkpIHx8XG4gICAgICAgICAgKHJlY3Qud2lkdGggIT09IHJlY3QyLndpZHRoIHx8IHJlY3QuaGVpZ2h0ICE9PSByZWN0Mi5oZWlnaHQpKSB7XG4gICAgICAgICAgICAvLyBUaGVzZSAyIG5hdGl2ZSBlbGVtZW50cyBhcmUgbm90IHJlZmVycmluZyB0byB0aGUgc2FtZSB3ZWIgZWxlbWVudFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgICAgeDogTWF0aC5yb3VuZChyZWN0LnggKyByZWN0LndpZHRoIC8gMiksXG4gICAgICAgICAgeTogTWF0aC5yb3VuZChyZWN0LnkgKyByZWN0LmhlaWdodCAvIDIpLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBkcml2ZXIuY2xpY2tDb29yZHMoY29vcmRzKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBhbnkgZmFpbHVyZSBzaG91bGQgZmFsbCB0aHJvdWdoIGFuZCB0cmlnZ2VyIHRoZSBtb3JlIGVsYWJvcmF0ZVxuICAgIC8vIG1ldGhvZCBvZiBjbGlja2luZ1xuICAgIGxvZy53YXJuKGBFcnJvciBhdHRlbXB0aW5nIHRvIGNsaWNrOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXh0ZW5zaW9ucy5uYXRpdmVXZWJUYXAgPSBhc3luYyBmdW5jdGlvbiBuYXRpdmVXZWJUYXAgKGVsKSB7XG4gIGNvbnN0IGF0b21zRWxlbWVudCA9IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGVsKTtcblxuICAvLyBpZiBzdHJpY3QgbmF0aXZlIHRhcCwgZG8gbm90IHRyeSB0byBkbyBpdCB3aXRoIFdEQSBkaXJlY3RseVxuICBpZiAoIShhd2FpdCB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCkpLm5hdGl2ZVdlYlRhcFN0cmljdCAmJiBhd2FpdCB0YXBXZWJFbGVtZW50TmF0aXZlbHkodGhpcywgYXRvbXNFbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBsb2cud2FybignVW5hYmxlIHRvIGRvIHNpbXBsZSBuYXRpdmUgd2ViIHRhcC4gQXR0ZW1wdGluZyB0byBjb252ZXJ0IGNvb3JkaW5hdGVzJyk7XG5cbiAgLy8gYGdldF90b3BfbGVmdF9jb29yZGluYXRlc2AgcmV0dXJucyB0aGUgd3JvbmcgdmFsdWUgc29tZXRpbWVzLFxuICAvLyB1bmxlc3Mgd2UgcHJlLWNhbGwgYm90aCBvZiB0aGVzZSBmdW5jdGlvbnMgYmVmb3JlIHRoZSBhY3R1YWwgY2FsbHNcbiAgYXdhaXQgQi5Qcm9taXNlLmFsbChbXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3NpemUnLCBbYXRvbXNFbGVtZW50XSksXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3RvcF9sZWZ0X2Nvb3JkaW5hdGVzJywgW2F0b21zRWxlbWVudF0pLFxuICBdKTtcblxuICBjb25zdCBbc2l6ZSwgY29vcmRpbmF0ZXNdID0gYXdhaXQgQi5Qcm9taXNlLmFsbChbXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3NpemUnLCBbYXRvbXNFbGVtZW50XSksXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3RvcF9sZWZ0X2Nvb3JkaW5hdGVzJywgW2F0b21zRWxlbWVudF0pLFxuICBdKTtcbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gc2l6ZTtcbiAgbGV0IHt4LCB5fSA9IGNvb3JkaW5hdGVzO1xuICB4ICs9IHdpZHRoIC8gMjtcbiAgeSArPSBoZWlnaHQgLyAyO1xuXG4gIHRoaXMuY3VyV2ViQ29vcmRzID0ge3gsIHl9O1xuICBhd2FpdCB0aGlzLmNsaWNrV2ViQ29vcmRzKCk7XG59O1xuXG5leHRlbnNpb25zLmNsaWNrQ29vcmRzID0gYXN5bmMgZnVuY3Rpb24gY2xpY2tDb29yZHMgKGNvb3Jkcykge1xuICBhd2FpdCB0aGlzLnBlcmZvcm1Ub3VjaChbXG4gICAge1xuICAgICAgYWN0aW9uOiAndGFwJyxcbiAgICAgIG9wdGlvbnM6IGNvb3JkcyxcbiAgICB9LFxuICBdKTtcbn07XG5cbmV4dGVuc2lvbnMudHJhbnNsYXRlV2ViQ29vcmRzID0gYXN5bmMgZnVuY3Rpb24gdHJhbnNsYXRlV2ViQ29vcmRzIChjb29yZHMpIHtcbiAgbG9nLmRlYnVnKGBUcmFuc2xhdGluZyBjb29yZGluYXRlcyAoJHtKU09OLnN0cmluZ2lmeShjb29yZHMpfSkgdG8gd2ViIGNvb3JkaW5hdGVzYCk7XG5cbiAgLy8gYWJzb2x1dGl6ZSB3ZWIgY29vcmRzXG4gIGxldCB3ZWJ2aWV3O1xuICB0cnkge1xuICAgIHdlYnZpZXcgPSBhd2FpdCByZXRyeUludGVydmFsKDUsIDEwMCwgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2NsYXNzIG5hbWUnLCAnWENVSUVsZW1lbnRUeXBlV2ViVmlldycsIGZhbHNlKSk7XG4gIH0gY2F0Y2ggKGlnbikge31cblxuICBpZiAoIXdlYnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIFdlYlZpZXcgZm91bmQuIFVuYWJsZSB0byB0cmFuc2xhdGUgd2ViIGNvb3JkaW5hdGVzIGZvciBuYXRpdmUgd2ViIHRhcC5gKTtcbiAgfVxuXG4gIHdlYnZpZXcgPSB1dGlsLnVud3JhcEVsZW1lbnQod2Vidmlldyk7XG5cbiAgY29uc3QgcmVjdCA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvZWxlbWVudC8ke3dlYnZpZXd9L3JlY3RgLCAnR0VUJyk7XG4gIGNvbnN0IHd2UG9zID0ge3g6IHJlY3QueCwgeTogcmVjdC55fTtcbiAgY29uc3QgcmVhbERpbXMgPSB7dzogcmVjdC53aWR0aCwgaDogcmVjdC5oZWlnaHR9O1xuXG4gIGNvbnN0IGNtZCA9ICcoZnVuY3Rpb24gKCkgeyByZXR1cm4ge3c6IHdpbmRvdy5pbm5lcldpZHRoLCBoOiB3aW5kb3cuaW5uZXJIZWlnaHR9OyB9KSgpJztcbiAgY29uc3Qgd3ZEaW1zID0gYXdhaXQgdGhpcy5yZW1vdGUuZXhlY3V0ZShjbWQpO1xuXG4gIC8vIGtlZXAgdHJhY2sgb2YgaW1wbGljaXQgd2FpdCwgYW5kIHNldCBsb2NhbGx5IHRvIDBcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE0OTg4XG4gIGNvbnN0IGltcGxpY2l0V2FpdE1zID0gdGhpcy5pbXBsaWNpdFdhaXRNcztcbiAgYXdhaXQgdGhpcy5zZXRJbXBsaWNpdFdhaXQoMCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5nZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCh3dlBvcywgcmVhbERpbXMpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHRoaXMuc2V0SW1wbGljaXRXYWl0KGltcGxpY2l0V2FpdE1zKTtcbiAgfVxuXG4gIGlmICh3dkRpbXMgJiYgcmVhbERpbXMgJiYgd3ZQb3MpIHtcbiAgICBsZXQgeFJhdGlvID0gcmVhbERpbXMudyAvIHd2RGltcy53O1xuICAgIGxldCB5UmF0aW8gPSByZWFsRGltcy5oIC8gd3ZEaW1zLmg7XG4gICAgbGV0IG5ld0Nvb3JkcyA9IHtcbiAgICAgIHg6IHd2UG9zLnggKyBNYXRoLnJvdW5kKHhSYXRpbyAqIGNvb3Jkcy54KSxcbiAgICAgIHk6IHd2UG9zLnkgKyBNYXRoLnJvdW5kKHlSYXRpbyAqIGNvb3Jkcy55KSxcbiAgICB9O1xuXG4gICAgLy8gYWRkaXRpb25hbCBsb2dnaW5nIGZvciBjb29yZGluYXRlcywgc2luY2UgaXQgaXMgc29tZXRpbWVzIGJyb2tlblxuICAgIC8vICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy85MTU5XG4gICAgbG9nLmRlYnVnKGBDb252ZXJ0ZWQgY29vcmRpbmF0ZXM6ICR7SlNPTi5zdHJpbmdpZnkobmV3Q29vcmRzKX1gKTtcbiAgICBsb2cuZGVidWcoYCAgICByZWN0OiAke0pTT04uc3RyaW5naWZ5KHJlY3QpfWApO1xuICAgIGxvZy5kZWJ1ZyhgICAgIHd2UG9zOiAke0pTT04uc3RyaW5naWZ5KHd2UG9zKX1gKTtcbiAgICBsb2cuZGVidWcoYCAgICByZWFsRGltczogJHtKU09OLnN0cmluZ2lmeShyZWFsRGltcyl9YCk7XG4gICAgbG9nLmRlYnVnKGAgICAgd3ZEaW1zOiAke0pTT04uc3RyaW5naWZ5KHd2RGltcyl9YCk7XG4gICAgbG9nLmRlYnVnKGAgICAgeFJhdGlvOiAke0pTT04uc3RyaW5naWZ5KHhSYXRpbyl9YCk7XG4gICAgbG9nLmRlYnVnKGAgICAgeVJhdGlvOiAke0pTT04uc3RyaW5naWZ5KHlSYXRpbyl9YCk7XG5cbiAgICBsb2cuZGVidWcoYENvbnZlcnRlZCB3ZWIgY29vcmRzICR7SlNPTi5zdHJpbmdpZnkoY29vcmRzKX0gYCArXG4gICAgICAgICAgICAgIGBpbnRvIHJlYWwgY29vcmRzICR7SlNPTi5zdHJpbmdpZnkobmV3Q29vcmRzKX1gKTtcbiAgICByZXR1cm4gbmV3Q29vcmRzO1xuICB9XG59O1xuXG5leHRlbnNpb25zLmNoZWNrRm9yQWxlcnQgPSBhc3luYyBmdW5jdGlvbiBjaGVja0ZvckFsZXJ0ICgpIHtcbiAgcmV0dXJuIF8uaXNTdHJpbmcoYXdhaXQgdGhpcy5nZXRBbGVydFRleHQoKSk7XG59O1xuXG5leHRlbnNpb25zLndhaXRGb3JBdG9tID0gYXN5bmMgZnVuY3Rpb24gd2FpdEZvckF0b20gKHByb21pc2UpIHtcbiAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcblxuICAvLyBuZWVkIHRvIGNoZWNrIGZvciBhbGVydCB3aGlsZSB0aGUgYXRvbSBpcyBiZWluZyBleGVjdXRlZC5cbiAgLy8gc28gbm90aWZ5IG91cnNlbHZlcyB3aGVuIGl0IGhhcHBlbnNcbiAgY29uc3QgdGltZWRBdG9tUHJvbWlzZSA9IEIucmVzb2x2ZShwcm9taXNlKS50aW1lb3V0KEFUT01fV0FJVF9USU1FT1VUX01TKTtcbiAgY29uc3QgaGFuZGxlUHJvbWlzZUVycm9yID0gYXN5bmMgKHApID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEVycm9yID0gKGVyciBpbnN0YW5jZW9mIEIuQWdncmVnYXRlRXJyb3IpID8gZXJyWzBdIDogZXJyO1xuICAgICAgbG9nLmRlYnVnKGBFcnJvciByZWNlaXZlZCB3aGlsZSBleGVjdXRpbmcgYXRvbTogJHtvcmlnaW5hbEVycm9yLm1lc3NhZ2V9YCk7XG4gICAgICBpZiAob3JpZ2luYWxFcnJvciBpbnN0YW5jZW9mIEIuVGltZW91dEVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRGlkIG5vdCBnZXQgYW55IHJlc3BvbnNlIGZvciBhdG9tIGV4ZWN1dGlvbiBhZnRlciBgICtcbiAgICAgICAgICBgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgfVxuICB9O1xuICAvLyBpZiB0aGUgYXRvbSBwcm9taXNlIGlzIGZ1bGZpbGxlZCB3aXRoaW4gQVRPTV9JTklUSUFMX1dBSVRfTVNcbiAgLy8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciBhbiBhbGVydCBwcmVzZW5jZVxuICBhd2FpdCBoYW5kbGVQcm9taXNlRXJyb3IoQi5hbnkoW0IuZGVsYXkoQVRPTV9JTklUSUFMX1dBSVRfTVMpLCB0aW1lZEF0b21Qcm9taXNlXSkpO1xuICBpZiAodGltZWRBdG9tUHJvbWlzZS5pc0Z1bGZpbGxlZCgpKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRpbWVkQXRvbVByb21pc2U7XG4gIH1cblxuICAvLyAuLi5vdGhlcndpc2UgbWFrZSBzdXJlIHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgYWxlcnQgY292ZXJpbmcgdGhlIGVsZW1lbnRcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QodGhpcy5fd2FpdGluZ0F0b21zKSkge1xuICAgIHRoaXMuX3dhaXRpbmdBdG9tcyA9IHtcbiAgICAgIGNvdW50OiAwLFxuICAgICAgYWxlcnROb3RpZmllcjogbmV3IEV2ZW50RW1pdHRlcigpLFxuICAgICAgYWxlcnRNb25pdG9yOiBCLnJlc29sdmUoKSxcbiAgICB9O1xuICB9XG4gIHRoaXMuX3dhaXRpbmdBdG9tcy5jb3VudCsrO1xuXG4gIGxldCBvbkFsZXJ0Q2FsbGJhY2s7XG4gIHRyeSB7XG4gICAgLy8gb25seSByZXN0YXJ0IHRoZSBtb25pdG9yIGlmIGl0IGlzIG5vdCBydW5uaW5nIGFscmVhZHlcbiAgICBpZiAodGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0TW9uaXRvci5pc1Jlc29sdmVkKCkpIHtcbiAgICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE1vbml0b3IgPSBCLnJlc29sdmUoKGFzeW5jICgpID0+IHtcbiAgICAgICAgd2hpbGUgKHRoaXMuX3dhaXRpbmdBdG9tcy5jb3VudCA+IDApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGF3YWl0IHRoaXMuY2hlY2tGb3JBbGVydCgpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE5vdGlmaWVyLmVtaXQoT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICAgICAgICBhd2FpdCBCLmRlbGF5KEFUT01fSU5JVElBTF9XQUlUX01TIC8gMik7XG4gICAgICAgIH1cbiAgICAgIH0pKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBvbkFsZXJ0Q2FsbGJhY2sgPSAoKSA9PiByZWplY3QobmV3IGVycm9ycy5VbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IoKSk7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5vbmNlKE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5ULCBvbkFsZXJ0Q2FsbGJhY2spO1xuICAgICAgaGFuZGxlUHJvbWlzZUVycm9yKHRpbWVkQXRvbVByb21pc2UpXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by10aGVuXG4gICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChvbkFsZXJ0Q2FsbGJhY2spIHtcbiAgICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5ULCBvbkFsZXJ0Q2FsbGJhY2spO1xuICAgIH1cbiAgICB0aGlzLl93YWl0aW5nQXRvbXMuY291bnQtLTtcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5tb2JpbGVXZWJOYXYgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVXZWJOYXYgKG5hdlR5cGUpIHtcbiAgdGhpcy5yZW1vdGUuYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZCA9IHRydWU7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbYGhpc3RvcnkuJHtuYXZUeXBlfSgpO2AsIG51bGxdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLnJlbW90ZS5hbGxvd05hdmlnYXRpb25XaXRob3V0UmVsb2FkID0gZmFsc2U7XG4gIH1cbn07XG5cbk9iamVjdC5hc3NpZ24oY29tbWFuZHMsIGV4dGVuc2lvbnMsIGhlbHBlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL3dlYi5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9