@kepler.gl/reducers 3.3.0-alpha.4 → 3.3.0-alpha.6

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.
Files changed (71) hide show
  1. package/dist/cjs/combined-updaters.js +491 -0
  2. package/dist/cjs/composer-helpers.js +101 -0
  3. package/dist/cjs/composers.js +22 -0
  4. package/dist/cjs/core.js +105 -0
  5. package/dist/cjs/data-utils.js +53 -0
  6. package/dist/cjs/export-utils.js +91 -0
  7. package/dist/{index.js → cjs/index.js} +1 -1
  8. package/dist/cjs/interaction-utils.js +105 -0
  9. package/dist/cjs/layer-utils.js +635 -0
  10. package/dist/cjs/map-state-updaters.js +654 -0
  11. package/dist/cjs/map-state.js +35 -0
  12. package/dist/cjs/map-style-updaters.js +660 -0
  13. package/dist/cjs/map-style.js +33 -0
  14. package/dist/cjs/merger-handler.js +105 -0
  15. package/dist/cjs/middleware.js +27 -0
  16. package/dist/cjs/provider-state-updaters.js +465 -0
  17. package/dist/cjs/provider-state.js +34 -0
  18. package/dist/cjs/root.js +207 -0
  19. package/dist/cjs/ui-state-updaters.js +905 -0
  20. package/dist/cjs/ui-state.js +36 -0
  21. package/dist/cjs/vis-state-merger.js +1193 -0
  22. package/dist/cjs/vis-state-selectors.js +30 -0
  23. package/dist/cjs/vis-state-updaters.js +4114 -0
  24. package/dist/cjs/vis-state.js +35 -0
  25. package/dist/{combined-updaters.js → esm/combined-updaters.js} +74 -81
  26. package/dist/esm/composer-helpers.js +85 -0
  27. package/dist/esm/composers.js +14 -0
  28. package/dist/esm/core.js +101 -0
  29. package/dist/esm/data-utils.js +47 -0
  30. package/dist/esm/export-utils.js +86 -0
  31. package/dist/esm/index.js +62 -0
  32. package/dist/esm/interaction-utils.js +96 -0
  33. package/dist/esm/layer-utils.js +602 -0
  34. package/dist/esm/map-state-updaters.js +646 -0
  35. package/dist/esm/map-state.js +29 -0
  36. package/dist/esm/map-style-updaters.js +652 -0
  37. package/dist/esm/map-style.js +27 -0
  38. package/dist/esm/merger-handler.js +96 -0
  39. package/dist/esm/middleware.js +19 -0
  40. package/dist/esm/provider-state-updaters.js +458 -0
  41. package/dist/esm/provider-state.js +28 -0
  42. package/dist/esm/root.js +201 -0
  43. package/dist/esm/ui-state-updaters.js +900 -0
  44. package/dist/esm/ui-state.js +30 -0
  45. package/dist/esm/vis-state-merger.js +1161 -0
  46. package/dist/esm/vis-state-selectors.js +24 -0
  47. package/dist/esm/vis-state-updaters.js +4035 -0
  48. package/dist/esm/vis-state.js +29 -0
  49. package/package.json +31 -24
  50. package/dist/composer-helpers.js +0 -101
  51. package/dist/composers.js +0 -22
  52. package/dist/core.js +0 -105
  53. package/dist/data-utils.js +0 -53
  54. package/dist/export-utils.js +0 -91
  55. package/dist/interaction-utils.js +0 -105
  56. package/dist/layer-utils.js +0 -635
  57. package/dist/map-state-updaters.js +0 -649
  58. package/dist/map-state.js +0 -35
  59. package/dist/map-style-updaters.js +0 -660
  60. package/dist/map-style.js +0 -33
  61. package/dist/merger-handler.js +0 -105
  62. package/dist/middleware.js +0 -27
  63. package/dist/provider-state-updaters.js +0 -465
  64. package/dist/provider-state.js +0 -34
  65. package/dist/root.js +0 -207
  66. package/dist/ui-state-updaters.js +0 -905
  67. package/dist/ui-state.js +0 -36
  68. package/dist/vis-state-merger.js +0 -1193
  69. package/dist/vis-state-selectors.js +0 -30
  70. package/dist/vis-state-updaters.js +0 -4114
  71. package/dist/vis-state.js +0 -35
@@ -1,26 +1,19 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.setMapSplitModeUpdater = exports.replaceDataInMapUpdater = exports.loadFilesSuccessUpdater = exports.isValidConfig = exports.defaultAddDataToMapOptions = exports.combinedSetMapViewModeUpdater = exports.combinedMapStyleChangeUpdater = exports.combinedLayerTypeChangeUpdater = exports.addDataToMapUpdater = exports.addDataToMapComposed = void 0;
8
- exports.syncGlobeConfigColorsToStyle = syncGlobeConfigColorsToStyle;
9
- exports.toggleSplitMapUpdater = void 0;
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
- var _uiStateUpdaters = require("./ui-state-updaters");
12
- var _visStateUpdaters = require("./vis-state-updaters");
13
- var _mapStateUpdaters = require("./map-state-updaters");
14
- var _mapStyleUpdaters = require("./map-style-updaters");
15
- var _processors = require("@kepler.gl/processors");
16
- var _composerHelpers = require("./composer-helpers");
17
- var _utils = require("@kepler.gl/utils");
18
- var _dataUtils = require("./data-utils");
19
- var _constants = require("@kepler.gl/constants");
20
- var _deckglLayers = require("@kepler.gl/deckgl-layers");
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
21
2
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
22
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ // SPDX-License-Identifier: MIT
23
5
  // Copyright contributors to the kepler.gl project
6
+
7
+ import { toggleModalUpdater, loadFilesSuccessUpdater as uiStateLoadFilesSuccessUpdater, toggleMapControlUpdater, toggleSplitMapUpdater as uiStateToggleSplitMapUpdater, receiveMapConfigUpdater as uiStateReceiveMapConfigUpdater } from './ui-state-updaters';
8
+ import { updateVisDataUpdater as visStateUpdateVisDataUpdater, setMapInfoUpdater, layerTypeChangeUpdater, toggleSplitMapUpdater as visStateToggleSplitMapUpdater, prepareStateForDatasetReplace } from './vis-state-updaters';
9
+ import { receiveMapConfigUpdater as stateMapConfigUpdater, toggleSplitMapUpdater as mapStateToggleSplitMapUpdater, setMapSplitModeUpdater as mapStateSetMapSplitModeUpdater, setMapViewModeUpdater } from './map-state-updaters';
10
+ import { mapStyleChangeUpdater, receiveMapConfigUpdater as styleMapConfigUpdater } from './map-style-updaters';
11
+ import { filesToDataPayload } from '@kepler.gl/processors';
12
+ import { payload_, apply_, with_, if_, compose_, merge_, pick_ } from './composer-helpers';
13
+ import { isPlainObject, computeSplitMapLayers } from '@kepler.gl/utils';
14
+ import { findMapBounds } from './data-utils';
15
+ import { BASE_MAP_COLOR_MODES, OVERLAY_BLENDINGS, NO_MAP_ID, MapSplitMode } from '@kepler.gl/constants';
16
+ import { getBasemapColorsForStyle, DEFAULT_BASEMAP_COLOR } from '@kepler.gl/deckgl-layers';
24
17
  // compose action to apply result multiple reducers, with the output of one
25
18
 
26
19
  /**
@@ -70,10 +63,10 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
70
63
  var combinedUpdaters = null;
71
64
  /* eslint-enable @typescript-eslint/no-unused-vars */
72
65
 
73
- var isValidConfig = exports.isValidConfig = function isValidConfig(config) {
74
- return (0, _utils.isPlainObject)(config) && (0, _utils.isPlainObject)(config.config) && config.version;
66
+ export var isValidConfig = function isValidConfig(config) {
67
+ return isPlainObject(config) && isPlainObject(config.config) && config.version;
75
68
  };
76
- var defaultAddDataToMapOptions = exports.defaultAddDataToMapOptions = {
69
+ export var defaultAddDataToMapOptions = {
77
70
  centerMap: true,
78
71
  keepExistingConfig: false,
79
72
  autoCreateLayers: true,
@@ -105,7 +98,7 @@ var defaultAddDataToMapOptions = exports.defaultAddDataToMapOptions = {
105
98
  *
106
99
  * @public
107
100
  */
108
- var addDataToMapUpdater = exports.addDataToMapUpdater = function addDataToMapUpdater(state, _ref) {
101
+ export var addDataToMapUpdater = function addDataToMapUpdater(state, _ref) {
109
102
  var _datasets$, _datasets$2, _datasets$3;
110
103
  var payload = _ref.payload;
111
104
  var datasets = payload.datasets,
@@ -116,7 +109,7 @@ var addDataToMapUpdater = exports.addDataToMapUpdater = function addDataToMapUpd
116
109
  // check if progressive loading dataset by batches, and update visState directly
117
110
  var isProgressiveLoading = Array.isArray(datasets) && ((_datasets$ = datasets[0]) === null || _datasets$ === void 0 ? void 0 : _datasets$.info.format) === 'arrow' && ((_datasets$2 = datasets[0]) === null || _datasets$2 === void 0 ? void 0 : _datasets$2.info.id) && ((_datasets$3 = datasets[0]) === null || _datasets$3 === void 0 ? void 0 : _datasets$3.info.id) in state.visState.datasets;
118
111
  if (isProgressiveLoading) {
119
- return (0, _composerHelpers.compose_)([(0, _composerHelpers.pick_)('visState')((0, _composerHelpers.apply_)(_visStateUpdaters.updateVisDataUpdater, {
112
+ return compose_([pick_('visState')(apply_(visStateUpdateVisDataUpdater, {
120
113
  datasets: datasets,
121
114
  options: options,
122
115
  config: config
@@ -141,51 +134,51 @@ var addDataToMapUpdater = exports.addDataToMapUpdater = function addDataToMapUpd
141
134
 
142
135
  // Returns undefined if not found, to make typescript happy
143
136
  var findMapBoundsIfCentered = function findMapBoundsIfCentered(layers) {
144
- var bounds = options.centerMap && (0, _dataUtils.findMapBounds)(layers);
137
+ var bounds = options.centerMap && findMapBounds(layers);
145
138
  return bounds ? bounds : undefined;
146
139
  };
147
- return (0, _composerHelpers.compose_)([(0, _composerHelpers.pick_)('visState')(
140
+ return compose_([pick_('visState')(
148
141
  // this part can be async
149
- (0, _composerHelpers.apply_)(_visStateUpdaters.updateVisDataUpdater, {
142
+ apply_(visStateUpdateVisDataUpdater, {
150
143
  datasets: datasets,
151
144
  options: options,
152
145
  config: parsedConfig
153
- })), (0, _composerHelpers.if_)(Boolean(info), (0, _composerHelpers.pick_)('visState')((0, _composerHelpers.apply_)(_visStateUpdaters.setMapInfoUpdater, {
146
+ })), if_(Boolean(info), pick_('visState')(apply_(setMapInfoUpdater, {
154
147
  info: info
155
148
  }))),
156
149
  // Note that fit bounds here won't be called in case datasets are created in Tasks.
157
150
  // A separate Task to update bounds is created once the datasets are ready.
158
- (0, _composerHelpers.with_)(function (_ref2) {
151
+ with_(function (_ref2) {
159
152
  var visState = _ref2.visState;
160
- return (0, _composerHelpers.pick_)('mapState')((0, _composerHelpers.apply_)(_mapStateUpdaters.receiveMapConfigUpdater, (0, _composerHelpers.payload_)({
153
+ return pick_('mapState')(apply_(stateMapConfigUpdater, payload_({
161
154
  config: parsedConfig,
162
155
  options: options,
163
156
  bounds: findMapBoundsIfCentered(filterNewlyAddedLayers(visState.layers))
164
157
  })));
165
- }), (0, _composerHelpers.pick_)('mapStyle')((0, _composerHelpers.apply_)(_mapStyleUpdaters.receiveMapConfigUpdater, (0, _composerHelpers.payload_)({
158
+ }), pick_('mapStyle')(apply_(styleMapConfigUpdater, payload_({
166
159
  config: parsedConfig,
167
160
  options: options
168
- }))), (0, _composerHelpers.pick_)('uiState')((0, _composerHelpers.apply_)(_uiStateUpdaters.receiveMapConfigUpdater, (0, _composerHelpers.payload_)({
161
+ }))), pick_('uiState')(apply_(uiStateReceiveMapConfigUpdater, payload_({
169
162
  config: parsedConfig,
170
163
  options: options
171
- }))), (0, _composerHelpers.pick_)('uiState')((0, _composerHelpers.apply_)(_uiStateUpdaters.loadFilesSuccessUpdater, (0, _composerHelpers.payload_)(null))), (0, _composerHelpers.pick_)('uiState')((0, _composerHelpers.apply_)(_uiStateUpdaters.toggleModalUpdater, (0, _composerHelpers.payload_)(null))), (0, _composerHelpers.pick_)('uiState')((0, _composerHelpers.merge_)(Object.prototype.hasOwnProperty.call(options, 'readOnly') ? {
164
+ }))), pick_('uiState')(apply_(uiStateLoadFilesSuccessUpdater, payload_(null))), pick_('uiState')(apply_(toggleModalUpdater, payload_(null))), pick_('uiState')(merge_(Object.prototype.hasOwnProperty.call(options, 'readOnly') ? {
172
165
  readOnly: options.readOnly
173
166
  } : {}))])(state);
174
167
  };
175
- var loadFilesSuccessUpdater = exports.loadFilesSuccessUpdater = function loadFilesSuccessUpdater(state, action) {
168
+ export var loadFilesSuccessUpdater = function loadFilesSuccessUpdater(state, action) {
176
169
  // still more to load
177
- var payloads = (0, _processors.filesToDataPayload)(action.result);
178
- var nextState = (0, _composerHelpers.compose_)([(0, _composerHelpers.pick_)('visState')((0, _composerHelpers.merge_)({
170
+ var payloads = filesToDataPayload(action.result);
171
+ var nextState = compose_([pick_('visState')(merge_({
179
172
  fileLoading: false,
180
173
  fileLoadingProgress: {}
181
174
  }))])(state);
182
175
  // make multiple add data to map calls
183
- var stateWithData = (0, _composerHelpers.compose_)(payloads.map(function (p) {
184
- return (0, _composerHelpers.apply_)(addDataToMapUpdater, (0, _composerHelpers.payload_)(p));
176
+ var stateWithData = compose_(payloads.map(function (p) {
177
+ return apply_(addDataToMapUpdater, payload_(p));
185
178
  }))(nextState);
186
179
  return stateWithData;
187
180
  };
188
- var addDataToMapComposed = exports.addDataToMapComposed = addDataToMapUpdater;
181
+ export var addDataToMapComposed = addDataToMapUpdater;
189
182
 
190
183
  /**
191
184
  * Helper which updates map overlay blending mode in visState,
@@ -193,7 +186,7 @@ var addDataToMapComposed = exports.addDataToMapComposed = addDataToMapUpdater;
193
186
  */
194
187
  var updateOverlayBlending = function updateOverlayBlending(overlayBlending) {
195
188
  return function (visState) {
196
- if (visState.overlayBlending !== _constants.OVERLAY_BLENDINGS.normal.value) {
189
+ if (visState.overlayBlending !== OVERLAY_BLENDINGS.normal.value) {
197
190
  return _objectSpread(_objectSpread({}, visState), {}, {
198
191
  overlayBlending: overlayBlending
199
192
  });
@@ -238,7 +231,7 @@ var updateDarkBaseMapLayers = function updateDarkBaseMapLayers(darkBaseMapEnable
238
231
  * adjusting it in accordance with the colorMode of the base map.
239
232
  *
240
233
  */
241
- var combinedMapStyleChangeUpdater = exports.combinedMapStyleChangeUpdater = function combinedMapStyleChangeUpdater(state, action) {
234
+ export var combinedMapStyleChangeUpdater = function combinedMapStyleChangeUpdater(state, action) {
242
235
  var _mapState$globe;
243
236
  var payload = action.payload;
244
237
  var mapStyle = state.mapStyle;
@@ -252,11 +245,11 @@ var combinedMapStyleChangeUpdater = exports.combinedMapStyleChangeUpdater = func
252
245
  mapState = state.mapState;
253
246
  if (nextColorMode !== prevColorMode) {
254
247
  switch (nextColorMode) {
255
- case _constants.BASE_MAP_COLOR_MODES.DARK:
256
- visState = (0, _composerHelpers.compose_)([updateOverlayBlending(_constants.OVERLAY_BLENDINGS.screen.value), updateDarkBaseMapLayers(true)])(visState);
248
+ case BASE_MAP_COLOR_MODES.DARK:
249
+ visState = compose_([updateOverlayBlending(OVERLAY_BLENDINGS.screen.value), updateDarkBaseMapLayers(true)])(visState);
257
250
  break;
258
- case _constants.BASE_MAP_COLOR_MODES.LIGHT:
259
- visState = (0, _composerHelpers.compose_)([updateOverlayBlending(_constants.OVERLAY_BLENDINGS.darken.value), updateDarkBaseMapLayers(false)])(visState);
251
+ case BASE_MAP_COLOR_MODES.LIGHT:
252
+ visState = compose_([updateOverlayBlending(OVERLAY_BLENDINGS.darken.value), updateDarkBaseMapLayers(false)])(visState);
260
253
  break;
261
254
  default:
262
255
  // do nothing
@@ -266,7 +259,7 @@ var combinedMapStyleChangeUpdater = exports.combinedMapStyleChangeUpdater = func
266
259
  // Update globe config colors when style changes and globe is enabled
267
260
  if ((_mapState$globe = mapState.globe) !== null && _mapState$globe !== void 0 && _mapState$globe.enabled) {
268
261
  // Switching from "No Basemap" to a basemap - restore basemap sub-toggles
269
- if (payload.styleType !== _constants.NO_MAP_ID && mapStyle.styleType === _constants.NO_MAP_ID) {
262
+ if (payload.styleType !== NO_MAP_ID && mapStyle.styleType === NO_MAP_ID) {
270
263
  mapState = _objectSpread(_objectSpread({}, mapState), {}, {
271
264
  globe: _objectSpread(_objectSpread({}, mapState.globe), {}, {
272
265
  config: _objectSpread(_objectSpread({}, mapState.globe.config), {}, {
@@ -283,7 +276,7 @@ var combinedMapStyleChangeUpdater = exports.combinedMapStyleChangeUpdater = func
283
276
  return _objectSpread(_objectSpread({}, state), {}, {
284
277
  visState: visState,
285
278
  mapState: mapState,
286
- mapStyle: (0, _mapStyleUpdaters.mapStyleChangeUpdater)(mapStyle, {
279
+ mapStyle: mapStyleChangeUpdater(mapStyle, {
287
280
  payload: _objectSpread({}, payload)
288
281
  })
289
282
  });
@@ -295,28 +288,28 @@ var combinedMapStyleChangeUpdater = exports.combinedMapStyleChangeUpdater = func
295
288
  * when the base map style changes and when entering globe mode, so the globe always
296
289
  * reflects the currently selected basemap instead of the static DEFAULT_GLOBE_CONFIG.
297
290
  */
298
- function syncGlobeConfigColorsToStyle(mapState, mapStyle, styleType) {
291
+ export function syncGlobeConfigColorsToStyle(mapState, mapStyle, styleType) {
299
292
  var _mapState$globe2;
300
293
  if (!((_mapState$globe2 = mapState.globe) !== null && _mapState$globe2 !== void 0 && _mapState$globe2.enabled)) {
301
294
  return mapState;
302
295
  }
303
296
  var nextStyleObj = mapStyle.mapStyles[styleType];
304
297
  var nextGlobeConfig = _objectSpread({}, mapState.globe.config);
305
- if (styleType === _constants.NO_MAP_ID) {
298
+ if (styleType === NO_MAP_ID) {
306
299
  nextGlobeConfig.basemap = false;
307
300
  nextGlobeConfig.labels = false;
308
301
  nextGlobeConfig.adminLines = false;
309
302
  nextGlobeConfig.water = false;
310
- nextGlobeConfig.surfaceColor = _deckglLayers.DEFAULT_BASEMAP_COLOR.backgroundFillColor;
311
- nextGlobeConfig.waterColor = _deckglLayers.DEFAULT_BASEMAP_COLOR.basemapWaterFillColor;
312
- nextGlobeConfig.adminLinesColor = _deckglLayers.DEFAULT_BASEMAP_COLOR.basemapAdminLineColor;
303
+ nextGlobeConfig.surfaceColor = DEFAULT_BASEMAP_COLOR.backgroundFillColor;
304
+ nextGlobeConfig.waterColor = DEFAULT_BASEMAP_COLOR.basemapWaterFillColor;
305
+ nextGlobeConfig.adminLinesColor = DEFAULT_BASEMAP_COLOR.basemapAdminLineColor;
313
306
  } else {
314
- var basemapColors = nextStyleObj ? (0, _deckglLayers.getBasemapColorsForStyle)(styleType, {
307
+ var basemapColors = nextStyleObj ? getBasemapColorsForStyle(styleType, {
315
308
  style: nextStyleObj.style,
316
309
  layerGroups: nextStyleObj.layerGroups
317
310
  }) :
318
311
  // Style object not yet loaded - use known presets by style type
319
- (0, _deckglLayers.getBasemapColorsForStyle)(styleType);
312
+ getBasemapColorsForStyle(styleType);
320
313
  nextGlobeConfig.surfaceColor = basemapColors.backgroundFillColor;
321
314
  nextGlobeConfig.waterColor = basemapColors.basemapWaterFillColor;
322
315
  nextGlobeConfig.adminLinesColor = basemapColors.basemapAdminLineColor;
@@ -333,9 +326,9 @@ function syncGlobeConfigColorsToStyle(mapState, mapStyle, styleType) {
333
326
  * updater and, when entering globe mode, syncs the globe basemap colors to the
334
327
  * currently selected map style so the globe doesn't show stale default colors.
335
328
  */
336
- var combinedSetMapViewModeUpdater = exports.combinedSetMapViewModeUpdater = function combinedSetMapViewModeUpdater(state, action) {
329
+ export var combinedSetMapViewModeUpdater = function combinedSetMapViewModeUpdater(state, action) {
337
330
  var _mapState$globe3;
338
- var mapState = (0, _mapStateUpdaters.setMapViewModeUpdater)(state.mapState, action);
331
+ var mapState = setMapViewModeUpdater(state.mapState, action);
339
332
  if ((_mapState$globe3 = mapState.globe) !== null && _mapState$globe3 !== void 0 && _mapState$globe3.enabled) {
340
333
  mapState = syncGlobeConfigColorsToStyle(mapState, state.mapStyle, state.mapStyle.styleType);
341
334
  }
@@ -349,24 +342,24 @@ var combinedSetMapViewModeUpdater = exports.combinedSetMapViewModeUpdater = func
349
342
  * In addition to that, if the new layer type has the `darkBaseMapEnabled` config
350
343
  * setting, we adjust it in accordance with the colorMode of the base map.s
351
344
  */
352
- var combinedLayerTypeChangeUpdater = exports.combinedLayerTypeChangeUpdater = function combinedLayerTypeChangeUpdater(state, action) {
345
+ export var combinedLayerTypeChangeUpdater = function combinedLayerTypeChangeUpdater(state, action) {
353
346
  var visState = state.visState;
354
347
  var oldLayerIndex = visState.layers.findIndex(function (layer) {
355
348
  return layer === action.oldLayer;
356
349
  });
357
- visState = (0, _visStateUpdaters.layerTypeChangeUpdater)(visState, action);
350
+ visState = layerTypeChangeUpdater(visState, action);
358
351
  var newLayer = visState.layers[oldLayerIndex];
359
352
  if (Object.prototype.hasOwnProperty.call(newLayer === null || newLayer === void 0 ? void 0 : newLayer.visConfigSettings, 'darkBaseMapEnabled')) {
360
353
  var mapStyle = state.mapStyle;
361
354
  var colorMode = mapStyle.mapStyles[mapStyle.styleType].colorMode;
362
355
  var darkBaseMapEnabled = newLayer.config.visConfig.darkBaseMapEnabled;
363
356
  switch (colorMode) {
364
- case _constants.BASE_MAP_COLOR_MODES.DARK:
357
+ case BASE_MAP_COLOR_MODES.DARK:
365
358
  if (!darkBaseMapEnabled) {
366
359
  visState = updateDarkBaseMapLayers(true, newLayer.id)(visState);
367
360
  }
368
361
  break;
369
- case _constants.BASE_MAP_COLOR_MODES.LIGHT:
362
+ case BASE_MAP_COLOR_MODES.LIGHT:
370
363
  if (darkBaseMapEnabled) {
371
364
  visState = updateDarkBaseMapLayers(false, newLayer.id)(visState);
372
365
  }
@@ -383,17 +376,17 @@ var combinedLayerTypeChangeUpdater = exports.combinedLayerTypeChangeUpdater = fu
383
376
  /**
384
377
  * Make mapLegend active when toggleSplitMap action is called
385
378
  */
386
- var toggleSplitMapUpdater = exports.toggleSplitMapUpdater = function toggleSplitMapUpdater(state, action) {
379
+ export var toggleSplitMapUpdater = function toggleSplitMapUpdater(state, action) {
387
380
  var _newState$uiState$map;
388
381
  var newState = _objectSpread(_objectSpread({}, state), {}, {
389
- visState: (0, _visStateUpdaters.toggleSplitMapUpdater)(state.visState, action),
390
- uiState: (0, _uiStateUpdaters.toggleSplitMapUpdater)(state.uiState),
391
- mapState: (0, _mapStateUpdaters.toggleSplitMapUpdater)(state.mapState)
382
+ visState: visStateToggleSplitMapUpdater(state.visState, action),
383
+ uiState: uiStateToggleSplitMapUpdater(state.uiState),
384
+ mapState: mapStateToggleSplitMapUpdater(state.mapState)
392
385
  });
393
386
  var isSplit = newState.visState.splitMaps.length !== 0;
394
387
  var isLegendActive = (_newState$uiState$map = newState.uiState.mapControls) === null || _newState$uiState$map === void 0 || (_newState$uiState$map = _newState$uiState$map.mapLegend) === null || _newState$uiState$map === void 0 ? void 0 : _newState$uiState$map.active;
395
388
  if (isSplit && !isLegendActive) {
396
- newState.uiState = (0, _uiStateUpdaters.toggleMapControlUpdater)(newState.uiState, {
389
+ newState.uiState = toggleMapControlUpdater(newState.uiState, {
397
390
  payload: {
398
391
  panelId: 'mapLegend',
399
392
  index: action.payload
@@ -406,27 +399,27 @@ var toggleSplitMapUpdater = exports.toggleSplitMapUpdater = function toggleSplit
406
399
  /**
407
400
  * Set map split mode updater - coordinates state changes across visState, mapState, and uiState
408
401
  */
409
- var setMapSplitModeUpdater = exports.setMapSplitModeUpdater = function setMapSplitModeUpdater(state, action) {
402
+ export var setMapSplitModeUpdater = function setMapSplitModeUpdater(state, action) {
410
403
  var _newUiState$mapContro;
411
404
  var mapSplitMode = action.payload.mapSplitMode;
412
405
  var prevMode = state.mapState.mapSplitMode;
413
406
  if (mapSplitMode === prevMode) {
414
407
  return state;
415
408
  }
416
- var newMapState = (0, _mapStateUpdaters.setMapSplitModeUpdater)(state.mapState, action);
409
+ var newMapState = mapStateSetMapSplitModeUpdater(state.mapState, action);
417
410
  var newVisState = _objectSpread({}, state.visState);
418
411
  switch (mapSplitMode) {
419
- case _constants.MapSplitMode.SINGLE_MAP:
412
+ case MapSplitMode.SINGLE_MAP:
420
413
  newVisState = _objectSpread(_objectSpread({}, newVisState), {}, {
421
414
  splitMaps: []
422
415
  });
423
416
  break;
424
- case _constants.MapSplitMode.DUAL_MAP:
425
- case _constants.MapSplitMode.SWIPE_COMPARE:
426
- if (prevMode === _constants.MapSplitMode.SINGLE_MAP) {
417
+ case MapSplitMode.DUAL_MAP:
418
+ case MapSplitMode.SWIPE_COMPARE:
419
+ if (prevMode === MapSplitMode.SINGLE_MAP) {
427
420
  newVisState = _objectSpread(_objectSpread({}, newVisState), {}, {
428
- splitMaps: (0, _utils.computeSplitMapLayers)(newVisState.layers, {
429
- duplicate: mapSplitMode === _constants.MapSplitMode.SWIPE_COMPARE
421
+ splitMaps: computeSplitMapLayers(newVisState.layers, {
422
+ duplicate: mapSplitMode === MapSplitMode.SWIPE_COMPARE
430
423
  })
431
424
  });
432
425
  }
@@ -434,11 +427,11 @@ var setMapSplitModeUpdater = exports.setMapSplitModeUpdater = function setMapSpl
434
427
  default:
435
428
  break;
436
429
  }
437
- var newUiState = (0, _uiStateUpdaters.toggleSplitMapUpdater)(state.uiState);
430
+ var newUiState = uiStateToggleSplitMapUpdater(state.uiState);
438
431
  var isSplit = newVisState.splitMaps.length !== 0;
439
432
  var isLegendActive = (_newUiState$mapContro = newUiState.mapControls) === null || _newUiState$mapContro === void 0 || (_newUiState$mapContro = _newUiState$mapContro.mapLegend) === null || _newUiState$mapContro === void 0 ? void 0 : _newUiState$mapContro.active;
440
433
  if (isSplit && !isLegendActive) {
441
- newUiState = (0, _uiStateUpdaters.toggleMapControlUpdater)(newUiState, {
434
+ newUiState = toggleMapControlUpdater(newUiState, {
442
435
  payload: {
443
436
  panelId: 'mapLegend',
444
437
  index: 0
@@ -460,7 +453,7 @@ var defaultReplaceDataToMapOptions = {
460
453
  /**
461
454
  * Updater replace a dataset in state
462
455
  */
463
- var replaceDataInMapUpdater = exports.replaceDataInMapUpdater = function replaceDataInMapUpdater(state, _ref3) {
456
+ export var replaceDataInMapUpdater = function replaceDataInMapUpdater(state, _ref3) {
464
457
  var payload = _ref3.payload;
465
458
  var datasetToReplaceId = payload.datasetToReplaceId,
466
459
  datasetToUse = payload.datasetToUse,
@@ -479,13 +472,13 @@ var replaceDataInMapUpdater = exports.replaceDataInMapUpdater = function replace
479
472
  }
480
473
  // remove dataset and put dependencies in toBeMerged
481
474
  var preparedState = _objectSpread(_objectSpread({}, state), {}, {
482
- visState: (0, _visStateUpdaters.prepareStateForDatasetReplace)(state.visState, datasetToReplaceId, dataIdToUse)
475
+ visState: prepareStateForDatasetReplace(state.visState, datasetToReplaceId, dataIdToUse)
483
476
  });
484
- var nextState = addDataToMapUpdater(preparedState, (0, _composerHelpers.payload_)({
477
+ var nextState = addDataToMapUpdater(preparedState, payload_({
485
478
  datasets: datasetToUse,
486
479
  // should zoom to new dataset
487
480
  options: addDataToMapOptions
488
481
  }));
489
482
  return nextState;
490
483
  };
491
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdWlTdGF0ZVVwZGF0ZXJzIiwicmVxdWlyZSIsIl92aXNTdGF0ZVVwZGF0ZXJzIiwiX21hcFN0YXRlVXBkYXRlcnMiLCJfbWFwU3R5bGVVcGRhdGVycyIsIl9wcm9jZXNzb3JzIiwiX2NvbXBvc2VySGVscGVycyIsIl91dGlscyIsIl9kYXRhVXRpbHMiLCJfY29uc3RhbnRzIiwiX2RlY2tnbExheWVycyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiY29tYmluZWRVcGRhdGVycyIsImlzVmFsaWRDb25maWciLCJleHBvcnRzIiwiY29uZmlnIiwiaXNQbGFpbk9iamVjdCIsInZlcnNpb24iLCJkZWZhdWx0QWRkRGF0YVRvTWFwT3B0aW9ucyIsImNlbnRlck1hcCIsImtlZXBFeGlzdGluZ0NvbmZpZyIsImF1dG9DcmVhdGVMYXllcnMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREYXRhVG9NYXBVcGRhdGVyIiwic3RhdGUiLCJfcmVmIiwiX2RhdGFzZXRzJCIsIl9kYXRhc2V0cyQyIiwiX2RhdGFzZXRzJDMiLCJwYXlsb2FkIiwiZGF0YXNldHMiLCJpbmZvIiwib3B0aW9ucyIsImlzUHJvZ3Jlc3NpdmVMb2FkaW5nIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybWF0IiwiaWQiLCJ2aXNTdGF0ZSIsImNvbXBvc2VfIiwicGlja18iLCJhcHBseV8iLCJ2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwicGFyc2VkQ29uZmlnIiwic2NoZW1hIiwicGFyc2VTYXZlZENvbmZpZyIsIm9sZExheWVycyIsImxheWVycyIsImZpbHRlck5ld2x5QWRkZWRMYXllcnMiLCJubCIsImZpbmQiLCJvbCIsImZpbmRNYXBCb3VuZHNJZkNlbnRlcmVkIiwiYm91bmRzIiwiZmluZE1hcEJvdW5kcyIsInVuZGVmaW5lZCIsImlmXyIsIkJvb2xlYW4iLCJzZXRNYXBJbmZvVXBkYXRlciIsIndpdGhfIiwiX3JlZjIiLCJzdGF0ZU1hcENvbmZpZ1VwZGF0ZXIiLCJwYXlsb2FkXyIsInN0eWxlTWFwQ29uZmlnVXBkYXRlciIsInVpU3RhdGVSZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsInVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsInRvZ2dsZU1vZGFsVXBkYXRlciIsIm1lcmdlXyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInJlYWRPbmx5IiwibG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIiLCJhY3Rpb24iLCJwYXlsb2FkcyIsImZpbGVzVG9EYXRhUGF5bG9hZCIsInJlc3VsdCIsIm5leHRTdGF0ZSIsImZpbGVMb2FkaW5nIiwiZmlsZUxvYWRpbmdQcm9ncmVzcyIsInN0YXRlV2l0aERhdGEiLCJtYXAiLCJwIiwiYWRkRGF0YVRvTWFwQ29tcG9zZWQiLCJ1cGRhdGVPdmVybGF5QmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJPVkVSTEFZX0JMRU5ESU5HUyIsIm5vcm1hbCIsInZhbHVlIiwidXBkYXRlRGFya0Jhc2VNYXBMYXllcnMiLCJkYXJrQmFzZU1hcEVuYWJsZWQiLCJsYXllcklkIiwibGF5ZXIiLCJ2aXNDb25maWdTZXR0aW5ncyIsInZpc0NvbmZpZyIsInVwZGF0ZUxheWVyQ29uZmlnIiwiY29tYmluZWRNYXBTdHlsZUNoYW5nZVVwZGF0ZXIiLCJfbWFwU3RhdGUkZ2xvYmUiLCJtYXBTdHlsZSIsImdldENvbG9yTW9kZSIsImtleSIsIl9tYXBTdHlsZSRtYXBTdHlsZXMkayIsIm1hcFN0eWxlcyIsImNvbG9yTW9kZSIsInByZXZDb2xvck1vZGUiLCJzdHlsZVR5cGUiLCJuZXh0Q29sb3JNb2RlIiwibWFwU3RhdGUiLCJCQVNFX01BUF9DT0xPUl9NT0RFUyIsIkRBUksiLCJzY3JlZW4iLCJMSUdIVCIsImRhcmtlbiIsImdsb2JlIiwiZW5hYmxlZCIsIk5PX01BUF9JRCIsImJhc2VtYXAiLCJsYWJlbHMiLCJhZG1pbkxpbmVzIiwid2F0ZXIiLCJzeW5jR2xvYmVDb25maWdDb2xvcnNUb1N0eWxlIiwibWFwU3R5bGVDaGFuZ2VVcGRhdGVyIiwiX21hcFN0YXRlJGdsb2JlMiIsIm5leHRTdHlsZU9iaiIsIm5leHRHbG9iZUNvbmZpZyIsInN1cmZhY2VDb2xvciIsIkRFRkFVTFRfQkFTRU1BUF9DT0xPUiIsImJhY2tncm91bmRGaWxsQ29sb3IiLCJ3YXRlckNvbG9yIiwiYmFzZW1hcFdhdGVyRmlsbENvbG9yIiwiYWRtaW5MaW5lc0NvbG9yIiwiYmFzZW1hcEFkbWluTGluZUNvbG9yIiwiYmFzZW1hcENvbG9ycyIsImdldEJhc2VtYXBDb2xvcnNGb3JTdHlsZSIsInN0eWxlIiwibGF5ZXJHcm91cHMiLCJjb21iaW5lZFNldE1hcFZpZXdNb2RlVXBkYXRlciIsIl9tYXBTdGF0ZSRnbG9iZTMiLCJzZXRNYXBWaWV3TW9kZVVwZGF0ZXIiLCJjb21iaW5lZExheWVyVHlwZUNoYW5nZVVwZGF0ZXIiLCJvbGRMYXllckluZGV4IiwiZmluZEluZGV4Iiwib2xkTGF5ZXIiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibmV3TGF5ZXIiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJfbmV3U3RhdGUkdWlTdGF0ZSRtYXAiLCJuZXdTdGF0ZSIsInZpc1N0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwidWlTdGF0ZSIsInVpU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJtYXBTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImlzU3BsaXQiLCJzcGxpdE1hcHMiLCJpc0xlZ2VuZEFjdGl2ZSIsIm1hcENvbnRyb2xzIiwibWFwTGVnZW5kIiwiYWN0aXZlIiwidG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIiLCJwYW5lbElkIiwiaW5kZXgiLCJzZXRNYXBTcGxpdE1vZGVVcGRhdGVyIiwiX25ld1VpU3RhdGUkbWFwQ29udHJvIiwibWFwU3BsaXRNb2RlIiwicHJldk1vZGUiLCJuZXdNYXBTdGF0ZSIsIm1hcFN0YXRlU2V0TWFwU3BsaXRNb2RlVXBkYXRlciIsIm5ld1Zpc1N0YXRlIiwiTWFwU3BsaXRNb2RlIiwiU0lOR0xFX01BUCIsIkRVQUxfTUFQIiwiU1dJUEVfQ09NUEFSRSIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsIm5ld1VpU3RhdGUiLCJkZWZhdWx0UmVwbGFjZURhdGFUb01hcE9wdGlvbnMiLCJyZXBsYWNlRGF0YUluTWFwVXBkYXRlciIsIl9yZWYzIiwiZGF0YXNldFRvUmVwbGFjZUlkIiwiZGF0YXNldFRvVXNlIiwiX3BheWxvYWQkb3B0aW9ucyIsImFkZERhdGFUb01hcE9wdGlvbnMiLCJkYXRhSWRUb1VzZSIsInByZXBhcmVkU3RhdGUiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21iaW5lZC11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1xuICB0b2dnbGVNb2RhbFVwZGF0ZXIsXG4gIGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyIGFzIHVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlcixcbiAgdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIsXG4gIHRvZ2dsZVNwbGl0TWFwVXBkYXRlciBhcyB1aVN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyLFxuICByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciBhcyB1aVN0YXRlUmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXJcbn0gZnJvbSAnLi91aS1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICB1cGRhdGVWaXNEYXRhVXBkYXRlciBhcyB2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyLFxuICBzZXRNYXBJbmZvVXBkYXRlcixcbiAgbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcixcbiAgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyIGFzIHZpc1N0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyLFxuICBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZVxufSBmcm9tICcuL3Zpcy1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciBhcyBzdGF0ZU1hcENvbmZpZ1VwZGF0ZXIsXG4gIHRvZ2dsZVNwbGl0TWFwVXBkYXRlciBhcyBtYXBTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcixcbiAgc2V0TWFwU3BsaXRNb2RlVXBkYXRlciBhcyBtYXBTdGF0ZVNldE1hcFNwbGl0TW9kZVVwZGF0ZXIsXG4gIHNldE1hcFZpZXdNb2RlVXBkYXRlclxufSBmcm9tICcuL21hcC1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICBtYXBTdHlsZUNoYW5nZVVwZGF0ZXIsXG4gIHJlY2VpdmVNYXBDb25maWdVcGRhdGVyIGFzIHN0eWxlTWFwQ29uZmlnVXBkYXRlclxufSBmcm9tICcuL21hcC1zdHlsZS11cGRhdGVycyc7XG5pbXBvcnQge2ZpbGVzVG9EYXRhUGF5bG9hZH0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcbmltcG9ydCB7cGF5bG9hZF8sIGFwcGx5Xywgd2l0aF8sIGlmXywgY29tcG9zZV8sIG1lcmdlXywgcGlja199IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge01hcFN0YXRlLCBVaVN0YXRlLCBBZGREYXRhVG9NYXBQYXlsb2FkLCBQYXJzZWRDb25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtNYXBTdHlsZX0gZnJvbSAnLi9tYXAtc3R5bGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtQcm92aWRlclN0YXRlfSBmcm9tICcuL3Byb3ZpZGVyLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7XG4gIGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyQWN0aW9uLFxuICBNYXBTdHlsZUNoYW5nZVVwZGF0ZXJBY3Rpb24sXG4gIExheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb24sXG4gIFRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvbixcbiAgUmVwbGFjZURhdGFJbk1hcFBheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9uc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7TGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7aXNQbGFpbk9iamVjdCwgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcbmltcG9ydCB7QkFTRV9NQVBfQ09MT1JfTU9ERVMsIE9WRVJMQVlfQkxFTkRJTkdTLCBOT19NQVBfSUQsIE1hcFNwbGl0TW9kZX0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtnZXRCYXNlbWFwQ29sb3JzRm9yU3R5bGUsIERFRkFVTFRfQkFTRU1BUF9DT0xPUn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuZXhwb3J0IHR5cGUgS2VwbGVyR2xTdGF0ZSA9IHtcbiAgdmlzU3RhdGU6IFZpc1N0YXRlO1xuICBtYXBTdGF0ZTogTWFwU3RhdGU7XG4gIG1hcFN0eWxlOiBNYXBTdHlsZTtcbiAgdWlTdGF0ZTogVWlTdGF0ZTtcbiAgcHJvdmlkZXJTdGF0ZTogUHJvdmlkZXJTdGF0ZTtcbn07XG5cbi8vIGNvbXBvc2UgYWN0aW9uIHRvIGFwcGx5IHJlc3VsdCBtdWx0aXBsZSByZWR1Y2Vycywgd2l0aCB0aGUgb3V0cHV0IG9mIG9uZVxuXG4vKipcbiAqIFNvbWUgYWN0aW9ucyB3aWxsIGFmZmVjdCB0aGUgZW50aXJlIGtlcGxlci5sZyBpbnN0YW5jZSBzdGF0ZS5cbiAqIFRoZSB1cGRhdGVycyBmb3IgdGhlc2UgYWN0aW9ucyBpcyBleHBvcnRlZCBhcyBgY29tYmluZWRVcGRhdGVyc2AuIFRoZXNlIHVwZGF0ZXIgdGFrZSB0aGUgZW50aXJlIGluc3RhbmNlIHN0YXRlXG4gKiBhcyB0aGUgZmlyc3QgYXJndW1lbnQuIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7Y29tYmluZWRVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICAvLyBhZGQgZGF0YSB0byBtYXAgYWZ0ZXIgcmVjZWl2aW5nIGRhdGEgZnJvbSByZW1vdGUgc291cmNlc1xuICogICAgY2FzZSAnTE9BRF9SRU1PVEVfUkVTT1VSQ0VfU1VDQ0VTUyc6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgLy8gcGFzcyBpbiBrZXBsZXIuZ2wgaW5zdGFuY2Ugc3RhdGUgdG8gY29tYmluZWRVcGRhdGVyc1xuICogICAgICAgICAgbWFwOiAgY29tYmluZWRVcGRhdGVycy5hZGREYXRhVG9NYXBVcGRhdGVyKFxuICogICAgICAgICAgIHN0YXRlLmtlcGxlckdsLm1hcCxcbiAqICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gKiAgICAgICAgICAgICAgIGRhdGFzZXRzOiBhY3Rpb24uZGF0YXNldHMsXG4gKiAgICAgICAgICAgICAgIG9wdGlvbnM6IHtyZWFkT25seTogdHJ1ZX0sXG4gKiAgICAgICAgICAgICAgIGNvbmZpZzogYWN0aW9uLmNvbmZpZ1xuICogICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgfVxuICogICAgICAgICAgKVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCBjb21iaW5lZFVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkQ29uZmlnID0gY29uZmlnID0+XG4gIGlzUGxhaW5PYmplY3QoY29uZmlnKSAmJiBpc1BsYWluT2JqZWN0KGNvbmZpZy5jb25maWcpICYmIGNvbmZpZy52ZXJzaW9uO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEFkZERhdGFUb01hcE9wdGlvbnMgPSB7XG4gIGNlbnRlck1hcDogdHJ1ZSxcbiAga2VlcEV4aXN0aW5nQ29uZmlnOiBmYWxzZSxcbiAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZSxcbiAgYXV0b0NyZWF0ZVRvb2x0aXBzOiB0cnVlXG59O1xuXG4vKipcbiAqIENvbWJpbmUgZGF0YSBhbmQgZnVsbCBjb25maWd1cmF0aW9uIHVwZGF0ZSBpbiBhIHNpbmdsZSBhY3Rpb25cbiAqXG4gKiBAbWVtYmVyb2YgY29tYmluZWRVcGRhdGVyc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGtlcGxlci5nbCBpbnN0YW5jZSBzdGF0ZSwgY29udGFpbmluZyBhbGwgc3VicmVkdWNlciBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbi5wYXlsb2FkIGB7ZGF0YXNldHMsIG9wdGlvbnMsIGNvbmZpZ31gXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQuZGF0YXNldHMgLSAqKipyZXF1aXJlZCoqIGRhdGFzZXRzIGNhbiBiZSBhIGRhdGFzZXQgb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqIEVhY2ggZGF0YXNldCBvYmplY3QgbmVlZHMgdG8gaGF2ZSBgaW5mb2AgYW5kIGBkYXRhYCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBbYWN0aW9uLnBheWxvYWQub3B0aW9uc10gb3B0aW9uIG9iamVjdCBge2NlbnRlck1hcDogdHJ1ZX1gXG4gKiBAcGFyYW0gW2FjdGlvbi5wYXlsb2FkLmNvbmZpZ10gbWFwIGNvbmZpZ1xuICogQHBhcmFtIFthY3Rpb24ucGF5bG9hZC5pbmZvXSBtYXAgaW5mbyBjb250YWlucyB0aXRsZSBhbmQgZGVzY3JpcHRpb25cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERhdGFzZXRcbiAqIEBwcm9wZXJ0eSBpbmZvIC1pbmZvIG9mIGEgZGF0YXNldFxuICogQHByb3BlcnR5IGluZm8uaWQgLSBpZCBvZiB0aGlzIGRhdGFzZXQuIElmIGNvbmZpZyBpcyBkZWZpbmVkLCBgaWRgIHNob3VsZCBtYXRjaGVzIHRoZSBgZGF0YUlkYCBpbiBjb25maWcuXG4gKiBAcHJvcGVydHkgaW5mby5sYWJlbCAtIEEgZGlzcGxheSBuYW1lIG9mIHRoaXMgZGF0YXNldFxuICogQHByb3BlcnR5IGRhdGEgLSAqKipyZXF1aXJlZCoqIFRoZSBkYXRhIG9iamVjdCwgaW4gYSB0YWJ1bGFyIGZvcm1hdCB3aXRoIDIgcHJvcGVydGllcyBgZmllbGRzYCBhbmQgYHJvd3NgXG4gKiBAcHJvcGVydHkgZGF0YS5maWVsZHMgLSAqKipyZXF1aXJlZCoqIEFycmF5IG9mIGZpZWxkcyxcbiAqIEBwcm9wZXJ0eSBkYXRhLmZpZWxkcy5uYW1lIC0gKioqcmVxdWlyZWQqKiBOYW1lIG9mIHRoZSBmaWVsZCxcbiAqIEBwcm9wZXJ0eSBkYXRhLnJvd3MgLSAqKipyZXF1aXJlZCoqIEFycmF5IG9mIHJvd3MsIGluIGEgdGFidWxhciBmb3JtYXQgd2l0aCBgZmllbGRzYCBhbmQgYHJvd3NgXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRGF0YVRvTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIHtwYXlsb2FkfToge3BheWxvYWQ6IEFkZERhdGFUb01hcFBheWxvYWR9XG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3Qge2RhdGFzZXRzLCBjb25maWcsIGluZm99ID0gcGF5bG9hZDtcblxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIC4uLmRlZmF1bHRBZGREYXRhVG9NYXBPcHRpb25zLFxuICAgIC4uLnBheWxvYWQub3B0aW9uc1xuICB9O1xuXG4gIC8vIGNoZWNrIGlmIHByb2dyZXNzaXZlIGxvYWRpbmcgZGF0YXNldCBieSBiYXRjaGVzLCBhbmQgdXBkYXRlIHZpc1N0YXRlIGRpcmVjdGx5XG4gIGNvbnN0IGlzUHJvZ3Jlc3NpdmVMb2FkaW5nID1cbiAgICBBcnJheS5pc0FycmF5KGRhdGFzZXRzKSAmJlxuICAgIGRhdGFzZXRzWzBdPy5pbmZvLmZvcm1hdCA9PT0gJ2Fycm93JyAmJlxuICAgIGRhdGFzZXRzWzBdPy5pbmZvLmlkICYmXG4gICAgZGF0YXNldHNbMF0/LmluZm8uaWQgaW4gc3RhdGUudmlzU3RhdGUuZGF0YXNldHM7XG4gIGlmIChpc1Byb2dyZXNzaXZlTG9hZGluZykge1xuICAgIHJldHVybiBjb21wb3NlXzxLZXBsZXJHbFN0YXRlPihbXG4gICAgICBwaWNrXygndmlzU3RhdGUnKShcbiAgICAgICAgYXBwbHlfPFZpc1N0YXRlLCBhbnk+KHZpc1N0YXRlVXBkYXRlVmlzRGF0YVVwZGF0ZXIsIHtcbiAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIGNvbmZpZ1xuICAgICAgICB9KVxuICAgICAgKVxuICAgIF0pKHN0YXRlKTtcbiAgfVxuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgbGV0IHBhcnNlZENvbmZpZzogUGFyc2VkQ29uZmlnID0gY29uZmlnO1xuXG4gIGlmIChpc1ZhbGlkQ29uZmlnKGNvbmZpZykpIHtcbiAgICAvLyBpZiBwYXNzZWQgaW4gc2F2ZWQgY29uZmlnXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHBhcnNlZENvbmZpZyA9IHN0YXRlLnZpc1N0YXRlLnNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKGNvbmZpZyk7XG4gIH1cbiAgY29uc3Qgb2xkTGF5ZXJzID0gc3RhdGUudmlzU3RhdGUubGF5ZXJzO1xuICBjb25zdCBmaWx0ZXJOZXdseUFkZGVkTGF5ZXJzID0gKGxheWVyczogTGF5ZXJbXSkgPT5cbiAgICBsYXllcnMuZmlsdGVyKG5sID0+ICFvbGRMYXllcnMuZmluZChvbCA9PiBvbCA9PT0gbmwpKTtcblxuICAvLyBSZXR1cm5zIHVuZGVmaW5lZCBpZiBub3QgZm91bmQsIHRvIG1ha2UgdHlwZXNjcmlwdCBoYXBweVxuICBjb25zdCBmaW5kTWFwQm91bmRzSWZDZW50ZXJlZCA9IChsYXllcnM6IExheWVyW10pID0+IHtcbiAgICBjb25zdCBib3VuZHMgPSBvcHRpb25zLmNlbnRlck1hcCAmJiBmaW5kTWFwQm91bmRzKGxheWVycyk7XG4gICAgcmV0dXJuIGJvdW5kcyA/IGJvdW5kcyA6IHVuZGVmaW5lZDtcbiAgfTtcblxuICByZXR1cm4gY29tcG9zZV88S2VwbGVyR2xTdGF0ZT4oW1xuICAgIHBpY2tfKCd2aXNTdGF0ZScpKFxuICAgICAgLy8gdGhpcyBwYXJ0IGNhbiBiZSBhc3luY1xuICAgICAgYXBwbHlfPFZpc1N0YXRlLCBhbnk+KHZpc1N0YXRlVXBkYXRlVmlzRGF0YVVwZGF0ZXIsIHtcbiAgICAgICAgZGF0YXNldHMsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIGNvbmZpZzogcGFyc2VkQ29uZmlnXG4gICAgICB9KVxuICAgICksXG5cbiAgICBpZl8oQm9vbGVhbihpbmZvKSwgcGlja18oJ3Zpc1N0YXRlJykoYXBwbHlfPFZpc1N0YXRlLCBhbnk+KHNldE1hcEluZm9VcGRhdGVyLCB7aW5mb30pKSksXG4gICAgLy8gTm90ZSB0aGF0IGZpdCBib3VuZHMgaGVyZSB3b24ndCBiZSBjYWxsZWQgaW4gY2FzZSBkYXRhc2V0cyBhcmUgY3JlYXRlZCBpbiBUYXNrcy5cbiAgICAvLyBBIHNlcGFyYXRlIFRhc2sgdG8gdXBkYXRlIGJvdW5kcyBpcyBjcmVhdGVkIG9uY2UgdGhlIGRhdGFzZXRzIGFyZSByZWFkeS5cbiAgICB3aXRoXygoe3Zpc1N0YXRlfSkgPT5cbiAgICAgIHBpY2tfKCdtYXBTdGF0ZScpKFxuICAgICAgICBhcHBseV8oXG4gICAgICAgICAgc3RhdGVNYXBDb25maWdVcGRhdGVyLFxuICAgICAgICAgIHBheWxvYWRfKHtcbiAgICAgICAgICAgIGNvbmZpZzogcGFyc2VkQ29uZmlnLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIGJvdW5kczogZmluZE1hcEJvdW5kc0lmQ2VudGVyZWQoZmlsdGVyTmV3bHlBZGRlZExheWVycyh2aXNTdGF0ZS5sYXllcnMpKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIHBpY2tfKCdtYXBTdHlsZScpKGFwcGx5XyhzdHlsZU1hcENvbmZpZ1VwZGF0ZXIsIHBheWxvYWRfKHtjb25maWc6IHBhcnNlZENvbmZpZywgb3B0aW9uc30pKSksXG4gICAgcGlja18oJ3VpU3RhdGUnKShcbiAgICAgIGFwcGx5Xyh1aVN0YXRlUmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIsIHBheWxvYWRfKHtjb25maWc6IHBhcnNlZENvbmZpZywgb3B0aW9uc30pKVxuICAgICksXG4gICAgcGlja18oJ3VpU3RhdGUnKShhcHBseV8odWlTdGF0ZUxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyLCBwYXlsb2FkXyhudWxsKSkpLFxuXG4gICAgcGlja18oJ3VpU3RhdGUnKShhcHBseV8odG9nZ2xlTW9kYWxVcGRhdGVyLCBwYXlsb2FkXyhudWxsKSkpLFxuICAgIHBpY2tfKCd1aVN0YXRlJykoXG4gICAgICBtZXJnZV8oXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAncmVhZE9ubHknKVxuICAgICAgICAgID8ge3JlYWRPbmx5OiBvcHRpb25zLnJlYWRPbmx5fVxuICAgICAgICAgIDoge31cbiAgICAgIClcbiAgICApXG4gIF0pKHN0YXRlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICAvLyBzdGlsbCBtb3JlIHRvIGxvYWRcbiAgY29uc3QgcGF5bG9hZHMgPSBmaWxlc1RvRGF0YVBheWxvYWQoYWN0aW9uLnJlc3VsdCk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IGNvbXBvc2VfKFtcbiAgICBwaWNrXygndmlzU3RhdGUnKShcbiAgICAgIG1lcmdlXyh7XG4gICAgICAgIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZmlsZUxvYWRpbmdQcm9ncmVzczoge31cbiAgICAgIH0pXG4gICAgKVxuICBdKShzdGF0ZSk7XG4gIC8vIG1ha2UgbXVsdGlwbGUgYWRkIGRhdGEgdG8gbWFwIGNhbGxzXG4gIGNvbnN0IHN0YXRlV2l0aERhdGEgPSBjb21wb3NlXyhwYXlsb2Fkcy5tYXAocCA9PiBhcHBseV8oYWRkRGF0YVRvTWFwVXBkYXRlciwgcGF5bG9hZF8ocCkpKSkoXG4gICAgbmV4dFN0YXRlXG4gICk7XG4gIHJldHVybiBzdGF0ZVdpdGhEYXRhIGFzIEtlcGxlckdsU3RhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkRGF0YVRvTWFwQ29tcG9zZWQgPSBhZGREYXRhVG9NYXBVcGRhdGVyO1xuXG4vKipcbiAqIEhlbHBlciB3aGljaCB1cGRhdGVzIG1hcCBvdmVybGF5IGJsZW5kaW5nIG1vZGUgaW4gdmlzU3RhdGUsXG4gKiBidXQgb25seSBpZiBpdCdzIG5vdCBjdXJyZW50bHkgaW4gdGhlIGBub3JtYWxgIG1vZGUuXG4gKi9cbmNvbnN0IHVwZGF0ZU92ZXJsYXlCbGVuZGluZyA9IG92ZXJsYXlCbGVuZGluZyA9PiB2aXNTdGF0ZSA9PiB7XG4gIGlmICh2aXNTdGF0ZS5vdmVybGF5QmxlbmRpbmcgIT09IE9WRVJMQVlfQkxFTkRJTkdTLm5vcm1hbC52YWx1ZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi52aXNTdGF0ZSxcbiAgICAgIG92ZXJsYXlCbGVuZGluZ1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHZpc1N0YXRlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgd2hpY2ggdXBkYXRlcyBgZGFya0Jhc2VNYXBFbmFibGVkYCBpbiBhbGwgdGhlIGxheWVycyBpbiB2aXNTdGF0ZSB3aGljaFxuICogaGF2ZSB0aGlzIGNvbmZpZyBzZXR0aW5nIChvciBpbiBvbmUgc3BlY2lmaWMgbGF5ZXIgaWYgdGhlIGBsYXllcklkYCBwYXJhbSBpcyBwcm92aWRlZCkuXG4gKi9cbmNvbnN0IHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzID1cbiAgKGRhcmtCYXNlTWFwRW5hYmxlZDogYm9vbGVhbiwgbGF5ZXJJZDogc3RyaW5nIHwgbnVsbCA9IG51bGwpID0+XG4gIHZpc1N0YXRlID0+ICh7XG4gICAgLi4udmlzU3RhdGUsXG4gICAgbGF5ZXJzOiB2aXNTdGF0ZS5sYXllcnMubWFwKGxheWVyID0+IHtcbiAgICAgIGlmICghbGF5ZXJJZCB8fCBsYXllci5pZCA9PT0gbGF5ZXJJZCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLCAnZGFya0Jhc2VNYXBFbmFibGVkJykpIHtcbiAgICAgICAgICBjb25zdCB7dmlzQ29uZmlnfSA9IGxheWVyLmNvbmZpZztcbiAgICAgICAgICByZXR1cm4gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgdmlzQ29uZmlnOiB7Li4udmlzQ29uZmlnLCBkYXJrQmFzZU1hcEVuYWJsZWR9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsYXllcjtcbiAgICB9KVxuICB9KTtcblxuLyoqXG4gKiBVcGRhdGVyIHRoYXQgY2hhbmdlcyB0aGUgbWFwIHN0eWxlIGJ5IGNhbGxpbmcgbWFwU3R5bGVDaGFuZ2VVcGRhdGVyIG9uIHZpc1N0YXRlLlxuICogSW4gYWRkaXRpb24gdG8gdGhhdCwgaXQgZG9lcyB0aGUgZm9sbG93aW5nOlxuICpcbiAqICAgMS4gVXBkYXRlIG1hcCBvdmVybGF5IGJsZW5kaW5nIG1vZGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBjb2xvck1vZGUgb2YgdGhlXG4gKiAgICAgIGJhc2UgbWFwLCBidXQgb25seSBpZiBpdCdzIG5vdCBpbiB0aGUgYG5vcm1hbGAgbW9kZS5cbiAqXG4gKiAgIDIuIFVwZGF0ZSBhbGwgdGhlIGxheWVycyB3aGljaCBoYXZlIHRoZSBgZGFya0Jhc2VNYXBFbmFibGVkYCBjb25maWcgc2V0dGluZ1xuICogICAgICBhZGp1c3RpbmcgaXQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBjb2xvck1vZGUgb2YgdGhlIGJhc2UgbWFwLlxuICpcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbWJpbmVkTWFwU3R5bGVDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdHlsZUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCB7cGF5bG9hZH0gPSBhY3Rpb247XG4gIGNvbnN0IHttYXBTdHlsZX0gPSBzdGF0ZTtcbiAgY29uc3QgZ2V0Q29sb3JNb2RlID0ga2V5ID0+IG1hcFN0eWxlLm1hcFN0eWxlc1trZXldPy5jb2xvck1vZGU7XG4gIGNvbnN0IHByZXZDb2xvck1vZGUgPSBnZXRDb2xvck1vZGUobWFwU3R5bGUuc3R5bGVUeXBlKTtcbiAgY29uc3QgbmV4dENvbG9yTW9kZSA9IGdldENvbG9yTW9kZShwYXlsb2FkLnN0eWxlVHlwZSk7XG4gIGxldCB7dmlzU3RhdGUsIG1hcFN0YXRlfSA9IHN0YXRlO1xuICBpZiAobmV4dENvbG9yTW9kZSAhPT0gcHJldkNvbG9yTW9kZSkge1xuICAgIHN3aXRjaCAobmV4dENvbG9yTW9kZSkge1xuICAgICAgY2FzZSBCQVNFX01BUF9DT0xPUl9NT0RFUy5EQVJLOlxuICAgICAgICB2aXNTdGF0ZSA9IGNvbXBvc2VfKFtcbiAgICAgICAgICB1cGRhdGVPdmVybGF5QmxlbmRpbmcoT1ZFUkxBWV9CTEVORElOR1Muc2NyZWVuLnZhbHVlKSxcbiAgICAgICAgICB1cGRhdGVEYXJrQmFzZU1hcExheWVycyh0cnVlKVxuICAgICAgICBdKSh2aXNTdGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBCQVNFX01BUF9DT0xPUl9NT0RFUy5MSUdIVDpcbiAgICAgICAgdmlzU3RhdGUgPSBjb21wb3NlXyhbXG4gICAgICAgICAgdXBkYXRlT3ZlcmxheUJsZW5kaW5nKE9WRVJMQVlfQkxFTkRJTkdTLmRhcmtlbi52YWx1ZSksXG4gICAgICAgICAgdXBkYXRlRGFya0Jhc2VNYXBMYXllcnMoZmFsc2UpXG4gICAgICAgIF0pKHZpc1N0YXRlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgfVxuXG4gIC8vIFVwZGF0ZSBnbG9iZSBjb25maWcgY29sb3JzIHdoZW4gc3R5bGUgY2hhbmdlcyBhbmQgZ2xvYmUgaXMgZW5hYmxlZFxuICBpZiAobWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQpIHtcbiAgICAvLyBTd2l0Y2hpbmcgZnJvbSBcIk5vIEJhc2VtYXBcIiB0byBhIGJhc2VtYXAgLSByZXN0b3JlIGJhc2VtYXAgc3ViLXRvZ2dsZXNcbiAgICBpZiAocGF5bG9hZC5zdHlsZVR5cGUgIT09IE5PX01BUF9JRCAmJiBtYXBTdHlsZS5zdHlsZVR5cGUgPT09IE5PX01BUF9JRCkge1xuICAgICAgbWFwU3RhdGUgPSB7XG4gICAgICAgIC4uLm1hcFN0YXRlLFxuICAgICAgICBnbG9iZToge1xuICAgICAgICAgIC4uLm1hcFN0YXRlLmdsb2JlLFxuICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgLi4ubWFwU3RhdGUuZ2xvYmUuY29uZmlnLFxuICAgICAgICAgICAgYmFzZW1hcDogdHJ1ZSxcbiAgICAgICAgICAgIGxhYmVsczogdHJ1ZSxcbiAgICAgICAgICAgIGFkbWluTGluZXM6IHRydWUsXG4gICAgICAgICAgICB3YXRlcjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgbWFwU3RhdGUgPSBzeW5jR2xvYmVDb25maWdDb2xvcnNUb1N0eWxlKG1hcFN0YXRlLCBtYXBTdHlsZSwgcGF5bG9hZC5zdHlsZVR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICB2aXNTdGF0ZSxcbiAgICBtYXBTdGF0ZSxcbiAgICBtYXBTdHlsZTogbWFwU3R5bGVDaGFuZ2VVcGRhdGVyKG1hcFN0eWxlLCB7cGF5bG9hZDogey4uLnBheWxvYWR9fSlcbiAgfTtcbn07XG5cbi8qKlxuICogRGVyaXZlIGdsb2JlIGJhc2VtYXAgY29sb3JzIChzdXJmYWNlIC8gd2F0ZXIgLyBhZG1pbiBsaW5lcykgZnJvbSBhIG1hcCBzdHlsZSBhbmRcbiAqIHJldHVybiBhbiB1cGRhdGVkIG1hcFN0YXRlIHdpdGggdGhvc2UgY29sb3JzIHdyaXR0ZW4gaW50byBgZ2xvYmUuY29uZmlnYC4gVXNlZCBib3RoXG4gKiB3aGVuIHRoZSBiYXNlIG1hcCBzdHlsZSBjaGFuZ2VzIGFuZCB3aGVuIGVudGVyaW5nIGdsb2JlIG1vZGUsIHNvIHRoZSBnbG9iZSBhbHdheXNcbiAqIHJlZmxlY3RzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgYmFzZW1hcCBpbnN0ZWFkIG9mIHRoZSBzdGF0aWMgREVGQVVMVF9HTE9CRV9DT05GSUcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzeW5jR2xvYmVDb25maWdDb2xvcnNUb1N0eWxlKFxuICBtYXBTdGF0ZTogTWFwU3RhdGUsXG4gIG1hcFN0eWxlOiBNYXBTdHlsZSxcbiAgc3R5bGVUeXBlOiBzdHJpbmdcbik6IE1hcFN0YXRlIHtcbiAgaWYgKCFtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZCkge1xuICAgIHJldHVybiBtYXBTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdHlsZU9iaiA9IG1hcFN0eWxlLm1hcFN0eWxlc1tzdHlsZVR5cGVdO1xuICBjb25zdCBuZXh0R2xvYmVDb25maWcgPSB7Li4ubWFwU3RhdGUuZ2xvYmUuY29uZmlnfTtcblxuICBpZiAoc3R5bGVUeXBlID09PSBOT19NQVBfSUQpIHtcbiAgICBuZXh0R2xvYmVDb25maWcuYmFzZW1hcCA9IGZhbHNlO1xuICAgIG5leHRHbG9iZUNvbmZpZy5sYWJlbHMgPSBmYWxzZTtcbiAgICBuZXh0R2xvYmVDb25maWcuYWRtaW5MaW5lcyA9IGZhbHNlO1xuICAgIG5leHRHbG9iZUNvbmZpZy53YXRlciA9IGZhbHNlO1xuICAgIG5leHRHbG9iZUNvbmZpZy5zdXJmYWNlQ29sb3IgPSBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFja2dyb3VuZEZpbGxDb2xvcjtcbiAgICBuZXh0R2xvYmVDb25maWcud2F0ZXJDb2xvciA9IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYXNlbWFwV2F0ZXJGaWxsQ29sb3I7XG4gICAgbmV4dEdsb2JlQ29uZmlnLmFkbWluTGluZXNDb2xvciA9IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYXNlbWFwQWRtaW5MaW5lQ29sb3I7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYmFzZW1hcENvbG9ycyA9IG5leHRTdHlsZU9ialxuICAgICAgPyBnZXRCYXNlbWFwQ29sb3JzRm9yU3R5bGUoc3R5bGVUeXBlLCB7XG4gICAgICAgICAgc3R5bGU6IG5leHRTdHlsZU9iai5zdHlsZSxcbiAgICAgICAgICBsYXllckdyb3VwczogbmV4dFN0eWxlT2JqLmxheWVyR3JvdXBzXG4gICAgICAgIH0pXG4gICAgICA6IC8vIFN0eWxlIG9iamVjdCBub3QgeWV0IGxvYWRlZCAtIHVzZSBrbm93biBwcmVzZXRzIGJ5IHN0eWxlIHR5cGVcbiAgICAgICAgZ2V0QmFzZW1hcENvbG9yc0ZvclN0eWxlKHN0eWxlVHlwZSk7XG4gICAgbmV4dEdsb2JlQ29uZmlnLnN1cmZhY2VDb2xvciA9IGJhc2VtYXBDb2xvcnMuYmFja2dyb3VuZEZpbGxDb2xvcjtcbiAgICBuZXh0R2xvYmVDb25maWcud2F0ZXJDb2xvciA9IGJhc2VtYXBDb2xvcnMuYmFzZW1hcFdhdGVyRmlsbENvbG9yO1xuICAgIG5leHRHbG9iZUNvbmZpZy5hZG1pbkxpbmVzQ29sb3IgPSBiYXNlbWFwQ29sb3JzLmJhc2VtYXBBZG1pbkxpbmVDb2xvcjtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ubWFwU3RhdGUsXG4gICAgZ2xvYmU6IHtcbiAgICAgIC4uLm1hcFN0YXRlLmdsb2JlLFxuICAgICAgY29uZmlnOiBuZXh0R2xvYmVDb25maWdcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlciB0aGF0IHN3aXRjaGVzIHRoZSBtYXAgdmlldyBtb2RlICgyRCAvIDNEIC8gR2xvYmUpLiBSdW5zIHRoZSBiYXNlIG1hcC1zdGF0ZVxuICogdXBkYXRlciBhbmQsIHdoZW4gZW50ZXJpbmcgZ2xvYmUgbW9kZSwgc3luY3MgdGhlIGdsb2JlIGJhc2VtYXAgY29sb3JzIHRvIHRoZVxuICogY3VycmVudGx5IHNlbGVjdGVkIG1hcCBzdHlsZSBzbyB0aGUgZ2xvYmUgZG9lc24ndCBzaG93IHN0YWxlIGRlZmF1bHQgY29sb3JzLlxuICovXG5leHBvcnQgY29uc3QgY29tYmluZWRTZXRNYXBWaWV3TW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5TZXRNYXBWaWV3TW9kZVVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBsZXQgbWFwU3RhdGUgPSBzZXRNYXBWaWV3TW9kZVVwZGF0ZXIoc3RhdGUubWFwU3RhdGUsIGFjdGlvbik7XG5cbiAgaWYgKG1hcFN0YXRlLmdsb2JlPy5lbmFibGVkKSB7XG4gICAgbWFwU3RhdGUgPSBzeW5jR2xvYmVDb25maWdDb2xvcnNUb1N0eWxlKG1hcFN0YXRlLCBzdGF0ZS5tYXBTdHlsZSwgc3RhdGUubWFwU3R5bGUuc3R5bGVUeXBlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwU3RhdGVcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlciB0aGF0IGNoYW5nZXMgdGhlIGxheWVyIHR5cGUgYnkgY2FsbGluZyBgbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcmAgb24gdmlzU3RhdGUuXG4gKiBJbiBhZGRpdGlvbiB0byB0aGF0LCBpZiB0aGUgbmV3IGxheWVyIHR5cGUgaGFzIHRoZSBgZGFya0Jhc2VNYXBFbmFibGVkYCBjb25maWdcbiAqIHNldHRpbmcsIHdlIGFkanVzdCBpdCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbG9yTW9kZSBvZiB0aGUgYmFzZSBtYXAuc1xuICovXG5leHBvcnQgY29uc3QgY29tYmluZWRMYXllclR5cGVDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBMYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgbGV0IHt2aXNTdGF0ZX0gPSBzdGF0ZTtcbiAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHZpc1N0YXRlLmxheWVycy5maW5kSW5kZXgobGF5ZXIgPT4gbGF5ZXIgPT09IGFjdGlvbi5vbGRMYXllcik7XG4gIHZpc1N0YXRlID0gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcih2aXNTdGF0ZSwgYWN0aW9uKTtcbiAgY29uc3QgbmV3TGF5ZXIgPSB2aXNTdGF0ZS5sYXllcnNbb2xkTGF5ZXJJbmRleF07XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3TGF5ZXI/LnZpc0NvbmZpZ1NldHRpbmdzLCAnZGFya0Jhc2VNYXBFbmFibGVkJykpIHtcbiAgICBjb25zdCB7bWFwU3R5bGV9ID0gc3RhdGU7XG4gICAgY29uc3Qge2NvbG9yTW9kZX0gPSBtYXBTdHlsZS5tYXBTdHlsZXNbbWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgICBjb25zdCB7ZGFya0Jhc2VNYXBFbmFibGVkfSA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWc7XG4gICAgc3dpdGNoIChjb2xvck1vZGUpIHtcbiAgICAgIGNhc2UgQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSzpcbiAgICAgICAgaWYgKCFkYXJrQmFzZU1hcEVuYWJsZWQpIHtcbiAgICAgICAgICB2aXNTdGF0ZSA9IHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzKHRydWUsIG5ld0xheWVyLmlkKSh2aXNTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEJBU0VfTUFQX0NPTE9SX01PREVTLkxJR0hUOlxuICAgICAgICBpZiAoZGFya0Jhc2VNYXBFbmFibGVkKSB7XG4gICAgICAgICAgdmlzU3RhdGUgPSB1cGRhdGVEYXJrQmFzZU1hcExheWVycyhmYWxzZSwgbmV3TGF5ZXIuaWQpKHZpc1N0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGVcbiAgfTtcbn07XG5cbi8qKlxuICogTWFrZSBtYXBMZWdlbmQgYWN0aXZlIHdoZW4gdG9nZ2xlU3BsaXRNYXAgYWN0aW9uIGlzIGNhbGxlZFxuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBUb2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICB2aXNTdGF0ZTogdmlzU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUudmlzU3RhdGUsIGFjdGlvbiksXG4gICAgdWlTdGF0ZTogdWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcihzdGF0ZS51aVN0YXRlKSxcbiAgICBtYXBTdGF0ZTogbWFwU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUubWFwU3RhdGUpXG4gIH07XG5cbiAgY29uc3QgaXNTcGxpdCA9IG5ld1N0YXRlLnZpc1N0YXRlLnNwbGl0TWFwcy5sZW5ndGggIT09IDA7XG4gIGNvbnN0IGlzTGVnZW5kQWN0aXZlID0gbmV3U3RhdGUudWlTdGF0ZS5tYXBDb250cm9scz8ubWFwTGVnZW5kPy5hY3RpdmU7XG4gIGlmIChpc1NwbGl0ICYmICFpc0xlZ2VuZEFjdGl2ZSkge1xuICAgIG5ld1N0YXRlLnVpU3RhdGUgPSB0b2dnbGVNYXBDb250cm9sVXBkYXRlcihuZXdTdGF0ZS51aVN0YXRlLCB7XG4gICAgICBwYXlsb2FkOiB7cGFuZWxJZDogJ21hcExlZ2VuZCcsIGluZGV4OiBhY3Rpb24ucGF5bG9hZH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IG1hcCBzcGxpdCBtb2RlIHVwZGF0ZXIgLSBjb29yZGluYXRlcyBzdGF0ZSBjaGFuZ2VzIGFjcm9zcyB2aXNTdGF0ZSwgbWFwU3RhdGUsIGFuZCB1aVN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRNYXBTcGxpdE1vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuU2V0TWFwU3BsaXRNb2RlVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IHttYXBTcGxpdE1vZGV9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IHByZXZNb2RlID0gc3RhdGUubWFwU3RhdGUubWFwU3BsaXRNb2RlO1xuXG4gIGlmIChtYXBTcGxpdE1vZGUgPT09IHByZXZNb2RlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3TWFwU3RhdGUgPSBtYXBTdGF0ZVNldE1hcFNwbGl0TW9kZVVwZGF0ZXIoc3RhdGUubWFwU3RhdGUsIGFjdGlvbik7XG5cbiAgbGV0IG5ld1Zpc1N0YXRlID0gey4uLnN0YXRlLnZpc1N0YXRlfTtcblxuICBzd2l0Y2ggKG1hcFNwbGl0TW9kZSkge1xuICAgIGNhc2UgTWFwU3BsaXRNb2RlLlNJTkdMRV9NQVA6XG4gICAgICBuZXdWaXNTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3VmlzU3RhdGUsXG4gICAgICAgIHNwbGl0TWFwczogW11cbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1hcFNwbGl0TW9kZS5EVUFMX01BUDpcbiAgICBjYXNlIE1hcFNwbGl0TW9kZS5TV0lQRV9DT01QQVJFOlxuICAgICAgaWYgKHByZXZNb2RlID09PSBNYXBTcGxpdE1vZGUuU0lOR0xFX01BUCkge1xuICAgICAgICBuZXdWaXNTdGF0ZSA9IHtcbiAgICAgICAgICAuLi5uZXdWaXNTdGF0ZSxcbiAgICAgICAgICBzcGxpdE1hcHM6IGNvbXB1dGVTcGxpdE1hcExheWVycyhuZXdWaXNTdGF0ZS5sYXllcnMsIHtcbiAgICAgICAgICAgIGR1cGxpY2F0ZTogbWFwU3BsaXRNb2RlID09PSBNYXBTcGxpdE1vZGUuU1dJUEVfQ09NUEFSRVxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cblxuICBsZXQgbmV3VWlTdGF0ZSA9IHVpU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUudWlTdGF0ZSk7XG5cbiAgY29uc3QgaXNTcGxpdCA9IG5ld1Zpc1N0YXRlLnNwbGl0TWFwcy5sZW5ndGggIT09IDA7XG4gIGNvbnN0IGlzTGVnZW5kQWN0aXZlID0gbmV3VWlTdGF0ZS5tYXBDb250cm9scz8ubWFwTGVnZW5kPy5hY3RpdmU7XG4gIGlmIChpc1NwbGl0ICYmICFpc0xlZ2VuZEFjdGl2ZSkge1xuICAgIG5ld1VpU3RhdGUgPSB0b2dnbGVNYXBDb250cm9sVXBkYXRlcihuZXdVaVN0YXRlLCB7XG4gICAgICBwYXlsb2FkOiB7cGFuZWxJZDogJ21hcExlZ2VuZCcsIGluZGV4OiAwfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtYXBTdGF0ZTogbmV3TWFwU3RhdGUsXG4gICAgdmlzU3RhdGU6IG5ld1Zpc1N0YXRlLFxuICAgIHVpU3RhdGU6IG5ld1VpU3RhdGVcbiAgfTtcbn07XG5cbmNvbnN0IGRlZmF1bHRSZXBsYWNlRGF0YVRvTWFwT3B0aW9ucyA9IHtcbiAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICBjZW50ZXJNYXA6IHRydWUsXG4gIGF1dG9DcmVhdGVMYXllcnM6IGZhbHNlXG59O1xuXG4vKipcbiAqIFVwZGF0ZXIgcmVwbGFjZSBhIGRhdGFzZXQgaW4gc3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHJlcGxhY2VEYXRhSW5NYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAge3BheWxvYWR9OiB7cGF5bG9hZDogUmVwbGFjZURhdGFJbk1hcFBheWxvYWR9XG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3Qge2RhdGFzZXRUb1JlcGxhY2VJZCwgZGF0YXNldFRvVXNlLCBvcHRpb25zID0ge319ID0gcGF5bG9hZDtcbiAgY29uc3QgYWRkRGF0YVRvTWFwT3B0aW9ucyA9IHsuLi5kZWZhdWx0UmVwbGFjZURhdGFUb01hcE9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuXG4gIC8vIGNoZWNrIGlmIGRhdGFzZXQgaXMgdGhlcmVcbiAgaWYgKCFzdGF0ZS52aXNTdGF0ZS5kYXRhc2V0c1tkYXRhc2V0VG9SZXBsYWNlSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGRhdGFzZXRUb1VzZSBpcyBQcm90b0RhdGFzZXRcbiAgY29uc3QgZGF0YUlkVG9Vc2UgPSBkYXRhc2V0VG9Vc2UuaW5mby5pZDtcbiAgaWYgKCFkYXRhSWRUb1VzZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyByZW1vdmUgZGF0YXNldCBhbmQgcHV0IGRlcGVuZGVuY2llcyBpbiB0b0JlTWVyZ2VkXG4gIGNvbnN0IHByZXBhcmVkU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGU6IHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlKHN0YXRlLnZpc1N0YXRlLCBkYXRhc2V0VG9SZXBsYWNlSWQsIGRhdGFJZFRvVXNlKVxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IGFkZERhdGFUb01hcFVwZGF0ZXIoXG4gICAgcHJlcGFyZWRTdGF0ZSxcbiAgICBwYXlsb2FkXyh7XG4gICAgICBkYXRhc2V0czogZGF0YXNldFRvVXNlLFxuICAgICAgLy8gc2hvdWxkIHpvb20gdG8gbmV3IGRhdGFzZXRcbiAgICAgIG9wdGlvbnM6IGFkZERhdGFUb01hcE9wdGlvbnNcbiAgICB9KVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBR0EsSUFBQUEsZ0JBQUEsR0FBQUMsT0FBQTtBQU9BLElBQUFDLGlCQUFB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
484
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0b2dnbGVNb2RhbFVwZGF0ZXIiLCJsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsInVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsInRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyIiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwidWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsInJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwidWlTdGF0ZVJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJ2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwidmlzU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSIsInN0YXRlTWFwQ29uZmlnVXBkYXRlciIsIm1hcFN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwic2V0TWFwU3BsaXRNb2RlVXBkYXRlciIsIm1hcFN0YXRlU2V0TWFwU3BsaXRNb2RlVXBkYXRlciIsInNldE1hcFZpZXdNb2RlVXBkYXRlciIsIm1hcFN0eWxlQ2hhbmdlVXBkYXRlciIsInN0eWxlTWFwQ29uZmlnVXBkYXRlciIsImZpbGVzVG9EYXRhUGF5bG9hZCIsInBheWxvYWRfIiwiYXBwbHlfIiwid2l0aF8iLCJpZl8iLCJjb21wb3NlXyIsIm1lcmdlXyIsInBpY2tfIiwiaXNQbGFpbk9iamVjdCIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImZpbmRNYXBCb3VuZHMiLCJCQVNFX01BUF9DT0xPUl9NT0RFUyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwiTk9fTUFQX0lEIiwiTWFwU3BsaXRNb2RlIiwiZ2V0QmFzZW1hcENvbG9yc0ZvclN0eWxlIiwiREVGQVVMVF9CQVNFTUFQX0NPTE9SIiwiY29tYmluZWRVcGRhdGVycyIsImlzVmFsaWRDb25maWciLCJjb25maWciLCJ2ZXJzaW9uIiwiZGVmYXVsdEFkZERhdGFUb01hcE9wdGlvbnMiLCJjZW50ZXJNYXAiLCJrZWVwRXhpc3RpbmdDb25maWciLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYXV0b0NyZWF0ZVRvb2x0aXBzIiwiYWRkRGF0YVRvTWFwVXBkYXRlciIsInN0YXRlIiwiX3JlZiIsIl9kYXRhc2V0cyQiLCJfZGF0YXNldHMkMiIsIl9kYXRhc2V0cyQzIiwicGF5bG9hZCIsImRhdGFzZXRzIiwiaW5mbyIsIm9wdGlvbnMiLCJfb2JqZWN0U3ByZWFkIiwiaXNQcm9ncmVzc2l2ZUxvYWRpbmciLCJBcnJheSIsImlzQXJyYXkiLCJmb3JtYXQiLCJpZCIsInZpc1N0YXRlIiwicGFyc2VkQ29uZmlnIiwic2NoZW1hIiwicGFyc2VTYXZlZENvbmZpZyIsIm9sZExheWVycyIsImxheWVycyIsImZpbHRlck5ld2x5QWRkZWRMYXllcnMiLCJmaWx0ZXIiLCJubCIsImZpbmQiLCJvbCIsImZpbmRNYXBCb3VuZHNJZkNlbnRlcmVkIiwiYm91bmRzIiwidW5kZWZpbmVkIiwiQm9vbGVhbiIsIl9yZWYyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicmVhZE9ubHkiLCJhY3Rpb24iLCJwYXlsb2FkcyIsInJlc3VsdCIsIm5leHRTdGF0ZSIsImZpbGVMb2FkaW5nIiwiZmlsZUxvYWRpbmdQcm9ncmVzcyIsInN0YXRlV2l0aERhdGEiLCJtYXAiLCJwIiwiYWRkRGF0YVRvTWFwQ29tcG9zZWQiLCJ1cGRhdGVPdmVybGF5QmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJub3JtYWwiLCJ2YWx1ZSIsInVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzIiwiZGFya0Jhc2VNYXBFbmFibGVkIiwibGF5ZXJJZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImxheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJ2aXNDb25maWciLCJ1cGRhdGVMYXllckNvbmZpZyIsImNvbWJpbmVkTWFwU3R5bGVDaGFuZ2VVcGRhdGVyIiwiX21hcFN0YXRlJGdsb2JlIiwibWFwU3R5bGUiLCJnZXRDb2xvck1vZGUiLCJrZXkiLCJfbWFwU3R5bGUkbWFwU3R5bGVzJGsiLCJtYXBTdHlsZXMiLCJjb2xvck1vZGUiLCJwcmV2Q29sb3JNb2RlIiwic3R5bGVUeXBlIiwibmV4dENvbG9yTW9kZSIsIm1hcFN0YXRlIiwiREFSSyIsInNjcmVlbiIsIkxJR0hUIiwiZGFya2VuIiwiZ2xvYmUiLCJlbmFibGVkIiwiYmFzZW1hcCIsImxhYmVscyIsImFkbWluTGluZXMiLCJ3YXRlciIsInN5bmNHbG9iZUNvbmZpZ0NvbG9yc1RvU3R5bGUiLCJfbWFwU3RhdGUkZ2xvYmUyIiwibmV4dFN0eWxlT2JqIiwibmV4dEdsb2JlQ29uZmlnIiwic3VyZmFjZUNvbG9yIiwiYmFja2dyb3VuZEZpbGxDb2xvciIsIndhdGVyQ29sb3IiLCJiYXNlbWFwV2F0ZXJGaWxsQ29sb3IiLCJhZG1pbkxpbmVzQ29sb3IiLCJiYXNlbWFwQWRtaW5MaW5lQ29sb3IiLCJiYXNlbWFwQ29sb3JzIiwic3R5bGUiLCJsYXllckdyb3VwcyIsImNvbWJpbmVkU2V0TWFwVmlld01vZGVVcGRhdGVyIiwiX21hcFN0YXRlJGdsb2JlMyIsImNvbWJpbmVkTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJvbGRMYXllciIsIm5ld0xheWVyIiwiX25ld1N0YXRlJHVpU3RhdGUkbWFwIiwibmV3U3RhdGUiLCJ1aVN0YXRlIiwiaXNTcGxpdCIsInNwbGl0TWFwcyIsImlzTGVnZW5kQWN0aXZlIiwibWFwQ29udHJvbHMiLCJtYXBMZWdlbmQiLCJhY3RpdmUiLCJwYW5lbElkIiwiaW5kZXgiLCJfbmV3VWlTdGF0ZSRtYXBDb250cm8iLCJtYXBTcGxpdE1vZGUiLCJwcmV2TW9kZSIsIm5ld01hcFN0YXRlIiwibmV3VmlzU3RhdGUiLCJTSU5HTEVfTUFQIiwiRFVBTF9NQVAiLCJTV0lQRV9DT01QQVJFIiwiZHVwbGljYXRlIiwibmV3VWlTdGF0ZSIsImRlZmF1bHRSZXBsYWNlRGF0YVRvTWFwT3B0aW9ucyIsInJlcGxhY2VEYXRhSW5NYXBVcGRhdGVyIiwiX3JlZjMiLCJkYXRhc2V0VG9SZXBsYWNlSWQiLCJkYXRhc2V0VG9Vc2UiLCJfcGF5bG9hZCRvcHRpb25zIiwiYWRkRGF0YVRvTWFwT3B0aW9ucyIsImRhdGFJZFRvVXNlIiwicHJlcGFyZWRTdGF0ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21iaW5lZC11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1xuICB0b2dnbGVNb2RhbFVwZGF0ZXIsXG4gIGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyIGFzIHVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlcixcbiAgdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIsXG4gIHRvZ2dsZVNwbGl0TWFwVXBkYXRlciBhcyB1aVN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyLFxuICByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciBhcyB1aVN0YXRlUmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXJcbn0gZnJvbSAnLi91aS1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICB1cGRhdGVWaXNEYXRhVXBkYXRlciBhcyB2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyLFxuICBzZXRNYXBJbmZvVXBkYXRlcixcbiAgbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcixcbiAgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyIGFzIHZpc1N0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyLFxuICBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZVxufSBmcm9tICcuL3Zpcy1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciBhcyBzdGF0ZU1hcENvbmZpZ1VwZGF0ZXIsXG4gIHRvZ2dsZVNwbGl0TWFwVXBkYXRlciBhcyBtYXBTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcixcbiAgc2V0TWFwU3BsaXRNb2RlVXBkYXRlciBhcyBtYXBTdGF0ZVNldE1hcFNwbGl0TW9kZVVwZGF0ZXIsXG4gIHNldE1hcFZpZXdNb2RlVXBkYXRlclxufSBmcm9tICcuL21hcC1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICBtYXBTdHlsZUNoYW5nZVVwZGF0ZXIsXG4gIHJlY2VpdmVNYXBDb25maWdVcGRhdGVyIGFzIHN0eWxlTWFwQ29uZmlnVXBkYXRlclxufSBmcm9tICcuL21hcC1zdHlsZS11cGRhdGVycyc7XG5pbXBvcnQge2ZpbGVzVG9EYXRhUGF5bG9hZH0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcbmltcG9ydCB7cGF5bG9hZF8sIGFwcGx5Xywgd2l0aF8sIGlmXywgY29tcG9zZV8sIG1lcmdlXywgcGlja199IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge01hcFN0YXRlLCBVaVN0YXRlLCBBZGREYXRhVG9NYXBQYXlsb2FkLCBQYXJzZWRDb25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtNYXBTdHlsZX0gZnJvbSAnLi9tYXAtc3R5bGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtQcm92aWRlclN0YXRlfSBmcm9tICcuL3Byb3ZpZGVyLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7XG4gIGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyQWN0aW9uLFxuICBNYXBTdHlsZUNoYW5nZVVwZGF0ZXJBY3Rpb24sXG4gIExheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb24sXG4gIFRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvbixcbiAgUmVwbGFjZURhdGFJbk1hcFBheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9uc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7TGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7aXNQbGFpbk9iamVjdCwgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcbmltcG9ydCB7QkFTRV9NQVBfQ09MT1JfTU9ERVMsIE9WRVJMQVlfQkxFTkRJTkdTLCBOT19NQVBfSUQsIE1hcFNwbGl0TW9kZX0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtnZXRCYXNlbWFwQ29sb3JzRm9yU3R5bGUsIERFRkFVTFRfQkFTRU1BUF9DT0xPUn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuZXhwb3J0IHR5cGUgS2VwbGVyR2xTdGF0ZSA9IHtcbiAgdmlzU3RhdGU6IFZpc1N0YXRlO1xuICBtYXBTdGF0ZTogTWFwU3RhdGU7XG4gIG1hcFN0eWxlOiBNYXBTdHlsZTtcbiAgdWlTdGF0ZTogVWlTdGF0ZTtcbiAgcHJvdmlkZXJTdGF0ZTogUHJvdmlkZXJTdGF0ZTtcbn07XG5cbi8vIGNvbXBvc2UgYWN0aW9uIHRvIGFwcGx5IHJlc3VsdCBtdWx0aXBsZSByZWR1Y2Vycywgd2l0aCB0aGUgb3V0cHV0IG9mIG9uZVxuXG4vKipcbiAqIFNvbWUgYWN0aW9ucyB3aWxsIGFmZmVjdCB0aGUgZW50aXJlIGtlcGxlci5sZyBpbnN0YW5jZSBzdGF0ZS5cbiAqIFRoZSB1cGRhdGVycyBmb3IgdGhlc2UgYWN0aW9ucyBpcyBleHBvcnRlZCBhcyBgY29tYmluZWRVcGRhdGVyc2AuIFRoZXNlIHVwZGF0ZXIgdGFrZSB0aGUgZW50aXJlIGluc3RhbmNlIHN0YXRlXG4gKiBhcyB0aGUgZmlyc3QgYXJndW1lbnQuIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7Y29tYmluZWRVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICAvLyBhZGQgZGF0YSB0byBtYXAgYWZ0ZXIgcmVjZWl2aW5nIGRhdGEgZnJvbSByZW1vdGUgc291cmNlc1xuICogICAgY2FzZSAnTE9BRF9SRU1PVEVfUkVTT1VSQ0VfU1VDQ0VTUyc6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgLy8gcGFzcyBpbiBrZXBsZXIuZ2wgaW5zdGFuY2Ugc3RhdGUgdG8gY29tYmluZWRVcGRhdGVyc1xuICogICAgICAgICAgbWFwOiAgY29tYmluZWRVcGRhdGVycy5hZGREYXRhVG9NYXBVcGRhdGVyKFxuICogICAgICAgICAgIHN0YXRlLmtlcGxlckdsLm1hcCxcbiAqICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gKiAgICAgICAgICAgICAgIGRhdGFzZXRzOiBhY3Rpb24uZGF0YXNldHMsXG4gKiAgICAgICAgICAgICAgIG9wdGlvbnM6IHtyZWFkT25seTogdHJ1ZX0sXG4gKiAgICAgICAgICAgICAgIGNvbmZpZzogYWN0aW9uLmNvbmZpZ1xuICogICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgfVxuICogICAgICAgICAgKVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCBjb21iaW5lZFVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkQ29uZmlnID0gY29uZmlnID0+XG4gIGlzUGxhaW5PYmplY3QoY29uZmlnKSAmJiBpc1BsYWluT2JqZWN0KGNvbmZpZy5jb25maWcpICYmIGNvbmZpZy52ZXJzaW9uO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEFkZERhdGFUb01hcE9wdGlvbnMgPSB7XG4gIGNlbnRlck1hcDogdHJ1ZSxcbiAga2VlcEV4aXN0aW5nQ29uZmlnOiBmYWxzZSxcbiAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZSxcbiAgYXV0b0NyZWF0ZVRvb2x0aXBzOiB0cnVlXG59O1xuXG4vKipcbiAqIENvbWJpbmUgZGF0YSBhbmQgZnVsbCBjb25maWd1cmF0aW9uIHVwZGF0ZSBpbiBhIHNpbmdsZSBhY3Rpb25cbiAqXG4gKiBAbWVtYmVyb2YgY29tYmluZWRVcGRhdGVyc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGtlcGxlci5nbCBpbnN0YW5jZSBzdGF0ZSwgY29udGFpbmluZyBhbGwgc3VicmVkdWNlciBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbi5wYXlsb2FkIGB7ZGF0YXNldHMsIG9wdGlvbnMsIGNvbmZpZ31gXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQuZGF0YXNldHMgLSAqKipyZXF1aXJlZCoqIGRhdGFzZXRzIGNhbiBiZSBhIGRhdGFzZXQgb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqIEVhY2ggZGF0YXNldCBvYmplY3QgbmVlZHMgdG8gaGF2ZSBgaW5mb2AgYW5kIGBkYXRhYCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBbYWN0aW9uLnBheWxvYWQub3B0aW9uc10gb3B0aW9uIG9iamVjdCBge2NlbnRlck1hcDogdHJ1ZX1gXG4gKiBAcGFyYW0gW2FjdGlvbi5wYXlsb2FkLmNvbmZpZ10gbWFwIGNvbmZpZ1xuICogQHBhcmFtIFthY3Rpb24ucGF5bG9hZC5pbmZvXSBtYXAgaW5mbyBjb250YWlucyB0aXRsZSBhbmQgZGVzY3JpcHRpb25cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERhdGFzZXRcbiAqIEBwcm9wZXJ0eSBpbmZvIC1pbmZvIG9mIGEgZGF0YXNldFxuICogQHByb3BlcnR5IGluZm8uaWQgLSBpZCBvZiB0aGlzIGRhdGFzZXQuIElmIGNvbmZpZyBpcyBkZWZpbmVkLCBgaWRgIHNob3VsZCBtYXRjaGVzIHRoZSBgZGF0YUlkYCBpbiBjb25maWcuXG4gKiBAcHJvcGVydHkgaW5mby5sYWJlbCAtIEEgZGlzcGxheSBuYW1lIG9mIHRoaXMgZGF0YXNldFxuICogQHByb3BlcnR5IGRhdGEgLSAqKipyZXF1aXJlZCoqIFRoZSBkYXRhIG9iamVjdCwgaW4gYSB0YWJ1bGFyIGZvcm1hdCB3aXRoIDIgcHJvcGVydGllcyBgZmllbGRzYCBhbmQgYHJvd3NgXG4gKiBAcHJvcGVydHkgZGF0YS5maWVsZHMgLSAqKipyZXF1aXJlZCoqIEFycmF5IG9mIGZpZWxkcyxcbiAqIEBwcm9wZXJ0eSBkYXRhLmZpZWxkcy5uYW1lIC0gKioqcmVxdWlyZWQqKiBOYW1lIG9mIHRoZSBmaWVsZCxcbiAqIEBwcm9wZXJ0eSBkYXRhLnJvd3MgLSAqKipyZXF1aXJlZCoqIEFycmF5IG9mIHJvd3MsIGluIGEgdGFidWxhciBmb3JtYXQgd2l0aCBgZmllbGRzYCBhbmQgYHJvd3NgXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRGF0YVRvTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIHtwYXlsb2FkfToge3BheWxvYWQ6IEFkZERhdGFUb01hcFBheWxvYWR9XG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3Qge2RhdGFzZXRzLCBjb25maWcsIGluZm99ID0gcGF5bG9hZDtcblxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIC4uLmRlZmF1bHRBZGREYXRhVG9NYXBPcHRpb25zLFxuICAgIC4uLnBheWxvYWQub3B0aW9uc1xuICB9O1xuXG4gIC8vIGNoZWNrIGlmIHByb2dyZXNzaXZlIGxvYWRpbmcgZGF0YXNldCBieSBiYXRjaGVzLCBhbmQgdXBkYXRlIHZpc1N0YXRlIGRpcmVjdGx5XG4gIGNvbnN0IGlzUHJvZ3Jlc3NpdmVMb2FkaW5nID1cbiAgICBBcnJheS5pc0FycmF5KGRhdGFzZXRzKSAmJlxuICAgIGRhdGFzZXRzWzBdPy5pbmZvLmZvcm1hdCA9PT0gJ2Fycm93JyAmJlxuICAgIGRhdGFzZXRzWzBdPy5pbmZvLmlkICYmXG4gICAgZGF0YXNldHNbMF0/LmluZm8uaWQgaW4gc3RhdGUudmlzU3RhdGUuZGF0YXNldHM7XG4gIGlmIChpc1Byb2dyZXNzaXZlTG9hZGluZykge1xuICAgIHJldHVybiBjb21wb3NlXzxLZXBsZXJHbFN0YXRlPihbXG4gICAgICBwaWNrXygndmlzU3RhdGUnKShcbiAgICAgICAgYXBwbHlfPFZpc1N0YXRlLCBhbnk+KHZpc1N0YXRlVXBkYXRlVmlzRGF0YVVwZGF0ZXIsIHtcbiAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIGNvbmZpZ1xuICAgICAgICB9KVxuICAgICAgKVxuICAgIF0pKHN0YXRlKTtcbiAgfVxuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgbGV0IHBhcnNlZENvbmZpZzogUGFyc2VkQ29uZmlnID0gY29uZmlnO1xuXG4gIGlmIChpc1ZhbGlkQ29uZmlnKGNvbmZpZykpIHtcbiAgICAvLyBpZiBwYXNzZWQgaW4gc2F2ZWQgY29uZmlnXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHBhcnNlZENvbmZpZyA9IHN0YXRlLnZpc1N0YXRlLnNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKGNvbmZpZyk7XG4gIH1cbiAgY29uc3Qgb2xkTGF5ZXJzID0gc3RhdGUudmlzU3RhdGUubGF5ZXJzO1xuICBjb25zdCBmaWx0ZXJOZXdseUFkZGVkTGF5ZXJzID0gKGxheWVyczogTGF5ZXJbXSkgPT5cbiAgICBsYXllcnMuZmlsdGVyKG5sID0+ICFvbGRMYXllcnMuZmluZChvbCA9PiBvbCA9PT0gbmwpKTtcblxuICAvLyBSZXR1cm5zIHVuZGVmaW5lZCBpZiBub3QgZm91bmQsIHRvIG1ha2UgdHlwZXNjcmlwdCBoYXBweVxuICBjb25zdCBmaW5kTWFwQm91bmRzSWZDZW50ZXJlZCA9IChsYXllcnM6IExheWVyW10pID0+IHtcbiAgICBjb25zdCBib3VuZHMgPSBvcHRpb25zLmNlbnRlck1hcCAmJiBmaW5kTWFwQm91bmRzKGxheWVycyk7XG4gICAgcmV0dXJuIGJvdW5kcyA/IGJvdW5kcyA6IHVuZGVmaW5lZDtcbiAgfTtcblxuICByZXR1cm4gY29tcG9zZV88S2VwbGVyR2xTdGF0ZT4oW1xuICAgIHBpY2tfKCd2aXNTdGF0ZScpKFxuICAgICAgLy8gdGhpcyBwYXJ0IGNhbiBiZSBhc3luY1xuICAgICAgYXBwbHlfPFZpc1N0YXRlLCBhbnk+KHZpc1N0YXRlVXBkYXRlVmlzRGF0YVVwZGF0ZXIsIHtcbiAgICAgICAgZGF0YXNldHMsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIGNvbmZpZzogcGFyc2VkQ29uZmlnXG4gICAgICB9KVxuICAgICksXG5cbiAgICBpZl8oQm9vbGVhbihpbmZvKSwgcGlja18oJ3Zpc1N0YXRlJykoYXBwbHlfPFZpc1N0YXRlLCBhbnk+KHNldE1hcEluZm9VcGRhdGVyLCB7aW5mb30pKSksXG4gICAgLy8gTm90ZSB0aGF0IGZpdCBib3VuZHMgaGVyZSB3b24ndCBiZSBjYWxsZWQgaW4gY2FzZSBkYXRhc2V0cyBhcmUgY3JlYXRlZCBpbiBUYXNrcy5cbiAgICAvLyBBIHNlcGFyYXRlIFRhc2sgdG8gdXBkYXRlIGJvdW5kcyBpcyBjcmVhdGVkIG9uY2UgdGhlIGRhdGFzZXRzIGFyZSByZWFkeS5cbiAgICB3aXRoXygoe3Zpc1N0YXRlfSkgPT5cbiAgICAgIHBpY2tfKCdtYXBTdGF0ZScpKFxuICAgICAgICBhcHBseV8oXG4gICAgICAgICAgc3RhdGVNYXBDb25maWdVcGRhdGVyLFxuICAgICAgICAgIHBheWxvYWRfKHtcbiAgICAgICAgICAgIGNvbmZpZzogcGFyc2VkQ29uZmlnLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIGJvdW5kczogZmluZE1hcEJvdW5kc0lmQ2VudGVyZWQoZmlsdGVyTmV3bHlBZGRlZExheWVycyh2aXNTdGF0ZS5sYXllcnMpKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIHBpY2tfKCdtYXBTdHlsZScpKGFwcGx5XyhzdHlsZU1hcENvbmZpZ1VwZGF0ZXIsIHBheWxvYWRfKHtjb25maWc6IHBhcnNlZENvbmZpZywgb3B0aW9uc30pKSksXG4gICAgcGlja18oJ3VpU3RhdGUnKShcbiAgICAgIGFwcGx5Xyh1aVN0YXRlUmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIsIHBheWxvYWRfKHtjb25maWc6IHBhcnNlZENvbmZpZywgb3B0aW9uc30pKVxuICAgICksXG4gICAgcGlja18oJ3VpU3RhdGUnKShhcHBseV8odWlTdGF0ZUxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyLCBwYXlsb2FkXyhudWxsKSkpLFxuXG4gICAgcGlja18oJ3VpU3RhdGUnKShhcHBseV8odG9nZ2xlTW9kYWxVcGRhdGVyLCBwYXlsb2FkXyhudWxsKSkpLFxuICAgIHBpY2tfKCd1aVN0YXRlJykoXG4gICAgICBtZXJnZV8oXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAncmVhZE9ubHknKVxuICAgICAgICAgID8ge3JlYWRPbmx5OiBvcHRpb25zLnJlYWRPbmx5fVxuICAgICAgICAgIDoge31cbiAgICAgIClcbiAgICApXG4gIF0pKHN0YXRlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICAvLyBzdGlsbCBtb3JlIHRvIGxvYWRcbiAgY29uc3QgcGF5bG9hZHMgPSBmaWxlc1RvRGF0YVBheWxvYWQoYWN0aW9uLnJlc3VsdCk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IGNvbXBvc2VfKFtcbiAgICBwaWNrXygndmlzU3RhdGUnKShcbiAgICAgIG1lcmdlXyh7XG4gICAgICAgIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZmlsZUxvYWRpbmdQcm9ncmVzczoge31cbiAgICAgIH0pXG4gICAgKVxuICBdKShzdGF0ZSk7XG4gIC8vIG1ha2UgbXVsdGlwbGUgYWRkIGRhdGEgdG8gbWFwIGNhbGxzXG4gIGNvbnN0IHN0YXRlV2l0aERhdGEgPSBjb21wb3NlXyhwYXlsb2Fkcy5tYXAocCA9PiBhcHBseV8oYWRkRGF0YVRvTWFwVXBkYXRlciwgcGF5bG9hZF8ocCkpKSkoXG4gICAgbmV4dFN0YXRlXG4gICk7XG4gIHJldHVybiBzdGF0ZVdpdGhEYXRhIGFzIEtlcGxlckdsU3RhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkRGF0YVRvTWFwQ29tcG9zZWQgPSBhZGREYXRhVG9NYXBVcGRhdGVyO1xuXG4vKipcbiAqIEhlbHBlciB3aGljaCB1cGRhdGVzIG1hcCBvdmVybGF5IGJsZW5kaW5nIG1vZGUgaW4gdmlzU3RhdGUsXG4gKiBidXQgb25seSBpZiBpdCdzIG5vdCBjdXJyZW50bHkgaW4gdGhlIGBub3JtYWxgIG1vZGUuXG4gKi9cbmNvbnN0IHVwZGF0ZU92ZXJsYXlCbGVuZGluZyA9IG92ZXJsYXlCbGVuZGluZyA9PiB2aXNTdGF0ZSA9PiB7XG4gIGlmICh2aXNTdGF0ZS5vdmVybGF5QmxlbmRpbmcgIT09IE9WRVJMQVlfQkxFTkRJTkdTLm5vcm1hbC52YWx1ZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi52aXNTdGF0ZSxcbiAgICAgIG92ZXJsYXlCbGVuZGluZ1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHZpc1N0YXRlO1xufTtcblxuLyoqXG4gKiBIZWxwZXIgd2hpY2ggdXBkYXRlcyBgZGFya0Jhc2VNYXBFbmFibGVkYCBpbiBhbGwgdGhlIGxheWVycyBpbiB2aXNTdGF0ZSB3aGljaFxuICogaGF2ZSB0aGlzIGNvbmZpZyBzZXR0aW5nIChvciBpbiBvbmUgc3BlY2lmaWMgbGF5ZXIgaWYgdGhlIGBsYXllcklkYCBwYXJhbSBpcyBwcm92aWRlZCkuXG4gKi9cbmNvbnN0IHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzID1cbiAgKGRhcmtCYXNlTWFwRW5hYmxlZDogYm9vbGVhbiwgbGF5ZXJJZDogc3RyaW5nIHwgbnVsbCA9IG51bGwpID0+XG4gIHZpc1N0YXRlID0+ICh7XG4gICAgLi4udmlzU3RhdGUsXG4gICAgbGF5ZXJzOiB2aXNTdGF0ZS5sYXllcnMubWFwKGxheWVyID0+IHtcbiAgICAgIGlmICghbGF5ZXJJZCB8fCBsYXllci5pZCA9PT0gbGF5ZXJJZCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLCAnZGFya0Jhc2VNYXBFbmFibGVkJykpIHtcbiAgICAgICAgICBjb25zdCB7dmlzQ29uZmlnfSA9IGxheWVyLmNvbmZpZztcbiAgICAgICAgICByZXR1cm4gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgdmlzQ29uZmlnOiB7Li4udmlzQ29uZmlnLCBkYXJrQmFzZU1hcEVuYWJsZWR9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsYXllcjtcbiAgICB9KVxuICB9KTtcblxuLyoqXG4gKiBVcGRhdGVyIHRoYXQgY2hhbmdlcyB0aGUgbWFwIHN0eWxlIGJ5IGNhbGxpbmcgbWFwU3R5bGVDaGFuZ2VVcGRhdGVyIG9uIHZpc1N0YXRlLlxuICogSW4gYWRkaXRpb24gdG8gdGhhdCwgaXQgZG9lcyB0aGUgZm9sbG93aW5nOlxuICpcbiAqICAgMS4gVXBkYXRlIG1hcCBvdmVybGF5IGJsZW5kaW5nIG1vZGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBjb2xvck1vZGUgb2YgdGhlXG4gKiAgICAgIGJhc2UgbWFwLCBidXQgb25seSBpZiBpdCdzIG5vdCBpbiB0aGUgYG5vcm1hbGAgbW9kZS5cbiAqXG4gKiAgIDIuIFVwZGF0ZSBhbGwgdGhlIGxheWVycyB3aGljaCBoYXZlIHRoZSBgZGFya0Jhc2VNYXBFbmFibGVkYCBjb25maWcgc2V0dGluZ1xuICogICAgICBhZGp1c3RpbmcgaXQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBjb2xvck1vZGUgb2YgdGhlIGJhc2UgbWFwLlxuICpcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbWJpbmVkTWFwU3R5bGVDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdHlsZUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCB7cGF5bG9hZH0gPSBhY3Rpb247XG4gIGNvbnN0IHttYXBTdHlsZX0gPSBzdGF0ZTtcbiAgY29uc3QgZ2V0Q29sb3JNb2RlID0ga2V5ID0+IG1hcFN0eWxlLm1hcFN0eWxlc1trZXldPy5jb2xvck1vZGU7XG4gIGNvbnN0IHByZXZDb2xvck1vZGUgPSBnZXRDb2xvck1vZGUobWFwU3R5bGUuc3R5bGVUeXBlKTtcbiAgY29uc3QgbmV4dENvbG9yTW9kZSA9IGdldENvbG9yTW9kZShwYXlsb2FkLnN0eWxlVHlwZSk7XG4gIGxldCB7dmlzU3RhdGUsIG1hcFN0YXRlfSA9IHN0YXRlO1xuICBpZiAobmV4dENvbG9yTW9kZSAhPT0gcHJldkNvbG9yTW9kZSkge1xuICAgIHN3aXRjaCAobmV4dENvbG9yTW9kZSkge1xuICAgICAgY2FzZSBCQVNFX01BUF9DT0xPUl9NT0RFUy5EQVJLOlxuICAgICAgICB2aXNTdGF0ZSA9IGNvbXBvc2VfKFtcbiAgICAgICAgICB1cGRhdGVPdmVybGF5QmxlbmRpbmcoT1ZFUkxBWV9CTEVORElOR1Muc2NyZWVuLnZhbHVlKSxcbiAgICAgICAgICB1cGRhdGVEYXJrQmFzZU1hcExheWVycyh0cnVlKVxuICAgICAgICBdKSh2aXNTdGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBCQVNFX01BUF9DT0xPUl9NT0RFUy5MSUdIVDpcbiAgICAgICAgdmlzU3RhdGUgPSBjb21wb3NlXyhbXG4gICAgICAgICAgdXBkYXRlT3ZlcmxheUJsZW5kaW5nKE9WRVJMQVlfQkxFTkRJTkdTLmRhcmtlbi52YWx1ZSksXG4gICAgICAgICAgdXBkYXRlRGFya0Jhc2VNYXBMYXllcnMoZmFsc2UpXG4gICAgICAgIF0pKHZpc1N0YXRlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgfVxuXG4gIC8vIFVwZGF0ZSBnbG9iZSBjb25maWcgY29sb3JzIHdoZW4gc3R5bGUgY2hhbmdlcyBhbmQgZ2xvYmUgaXMgZW5hYmxlZFxuICBpZiAobWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQpIHtcbiAgICAvLyBTd2l0Y2hpbmcgZnJvbSBcIk5vIEJhc2VtYXBcIiB0byBhIGJhc2VtYXAgLSByZXN0b3JlIGJhc2VtYXAgc3ViLXRvZ2dsZXNcbiAgICBpZiAocGF5bG9hZC5zdHlsZVR5cGUgIT09IE5PX01BUF9JRCAmJiBtYXBTdHlsZS5zdHlsZVR5cGUgPT09IE5PX01BUF9JRCkge1xuICAgICAgbWFwU3RhdGUgPSB7XG4gICAgICAgIC4uLm1hcFN0YXRlLFxuICAgICAgICBnbG9iZToge1xuICAgICAgICAgIC4uLm1hcFN0YXRlLmdsb2JlLFxuICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgLi4ubWFwU3RhdGUuZ2xvYmUuY29uZmlnLFxuICAgICAgICAgICAgYmFzZW1hcDogdHJ1ZSxcbiAgICAgICAgICAgIGxhYmVsczogdHJ1ZSxcbiAgICAgICAgICAgIGFkbWluTGluZXM6IHRydWUsXG4gICAgICAgICAgICB3YXRlcjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgbWFwU3RhdGUgPSBzeW5jR2xvYmVDb25maWdDb2xvcnNUb1N0eWxlKG1hcFN0YXRlLCBtYXBTdHlsZSwgcGF5bG9hZC5zdHlsZVR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICB2aXNTdGF0ZSxcbiAgICBtYXBTdGF0ZSxcbiAgICBtYXBTdHlsZTogbWFwU3R5bGVDaGFuZ2VVcGRhdGVyKG1hcFN0eWxlLCB7cGF5bG9hZDogey4uLnBheWxvYWR9fSlcbiAgfTtcbn07XG5cbi8qKlxuICogRGVyaXZlIGdsb2JlIGJhc2VtYXAgY29sb3JzIChzdXJmYWNlIC8gd2F0ZXIgLyBhZG1pbiBsaW5lcykgZnJvbSBhIG1hcCBzdHlsZSBhbmRcbiAqIHJldHVybiBhbiB1cGRhdGVkIG1hcFN0YXRlIHdpdGggdGhvc2UgY29sb3JzIHdyaXR0ZW4gaW50byBgZ2xvYmUuY29uZmlnYC4gVXNlZCBib3RoXG4gKiB3aGVuIHRoZSBiYXNlIG1hcCBzdHlsZSBjaGFuZ2VzIGFuZCB3aGVuIGVudGVyaW5nIGdsb2JlIG1vZGUsIHNvIHRoZSBnbG9iZSBhbHdheXNcbiAqIHJlZmxlY3RzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgYmFzZW1hcCBpbnN0ZWFkIG9mIHRoZSBzdGF0aWMgREVGQVVMVF9HTE9CRV9DT05GSUcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzeW5jR2xvYmVDb25maWdDb2xvcnNUb1N0eWxlKFxuICBtYXBTdGF0ZTogTWFwU3RhdGUsXG4gIG1hcFN0eWxlOiBNYXBTdHlsZSxcbiAgc3R5bGVUeXBlOiBzdHJpbmdcbik6IE1hcFN0YXRlIHtcbiAgaWYgKCFtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZCkge1xuICAgIHJldHVybiBtYXBTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdHlsZU9iaiA9IG1hcFN0eWxlLm1hcFN0eWxlc1tzdHlsZVR5cGVdO1xuICBjb25zdCBuZXh0R2xvYmVDb25maWcgPSB7Li4ubWFwU3RhdGUuZ2xvYmUuY29uZmlnfTtcblxuICBpZiAoc3R5bGVUeXBlID09PSBOT19NQVBfSUQpIHtcbiAgICBuZXh0R2xvYmVDb25maWcuYmFzZW1hcCA9IGZhbHNlO1xuICAgIG5leHRHbG9iZUNvbmZpZy5sYWJlbHMgPSBmYWxzZTtcbiAgICBuZXh0R2xvYmVDb25maWcuYWRtaW5MaW5lcyA9IGZhbHNlO1xuICAgIG5leHRHbG9iZUNvbmZpZy53YXRlciA9IGZhbHNlO1xuICAgIG5leHRHbG9iZUNvbmZpZy5zdXJmYWNlQ29sb3IgPSBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFja2dyb3VuZEZpbGxDb2xvcjtcbiAgICBuZXh0R2xvYmVDb25maWcud2F0ZXJDb2xvciA9IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYXNlbWFwV2F0ZXJGaWxsQ29sb3I7XG4gICAgbmV4dEdsb2JlQ29uZmlnLmFkbWluTGluZXNDb2xvciA9IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYXNlbWFwQWRtaW5MaW5lQ29sb3I7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYmFzZW1hcENvbG9ycyA9IG5leHRTdHlsZU9ialxuICAgICAgPyBnZXRCYXNlbWFwQ29sb3JzRm9yU3R5bGUoc3R5bGVUeXBlLCB7XG4gICAgICAgICAgc3R5bGU6IG5leHRTdHlsZU9iai5zdHlsZSxcbiAgICAgICAgICBsYXllckdyb3VwczogbmV4dFN0eWxlT2JqLmxheWVyR3JvdXBzXG4gICAgICAgIH0pXG4gICAgICA6IC8vIFN0eWxlIG9iamVjdCBub3QgeWV0IGxvYWRlZCAtIHVzZSBrbm93biBwcmVzZXRzIGJ5IHN0eWxlIHR5cGVcbiAgICAgICAgZ2V0QmFzZW1hcENvbG9yc0ZvclN0eWxlKHN0eWxlVHlwZSk7XG4gICAgbmV4dEdsb2JlQ29uZmlnLnN1cmZhY2VDb2xvciA9IGJhc2VtYXBDb2xvcnMuYmFja2dyb3VuZEZpbGxDb2xvcjtcbiAgICBuZXh0R2xvYmVDb25maWcud2F0ZXJDb2xvciA9IGJhc2VtYXBDb2xvcnMuYmFzZW1hcFdhdGVyRmlsbENvbG9yO1xuICAgIG5leHRHbG9iZUNvbmZpZy5hZG1pbkxpbmVzQ29sb3IgPSBiYXNlbWFwQ29sb3JzLmJhc2VtYXBBZG1pbkxpbmVDb2xvcjtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ubWFwU3RhdGUsXG4gICAgZ2xvYmU6IHtcbiAgICAgIC4uLm1hcFN0YXRlLmdsb2JlLFxuICAgICAgY29uZmlnOiBuZXh0R2xvYmVDb25maWdcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlciB0aGF0IHN3aXRjaGVzIHRoZSBtYXAgdmlldyBtb2RlICgyRCAvIDNEIC8gR2xvYmUpLiBSdW5zIHRoZSBiYXNlIG1hcC1zdGF0ZVxuICogdXBkYXRlciBhbmQsIHdoZW4gZW50ZXJpbmcgZ2xvYmUgbW9kZSwgc3luY3MgdGhlIGdsb2JlIGJhc2VtYXAgY29sb3JzIHRvIHRoZVxuICogY3VycmVudGx5IHNlbGVjdGVkIG1hcCBzdHlsZSBzbyB0aGUgZ2xvYmUgZG9lc24ndCBzaG93IHN0YWxlIGRlZmF1bHQgY29sb3JzLlxuICovXG5leHBvcnQgY29uc3QgY29tYmluZWRTZXRNYXBWaWV3TW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5TZXRNYXBWaWV3TW9kZVVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBsZXQgbWFwU3RhdGUgPSBzZXRNYXBWaWV3TW9kZVVwZGF0ZXIoc3RhdGUubWFwU3RhdGUsIGFjdGlvbik7XG5cbiAgaWYgKG1hcFN0YXRlLmdsb2JlPy5lbmFibGVkKSB7XG4gICAgbWFwU3RhdGUgPSBzeW5jR2xvYmVDb25maWdDb2xvcnNUb1N0eWxlKG1hcFN0YXRlLCBzdGF0ZS5tYXBTdHlsZSwgc3RhdGUubWFwU3R5bGUuc3R5bGVUeXBlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwU3RhdGVcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlciB0aGF0IGNoYW5nZXMgdGhlIGxheWVyIHR5cGUgYnkgY2FsbGluZyBgbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcmAgb24gdmlzU3RhdGUuXG4gKiBJbiBhZGRpdGlvbiB0byB0aGF0LCBpZiB0aGUgbmV3IGxheWVyIHR5cGUgaGFzIHRoZSBgZGFya0Jhc2VNYXBFbmFibGVkYCBjb25maWdcbiAqIHNldHRpbmcsIHdlIGFkanVzdCBpdCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbG9yTW9kZSBvZiB0aGUgYmFzZSBtYXAuc1xuICovXG5leHBvcnQgY29uc3QgY29tYmluZWRMYXllclR5cGVDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBMYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgbGV0IHt2aXNTdGF0ZX0gPSBzdGF0ZTtcbiAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHZpc1N0YXRlLmxheWVycy5maW5kSW5kZXgobGF5ZXIgPT4gbGF5ZXIgPT09IGFjdGlvbi5vbGRMYXllcik7XG4gIHZpc1N0YXRlID0gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcih2aXNTdGF0ZSwgYWN0aW9uKTtcbiAgY29uc3QgbmV3TGF5ZXIgPSB2aXNTdGF0ZS5sYXllcnNbb2xkTGF5ZXJJbmRleF07XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3TGF5ZXI/LnZpc0NvbmZpZ1NldHRpbmdzLCAnZGFya0Jhc2VNYXBFbmFibGVkJykpIHtcbiAgICBjb25zdCB7bWFwU3R5bGV9ID0gc3RhdGU7XG4gICAgY29uc3Qge2NvbG9yTW9kZX0gPSBtYXBTdHlsZS5tYXBTdHlsZXNbbWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgICBjb25zdCB7ZGFya0Jhc2VNYXBFbmFibGVkfSA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWc7XG4gICAgc3dpdGNoIChjb2xvck1vZGUpIHtcbiAgICAgIGNhc2UgQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSzpcbiAgICAgICAgaWYgKCFkYXJrQmFzZU1hcEVuYWJsZWQpIHtcbiAgICAgICAgICB2aXNTdGF0ZSA9IHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzKHRydWUsIG5ld0xheWVyLmlkKSh2aXNTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEJBU0VfTUFQX0NPTE9SX01PREVTLkxJR0hUOlxuICAgICAgICBpZiAoZGFya0Jhc2VNYXBFbmFibGVkKSB7XG4gICAgICAgICAgdmlzU3RhdGUgPSB1cGRhdGVEYXJrQmFzZU1hcExheWVycyhmYWxzZSwgbmV3TGF5ZXIuaWQpKHZpc1N0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGVcbiAgfTtcbn07XG5cbi8qKlxuICogTWFrZSBtYXBMZWdlbmQgYWN0aXZlIHdoZW4gdG9nZ2xlU3BsaXRNYXAgYWN0aW9uIGlzIGNhbGxlZFxuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBUb2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICB2aXNTdGF0ZTogdmlzU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUudmlzU3RhdGUsIGFjdGlvbiksXG4gICAgdWlTdGF0ZTogdWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcihzdGF0ZS51aVN0YXRlKSxcbiAgICBtYXBTdGF0ZTogbWFwU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUubWFwU3RhdGUpXG4gIH07XG5cbiAgY29uc3QgaXNTcGxpdCA9IG5ld1N0YXRlLnZpc1N0YXRlLnNwbGl0TWFwcy5sZW5ndGggIT09IDA7XG4gIGNvbnN0IGlzTGVnZW5kQWN0aXZlID0gbmV3U3RhdGUudWlTdGF0ZS5tYXBDb250cm9scz8ubWFwTGVnZW5kPy5hY3RpdmU7XG4gIGlmIChpc1NwbGl0ICYmICFpc0xlZ2VuZEFjdGl2ZSkge1xuICAgIG5ld1N0YXRlLnVpU3RhdGUgPSB0b2dnbGVNYXBDb250cm9sVXBkYXRlcihuZXdTdGF0ZS51aVN0YXRlLCB7XG4gICAgICBwYXlsb2FkOiB7cGFuZWxJZDogJ21hcExlZ2VuZCcsIGluZGV4OiBhY3Rpb24ucGF5bG9hZH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IG1hcCBzcGxpdCBtb2RlIHVwZGF0ZXIgLSBjb29yZGluYXRlcyBzdGF0ZSBjaGFuZ2VzIGFjcm9zcyB2aXNTdGF0ZSwgbWFwU3RhdGUsIGFuZCB1aVN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRNYXBTcGxpdE1vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuU2V0TWFwU3BsaXRNb2RlVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IHttYXBTcGxpdE1vZGV9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IHByZXZNb2RlID0gc3RhdGUubWFwU3RhdGUubWFwU3BsaXRNb2RlO1xuXG4gIGlmIChtYXBTcGxpdE1vZGUgPT09IHByZXZNb2RlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3TWFwU3RhdGUgPSBtYXBTdGF0ZVNldE1hcFNwbGl0TW9kZVVwZGF0ZXIoc3RhdGUubWFwU3RhdGUsIGFjdGlvbik7XG5cbiAgbGV0IG5ld1Zpc1N0YXRlID0gey4uLnN0YXRlLnZpc1N0YXRlfTtcblxuICBzd2l0Y2ggKG1hcFNwbGl0TW9kZSkge1xuICAgIGNhc2UgTWFwU3BsaXRNb2RlLlNJTkdMRV9NQVA6XG4gICAgICBuZXdWaXNTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3VmlzU3RhdGUsXG4gICAgICAgIHNwbGl0TWFwczogW11cbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1hcFNwbGl0TW9kZS5EVUFMX01BUDpcbiAgICBjYXNlIE1hcFNwbGl0TW9kZS5TV0lQRV9DT01QQVJFOlxuICAgICAgaWYgKHByZXZNb2RlID09PSBNYXBTcGxpdE1vZGUuU0lOR0xFX01BUCkge1xuICAgICAgICBuZXdWaXNTdGF0ZSA9IHtcbiAgICAgICAgICAuLi5uZXdWaXNTdGF0ZSxcbiAgICAgICAgICBzcGxpdE1hcHM6IGNvbXB1dGVTcGxpdE1hcExheWVycyhuZXdWaXNTdGF0ZS5sYXllcnMsIHtcbiAgICAgICAgICAgIGR1cGxpY2F0ZTogbWFwU3BsaXRNb2RlID09PSBNYXBTcGxpdE1vZGUuU1dJUEVfQ09NUEFSRVxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cblxuICBsZXQgbmV3VWlTdGF0ZSA9IHVpU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUudWlTdGF0ZSk7XG5cbiAgY29uc3QgaXNTcGxpdCA9IG5ld1Zpc1N0YXRlLnNwbGl0TWFwcy5sZW5ndGggIT09IDA7XG4gIGNvbnN0IGlzTGVnZW5kQWN0aXZlID0gbmV3VWlTdGF0ZS5tYXBDb250cm9scz8ubWFwTGVnZW5kPy5hY3RpdmU7XG4gIGlmIChpc1NwbGl0ICYmICFpc0xlZ2VuZEFjdGl2ZSkge1xuICAgIG5ld1VpU3RhdGUgPSB0b2dnbGVNYXBDb250cm9sVXBkYXRlcihuZXdVaVN0YXRlLCB7XG4gICAgICBwYXlsb2FkOiB7cGFuZWxJZDogJ21hcExlZ2VuZCcsIGluZGV4OiAwfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtYXBTdGF0ZTogbmV3TWFwU3RhdGUsXG4gICAgdmlzU3RhdGU6IG5ld1Zpc1N0YXRlLFxuICAgIHVpU3RhdGU6IG5ld1VpU3RhdGVcbiAgfTtcbn07XG5cbmNvbnN0IGRlZmF1bHRSZXBsYWNlRGF0YVRvTWFwT3B0aW9ucyA9IHtcbiAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICBjZW50ZXJNYXA6IHRydWUsXG4gIGF1dG9DcmVhdGVMYXllcnM6IGZhbHNlXG59O1xuXG4vKipcbiAqIFVwZGF0ZXIgcmVwbGFjZSBhIGRhdGFzZXQgaW4gc3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHJlcGxhY2VEYXRhSW5NYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAge3BheWxvYWR9OiB7cGF5bG9hZDogUmVwbGFjZURhdGFJbk1hcFBheWxvYWR9XG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3Qge2RhdGFzZXRUb1JlcGxhY2VJZCwgZGF0YXNldFRvVXNlLCBvcHRpb25zID0ge319ID0gcGF5bG9hZDtcbiAgY29uc3QgYWRkRGF0YVRvTWFwT3B0aW9ucyA9IHsuLi5kZWZhdWx0UmVwbGFjZURhdGFUb01hcE9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuXG4gIC8vIGNoZWNrIGlmIGRhdGFzZXQgaXMgdGhlcmVcbiAgaWYgKCFzdGF0ZS52aXNTdGF0ZS5kYXRhc2V0c1tkYXRhc2V0VG9SZXBsYWNlSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGRhdGFzZXRUb1VzZSBpcyBQcm90b0RhdGFzZXRcbiAgY29uc3QgZGF0YUlkVG9Vc2UgPSBkYXRhc2V0VG9Vc2UuaW5mby5pZDtcbiAgaWYgKCFkYXRhSWRUb1VzZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyByZW1vdmUgZGF0YXNldCBhbmQgcHV0IGRlcGVuZGVuY2llcyBpbiB0b0JlTWVyZ2VkXG4gIGNvbnN0IHByZXBhcmVkU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGU6IHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlKHN0YXRlLnZpc1N0YXRlLCBkYXRhc2V0VG9SZXBsYWNlSWQsIGRhdGFJZFRvVXNlKVxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IGFkZERhdGFUb01hcFVwZGF0ZXIoXG4gICAgcHJlcGFyZWRTdGF0ZSxcbiAgICBwYXlsb2FkXyh7XG4gICAgICBkYXRhc2V0czogZGF0YXNldFRvVXNlLFxuICAgICAgLy8gc2hvdWxkIHpvb20gdG8gbmV3IGRhdGFzZXRcbiAgICAgIG9wdGlvbnM6IGFkZERhdGFUb01hcE9wdGlvbnNcbiAgICB9KVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBOztBQUVBLFNBQ0VBLGtCQUFrQixFQUNsQkMsdUJBQXVCLElBQUlDLDhCQUE4QixFQUN6REMsdUJBQXVCLEVBQ3ZCQyxxQkFBcUIsSUFBSUMsNEJBQTRCLEVBQ3JEQyx1QkFBdUIsSUFBSUMsOEJBQThCLFFBQ3BELHFCQUFxQjtBQUM1QixTQUNFQyxvQkFBb0IsSUFBSUMsNEJBQTRCLEVBQ3BEQyxpQkFBaUIsRUFDakJDLHNCQUFzQixFQUN0QlAscUJBQXFCLElBQUlRLDZCQUE2QixFQUN0REMsNkJBQTZCLFFBQ3hCLHNCQUFzQjtBQUM3QixTQUNFUCx1QkFBdUIsSUFBSVEscUJBQXFCLEVBQ2hEVixxQkFBcUIsSUFBSVcsNkJBQTZCLEVBQ3REQyxzQkFBc0IsSUFBSUMsOEJBQThCLEVBQ3hEQyxxQkFBcUIsUUFDaEIsc0JBQXNCO0FBQzdCLFNBQ0VDLHFCQUFxQixFQUNy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