@kepler.gl/reducers 3.3.0-alpha.17 → 3.3.0-alpha.18

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.
@@ -8,8 +8,9 @@ exports.stageLoadedFilesUpdater = exports.setMapSplitModeUpdater = exports.repla
8
8
  exports.syncGlobeConfigColorsToStyle = syncGlobeConfigColorsToStyle;
9
9
  exports.toggleSplitMapUpdater = void 0;
10
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
+ var _toArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toArray"));
13
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
15
  var _uiStateUpdaters = require("./ui-state-updaters");
15
16
  var _visStateUpdaters = require("./vis-state-updaters");
@@ -17,6 +18,7 @@ var _mapStateUpdaters = require("./map-state-updaters");
17
18
  var _mapStyleUpdaters = require("./map-style-updaters");
18
19
  var _processors = require("@kepler.gl/processors");
19
20
  var _composerHelpers = require("./composer-helpers");
21
+ var _actions = require("@kepler.gl/actions");
20
22
  var _utils = require("@kepler.gl/utils");
21
23
  var _dataUtils = require("./data-utils");
22
24
  var _constants = require("@kepler.gl/constants");
@@ -111,7 +113,8 @@ var defaultAddDataToMapOptions = exports.defaultAddDataToMapOptions = {
111
113
  */
112
114
  var addDataToMapUpdater = exports.addDataToMapUpdater = function addDataToMapUpdater(state, _ref) {
113
115
  var _datasets$, _datasets$2, _datasets$3;
114
- var payload = _ref.payload;
116
+ var payload = _ref.payload,
117
+ onFinish = _ref.onFinish;
115
118
  var datasets = payload.datasets,
116
119
  config = payload.config,
117
120
  info = payload.info;
@@ -123,7 +126,8 @@ var addDataToMapUpdater = exports.addDataToMapUpdater = function addDataToMapUpd
123
126
  return (0, _composerHelpers.compose_)([(0, _composerHelpers.pick_)('visState')((0, _composerHelpers.apply_)(_visStateUpdaters.updateVisDataUpdater, {
124
127
  datasets: datasets,
125
128
  options: options,
126
- config: config
129
+ config: config,
130
+ onFinish: onFinish
127
131
  }))])(state);
128
132
  }
129
133
 
@@ -153,7 +157,8 @@ var addDataToMapUpdater = exports.addDataToMapUpdater = function addDataToMapUpd
153
157
  (0, _composerHelpers.apply_)(_visStateUpdaters.updateVisDataUpdater, {
154
158
  datasets: datasets,
155
159
  options: options,
156
- config: parsedConfig
160
+ config: parsedConfig,
161
+ onFinish: onFinish
157
162
  })), (0, _composerHelpers.if_)(Boolean(info), (0, _composerHelpers.pick_)('visState')((0, _composerHelpers.apply_)(_visStateUpdaters.setMapInfoUpdater, {
158
163
  info: info
159
164
  }))),
@@ -180,16 +185,30 @@ var loadFilesSuccessUpdater = exports.loadFilesSuccessUpdater = function loadFil
180
185
  if (isStaleFileLoadFinish(state.visState.fileLoading, action.loadId)) {
181
186
  return state;
182
187
  }
183
- // still more to load
184
- var payloads = (0, _processors.filesToDataPayload)(action.result, action.options);
188
+ var progressiveSteps = Object.prototype.hasOwnProperty.call(action, 'progressiveSteps') ? [action.result].concat((0, _toConsumableArray2["default"])(action.progressiveSteps || [])) : (0, _processors.fileCacheToProgressiveSteps)(action.result);
189
+ var _progressiveSteps = (0, _toArray2["default"])(progressiveSteps),
190
+ _progressiveSteps$ = _progressiveSteps[0],
191
+ currentStep = _progressiveSteps$ === void 0 ? action.result : _progressiveSteps$,
192
+ remainingSteps = _progressiveSteps.slice(1);
193
+ var payloads = (0, _processors.filesToDataPayload)(currentStep, action.options);
194
+ // The first progressive snapshot may fit the map to the newly created layer.
195
+ // Later snapshots only replace that layer's data and must not keep moving the viewport.
196
+ var continuationOptions = _objectSpread(_objectSpread({}, action.options), {}, {
197
+ centerMap: false
198
+ });
199
+ var onFinish = remainingSteps.length ? _objectSpread(_objectSpread({}, (0, _actions.loadFilesSuccess)(remainingSteps[0], continuationOptions)), {}, {
200
+ progressiveSteps: remainingSteps.slice(1)
201
+ }) : undefined;
185
202
  var nextState = (0, _composerHelpers.compose_)([(0, _composerHelpers.pick_)('visState')((0, _composerHelpers.merge_)({
186
203
  fileLoading: false,
187
204
  fileLoadingProgress: {},
188
205
  stagedToAdd: null
189
206
  }))])(state);
190
207
  // make multiple add data to map calls
191
- var stateWithData = (0, _composerHelpers.compose_)(payloads.map(function (p) {
192
- return (0, _composerHelpers.apply_)(addDataToMapUpdater, (0, _composerHelpers.payload_)(p));
208
+ var stateWithData = (0, _composerHelpers.compose_)(payloads.map(function (p, index) {
209
+ return (0, _composerHelpers.apply_)(addDataToMapUpdater, _objectSpread(_objectSpread({}, (0, _composerHelpers.payload_)(p)), onFinish && index === payloads.length - 1 ? {
210
+ onFinish: onFinish
211
+ } : {}));
193
212
  }))(nextState);
194
213
  return stateWithData;
195
214
  };
@@ -646,4 +665,4 @@ var replaceDataInMapUpdater = exports.replaceDataInMapUpdater = function replace
646
665
  }));
647
666
  return nextState;
648
667
  };
649
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdWlTdGF0ZVVwZGF0ZXJzIiwicmVxdWlyZSIsIl92aXNTdGF0ZVVwZGF0ZXJzIiwiX21hcFN0YXRlVXBkYXRlcnMiLCJfbWFwU3R5bGVVcGRhdGVycyIsIl9wcm9jZXNzb3JzIiwiX2NvbXBvc2VySGVscGVycyIsIl91dGlscyIsIl9kYXRhVXRpbHMiLCJfY29uc3RhbnRzIiwiX2RlY2tnbExheWVycyIsIl9leGNsdWRlZCIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiY29tYmluZWRVcGRhdGVycyIsImlzVmFsaWRDb25maWciLCJleHBvcnRzIiwiY29uZmlnIiwiaXNQbGFpbk9iamVjdCIsInZlcnNpb24iLCJkZWZhdWx0QWRkRGF0YVRvTWFwT3B0aW9ucyIsImNlbnRlck1hcCIsImtlZXBFeGlzdGluZ0NvbmZpZyIsImF1dG9DcmVhdGVMYXllcnMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREYXRhVG9NYXBVcGRhdGVyIiwic3RhdGUiLCJfcmVmIiwiX2RhdGFzZXRzJCIsIl9kYXRhc2V0cyQyIiwiX2RhdGFzZXRzJDMiLCJwYXlsb2FkIiwiZGF0YXNldHMiLCJpbmZvIiwib3B0aW9ucyIsImlzUHJvZ3Jlc3NpdmVMb2FkaW5nIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybWF0IiwiaWQiLCJ2aXNTdGF0ZSIsImNvbXBvc2VfIiwicGlja18iLCJhcHBseV8iLCJ2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwicGFyc2VkQ29uZmlnIiwic2NoZW1hIiwicGFyc2VTYXZlZENvbmZpZyIsIm9sZExheWVycyIsImxheWVycyIsImZpbHRlck5ld2x5QWRkZWRMYXllcnMiLCJubCIsImZpbmQiLCJvbCIsImZpbmRNYXBCb3VuZHNJZkNlbnRlcmVkIiwiYm91bmRzIiwiZmluZE1hcEJvdW5kcyIsInVuZGVmaW5lZCIsImlmXyIsIkJvb2xlYW4iLCJzZXRNYXBJbmZvVXBkYXRlciIsIndpdGhfIiwiX3JlZjIiLCJzdGF0ZU1hcENvbmZpZ1VwZGF0ZXIiLCJwYXlsb2FkXyIsInN0eWxlTWFwQ29uZmlnVXBkYXRlciIsInVpU3RhdGVSZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsInVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsInRvZ2dsZU1vZGFsVXBkYXRlciIsIm1lcmdlXyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInJlYWRPbmx5IiwibG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIiLCJhY3Rpb24iLCJpc1N0YWxlRmlsZUxvYWRGaW5pc2giLCJmaWxlTG9hZGluZyIsImxvYWRJZCIsInBheWxvYWRzIiwiZmlsZXNUb0RhdGFQYXlsb2FkIiwicmVzdWx0IiwibmV4dFN0YXRlIiwiZmlsZUxvYWRpbmdQcm9ncmVzcyIsInN0YWdlZFRvQWRkIiwic3RhdGVXaXRoRGF0YSIsIm1hcCIsInAiLCJrZXB0TG9hZEVycm9ycyIsInByb2dyZXNzIiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIiwiX3JlZjMiLCJfcmVmNCIsIl9zbGljZWRUb0FycmF5MiIsInZhbHVlIiwiZXJyb3IiLCJzdGFnZUxvYWRlZEZpbGVzVXBkYXRlciIsIm1vZGFsT3BlbiIsInVpU3RhdGUiLCJjdXJyZW50TW9kYWwiLCJBRERfREFUQV9JRCIsInByZXZpb3VzIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInN0YWdlZEl0ZW1LZXkiLCJpdGVtIiwiX2l0ZW0kbWV0YWRhdGEiLCJfaXRlbSRpbmZvIiwibWV0YWRhdGEiLCJzb3VyY2UiLCJhcHBlbmRTdGFnZWRMb2FkZWRGaWxlc1VwZGF0ZXIiLCJzZWVuIiwiU2V0IiwibmV4dCIsImtleSIsImhhcyIsImFkZCIsInNwbGl0UmVwbGFjZW1lbnRVcGxvYWQiLCJtYXBzIiwibGlzdCIsImRhdGFzZXQiLCJkYXRhc2V0VG9Vc2UiLCJtb3JlIiwic2xpY2UiLCJyZW1haW5kZXIiLCJjb25maXJtUmVwbGFjZURhdGFzZXRVcGRhdGVyIiwiX2RhdGFzZXRUb1VzZSRpbmZvIiwiY2xlYXJlZCIsIl9zcGxpdFJlcGxhY2VtZW50VXBsbyIsImRhdGFzZXRUb1JlcGxhY2VJZCIsInJlcGxhY2VkIiwicmVwbGFjZURhdGFJbk1hcFVwZGF0ZXIiLCJkZWxldGVPcmlnaW5hbERhdGFzZXQiLCJhZGREYXRhVG9NYXBDb21wb3NlZCIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwibm9ybWFsIiwidXBkYXRlRGFya0Jhc2VNYXBMYXllcnMiLCJkYXJrQmFzZU1hcEVuYWJsZWQiLCJsYXllcklkIiwibGF5ZXIiLCJ2aXNDb25maWdTZXR0aW5ncyIsInZpc0NvbmZpZyIsInVwZGF0ZUxheWVyQ29uZmlnIiwiY29tYmluZWRNYXBTdHlsZUNoYW5nZVVwZGF0ZXIiLCJfbWFwU3RhdGUkZ2xvYmUiLCJtYXBTdHlsZSIsImdldENvbG9yTW9kZSIsIl9tYXBTdHlsZSRtYXBTdHlsZXMkayIsIm1hcFN0eWxlcyIsImNvbG9yTW9kZSIsInByZXZDb2xvck1vZGUiLCJzdHlsZVR5cGUiLCJuZXh0Q29sb3JNb2RlIiwibWFwU3RhdGUiLCJCQVNFX01BUF9DT0xPUl9NT0RFUyIsIkRBUksiLCJzY3JlZW4iLCJMSUdIVCIsImRhcmtlbiIsImdsb2JlIiwiZW5hYmxlZCIsIk5PX01BUF9JRCIsImJhc2VtYXAiLCJsYWJlbHMiLCJhZG1pbkxpbmVzIiwid2F0ZXIiLCJzeW5jR2xvYmVDb25maWdDb2xvcnNUb1N0eWxlIiwibWFwU3R5bGVDaGFuZ2VVcGRhdGVyIiwiX21hcFN0YXRlJGdsb2JlMiIsIm5leHRTdHlsZU9iaiIsIm5leHRHbG9iZUNvbmZpZyIsInN1cmZhY2VDb2xvciIsIkRFRkFVTFRfQkFTRU1BUF9DT0xPUiIsImJhY2tncm91bmRGaWxsQ29sb3IiLCJ3YXRlckNvbG9yIiwiYmFzZW1hcFdhdGVyRmlsbENvbG9yIiwiYWRtaW5MaW5lc0NvbG9yIiwiYmFzZW1hcEFkbWluTGluZUNvbG9yIiwiYmFzZW1hcENvbG9ycyIsImdldEJhc2VtYXBDb2xvcnNGb3JTdHlsZSIsInN0eWxlIiwibGF5ZXJHcm91cHMiLCJjb21iaW5lZFNldE1hcFZpZXdNb2RlVXBkYXRlciIsIl9tYXBTdGF0ZSRnbG9iZTMiLCJzZXRNYXBWaWV3TW9kZVVwZGF0ZXIiLCJjb21iaW5lZExheWVyVHlwZUNoYW5nZVVwZGF0ZXIiLCJvbGRMYXllckluZGV4IiwiZmluZEluZGV4Iiwib2xkTGF5ZXIiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibmV3TGF5ZXIiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJfbmV3U3RhdGUkdWlTdGF0ZSRtYXAiLCJuZXdTdGF0ZSIsInZpc1N0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwidWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsIm1hcFN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiaXNTcGxpdCIsInNwbGl0TWFwcyIsImlzTGVnZW5kQWN0aXZlIiwibWFwQ29udHJvbHMiLCJtYXBMZWdlbmQiLCJhY3RpdmUiLCJ0b2dnbGVNYXBDb250cm9sVXBkYXRlciIsInBhbmVsSWQiLCJpbmRleCIsInNldE1hcFNwbGl0TW9kZVVwZGF0ZXIiLCJfbmV3VWlTdGF0ZSRtYXBDb250cm8iLCJtYXBTcGxpdE1vZGUiLCJwcmV2TW9kZSIsIm5ld01hcFN0YXRlIiwibWFwU3RhdGVTZXRNYXBTcGxpdE1vZGVVcGRhdGVyIiwibmV3VmlzU3RhdGUiLCJNYXBTcGxpdE1vZGUiLCJTSU5HTEVfTUFQIiwiRFVBTF9NQVAiLCJTV0lQRV9DT01QQVJFIiwiY29tcHV0ZVNwbGl0TWFwTGF5ZXJzIiwiZHVwbGljYXRlIiwibmV3VWlTdGF0ZSIsImRlZmF1bHRSZXBsYWNlRGF0YVRvTWFwT3B0aW9ucyIsIl9yZWY1IiwiX3BheWxvYWQkb3B0aW9ucyIsIl9vcHRpb25zJGRlbGV0ZU9yaWdpbiIsInJlcGxhY2VPcHRpb25zIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsImFkZERhdGFUb01hcE9wdGlvbnMiLCJkYXRhSWRUb1VzZSIsInByZXBhcmVkU3RhdGUiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21iaW5lZC11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1xuICB0b2dnbGVNb2RhbFVwZGF0ZXIsXG4gIGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyIGFzIHVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlcixcbiAgdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIsXG4gIHRvZ2dsZVNwbGl0TWFwVXBkYXRlciBhcyB1aVN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyLFxuICByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciBhcyB1aVN0YXRlUmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXJcbn0gZnJvbSAnLi91aS1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICB1cGRhdGVWaXNEYXRhVXBkYXRlciBhcyB2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyLFxuICBzZXRNYXBJbmZvVXBkYXRlcixcbiAgbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcixcbiAgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyIGFzIHZpc1N0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyLFxuICBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZVxufSBmcm9tICcuL3Zpcy1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciBhcyBzdGF0ZU1hcENvbmZpZ1VwZGF0ZXIsXG4gIHRvZ2dsZVNwbGl0TWFwVXBkYXRlciBhcyBtYXBTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcixcbiAgc2V0TWFwU3BsaXRNb2RlVXBkYXRlciBhcyBtYXBTdGF0ZVNldE1hcFNwbGl0TW9kZVVwZGF0ZXIsXG4gIHNldE1hcFZpZXdNb2RlVXBkYXRlclxufSBmcm9tICcuL21hcC1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICBtYXBTdHlsZUNoYW5nZVVwZGF0ZXIsXG4gIHJlY2VpdmVNYXBDb25maWdVcGRhdGVyIGFzIHN0eWxlTWFwQ29uZmlnVXBkYXRlclxufSBmcm9tICcuL21hcC1zdHlsZS11cGRhdGVycyc7XG5pbXBvcnQge2ZpbGVzVG9EYXRhUGF5bG9hZH0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcbmltcG9ydCB7cGF5bG9hZF8sIGFwcGx5Xywgd2l0aF8sIGlmXywgY29tcG9zZV8sIG1lcmdlXywgcGlja199IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge01hcFN0YXRlLCBVaVN0YXRlLCBBZGREYXRhVG9NYXBQYXlsb2FkLCBQYXJzZWRDb25maWcsIFByb3RvRGF0YXNldH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge01hcFN0eWxlfSBmcm9tICcuL21hcC1zdHlsZS11cGRhdGVycyc7XG5pbXBvcnQge1Byb3ZpZGVyU3RhdGV9IGZyb20gJy4vcHJvdmlkZXItc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtcbiAgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb24sXG4gIENvbmZpcm1SZXBsYWNlRGF0YXNldFVwZGF0ZXJBY3Rpb24sXG4gIFN0YWdlTG9hZGVkRmlsZXNVcGRhdGVyQWN0aW9uLFxuICBNYXBTdHlsZUNoYW5nZVVwZGF0ZXJBY3Rpb24sXG4gIExheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb24sXG4gIFRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvbixcbiAgUmVwbGFjZURhdGFJbk1hcFBheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9uc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7TGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7aXNQbGFpbk9iamVjdCwgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcbmltcG9ydCB7XG4gIEJBU0VfTUFQX0NPTE9SX01PREVTLFxuICBPVkVSTEFZX0JMRU5ESU5HUyxcbiAgTk9fTUFQX0lELFxuICBNYXBTcGxpdE1vZGUsXG4gIEFERF9EQVRBX0lEXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Z2V0QmFzZW1hcENvbG9yc0ZvclN0eWxlLCBERUZBVUxUX0JBU0VNQVBfQ09MT1J9IGZyb20gJ0BrZXBsZXIuZ2wvZGVja2dsLWxheWVycyc7XG5cbmV4cG9ydCB0eXBlIEtlcGxlckdsU3RhdGUgPSB7XG4gIHZpc1N0YXRlOiBWaXNTdGF0ZTtcbiAgbWFwU3RhdGU6IE1hcFN0YXRlO1xuICBtYXBTdHlsZTogTWFwU3R5bGU7XG4gIHVpU3RhdGU6IFVpU3RhdGU7XG4gIHByb3ZpZGVyU3RhdGU6IFByb3ZpZGVyU3RhdGU7XG59O1xuXG4vLyBjb21wb3NlIGFjdGlvbiB0byBhcHBseSByZXN1bHQgbXVsdGlwbGUgcmVkdWNlcnMsIHdpdGggdGhlIG91dHB1dCBvZiBvbmVcblxuLyoqXG4gKiBTb21lIGFjdGlvbnMgd2lsbCBhZmZlY3QgdGhlIGVudGlyZSBrZXBsZXIubGcgaW5zdGFuY2Ugc3RhdGUuXG4gKiBUaGUgdXBkYXRlcnMgZm9yIHRoZXNlIGFjdGlvbnMgaXMgZXhwb3J0ZWQgYXMgYGNvbWJpbmVkVXBkYXRlcnNgLiBUaGVzZSB1cGRhdGVyIHRha2UgdGhlIGVudGlyZSBpbnN0YW5jZSBzdGF0ZVxuICogYXMgdGhlIGZpcnN0IGFyZ3VtZW50LiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge2NvbWJpbmVkVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgLy8gYWRkIGRhdGEgdG8gbWFwIGFmdGVyIHJlY2VpdmluZyBkYXRhIGZyb20gcmVtb3RlIHNvdXJjZXNcbiAqICAgIGNhc2UgJ0xPQURfUkVNT1RFX1JFU09VUkNFX1NVQ0NFU1MnOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIC8vIHBhc3MgaW4ga2VwbGVyLmdsIGluc3RhbmNlIHN0YXRlIHRvIGNvbWJpbmVkVXBkYXRlcnNcbiAqICAgICAgICAgIG1hcDogIGNvbWJpbmVkVXBkYXRlcnMuYWRkRGF0YVRvTWFwVXBkYXRlcihcbiAqICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5tYXAsXG4gKiAgICAgICAgICAge1xuICogICAgICAgICAgICAgcGF5bG9hZDoge1xuICogICAgICAgICAgICAgICBkYXRhc2V0czogYWN0aW9uLmRhdGFzZXRzLFxuICogICAgICAgICAgICAgICBvcHRpb25zOiB7cmVhZE9ubHk6IHRydWV9LFxuICogICAgICAgICAgICAgICBjb25maWc6IGFjdGlvbi5jb25maWdcbiAqICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgIH1cbiAqICAgICAgICAgIClcbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgY29tYmluZWRVcGRhdGVycyA9IG51bGw7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZENvbmZpZyA9IGNvbmZpZyA9PlxuICBpc1BsYWluT2JqZWN0KGNvbmZpZykgJiYgaXNQbGFpbk9iamVjdChjb25maWcuY29uZmlnKSAmJiBjb25maWcudmVyc2lvbjtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRBZGREYXRhVG9NYXBPcHRpb25zID0ge1xuICBjZW50ZXJNYXA6IHRydWUsXG4gIGtlZXBFeGlzdGluZ0NvbmZpZzogZmFsc2UsXG4gIGF1dG9DcmVhdGVMYXllcnM6IHRydWUsXG4gIGF1dG9DcmVhdGVUb29sdGlwczogdHJ1ZVxufTtcblxuLyoqXG4gKiBDb21iaW5lIGRhdGEgYW5kIGZ1bGwgY29uZmlndXJhdGlvbiB1cGRhdGUgaW4gYSBzaW5nbGUgYWN0aW9uXG4gKlxuICogQG1lbWJlcm9mIGNvbWJpbmVkVXBkYXRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSBrZXBsZXIuZ2wgaW5zdGFuY2Ugc3RhdGUsIGNvbnRhaW5pbmcgYWxsIHN1YnJlZHVjZXIgc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24ucGF5bG9hZCBge2RhdGFzZXRzLCBvcHRpb25zLCBjb25maWd9YFxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkLmRhdGFzZXRzIC0gKioqcmVxdWlyZWQqKiBkYXRhc2V0cyBjYW4gYmUgYSBkYXRhc2V0IG9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKiBFYWNoIGRhdGFzZXQgb2JqZWN0IG5lZWRzIHRvIGhhdmUgYGluZm9gIGFuZCBgZGF0YWAgcHJvcGVydHkuXG4gKiBAcGFyYW0gW2FjdGlvbi5wYXlsb2FkLm9wdGlvbnNdIG9wdGlvbiBvYmplY3QgYHtjZW50ZXJNYXA6IHRydWUsIHBhZGRpbmc6IHtsZWZ0OiAzMDB9fWBcbiAqIEBwYXJhbSBbYWN0aW9uLnBheWxvYWQuY29uZmlnXSBtYXAgY29uZmlnXG4gKiBAcGFyYW0gW2FjdGlvbi5wYXlsb2FkLmluZm9dIG1hcCBpbmZvIGNvbnRhaW5zIHRpdGxlIGFuZCBkZXNjcmlwdGlvblxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gRGF0YXNldFxuICogQHByb3BlcnR5IGluZm8gLWluZm8gb2YgYSBkYXRhc2V0XG4gKiBAcHJvcGVydHkgaW5mby5pZCAtIGlkIG9mIHRoaXMgZGF0YXNldC4gSWYgY29uZmlnIGlzIGRlZmluZWQsIGBpZGAgc2hvdWxkIG1hdGNoZXMgdGhlIGBkYXRhSWRgIGluIGNvbmZpZy5cbiAqIEBwcm9wZXJ0eSBpbmZvLmxhYmVsIC0gQSBkaXNwbGF5IG5hbWUgb2YgdGhpcyBkYXRhc2V0XG4gKiBAcHJvcGVydHkgZGF0YSAtICoqKnJlcXVpcmVkKiogVGhlIGRhdGEgb2JqZWN0LCBpbiBhIHRhYnVsYXIgZm9ybWF0IHdpdGggMiBwcm9wZXJ0aWVzIGBmaWVsZHNgIGFuZCBgcm93c2BcbiAqIEBwcm9wZXJ0eSBkYXRhLmZpZWxkcyAtICoqKnJlcXVpcmVkKiogQXJyYXkgb2YgZmllbGRzLFxuICogQHByb3BlcnR5IGRhdGEuZmllbGRzLm5hbWUgLSAqKipyZXF1aXJlZCoqIE5hbWUgb2YgdGhlIGZpZWxkLFxuICogQHByb3BlcnR5IGRhdGEucm93cyAtICoqKnJlcXVpcmVkKiogQXJyYXkgb2Ygcm93cywgaW4gYSB0YWJ1bGFyIGZvcm1hdCB3aXRoIGBmaWVsZHNgIGFuZCBgcm93c2BcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGREYXRhVG9NYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAge3BheWxvYWR9OiB7cGF5bG9hZDogQWRkRGF0YVRvTWFwUGF5bG9hZH1cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCB7ZGF0YXNldHMsIGNvbmZpZywgaW5mb30gPSBwYXlsb2FkO1xuXG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgLi4uZGVmYXVsdEFkZERhdGFUb01hcE9wdGlvbnMsXG4gICAgLi4ucGF5bG9hZC5vcHRpb25zXG4gIH07XG5cbiAgLy8gY2hlY2sgaWYgcHJvZ3Jlc3NpdmUgbG9hZGluZyBkYXRhc2V0IGJ5IGJhdGNoZXMsIGFuZCB1cGRhdGUgdmlzU3RhdGUgZGlyZWN0bHlcbiAgY29uc3QgaXNQcm9ncmVzc2l2ZUxvYWRpbmcgPVxuICAgIEFycmF5LmlzQXJyYXkoZGF0YXNldHMpICYmXG4gICAgZGF0YXNldHNbMF0/LmluZm8uZm9ybWF0ID09PSAnYXJyb3cnICYmXG4gICAgZGF0YXNldHNbMF0/LmluZm8uaWQgJiZcbiAgICBkYXRhc2V0c1swXT8uaW5mby5pZCBpbiBzdGF0ZS52aXNTdGF0ZS5kYXRhc2V0cztcbiAgaWYgKGlzUHJvZ3Jlc3NpdmVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIGNvbXBvc2VfPEtlcGxlckdsU3RhdGU+KFtcbiAgICAgIHBpY2tfKCd2aXNTdGF0ZScpKFxuICAgICAgICBhcHBseV88VmlzU3RhdGUsIGFueT4odmlzU3RhdGVVcGRhdGVWaXNEYXRhVXBkYXRlciwge1xuICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgXSkoc3RhdGUpO1xuICB9XG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBsZXQgcGFyc2VkQ29uZmlnOiBQYXJzZWRDb25maWcgPSBjb25maWc7XG5cbiAgaWYgKGlzVmFsaWRDb25maWcoY29uZmlnKSkge1xuICAgIC8vIGlmIHBhc3NlZCBpbiBzYXZlZCBjb25maWdcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcGFyc2VkQ29uZmlnID0gc3RhdGUudmlzU3RhdGUuc2NoZW1hLnBhcnNlU2F2ZWRDb25maWcoY29uZmlnKTtcbiAgfVxuICBjb25zdCBvbGRMYXllcnMgPSBzdGF0ZS52aXNTdGF0ZS5sYXllcnM7XG4gIGNvbnN0IGZpbHRlck5ld2x5QWRkZWRMYXllcnMgPSAobGF5ZXJzOiBMYXllcltdKSA9PlxuICAgIGxheWVycy5maWx0ZXIobmwgPT4gIW9sZExheWVycy5maW5kKG9sID0+IG9sID09PSBubCkpO1xuXG4gIC8vIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZCwgdG8gbWFrZSB0eXBlc2NyaXB0IGhhcHB5XG4gIGNvbnN0IGZpbmRNYXBCb3VuZHNJZkNlbnRlcmVkID0gKGxheWVyczogTGF5ZXJbXSkgPT4ge1xuICAgIGNvbnN0IGJvdW5kcyA9IG9wdGlvbnMuY2VudGVyTWFwICYmIGZpbmRNYXBCb3VuZHMobGF5ZXJzKTtcbiAgICByZXR1cm4gYm91bmRzID8gYm91bmRzIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIHJldHVybiBjb21wb3NlXzxLZXBsZXJHbFN0YXRlPihbXG4gICAgcGlja18oJ3Zpc1N0YXRlJykoXG4gICAgICAvLyB0aGlzIHBhcnQgY2FuIGJlIGFzeW5jXG4gICAgICBhcHBseV88VmlzU3RhdGUsIGFueT4odmlzU3RhdGVVcGRhdGVWaXNEYXRhVXBkYXRlciwge1xuICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgY29uZmlnOiBwYXJzZWRDb25maWdcbiAgICAgIH0pXG4gICAgKSxcblxuICAgIGlmXyhCb29sZWFuKGluZm8pLCBwaWNrXygndmlzU3RhdGUnKShhcHBseV88VmlzU3RhdGUsIGFueT4oc2V0TWFwSW5mb1VwZGF0ZXIsIHtpbmZvfSkpKSxcbiAgICAvLyBOb3RlIHRoYXQgZml0IGJvdW5kcyBoZXJlIHdvbid0IGJlIGNhbGxlZCBpbiBjYXNlIGRhdGFzZXRzIGFyZSBjcmVhdGVkIGluIFRhc2tzLlxuICAgIC8vIEEgc2VwYXJhdGUgVGFzayB0byB1cGRhdGUgYm91bmRzIGlzIGNyZWF0ZWQgb25jZSB0aGUgZGF0YXNldHMgYXJlIHJlYWR5LlxuICAgIHdpdGhfKCh7dmlzU3RhdGV9KSA9PlxuICAgICAgcGlja18oJ21hcFN0YXRlJykoXG4gICAgICAgIGFwcGx5XyhcbiAgICAgICAgICBzdGF0ZU1hcENvbmZpZ1VwZGF0ZXIsXG4gICAgICAgICAgcGF5bG9hZF8oe1xuICAgICAgICAgICAgY29uZmlnOiBwYXJzZWRDb25maWcsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgYm91bmRzOiBmaW5kTWFwQm91bmRzSWZDZW50ZXJlZChmaWx0ZXJOZXdseUFkZGVkTGF5ZXJzKHZpc1N0YXRlLmxheWVycykpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICksXG4gICAgcGlja18oJ21hcFN0eWxlJykoYXBwbHlfKHN0eWxlTWFwQ29uZmlnVXBkYXRlciwgcGF5bG9hZF8oe2NvbmZpZzogcGFyc2VkQ29uZmlnLCBvcHRpb25zfSkpKSxcbiAgICBwaWNrXygndWlTdGF0ZScpKFxuICAgICAgYXBwbHlfKHVpU3RhdGVSZWNlaXZlTWFwQ29uZmlnVXBkYXRlciwgcGF5bG9hZF8oe2NvbmZpZzogcGFyc2VkQ29uZmlnLCBvcHRpb25zfSkpXG4gICAgKSxcbiAgICBwaWNrXygndWlTdGF0ZScpKGFwcGx5Xyh1aVN0YXRlTG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIsIHBheWxvYWRfKG51bGwpKSksXG5cbiAgICBwaWNrXygndWlTdGF0ZScpKGFwcGx5Xyh0b2dnbGVNb2RhbFVwZGF0ZXIsIHBheWxvYWRfKG51bGwpKSksXG4gICAgcGlja18oJ3VpU3RhdGUnKShcbiAgICAgIG1lcmdlXyhcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICdyZWFkT25seScpXG4gICAgICAgICAgPyB7cmVhZE9ubHk6IG9wdGlvbnMucmVhZE9ubHl9XG4gICAgICAgICAgOiB7fVxuICAgICAgKVxuICAgIClcbiAgXSkoc3RhdGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBsb2FkRmlsZXNTdWNjZXNzVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGlmIChpc1N0YWxlRmlsZUxvYWRGaW5pc2goc3RhdGUudmlzU3RhdGUuZmlsZUxvYWRpbmcsIGFjdGlvbi5sb2FkSWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIHN0aWxsIG1vcmUgdG8gbG9hZFxuICBjb25zdCBwYXlsb2FkcyA9IGZpbGVzVG9EYXRhUGF5bG9hZChhY3Rpb24ucmVzdWx0LCBhY3Rpb24ub3B0aW9ucyk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IGNvbXBvc2VfKFtcbiAgICBwaWNrXygndmlzU3RhdGUnKShcbiAgICAgIG1lcmdlXyh7XG4gICAgICAgIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gICAgICAgIHN0YWdlZFRvQWRkOiBudWxsXG4gICAgICB9KVxuICAgIClcbiAgXSkoc3RhdGUpO1xuICAvLyBtYWtlIG11bHRpcGxlIGFkZCBkYXRhIHRvIG1hcCBjYWxsc1xuICBjb25zdCBzdGF0ZVdpdGhEYXRhID0gY29tcG9zZV8ocGF5bG9hZHMubWFwKHAgPT4gYXBwbHlfKGFkZERhdGFUb01hcFVwZGF0ZXIsIHBheWxvYWRfKHApKSkpKFxuICAgIG5leHRTdGF0ZVxuICApO1xuICByZXR1cm4gc3RhdGVXaXRoRGF0YSBhcyBLZXBsZXJHbFN0YXRlO1xufTtcblxuZnVuY3Rpb24ga2VwdExvYWRFcnJvcnMocHJvZ3Jlc3M6IFJlY29yZDxzdHJpbmcsIHtlcnJvcj86IHVua25vd259PiA9IHt9KSB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMocHJvZ3Jlc3MpLmZpbHRlcigoWywgdmFsdWVdKSA9PiB2YWx1ZT8uZXJyb3IpKTtcbn1cblxuLyoqIEEgZmluaXNoIGZyb20gdGhlIDIwMG1zIHBhdXNlIGlzIHN0YWxlIG9uY2UgdGhhdCBsb2FkIHdhcyBjYW5jZWxlZCBvciByZXBsYWNlZC4gKi9cbmZ1bmN0aW9uIGlzU3RhbGVGaWxlTG9hZEZpbmlzaChmaWxlTG9hZGluZzoge2xvYWRJZD86IG51bWJlcn0gfCBmYWxzZSwgbG9hZElkPzogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGlmIChsb2FkSWQgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gIWZpbGVMb2FkaW5nIHx8IGZpbGVMb2FkaW5nLmxvYWRJZCAhPT0gbG9hZElkO1xufVxuXG4vKipcbiAqIEZpbmlzaCBhIGRlZmVycmVkIGZpbGUgbG9hZDoga2VlcCB0aGUgcGFyc2VkIGNhY2hlLCBjbGVhciB0aGUgbG9hZGluZyBmbGFnLFxuICogYW5kIGxlYXZlIHRoZSBBZGQgRGF0YSBtb2RhbCBvcGVuIHVudGlsIHRoZSB1c2VyIGNvbmZpcm1zLlxuICogQG1lbWJlcm9mIGNvbWJpbmVkVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHN0YWdlTG9hZGVkRmlsZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBTdGFnZUxvYWRlZEZpbGVzVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGlmIChpc1N0YWxlRmlsZUxvYWRGaW5pc2goc3RhdGUudmlzU3RhdGUuZmlsZUxvYWRpbmcsIGFjdGlvbi5sb2FkSWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG1vZGFsT3BlbiA9IHN0YXRlLnVpU3RhdGUuY3VycmVudE1vZGFsID09PSBBRERfREFUQV9JRDtcbiAgY29uc3QgcmVzdWx0ID0gYWN0aW9uLnJlc3VsdCB8fCBbXTtcbiAgY29uc3QgcHJldmlvdXMgPVxuICAgIG1vZGFsT3BlbiAmJiBBcnJheS5pc0FycmF5KHN0YXRlLnZpc1N0YXRlLnN0YWdlZFRvQWRkKSA/IHN0YXRlLnZpc1N0YXRlLnN0YWdlZFRvQWRkIDogW107XG4gIGNvbnN0IHN0YWdlZFRvQWRkID0gWy4uLnByZXZpb3VzLCAuLi5yZXN1bHRdO1xuXG4gIHJldHVybiBjb21wb3NlXzxLZXBsZXJHbFN0YXRlPihbXG4gICAgcGlja18oJ3Zpc1N0YXRlJykoXG4gICAgICBtZXJnZV8oe1xuICAgICAgICBmaWxlTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IG1vZGFsT3BlbiA/IGtlcHRMb2FkRXJyb3JzKHN0YXRlLnZpc1N0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3MpIDoge30sXG4gICAgICAgIHN0YWdlZFRvQWRkOiBtb2RhbE9wZW4gJiYgc3RhZ2VkVG9BZGQubGVuZ3RoID8gc3RhZ2VkVG9BZGQgOiBudWxsXG4gICAgICB9KVxuICAgICksXG4gICAgcGlja18oJ3VpU3RhdGUnKShhcHBseV8odWlTdGF0ZUxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyLCBwYXlsb2FkXyhudWxsKSkpXG4gIF0pKHN0YXRlKTtcbn07XG5cbmZ1bmN0aW9uIHN0YWdlZEl0ZW1LZXkoaXRlbSk6IHN0cmluZyB7XG4gIHJldHVybiBpdGVtPy5tZXRhZGF0YT8uc291cmNlIHx8IGl0ZW0/LmluZm8/LmlkIHx8ICcnO1xufVxuXG4vKipcbiAqIEFkZCBkYXRhc2V0cyB0byB0aGUgQWRkIERhdGEgbGlzdCB3aXRob3V0IGludGVycnVwdGluZyBhIGZpbGUgdGhhdCBpcyBzdGlsbCBwYXJzaW5nLlxuICogQG1lbWJlcm9mIGNvbWJpbmVkVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGVuZFN0YWdlZExvYWRlZEZpbGVzVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogU3RhZ2VMb2FkZWRGaWxlc1VwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBpZiAoc3RhdGUudWlTdGF0ZS5jdXJyZW50TW9kYWwgIT09IEFERF9EQVRBX0lEKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHByZXZpb3VzID0gQXJyYXkuaXNBcnJheShzdGF0ZS52aXNTdGF0ZS5zdGFnZWRUb0FkZCkgPyBzdGF0ZS52aXNTdGF0ZS5zdGFnZWRUb0FkZCA6IFtdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldChwcmV2aW91cy5tYXAoc3RhZ2VkSXRlbUtleSkuZmlsdGVyKEJvb2xlYW4pKTtcbiAgY29uc3QgbmV4dCA9IChhY3Rpb24ucmVzdWx0IHx8IFtdKS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgY29uc3Qga2V5ID0gc3RhZ2VkSXRlbUtleShpdGVtKTtcbiAgICBpZiAoIWtleSB8fCBzZWVuLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNlZW4uYWRkKGtleSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuICBpZiAoIW5leHQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBjb21wb3NlXzxLZXBsZXJHbFN0YXRlPihbXG4gICAgcGlja18oJ3Zpc1N0YXRlJykobWVyZ2VfKHtzdGFnZWRUb0FkZDogWy4uLnByZXZpb3VzLCAuLi5uZXh0XX0pKVxuICBdKShzdGF0ZSk7XG59O1xuXG4vKipcbiAqIFRoZSBmaXJzdCBwbGFpbiBkYXRhc2V0IGluIGEgY29uZmlybWVkIHVwbG9hZCByZXBsYWNlcyB0aGUgc2VsZWN0ZWQgdGFibGUuXG4gKiBBIGtlcGxlci5nbCBtYXAganNvbiBpcyBhZGRlZCBhcyBhIG1hcC4gRnVydGhlciB0YWJsZXMgYXJlIGFkZGVkIGFmdGVyIHRoZSByZXBsYWNlbWVudC5cbiAqL1xuZnVuY3Rpb24gc3BsaXRSZXBsYWNlbWVudFVwbG9hZChwYXlsb2FkczogQWRkRGF0YVRvTWFwUGF5bG9hZFtdKToge1xuICBkYXRhc2V0VG9Vc2U6IFByb3RvRGF0YXNldCB8IG51bGw7XG4gIHJlbWFpbmRlcjogQWRkRGF0YVRvTWFwUGF5bG9hZFtdO1xufSB7XG4gIGNvbnN0IGRhdGFzZXRzOiBQcm90b0RhdGFzZXRbXSA9IFtdO1xuICBjb25zdCBtYXBzOiBBZGREYXRhVG9NYXBQYXlsb2FkW10gPSBbXTtcbiAgcGF5bG9hZHMuZm9yRWFjaChwYXlsb2FkID0+IHtcbiAgICBpZiAocGF5bG9hZC5jb25maWcpIHtcbiAgICAgIG1hcHMucHVzaChwYXlsb2FkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbGlzdCA9IChBcnJheS5pc0FycmF5KHBheWxvYWQuZGF0YXNldHMpID8gcGF5bG9hZC5kYXRhc2V0cyA6IFtwYXlsb2FkLmRhdGFzZXRzXSkuZmlsdGVyKFxuICAgICAgKGRhdGFzZXQpOiBkYXRhc2V0IGlzIFByb3RvRGF0YXNldCA9PiBCb29sZWFuKGRhdGFzZXQpXG4gICAgKTtcbiAgICBkYXRhc2V0cy5wdXNoKC4uLmxpc3QpO1xuICB9KTtcbiAgY29uc3QgW2RhdGFzZXRUb1VzZSwgLi4ubW9yZV0gPSBkYXRhc2V0cztcbiAgcmV0dXJuIHtcbiAgICBkYXRhc2V0VG9Vc2U6IGRhdGFzZXRUb1VzZSA/PyBudWxsLFxuICAgIHJlbWFpbmRlcjogW1xuICAgICAgLi4ubWFwcyxcbiAgICAgIC4uLihtb3JlLmxlbmd0aFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGF0YXNldHM6IG1vcmUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IHtrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsIGNlbnRlck1hcDogZmFsc2UsIGF1dG9DcmVhdGVMYXllcnM6IGZhbHNlfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSlcbiAgICBdXG4gIH07XG59XG5cbi8qKlxuICogVHVybiBhIGNvbmZpcm1lZCBBZGQgRGF0YSBzZWxlY3Rpb24gaW50byBhIGRhdGFzZXQgcmVwbGFjZW1lbnQuXG4gKiBMYXllcnMgYW5kIGZpbHRlcnMgbW92ZSBvbnRvIHRoZSBuZXcgdGFibGUuIFRoZSBvcmlnaW5hbCB0YWJsZSBpcyBkcm9wcGVkIHVubGVzcyBhc2tlZCB0byBzdGF5LlxuICogQG1lbWJlcm9mIGNvbWJpbmVkVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbmZpcm1SZXBsYWNlRGF0YXNldFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IENvbmZpcm1SZXBsYWNlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCBwYXlsb2FkcyA9IGZpbGVzVG9EYXRhUGF5bG9hZChhY3Rpb24ucmVzdWx0LCB7XG4gICAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICAgIGNlbnRlck1hcDogdHJ1ZSxcbiAgICBhdXRvQ3JlYXRlTGF5ZXJzOiBmYWxzZVxuICB9KTtcbiAgY29uc3QgY2xlYXJlZCA9IGNvbXBvc2VfKFtcbiAgICBwaWNrXygndmlzU3RhdGUnKShcbiAgICAgIG1lcmdlXyh7XG4gICAgICAgIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gICAgICAgIHN0YWdlZFRvQWRkOiBudWxsXG4gICAgICB9KVxuICAgIClcbiAgXSkoc3RhdGUpO1xuXG4gIGNvbnN0IHtkYXRhc2V0VG9Vc2UsIHJlbWFpbmRlcn0gPSBzcGxpdFJlcGxhY2VtZW50VXBsb2FkKHBheWxvYWRzKTtcbiAgaWYgKGRhdGFzZXRUb1VzZT8uaW5mbz8uaWQgJiYgYWN0aW9uLmRhdGFzZXRUb1JlcGxhY2VJZCkge1xuICAgIGNvbnN0IHJlcGxhY2VkID0gcmVwbGFjZURhdGFJbk1hcFVwZGF0ZXIoY2xlYXJlZCwge1xuICAgICAgcGF5bG9hZDoge1xuICAgICAgICBkYXRhc2V0VG9SZXBsYWNlSWQ6IGFjdGlvbi5kYXRhc2V0VG9SZXBsYWNlSWQsXG4gICAgICAgIGRhdGFzZXRUb1VzZSxcbiAgICAgICAgb3B0aW9uczoge2RlbGV0ZU9yaWdpbmFsRGF0YXNldDogYWN0aW9uLmRlbGV0ZU9yaWdpbmFsRGF0YXNldCAhPT0gZmFsc2V9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHJlcGxhY2VkICE9PSBjbGVhcmVkKSB7XG4gICAgICBpZiAoIXJlbWFpbmRlci5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbXBvc2VfKHJlbWFpbmRlci5tYXAocCA9PiBhcHBseV8oYWRkRGF0YVRvTWFwVXBkYXRlciwgcGF5bG9hZF8ocCkpKSkoXG4gICAgICAgIHJlcGxhY2VkXG4gICAgICApIGFzIEtlcGxlckdsU3RhdGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbXBvc2VfKHBheWxvYWRzLm1hcChwID0+IGFwcGx5XyhhZGREYXRhVG9NYXBVcGRhdGVyLCBwYXlsb2FkXyhwKSkpKShcbiAgICBjbGVhcmVkXG4gICkgYXMgS2VwbGVyR2xTdGF0ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGREYXRhVG9NYXBDb21wb3NlZCA9IGFkZERhdGFUb01hcFVwZGF0ZXI7XG5cbi8qKlxuICogSGVscGVyIHdoaWNoIHVwZGF0ZXMgbWFwIG92ZXJsYXkgYmxlbmRpbmcgbW9kZSBpbiB2aXNTdGF0ZSxcbiAqIGJ1dCBvbmx5IGlmIGl0J3Mgbm90IGN1cnJlbnRseSBpbiB0aGUgYG5vcm1hbGAgbW9kZS5cbiAqL1xuY29uc3QgdXBkYXRlT3ZlcmxheUJsZW5kaW5nID0gb3ZlcmxheUJsZW5kaW5nID0+IHZpc1N0YXRlID0+IHtcbiAgaWYgKHZpc1N0YXRlLm92ZXJsYXlCbGVuZGluZyAhPT0gT1ZFUkxBWV9CTEVORElOR1Mubm9ybWFsLnZhbHVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZpc1N0YXRlLFxuICAgICAgb3ZlcmxheUJsZW5kaW5nXG4gICAgfTtcbiAgfVxuICByZXR1cm4gdmlzU3RhdGU7XG59O1xuXG4vKipcbiAqIEhlbHBlciB3aGljaCB1cGRhdGVzIGBkYXJrQmFzZU1hcEVuYWJsZWRgIGluIGFsbCB0aGUgbGF5ZXJzIGluIHZpc1N0YXRlIHdoaWNoXG4gKiBoYXZlIHRoaXMgY29uZmlnIHNldHRpbmcgKG9yIGluIG9uZSBzcGVjaWZpYyBsYXllciBpZiB0aGUgYGxheWVySWRgIHBhcmFtIGlzIHByb3ZpZGVkKS5cbiAqL1xuY29uc3QgdXBkYXRlRGFya0Jhc2VNYXBMYXllcnMgPVxuICAoZGFya0Jhc2VNYXBFbmFibGVkOiBib29sZWFuLCBsYXllcklkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkgPT5cbiAgdmlzU3RhdGUgPT4gKHtcbiAgICAuLi52aXNTdGF0ZSxcbiAgICBsYXllcnM6IHZpc1N0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgICAgaWYgKCFsYXllcklkIHx8IGxheWVyLmlkID09PSBsYXllcklkKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MsICdkYXJrQmFzZU1hcEVuYWJsZWQnKSkge1xuICAgICAgICAgIGNvbnN0IHt2aXNDb25maWd9ID0gbGF5ZXIuY29uZmlnO1xuICAgICAgICAgIHJldHVybiBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICB2aXNDb25maWc6IHsuLi52aXNDb25maWcsIGRhcmtCYXNlTWFwRW5hYmxlZH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH0pXG4gIH0pO1xuXG4vKipcbiAqIFVwZGF0ZXIgdGhhdCBjaGFuZ2VzIHRoZSBtYXAgc3R5bGUgYnkgY2FsbGluZyBtYXBTdHlsZUNoYW5nZVVwZGF0ZXIgb24gdmlzU3RhdGUuXG4gKiBJbiBhZGRpdGlvbiB0byB0aGF0LCBpdCBkb2VzIHRoZSBmb2xsb3dpbmc6XG4gKlxuICogICAxLiBVcGRhdGUgbWFwIG92ZXJsYXkgYmxlbmRpbmcgbW9kZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbG9yTW9kZSBvZiB0aGVcbiAqICAgICAgYmFzZSBtYXAsIGJ1dCBvbmx5IGlmIGl0J3Mgbm90IGluIHRoZSBgbm9ybWFsYCBtb2RlLlxuICpcbiAqICAgMi4gVXBkYXRlIGFsbCB0aGUgbGF5ZXJzIHdoaWNoIGhhdmUgdGhlIGBkYXJrQmFzZU1hcEVuYWJsZWRgIGNvbmZpZyBzZXR0aW5nXG4gKiAgICAgIGFkanVzdGluZyBpdCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbG9yTW9kZSBvZiB0aGUgYmFzZSBtYXAuXG4gKlxuICovXG5leHBvcnQgY29uc3QgY29tYmluZWRNYXBTdHlsZUNoYW5nZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IE1hcFN0eWxlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IHtwYXlsb2FkfSA9IGFjdGlvbjtcbiAgY29uc3Qge21hcFN0eWxlfSA9IHN0YXRlO1xuICBjb25zdCBnZXRDb2xvck1vZGUgPSBrZXkgPT4gbWFwU3R5bGUubWFwU3R5bGVzW2tleV0/LmNvbG9yTW9kZTtcbiAgY29uc3QgcHJldkNvbG9yTW9kZSA9IGdldENvbG9yTW9kZShtYXBTdHlsZS5zdHlsZVR5cGUpO1xuICBjb25zdCBuZXh0Q29sb3JNb2RlID0gZ2V0Q29sb3JNb2RlKHBheWxvYWQuc3R5bGVUeXBlKTtcbiAgbGV0IHt2aXNTdGF0ZSwgbWFwU3RhdGV9ID0gc3RhdGU7XG4gIGlmIChuZXh0Q29sb3JNb2RlICE9PSBwcmV2Q29sb3JNb2RlKSB7XG4gICAgc3dpdGNoIChuZXh0Q29sb3JNb2RlKSB7XG4gICAgICBjYXNlIEJBU0VfTUFQX0NPTE9SX01PREVTLkRBUks6XG4gICAgICAgIHZpc1N0YXRlID0gY29tcG9zZV8oW1xuICAgICAgICAgIHVwZGF0ZU92ZXJsYXlCbGVuZGluZyhPVkVSTEFZX0JMRU5ESU5HUy5zY3JlZW4udmFsdWUpLFxuICAgICAgICAgIHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzKHRydWUpXG4gICAgICAgIF0pKHZpc1N0YXRlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEJBU0VfTUFQX0NPTE9SX01PREVTLkxJR0hUOlxuICAgICAgICB2aXNTdGF0ZSA9IGNvbXBvc2VfKFtcbiAgICAgICAgICB1cGRhdGVPdmVybGF5QmxlbmRpbmcoT1ZFUkxBWV9CTEVORElOR1MuZGFya2VuLnZhbHVlKSxcbiAgICAgICAgICB1cGRhdGVEYXJrQmFzZU1hcExheWVycyhmYWxzZSlcbiAgICAgICAgXSkodmlzU3RhdGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIGdsb2JlIGNvbmZpZyBjb2xvcnMgd2hlbiBzdHlsZSBjaGFuZ2VzIGFuZCBnbG9iZSBpcyBlbmFibGVkXG4gIGlmIChtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZCkge1xuICAgIC8vIFN3aXRjaGluZyBmcm9tIFwiTm8gQmFzZW1hcFwiIHRvIGEgYmFzZW1hcCAtIHJlc3RvcmUgYmFzZW1hcCBzdWItdG9nZ2xlc1xuICAgIGlmIChwYXlsb2FkLnN0eWxlVHlwZSAhPT0gTk9fTUFQX0lEICYmIG1hcFN0eWxlLnN0eWxlVHlwZSA9PT0gTk9fTUFQX0lEKSB7XG4gICAgICBtYXBTdGF0ZSA9IHtcbiAgICAgICAgLi4ubWFwU3RhdGUsXG4gICAgICAgIGdsb2JlOiB7XG4gICAgICAgICAgLi4ubWFwU3RhdGUuZ2xvYmUsXG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAuLi5tYXBTdGF0ZS5nbG9iZS5jb25maWcsXG4gICAgICAgICAgICBiYXNlbWFwOiB0cnVlLFxuICAgICAgICAgICAgbGFiZWxzOiB0cnVlLFxuICAgICAgICAgICAgYWRtaW5MaW5lczogdHJ1ZSxcbiAgICAgICAgICAgIHdhdGVyOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBtYXBTdGF0ZSA9IHN5bmNHbG9iZUNvbmZpZ0NvbG9yc1RvU3R5bGUobWFwU3RhdGUsIG1hcFN0eWxlLCBwYXlsb2FkLnN0eWxlVHlwZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHZpc1N0YXRlLFxuICAgIG1hcFN0YXRlLFxuICAgIG1hcFN0eWxlOiBtYXBTdHlsZUNoYW5nZVVwZGF0ZXIobWFwU3R5bGUsIHtwYXlsb2FkOiB7Li4ucGF5bG9hZH19KVxuICB9O1xufTtcblxuLyoqXG4gKiBEZXJpdmUgZ2xvYmUgYmFzZW1hcCBjb2xvcnMgKHN1cmZhY2UgLyB3YXRlciAvIGFkbWluIGxpbmVzKSBmcm9tIGEgbWFwIHN0eWxlIGFuZFxuICogcmV0dXJuIGFuIHVwZGF0ZWQgbWFwU3RhdGUgd2l0aCB0aG9zZSBjb2xvcnMgd3JpdHRlbiBpbnRvIGBnbG9iZS5jb25maWdgLiBVc2VkIGJvdGhcbiAqIHdoZW4gdGhlIGJhc2UgbWFwIHN0eWxlIGNoYW5nZXMgYW5kIHdoZW4gZW50ZXJpbmcgZ2xvYmUgbW9kZSwgc28gdGhlIGdsb2JlIGFsd2F5c1xuICogcmVmbGVjdHMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBiYXNlbWFwIGluc3RlYWQgb2YgdGhlIHN0YXRpYyBERUZBVUxUX0dMT0JFX0NPTkZJRy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNHbG9iZUNvbmZpZ0NvbG9yc1RvU3R5bGUoXG4gIG1hcFN0YXRlOiBNYXBTdGF0ZSxcbiAgbWFwU3R5bGU6IE1hcFN0eWxlLFxuICBzdHlsZVR5cGU6IHN0cmluZ1xuKTogTWFwU3RhdGUge1xuICBpZiAoIW1hcFN0YXRlLmdsb2JlPy5lbmFibGVkKSB7XG4gICAgcmV0dXJuIG1hcFN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0eWxlT2JqID0gbWFwU3R5bGUubWFwU3R5bGVzW3N0eWxlVHlwZV07XG4gIGNvbnN0IG5leHRHbG9iZUNvbmZpZyA9IHsuLi5tYXBTdGF0ZS5nbG9iZS5jb25maWd9O1xuXG4gIGlmIChzdHlsZVR5cGUgPT09IE5PX01BUF9JRCkge1xuICAgIG5leHRHbG9iZUNvbmZpZy5iYXNlbWFwID0gZmFsc2U7XG4gICAgbmV4dEdsb2JlQ29uZmlnLmxhYmVscyA9IGZhbHNlO1xuICAgIG5leHRHbG9iZUNvbmZpZy5hZG1pbkxpbmVzID0gZmFsc2U7XG4gICAgbmV4dEdsb2JlQ29uZmlnLndhdGVyID0gZmFsc2U7XG4gICAgbmV4dEdsb2JlQ29uZmlnLnN1cmZhY2VDb2xvciA9IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYWNrZ3JvdW5kRmlsbENvbG9yO1xuICAgIG5leHRHbG9iZUNvbmZpZy53YXRlckNvbG9yID0gREVGQVVMVF9CQVNFTUFQX0NPTE9SLmJhc2VtYXBXYXRlckZpbGxDb2xvcjtcbiAgICBuZXh0R2xvYmVDb25maWcuYWRtaW5MaW5lc0NvbG9yID0gREVGQVVMVF9CQVNFTUFQX0NPTE9SLmJhc2VtYXBBZG1pbkxpbmVDb2xvcjtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBiYXNlbWFwQ29sb3JzID0gbmV4dFN0eWxlT2JqXG4gICAgICA/IGdldEJhc2VtYXBDb2xvcnNGb3JTdHlsZShzdHlsZVR5cGUsIHtcbiAgICAgICAgICBzdHlsZTogbmV4dFN0eWxlT2JqLnN0eWxlLFxuICAgICAgICAgIGxheWVyR3JvdXBzOiBuZXh0U3R5bGVPYmoubGF5ZXJHcm91cHNcbiAgICAgICAgfSlcbiAgICAgIDogLy8gU3R5bGUgb2JqZWN0IG5vdCB5ZXQgbG9hZGVkIC0gdXNlIGtub3duIHByZXNldHMgYnkgc3R5bGUgdHlwZVxuICAgICAgICBnZXRCYXNlbWFwQ29sb3JzRm9yU3R5bGUoc3R5bGVUeXBlKTtcbiAgICBuZXh0R2xvYmVDb25maWcuc3VyZmFjZUNvbG9yID0gYmFzZW1hcENvbG9ycy5iYWNrZ3JvdW5kRmlsbENvbG9yO1xuICAgIG5leHRHbG9iZUNvbmZpZy53YXRlckNvbG9yID0gYmFzZW1hcENvbG9ycy5iYXNlbWFwV2F0ZXJGaWxsQ29sb3I7XG4gICAgbmV4dEdsb2JlQ29uZmlnLmFkbWluTGluZXNDb2xvciA9IGJhc2VtYXBDb2xvcnMuYmFzZW1hcEFkbWluTGluZUNvbG9yO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5tYXBTdGF0ZSxcbiAgICBnbG9iZToge1xuICAgICAgLi4ubWFwU3RhdGUuZ2xvYmUsXG4gICAgICBjb25maWc6IG5leHRHbG9iZUNvbmZpZ1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGVyIHRoYXQgc3dpdGNoZXMgdGhlIG1hcCB2aWV3IG1vZGUgKDJEIC8gM0QgLyBHbG9iZSkuIFJ1bnMgdGhlIGJhc2UgbWFwLXN0YXRlXG4gKiB1cGRhdGVyIGFuZCwgd2hlbiBlbnRlcmluZyBnbG9iZSBtb2RlLCBzeW5jcyB0aGUgZ2xvYmUgYmFzZW1hcCBjb2xvcnMgdG8gdGhlXG4gKiBjdXJyZW50bHkgc2VsZWN0ZWQgbWFwIHN0eWxlIHNvIHRoZSBnbG9iZSBkb2Vzbid0IHNob3cgc3RhbGUgZGVmYXVsdCBjb2xvcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBjb21iaW5lZFNldE1hcFZpZXdNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlNldE1hcFZpZXdNb2RlVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGxldCBtYXBTdGF0ZSA9IHNldE1hcFZpZXdNb2RlVXBkYXRlcihzdGF0ZS5tYXBTdGF0ZSwgYWN0aW9uKTtcblxuICBpZiAobWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQpIHtcbiAgICBtYXBTdGF0ZSA9IHN5bmNHbG9iZUNvbmZpZ0NvbG9yc1RvU3R5bGUobWFwU3RhdGUsIHN0YXRlLm1hcFN0eWxlLCBzdGF0ZS5tYXBTdHlsZS5zdHlsZVR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtYXBTdGF0ZVxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGVyIHRoYXQgY2hhbmdlcyB0aGUgbGF5ZXIgdHlwZSBieSBjYWxsaW5nIGBsYXllclR5cGVDaGFuZ2VVcGRhdGVyYCBvbiB2aXNTdGF0ZS5cbiAqIEluIGFkZGl0aW9uIHRvIHRoYXQsIGlmIHRoZSBuZXcgbGF5ZXIgdHlwZSBoYXMgdGhlIGBkYXJrQmFzZU1hcEVuYWJsZWRgIGNvbmZpZ1xuICogc2V0dGluZywgd2UgYWRqdXN0IGl0IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29sb3JNb2RlIG9mIHRoZSBiYXNlIG1hcC5zXG4gKi9cbmV4cG9ydCBjb25zdCBjb21iaW5lZExheWVyVHlwZUNoYW5nZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IExheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBsZXQge3Zpc1N0YXRlfSA9IHN0YXRlO1xuICBjb25zdCBvbGRMYXllckluZGV4ID0gdmlzU3RhdGUubGF5ZXJzLmZpbmRJbmRleChsYXllciA9PiBsYXllciA9PT0gYWN0aW9uLm9sZExheWVyKTtcbiAgdmlzU3RhdGUgPSBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKHZpc1N0YXRlLCBhY3Rpb24pO1xuICBjb25zdCBuZXdMYXllciA9IHZpc1N0YXRlLmxheWVyc1tvbGRMYXllckluZGV4XTtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXdMYXllcj8udmlzQ29uZmlnU2V0dGluZ3MsICdkYXJrQmFzZU1hcEVuYWJsZWQnKSkge1xuICAgIGNvbnN0IHttYXBTdHlsZX0gPSBzdGF0ZTtcbiAgICBjb25zdCB7Y29sb3JNb2RlfSA9IG1hcFN0eWxlLm1hcFN0eWxlc1ttYXBTdHlsZS5zdHlsZVR5cGVdO1xuICAgIGNvbnN0IHtkYXJrQmFzZU1hcEVuYWJsZWR9ID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZztcbiAgICBzd2l0Y2ggKGNvbG9yTW9kZSkge1xuICAgICAgY2FzZSBCQVNFX01BUF9DT0xPUl9NT0RFUy5EQVJLOlxuICAgICAgICBpZiAoIWRhcmtCYXNlTWFwRW5hYmxlZCkge1xuICAgICAgICAgIHZpc1N0YXRlID0gdXBkYXRlRGFya0Jhc2VNYXBMYXllcnModHJ1ZSwgbmV3TGF5ZXIuaWQpKHZpc1N0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQkFTRV9NQVBfQ09MT1JfTU9ERVMuTElHSFQ6XG4gICAgICAgIGlmIChkYXJrQmFzZU1hcEVuYWJsZWQpIHtcbiAgICAgICAgICB2aXNTdGF0ZSA9IHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzKGZhbHNlLCBuZXdMYXllci5pZCkodmlzU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICB2aXNTdGF0ZVxuICB9O1xufTtcblxuLyoqXG4gKiBNYWtlIG1hcExlZ2VuZCBhY3RpdmUgd2hlbiB0b2dnbGVTcGxpdE1hcCBhY3Rpb24gaXMgY2FsbGVkXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IFRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcihzdGF0ZS52aXNTdGF0ZSwgYWN0aW9uKSxcbiAgICB1aVN0YXRlOiB1aVN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyKHN0YXRlLnVpU3RhdGUpLFxuICAgIG1hcFN0YXRlOiBtYXBTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcihzdGF0ZS5tYXBTdGF0ZSlcbiAgfTtcblxuICBjb25zdCBpc1NwbGl0ID0gbmV3U3RhdGUudmlzU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCAhPT0gMDtcbiAgY29uc3QgaXNMZWdlbmRBY3RpdmUgPSBuZXdTdGF0ZS51aVN0YXRlLm1hcENvbnRyb2xzPy5tYXBMZWdlbmQ/LmFjdGl2ZTtcbiAgaWYgKGlzU3BsaXQgJiYgIWlzTGVnZW5kQWN0aXZlKSB7XG4gICAgbmV3U3RhdGUudWlTdGF0ZSA9IHRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyKG5ld1N0YXRlLnVpU3RhdGUsIHtcbiAgICAgIHBheWxvYWQ6IHtwYW5lbElkOiAnbWFwTGVnZW5kJywgaW5kZXg6IGFjdGlvbi5wYXlsb2FkfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBTZXQgbWFwIHNwbGl0IG1vZGUgdXBkYXRlciAtIGNvb3JkaW5hdGVzIHN0YXRlIGNoYW5nZXMgYWNyb3NzIHZpc1N0YXRlLCBtYXBTdGF0ZSwgYW5kIHVpU3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcFNwbGl0TW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5TZXRNYXBTcGxpdE1vZGVVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3Qge21hcFNwbGl0TW9kZX0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3QgcHJldk1vZGUgPSBzdGF0ZS5tYXBTdGF0ZS5tYXBTcGxpdE1vZGU7XG5cbiAgaWYgKG1hcFNwbGl0TW9kZSA9PT0gcHJldk1vZGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdNYXBTdGF0ZSA9IG1hcFN0YXRlU2V0TWFwU3BsaXRNb2RlVXBkYXRlcihzdGF0ZS5tYXBTdGF0ZSwgYWN0aW9uKTtcblxuICBsZXQgbmV3VmlzU3RhdGUgPSB7Li4uc3RhdGUudmlzU3RhdGV9O1xuXG4gIHN3aXRjaCAobWFwU3BsaXRNb2RlKSB7XG4gICAgY2FzZSBNYXBTcGxpdE1vZGUuU0lOR0xFX01BUDpcbiAgICAgIG5ld1Zpc1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdWaXNTdGF0ZSxcbiAgICAgICAgc3BsaXRNYXBzOiBbXVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWFwU3BsaXRNb2RlLkRVQUxfTUFQOlxuICAgIGNhc2UgTWFwU3BsaXRNb2RlLlNXSVBFX0NPTVBBUkU6XG4gICAgICBpZiAocHJldk1vZGUgPT09IE1hcFNwbGl0TW9kZS5TSU5HTEVfTUFQKSB7XG4gICAgICAgIG5ld1Zpc1N0YXRlID0ge1xuICAgICAgICAgIC4uLm5ld1Zpc1N0YXRlLFxuICAgICAgICAgIHNwbGl0TWFwczogY29tcHV0ZVNwbGl0TWFwTGF5ZXJzKG5ld1Zpc1N0YXRlLmxheWVycywge1xuICAgICAgICAgICAgZHVwbGljYXRlOiBtYXBTcGxpdE1vZGUgPT09IE1hcFNwbGl0TW9kZS5TV0lQRV9DT01QQVJFXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGxldCBuZXdVaVN0YXRlID0gdWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcihzdGF0ZS51aVN0YXRlKTtcblxuICBjb25zdCBpc1NwbGl0ID0gbmV3VmlzU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCAhPT0gMDtcbiAgY29uc3QgaXNMZWdlbmRBY3RpdmUgPSBuZXdVaVN0YXRlLm1hcENvbnRyb2xzPy5tYXBMZWdlbmQ/LmFjdGl2ZTtcbiAgaWYgKGlzU3BsaXQgJiYgIWlzTGVnZW5kQWN0aXZlKSB7XG4gICAgbmV3VWlTdGF0ZSA9IHRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyKG5ld1VpU3RhdGUsIHtcbiAgICAgIHBheWxvYWQ6IHtwYW5lbElkOiAnbWFwTGVnZW5kJywgaW5kZXg6IDB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIG1hcFN0YXRlOiBuZXdNYXBTdGF0ZSxcbiAgICB2aXNTdGF0ZTogbmV3VmlzU3RhdGUsXG4gICAgdWlTdGF0ZTogbmV3VWlTdGF0ZVxuICB9O1xufTtcblxuY29uc3QgZGVmYXVsdFJlcGxhY2VEYXRhVG9NYXBPcHRpb25zID0ge1xuICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gIGNlbnRlck1hcDogdHJ1ZSxcbiAgYXV0b0NyZWF0ZUxheWVyczogZmFsc2Vcbn07XG5cbi8qKlxuICogVXBkYXRlciByZXBsYWNlIGEgZGF0YXNldCBpbiBzdGF0ZVxuICovXG5leHBvcnQgY29uc3QgcmVwbGFjZURhdGFJbk1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICB7cGF5bG9hZH06IHtwYXlsb2FkOiBSZXBsYWNlRGF0YUluTWFwUGF5bG9hZH1cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCB7ZGF0YXNldFRvUmVwbGFjZUlkLCBkYXRhc2V0VG9Vc2UsIG9wdGlvbnMgPSB7fX0gPSBwYXlsb2FkO1xuICBjb25zdCB7ZGVsZXRlT3JpZ2luYWxEYXRhc2V0ID0gdHJ1ZSwgLi4ucmVwbGFjZU9wdGlvbnN9ID0gb3B0aW9ucztcbiAgY29uc3QgYWRkRGF0YVRvTWFwT3B0aW9ucyA9IHsuLi5kZWZhdWx0UmVwbGFjZURhdGFUb01hcE9wdGlvbnMsIC4uLnJlcGxhY2VPcHRpb25zfTtcblxuICAvLyBjaGVjayBpZiBkYXRhc2V0IGlzIHRoZXJlXG4gIGlmICghc3RhdGUudmlzU3RhdGUuZGF0YXNldHNbZGF0YXNldFRvUmVwbGFjZUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBkYXRhc2V0VG9Vc2UgaXMgUHJvdG9EYXRhc2V0XG4gIGNvbnN0IGRhdGFJZFRvVXNlID0gZGF0YXNldFRvVXNlLmluZm8uaWQ7XG4gIGlmICghZGF0YUlkVG9Vc2UpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gcmVtb3ZlIGRhdGFzZXQgYW5kIHB1dCBkZXBlbmRlbmNpZXMgaW4gdG9CZU1lcmdlZFxuICBjb25zdCBwcmVwYXJlZFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIHZpc1N0YXRlOiBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZShzdGF0ZS52aXNTdGF0ZSwgZGF0YXNldFRvUmVwbGFjZUlkLCBkYXRhSWRUb1VzZSwge1xuICAgICAgZGVsZXRlT3JpZ2luYWxEYXRhc2V0XG4gICAgfSlcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBhZGREYXRhVG9NYXBVcGRhdGVyKFxuICAgIHByZXBhcmVkU3RhdGUsXG4gICAgcGF5bG9hZF8oe1xuICAgICAgZGF0YXNldHM6IGRhdGFzZXRUb1VzZSxcbiAgICAgIC8vIHNob3VsZCB6b29tIHRvIG5ldyBkYXRhc2V0XG4gICAgICBvcHRpb25zOiBhZGREYXRhVG9NYXBPcHRpb25zXG4gICAgfSlcbiAgKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLGdCQUFBLEdBQUFDLE9BQUE7QUFPQSxJQUFBQyxpQkFBQSxHQUFBRCxPQUFBO0FBT0EsSUFBQUUsaUJBQUEsR0FBQUYsT0FBQTtBQU1BLElBQUFHLGlCQUFBLEdBQUFILE9BQUE7QUFJQSxJQUFBSSxXQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxnQkFBQSxH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
668
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdWlTdGF0ZVVwZGF0ZXJzIiwicmVxdWlyZSIsIl92aXNTdGF0ZVVwZGF0ZXJzIiwiX21hcFN0YXRlVXBkYXRlcnMiLCJfbWFwU3R5bGVVcGRhdGVycyIsIl9wcm9jZXNzb3JzIiwiX2NvbXBvc2VySGVscGVycyIsIl9hY3Rpb25zIiwiX3V0aWxzIiwiX2RhdGFVdGlscyIsIl9jb25zdGFudHMiLCJfZGVja2dsTGF5ZXJzIiwiX2V4Y2x1ZGVkIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJjb21iaW5lZFVwZGF0ZXJzIiwiaXNWYWxpZENvbmZpZyIsImV4cG9ydHMiLCJjb25maWciLCJpc1BsYWluT2JqZWN0IiwidmVyc2lvbiIsImRlZmF1bHRBZGREYXRhVG9NYXBPcHRpb25zIiwiY2VudGVyTWFwIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwiYXV0b0NyZWF0ZUxheWVycyIsImF1dG9DcmVhdGVUb29sdGlwcyIsImFkZERhdGFUb01hcFVwZGF0ZXIiLCJzdGF0ZSIsIl9yZWYiLCJfZGF0YXNldHMkIiwiX2RhdGFzZXRzJDIiLCJfZGF0YXNldHMkMyIsInBheWxvYWQiLCJvbkZpbmlzaCIsImRhdGFzZXRzIiwiaW5mbyIsIm9wdGlvbnMiLCJpc1Byb2dyZXNzaXZlTG9hZGluZyIsIkFycmF5IiwiaXNBcnJheSIsImZvcm1hdCIsImlkIiwidmlzU3RhdGUiLCJjb21wb3NlXyIsInBpY2tfIiwiYXBwbHlfIiwidmlzU3RhdGVVcGRhdGVWaXNEYXRhVXBkYXRlciIsInBhcnNlZENvbmZpZyIsInNjaGVtYSIsInBhcnNlU2F2ZWRDb25maWciLCJvbGRMYXllcnMiLCJsYXllcnMiLCJmaWx0ZXJOZXdseUFkZGVkTGF5ZXJzIiwibmwiLCJmaW5kIiwib2wiLCJmaW5kTWFwQm91bmRzSWZDZW50ZXJlZCIsImJvdW5kcyIsImZpbmRNYXBCb3VuZHMiLCJ1bmRlZmluZWQiLCJpZl8iLCJCb29sZWFuIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJ3aXRoXyIsIl9yZWYyIiwic3RhdGVNYXBDb25maWdVcGRhdGVyIiwicGF5bG9hZF8iLCJzdHlsZU1hcENvbmZpZ1VwZGF0ZXIiLCJ1aVN0YXRlUmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJ1aVN0YXRlTG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIiLCJ0b2dnbGVNb2RhbFVwZGF0ZXIiLCJtZXJnZV8iLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZWFkT25seSIsImxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyIiwiYWN0aW9uIiwiaXNTdGFsZUZpbGVMb2FkRmluaXNoIiwiZmlsZUxvYWRpbmciLCJsb2FkSWQiLCJwcm9ncmVzc2l2ZVN0ZXBzIiwicmVzdWx0IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImZpbGVDYWNoZVRvUHJvZ3Jlc3NpdmVTdGVwcyIsIl9wcm9ncmVzc2l2ZVN0ZXBzIiwiX3RvQXJyYXkyIiwiX3Byb2dyZXNzaXZlU3RlcHMkIiwiY3VycmVudFN0ZXAiLCJyZW1haW5pbmdTdGVwcyIsInNsaWNlIiwicGF5bG9hZHMiLCJmaWxlc1RvRGF0YVBheWxvYWQiLCJjb250aW51YXRpb25PcHRpb25zIiwibG9hZEZpbGVzU3VjY2VzcyIsIm5leHRTdGF0ZSIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJzdGFnZWRUb0FkZCIsInN0YXRlV2l0aERhdGEiLCJtYXAiLCJwIiwiaW5kZXgiLCJrZXB0TG9hZEVycm9ycyIsInByb2dyZXNzIiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIiwiX3JlZjMiLCJfcmVmNCIsIl9zbGljZWRUb0FycmF5MiIsInZhbHVlIiwiZXJyb3IiLCJzdGFnZUxvYWRlZEZpbGVzVXBkYXRlciIsIm1vZGFsT3BlbiIsInVpU3RhdGUiLCJjdXJyZW50TW9kYWwiLCJBRERfREFUQV9JRCIsInByZXZpb3VzIiwic3RhZ2VkSXRlbUtleSIsIml0ZW0iLCJfaXRlbSRtZXRhZGF0YSIsIl9pdGVtJGluZm8iLCJtZXRhZGF0YSIsInNvdXJjZSIsImFwcGVuZFN0YWdlZExvYWRlZEZpbGVzVXBkYXRlciIsInNlZW4iLCJTZXQiLCJuZXh0Iiwia2V5IiwiaGFzIiwiYWRkIiwic3BsaXRSZXBsYWNlbWVudFVwbG9hZCIsIm1hcHMiLCJsaXN0IiwiZGF0YXNldCIsImRhdGFzZXRUb1VzZSIsIm1vcmUiLCJyZW1haW5kZXIiLCJjb25maXJtUmVwbGFjZURhdGFzZXRVcGRhdGVyIiwiX2RhdGFzZXRUb1VzZSRpbmZvIiwiY2xlYXJlZCIsIl9zcGxpdFJlcGxhY2VtZW50VXBsbyIsImRhdGFzZXRUb1JlcGxhY2VJZCIsInJlcGxhY2VkIiwicmVwbGFjZURhdGFJbk1hcFVwZGF0ZXIiLCJkZWxldGVPcmlnaW5hbERhdGFzZXQiLCJhZGREYXRhVG9NYXBDb21wb3NlZCIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwibm9ybWFsIiwidXBkYXRlRGFya0Jhc2VNYXBMYXllcnMiLCJkYXJrQmFzZU1hcEVuYWJsZWQiLCJsYXllcklkIiwibGF5ZXIiLCJ2aXNDb25maWdTZXR0aW5ncyIsInZpc0NvbmZpZyIsInVwZGF0ZUxheWVyQ29uZmlnIiwiY29tYmluZWRNYXBTdHlsZUNoYW5nZVVwZGF0ZXIiLCJfbWFwU3RhdGUkZ2xvYmUiLCJtYXBTdHlsZSIsImdldENvbG9yTW9kZSIsIl9tYXBTdHlsZSRtYXBTdHlsZXMkayIsIm1hcFN0eWxlcyIsImNvbG9yTW9kZSIsInByZXZDb2xvck1vZGUiLCJzdHlsZVR5cGUiLCJuZXh0Q29sb3JNb2RlIiwibWFwU3RhdGUiLCJCQVNFX01BUF9DT0xPUl9NT0RFUyIsIkRBUksiLCJzY3JlZW4iLCJMSUdIVCIsImRhcmtlbiIsImdsb2JlIiwiZW5hYmxlZCIsIk5PX01BUF9JRCIsImJhc2VtYXAiLCJsYWJlbHMiLCJhZG1pbkxpbmVzIiwid2F0ZXIiLCJzeW5jR2xvYmVDb25maWdDb2xvcnNUb1N0eWxlIiwibWFwU3R5bGVDaGFuZ2VVcGRhdGVyIiwiX21hcFN0YXRlJGdsb2JlMiIsIm5leHRTdHlsZU9iaiIsIm5leHRHbG9iZUNvbmZpZyIsInN1cmZhY2VDb2xvciIsIkRFRkFVTFRfQkFTRU1BUF9DT0xPUiIsImJhY2tncm91bmRGaWxsQ29sb3IiLCJ3YXRlckNvbG9yIiwiYmFzZW1hcFdhdGVyRmlsbENvbG9yIiwiYWRtaW5MaW5lc0NvbG9yIiwiYmFzZW1hcEFkbWluTGluZUNvbG9yIiwiYmFzZW1hcENvbG9ycyIsImdldEJhc2VtYXBDb2xvcnNGb3JTdHlsZSIsInN0eWxlIiwibGF5ZXJHcm91cHMiLCJjb21iaW5lZFNldE1hcFZpZXdNb2RlVXBkYXRlciIsIl9tYXBTdGF0ZSRnbG9iZTMiLCJzZXRNYXBWaWV3TW9kZVVwZGF0ZXIiLCJjb21iaW5lZExheWVyVHlwZUNoYW5nZVVwZGF0ZXIiLCJvbGRMYXllckluZGV4IiwiZmluZEluZGV4Iiwib2xkTGF5ZXIiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibmV3TGF5ZXIiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJfbmV3U3RhdGUkdWlTdGF0ZSRtYXAiLCJuZXdTdGF0ZSIsInZpc1N0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwidWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsIm1hcFN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiaXNTcGxpdCIsInNwbGl0TWFwcyIsImlzTGVnZW5kQWN0aXZlIiwibWFwQ29udHJvbHMiLCJtYXBMZWdlbmQiLCJhY3RpdmUiLCJ0b2dnbGVNYXBDb250cm9sVXBkYXRlciIsInBhbmVsSWQiLCJzZXRNYXBTcGxpdE1vZGVVcGRhdGVyIiwiX25ld1VpU3RhdGUkbWFwQ29udHJvIiwibWFwU3BsaXRNb2RlIiwicHJldk1vZGUiLCJuZXdNYXBTdGF0ZSIsIm1hcFN0YXRlU2V0TWFwU3BsaXRNb2RlVXBkYXRlciIsIm5ld1Zpc1N0YXRlIiwiTWFwU3BsaXRNb2RlIiwiU0lOR0xFX01BUCIsIkRVQUxfTUFQIiwiU1dJUEVfQ09NUEFSRSIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsIm5ld1VpU3RhdGUiLCJkZWZhdWx0UmVwbGFjZURhdGFUb01hcE9wdGlvbnMiLCJfcmVmNSIsIl9wYXlsb2FkJG9wdGlvbnMiLCJfb3B0aW9ucyRkZWxldGVPcmlnaW4iLCJyZXBsYWNlT3B0aW9ucyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJhZGREYXRhVG9NYXBPcHRpb25zIiwiZGF0YUlkVG9Vc2UiLCJwcmVwYXJlZFN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tYmluZWQtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtcbiAgdG9nZ2xlTW9kYWxVcGRhdGVyLFxuICBsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciBhcyB1aVN0YXRlTG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIsXG4gIHRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyLFxuICB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgYXMgdWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcixcbiAgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgYXMgdWlTdGF0ZVJlY2VpdmVNYXBDb25maWdVcGRhdGVyXG59IGZyb20gJy4vdWktc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtcbiAgdXBkYXRlVmlzRGF0YVVwZGF0ZXIgYXMgdmlzU3RhdGVVcGRhdGVWaXNEYXRhVXBkYXRlcixcbiAgc2V0TWFwSW5mb1VwZGF0ZXIsXG4gIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIsXG4gIHRvZ2dsZVNwbGl0TWFwVXBkYXRlciBhcyB2aXNTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcixcbiAgcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2Vcbn0gZnJvbSAnLi92aXMtc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtcbiAgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgYXMgc3RhdGVNYXBDb25maWdVcGRhdGVyLFxuICB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgYXMgbWFwU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIsXG4gIHNldE1hcFNwbGl0TW9kZVVwZGF0ZXIgYXMgbWFwU3RhdGVTZXRNYXBTcGxpdE1vZGVVcGRhdGVyLFxuICBzZXRNYXBWaWV3TW9kZVVwZGF0ZXJcbn0gZnJvbSAnLi9tYXAtc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtcbiAgbWFwU3R5bGVDaGFuZ2VVcGRhdGVyLFxuICByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciBhcyBzdHlsZU1hcENvbmZpZ1VwZGF0ZXJcbn0gZnJvbSAnLi9tYXAtc3R5bGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtmaWxlQ2FjaGVUb1Byb2dyZXNzaXZlU3RlcHMsIGZpbGVzVG9EYXRhUGF5bG9hZH0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcbmltcG9ydCB0eXBlIHtGaWxlQ2FjaGVJdGVtfSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuaW1wb3J0IHtwYXlsb2FkXywgYXBwbHlfLCB3aXRoXywgaWZfLCBjb21wb3NlXywgbWVyZ2VfLCBwaWNrX30gZnJvbSAnLi9jb21wb3Nlci1oZWxwZXJzJztcbmltcG9ydCB7TWFwU3RhdGUsIFVpU3RhdGUsIEFkZERhdGFUb01hcFBheWxvYWQsIFBhcnNlZENvbmZpZywgUHJvdG9EYXRhc2V0fSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TWFwU3R5bGV9IGZyb20gJy4vbWFwLXN0eWxlLXVwZGF0ZXJzJztcbmltcG9ydCB7UHJvdmlkZXJTdGF0ZX0gZnJvbSAnLi9wcm92aWRlci1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICBsb2FkRmlsZXNTdWNjZXNzVXBkYXRlckFjdGlvbixcbiAgQ29uZmlybVJlcGxhY2VEYXRhc2V0VXBkYXRlckFjdGlvbixcbiAgU3RhZ2VMb2FkZWRGaWxlc1VwZGF0ZXJBY3Rpb24sXG4gIGxvYWRGaWxlc1N1Y2Nlc3MsXG4gIE1hcFN0eWxlQ2hhbmdlVXBkYXRlckFjdGlvbixcbiAgTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvbixcbiAgVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uLFxuICBSZXBsYWNlRGF0YUluTWFwUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge1Zpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtpc1BsYWluT2JqZWN0LCBjb21wdXRlU3BsaXRNYXBMYXllcnN9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtmaW5kTWFwQm91bmRzfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuaW1wb3J0IHtcbiAgQkFTRV9NQVBfQ09MT1JfTU9ERVMsXG4gIE9WRVJMQVlfQkxFTkRJTkdTLFxuICBOT19NQVBfSUQsXG4gIE1hcFNwbGl0TW9kZSxcbiAgQUREX0RBVEFfSURcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtnZXRCYXNlbWFwQ29sb3JzRm9yU3R5bGUsIERFRkFVTFRfQkFTRU1BUF9DT0xPUn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuZXhwb3J0IHR5cGUgS2VwbGVyR2xTdGF0ZSA9IHtcbiAgdmlzU3RhdGU6IFZpc1N0YXRlO1xuICBtYXBTdGF0ZTogTWFwU3RhdGU7XG4gIG1hcFN0eWxlOiBNYXBTdHlsZTtcbiAgdWlTdGF0ZTogVWlTdGF0ZTtcbiAgcHJvdmlkZXJTdGF0ZTogUHJvdmlkZXJTdGF0ZTtcbn07XG5cbnR5cGUgUHJvZ3Jlc3NpdmVMb2FkRmlsZXNTdWNjZXNzQWN0aW9uID0gbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb24gJiB7XG4gIHByb2dyZXNzaXZlU3RlcHM/OiBGaWxlQ2FjaGVJdGVtW11bXTtcbn07XG5cbnR5cGUgUHJvZ3Jlc3NpdmVMb2FkQ29udGludWF0aW9uID0gUmV0dXJuVHlwZTx0eXBlb2YgbG9hZEZpbGVzU3VjY2Vzcz4gJiB7XG4gIHByb2dyZXNzaXZlU3RlcHM6IEZpbGVDYWNoZUl0ZW1bXVtdO1xufTtcblxuLy8gY29tcG9zZSBhY3Rpb24gdG8gYXBwbHkgcmVzdWx0IG11bHRpcGxlIHJlZHVjZXJzLCB3aXRoIHRoZSBvdXRwdXQgb2Ygb25lXG5cbi8qKlxuICogU29tZSBhY3Rpb25zIHdpbGwgYWZmZWN0IHRoZSBlbnRpcmUga2VwbGVyLmxnIGluc3RhbmNlIHN0YXRlLlxuICogVGhlIHVwZGF0ZXJzIGZvciB0aGVzZSBhY3Rpb25zIGlzIGV4cG9ydGVkIGFzIGBjb21iaW5lZFVwZGF0ZXJzYC4gVGhlc2UgdXBkYXRlciB0YWtlIHRoZSBlbnRpcmUgaW5zdGFuY2Ugc3RhdGVcbiAqIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHtjb21iaW5lZFVwZGF0ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbiAqIC8vIFJvb3QgUmVkdWNlclxuICogY29uc3QgcmVkdWNlcnMgPSBjb21iaW5lUmVkdWNlcnMoe1xuICogIGtlcGxlckdsOiBrZXBsZXJHbFJlZHVjZXIsXG4gKiAgYXBwOiBhcHBSZWR1Y2VyXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBjb21wb3NlZFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICogIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAqICAgIC8vIGFkZCBkYXRhIHRvIG1hcCBhZnRlciByZWNlaXZpbmcgZGF0YSBmcm9tIHJlbW90ZSBzb3VyY2VzXG4gKiAgICBjYXNlICdMT0FEX1JFTU9URV9SRVNPVVJDRV9TVUNDRVNTJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICAvLyBwYXNzIGluIGtlcGxlci5nbCBpbnN0YW5jZSBzdGF0ZSB0byBjb21iaW5lZFVwZGF0ZXJzXG4gKiAgICAgICAgICBtYXA6ICBjb21iaW5lZFVwZGF0ZXJzLmFkZERhdGFUb01hcFVwZGF0ZXIoXG4gKiAgICAgICAgICAgc3RhdGUua2VwbGVyR2wubWFwLFxuICogICAgICAgICAgIHtcbiAqICAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAqICAgICAgICAgICAgICAgZGF0YXNldHM6IGFjdGlvbi5kYXRhc2V0cyxcbiAqICAgICAgICAgICAgICAgb3B0aW9uczoge3JlYWRPbmx5OiB0cnVlfSxcbiAqICAgICAgICAgICAgICAgY29uZmlnOiBhY3Rpb24uY29uZmlnXG4gKiAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICB9XG4gKiAgICAgICAgICApXG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IGNvbWJpbmVkVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuZXhwb3J0IGNvbnN0IGlzVmFsaWRDb25maWcgPSBjb25maWcgPT5cbiAgaXNQbGFpbk9iamVjdChjb25maWcpICYmIGlzUGxhaW5PYmplY3QoY29uZmlnLmNvbmZpZykgJiYgY29uZmlnLnZlcnNpb247XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0QWRkRGF0YVRvTWFwT3B0aW9ucyA9IHtcbiAgY2VudGVyTWFwOiB0cnVlLFxuICBrZWVwRXhpc3RpbmdDb25maWc6IGZhbHNlLFxuICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlLFxuICBhdXRvQ3JlYXRlVG9vbHRpcHM6IHRydWVcbn07XG5cbi8qKlxuICogQ29tYmluZSBkYXRhIGFuZCBmdWxsIGNvbmZpZ3VyYXRpb24gdXBkYXRlIGluIGEgc2luZ2xlIGFjdGlvblxuICpcbiAqIEBtZW1iZXJvZiBjb21iaW5lZFVwZGF0ZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGUga2VwbGVyLmdsIGluc3RhbmNlIHN0YXRlLCBjb250YWluaW5nIGFsbCBzdWJyZWR1Y2VyIHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uLnBheWxvYWQgYHtkYXRhc2V0cywgb3B0aW9ucywgY29uZmlnfWBcbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZC5kYXRhc2V0cyAtICoqKnJlcXVpcmVkKiogZGF0YXNldHMgY2FuIGJlIGEgZGF0YXNldCBvciBhbiBhcnJheSBvZiBkYXRhc2V0c1xuICogRWFjaCBkYXRhc2V0IG9iamVjdCBuZWVkcyB0byBoYXZlIGBpbmZvYCBhbmQgYGRhdGFgIHByb3BlcnR5LlxuICogQHBhcmFtIFthY3Rpb24ucGF5bG9hZC5vcHRpb25zXSBvcHRpb24gb2JqZWN0IGB7Y2VudGVyTWFwOiB0cnVlLCBwYWRkaW5nOiB7bGVmdDogMzAwfX1gXG4gKiBAcGFyYW0gW2FjdGlvbi5wYXlsb2FkLmNvbmZpZ10gbWFwIGNvbmZpZ1xuICogQHBhcmFtIFthY3Rpb24ucGF5bG9hZC5pbmZvXSBtYXAgaW5mbyBjb250YWlucyB0aXRsZSBhbmQgZGVzY3JpcHRpb25cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERhdGFzZXRcbiAqIEBwcm9wZXJ0eSBpbmZvIC1pbmZvIG9mIGEgZGF0YXNldFxuICogQHByb3BlcnR5IGluZm8uaWQgLSBpZCBvZiB0aGlzIGRhdGFzZXQuIElmIGNvbmZpZyBpcyBkZWZpbmVkLCBgaWRgIHNob3VsZCBtYXRjaGVzIHRoZSBgZGF0YUlkYCBpbiBjb25maWcuXG4gKiBAcHJvcGVydHkgaW5mby5sYWJlbCAtIEEgZGlzcGxheSBuYW1lIG9mIHRoaXMgZGF0YXNldFxuICogQHByb3BlcnR5IGRhdGEgLSAqKipyZXF1aXJlZCoqIFRoZSBkYXRhIG9iamVjdCwgaW4gYSB0YWJ1bGFyIGZvcm1hdCB3aXRoIDIgcHJvcGVydGllcyBgZmllbGRzYCBhbmQgYHJvd3NgXG4gKiBAcHJvcGVydHkgZGF0YS5maWVsZHMgLSAqKipyZXF1aXJlZCoqIEFycmF5IG9mIGZpZWxkcyxcbiAqIEBwcm9wZXJ0eSBkYXRhLmZpZWxkcy5uYW1lIC0gKioqcmVxdWlyZWQqKiBOYW1lIG9mIHRoZSBmaWVsZCxcbiAqIEBwcm9wZXJ0eSBkYXRhLnJvd3MgLSAqKipyZXF1aXJlZCoqIEFycmF5IG9mIHJvd3MsIGluIGEgdGFidWxhciBmb3JtYXQgd2l0aCBgZmllbGRzYCBhbmQgYHJvd3NgXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRGF0YVRvTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIHtwYXlsb2FkLCBvbkZpbmlzaH06IHtwYXlsb2FkOiBBZGREYXRhVG9NYXBQYXlsb2FkOyBvbkZpbmlzaD86IFByb2dyZXNzaXZlTG9hZENvbnRpbnVhdGlvbn1cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCB7ZGF0YXNldHMsIGNvbmZpZywgaW5mb30gPSBwYXlsb2FkO1xuXG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgLi4uZGVmYXVsdEFkZERhdGFUb01hcE9wdGlvbnMsXG4gICAgLi4ucGF5bG9hZC5vcHRpb25zXG4gIH07XG5cbiAgLy8gY2hlY2sgaWYgcHJvZ3Jlc3NpdmUgbG9hZGluZyBkYXRhc2V0IGJ5IGJhdGNoZXMsIGFuZCB1cGRhdGUgdmlzU3RhdGUgZGlyZWN0bHlcbiAgY29uc3QgaXNQcm9ncmVzc2l2ZUxvYWRpbmcgPVxuICAgIEFycmF5LmlzQXJyYXkoZGF0YXNldHMpICYmXG4gICAgZGF0YXNldHNbMF0/LmluZm8uZm9ybWF0ID09PSAnYXJyb3cnICYmXG4gICAgZGF0YXNldHNbMF0/LmluZm8uaWQgJiZcbiAgICBkYXRhc2V0c1swXT8uaW5mby5pZCBpbiBzdGF0ZS52aXNTdGF0ZS5kYXRhc2V0cztcbiAgaWYgKGlzUHJvZ3Jlc3NpdmVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIGNvbXBvc2VfPEtlcGxlckdsU3RhdGU+KFtcbiAgICAgIHBpY2tfKCd2aXNTdGF0ZScpKFxuICAgICAgICBhcHBseV88VmlzU3RhdGUsIGFueT4odmlzU3RhdGVVcGRhdGVWaXNEYXRhVXBkYXRlciwge1xuICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIG9uRmluaXNoXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgXSkoc3RhdGUpO1xuICB9XG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBsZXQgcGFyc2VkQ29uZmlnOiBQYXJzZWRDb25maWcgPSBjb25maWc7XG5cbiAgaWYgKGlzVmFsaWRDb25maWcoY29uZmlnKSkge1xuICAgIC8vIGlmIHBhc3NlZCBpbiBzYXZlZCBjb25maWdcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcGFyc2VkQ29uZmlnID0gc3RhdGUudmlzU3RhdGUuc2NoZW1hLnBhcnNlU2F2ZWRDb25maWcoY29uZmlnKTtcbiAgfVxuICBjb25zdCBvbGRMYXllcnMgPSBzdGF0ZS52aXNTdGF0ZS5sYXllcnM7XG4gIGNvbnN0IGZpbHRlck5ld2x5QWRkZWRMYXllcnMgPSAobGF5ZXJzOiBMYXllcltdKSA9PlxuICAgIGxheWVycy5maWx0ZXIobmwgPT4gIW9sZExheWVycy5maW5kKG9sID0+IG9sID09PSBubCkpO1xuXG4gIC8vIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZCwgdG8gbWFrZSB0eXBlc2NyaXB0IGhhcHB5XG4gIGNvbnN0IGZpbmRNYXBCb3VuZHNJZkNlbnRlcmVkID0gKGxheWVyczogTGF5ZXJbXSkgPT4ge1xuICAgIGNvbnN0IGJvdW5kcyA9IG9wdGlvbnMuY2VudGVyTWFwICYmIGZpbmRNYXBCb3VuZHMobGF5ZXJzKTtcbiAgICByZXR1cm4gYm91bmRzID8gYm91bmRzIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIHJldHVybiBjb21wb3NlXzxLZXBsZXJHbFN0YXRlPihbXG4gICAgcGlja18oJ3Zpc1N0YXRlJykoXG4gICAgICAvLyB0aGlzIHBhcnQgY2FuIGJlIGFzeW5jXG4gICAgICBhcHBseV88VmlzU3RhdGUsIGFueT4odmlzU3RhdGVVcGRhdGVWaXNEYXRhVXBkYXRlciwge1xuICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgY29uZmlnOiBwYXJzZWRDb25maWcsXG4gICAgICAgIG9uRmluaXNoXG4gICAgICB9KVxuICAgICksXG5cbiAgICBpZl8oQm9vbGVhbihpbmZvKSwgcGlja18oJ3Zpc1N0YXRlJykoYXBwbHlfPFZpc1N0YXRlLCBhbnk+KHNldE1hcEluZm9VcGRhdGVyLCB7aW5mb30pKSksXG4gICAgLy8gTm90ZSB0aGF0IGZpdCBib3VuZHMgaGVyZSB3b24ndCBiZSBjYWxsZWQgaW4gY2FzZSBkYXRhc2V0cyBhcmUgY3JlYXRlZCBpbiBUYXNrcy5cbiAgICAvLyBBIHNlcGFyYXRlIFRhc2sgdG8gdXBkYXRlIGJvdW5kcyBpcyBjcmVhdGVkIG9uY2UgdGhlIGRhdGFzZXRzIGFyZSByZWFkeS5cbiAgICB3aXRoXygoe3Zpc1N0YXRlfSkgPT5cbiAgICAgIHBpY2tfKCdtYXBTdGF0ZScpKFxuICAgICAgICBhcHBseV8oXG4gICAgICAgICAgc3RhdGVNYXBDb25maWdVcGRhdGVyLFxuICAgICAgICAgIHBheWxvYWRfKHtcbiAgICAgICAgICAgIGNvbmZpZzogcGFyc2VkQ29uZmlnLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIGJvdW5kczogZmluZE1hcEJvdW5kc0lmQ2VudGVyZWQoZmlsdGVyTmV3bHlBZGRlZExheWVycyh2aXNTdGF0ZS5sYXllcnMpKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIHBpY2tfKCdtYXBTdHlsZScpKGFwcGx5XyhzdHlsZU1hcENvbmZpZ1VwZGF0ZXIsIHBheWxvYWRfKHtjb25maWc6IHBhcnNlZENvbmZpZywgb3B0aW9uc30pKSksXG4gICAgcGlja18oJ3VpU3RhdGUnKShcbiAgICAgIGFwcGx5Xyh1aVN0YXRlUmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIsIHBheWxvYWRfKHtjb25maWc6IHBhcnNlZENvbmZpZywgb3B0aW9uc30pKVxuICAgICksXG4gICAgcGlja18oJ3VpU3RhdGUnKShhcHBseV8odWlTdGF0ZUxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyLCBwYXlsb2FkXyhudWxsKSkpLFxuXG4gICAgcGlja18oJ3VpU3RhdGUnKShhcHBseV8odG9nZ2xlTW9kYWxVcGRhdGVyLCBwYXlsb2FkXyhudWxsKSkpLFxuICAgIHBpY2tfKCd1aVN0YXRlJykoXG4gICAgICBtZXJnZV8oXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAncmVhZE9ubHknKVxuICAgICAgICAgID8ge3JlYWRPbmx5OiBvcHRpb25zLnJlYWRPbmx5fVxuICAgICAgICAgIDoge31cbiAgICAgIClcbiAgICApXG4gIF0pKHN0YXRlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogUHJvZ3Jlc3NpdmVMb2FkRmlsZXNTdWNjZXNzQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgaWYgKGlzU3RhbGVGaWxlTG9hZEZpbmlzaChzdGF0ZS52aXNTdGF0ZS5maWxlTG9hZGluZywgYWN0aW9uLmxvYWRJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcHJvZ3Jlc3NpdmVTdGVwcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhY3Rpb24sICdwcm9ncmVzc2l2ZVN0ZXBzJylcbiAgICA/IFthY3Rpb24ucmVzdWx0LCAuLi4oYWN0aW9uLnByb2dyZXNzaXZlU3RlcHMgfHwgW10pXVxuICAgIDogZmlsZUNhY2hlVG9Qcm9ncmVzc2l2ZVN0ZXBzKGFjdGlvbi5yZXN1bHQpO1xuICBjb25zdCBbY3VycmVudFN0ZXAgPSBhY3Rpb24ucmVzdWx0LCAuLi5yZW1haW5pbmdTdGVwc10gPSBwcm9ncmVzc2l2ZVN0ZXBzO1xuICBjb25zdCBwYXlsb2FkcyA9IGZpbGVzVG9EYXRhUGF5bG9hZChjdXJyZW50U3RlcCwgYWN0aW9uLm9wdGlvbnMpO1xuICAvLyBUaGUgZmlyc3QgcHJvZ3Jlc3NpdmUgc25hcHNob3QgbWF5IGZpdCB0aGUgbWFwIHRvIHRoZSBuZXdseSBjcmVhdGVkIGxheWVyLlxuICAvLyBMYXRlciBzbmFwc2hvdHMgb25seSByZXBsYWNlIHRoYXQgbGF5ZXIncyBkYXRhIGFuZCBtdXN0IG5vdCBrZWVwIG1vdmluZyB0aGUgdmlld3BvcnQuXG4gIGNvbnN0IGNvbnRpbnVhdGlvbk9wdGlvbnMgPSB7Li4uYWN0aW9uLm9wdGlvbnMsIGNlbnRlck1hcDogZmFsc2V9O1xuICBjb25zdCBvbkZpbmlzaDogUHJvZ3Jlc3NpdmVMb2FkQ29udGludWF0aW9uIHwgdW5kZWZpbmVkID0gcmVtYWluaW5nU3RlcHMubGVuZ3RoXG4gICAgPyB7XG4gICAgICAgIC4uLmxvYWRGaWxlc1N1Y2Nlc3MocmVtYWluaW5nU3RlcHNbMF0sIGNvbnRpbnVhdGlvbk9wdGlvbnMpLFxuICAgICAgICBwcm9ncmVzc2l2ZVN0ZXBzOiByZW1haW5pbmdTdGVwcy5zbGljZSgxKVxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCBuZXh0U3RhdGUgPSBjb21wb3NlXyhbXG4gICAgcGlja18oJ3Zpc1N0YXRlJykoXG4gICAgICBtZXJnZV8oe1xuICAgICAgICBmaWxlTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICAgICAgICBzdGFnZWRUb0FkZDogbnVsbFxuICAgICAgfSlcbiAgICApXG4gIF0pKHN0YXRlKTtcbiAgLy8gbWFrZSBtdWx0aXBsZSBhZGQgZGF0YSB0byBtYXAgY2FsbHNcbiAgY29uc3Qgc3RhdGVXaXRoRGF0YSA9IGNvbXBvc2VfKFxuICAgIHBheWxvYWRzLm1hcCgocCwgaW5kZXgpID0+XG4gICAgICBhcHBseV8oYWRkRGF0YVRvTWFwVXBkYXRlciwge1xuICAgICAgICAuLi5wYXlsb2FkXyhwKSxcbiAgICAgICAgLi4uKG9uRmluaXNoICYmIGluZGV4ID09PSBwYXlsb2Fkcy5sZW5ndGggLSAxID8ge29uRmluaXNofSA6IHt9KVxuICAgICAgfSlcbiAgICApXG4gICkobmV4dFN0YXRlKTtcbiAgcmV0dXJuIHN0YXRlV2l0aERhdGEgYXMgS2VwbGVyR2xTdGF0ZTtcbn07XG5cbmZ1bmN0aW9uIGtlcHRMb2FkRXJyb3JzKHByb2dyZXNzOiBSZWNvcmQ8c3RyaW5nLCB7ZXJyb3I/OiB1bmtub3dufT4gPSB7fSkge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHByb2dyZXNzKS5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWU/LmVycm9yKSk7XG59XG5cbi8qKiBBIGZpbmlzaCBmcm9tIHRoZSAyMDBtcyBwYXVzZSBpcyBzdGFsZSBvbmNlIHRoYXQgbG9hZCB3YXMgY2FuY2VsZWQgb3IgcmVwbGFjZWQuICovXG5mdW5jdGlvbiBpc1N0YWxlRmlsZUxvYWRGaW5pc2goZmlsZUxvYWRpbmc6IHtsb2FkSWQ/OiBudW1iZXJ9IHwgZmFsc2UsIGxvYWRJZD86IG51bWJlcik6IGJvb2xlYW4ge1xuICBpZiAobG9hZElkID09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuICFmaWxlTG9hZGluZyB8fCBmaWxlTG9hZGluZy5sb2FkSWQgIT09IGxvYWRJZDtcbn1cblxuLyoqXG4gKiBGaW5pc2ggYSBkZWZlcnJlZCBmaWxlIGxvYWQ6IGtlZXAgdGhlIHBhcnNlZCBjYWNoZSwgY2xlYXIgdGhlIGxvYWRpbmcgZmxhZyxcbiAqIGFuZCBsZWF2ZSB0aGUgQWRkIERhdGEgbW9kYWwgb3BlbiB1bnRpbCB0aGUgdXNlciBjb25maXJtcy5cbiAqIEBtZW1iZXJvZiBjb21iaW5lZFVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzdGFnZUxvYWRlZEZpbGVzVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogU3RhZ2VMb2FkZWRGaWxlc1VwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBpZiAoaXNTdGFsZUZpbGVMb2FkRmluaXNoKHN0YXRlLnZpc1N0YXRlLmZpbGVMb2FkaW5nLCBhY3Rpb24ubG9hZElkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBtb2RhbE9wZW4gPSBzdGF0ZS51aVN0YXRlLmN1cnJlbnRNb2RhbCA9PT0gQUREX0RBVEFfSUQ7XG4gIGNvbnN0IHJlc3VsdCA9IGFjdGlvbi5yZXN1bHQgfHwgW107XG4gIGNvbnN0IHByZXZpb3VzID1cbiAgICBtb2RhbE9wZW4gJiYgQXJyYXkuaXNBcnJheShzdGF0ZS52aXNTdGF0ZS5zdGFnZWRUb0FkZCkgPyBzdGF0ZS52aXNTdGF0ZS5zdGFnZWRUb0FkZCA6IFtdO1xuICBjb25zdCBzdGFnZWRUb0FkZCA9IFsuLi5wcmV2aW91cywgLi4ucmVzdWx0XTtcblxuICByZXR1cm4gY29tcG9zZV88S2VwbGVyR2xTdGF0ZT4oW1xuICAgIHBpY2tfKCd2aXNTdGF0ZScpKFxuICAgICAgbWVyZ2VfKHtcbiAgICAgICAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBmaWxlTG9hZGluZ1Byb2dyZXNzOiBtb2RhbE9wZW4gPyBrZXB0TG9hZEVycm9ycyhzdGF0ZS52aXNTdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzKSA6IHt9LFxuICAgICAgICBzdGFnZWRUb0FkZDogbW9kYWxPcGVuICYmIHN0YWdlZFRvQWRkLmxlbmd0aCA/IHN0YWdlZFRvQWRkIDogbnVsbFxuICAgICAgfSlcbiAgICApLFxuICAgIHBpY2tfKCd1aVN0YXRlJykoYXBwbHlfKHVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlciwgcGF5bG9hZF8obnVsbCkpKVxuICBdKShzdGF0ZSk7XG59O1xuXG5mdW5jdGlvbiBzdGFnZWRJdGVtS2V5KGl0ZW0pOiBzdHJpbmcge1xuICByZXR1cm4gaXRlbT8ubWV0YWRhdGE/LnNvdXJjZSB8fCBpdGVtPy5pbmZvPy5pZCB8fCAnJztcbn1cblxuLyoqXG4gKiBBZGQgZGF0YXNldHMgdG8gdGhlIEFkZCBEYXRhIGxpc3Qgd2l0aG91dCBpbnRlcnJ1cHRpbmcgYSBmaWxlIHRoYXQgaXMgc3RpbGwgcGFyc2luZy5cbiAqIEBtZW1iZXJvZiBjb21iaW5lZFVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBlbmRTdGFnZWRMb2FkZWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IFN0YWdlTG9hZGVkRmlsZXNVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgaWYgKHN0YXRlLnVpU3RhdGUuY3VycmVudE1vZGFsICE9PSBBRERfREFUQV9JRCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwcmV2aW91cyA9IEFycmF5LmlzQXJyYXkoc3RhdGUudmlzU3RhdGUuc3RhZ2VkVG9BZGQpID8gc3RhdGUudmlzU3RhdGUuc3RhZ2VkVG9BZGQgOiBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQocHJldmlvdXMubWFwKHN0YWdlZEl0ZW1LZXkpLmZpbHRlcihCb29sZWFuKSk7XG4gIGNvbnN0IG5leHQgPSAoYWN0aW9uLnJlc3VsdCB8fCBbXSkuZmlsdGVyKGl0ZW0gPT4ge1xuICAgIGNvbnN0IGtleSA9IHN0YWdlZEl0ZW1LZXkoaXRlbSk7XG4gICAgaWYgKCFrZXkgfHwgc2Vlbi5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZWVuLmFkZChrZXkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbiAgaWYgKCFuZXh0Lmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gY29tcG9zZV88S2VwbGVyR2xTdGF0ZT4oW1xuICAgIHBpY2tfKCd2aXNTdGF0ZScpKG1lcmdlXyh7c3RhZ2VkVG9BZGQ6IFsuLi5wcmV2aW91cywgLi4ubmV4dF19KSlcbiAgXSkoc3RhdGUpO1xufTtcblxuLyoqXG4gKiBUaGUgZmlyc3QgcGxhaW4gZGF0YXNldCBpbiBhIGNvbmZpcm1lZCB1cGxvYWQgcmVwbGFjZXMgdGhlIHNlbGVjdGVkIHRhYmxlLlxuICogQSBrZXBsZXIuZ2wgbWFwIGpzb24gaXMgYWRkZWQgYXMgYSBtYXAuIEZ1cnRoZXIgdGFibGVzIGFyZSBhZGRlZCBhZnRlciB0aGUgcmVwbGFjZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHNwbGl0UmVwbGFjZW1lbnRVcGxvYWQocGF5bG9hZHM6IEFkZERhdGFUb01hcFBheWxvYWRbXSk6IHtcbiAgZGF0YXNldFRvVXNlOiBQcm90b0RhdGFzZXQgfCBudWxsO1xuICByZW1haW5kZXI6IEFkZERhdGFUb01hcFBheWxvYWRbXTtcbn0ge1xuICBjb25zdCBkYXRhc2V0czogUHJvdG9EYXRhc2V0W10gPSBbXTtcbiAgY29uc3QgbWFwczogQWRkRGF0YVRvTWFwUGF5bG9hZFtdID0gW107XG4gIHBheWxvYWRzLmZvckVhY2gocGF5bG9hZCA9PiB7XG4gICAgaWYgKHBheWxvYWQuY29uZmlnKSB7XG4gICAgICBtYXBzLnB1c2gocGF5bG9hZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxpc3QgPSAoQXJyYXkuaXNBcnJheShwYXlsb2FkLmRhdGFzZXRzKSA/IHBheWxvYWQuZGF0YXNldHMgOiBbcGF5bG9hZC5kYXRhc2V0c10pLmZpbHRlcihcbiAgICAgIChkYXRhc2V0KTogZGF0YXNldCBpcyBQcm90b0RhdGFzZXQgPT4gQm9vbGVhbihkYXRhc2V0KVxuICAgICk7XG4gICAgZGF0YXNldHMucHVzaCguLi5saXN0KTtcbiAgfSk7XG4gIGNvbnN0IFtkYXRhc2V0VG9Vc2UsIC4uLm1vcmVdID0gZGF0YXNldHM7XG4gIHJldHVybiB7XG4gICAgZGF0YXNldFRvVXNlOiBkYXRhc2V0VG9Vc2UgPz8gbnVsbCxcbiAgICByZW1haW5kZXI6IFtcbiAgICAgIC4uLm1hcHMsXG4gICAgICAuLi4obW9yZS5sZW5ndGhcbiAgICAgICAgPyBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRhdGFzZXRzOiBtb3JlLFxuICAgICAgICAgICAgICBvcHRpb25zOiB7a2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLCBjZW50ZXJNYXA6IGZhbHNlLCBhdXRvQ3JlYXRlTGF5ZXJzOiBmYWxzZX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIDogW10pXG4gICAgXVxuICB9O1xufVxuXG4vKipcbiAqIFR1cm4gYSBjb25maXJtZWQgQWRkIERhdGEgc2VsZWN0aW9uIGludG8gYSBkYXRhc2V0IHJlcGxhY2VtZW50LlxuICogTGF5ZXJzIGFuZCBmaWx0ZXJzIG1vdmUgb250byB0aGUgbmV3IHRhYmxlLiBUaGUgb3JpZ2luYWwgdGFibGUgaXMgZHJvcHBlZCB1bmxlc3MgYXNrZWQgdG8gc3RheS5cbiAqIEBtZW1iZXJvZiBjb21iaW5lZFVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjb25maXJtUmVwbGFjZURhdGFzZXRVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBDb25maXJtUmVwbGFjZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3QgcGF5bG9hZHMgPSBmaWxlc1RvRGF0YVBheWxvYWQoYWN0aW9uLnJlc3VsdCwge1xuICAgIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgICBjZW50ZXJNYXA6IHRydWUsXG4gICAgYXV0b0NyZWF0ZUxheWVyczogZmFsc2VcbiAgfSk7XG4gIGNvbnN0IGNsZWFyZWQgPSBjb21wb3NlXyhbXG4gICAgcGlja18oJ3Zpc1N0YXRlJykoXG4gICAgICBtZXJnZV8oe1xuICAgICAgICBmaWxlTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICAgICAgICBzdGFnZWRUb0FkZDogbnVsbFxuICAgICAgfSlcbiAgICApXG4gIF0pKHN0YXRlKTtcblxuICBjb25zdCB7ZGF0YXNldFRvVXNlLCByZW1haW5kZXJ9ID0gc3BsaXRSZXBsYWNlbWVudFVwbG9hZChwYXlsb2Fkcyk7XG4gIGlmIChkYXRhc2V0VG9Vc2U/LmluZm8/LmlkICYmIGFjdGlvbi5kYXRhc2V0VG9SZXBsYWNlSWQpIHtcbiAgICBjb25zdCByZXBsYWNlZCA9IHJlcGxhY2VEYXRhSW5NYXBVcGRhdGVyKGNsZWFyZWQsIHtcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgZGF0YXNldFRvUmVwbGFjZUlkOiBhY3Rpb24uZGF0YXNldFRvUmVwbGFjZUlkLFxuICAgICAgICBkYXRhc2V0VG9Vc2UsXG4gICAgICAgIG9wdGlvbnM6IHtkZWxldGVPcmlnaW5hbERhdGFzZXQ6IGFjdGlvbi5kZWxldGVPcmlnaW5hbERhdGFzZXQgIT09IGZhbHNlfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChyZXBsYWNlZCAhPT0gY2xlYXJlZCkge1xuICAgICAgaWYgKCFyZW1haW5kZXIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21wb3NlXyhyZW1haW5kZXIubWFwKHAgPT4gYXBwbHlfKGFkZERhdGFUb01hcFVwZGF0ZXIsIHBheWxvYWRfKHApKSkpKFxuICAgICAgICByZXBsYWNlZFxuICAgICAgKSBhcyBLZXBsZXJHbFN0YXRlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb21wb3NlXyhwYXlsb2Fkcy5tYXAocCA9PiBhcHBseV8oYWRkRGF0YVRvTWFwVXBkYXRlciwgcGF5bG9hZF8ocCkpKSkoXG4gICAgY2xlYXJlZFxuICApIGFzIEtlcGxlckdsU3RhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkRGF0YVRvTWFwQ29tcG9zZWQgPSBhZGREYXRhVG9NYXBVcGRhdGVyO1xuXG4vKipcbiAqIEhlbHBlciB3aGljaCB1cGRhdGVzIG1hcCBvdmVybGF5IGJsZW5kaW5nIG1vZGUgaW4gdmlzU3RhdGUsXG4gKiBidXQgb25seSBpZiBpdCdzIG5vdCBjdXJyZW50bHkgaW4gdGhlIGBub3JtYWxgIG1vZGUuXG4gKi9cbmNvbnN0IHVwZGF0ZU92ZXJsYXlCbGVuZGluZyA9IG92ZXJsYXlCbGVuZGluZyA9PiB2aXNTdGF0ZSA9PiB7XG4gIGlmICh2aXNTdGF0ZS5vdmVybGF5QmxlbmRpbmcgIT09IE9WRVJMQVlfQkxFTkRJTkdTLm5vcm1hbC52YWx1ZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi52aXNTdGF0ZSxcbiAgICAgIG92ZXJsYXlCbGVuZGluZ1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHZpc1N0YXRlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgd2hpY2ggdXBkYXRlcyBgZGFya0Jhc2VNYXBFbmFibGVkYCBpbiBhbGwgdGhlIGxheWVycyBpbiB2aXNTdGF0ZSB3aGljaFxuICogaGF2ZSB0aGlzIGNvbmZpZyBzZXR0aW5nIChvciBpbiBvbmUgc3BlY2lmaWMgbGF5ZXIgaWYgdGhlIGBsYXllcklkYCBwYXJhbSBpcyBwcm92aWRlZCkuXG4gKi9cbmNvbnN0IHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzID1cbiAgKGRhcmtCYXNlTWFwRW5hYmxlZDogYm9vbGVhbiwgbGF5ZXJJZDogc3RyaW5nIHwgbnVsbCA9IG51bGwpID0+XG4gIHZpc1N0YXRlID0+ICh7XG4gICAgLi4udmlzU3RhdGUsXG4gICAgbGF5ZXJzOiB2aXNTdGF0ZS5sYXllcnMubWFwKGxheWVyID0+IHtcbiAgICAgIGlmICghbGF5ZXJJZCB8fCBsYXllci5pZCA9PT0gbGF5ZXJJZCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLCAnZGFya0Jhc2VNYXBFbmFibGVkJykpIHtcbiAgICAgICAgICBjb25zdCB7dmlzQ29uZmlnfSA9IGxheWVyLmNvbmZpZztcbiAgICAgICAgICByZXR1cm4gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgdmlzQ29uZmlnOiB7Li4udmlzQ29uZmlnLCBkYXJrQmFzZU1hcEVuYWJsZWR9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsYXllcjtcbiAgICB9KVxuICB9KTtcblxuLyoqXG4gKiBVcGRhdGVyIHRoYXQgY2hhbmdlcyB0aGUgbWFwIHN0eWxlIGJ5IGNhbGxpbmcgbWFwU3R5bGVDaGFuZ2VVcGRhdGVyIG9uIHZpc1N0YXRlLlxuICogSW4gYWRkaXRpb24gdG8gdGhhdCwgaXQgZG9lcyB0aGUgZm9sbG93aW5nOlxuICpcbiAqICAgMS4gVXBkYXRlIG1hcCBvdmVybGF5IGJsZW5kaW5nIG1vZGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBjb2xvck1vZGUgb2YgdGhlXG4gKiAgICAgIGJhc2UgbWFwLCBidXQgb25seSBpZiBpdCdzIG5vdCBpbiB0aGUgYG5vcm1hbGAgbW9kZS5cbiAqXG4gKiAgIDIuIFVwZGF0ZSBhbGwgdGhlIGxheWVycyB3aGljaCBoYXZlIHRoZSBgZGFya0Jhc2VNYXBFbmFibGVkYCBjb25maWcgc2V0dGluZ1xuICogICAgICBhZGp1c3RpbmcgaXQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBjb2xvck1vZGUgb2YgdGhlIGJhc2UgbWFwLlxuICpcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbWJpbmVkTWFwU3R5bGVDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdHlsZUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCB7cGF5bG9hZH0gPSBhY3Rpb247XG4gIGNvbnN0IHttYXBTdHlsZX0gPSBzdGF0ZTtcbiAgY29uc3QgZ2V0Q29sb3JNb2RlID0ga2V5ID0+IG1hcFN0eWxlLm1hcFN0eWxlc1trZXldPy5jb2xvck1vZGU7XG4gIGNvbnN0IHByZXZDb2xvck1vZGUgPSBnZXRDb2xvck1vZGUobWFwU3R5bGUuc3R5bGVUeXBlKTtcbiAgY29uc3QgbmV4dENvbG9yTW9kZSA9IGdldENvbG9yTW9kZShwYXlsb2FkLnN0eWxlVHlwZSk7XG4gIGxldCB7dmlzU3RhdGUsIG1hcFN0YXRlfSA9IHN0YXRlO1xuICBpZiAobmV4dENvbG9yTW9kZSAhPT0gcHJldkNvbG9yTW9kZSkge1xuICAgIHN3aXRjaCAobmV4dENvbG9yTW9kZSkge1xuICAgICAgY2FzZSBCQVNFX01BUF9DT0xPUl9NT0RFUy5EQVJLOlxuICAgICAgICB2aXNTdGF0ZSA9IGNvbXBvc2VfKFtcbiAgICAgICAgICB1cGRhdGVPdmVybGF5QmxlbmRpbmcoT1ZFUkxBWV9CTEVORElOR1Muc2NyZWVuLnZhbHVlKSxcbiAgICAgICAgICB1cGRhdGVEYXJrQmFzZU1hcExheWVycyh0cnVlKVxuICAgICAgICBdKSh2aXNTdGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBCQVNFX01BUF9DT0xPUl9NT0RFUy5MSUdIVDpcbiAgICAgICAgdmlzU3RhdGUgPSBjb21wb3NlXyhbXG4gICAgICAgICAgdXBkYXRlT3ZlcmxheUJsZW5kaW5nKE9WRVJMQVlfQkxFTkRJTkdTLmRhcmtlbi52YWx1ZSksXG4gICAgICAgICAgdXBkYXRlRGFya0Jhc2VNYXBMYXllcnMoZmFsc2UpXG4gICAgICAgIF0pKHZpc1N0YXRlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgfVxuXG4gIC8vIFVwZGF0ZSBnbG9iZSBjb25maWcgY29sb3JzIHdoZW4gc3R5bGUgY2hhbmdlcyBhbmQgZ2xvYmUgaXMgZW5hYmxlZFxuICBpZiAobWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQpIHtcbiAgICAvLyBTd2l0Y2hpbmcgZnJvbSBcIk5vIEJhc2VtYXBcIiB0byBhIGJhc2VtYXAgLSByZXN0b3JlIGJhc2VtYXAgc3ViLXRvZ2dsZXNcbiAgICBpZiAocGF5bG9hZC5zdHlsZVR5cGUgIT09IE5PX01BUF9JRCAmJiBtYXBTdHlsZS5zdHlsZVR5cGUgPT09IE5PX01BUF9JRCkge1xuICAgICAgbWFwU3RhdGUgPSB7XG4gICAgICAgIC4uLm1hcFN0YXRlLFxuICAgICAgICBnbG9iZToge1xuICAgICAgICAgIC4uLm1hcFN0YXRlLmdsb2JlLFxuICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgLi4ubWFwU3RhdGUuZ2xvYmUuY29uZmlnLFxuICAgICAgICAgICAgYmFzZW1hcDogdHJ1ZSxcbiAgICAgICAgICAgIGxhYmVsczogdHJ1ZSxcbiAgICAgICAgICAgIGFkbWluTGluZXM6IHRydWUsXG4gICAgICAgICAgICB3YXRlcjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgbWFwU3RhdGUgPSBzeW5jR2xvYmVDb25maWdDb2xvcnNUb1N0eWxlKG1hcFN0YXRlLCBtYXBTdHlsZSwgcGF5bG9hZC5zdHlsZVR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICB2aXNTdGF0ZSxcbiAgICBtYXBTdGF0ZSxcbiAgICBtYXBTdHlsZTogbWFwU3R5bGVDaGFuZ2VVcGRhdGVyKG1hcFN0eWxlLCB7cGF5bG9hZDogey4uLnBheWxvYWR9fSlcbiAgfTtcbn07XG5cbi8qKlxuICogRGVyaXZlIGdsb2JlIGJhc2VtYXAgY29sb3JzIChzdXJmYWNlIC8gd2F0ZXIgLyBhZG1pbiBsaW5lcykgZnJvbSBhIG1hcCBzdHlsZSBhbmRcbiAqIHJldHVybiBhbiB1cGRhdGVkIG1hcFN0YXRlIHdpdGggdGhvc2UgY29sb3JzIHdyaXR0ZW4gaW50byBgZ2xvYmUuY29uZmlnYC4gVXNlZCBib3RoXG4gKiB3aGVuIHRoZSBiYXNlIG1hcCBzdHlsZSBjaGFuZ2VzIGFuZCB3aGVuIGVudGVyaW5nIGdsb2JlIG1vZGUsIHNvIHRoZSBnbG9iZSBhbHdheXNcbiAqIHJlZmxlY3RzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgYmFzZW1hcCBpbnN0ZWFkIG9mIHRoZSBzdGF0aWMgREVGQVVMVF9HTE9CRV9DT05GSUcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzeW5jR2xvYmVDb25maWdDb2xvcnNUb1N0eWxlKFxuICBtYXBTdGF0ZTogTWFwU3RhdGUsXG4gIG1hcFN0eWxlOiBNYXBTdHlsZSxcbiAgc3R5bGVUeXBlOiBzdHJpbmdcbik6IE1hcFN0YXRlIHtcbiAgaWYgKCFtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZCkge1xuICAgIHJldHVybiBtYXBTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdHlsZU9iaiA9IG1hcFN0eWxlLm1hcFN0eWxlc1tzdHlsZVR5cGVdO1xuICBjb25zdCBuZXh0R2xvYmVDb25maWcgPSB7Li4ubWFwU3RhdGUuZ2xvYmUuY29uZmlnfTtcblxuICBpZiAoc3R5bGVUeXBlID09PSBOT19NQVBfSUQpIHtcbiAgICBuZXh0R2xvYmVDb25maWcuYmFzZW1hcCA9IGZhbHNlO1xuICAgIG5leHRHbG9iZUNvbmZpZy5sYWJlbHMgPSBmYWxzZTtcbiAgICBuZXh0R2xvYmVDb25maWcuYWRtaW5MaW5lcyA9IGZhbHNlO1xuICAgIG5leHRHbG9iZUNvbmZpZy53YXRlciA9IGZhbHNlO1xuICAgIG5leHRHbG9iZUNvbmZpZy5zdXJmYWNlQ29sb3IgPSBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFja2dyb3VuZEZpbGxDb2xvcjtcbiAgICBuZXh0R2xvYmVDb25maWcud2F0ZXJDb2xvciA9IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYXNlbWFwV2F0ZXJGaWxsQ29sb3I7XG4gICAgbmV4dEdsb2JlQ29uZmlnLmFkbWluTGluZXNDb2xvciA9IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYXNlbWFwQWRtaW5MaW5lQ29sb3I7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYmFzZW1hcENvbG9ycyA9IG5leHRTdHlsZU9ialxuICAgICAgPyBnZXRCYXNlbWFwQ29sb3JzRm9yU3R5bGUoc3R5bGVUeXBlLCB7XG4gICAgICAgICAgc3R5bGU6IG5leHRTdHlsZU9iai5zdHlsZSxcbiAgICAgICAgICBsYXllckdyb3VwczogbmV4dFN0eWxlT2JqLmxheWVyR3JvdXBzXG4gICAgICAgIH0pXG4gICAgICA6IC8vIFN0eWxlIG9iamVjdCBub3QgeWV0IGxvYWRlZCAtIHVzZSBrbm93biBwcmVzZXRzIGJ5IHN0eWxlIHR5cGVcbiAgICAgICAgZ2V0QmFzZW1hcENvbG9yc0ZvclN0eWxlKHN0eWxlVHlwZSk7XG4gICAgbmV4dEdsb2JlQ29uZmlnLnN1cmZhY2VDb2xvciA9IGJhc2VtYXBDb2xvcnMuYmFja2dyb3VuZEZpbGxDb2xvcjtcbiAgICBuZXh0R2xvYmVDb25maWcud2F0ZXJDb2xvciA9IGJhc2VtYXBDb2xvcnMuYmFzZW1hcFdhdGVyRmlsbENvbG9yO1xuICAgIG5leHRHbG9iZUNvbmZpZy5hZG1pbkxpbmVzQ29sb3IgPSBiYXNlbWFwQ29sb3JzLmJhc2VtYXBBZG1pbkxpbmVDb2xvcjtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ubWFwU3RhdGUsXG4gICAgZ2xvYmU6IHtcbiAgICAgIC4uLm1hcFN0YXRlLmdsb2JlLFxuICAgICAgY29uZmlnOiBuZXh0R2xvYmVDb25maWdcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlciB0aGF0IHN3aXRjaGVzIHRoZSBtYXAgdmlldyBtb2RlICgyRCAvIDNEIC8gR2xvYmUpLiBSdW5zIHRoZSBiYXNlIG1hcC1zdGF0ZVxuICogdXBkYXRlciBhbmQsIHdoZW4gZW50ZXJpbmcgZ2xvYmUgbW9kZSwgc3luY3MgdGhlIGdsb2JlIGJhc2VtYXAgY29sb3JzIHRvIHRoZVxuICogY3VycmVudGx5IHNlbGVjdGVkIG1hcCBzdHlsZSBzbyB0aGUgZ2xvYmUgZG9lc24ndCBzaG93IHN0YWxlIGRlZmF1bHQgY29sb3JzLlxuICovXG5leHBvcnQgY29uc3QgY29tYmluZWRTZXRNYXBWaWV3TW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5TZXRNYXBWaWV3TW9kZVVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBsZXQgbWFwU3RhdGUgPSBzZXRNYXBWaWV3TW9kZVVwZGF0ZXIoc3RhdGUubWFwU3RhdGUsIGFjdGlvbik7XG5cbiAgaWYgKG1hcFN0YXRlLmdsb2JlPy5lbmFibGVkKSB7XG4gICAgbWFwU3RhdGUgPSBzeW5jR2xvYmVDb25maWdDb2xvcnNUb1N0eWxlKG1hcFN0YXRlLCBzdGF0ZS5tYXBTdHlsZSwgc3RhdGUubWFwU3R5bGUuc3R5bGVUeXBlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwU3RhdGVcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlciB0aGF0IGNoYW5nZXMgdGhlIGxheWVyIHR5cGUgYnkgY2FsbGluZyBgbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcmAgb24gdmlzU3RhdGUuXG4gKiBJbiBhZGRpdGlvbiB0byB0aGF0LCBpZiB0aGUgbmV3IGxheWVyIHR5cGUgaGFzIHRoZSBgZGFya0Jhc2VNYXBFbmFibGVkYCBjb25maWdcbiAqIHNldHRpbmcsIHdlIGFkanVzdCBpdCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbG9yTW9kZSBvZiB0aGUgYmFzZSBtYXAuc1xuICovXG5leHBvcnQgY29uc3QgY29tYmluZWRMYXllclR5cGVDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBMYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgbGV0IHt2aXNTdGF0ZX0gPSBzdGF0ZTtcbiAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHZpc1N0YXRlLmxheWVycy5maW5kSW5kZXgobGF5ZXIgPT4gbGF5ZXIgPT09IGFjdGlvbi5vbGRMYXllcik7XG4gIHZpc1N0YXRlID0gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcih2aXNTdGF0ZSwgYWN0aW9uKTtcbiAgY29uc3QgbmV3TGF5ZXIgPSB2aXNTdGF0ZS5sYXllcnNbb2xkTGF5ZXJJbmRleF07XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3TGF5ZXI/LnZpc0NvbmZpZ1NldHRpbmdzLCAnZGFya0Jhc2VNYXBFbmFibGVkJykpIHtcbiAgICBjb25zdCB7bWFwU3R5bGV9ID0gc3RhdGU7XG4gICAgY29uc3Qge2NvbG9yTW9kZX0gPSBtYXBTdHlsZS5tYXBTdHlsZXNbbWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgICBjb25zdCB7ZGFya0Jhc2VNYXBFbmFibGVkfSA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWc7XG4gICAgc3dpdGNoIChjb2xvck1vZGUpIHtcbiAgICAgIGNhc2UgQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSzpcbiAgICAgICAgaWYgKCFkYXJrQmFzZU1hcEVuYWJsZWQpIHtcbiAgICAgICAgICB2aXNTdGF0ZSA9IHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzKHRydWUsIG5ld0xheWVyLmlkKSh2aXNTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEJBU0VfTUFQX0NPTE9SX01PREVTLkxJR0hUOlxuICAgICAgICBpZiAoZGFya0Jhc2VNYXBFbmFibGVkKSB7XG4gICAgICAgICAgdmlzU3RhdGUgPSB1cGRhdGVEYXJrQmFzZU1hcExheWVycyhmYWxzZSwgbmV3TGF5ZXIuaWQpKHZpc1N0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGVcbiAgfTtcbn07XG5cbi8qKlxuICogTWFrZSBtYXBMZWdlbmQgYWN0aXZlIHdoZW4gdG9nZ2xlU3BsaXRNYXAgYWN0aW9uIGlzIGNhbGxlZFxuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBUb2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICB2aXNTdGF0ZTogdmlzU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUudmlzU3RhdGUsIGFjdGlvbiksXG4gICAgdWlTdGF0ZTogdWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcihzdGF0ZS51aVN0YXRlKSxcbiAgICBtYXBTdGF0ZTogbWFwU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUubWFwU3RhdGUpXG4gIH07XG5cbiAgY29uc3QgaXNTcGxpdCA9IG5ld1N0YXRlLnZpc1N0YXRlLnNwbGl0TWFwcy5sZW5ndGggIT09IDA7XG4gIGNvbnN0IGlzTGVnZW5kQWN0aXZlID0gbmV3U3RhdGUudWlTdGF0ZS5tYXBDb250cm9scz8ubWFwTGVnZW5kPy5hY3RpdmU7XG4gIGlmIChpc1NwbGl0ICYmICFpc0xlZ2VuZEFjdGl2ZSkge1xuICAgIG5ld1N0YXRlLnVpU3RhdGUgPSB0b2dnbGVNYXBDb250cm9sVXBkYXRlcihuZXdTdGF0ZS51aVN0YXRlLCB7XG4gICAgICBwYXlsb2FkOiB7cGFuZWxJZDogJ21hcExlZ2VuZCcsIGluZGV4OiBhY3Rpb24ucGF5bG9hZH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IG1hcCBzcGxpdCBtb2RlIHVwZGF0ZXIgLSBjb29yZGluYXRlcyBzdGF0ZSBjaGFuZ2VzIGFjcm9zcyB2aXNTdGF0ZSwgbWFwU3RhdGUsIGFuZCB1aVN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRNYXBTcGxpdE1vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuU2V0TWFwU3BsaXRNb2RlVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IHttYXBTcGxpdE1vZGV9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IHByZXZNb2RlID0gc3RhdGUubWFwU3RhdGUubWFwU3BsaXRNb2RlO1xuXG4gIGlmIChtYXBTcGxpdE1vZGUgPT09IHByZXZNb2RlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3TWFwU3RhdGUgPSBtYXBTdGF0ZVNldE1hcFNwbGl0TW9kZVVwZGF0ZXIoc3RhdGUubWFwU3RhdGUsIGFjdGlvbik7XG5cbiAgbGV0IG5ld1Zpc1N0YXRlID0gey4uLnN0YXRlLnZpc1N0YXRlfTtcblxuICBzd2l0Y2ggKG1hcFNwbGl0TW9kZSkge1xuICAgIGNhc2UgTWFwU3BsaXRNb2RlLlNJTkdMRV9NQVA6XG4gICAgICBuZXdWaXNTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3VmlzU3RhdGUsXG4gICAgICAgIHNwbGl0TWFwczogW11cbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1hcFNwbGl0TW9kZS5EVUFMX01BUDpcbiAgICBjYXNlIE1hcFNwbGl0TW9kZS5TV0lQRV9DT01QQVJFOlxuICAgICAgaWYgKHByZXZNb2RlID09PSBNYXBTcGxpdE1vZGUuU0lOR0xFX01BUCkge1xuICAgICAgICBuZXdWaXNTdGF0ZSA9IHtcbiAgICAgICAgICAuLi5uZXdWaXNTdGF0ZSxcbiAgICAgICAgICBzcGxpdE1hcHM6IGNvbXB1dGVTcGxpdE1hcExheWVycyhuZXdWaXNTdGF0ZS5sYXllcnMsIHtcbiAgICAgICAgICAgIGR1cGxpY2F0ZTogbWFwU3BsaXRNb2RlID09PSBNYXBTcGxpdE1vZGUuU1dJUEVfQ09NUEFSRVxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cblxuICBsZXQgbmV3VWlTdGF0ZSA9IHVpU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUudWlTdGF0ZSk7XG5cbiAgY29uc3QgaXNTcGxpdCA9IG5ld1Zpc1N0YXRlLnNwbGl0TWFwcy5sZW5ndGggIT09IDA7XG4gIGNvbnN0IGlzTGVnZW5kQWN0aXZlID0gbmV3VWlTdGF0ZS5tYXBDb250cm9scz8ubWFwTGVnZW5kPy5hY3RpdmU7XG4gIGlmIChpc1NwbGl0ICYmICFpc0xlZ2VuZEFjdGl2ZSkge1xuICAgIG5ld1VpU3RhdGUgPSB0b2dnbGVNYXBDb250cm9sVXBkYXRlcihuZXdVaVN0YXRlLCB7XG4gICAgICBwYXlsb2FkOiB7cGFuZWxJZDogJ21hcExlZ2VuZCcsIGluZGV4OiAwfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtYXBTdGF0ZTogbmV3TWFwU3RhdGUsXG4gICAgdmlzU3RhdGU6IG5ld1Zpc1N0YXRlLFxuICAgIHVpU3RhdGU6IG5ld1VpU3RhdGVcbiAgfTtcbn07XG5cbmNvbnN0IGRlZmF1bHRSZXBsYWNlRGF0YVRvTWFwT3B0aW9ucyA9IHtcbiAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICBjZW50ZXJNYXA6IHRydWUsXG4gIGF1dG9DcmVhdGVMYXllcnM6IGZhbHNlXG59O1xuXG4vKipcbiAqIFVwZGF0ZXIgcmVwbGFjZSBhIGRhdGFzZXQgaW4gc3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHJlcGxhY2VEYXRhSW5NYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAge3BheWxvYWR9OiB7cGF5bG9hZDogUmVwbGFjZURhdGFJbk1hcFBheWxvYWR9XG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3Qge2RhdGFzZXRUb1JlcGxhY2VJZCwgZGF0YXNldFRvVXNlLCBvcHRpb25zID0ge319ID0gcGF5bG9hZDtcbiAgY29uc3Qge2RlbGV0ZU9yaWdpbmFsRGF0YXNldCA9IHRydWUsIC4uLnJlcGxhY2VPcHRpb25zfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGFkZERhdGFUb01hcE9wdGlvbnMgPSB7Li4uZGVmYXVsdFJlcGxhY2VEYXRhVG9NYXBPcHRpb25zLCAuLi5yZXBsYWNlT3B0aW9uc307XG5cbiAgLy8gY2hlY2sgaWYgZGF0YXNldCBpcyB0aGVyZVxuICBpZiAoIXN0YXRlLnZpc1N0YXRlLmRhdGFzZXRzW2RhdGFzZXRUb1JlcGxhY2VJZF0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gZGF0YXNldFRvVXNlIGlzIFByb3RvRGF0YXNldFxuICBjb25zdCBkYXRhSWRUb1VzZSA9IGRhdGFzZXRUb1VzZS5pbmZvLmlkO1xuICBpZiAoIWRhdGFJZFRvVXNlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIHJlbW92ZSBkYXRhc2V0IGFuZCBwdXQgZGVwZW5kZW5jaWVzIGluIHRvQmVNZXJnZWRcbiAgY29uc3QgcHJlcGFyZWRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICB2aXNTdGF0ZTogcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2Uoc3RhdGUudmlzU3RhdGUsIGRhdGFzZXRUb1JlcGxhY2VJZCwgZGF0YUlkVG9Vc2UsIHtcbiAgICAgIGRlbGV0ZU9yaWdpbmFsRGF0YXNldFxuICAgIH0pXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gYWRkRGF0YVRvTWFwVXBkYXRlcihcbiAgICBwcmVwYXJlZFN0YXRlLFxuICAgIHBheWxvYWRfKHtcbiAgICAgIGRhdGFzZXRzOiBkYXRhc2V0VG9Vc2UsXG4gICAgICAvLyBzaG91bGQgem9vbSB0byBuZXcgZGF0YXNldFxuICAgICAgb3B0aW9uczogYWRkRGF0YVRvTWFwT3B0aW9uc1xuICAgIH0pXG4gICk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsZ0JBQUEsR0FBQUMsT0FBQTtBQU9BLElBQUFDLGlCQUFBLEdBQUFELE9BQUE7QUFPQSxJQUFBRSxpQkFBQSxHQUFBRixPQUFBO0FBTUEsSUFBQUcsaUJBQUEsR0FBQUgsT0FBQTtBQUlBLElBQUFJLFdBQUEsR0FBQUosT0FBQTtBQUVBLElBQUFLLGdCQUFBLEdBQUFMLE9BQUE7QUFJQSxJQUFBTSxRQUFBLEdBQUFOLE9BQUE7QUFhQSxJQUFBTyxNQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxVQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxVQUFBLEdBQUFULE9BQUE7QUFPQSxJQUFBVSxhQUFBLEdBQUFWLE9BQUE7QUFBeUYsSUFBQVcsU0FBQTtBQUFBLFNBQUFDLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENB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