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

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 (47) hide show
  1. package/dist/cjs/column-edit-reconcile.js +100 -0
  2. package/dist/cjs/column-edit-updaters.spec.js +840 -0
  3. package/dist/cjs/combined-updaters.js +166 -8
  4. package/dist/cjs/composers.js +4 -5
  5. package/dist/cjs/dataset-ops-updaters.js +375 -0
  6. package/dist/cjs/dataset-ops-updaters.spec.js +382 -0
  7. package/dist/cjs/export-utils.js +118 -46
  8. package/dist/cjs/interaction-utils.js +166 -6
  9. package/dist/cjs/layer-utils.js +135 -9
  10. package/dist/cjs/ui-state-updaters.js +134 -51
  11. package/dist/cjs/ui-state.js +2 -2
  12. package/dist/cjs/vis-state-merger-text-label.spec.js +75 -0
  13. package/dist/cjs/vis-state-merger.js +99 -25
  14. package/dist/cjs/vis-state-selectors.js +5 -4
  15. package/dist/cjs/vis-state-updaters.js +1077 -256
  16. package/dist/cjs/vis-state.js +2 -2
  17. package/dist/column-edit-reconcile.d.ts +4 -0
  18. package/dist/column-edit-updaters.spec.d.ts +1 -0
  19. package/dist/combined-updaters.d.ts +21 -1
  20. package/dist/composers.d.ts +3 -0
  21. package/dist/dataset-ops-updaters.d.ts +21 -0
  22. package/dist/dataset-ops-updaters.spec.d.ts +1 -0
  23. package/dist/esm/column-edit-reconcile.js +95 -0
  24. package/dist/esm/column-edit-updaters.spec.js +839 -0
  25. package/dist/esm/combined-updaters.js +166 -8
  26. package/dist/esm/composers.js +3 -2
  27. package/dist/esm/dataset-ops-updaters.js +357 -0
  28. package/dist/esm/dataset-ops-updaters.spec.js +381 -0
  29. package/dist/esm/export-utils.js +117 -45
  30. package/dist/esm/interaction-utils.js +159 -3
  31. package/dist/esm/layer-utils.js +133 -9
  32. package/dist/esm/ui-state-updaters.js +133 -50
  33. package/dist/esm/ui-state.js +2 -2
  34. package/dist/esm/vis-state-merger-text-label.spec.js +74 -0
  35. package/dist/esm/vis-state-merger.js +99 -26
  36. package/dist/esm/vis-state-selectors.js +5 -4
  37. package/dist/esm/vis-state-updaters.js +1020 -263
  38. package/dist/esm/vis-state.js +2 -2
  39. package/dist/export-utils.d.ts +2 -2
  40. package/dist/interaction-utils.d.ts +25 -2
  41. package/dist/layer-utils.d.ts +17 -0
  42. package/dist/ui-state-updaters.d.ts +30 -0
  43. package/dist/vis-state-merger-text-label.spec.d.ts +1 -0
  44. package/dist/vis-state-merger.d.ts +10 -2
  45. package/dist/vis-state-updaters.d.ts +61 -15
  46. package/dist/vis-state.d.ts +20 -0
  47. package/package.json +17 -17
@@ -6,7 +6,8 @@ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
6
6
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
7
7
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
8
8
  var _excluded = ["dataId"],
9
- _excluded2 = ["info"];
9
+ _excluded2 = ["info"],
10
+ _excluded3 = ["syncedWithLayerTimeline", "syncTimelineMode", "timeBins", "lineChart", "timezone", "invertTrendColor", "showTimeDisplay"];
10
11
  import _regeneratorRuntime from "@babel/runtime/regenerator";
11
12
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
12
13
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
@@ -30,27 +31,29 @@ import uniq from 'es-toolkit/compat/uniq';
30
31
  import xor from 'es-toolkit/compat/xor';
31
32
  import Task, { disableStackCapturing, withTask } from '@kepler.gl/tasks';
32
33
  // Tasks
33
- import { DELAY_TASK, ACTION_TASK, LOAD_FILE_TASK, PROCESS_FILE_DATA, UNWRAP_TASK } from '@kepler.gl/tasks';
34
+ import { DELAY_TASK, ACTION_TASK, EXPAND_ZIP_TASK, LOAD_FILE_TASK, PROCESS_FILE_DATA, UNWRAP_TASK } from '@kepler.gl/tasks';
34
35
  // Actions
35
- import { addNotification, applyLayerConfig, createNewDatasetSuccess, layerConfigChange, layerTypeChange, layerVisConfigChange, layerVisualChannelConfigChange, loadFileStepSuccess, loadFilesErr, loadFilesSuccess, loadNextFile, nextFileBatch, setFilter, processFileContent, fitBounds as fitMapBounds, toggleLayerForMap, applyFilterConfig, loadColumnStatsSuccess, loadColumnStatsError, refreshDatasetSuccess, refreshDatasetError, refreshDatasetProgress, setLoadingProgress } from '@kepler.gl/actions';
36
+ import { addNotification, applyLayerConfig, createNewDatasetSuccess, layerConfigChange, layerTypeChange, layerVisConfigChange, layerVisualChannelConfigChange, loadFileStepSuccess, loadFilesErr, loadFilesSuccess, loadNextFile, expandZipArchiveSuccess, nextFileBatch, setFilter, processFileContent, fitBounds as fitMapBounds, toggleLayerForMap, applyFilterConfig, loadColumnStatsSuccess, loadColumnStatsError, refreshDatasetSuccess, refreshDatasetError, refreshDatasetProgress, setLoadingProgress } from '@kepler.gl/actions';
36
37
 
37
38
  // Utils
38
- import { FILTER_UPDATER_PROPS, addNewLayersToSplitMap, snapToMarks, applyFilterFieldName, applyTimeFilterEndFieldName, applyFiltersToDatasets, arrayInsert, combineSplitMapsByIndex, computeSplitMapLayers, adjustValueToFilterDomain, errorNotification, editorFeaturesToFeatureCollection, extractRowsInsideFeature, isVectorTileExtractLayer, mergeUserFeatureProperties, toSketchFeature, featureToFilterValue, filterDatasetCPU, generatePolygonFilter, getDefaultFilter, getFilterIdInFeature, getTimeWidgetTitleFormatter, isInRange, isObject, isPlainObject, isRgbColor, parseFieldValue, removeLayerFromSplitMaps, set, updateFilterPlot, removeFilterPlot, isLayerAnimatable, isSideFilter, getApplicationConfig, validateFiltersUpdateDatasets } from '@kepler.gl/utils';
39
+ import { FILTER_UPDATER_PROPS, addNewLayersToSplitMap, snapToMarks, applyFilterFieldName, applyTimeFilterEndFieldName, applyFiltersToDatasets, arrayInsert, combineSplitMapsByIndex, computeSplitMapLayers, adjustValueToFilterDomain, disableGpuIfInverted, filterTypeUsesGpu, getPlotBaseIndexByDataId, errorNotification, successNotification, editorFeaturesToFeatureCollection, extractRowsInsideFeature, isRasterTileExtractLayer, isVectorTileExtractLayer, mergeUserFeatureProperties, toSketchFeature, featureToFilterValue, filterDatasetCPU, generatePolygonFilter, getDefaultFilter, getFilterIdInFeature, getTimeWidgetTitleFormatter, isInRange, isObject, isPlainObject, isRgbColor, parseFieldValue, removeLayerFromSplitMaps, set, updateFilterPlot, removeFilterPlot, isLayerAnimatable, isSideFilter, getApplicationConfig, validateFiltersUpdateDatasets } from '@kepler.gl/utils';
39
40
  import { generateHashId, toArray, arrayMove } from '@kepler.gl/common-utils';
40
41
  // Mergers
41
- import { ANIMATION_WINDOW, BASE_SPEED, COMPARE_TYPES, DEFAULT_TEXT_LABEL, EDITOR_MODES, FILTER_TYPES, FILTER_VIEW_TYPES, LAYER_TYPES, FPS, LIGHT_AND_SHADOW_EFFECT, DISTANCE_FOG_TYPE, SURFACE_FOG_TYPE, MAX_DEFAULT_TOOLTIPS, PLOT_TYPES, SORT_ORDER, SYNC_TIMELINE_MODES, CHANNEL_SCALES, SCALE_TYPES, INITIAL_ANNOTATION_KIND, INITIAL_ANNOTATION_ANGLE, INITIAL_ANNOTATION_ARM_LENGTH, INITIAL_ANNOTATION_TEXT_WIDTH, INITIAL_ANNOTATION_TEXT_HEIGHT, INITIAL_ANNOTATION_LINE_WIDTH, INITIAL_ANNOTATION_LINE_COLOR, INITIAL_ANNOTATION_TEXT_SIDE, INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION, ANNOTATION_ANGLE_BY_PLACEMENT, textPlacementFromAngle, AnnotationKind, DatasetType, getDatasetRefreshIntervalMs, getRemoteSourceFormat } from '@kepler.gl/constants';
42
- import { LAYER_ID_LENGTH, Layer, LayerClasses } from '@kepler.gl/layers';
43
- import { apply_, compose_, filterOutById, merge_, payload_, pick_, removeElementAtIndex, swap_ } from './composer-helpers';
42
+ import { ALL_FIELD_TYPES, ANIMATION_WINDOW, BASE_SPEED, COMPARE_TYPES, DEFAULT_TEXT_LABEL, EDITOR_MODES, FILTER_TYPES, FILTER_VIEW_TYPES, LAYER_TYPES, FPS, LIGHT_AND_SHADOW_EFFECT, DISTANCE_FOG_TYPE, SURFACE_FOG_TYPE, MAX_DEFAULT_TOOLTIPS, PLOT_TYPES, SORT_ORDER, SYNC_TIMELINE_MODES, CHANNEL_SCALES, SCALE_TYPES, INITIAL_ANNOTATION_KIND, INITIAL_ANNOTATION_ANGLE, INITIAL_ANNOTATION_ARM_LENGTH, INITIAL_ANNOTATION_TEXT_WIDTH, INITIAL_ANNOTATION_TEXT_HEIGHT, INITIAL_ANNOTATION_LINE_WIDTH, INITIAL_ANNOTATION_LINE_COLOR, INITIAL_ANNOTATION_TEXT_SIDE, INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION, ANNOTATION_ANGLE_BY_PLACEMENT, textPlacementFromAngle, AnnotationKind, DatasetType, getDatasetRefreshIntervalMs, getRemoteSourceFormat, GEOCODER_DATASET_NAME, GEOCODER_ICON_COLOR, GEOCODER_LAYER_ID } from '@kepler.gl/constants';
43
+ import { AGGREGATION_COUNT_LAYER_TYPES, isPointCountLabel, LAYER_ID_LENGTH, Layer, LayerClasses } from '@kepler.gl/layers';
44
+ import { apply_, compose_, filterOutById, if_, merge_, payload_, pick_, removeElementAtIndex, swap_ } from './composer-helpers';
44
45
  import { isValidMerger, mergeStateFromMergers } from './merger-handler';
45
46
  import { VIS_STATE_MERGERS, createLayerFromConfig, isSavedLayerConfigV1, parseLayerConfig, serializeFilter, serializeLayer, serializeVisState, validateLayerWithData } from './vis-state-merger';
46
47
  import KeplerGLSchema from '@kepler.gl/schemas';
47
- import { getFilesToParse, loadExternallyHostedDataset, processGeojson } from '@kepler.gl/processors';
48
- import { assignGpuChannel, copyTableAndUpdate, createNewDataEntry, pinTableColumns, setFilterGpuMode, sortDatasetByColumn } from '@kepler.gl/table';
49
- import { findFieldsToShow } from './interaction-utils';
48
+ import { getFilesToParse, isZipFileName, loadExternallyHostedDataset, processGeojson } from '@kepler.gl/processors';
49
+ import { buildChangeColumnTypeData, formatColumnTypeConversionError, assignGpuChannel, buildDeleteColumnData, buildRenameColumnData, canMutateDatasetSchema, copyTableAndUpdate, createNewDataEntry, pinTableColumns, showAllTableColumns, toggleHiddenTableColumn, setFilterGpuMode, sortDatasetByColumn } from '@kepler.gl/table';
50
+ import { remapChartsForDataset } from './column-edit-reconcile';
51
+ import { findFieldsToShow, getZoomOpacityAnnotationTargetId, removeLayerFromZoomOpacity } from './interaction-utils';
50
52
  import { calculateLayerData, findDefaultLayer, getLayerOrderFromLayers, mergeLayerVisConfigForNewDatasets, getNewLayerGroup, addLayerOrGroupToLayerOrder, removeElementFromLayerOrder, getLayerGroupFromLayerOrder, findParentGroupForLayer, getIndexFromLayerEntryId, updateLayerGroupInLayerOrder, getFlatLayerOrder, replaceLayerEntryInLayerOrder } from './layer-utils';
51
53
  import { getPropValueToMerger, hasPropsToMerge } from './merger-handler';
52
54
  import { mergeDatasetsByOrder } from './vis-state-merger';
53
- import { fixEffectOrder, getAnimatableVisibleLayers, getIntervalBasedAnimationLayers, mergeTimeDomains, adjustValueToAnimationWindow, updateTimeFilterPlotType, getDefaultTimeFormat, LayerToFilterTimeInterval, TIME_INTERVALS_ORDERED, mergeFilterDomain, initCustomPaletteByCustomScale, collectColumnValues, getColumnStatistics } from '@kepler.gl/utils';
55
+ import { addGroupByUpdater, addJoinUpdater, addSpatialJoinUpdater, addSuitabilityUpdater, executeGroupBy, executeJoin, executeSpatialJoin, executeSuitability, removeDatasetOpUpdater, removeOpsForDatasets, setGroupByConfigUpdater, setJoinConfigUpdater, setSpatialJoinConfigUpdater, setSuitabilityConfigUpdater } from './dataset-ops-updaters';
56
+ import { fixEffectOrder, getAnimatableVisibleLayers, getIntervalBasedAnimationLayers, mergeTimeDomains, adjustValueToAnimationWindow, updateTimeFilterPlotType, mergePlotGroupBy, getDefaultTimeFormat, LayerToFilterTimeInterval, TIME_INTERVALS_ORDERED, mergeFilterDomain, initCustomPaletteByCustomScale, collectColumnValues, getColumnStatistics, optionalMapText } from '@kepler.gl/utils';
54
57
  import { createEffect } from '@kepler.gl/effects';
55
58
  import { findMapBounds } from './data-utils';
56
59
 
@@ -105,17 +108,27 @@ export var defaultInteractionConfig = {
105
108
  enabled: true,
106
109
  config: {
107
110
  fieldsToShow: {},
111
+ timezone: null,
108
112
  compareMode: false,
109
113
  compareType: COMPARE_TYPES.ABSOLUTE
110
114
  }
111
115
  },
116
+ legend: {
117
+ id: 'legend',
118
+ label: 'interactions.legend',
119
+ enabled: false,
120
+ config: {
121
+ hideInvisibleLayers: false
122
+ }
123
+ },
112
124
  geocoder: {
113
125
  id: 'geocoder',
114
126
  label: 'interactions.geocoder',
115
127
  enabled: false,
116
128
  position: null,
117
129
  config: {
118
- limitSearch: false
130
+ limitSearch: false,
131
+ color: GEOCODER_ICON_COLOR
119
132
  }
120
133
  },
121
134
  brush: {
@@ -124,7 +137,7 @@ export var defaultInteractionConfig = {
124
137
  enabled: false,
125
138
  config: {
126
139
  // size is in km
127
- size: 0.5
140
+ size: 2.5
128
141
  }
129
142
  },
130
143
  coordinate: {
@@ -132,6 +145,19 @@ export var defaultInteractionConfig = {
132
145
  label: 'interactions.coordinate',
133
146
  enabled: false,
134
147
  position: null
148
+ },
149
+ annotation: {
150
+ id: 'annotation',
151
+ label: 'interactions.annotation',
152
+ enabled: false
153
+ },
154
+ zoomOpacity: {
155
+ id: 'zoomOpacity',
156
+ label: 'interactions.fadeOnZoom',
157
+ enabled: false,
158
+ config: {
159
+ controllers: []
160
+ }
135
161
  }
136
162
  };
137
163
  export var DEFAULT_ANIMATION_CONFIG = {
@@ -162,8 +188,8 @@ export var DEFAULT_EDITOR = {
162
188
  export var INITIAL_VIS_STATE = {
163
189
  // map info
164
190
  mapInfo: {
165
- title: '',
166
- description: ''
191
+ title: undefined,
192
+ description: undefined
167
193
  },
168
194
  // layers
169
195
  layers: [],
@@ -177,6 +203,9 @@ export var INITIAL_VIS_STATE = {
177
203
  // a collection of multiple dataset
178
204
  datasets: {},
179
205
  editingDataset: undefined,
206
+ groupBys: [],
207
+ joins: [],
208
+ suitabilities: [],
180
209
  // effects
181
210
  effects: [],
182
211
  effectOrder: [],
@@ -216,9 +245,11 @@ export var INITIAL_VIS_STATE = {
216
245
  editor: DEFAULT_EDITOR,
217
246
  fileLoading: false,
218
247
  fileLoadingProgress: {},
248
+ stagedToAdd: null,
219
249
  // for loading datasets
220
250
  loadingIndicatorValue: 0,
221
251
  loadingProgress: {},
252
+ loadingProcessing: {},
222
253
  loaders: [],
223
254
  loadOptions: {},
224
255
  // visStateMergers
@@ -294,7 +325,8 @@ export function applyLayerConfigUpdater(state, action) {
294
325
  layerIndex = action.layerIndex;
295
326
  // Saved configs have a visualChannels sibling; parsed/editor JSON folds those
296
327
  // fields into config. Re-parsing the latter drops colorField and resets the scale.
297
- var newParsedLayer = isSavedLayerConfigV1(newLayerConfig) ? parseLayerConfig(state.schema, newLayerConfig) : newLayerConfig;
328
+ var savedLayerConfig = isSavedLayerConfigV1(newLayerConfig);
329
+ var newParsedLayer = savedLayerConfig ? parseLayerConfig(state.schema, newLayerConfig) : newLayerConfig;
298
330
  var oldLayer = state.layers.find(function (l) {
299
331
  return l.id === oldLayerId;
300
332
  });
@@ -310,7 +342,9 @@ export function applyLayerConfigUpdater(state, action) {
310
342
  return state;
311
343
  }
312
344
  // Make sure the layer is valid and convert it to Layer
313
- var newLayer = validateLayerWithData(dataset, newParsedLayer, state.layerClasses);
345
+ var newLayer = validateLayerWithData(dataset, newParsedLayer, state.layerClasses, {
346
+ keepUnlabeledAggregationTextLabel: savedLayerConfig
347
+ });
314
348
  if (!newLayer) {
315
349
  return state;
316
350
  }
@@ -582,8 +616,10 @@ function addOrRemoveTextLabels(newFields, textLabel) {
582
616
  }).filter(function (d) {
583
617
  return d;
584
618
  });
585
- var addFields = newFields.filter(function (f) {
586
- return !currentFields.includes(f.name);
619
+ var addFields = newFields.filter(function (field, index) {
620
+ return field && field.name && !currentFields.includes(field.name) && newFields.findIndex(function (other) {
621
+ return other && other.name === field.name;
622
+ }) === index;
587
623
  });
588
624
  var deleteFields = currentFields.filter(function (f) {
589
625
  return !newFields.find(function (fd) {
@@ -595,7 +631,12 @@ function addOrRemoveTextLabels(newFields, textLabel) {
595
631
  newTextLabel = newTextLabel.filter(function (tl) {
596
632
  return tl.field && !deleteFields.includes(tl.field.name);
597
633
  });
598
- newTextLabel = !newTextLabel.length ? [defaultTextLabel] : newTextLabel;
634
+ // Aggregation defaults already name Point Count. Using that object as the
635
+ // empty placeholder, then appending the field just picked, inserts the same
636
+ // label twice. deck.gl then rejects the duplicate collision layer ids.
637
+ newTextLabel = !newTextLabel.length ? [_objectSpread(_objectSpread({}, defaultTextLabel), {}, {
638
+ field: null
639
+ })] : newTextLabel;
599
640
 
600
641
  // add
601
642
  newTextLabel = [].concat(_toConsumableArray(newTextLabel.filter(function (tl) {
@@ -650,6 +691,9 @@ export function layerTextLabelChangeUpdater(state, action) {
650
691
  var _textLabel$;
651
692
  // if idx is set to length, add empty text label
652
693
  newTextLabel = [].concat(_toConsumableArray(textLabel), [_objectSpread(_objectSpread({}, defaultTextLabel), {}, {
694
+ // The slot is empty until a field is picked. Aggregation defaults already
695
+ // carry Point Count, and copying that field would add a second label.
696
+ field: null,
653
697
  collisionEnabled: Boolean((_textLabel$ = textLabel[0]) === null || _textLabel$ === void 0 ? void 0 : _textLabel$.collisionEnabled)
654
698
  })]);
655
699
  }
@@ -785,6 +829,25 @@ export function setInitialLayerConfig(layer, datasets, layerClasses) {
785
829
  }
786
830
  return typeof newLayer.setInitialLayerConfig === 'function' ? newLayer.setInitialLayerConfig(dataset) : newLayer;
787
831
  }
832
+ /**
833
+ * Fit the map when the layer type dropdown gives an empty layer its first
834
+ * type and that layer already points at a dataset. Later type changes,
835
+ * programmatic `layerTypeChange`, and saved-config applies leave the camera
836
+ * alone. Gated by `enableFitBoundsOnManualLayer`.
837
+ */
838
+ function maybeFitManualLayerBounds(state, oldLayer, layer, fitBounds) {
839
+ if (!fitBounds || oldLayer.type || !layer.config.dataId || !getApplicationConfig().enableFitBoundsOnManualLayer) {
840
+ return state;
841
+ }
842
+ var bounds = findMapBounds([layer]);
843
+ if (!bounds) {
844
+ return state;
845
+ }
846
+ return withTask(state, ACTION_TASK_FIT_BOUNDS().map(function () {
847
+ return fitMapBounds(bounds);
848
+ }));
849
+ }
850
+
788
851
  /**
789
852
  * Update layer type. Previews layer config will be copied if applicable.
790
853
  * @memberof visStateUpdaters
@@ -820,6 +883,16 @@ export function layerTypeChangeUpdater(state, action) {
820
883
 
821
884
  var defaultLayerProps = typeof state.layerClasses[newType].findDefaultLayerProps === 'function' ? state.layerClasses[newType].findDefaultLayerProps(state.datasets[newLayer.config.dataId]) : null;
822
885
  newLayer.assignConfigToLayer(oldLayer.config, oldLayer.visConfigSettings, state.datasets, defaultLayerProps);
886
+ if (!AGGREGATION_COUNT_LAYER_TYPES.has(newType)) {
887
+ var textLabel = newLayer.config.textLabel.filter(function (label) {
888
+ return !isPointCountLabel(label);
889
+ });
890
+ if (textLabel.length !== newLayer.config.textLabel.length) {
891
+ newLayer.updateLayerConfig({
892
+ textLabel: textLabel.length ? textLabel : [_objectSpread({}, DEFAULT_TEXT_LABEL)]
893
+ });
894
+ }
895
+ }
823
896
  newLayer.updateLayerDomain(state.datasets);
824
897
  }
825
898
  var clicked = state.clicked,
@@ -858,7 +931,7 @@ export function layerTypeChangeUpdater(state, action) {
858
931
  newState = _objectSpread(_objectSpread({}, newState), {}, {
859
932
  layerOrder: replaceLayerEntryInLayerOrder(newState.layerOrder, oldLayer.id, newLayer.id)
860
933
  });
861
- return newState;
934
+ return maybeFitManualLayerBounds(newState, oldLayer, layer, action.fitBounds);
862
935
  }
863
936
 
864
937
  /**
@@ -1065,13 +1138,24 @@ export function setFilterAnimationWindowUpdater(state, _ref5) {
1065
1138
  if (!filter) {
1066
1139
  return state;
1067
1140
  }
1068
- var newFilter = _objectSpread(_objectSpread({}, filter), {}, {
1141
+ var previousWindow = filter.animationWindow;
1142
+ var nextFilter = _objectSpread(_objectSpread({}, filter), {}, {
1069
1143
  animationWindow: animationWindow
1070
1144
  });
1145
+
1146
+ // Entering or leaving interval playback snaps the window onto histogram bins.
1147
+ if (filter.type === FILTER_TYPES.timeRange && (previousWindow === ANIMATION_WINDOW.interval || animationWindow === ANIMATION_WINDOW.interval)) {
1148
+ var adjusted = adjustValueToAnimationWindow(state, nextFilter, getPlotBaseIndexByDataId(state.datasets, nextFilter, state.layers));
1149
+ if (Array.isArray(adjusted.value) && adjusted.value.every(function (v) {
1150
+ return Number.isFinite(v);
1151
+ })) {
1152
+ nextFilter = adjusted;
1153
+ }
1154
+ }
1071
1155
  var newState = _objectSpread(_objectSpread({}, state), {}, {
1072
- filters: swap_(newFilter)(state.filters)
1156
+ filters: swap_(nextFilter)(state.filters)
1073
1157
  });
1074
- var newSyncTimelineMode = getSyncAnimationMode(newFilter);
1158
+ var newSyncTimelineMode = getSyncAnimationMode(nextFilter);
1075
1159
  return setTimeFilterTimelineModeUpdater(newState, {
1076
1160
  id: id,
1077
1161
  mode: newSyncTimelineMode
@@ -1109,6 +1193,25 @@ export function applyFilterConfigUpdater(state, action) {
1109
1193
  }
1110
1194
  return setFilterUpdater(state, setFilter(filterIndex, Object.keys(changed), Object.values(changed)));
1111
1195
  }
1196
+ function updateFilterPlotsAfterFiltering(state, affectedDatasetIds, updatedFilterIndex) {
1197
+ var filters = state.filters.map(function (filter, filterIndex) {
1198
+ if (filterIndex === updatedFilterIndex) {
1199
+ return updateFilterPlot(state.datasets, filter, undefined, state.layers);
1200
+ }
1201
+ if (filter.type !== FILTER_TYPES.timeRange) {
1202
+ return filter;
1203
+ }
1204
+ var sharedDatasetIds = filter.dataId.filter(function (dataId) {
1205
+ return affectedDatasetIds.includes(dataId);
1206
+ });
1207
+ if (!sharedDatasetIds.length) {
1208
+ return filter;
1209
+ }
1210
+ var invalidatedFilter = sharedDatasetIds.reduce(removeFilterPlot, filter);
1211
+ return updateFilterPlot(state.datasets, invalidatedFilter, undefined, state.layers);
1212
+ });
1213
+ return set(['filters'], filters, state);
1214
+ }
1112
1215
 
1113
1216
  /**
1114
1217
  * Update filter property
@@ -1167,12 +1270,13 @@ export function setFilterUpdater(state, action) {
1167
1270
  newState = set(['filters', idx], newFilter, newState);
1168
1271
 
1169
1272
  // filter data
1170
- var filteredDatasets = applyFiltersToDatasets(uniq(datasetIdsToFilter), newState.datasets, newState.filters, newState.layers);
1273
+ var affectedDatasetIds = uniq(datasetIdsToFilter);
1274
+ var filteredDatasets = applyFiltersToDatasets(affectedDatasetIds, newState.datasets, newState.filters, newState.layers);
1171
1275
  newState = set(['datasets'], filteredDatasets, newState);
1172
1276
 
1173
- // need to update filterPlot after filter Dataset for plot to update on filtered result
1174
- var filterWithPLot = updateFilterPlot(newState.datasets, newState.filters[idx]);
1175
- newState = set(['filters', idx], filterWithPLot, newState);
1277
+ // Update plots after filtering so they use the latest filtered indexes.
1278
+ // Other time filters need their cached bins invalidated for shared datasets.
1279
+ newState = updateFilterPlotsAfterFiltering(newState, affectedDatasetIds, idx);
1176
1280
 
1177
1281
  // dataId is an array
1178
1282
  // pass only the dataset we need to update
@@ -1252,7 +1356,7 @@ function _updateFilterProp(state, filter, prop, value, valueIndex, datasetIds) {
1252
1356
  // we are gonna use pair of datasets and fieldIdx to update the filter
1253
1357
  var datasetId = filter.dataId[valueIndex];
1254
1358
  var _applyFilterFieldName = applyFilterFieldName(filter, state.datasets, datasetId, value, valueIndex, {
1255
- mergeDomain: valueIndex > 0
1359
+ mergeDomain: filter.dataId.length > 1
1256
1360
  }),
1257
1361
  updatedFilter = _applyFilterFieldName.filter,
1258
1362
  newDataset = _applyFilterFieldName.dataset;
@@ -1289,6 +1393,26 @@ function _updateFilterProp(state, filter, prop, value, valueIndex, datasetIds) {
1289
1393
  }
1290
1394
  break;
1291
1395
  }
1396
+ case 'inverted':
1397
+ {
1398
+ var supportsInversion = filter.dataId.every(function (datasetId) {
1399
+ var _state$datasets$datas;
1400
+ return !((_state$datasets$datas = state.datasets[datasetId]) !== null && _state$datasets$datas !== void 0 && _state$datasets$datas.disableDataOperation);
1401
+ });
1402
+ filter = _objectSpread(_objectSpread({}, filter), {}, {
1403
+ inverted: supportsInversion && Boolean(value)
1404
+ });
1405
+ if (filter.inverted) {
1406
+ // GPU range tests can only keep values inside the window.
1407
+ filter = disableGpuIfInverted(filter);
1408
+ } else if (filterTypeUsesGpu(filter.type)) {
1409
+ filter = assignGpuChannel(setFilterGpuMode(_objectSpread(_objectSpread({}, filter), {}, {
1410
+ gpu: true
1411
+ }), state.filters), state.filters);
1412
+ }
1413
+ datasetIdsToFilter = _toConsumableArray(filter.dataId);
1414
+ break;
1415
+ }
1292
1416
  case FILTER_UPDATER_PROPS.layerId:
1293
1417
  {
1294
1418
  // We need to update only datasetId/s if we have added/removed layers
@@ -1350,7 +1474,14 @@ export var setFilterPlotUpdater = function setFilterPlotUpdater(state, _ref6) {
1350
1474
  var newFilter = state.filters[idx];
1351
1475
  for (var prop in newProp) {
1352
1476
  if (prop === 'plotType') {
1353
- newFilter = pick_('plotType')(merge_(newProp.plotType))(newFilter);
1477
+ var plotTypeUpdate = newProp.plotType;
1478
+ if (plotTypeUpdate && Object.prototype.hasOwnProperty.call(plotTypeUpdate, 'groupBy')) {
1479
+ var _newFilter$plotType;
1480
+ plotTypeUpdate = _objectSpread(_objectSpread({}, plotTypeUpdate), {}, {
1481
+ groupBy: mergePlotGroupBy((_newFilter$plotType = newFilter.plotType) === null || _newFilter$plotType === void 0 ? void 0 : _newFilter$plotType.groupBy, plotTypeUpdate.groupBy)
1482
+ });
1483
+ }
1484
+ newFilter = pick_('plotType')(merge_(plotTypeUpdate))(newFilter);
1354
1485
  } else if (prop === 'yAxis') {
1355
1486
  var chartType = newProp.yAxis ? PLOT_TYPES.lineChart : PLOT_TYPES.histogram;
1356
1487
  newFilter = pick_('plotType')(merge_({
@@ -1358,7 +1489,7 @@ export var setFilterPlotUpdater = function setFilterPlotUpdater(state, _ref6) {
1358
1489
  }))(merge_(newProp)(newFilter));
1359
1490
  }
1360
1491
  }
1361
- newFilter = updateFilterPlot(state.datasets, newFilter);
1492
+ newFilter = updateFilterPlot(state.datasets, newFilter, undefined, state.layers);
1362
1493
  return _objectSpread(_objectSpread({}, state), {}, {
1363
1494
  filters: state.filters.map(function (f, i) {
1364
1495
  return i === idx ? newFilter : f;
@@ -1624,6 +1755,7 @@ export var removeFilterUpdater = function removeFilterUpdater(state, action) {
1624
1755
  }) : state.editor;
1625
1756
  var newState = set(['filters'], newFilters, state);
1626
1757
  newState = set(['datasets'], filteredDatasets, newState);
1758
+ newState = updateFilterPlotsAfterFiltering(newState, dataId);
1627
1759
  newState = set(['editor'], newEditor, newState);
1628
1760
  return updateAllLayerDomainData(newState, dataId, undefined);
1629
1761
  };
@@ -1692,6 +1824,7 @@ export function removeLayerUpdater(state, _ref9) {
1692
1824
  clicked = state.clicked,
1693
1825
  hoverInfo = state.hoverInfo;
1694
1826
  var layerToRemove = layers[idx];
1827
+ var interactionConfig = state.interactionConfig ? removeLayerFromZoomOpacity(state.interactionConfig, layerToRemove.id) : state.interactionConfig;
1695
1828
  var newState = _objectSpread(_objectSpread({}, state), {}, {
1696
1829
  layers: filterOutById(layerToRemove.id)(layers),
1697
1830
  layerData: removeElementAtIndex(idx)(layerData),
@@ -1699,8 +1832,9 @@ export function removeLayerUpdater(state, _ref9) {
1699
1832
  clicked: layerToRemove.isLayerHovered(clicked) ? undefined : clicked,
1700
1833
  hoverInfo: layerToRemove.isLayerHovered(hoverInfo) ? undefined : hoverInfo,
1701
1834
  splitMaps: removeLayerFromSplitMaps(state.splitMaps, layerToRemove)
1702
- // TODO: update filters, create helper to remove layer form filter (remove layerid and dataid) if mapped
1703
- });
1835
+ }, interactionConfig !== state.interactionConfig ? {
1836
+ interactionConfig: interactionConfig
1837
+ } : {});
1704
1838
  return updateAnimationDomain(removeChartsAndFilters(newState, function (chart) {
1705
1839
  return isLayerChartConfig(chart) && chart.layerId === layerToRemove.id;
1706
1840
  }));
@@ -2235,7 +2369,8 @@ export var addChartUpdater = function addChartUpdater(state, _ref13) {
2235
2369
  charts: [].concat(_toConsumableArray((state.charts || []).map(function (existing) {
2236
2370
  return _objectSpread(_objectSpread({}, existing), {}, {
2237
2371
  display: _objectSpread(_objectSpread({}, existing.display), {}, {
2238
- isConfigActive: false
2372
+ isConfigActive: false,
2373
+ isJsonEditorActive: false
2239
2374
  })
2240
2375
  });
2241
2376
  })), [_objectSpread(_objectSpread({}, chart), {}, {
@@ -2391,6 +2526,7 @@ export var removeAnnotationUpdater = function removeAnnotationUpdater(state, _re
2391
2526
  annotations: state.annotations.filter(function (a) {
2392
2527
  return a.id !== id;
2393
2528
  }),
2529
+ interactionConfig: removeLayerFromZoomOpacity(state.interactionConfig, getZoomOpacityAnnotationTargetId(id)),
2394
2530
  selectedAnnotationId: state.selectedAnnotationId === id ? null : state.selectedAnnotationId,
2395
2531
  isEditingAnnotationText: state.selectedAnnotationId === id ? false : state.isEditingAnnotationText
2396
2532
  });
@@ -2473,25 +2609,31 @@ export var setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(
2473
2609
  * @public
2474
2610
  */
2475
2611
  export function removeDatasetUpdater(state, action) {
2476
- // extract dataset key
2477
2612
  var datasetKey = action.dataId;
2478
2613
  var datasets = state.datasets;
2614
+ if (!datasets[datasetKey]) {
2615
+ return state;
2616
+ }
2479
2617
 
2480
- // check if dataset is present
2618
+ // Derived tables are snapshots: keep them when a source dataset is deleted.
2619
+ // Only drop in-progress group-by / join drafts that referenced this dataset.
2620
+ var nextState = removeOpsForDatasets(state, [datasetKey]);
2621
+ return removeSingleDatasetUpdater(nextState, datasetKey);
2622
+ }
2623
+ function removeSingleDatasetUpdater(state, datasetKey) {
2624
+ var datasets = state.datasets;
2481
2625
  if (!datasets[datasetKey]) {
2482
2626
  return state;
2483
2627
  }
2484
2628
  var layers = state.layers,
2485
2629
  _state$datasets = state.datasets,
2486
- dataset = _state$datasets[datasetKey],
2630
+ _dataset = _state$datasets[datasetKey],
2487
2631
  newDatasets = _objectWithoutProperties(_state$datasets, [datasetKey].map(_toPropertyKey));
2488
2632
  var layersToRemove = layers.filter(function (l) {
2489
2633
  return l.config.dataId === datasetKey;
2490
2634
  }).map(function (l) {
2491
2635
  return l.id;
2492
2636
  });
2493
-
2494
- // remove layers and datasets
2495
2637
  var newState = layersToRemove.reduce(function (accu, id) {
2496
2638
  return removeLayerUpdater(accu, {
2497
2639
  id: id
@@ -2499,8 +2641,6 @@ export function removeDatasetUpdater(state, action) {
2499
2641
  }, _objectSpread(_objectSpread({}, state), {}, {
2500
2642
  datasets: newDatasets
2501
2643
  }));
2502
-
2503
- // update filters
2504
2644
  var filters = [];
2505
2645
  var _iterator2 = _createForOfIteratorHelper(newState.filters),
2506
2646
  _step2;
@@ -2509,10 +2649,8 @@ export function removeDatasetUpdater(state, action) {
2509
2649
  var filter = _step2.value;
2510
2650
  var valueIndex = filter.dataId.indexOf(datasetKey);
2511
2651
  if (valueIndex >= 0 && filter.dataId.length > 1) {
2512
- // only remove one synced dataset from the filter
2513
2652
  filters.push(_removeFilterDataIdAtValueIndex(filter, valueIndex, datasets));
2514
2653
  } else if (valueIndex < 0) {
2515
- // leave the filter as is
2516
2654
  filters.push(filter);
2517
2655
  }
2518
2656
  }
@@ -2696,9 +2834,23 @@ export function interactionConfigChangeUpdater(state, action) {
2696
2834
  });
2697
2835
  if (config.id === 'geocoder' && !config.enabled) {
2698
2836
  return removeDatasetUpdater(newState, {
2699
- dataId: 'geocoder_dataset'
2837
+ dataId: GEOCODER_DATASET_NAME
2700
2838
  });
2701
2839
  }
2840
+ if (config.id === 'geocoder') {
2841
+ var geocoderLayer = newState.layers.find(function (layer) {
2842
+ return layer.id === GEOCODER_LAYER_ID;
2843
+ });
2844
+ if (geocoderLayer) {
2845
+ var _config$config$color;
2846
+ return layerConfigChangeUpdater(newState, {
2847
+ oldLayer: geocoderLayer,
2848
+ newConfig: {
2849
+ color: (_config$config$color = config.config.color) !== null && _config$config$color !== void 0 ? _config$config$color : GEOCODER_ICON_COLOR
2850
+ }
2851
+ });
2852
+ }
2853
+ }
2702
2854
  return newState;
2703
2855
  }
2704
2856
 
@@ -2877,7 +3029,7 @@ function createNewDataEntryTask(dataset, datasets) {
2877
3029
  arg: dataset,
2878
3030
  onProgress: function onProgress(progress) {
2879
3031
  var _progress$percent;
2880
- return setLoadingProgress(progressId, Math.round(((_progress$percent = progress === null || progress === void 0 ? void 0 : progress.percent) !== null && _progress$percent !== void 0 ? _progress$percent : 0) * 100));
3032
+ return setLoadingProgress(progressId, Math.round(((_progress$percent = progress === null || progress === void 0 ? void 0 : progress.percent) !== null && _progress$percent !== void 0 ? _progress$percent : 0) * 100), (progress === null || progress === void 0 ? void 0 : progress.phase) === 'processing' ? 'processing' : undefined);
2881
3033
  }
2882
3034
  }).chain(function (hydrated) {
2883
3035
  var task = createNewDataEntry(hydrated, datasets);
@@ -2886,23 +3038,28 @@ function createNewDataEntryTask(dataset, datasets) {
2886
3038
  }
2887
3039
  function clearLoadingProgress(state, ids) {
2888
3040
  var current = state.loadingProgress || {};
2889
- if (!Object.keys(current).length) {
3041
+ var processing = state.loadingProcessing || {};
3042
+ if (!Object.keys(current).length && !Object.keys(processing).length) {
2890
3043
  return state;
2891
3044
  }
2892
3045
  if ((state.loadingIndicatorValue || 0) <= 0) {
2893
3046
  return _objectSpread(_objectSpread({}, state), {}, {
2894
- loadingProgress: {}
3047
+ loadingProgress: {},
3048
+ loadingProcessing: {}
2895
3049
  });
2896
3050
  }
2897
3051
  if (!(ids !== null && ids !== void 0 && ids.length)) {
2898
3052
  return state;
2899
3053
  }
2900
3054
  var next = _objectSpread({}, current);
3055
+ var nextProcessing = _objectSpread({}, processing);
2901
3056
  ids.forEach(function (id) {
2902
3057
  delete next[id];
3058
+ delete nextProcessing[id];
2903
3059
  });
2904
3060
  return _objectSpread(_objectSpread({}, state), {}, {
2905
- loadingProgress: next
3061
+ loadingProgress: next,
3062
+ loadingProcessing: nextProcessing
2906
3063
  });
2907
3064
  }
2908
3065
  function patchDatasetMetadata(dataset, patch) {
@@ -3265,7 +3422,8 @@ export var updateVisDataUpdater = function updateVisDataUpdater(state, action) {
3265
3422
  if (!datasets.length) {
3266
3423
  return updatedState;
3267
3424
  }
3268
- var createDatasetTasks = [];
3425
+ var readyTasks = [];
3426
+ var remoteTasks = [];
3269
3427
  var notificationTasks = [];
3270
3428
  var hydrateProgress = {};
3271
3429
  datasets.forEach(function (_ref35, datasetIndex) {
@@ -3275,12 +3433,13 @@ export var updateVisDataUpdater = function updateVisDataUpdater(state, action) {
3275
3433
  var proto = _objectSpread({
3276
3434
  info: info
3277
3435
  }, rest);
3278
- if (needsExternallyHostedHydrate(proto)) {
3436
+ var remote = needsExternallyHostedHydrate(proto);
3437
+ if (remote) {
3279
3438
  hydrateProgress[getDatasetProgressId(proto, datasetIndex)] = 0;
3280
3439
  }
3281
3440
  var task = createNewDataEntryTask(proto, state.datasets);
3282
3441
  if (task) {
3283
- createDatasetTasks.push(task);
3442
+ (remote ? remoteTasks : readyTasks).push(task);
3284
3443
  } else {
3285
3444
  notificationTasks.push(ACTION_TASK_ADD_NOTIFICATION().map(function () {
3286
3445
  return addNotification(errorNotification({
@@ -3290,17 +3449,26 @@ export var updateVisDataUpdater = function updateVisDataUpdater(state, action) {
3290
3449
  }));
3291
3450
  }
3292
3451
  });
3452
+
3453
+ // Parsed datasets are committed on their own. A remote download in the same
3454
+ // add must not hold them until the URL finishes.
3293
3455
  var progressIds = Object.keys(hydrateProgress);
3294
- var datasetsAllSettledTask = createDatasetTasks.length ? Task.allSettled(createDatasetTasks).map(function (results) {
3295
- return createNewDatasetSuccess({
3296
- results: results,
3297
- addToMapOptions: options,
3456
+ var batches = [];
3457
+ if (readyTasks.length) {
3458
+ batches.push({
3459
+ tasks: readyTasks,
3460
+ progressIds: []
3461
+ });
3462
+ }
3463
+ if (remoteTasks.length) {
3464
+ batches.push({
3465
+ tasks: remoteTasks,
3298
3466
  progressIds: progressIds
3299
3467
  });
3300
- }) : null;
3301
- if (datasetsAllSettledTask) {
3468
+ }
3469
+ if (batches.length) {
3302
3470
  updatedState = setLoadingIndicatorUpdater(updatedState, payload_({
3303
- change: 1,
3471
+ change: batches.length,
3304
3472
  type: ''
3305
3473
  }));
3306
3474
  if (progressIds.length) {
@@ -3309,7 +3477,15 @@ export var updateVisDataUpdater = function updateVisDataUpdater(state, action) {
3309
3477
  });
3310
3478
  }
3311
3479
  }
3312
- return withTask(updatedState, [].concat(_toConsumableArray(datasetsAllSettledTask ? [datasetsAllSettledTask] : []), notificationTasks));
3480
+ return withTask(updatedState, [].concat(_toConsumableArray(batches.map(function (batch) {
3481
+ return Task.allSettled(batch.tasks).map(function (results) {
3482
+ return createNewDatasetSuccess({
3483
+ results: results,
3484
+ addToMapOptions: options,
3485
+ progressIds: batch.progressIds
3486
+ });
3487
+ });
3488
+ })), notificationTasks));
3313
3489
  };
3314
3490
  export var createNewDatasetSuccessUpdater = function createNewDatasetSuccessUpdater(state, action) {
3315
3491
  var _action$payload = action.payload,
@@ -3563,9 +3739,16 @@ export function updateDatasetPropsUpdater(state, action) {
3563
3739
  // validate props: just color for now
3564
3740
  // we only allow label, color and meta to be updated
3565
3741
  // const newTable = copyTableAndUpdate(existing, validatedProps);
3566
- return _objectSpread(_objectSpread({}, state), {}, {
3742
+ var nextState = _objectSpread(_objectSpread({}, state), {}, {
3567
3743
  datasets: _objectSpread(_objectSpread({}, datasets), {}, _defineProperty({}, dataId, copyTableAndUpdate(existing, validatedProps)))
3568
3744
  });
3745
+ // A tileset access token is read while formatting layer data. Refresh
3746
+ // only when that field changes so other metadata edits (e.g. refresh
3747
+ // interval) do not rebuild every layer on the dataset.
3748
+ if (props.metadata && 'tile3dAccessToken' in props.metadata) {
3749
+ return updateAllLayerDomainData(nextState, dataId);
3750
+ }
3751
+ return nextState;
3569
3752
  }
3570
3753
  return state;
3571
3754
  }
@@ -3613,20 +3796,19 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
3613
3796
  }
3614
3797
  });
3615
3798
 
3616
- // follow renamed text-label fields
3799
+ // follow renamed or re-typed text-label fields
3617
3800
  if ((_layer$config$textLab = layer.config.textLabel) !== null && _layer$config$textLab !== void 0 && _layer$config$textLab.length) {
3618
- var textLabel = layer.config.textLabel.map(function (tl) {
3619
- return tl.field && renames[tl.field.name] ? _objectSpread(_objectSpread({}, tl), {}, {
3620
- field: _objectSpread(_objectSpread({}, tl.field), {}, {
3621
- name: renames[tl.field.name]
3622
- })
3801
+ configPatch.textLabel = layer.config.textLabel.map(function (tl) {
3802
+ var _tl$field, _tl$field2;
3803
+ var name = (_tl$field = tl.field) === null || _tl$field === void 0 ? void 0 : _tl$field.name;
3804
+ var field = name && newTable.fields.find(function (candidate) {
3805
+ var _renames$name;
3806
+ return candidate.name === ((_renames$name = renames[name]) !== null && _renames$name !== void 0 ? _renames$name : name);
3807
+ });
3808
+ return field && (field.name !== name || field.type !== ((_tl$field2 = tl.field) === null || _tl$field2 === void 0 ? void 0 : _tl$field2.type)) ? _objectSpread(_objectSpread({}, tl), {}, {
3809
+ field: field
3623
3810
  }) : tl;
3624
3811
  });
3625
- if (textLabel.some(function (tl, i) {
3626
- return tl !== layer.config.textLabel[i];
3627
- })) {
3628
- configPatch.textLabel = textLabel;
3629
- }
3630
3812
  }
3631
3813
 
3632
3814
  // shallow-copy the layer so we never mutate redux state; the copy keeps the
@@ -3639,6 +3821,52 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
3639
3821
  var validated = validateExistingLayerWithData(newTable, state.layerClasses, layerCopy, state.schema);
3640
3822
  return validated && validated.hasAllColumns() ? validated : null;
3641
3823
  }
3824
+ var FILTER_PLOT_Y_AXIS_TYPES = new Set([ALL_FIELD_TYPES.integer, ALL_FIELD_TYPES.real]);
3825
+ function clearTimelineFilterState(filter) {
3826
+ var _ref39 = filter,
3827
+ _syncedWithLayerTimeline = _ref39.syncedWithLayerTimeline,
3828
+ _syncTimelineMode = _ref39.syncTimelineMode,
3829
+ _timeBins = _ref39.timeBins,
3830
+ _lineChart = _ref39.lineChart,
3831
+ _timezone = _ref39.timezone,
3832
+ _invertTrendColor = _ref39.invertTrendColor,
3833
+ _showTimeDisplay = _ref39.showTimeDisplay,
3834
+ rest = _objectWithoutProperties(_ref39, _excluded3);
3835
+ return _objectSpread(_objectSpread({}, rest), {}, {
3836
+ fixedDomain: false,
3837
+ isAnimating: false,
3838
+ animationWindow: ANIMATION_WINDOW.free,
3839
+ yAxis: null,
3840
+ plotType: {
3841
+ type: PLOT_TYPES.histogram
3842
+ }
3843
+ });
3844
+ }
3845
+ function reconcileTimelinePlotAfterPrimaryRemoval(filter, datasets) {
3846
+ var _filter$yAxis, _primaryDataset$field, _filter$plotType;
3847
+ if (filter.type !== FILTER_TYPES.timeRange) {
3848
+ return filter;
3849
+ }
3850
+ var primaryDataset = datasets[filter.dataId[0]];
3851
+ var yAxis = (_filter$yAxis = filter.yAxis) !== null && _filter$yAxis !== void 0 && _filter$yAxis.name ? (_primaryDataset$field = primaryDataset === null || primaryDataset === void 0 ? void 0 : primaryDataset.fields.find(function (field) {
3852
+ var _filter$yAxis2;
3853
+ return field.name === ((_filter$yAxis2 = filter.yAxis) === null || _filter$yAxis2 === void 0 ? void 0 : _filter$yAxis2.name) && FILTER_PLOT_Y_AXIS_TYPES.has(field.type);
3854
+ })) !== null && _primaryDataset$field !== void 0 ? _primaryDataset$field : null : null;
3855
+ var groupByFieldName = (_filter$plotType = filter.plotType) === null || _filter$plotType === void 0 || (_filter$plotType = _filter$plotType.groupBy) === null || _filter$plotType === void 0 ? void 0 : _filter$plotType.fieldName;
3856
+ var hasGroupByField = groupByFieldName ? primaryDataset === null || primaryDataset === void 0 ? void 0 : primaryDataset.fields.some(function (field) {
3857
+ return field.name === groupByFieldName;
3858
+ }) : true;
3859
+ var plotType = _objectSpread(_objectSpread(_objectSpread({}, filter.plotType), filter.yAxis && !yAxis ? {
3860
+ type: PLOT_TYPES.histogram
3861
+ } : {}), !hasGroupByField ? {
3862
+ groupBy: null
3863
+ } : {});
3864
+ return _objectSpread(_objectSpread({}, filter), {}, {
3865
+ yAxis: yAxis,
3866
+ plotType: plotType,
3867
+ lineChart: undefined
3868
+ });
3869
+ }
3642
3870
 
3643
3871
  /**
3644
3872
  * Update an existing dataset's schema (columns/fields) in place and reconcile
@@ -3659,7 +3887,7 @@ function reconcileLayerWithNewSchema(layer, renames, newTable, state) {
3659
3887
  * @public
3660
3888
  */
3661
3889
  export function updateDatasetUpdater(state, action) {
3662
- var _interactionConfig2, _tooltip$config;
3890
+ var _renames$sortedColumn, _interactionConfig2, _tooltip$config;
3663
3891
  var dataId = action.dataId,
3664
3892
  data = action.data,
3665
3893
  _action$renames = action.renames,
@@ -3671,7 +3899,12 @@ export function updateDatasetUpdater(state, action) {
3671
3899
 
3672
3900
  // 1. rebuild the table schema in place (same id/label/color/metadata)
3673
3901
  var newTable = copyTableAndUpdate(existing, {});
3902
+ var _ref40 = Object.entries(existing.sortColumn || {})[0] || [],
3903
+ _ref41 = _slicedToArray(_ref40, 2),
3904
+ sortedColumn = _ref41[0],
3905
+ sortMode = _ref41[1];
3674
3906
  newTable.updateSchema(data);
3907
+ newTable.dataRevision = existing.dataRevision + 1;
3675
3908
 
3676
3909
  // The data container is rebuilt unsorted and unfiltered; reset the table's
3677
3910
  // view state that indexes into the old container.
@@ -3679,30 +3912,55 @@ export function updateDatasetUpdater(state, action) {
3679
3912
  newTable.filterRecordCPU = undefined;
3680
3913
  newTable.sortColumn = undefined;
3681
3914
  newTable.sortOrder = null;
3915
+ var newFieldsByName = new Map(newTable.fields.map(function (field) {
3916
+ return [field.name, field];
3917
+ }));
3682
3918
  newTable.pinnedColumns = (existing.pinnedColumns || []).map(function (name) {
3683
- var _renames$name;
3684
- return (_renames$name = renames[name]) !== null && _renames$name !== void 0 ? _renames$name : name;
3919
+ var _renames$name2;
3920
+ return (_renames$name2 = renames[name]) !== null && _renames$name2 !== void 0 ? _renames$name2 : name;
3685
3921
  }).filter(function (name) {
3686
- return newTable.getColumnFieldIdx(name) > -1;
3922
+ return newFieldsByName.has(name);
3687
3923
  });
3688
- var newFieldsByName = new Set(newTable.fields.map(function (f) {
3689
- return f.name;
3690
- }));
3924
+ newTable.hiddenColumns = (existing.hiddenColumns || []).map(function (name) {
3925
+ var _renames$name3;
3926
+ return (_renames$name3 = renames[name]) !== null && _renames$name3 !== void 0 ? _renames$name3 : name;
3927
+ }).filter(function (name) {
3928
+ return newFieldsByName.has(name);
3929
+ });
3930
+ var nextSortedColumn = sortedColumn ? (_renames$sortedColumn = renames[sortedColumn]) !== null && _renames$sortedColumn !== void 0 ? _renames$sortedColumn : sortedColumn : null;
3931
+ if (nextSortedColumn && sortMode && newFieldsByName.has(nextSortedColumn)) {
3932
+ sortDatasetByColumn(newTable, nextSortedColumn, sortMode);
3933
+ }
3691
3934
  var newDatasets = _objectSpread(_objectSpread({}, state.datasets), {}, _defineProperty({}, dataId, newTable));
3935
+ var datasetIdsToRefilter = new Set([dataId]);
3692
3936
 
3693
3937
  // 2. reconcile filters
3694
3938
  var newFilters = state.filters.map(function (filter) {
3695
- var _renames$oldName, _updated$yAxis;
3939
+ var _renames$oldName, _newTable$getColumnFi, _updated$yAxis;
3696
3940
  var vi = filter.dataId.indexOf(dataId);
3697
3941
  if (vi === -1) {
3698
3942
  return filter;
3699
3943
  }
3944
+
3945
+ // Polygon filters target layers rather than dataset fields, so a column
3946
+ // type change should not reconcile them against the field list.
3947
+ if (filter.type === FILTER_TYPES.polygon) {
3948
+ return filter;
3949
+ }
3700
3950
  var oldName = filter.name[vi];
3701
3951
  var newName = (_renames$oldName = renames[oldName]) !== null && _renames$oldName !== void 0 ? _renames$oldName : oldName;
3702
3952
  var fieldIdx = newTable.getColumnFieldIdx(newName);
3703
- if (fieldIdx === -1) {
3704
- // column is gone: drop a single-dataset filter, splice it out of a synced one
3705
- return filter.dataId.length === 1 ? null : _removeFilterDataIdAtValueIndex(filter, vi, newDatasets);
3953
+ var nextFilterType = fieldIdx === -1 ? null : (_newTable$getColumnFi = newTable.getColumnFilterProps(newName)) === null || _newTable$getColumnFi === void 0 ? void 0 : _newTable$getColumnFi.type;
3954
+ if (fieldIdx === -1 || filter.dataId.length > 1 && nextFilterType && nextFilterType !== filter.type) {
3955
+ // Drop a missing field or detach an incompatible synced member.
3956
+ if (filter.dataId.length === 1) {
3957
+ return null;
3958
+ }
3959
+ filter.dataId.forEach(function (id) {
3960
+ return datasetIdsToRefilter.add(id);
3961
+ });
3962
+ var detachedFilter = _removeFilterDataIdAtValueIndex(filter, vi, newDatasets);
3963
+ return vi === 0 ? reconcileTimelinePlotAfterPrimaryRemoval(detachedFilter, newDatasets) : detachedFilter;
3706
3964
  }
3707
3965
 
3708
3966
  // column present (possibly renamed): re-resolve name/fieldIdx/domain
@@ -3713,30 +3971,56 @@ export function updateDatasetUpdater(state, action) {
3713
3971
  if (!updated) {
3714
3972
  return null;
3715
3973
  }
3974
+ var leavingTimeFilter = filter.type === FILTER_TYPES.timeRange && updated.type !== FILTER_TYPES.timeRange;
3975
+ var oldEndName = toArray(filter.endName)[vi];
3976
+ if (updated.type === FILTER_TYPES.timeRange && oldEndName) {
3977
+ var _renames$oldEndName, _ref42, _applyTimeFilterEndFi2;
3978
+ var endName = (_renames$oldEndName = renames[oldEndName]) !== null && _renames$oldEndName !== void 0 ? _renames$oldEndName : oldEndName;
3979
+ updated = (_ref42 = (_applyTimeFilterEndFi2 = applyTimeFilterEndFieldName(updated, newDatasets, dataId, endName, vi).filter) !== null && _applyTimeFilterEndFi2 !== void 0 ? _applyTimeFilterEndFi2 : applyTimeFilterEndFieldName(updated, newDatasets, dataId, null, vi).filter) !== null && _ref42 !== void 0 ? _ref42 : updated;
3980
+ }
3716
3981
 
3717
- // brush filters carry a second y-axis field; follow a rename there too
3718
- var yAxis = ((_updated$yAxis = updated.yAxis) === null || _updated$yAxis === void 0 ? void 0 : _updated$yAxis.name) && (renames[updated.yAxis.name] ? _objectSpread(_objectSpread({}, updated.yAxis), {}, {
3719
- name: renames[updated.yAxis.name]
3720
- }) : newFieldsByName.has(updated.yAxis.name) ? updated.yAxis : null);
3721
- return _objectSpread(_objectSpread({}, updated), {}, {
3722
- yAxis: yAxis,
3982
+ // Time plots only accept numeric y-axis fields. Re-resolve the complete
3983
+ // field so type and fieldIdx also follow a schema change.
3984
+ var yAxis = updated.yAxis;
3985
+ if (vi === 0 && (_updated$yAxis = updated.yAxis) !== null && _updated$yAxis !== void 0 && _updated$yAxis.name) {
3986
+ var _renames$updated$yAxi;
3987
+ var yAxisName = (_renames$updated$yAxi = renames[updated.yAxis.name]) !== null && _renames$updated$yAxi !== void 0 ? _renames$updated$yAxi : updated.yAxis.name;
3988
+ var yAxisField = newFieldsByName.get(yAxisName);
3989
+ yAxis = yAxisField && FILTER_PLOT_Y_AXIS_TYPES.has(yAxisField.type) ? yAxisField : null;
3990
+ }
3991
+ var nextFilter = _objectSpread(_objectSpread(_objectSpread({}, updated), {}, {
3992
+ yAxis: yAxis
3993
+ }, updated.yAxis && !yAxis ? {
3994
+ plotType: _objectSpread(_objectSpread({}, updated.plotType), {}, {
3995
+ type: PLOT_TYPES.histogram
3996
+ })
3997
+ } : {}), {}, {
3723
3998
  // clamp the user's previous selection into the new domain instead of
3724
3999
  // resetting it to the full range
3725
4000
  value: adjustValueToFilterDomain(filter.value, updated)
3726
4001
  });
4002
+ if (leavingTimeFilter) {
4003
+ nextFilter = clearTimelineFilterState(nextFilter);
4004
+ } else if (vi === 0 && nextFilter.type === FILTER_TYPES.timeRange) {
4005
+ var groupBy = nextFilter.plotType.groupBy;
4006
+ if (groupBy && renames[groupBy.fieldName]) {
4007
+ nextFilter.plotType = _objectSpread(_objectSpread({}, nextFilter.plotType), {}, {
4008
+ groupBy: _objectSpread(_objectSpread({}, groupBy), {}, {
4009
+ fieldName: renames[groupBy.fieldName]
4010
+ })
4011
+ });
4012
+ }
4013
+ // Timeline bins can remain identical while y-axis or group-by values
4014
+ // change, so do not reuse the old series cache after a data rebuild.
4015
+ nextFilter = _objectSpread(_objectSpread({}, nextFilter), {}, {
4016
+ lineChart: undefined
4017
+ });
4018
+ }
4019
+ // Keep existing plots; time plots are rebuilt after filtering below.
4020
+ return filter.type === nextFilter.type || nextFilter.type === FILTER_TYPES.timeRange ? nextFilter : updateFilterPlot(newDatasets, nextFilter, dataId, state.layers);
3727
4021
  }).filter(Boolean);
3728
4022
 
3729
- // reassign GPU channels now that the filter list is settled
3730
- newFilters = newFilters.map(function (filter) {
3731
- return filter.gpu ? assignGpuChannel(setFilterGpuMode(filter, newFilters), newFilters) : filter;
3732
- });
3733
-
3734
- // 3. rebuild the table's filter state (gpuFilter / filterRecord / filteredIndex)
3735
- newTable.filterTable(newFilters, state.layers.filter(function (l) {
3736
- return l.config.dataId === dataId;
3737
- }), {});
3738
-
3739
- // 4. reconcile layers
4023
+ // 3. reconcile layers
3740
4024
  var layersToRemove = [];
3741
4025
  var newLayers = state.layers.map(function (layer) {
3742
4026
  if (layer.config.dataId !== dataId) {
@@ -3750,6 +4034,41 @@ export function updateDatasetUpdater(state, action) {
3750
4034
  return layer; // placeholder, dropped via removeLayerUpdater below
3751
4035
  });
3752
4036
 
4037
+ // Polygon filters reference layers, not fields. Preserve them for schema
4038
+ // edits that keep their target layers, but remove invalid targets before
4039
+ // rebuilding filter records when a required layer column was deleted.
4040
+ var removedLayerIds = new Set(layersToRemove);
4041
+ if (removedLayerIds.size) {
4042
+ newFilters = newFilters.flatMap(function (filter) {
4043
+ var _filter$layerId;
4044
+ if (filter.type !== FILTER_TYPES.polygon || !((_filter$layerId = filter.layerId) !== null && _filter$layerId !== void 0 && _filter$layerId.some(function (id) {
4045
+ return removedLayerIds.has(id);
4046
+ }))) {
4047
+ return [filter];
4048
+ }
4049
+ filter.dataId.forEach(function (id) {
4050
+ return datasetIdsToRefilter.add(id);
4051
+ });
4052
+ var layerId = filter.layerId.filter(function (id) {
4053
+ return !removedLayerIds.has(id);
4054
+ });
4055
+ return layerId.length ? [_objectSpread(_objectSpread({}, filter), {}, {
4056
+ layerId: layerId
4057
+ })] : [];
4058
+ });
4059
+ }
4060
+
4061
+ // Reassign GPU channels now that the filter list is settled.
4062
+ newFilters = newFilters.map(function (filter) {
4063
+ return filter.gpu ? assignGpuChannel(setFilterGpuMode(filter, newFilters), newFilters) : filter;
4064
+ });
4065
+
4066
+ // 4. rebuild the table's filter state using only layers that will survive
4067
+ var survivingLayers = newLayers.filter(function (layer) {
4068
+ return !removedLayerIds.has(layer.id);
4069
+ });
4070
+ var filteredDatasets = applyFiltersToDatasets(Array.from(datasetIdsToRefilter), newDatasets, newFilters, survivingLayers);
4071
+
3753
4072
  // 5. reconcile tooltip fieldsToShow
3754
4073
  var interactionConfig = state.interactionConfig;
3755
4074
  var tooltip = (_interactionConfig2 = interactionConfig) === null || _interactionConfig2 === void 0 ? void 0 : _interactionConfig2.tooltip;
@@ -3771,10 +4090,11 @@ export function updateDatasetUpdater(state, action) {
3771
4090
  });
3772
4091
  }
3773
4092
  var nextState = _objectSpread(_objectSpread({}, state), {}, {
3774
- datasets: newDatasets,
4093
+ datasets: filteredDatasets,
3775
4094
  filters: newFilters,
3776
4095
  layers: newLayers,
3777
- interactionConfig: interactionConfig
4096
+ interactionConfig: interactionConfig,
4097
+ charts: remapChartsForDataset(state.charts, dataId, renames, newFieldsByName)
3778
4098
  });
3779
4099
 
3780
4100
  // 6. drop layers that lost their required columns
@@ -3784,11 +4104,91 @@ export function updateDatasetUpdater(state, action) {
3784
4104
  });
3785
4105
  }, nextState);
3786
4106
 
4107
+ // Filtering and polygon-layer removal can change the rows behind timeline
4108
+ // plots, so rebuild their cached bins/series from the reconciled state.
4109
+ nextState = updateFilterPlotsAfterFiltering(nextState, Array.from(datasetIdsToRefilter));
4110
+
3787
4111
  // 7. recompute layer domains + data for the updated dataset
3788
4112
  nextState = updateAllLayerDomainData(nextState, dataId);
3789
4113
  return nextState;
3790
4114
  }
3791
4115
 
4116
+ /**
4117
+ * Rename a column's stored identity (`field.name`) and every layer, filter,
4118
+ * tooltip, and chart reference that used the old name.
4119
+ */
4120
+ export function renameTableColumnUpdater(state, action) {
4121
+ var dataId = action.dataId,
4122
+ fieldName = action.fieldName,
4123
+ newName = action.newName;
4124
+ var dataset = state.datasets[dataId];
4125
+ if (!dataset || !canMutateDatasetSchema(dataset)) {
4126
+ return state;
4127
+ }
4128
+ var payload = buildRenameColumnData(dataset, fieldName, newName);
4129
+ if (!payload) {
4130
+ return state;
4131
+ }
4132
+ return updateDatasetUpdater(state, {
4133
+ dataId: dataId,
4134
+ data: payload.data,
4135
+ renames: payload.renames
4136
+ });
4137
+ }
4138
+
4139
+ /**
4140
+ * Convert a complete column before committing its new type. A failed value
4141
+ * leaves the table and every reference unchanged.
4142
+ */
4143
+ export function changeTableColumnTypeUpdater(state, action) {
4144
+ var dataId = action.dataId,
4145
+ fieldName = action.fieldName,
4146
+ newType = action.newType;
4147
+ var dataset = state.datasets[dataId];
4148
+ if (!dataset || !canMutateDatasetSchema(dataset)) {
4149
+ return state;
4150
+ }
4151
+ var result = buildChangeColumnTypeData(dataset, fieldName, newType);
4152
+ if (!result) {
4153
+ return state;
4154
+ }
4155
+ if (result.error) {
4156
+ return withTask(state, ACTION_TASK_ADD_NOTIFICATION().map(function () {
4157
+ return addNotification(errorNotification({
4158
+ id: "column-type-".concat(dataId, "-").concat(fieldName),
4159
+ message: "Cannot change \u201C".concat(fieldName, "\u201D to ").concat(newType, ": ").concat(formatColumnTypeConversionError(result.error), ". No values were changed.")
4160
+ }));
4161
+ }));
4162
+ }
4163
+ return updateDatasetUpdater(state, {
4164
+ dataId: dataId,
4165
+ data: result.payload.data,
4166
+ renames: result.payload.renames
4167
+ });
4168
+ }
4169
+
4170
+ /**
4171
+ * Drop a column and the layers, filters, and other references that required it.
4172
+ * The last remaining column is kept.
4173
+ */
4174
+ export function deleteTableColumnUpdater(state, action) {
4175
+ var dataId = action.dataId,
4176
+ fieldName = action.fieldName;
4177
+ var dataset = state.datasets[dataId];
4178
+ if (!dataset || !canMutateDatasetSchema(dataset)) {
4179
+ return state;
4180
+ }
4181
+ var payload = buildDeleteColumnData(dataset, fieldName);
4182
+ if (!payload) {
4183
+ return state;
4184
+ }
4185
+ return updateDatasetUpdater(state, {
4186
+ dataId: dataId,
4187
+ data: payload.data,
4188
+ renames: payload.renames
4189
+ });
4190
+ }
4191
+
3792
4192
  /**
3793
4193
  * When a user clicks on the specific map closing icon
3794
4194
  * the application will close the selected map
@@ -3825,34 +4225,94 @@ export function closeSpecificMapAtIndex(state, action) {
3825
4225
  * @memberof visStateUpdaters
3826
4226
  * @public
3827
4227
  */
4228
+ var nextFileLoadId = 1;
4229
+ function createFileLoadId() {
4230
+ var loadId = nextFileLoadId;
4231
+ nextFileLoadId += 1;
4232
+ return loadId;
4233
+ }
4234
+ function finishFileLoad(onFinish, fileCache, options, loadId) {
4235
+ var action = options ? onFinish(fileCache, options) : onFinish(fileCache);
4236
+ return _objectSpread(_objectSpread({}, action), {}, {
4237
+ loadId: loadId
4238
+ });
4239
+ }
3828
4240
  export var loadFilesUpdater = function loadFilesUpdater(state, action) {
4241
+ var _state$fileLoading$op;
3829
4242
  var files = action.files,
3830
4243
  _action$onFinish = action.onFinish,
3831
- onFinish = _action$onFinish === void 0 ? loadFilesSuccess : _action$onFinish;
4244
+ onFinish = _action$onFinish === void 0 ? loadFilesSuccess : _action$onFinish,
4245
+ options = action.options;
3832
4246
  if (!files.length) {
3833
4247
  return state;
3834
4248
  }
3835
4249
  var companionFiles = Array.from(files);
3836
4250
  var filesToLoad = getFilesToParse(companionFiles);
4251
+
4252
+ // Another drop while a deferred parse is running must join that load.
4253
+ // Replacing `fileLoading` makes the in-flight file finish against the new
4254
+ // cache and drop the files that were already being parsed.
4255
+ if (state.fileLoading && (_state$fileLoading$op = state.fileLoading.options) !== null && _state$fileLoading$op !== void 0 && _state$fileLoading$op.deferAddToMap && options !== null && options !== void 0 && options.deferAddToMap) {
4256
+ return appendDeferredFileLoad(state, {
4257
+ filesToLoad: filesToLoad,
4258
+ companionFiles: companionFiles
4259
+ });
4260
+ }
3837
4261
  if (!filesToLoad.length) {
3838
4262
  return state;
3839
4263
  }
4264
+
4265
+ // A deferred load is another batch for the same Add Data click. Keep files
4266
+ // already staged, and keep their error cards, instead of starting over.
4267
+ var previousErrors = options !== null && options !== void 0 && options.deferAddToMap && state.fileLoadingProgress ? Object.fromEntries(Object.entries(state.fileLoadingProgress).filter(function (_ref43) {
4268
+ var _ref44 = _slicedToArray(_ref43, 2),
4269
+ value = _ref44[1];
4270
+ return value === null || value === void 0 ? void 0 : value.error;
4271
+ })) : {};
3840
4272
  var fileLoadingProgress = filesToLoad.reduce(function (accu, f, i) {
3841
4273
  return merge_(initialFileLoadingProgress(f, i))(accu);
3842
- }, {});
3843
- var fileLoading = {
4274
+ }, previousErrors);
4275
+ var fileLoading = _objectSpread({
4276
+ loadId: createFileLoadId(),
3844
4277
  fileCache: [],
3845
4278
  filesToLoad: filesToLoad,
3846
4279
  companionFiles: companionFiles,
3847
4280
  onFinish: onFinish
3848
- };
3849
- var nextState = merge_({
4281
+ }, options ? {
4282
+ options: options
4283
+ } : {});
4284
+ var nextState = merge_(_objectSpread({
3850
4285
  fileLoadingProgress: fileLoadingProgress,
3851
4286
  fileLoading: fileLoading
3852
- })(state);
4287
+ }, options !== null && options !== void 0 && options.deferAddToMap ? {} : {
4288
+ stagedToAdd: null
4289
+ }))(state);
3853
4290
  return loadNextFileUpdater(nextState);
3854
4291
  };
3855
4292
 
4293
+ /**
4294
+ * Add a drop to the deferred load that is already parsing.
4295
+ * The current file keeps its cache; the new files run after it.
4296
+ */
4297
+ function appendDeferredFileLoad(state, _ref45) {
4298
+ var filesToLoad = _ref45.filesToLoad,
4299
+ companionFiles = _ref45.companionFiles;
4300
+ var loading = state.fileLoading;
4301
+ if (!loading || !filesToLoad.length && !companionFiles.length) {
4302
+ return state;
4303
+ }
4304
+ var fileLoadingProgress = filesToLoad.reduce(function (accu, file, index) {
4305
+ return merge_(initialFileLoadingProgress(file, index))(accu);
4306
+ }, state.fileLoadingProgress);
4307
+ return _objectSpread(_objectSpread({}, state), {}, {
4308
+ fileLoadingProgress: fileLoadingProgress,
4309
+ fileLoading: _objectSpread(_objectSpread({}, loading), {}, {
4310
+ filesToLoad: [].concat(_toConsumableArray(Array.from(loading.filesToLoad)), _toConsumableArray(filesToLoad)),
4311
+ companionFiles: [].concat(_toConsumableArray(loading.companionFiles || []), _toConsumableArray(companionFiles))
4312
+ })
4313
+ });
4314
+ }
4315
+
3856
4316
  /**
3857
4317
  * Sucessfully loaded one file, move on to the next one
3858
4318
  * @memberof visStateUpdaters
@@ -3864,9 +4324,7 @@ export function loadFileStepSuccessUpdater(state, action) {
3864
4324
  }
3865
4325
  var fileName = action.fileName,
3866
4326
  fileCache = action.fileCache;
3867
- var _state$fileLoading = state.fileLoading,
3868
- filesToLoad = _state$fileLoading.filesToLoad,
3869
- onFinish = _state$fileLoading.onFinish;
4327
+ var loadId = state.fileLoading.loadId;
3870
4328
  var stateWithProgress = updateFileLoadingProgressUpdater(state, {
3871
4329
  fileName: fileName,
3872
4330
  progress: {
@@ -3879,8 +4337,11 @@ export function loadFileStepSuccessUpdater(state, action) {
3879
4337
  var stateWithCache = pick_('fileLoading')(merge_({
3880
4338
  fileCache: fileCache
3881
4339
  }))(stateWithProgress);
3882
- return withTask(stateWithCache, DELAY_TASK(200).map(filesToLoad.length ? loadNextFile : function () {
3883
- return onFinish(fileCache);
4340
+
4341
+ // Decide after the pause, and only for this load. A drop during these
4342
+ // 200ms joins the queue; cancel or a newer load makes this continuation stale.
4343
+ return withTask(stateWithCache, DELAY_TASK(200).map(function () {
4344
+ return loadNextFile(loadId);
3884
4345
  }));
3885
4346
  }
3886
4347
 
@@ -3891,11 +4352,22 @@ export function loadFileStepSuccessUpdater(state, action) {
3891
4352
  * @memberof visStateUpdaters
3892
4353
  * @public
3893
4354
  */
3894
- export function loadNextFileUpdater(state) {
3895
- if (!state.fileLoading) {
4355
+ export function loadNextFileUpdater(state, action) {
4356
+ var loadId = action === null || action === void 0 ? void 0 : action.loadId;
4357
+ if (!state.fileLoading || loadId != null && state.fileLoading.loadId !== loadId) {
3896
4358
  return state;
3897
4359
  }
3898
- var filesToLoad = state.fileLoading.filesToLoad;
4360
+ var _state$fileLoading = state.fileLoading,
4361
+ filesToLoad = _state$fileLoading.filesToLoad,
4362
+ onFinish = _state$fileLoading.onFinish,
4363
+ fileCache = _state$fileLoading.fileCache,
4364
+ options = _state$fileLoading.options,
4365
+ currentLoadId = _state$fileLoading.loadId;
4366
+ if (!filesToLoad.length) {
4367
+ return withTask(state, ACTION_TASK().map(function () {
4368
+ return finishFileLoad(onFinish, fileCache, options, currentLoadId);
4369
+ }));
4370
+ }
3899
4371
  var _filesToLoad = _toArray(filesToLoad),
3900
4372
  file = _filesToLoad[0],
3901
4373
  remainingFilesToLoad = _filesToLoad.slice(1);
@@ -3913,36 +4385,140 @@ export function loadNextFileUpdater(state) {
3913
4385
  });
3914
4386
  var loaders = state.loaders,
3915
4387
  loadOptions = state.loadOptions;
3916
- return withTask(stateWithProgress, makeLoadFileTask(file, nextState.fileLoading && nextState.fileLoading.fileCache, loaders, loadOptions, nextState.fileLoading ? nextState.fileLoading.companionFiles : undefined));
4388
+ if (isZipFileName(file.name)) {
4389
+ return withTask(stateWithProgress, EXPAND_ZIP_TASK({
4390
+ file: file,
4391
+ extensions: datasetExtensionsFromLoaders(loaders)
4392
+ }).bimap(function (expansion) {
4393
+ return expandZipArchiveSuccess({
4394
+ loadId: currentLoadId,
4395
+ archiveName: file.name,
4396
+ expansion: expansion
4397
+ });
4398
+ }, function (err) {
4399
+ return loadFilesErr(file.name, err, currentLoadId);
4400
+ }));
4401
+ }
4402
+ return withTask(stateWithProgress, makeLoadFileTask(file, nextState.fileLoading && nextState.fileLoading.fileCache, loaders, loadOptions, nextState.fileLoading ? nextState.fileLoading.companionFiles : undefined, options));
4403
+ }
4404
+ function datasetExtensionsFromLoaders() {
4405
+ var loaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
4406
+ var extensions = [];
4407
+ var seen = new Set();
4408
+ var _iterator4 = _createForOfIteratorHelper(loaders),
4409
+ _step4;
4410
+ try {
4411
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
4412
+ var loader = _step4.value;
4413
+ var _iterator5 = _createForOfIteratorHelper((loader === null || loader === void 0 ? void 0 : loader.extensions) || []),
4414
+ _step5;
4415
+ try {
4416
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
4417
+ var extension = _step5.value;
4418
+ var ext = String(extension).replace(/^\./, '').trim().toLowerCase();
4419
+ if (!ext || ext === 'zip' || seen.has(ext)) {
4420
+ continue;
4421
+ }
4422
+ seen.add(ext);
4423
+ extensions.push(ext);
4424
+ }
4425
+ } catch (err) {
4426
+ _iterator5.e(err);
4427
+ } finally {
4428
+ _iterator5.f();
4429
+ }
4430
+ }
4431
+ } catch (err) {
4432
+ _iterator4.e(err);
4433
+ } finally {
4434
+ _iterator4.f();
4435
+ }
4436
+ return extensions;
4437
+ }
4438
+ function companionFilesForArchive(expansion, existing) {
4439
+ var extracted = expansion.kind === 'shapefile' ? [expansion.shapefile].concat(_toConsumableArray(expansion.companions)) : [].concat(_toConsumableArray(expansion.datasets), _toConsumableArray(expansion.companions));
4440
+ return [].concat(_toConsumableArray(extracted), _toConsumableArray(existing || []));
4441
+ }
4442
+ function withoutFileLoadingProgressEntry(progress, fileName) {
4443
+ if (!progress || !Object.prototype.hasOwnProperty.call(progress, fileName)) {
4444
+ return progress;
4445
+ }
4446
+ var next = _objectSpread({}, progress);
4447
+ delete next[fileName];
4448
+ return next;
4449
+ }
4450
+
4451
+ /**
4452
+ * Apply an unpacked zip. One shapefile keeps the archive name. Any other
4453
+ * mix is queued as one dataset per supported member.
4454
+ */
4455
+ export function expandZipArchiveSuccessUpdater(state, action) {
4456
+ var loading = state.fileLoading;
4457
+ if (!loading || loading.loadId !== action.loadId) {
4458
+ return state;
4459
+ }
4460
+ var archiveName = action.archiveName,
4461
+ expansion = action.expansion;
4462
+ var companionFiles = companionFilesForArchive(expansion, loading.companionFiles);
4463
+ if (expansion.kind === 'shapefile') {
4464
+ var _nextState = pick_('fileLoading')(merge_({
4465
+ companionFiles: companionFiles
4466
+ }))(state);
4467
+ var loaders = state.loaders,
4468
+ loadOptions = state.loadOptions;
4469
+ return withTask(_nextState, makeLoadFileTask(expansion.shapefile, _nextState.fileLoading && _nextState.fileLoading.fileCache, loaders, loadOptions, companionFiles, loading.options, archiveName));
4470
+ }
4471
+ var datasets = expansion.datasets;
4472
+ var filesToLoad = [].concat(_toConsumableArray(datasets), _toConsumableArray(Array.from(loading.filesToLoad)));
4473
+ var fileLoadingProgress = datasets.reduce(function (accu, file, index) {
4474
+ return merge_(initialFileLoadingProgress(file, index))(accu);
4475
+ }, withoutFileLoadingProgressEntry(state.fileLoadingProgress, archiveName));
4476
+ var nextState = _objectSpread(_objectSpread({}, state), {}, {
4477
+ fileLoadingProgress: fileLoadingProgress,
4478
+ fileLoading: _objectSpread(_objectSpread({}, loading), {}, {
4479
+ filesToLoad: filesToLoad,
4480
+ companionFiles: companionFiles
4481
+ })
4482
+ });
4483
+ return loadNextFileUpdater(nextState, {
4484
+ loadId: action.loadId
4485
+ });
3917
4486
  }
3918
4487
  export function makeLoadFileTask(file, fileCache) {
3919
4488
  var loaders = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
3920
4489
  var loadOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
3921
4490
  var companionFiles = arguments.length > 4 ? arguments[4] : undefined;
3922
- return LOAD_FILE_TASK({
4491
+ var addDataOptions = arguments.length > 5 ? arguments[5] : undefined;
4492
+ var fileName = arguments.length > 6 ? arguments[6] : undefined;
4493
+ var displayName = fileName || file.name;
4494
+ return LOAD_FILE_TASK(_objectSpread({
3923
4495
  file: file,
3924
4496
  fileCache: fileCache,
3925
4497
  loaders: loaders,
3926
4498
  loadOptions: loadOptions,
3927
4499
  companionFiles: companionFiles
3928
- }).bimap(
4500
+ }, fileName ? {
4501
+ fileName: fileName
4502
+ } : {})).bimap(
3929
4503
  // prettier ignore
3930
4504
  // success
3931
4505
  function (gen) {
3932
- return nextFileBatch({
4506
+ return nextFileBatch(_objectSpread({
3933
4507
  gen: gen,
3934
- fileName: file.name,
4508
+ fileName: displayName,
3935
4509
  onFinish: function onFinish(result) {
3936
4510
  return processFileContent({
3937
4511
  content: result,
3938
4512
  fileCache: fileCache
3939
4513
  });
3940
4514
  }
3941
- });
4515
+ }, addDataOptions ? {
4516
+ options: addDataOptions
4517
+ } : {}));
3942
4518
  },
3943
4519
  // error
3944
4520
  function (err) {
3945
- return loadFilesErr(file.name, err);
4521
+ return loadFilesErr(displayName, err);
3946
4522
  });
3947
4523
  }
3948
4524
 
@@ -3994,19 +4570,21 @@ export function parseProgress() {
3994
4570
  * @memberof visStateUpdaters
3995
4571
  * @public
3996
4572
  */
3997
- export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref39) {
4573
+ export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref46) {
3998
4574
  var _accumulated$data;
3999
- var _ref39$payload = _ref39.payload,
4000
- gen = _ref39$payload.gen,
4001
- fileName = _ref39$payload.fileName,
4002
- progress = _ref39$payload.progress,
4003
- accumulated = _ref39$payload.accumulated,
4004
- onFinish = _ref39$payload.onFinish;
4575
+ var _ref46$payload = _ref46.payload,
4576
+ gen = _ref46$payload.gen,
4577
+ fileName = _ref46$payload.fileName,
4578
+ progress = _ref46$payload.progress,
4579
+ accumulated = _ref46$payload.accumulated,
4580
+ onFinish = _ref46$payload.onFinish,
4581
+ options = _ref46$payload.options;
4005
4582
  var stateWithProgress = updateFileLoadingProgressUpdater(state, {
4006
4583
  fileName: fileName,
4007
4584
  progress: parseProgress(state.fileLoadingProgress[fileName], progress)
4008
4585
  });
4009
- return withTask(stateWithProgress, [].concat(_toConsumableArray(getApplicationConfig().useArrowProgressiveLoading && fileName.endsWith('arrow') && (accumulated === null || accumulated === void 0 || (_accumulated$data = accumulated.data) === null || _accumulated$data === void 0 ? void 0 : _accumulated$data.length) > 0 ? [
4586
+ var deferAddToMap = Boolean(options === null || options === void 0 ? void 0 : options.deferAddToMap);
4587
+ return withTask(stateWithProgress, [].concat(_toConsumableArray(getApplicationConfig().useArrowProgressiveLoading && !deferAddToMap && fileName.endsWith('arrow') && (accumulated === null || accumulated === void 0 || (_accumulated$data = accumulated.data) === null || _accumulated$data === void 0 ? void 0 : _accumulated$data.length) > 0 ? [
4010
4588
  // Skip compaction while batches are still arriving. The completed
4011
4589
  // file is compacted once in processFileContent.
4012
4590
  PROCESS_FILE_DATA({
@@ -4015,19 +4593,21 @@ export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref39) {
4015
4593
  }),
4016
4594
  fileCache: []
4017
4595
  }).bimap(function (result) {
4018
- return loadFilesSuccess(result);
4596
+ return options ? loadFilesSuccess(result, options) : loadFilesSuccess(result);
4019
4597
  }, function (err) {
4020
4598
  return loadFilesErr(fileName, err);
4021
- })] : []), [UNWRAP_TASK(gen.next()).bimap(function (_ref40) {
4022
- var value = _ref40.value,
4023
- done = _ref40.done;
4024
- return done ? onFinish(accumulated) : nextFileBatch({
4599
+ })] : []), [UNWRAP_TASK(gen.next()).bimap(function (_ref47) {
4600
+ var value = _ref47.value,
4601
+ done = _ref47.done;
4602
+ return done ? onFinish(accumulated) : nextFileBatch(_objectSpread({
4025
4603
  gen: gen,
4026
4604
  fileName: fileName,
4027
4605
  progress: value.progress,
4028
4606
  accumulated: value,
4029
4607
  onFinish: onFinish
4030
- });
4608
+ }, options ? {
4609
+ options: options
4610
+ } : {}));
4031
4611
  }, function (err) {
4032
4612
  return loadFilesErr(fileName, err);
4033
4613
  })]));
@@ -4038,18 +4618,28 @@ export var nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref39) {
4038
4618
  * @memberof visStateUpdaters
4039
4619
  * @public
4040
4620
  */
4041
- export var loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref41) {
4042
- var error = _ref41.error,
4043
- fileName = _ref41.fileName;
4044
- // update ui with error message
4045
- Console.warn(error);
4046
- if (!state.fileLoading) {
4621
+ /**
4622
+ * Drop files waiting on the Add Data button and abort an in-progress modal load.
4623
+ * @memberof visStateUpdaters
4624
+ * @public
4625
+ */
4626
+ export var clearStagedLoadedFilesUpdater = function clearStagedLoadedFilesUpdater(state) {
4627
+ return _objectSpread(_objectSpread({}, state), {}, {
4628
+ fileLoading: false,
4629
+ fileLoadingProgress: {},
4630
+ stagedToAdd: null
4631
+ });
4632
+ };
4633
+ export var loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref48) {
4634
+ var error = _ref48.error,
4635
+ fileName = _ref48.fileName,
4636
+ errorLoadId = _ref48.loadId;
4637
+ if (!state.fileLoading || errorLoadId != null && state.fileLoading.loadId !== errorLoadId) {
4047
4638
  return state;
4048
4639
  }
4049
- var _state$fileLoading2 = state.fileLoading,
4050
- filesToLoad = _state$fileLoading2.filesToLoad,
4051
- onFinish = _state$fileLoading2.onFinish,
4052
- fileCache = _state$fileLoading2.fileCache;
4640
+ // update ui with error message
4641
+ Console.warn(error);
4642
+ var loadId = state.fileLoading.loadId;
4053
4643
  var nextState = updateFileLoadingProgressUpdater(state, {
4054
4644
  fileName: fileName,
4055
4645
  progress: {
@@ -4057,9 +4647,9 @@ export var loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref41) {
4057
4647
  }
4058
4648
  });
4059
4649
 
4060
- // kick off next file or finish
4061
- return withTask(nextState, DELAY_TASK(200).map(filesToLoad.length ? loadNextFile : function () {
4062
- return onFinish(fileCache);
4650
+ // Same pause as a successful file. Re-check this load's queue when it ends.
4651
+ return withTask(nextState, DELAY_TASK(200).map(function () {
4652
+ return loadNextFile(loadId);
4063
4653
  }));
4064
4654
  };
4065
4655
 
@@ -4068,8 +4658,8 @@ export var loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref41) {
4068
4658
  * @memberof visStateUpdaters
4069
4659
  * @public
4070
4660
  */
4071
- export var applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref42) {
4072
- var dataId = _ref42.dataId;
4661
+ export var applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref49) {
4662
+ var dataId = _ref49.dataId;
4073
4663
  // apply cpuFilter
4074
4664
  var dataIds = toArray(dataId);
4075
4665
  return dataIds.reduce(function (accu, id) {
@@ -4083,8 +4673,12 @@ export var applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref42)
4083
4673
  * @public
4084
4674
  */
4085
4675
  export var setMapInfoUpdater = function setMapInfoUpdater(state, action) {
4676
+ var next = _objectSpread(_objectSpread({}, state.mapInfo), action.info);
4086
4677
  return _objectSpread(_objectSpread({}, state), {}, {
4087
- mapInfo: _objectSpread(_objectSpread({}, state.mapInfo), action.info)
4678
+ mapInfo: {
4679
+ title: optionalMapText(next.title),
4680
+ description: optionalMapText(next.description)
4681
+ }
4088
4682
  });
4089
4683
  };
4090
4684
  /**
@@ -4128,9 +4722,9 @@ export function initialFileLoadingProgress(file, index) {
4128
4722
  error: null
4129
4723
  });
4130
4724
  }
4131
- export function updateFileLoadingProgressUpdater(state, _ref44) {
4132
- var fileName = _ref44.fileName,
4133
- progress = _ref44.progress;
4725
+ export function updateFileLoadingProgressUpdater(state, _ref51) {
4726
+ var fileName = _ref51.fileName,
4727
+ progress = _ref51.progress;
4134
4728
  // @ts-expect-error
4135
4729
  return pick_('fileLoadingProgress')(pick_(fileName)(merge_(progress)))(state);
4136
4730
  }
@@ -4222,8 +4816,8 @@ export function updateAnimationDomain(state) {
4222
4816
  * Update the status of the editor
4223
4817
  * @memberof visStateUpdaters
4224
4818
  */
4225
- export var setEditorModeUpdater = function setEditorModeUpdater(state, _ref45) {
4226
- var mode = _ref45.mode;
4819
+ export var setEditorModeUpdater = function setEditorModeUpdater(state, _ref52) {
4820
+ var mode = _ref52.mode;
4227
4821
  var sketchesEnabled = getApplicationConfig().enableDrawOnMapSketches;
4228
4822
  if (!sketchesEnabled && (mode === EDITOR_MODES.DRAW_POINT || mode === EDITOR_MODES.DRAW_LINESTRING)) {
4229
4823
  return state;
@@ -4241,10 +4835,10 @@ export var setEditorModeUpdater = function setEditorModeUpdater(state, _ref45) {
4241
4835
  * Update editor features
4242
4836
  * @memberof visStateUpdaters
4243
4837
  */
4244
- export function setFeaturesUpdater(state, _ref46) {
4838
+ export function setFeaturesUpdater(state, _ref53) {
4245
4839
  var _lastFeature$properti, _lastFeature$properti2;
4246
- var _ref46$features = _ref46.features,
4247
- features = _ref46$features === void 0 ? [] : _ref46$features;
4840
+ var _ref53$features = _ref53.features,
4841
+ features = _ref53$features === void 0 ? [] : _ref53$features;
4248
4842
  var lastFeature = features.length && features[features.length - 1];
4249
4843
  var newState = _objectSpread(_objectSpread({}, state), {}, {
4250
4844
  editor: _objectSpread(_objectSpread({}, state.editor), {}, {
@@ -4317,10 +4911,10 @@ function findEditorFeature(state, feature) {
4317
4911
  * Set user-facing GeoJSON properties on a sketch or polygon-filter feature.
4318
4912
  * @memberof visStateUpdaters
4319
4913
  */
4320
- export function setEditorFeaturePropertiesUpdater(state, _ref47) {
4914
+ export function setEditorFeaturePropertiesUpdater(state, _ref54) {
4321
4915
  var _state$editor$selecte2;
4322
- var feature = _ref47.feature,
4323
- properties = _ref47.properties;
4916
+ var feature = _ref54.feature,
4917
+ properties = _ref54.properties;
4324
4918
  if (!getApplicationConfig().enableDrawOnMapSketches) {
4325
4919
  return state;
4326
4920
  }
@@ -4359,9 +4953,9 @@ export function setEditorFeaturePropertiesUpdater(state, _ref47) {
4359
4953
  * Set the current selected feature
4360
4954
  * @memberof uiStateUpdaters
4361
4955
  */
4362
- export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref48) {
4363
- var feature = _ref48.feature,
4364
- selectionContext = _ref48.selectionContext;
4956
+ export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref55) {
4957
+ var feature = _ref55.feature,
4958
+ selectionContext = _ref55.selectionContext;
4365
4959
  // add bbox for polygon filter to speed up filtering
4366
4960
  var selectedFeature = feature;
4367
4961
  if (feature !== null && feature !== void 0 && feature.properties) {
@@ -4383,8 +4977,8 @@ export var setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state,
4383
4977
  * Delete existing feature from filters
4384
4978
  * @memberof visStateUpdaters
4385
4979
  */
4386
- export function deleteFeatureUpdater(state, _ref49) {
4387
- var feature = _ref49.feature;
4980
+ export function deleteFeatureUpdater(state, _ref56) {
4981
+ var feature = _ref56.feature;
4388
4982
  if (!feature) {
4389
4983
  return state;
4390
4984
  }
@@ -4449,8 +5043,8 @@ export function setPolygonFilterLayerUpdater(state, payload) {
4449
5043
  });
4450
5044
  }
4451
5045
  var filter = state.filters[filterIdx];
4452
- var _filter$layerId = filter.layerId,
4453
- layerId = _filter$layerId === void 0 ? [] : _filter$layerId;
5046
+ var _filter$layerId2 = filter.layerId,
5047
+ layerId = _filter$layerId2 === void 0 ? [] : _filter$layerId2;
4454
5048
  var isLayerIncluded = layerId.includes(layer.id);
4455
5049
  newLayerId = isLayerIncluded ?
4456
5050
  // if layer is included, remove it
@@ -4529,10 +5123,10 @@ export function setPolygonFilterAllLayersUpdater(state, payload) {
4529
5123
  * @memberof visStateUpdaters
4530
5124
  * @public
4531
5125
  */
4532
- export function sortTableColumnUpdater(state, _ref50) {
4533
- var dataId = _ref50.dataId,
4534
- column = _ref50.column,
4535
- mode = _ref50.mode;
5126
+ export function sortTableColumnUpdater(state, _ref57) {
5127
+ var dataId = _ref57.dataId,
5128
+ column = _ref57.column,
5129
+ mode = _ref57.mode;
4536
5130
  var dataset = state.datasets[dataId];
4537
5131
  if (!dataset) {
4538
5132
  return state;
@@ -4553,9 +5147,9 @@ export function sortTableColumnUpdater(state, _ref50) {
4553
5147
  * @memberof visStateUpdaters
4554
5148
  * @public
4555
5149
  */
4556
- export function pinTableColumnUpdater(state, _ref51) {
4557
- var dataId = _ref51.dataId,
4558
- column = _ref51.column;
5150
+ export function pinTableColumnUpdater(state, _ref58) {
5151
+ var dataId = _ref58.dataId,
5152
+ column = _ref58.column;
4559
5153
  var dataset = state.datasets[dataId];
4560
5154
  if (!dataset) {
4561
5155
  return state;
@@ -4564,14 +5158,41 @@ export function pinTableColumnUpdater(state, _ref51) {
4564
5158
  return set(['datasets', dataId], newDataset, state);
4565
5159
  }
4566
5160
 
5161
+ /**
5162
+ * @memberof visStateUpdaters
5163
+ * @public
5164
+ */
5165
+ export function toggleTableColumnHiddenUpdater(state, _ref59) {
5166
+ var dataId = _ref59.dataId,
5167
+ column = _ref59.column;
5168
+ var dataset = state.datasets[dataId];
5169
+ if (!dataset) {
5170
+ return state;
5171
+ }
5172
+ return set(['datasets', dataId], toggleHiddenTableColumn(dataset, column), state);
5173
+ }
5174
+
5175
+ /**
5176
+ * @memberof visStateUpdaters
5177
+ * @public
5178
+ */
5179
+ export function showAllTableColumnsUpdater(state, _ref60) {
5180
+ var dataId = _ref60.dataId;
5181
+ var dataset = state.datasets[dataId];
5182
+ if (!dataset) {
5183
+ return state;
5184
+ }
5185
+ return set(['datasets', dataId], showAllTableColumns(dataset), state);
5186
+ }
5187
+
4567
5188
  /**
4568
5189
  * Copy column content as strings
4569
5190
  * @memberof visStateUpdaters
4570
5191
  * @public
4571
5192
  */
4572
- export function copyTableColumnUpdater(state, _ref52) {
4573
- var dataId = _ref52.dataId,
4574
- column = _ref52.column;
5193
+ export function copyTableColumnUpdater(state, _ref61) {
5194
+ var dataId = _ref61.dataId,
5195
+ column = _ref61.column;
4575
5196
  var dataset = state.datasets[dataId];
4576
5197
  if (!dataset) {
4577
5198
  return state;
@@ -4595,9 +5216,9 @@ export function copyTableColumnUpdater(state, _ref52) {
4595
5216
  * @memberof visStateUpdaters
4596
5217
  * @public
4597
5218
  */
4598
- export function setColumnDisplayFormatUpdater(state, _ref53) {
4599
- var dataId = _ref53.dataId,
4600
- formats = _ref53.formats;
5219
+ export function setColumnDisplayFormatUpdater(state, _ref62) {
5220
+ var dataId = _ref62.dataId,
5221
+ formats = _ref62.formats;
4601
5222
  var dataset = state.datasets[dataId];
4602
5223
  if (!dataset) {
4603
5224
  return state;
@@ -4619,18 +5240,59 @@ export function setColumnDisplayFormatUpdater(state, _ref53) {
4619
5240
  fields: newFields
4620
5241
  });
4621
5242
  var newState = pick_('datasets')(merge_(_defineProperty({}, dataId, newDataset)))(state);
5243
+ var textLabelLayerIndexes = [];
4622
5244
 
4623
- // update colorField displayFormat
5245
+ // Layer configs retain their own field objects, so keep those copies in sync
5246
+ // with the display format stored on the dataset field.
4624
5247
  newState = _objectSpread(_objectSpread({}, newState), {}, {
4625
- layers: newState.layers.map(function (layer) {
5248
+ layers: newState.layers.map(function (layer, layerIndex) {
4626
5249
  var _layer$config2;
4627
- return (_layer$config2 = layer.config) !== null && _layer$config2 !== void 0 && (_layer$config2 = _layer$config2.colorField) !== null && _layer$config2 !== void 0 && _layer$config2.name && layer.config.colorField.name in formats ? layer.updateLayerConfig({
4628
- colorField: _objectSpread(_objectSpread({}, layer.config.colorField), {}, {
4629
- displayFormat: formats[layer.config.colorField.name]
4630
- })
4631
- }) : layer;
5250
+ // Column names are not unique across datasets. Only update layers that
5251
+ // belong to the dataset targeted by this action.
5252
+ if (layer.config.dataId !== dataId) {
5253
+ return layer;
5254
+ }
5255
+ var colorField = (_layer$config2 = layer.config) === null || _layer$config2 === void 0 ? void 0 : _layer$config2.colorField;
5256
+ var updatedColorField = colorField !== null && colorField !== void 0 && colorField.name && colorField.name in formats ? _objectSpread(_objectSpread({}, colorField), {}, {
5257
+ displayFormat: formats[colorField.name]
5258
+ }) : null;
5259
+ // Text labels also keep field copies instead of reading dataset.fields at render time.
5260
+ var textLabel = layer.config.textLabel.map(function (label) {
5261
+ var field = label.field;
5262
+ return field !== null && field !== void 0 && field.name && field.name in formats ? _objectSpread(_objectSpread({}, label), {}, {
5263
+ field: _objectSpread(_objectSpread({}, field), {}, {
5264
+ displayFormat: formats[field.name]
5265
+ })
5266
+ }) : label;
5267
+ });
5268
+ var updateTextLabel = textLabel.some(function (label, index) {
5269
+ return label !== layer.config.textLabel[index];
5270
+ });
5271
+ if (updateTextLabel) {
5272
+ textLabelLayerIndexes.push(layerIndex);
5273
+ }
5274
+ return updatedColorField || updateTextLabel ? layer.updateLayerConfig(_objectSpread(_objectSpread({}, updatedColorField ? {
5275
+ colorField: updatedColorField
5276
+ } : {}), updateTextLabel ? {
5277
+ textLabel: textLabel
5278
+ } : {})) : layer;
4632
5279
  })
4633
5280
  });
5281
+ if (textLabelLayerIndexes.length) {
5282
+ // Label accessors and character sets are cached in layerData. Rebuild them
5283
+ // immediately so the new format appears without removing and re-adding the label field.
5284
+ var layers = newState.layers.slice();
5285
+ var layerData = newState.layerData.slice();
5286
+ textLabelLayerIndexes.forEach(function (layerIndex) {
5287
+ var result = calculateLayerData(layers[layerIndex], newState, layerData[layerIndex]);
5288
+ layers[layerIndex] = result.layer;
5289
+ layerData[layerIndex] = result.layerData;
5290
+ });
5291
+ newState = _objectSpread(_objectSpread({}, newState), {}, {
5292
+ layers: layers,
5293
+ layerData: layerData
5294
+ });
5295
+ }
4634
5296
  return newState;
4635
5297
  }
4636
5298
  function getMappedValue(filterProps) {
@@ -4648,12 +5310,12 @@ function requestDatasetColumnStatistics(_x4) {
4648
5310
  return _requestDatasetColumnStatistics.apply(this, arguments);
4649
5311
  }
4650
5312
  function _requestDatasetColumnStatistics() {
4651
- _requestDatasetColumnStatistics = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(_ref54) {
5313
+ _requestDatasetColumnStatistics = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(_ref63) {
4652
5314
  var dataset, field, filterProps, mappedValue, values, result;
4653
5315
  return _regeneratorRuntime.wrap(function _callee4$(_context4) {
4654
5316
  while (1) switch (_context4.prev = _context4.next) {
4655
5317
  case 0:
4656
- dataset = _ref54.dataset, field = _ref54.field;
5318
+ dataset = _ref63.dataset, field = _ref63.field;
4657
5319
  _context4.next = 3;
4658
5320
  return yieldForPaint();
4659
5321
  case 3:
@@ -4686,9 +5348,9 @@ var LOAD_COLUMN_STATS_TASK = Task.fromPromise(requestDatasetColumnStatistics, 'L
4686
5348
  * @memberof visStateUpdaters
4687
5349
  * @public
4688
5350
  */
4689
- export function loadColumnStatsUpdater(state, _ref55) {
4690
- var dataId = _ref55.dataId,
4691
- fieldName = _ref55.fieldName;
5351
+ export function loadColumnStatsUpdater(state, _ref64) {
5352
+ var dataId = _ref64.dataId,
5353
+ fieldName = _ref64.fieldName;
4692
5354
  var fieldNamesToLoad = toArray(fieldName);
4693
5355
  var dataset = state.datasets[dataId];
4694
5356
  var fieldsToLoad = dataset === null || dataset === void 0 ? void 0 : dataset.fields.filter(function (f) {
@@ -4709,12 +5371,16 @@ export function loadColumnStatsUpdater(state, _ref55) {
4709
5371
  return LOAD_COLUMN_STATS_TASK({
4710
5372
  dataset: newDataset,
4711
5373
  field: f
4712
- }).bimap(function (_ref56) {
4713
- var result = _ref56.result,
4714
- filterProps = _ref56.filterProps;
4715
- return loadColumnStatsSuccess(newDataset.id, f.name, result, filterProps);
5374
+ }).bimap(function (_ref65) {
5375
+ var result = _ref65.result,
5376
+ filterProps = _ref65.filterProps;
5377
+ return loadColumnStatsSuccess(newDataset.id, f.name, result, filterProps, {
5378
+ fieldType: f.type
5379
+ });
4716
5380
  }, function (error) {
4717
- return loadColumnStatsError(newDataset.id, f.name, error);
5381
+ return loadColumnStatsError(newDataset.id, f.name, error, {
5382
+ fieldType: f.type
5383
+ });
4718
5384
  });
4719
5385
  });
4720
5386
  var nextState = pick_('datasets')(merge_(_defineProperty({}, dataId, newDataset)))(state);
@@ -4726,16 +5392,17 @@ export function loadColumnStatsUpdater(state, _ref55) {
4726
5392
  * @memberof visStateUpdaters
4727
5393
  * @public
4728
5394
  */
4729
- export function loadColumnStatsSuccessUpdater(state, _ref57) {
4730
- var result = _ref57.result,
4731
- filterProps = _ref57.filterProps,
4732
- dataId = _ref57.dataId,
4733
- fieldName = _ref57.fieldName;
5395
+ export function loadColumnStatsSuccessUpdater(state, _ref66) {
5396
+ var result = _ref66.result,
5397
+ filterProps = _ref66.filterProps,
5398
+ dataId = _ref66.dataId,
5399
+ fieldName = _ref66.fieldName,
5400
+ fieldType = _ref66.fieldType;
4734
5401
  var dataset = state.datasets[dataId];
4735
5402
  var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
4736
5403
  return f.name === fieldName;
4737
5404
  });
4738
- if (!dataset || !field) {
5405
+ if (!dataset || !field || fieldType !== undefined && field.type !== fieldType) {
4739
5406
  return state;
4740
5407
  }
4741
5408
  var newFilterProps = _objectSpread(_objectSpread({}, filterProps), {}, {
@@ -4758,18 +5425,19 @@ export function loadColumnStatsSuccessUpdater(state, _ref57) {
4758
5425
  * @memberof visStateUpdaters
4759
5426
  * @public
4760
5427
  */
4761
- export function loadColumnStatsErrorUpdater(state, _ref58) {
4762
- var error = _ref58.error,
4763
- dataId = _ref58.dataId,
4764
- fieldName = _ref58.fieldName;
4765
- Console.error(error);
5428
+ export function loadColumnStatsErrorUpdater(state, _ref67) {
5429
+ var error = _ref67.error,
5430
+ dataId = _ref67.dataId,
5431
+ fieldName = _ref67.fieldName,
5432
+ fieldType = _ref67.fieldType;
4766
5433
  var dataset = state.datasets[dataId];
4767
5434
  var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
4768
5435
  return f.name === fieldName;
4769
5436
  });
4770
- if (!dataset || !field) {
5437
+ if (!dataset || !field || fieldType !== undefined && field.type !== fieldType) {
4771
5438
  return state;
4772
5439
  }
5440
+ Console.error(error);
4773
5441
  var newFields = dataset.fields.map(function (f) {
4774
5442
  return f.name === fieldName ? _objectSpread(_objectSpread({}, f), {}, {
4775
5443
  isLoadingStats: false
@@ -4845,10 +5513,11 @@ _action) {
4845
5513
 
4846
5514
  /**
4847
5515
  * Copy in-memory rows (or loaded vector-tile features) inside the selected
4848
- * Draw on Map polygon into a new dataset.
5516
+ * Draw on Map polygon into a new dataset. Raster tiles download a PNG clip and a
5517
+ * GeoJSON sidecar (bbox rectangle + stats) instead of creating a dataset.
4849
5518
  */
4850
- export function extractDataFromFeatureUpdater(state, _ref59) {
4851
- var layerId = _ref59.layerId;
5519
+ export function extractDataFromFeatureUpdater(state, _ref68) {
5520
+ var layerId = _ref68.layerId;
4852
5521
  var feature = state.editor.selectedFeature;
4853
5522
  var layer = state.layers.find(function (l) {
4854
5523
  return l.id === layerId;
@@ -4858,10 +5527,11 @@ export function extractDataFromFeatureUpdater(state, _ref59) {
4858
5527
  if (!layer || !dataset || !dataId) {
4859
5528
  return state;
4860
5529
  }
5530
+ var isTiledExtract = isVectorTileExtractLayer(layer) || isRasterTileExtractLayer(layer);
4861
5531
 
4862
5532
  // GPU range/time filters are not reflected in filteredIndex; evaluate them on CPU
4863
5533
  // the same way export data does, then clip the result to the drawing.
4864
- if (!isVectorTileExtractLayer(layer)) {
5534
+ if (!isTiledExtract) {
4865
5535
  state = filterDatasetCPU(state, dataId);
4866
5536
  dataset = state.datasets[dataId];
4867
5537
  if (!dataset) {
@@ -4890,11 +5560,32 @@ export function extractDataFromFeatureUpdater(state, _ref59) {
4890
5560
  if (!extracted.rowCount) {
4891
5561
  return withTask(state, ACTION_TASK_ADD_NOTIFICATION().map(function () {
4892
5562
  return addNotification(errorNotification({
4893
- message: isVectorTileExtractLayer(layer) ? 'No loaded vector tile features found inside the selected drawing' : 'No rows found inside the selected drawing',
5563
+ message: isRasterTileExtractLayer(layer) ? 'No loaded raster pixels found inside the selected drawing' : isVectorTileExtractLayer(layer) ? 'No loaded vector tile features found inside the selected drawing' : 'No rows found inside the selected drawing',
4894
5564
  id: 'extract-data-from-feature-empty'
4895
5565
  }));
4896
5566
  }));
4897
5567
  }
5568
+ if (isRasterTileExtractLayer(layer)) {
5569
+ var polygon = feature;
5570
+ var download = typeof layer.downloadClip === 'function' ? Promise.resolve(layer.downloadClip(polygon)) : Promise.resolve({
5571
+ png: false,
5572
+ json: false
5573
+ });
5574
+ return withTask(state, UNWRAP_TASK(download).bimap(function (result) {
5575
+ return addNotification(result !== null && result !== void 0 && result.png ? successNotification({
5576
+ message: 'Downloaded raster clip image and stats file',
5577
+ id: 'extract-raster-clip'
5578
+ }) : errorNotification({
5579
+ message: 'Failed to download raster clip image',
5580
+ id: 'extract-raster-clip'
5581
+ }));
5582
+ }, function (err) {
5583
+ return addNotification(errorNotification({
5584
+ message: "Failed to download raster clip: ".concat(err instanceof Error ? err.message : String(err)),
5585
+ id: 'extract-raster-clip'
5586
+ }));
5587
+ }));
5588
+ }
4898
5589
  var data;
4899
5590
  try {
4900
5591
  data = extracted.kind === 'geojson' ? processGeojson({
@@ -4928,9 +5619,9 @@ export function extractDataFromFeatureUpdater(state, _ref59) {
4928
5619
  }
4929
5620
  });
4930
5621
  }
4931
- export function setFilterAnimationTimeConfigUpdater(state, _ref60) {
4932
- var idx = _ref60.idx,
4933
- config = _ref60.config;
5622
+ export function setFilterAnimationTimeConfigUpdater(state, _ref69) {
5623
+ var idx = _ref69.idx,
5624
+ config = _ref69.config;
4934
5625
  var oldFilter = state.filters[idx];
4935
5626
  if (!oldFilter) {
4936
5627
  Console.error("filters.".concat(idx, " is undefined"));
@@ -4960,8 +5651,8 @@ function checkTimeConfigArgs(config) {
4960
5651
  /**
4961
5652
  * Update editor
4962
5653
  */
4963
- export function setLayerAnimationTimeConfigUpdater(state, _ref61) {
4964
- var config = _ref61.config;
5654
+ export function setLayerAnimationTimeConfigUpdater(state, _ref70) {
5655
+ var config = _ref70.config;
4965
5656
  if (!config) {
4966
5657
  return state;
4967
5658
  }
@@ -5159,8 +5850,8 @@ export function setTimeFilterTimelineModeUpdater(state, action) {
5159
5850
  * @returns nextState
5160
5851
  * @public
5161
5852
  */
5162
- export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref62) {
5163
- var change = _ref62.payload.change;
5853
+ export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref71) {
5854
+ var change = _ref71.payload.change;
5164
5855
  var loadingIndicatorValue = state.loadingIndicatorValue;
5165
5856
  if (!loadingIndicatorValue) {
5166
5857
  loadingIndicatorValue = 0;
@@ -5168,8 +5859,9 @@ export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(stat
5168
5859
  var nextValue = Math.max(loadingIndicatorValue + change, 0);
5169
5860
  return _objectSpread(_objectSpread({}, state), {}, {
5170
5861
  loadingIndicatorValue: nextValue
5171
- }, nextValue === 0 && Object.keys(state.loadingProgress || {}).length ? {
5172
- loadingProgress: {}
5862
+ }, nextValue === 0 && (Object.keys(state.loadingProgress || {}).length || Object.keys(state.loadingProcessing || {}).length) ? {
5863
+ loadingProgress: {},
5864
+ loadingProcessing: {}
5173
5865
  } : {});
5174
5866
  };
5175
5867
 
@@ -5178,20 +5870,24 @@ export var setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(stat
5178
5870
  * @memberof visStateUpdaters
5179
5871
  * @public
5180
5872
  */
5181
- export function setLoadingProgressUpdater(state, _ref63) {
5182
- var _state$loadingProgres;
5183
- var id = _ref63.id,
5184
- percent = _ref63.percent;
5873
+ export function setLoadingProgressUpdater(state, _ref72) {
5874
+ var _state$loadingProgres, _state$loadingProcess;
5875
+ var id = _ref72.id,
5876
+ percent = _ref72.percent,
5877
+ phase = _ref72.phase;
5185
5878
  if ((state.loadingIndicatorValue || 0) <= 0) {
5186
5879
  return state;
5187
5880
  }
5188
5881
  var nextPercent = Number.isFinite(percent) ? Math.max(0, Math.min(100, Math.round(percent))) : 0;
5189
- if (((_state$loadingProgres = state.loadingProgress) === null || _state$loadingProgres === void 0 ? void 0 : _state$loadingProgres[id]) === nextPercent) {
5882
+ var processing = phase === 'processing';
5883
+ if (((_state$loadingProgres = state.loadingProgress) === null || _state$loadingProgres === void 0 ? void 0 : _state$loadingProgres[id]) === nextPercent && Boolean((_state$loadingProcess = state.loadingProcessing) === null || _state$loadingProcess === void 0 ? void 0 : _state$loadingProcess[id]) === processing) {
5190
5884
  return state;
5191
5885
  }
5192
5886
  return _objectSpread(_objectSpread({}, state), {}, {
5193
5887
  loadingProgress: _objectSpread(_objectSpread({}, state.loadingProgress), {}, _defineProperty({}, id, nextPercent))
5194
- });
5888
+ }, processing ? {
5889
+ loadingProcessing: _objectSpread(_objectSpread({}, state.loadingProcessing), {}, _defineProperty({}, id, true))
5890
+ } : {});
5195
5891
  }
5196
5892
  function adjustAnimationConfigWithFilter(state, filterIdx) {
5197
5893
  var filter = state.filters[filterIdx];
@@ -5244,8 +5940,9 @@ function adjustTimeFilterInterval(state, filter) {
5244
5940
  interval: interval,
5245
5941
  timeFormat: timeFormat
5246
5942
  });
5247
- var newFilter = updateTimeFilterPlotType(filter, updatedPlotType, state.datasets);
5248
- return adjustValueToAnimationWindow(state, newFilter);
5943
+ var plotBaseIndexByDataId = getPlotBaseIndexByDataId(state.datasets, filter, state.layers);
5944
+ var newFilter = updateTimeFilterPlotType(filter, updatedPlotType, state.datasets, undefined, plotBaseIndexByDataId);
5945
+ return adjustValueToAnimationWindow(state, newFilter, plotBaseIndexByDataId);
5249
5946
  }
5250
5947
 
5251
5948
  // Find dataId from a saved visState property:
@@ -5295,22 +5992,19 @@ function defaultReplaceParentDatasetIds(value, dataId, dataIdToReplace) {
5295
5992
  function findChildDatasetIds(value) {
5296
5993
  var _value$newDataset;
5297
5994
  if (Array.isArray(value)) {
5298
- // for layers, filters, call defaultReplaceParentDatasetIds on each item in array
5299
5995
  var childDataIds = value.map(findChildDatasetIds).filter(function (d) {
5300
5996
  return d;
5301
5997
  });
5302
5998
  return childDataIds.length ? childDataIds : null;
5303
5999
  }
5304
-
5305
- // child data id usually stores in the derived dataset info
5306
6000
  return (value === null || value === void 0 || (_value$newDataset = value.newDataset) === null || _value$newDataset === void 0 ? void 0 : _value$newDataset.info.id) || null;
5307
6001
  }
5308
6002
 
5309
6003
  // moved unmerged layers, filters, interactions
5310
- function moveValueToBeMerged(state, propValues, _ref65) {
5311
- var prop = _ref65.prop,
5312
- toMergeProp = _ref65.toMergeProp,
5313
- saveUnmerged = _ref65.saveUnmerged;
6004
+ function moveValueToBeMerged(state, propValues, _ref74) {
6005
+ var prop = _ref74.prop,
6006
+ toMergeProp = _ref74.toMergeProp,
6007
+ saveUnmerged = _ref74.saveUnmerged;
5314
6008
  // remove prop value from state
5315
6009
  // TODO: should we add remove updater to merger as well?
5316
6010
  if (!propValues) {
@@ -5339,23 +6033,33 @@ function moveValueToBeMerged(state, propValues, _ref65) {
5339
6033
  return _objectSpread(_objectSpread({}, stateRemoved), toBeMerged);
5340
6034
  }
5341
6035
  function replaceDatasetAndDeps(state, dataId, dataIdToUse) {
6036
+ var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
6037
+ // The same id means the new table occupies the old slot, so the previous rows have to go.
6038
+ var deleteOriginalDataset = options.deleteOriginalDataset !== false || dataId === dataIdToUse;
5342
6039
  return compose_([apply_(replaceDatasetDepsInState, {
5343
6040
  dataId: dataId,
5344
6041
  dataIdToUse: dataIdToUse
5345
- }), apply_(removeDatasetUpdater, {
6042
+ }), if_(deleteOriginalDataset, apply_(removeDatasetUpdater, {
5346
6043
  dataId: dataId
5347
- })])(state);
6044
+ }))])(state);
5348
6045
  }
5349
6046
  export function prepareStateForDatasetReplace(state, dataId, dataIdToUse) {
5350
6047
  var _nextState$layerToBeM;
6048
+ var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
5351
6049
  var serializedState = serializeVisState(state, state.schema);
5352
- var nextState = replaceDatasetAndDeps(state, dataId, dataIdToUse);
6050
+ var deleteOriginalDataset = options.deleteOriginalDataset !== false || dataId === dataIdToUse;
6051
+ var nextState = replaceDatasetAndDeps(state, dataId, dataIdToUse, {
6052
+ deleteOriginalDataset: deleteOriginalDataset
6053
+ });
5353
6054
  // make a copy of layerOrder, because layer id will be removed from it by calling removeLayerUpdater
5354
6055
  var preserveLayerOrder = _toConsumableArray(state.layerOrder);
5355
6056
 
5356
- // preserve dataset order
5357
- nextState.preserveDatasetOrder = Object.keys(state.datasets).map(function (d) {
5358
- return d === dataId ? dataIdToUse : d;
6057
+ // When the original table stays, the replacement takes its place and the original follows it.
6058
+ nextState.preserveDatasetOrder = Object.keys(state.datasets).flatMap(function (d) {
6059
+ if (d !== dataId) {
6060
+ return [d];
6061
+ }
6062
+ return deleteOriginalDataset ? [dataIdToUse] : [dataIdToUse, d];
5359
6063
  });
5360
6064
 
5361
6065
  // preserveLayerOrder
@@ -5402,17 +6106,17 @@ export function preservedOrderWithParked() {
5402
6106
  });
5403
6107
  return [].concat(_toConsumableArray(ordered), _toConsumableArray(rest));
5404
6108
  }
5405
- export function replaceDatasetDepsInState(state, _ref66) {
5406
- var dataId = _ref66.dataId,
5407
- dataIdToUse = _ref66.dataIdToUse;
6109
+ export function replaceDatasetDepsInState(state, _ref75) {
6110
+ var dataId = _ref75.dataId,
6111
+ dataIdToUse = _ref75.dataIdToUse;
5408
6112
  var serializedState = serializeVisState(state, state.schema);
5409
- var nextState = state.mergers.reduce(function (accuState, _ref67) {
5410
- var prop = _ref67.prop,
5411
- toMergeProp = _ref67.toMergeProp,
5412
- replaceParentDatasetIds = _ref67.replaceParentDatasetIds,
5413
- getChildDatasetIds = _ref67.getChildDatasetIds,
5414
- saveUnmerged = _ref67.saveUnmerged,
5415
- preserveOrder = _ref67.preserveOrder;
6113
+ var nextState = state.mergers.reduce(function (accuState, _ref76) {
6114
+ var prop = _ref76.prop,
6115
+ toMergeProp = _ref76.toMergeProp,
6116
+ replaceParentDatasetIds = _ref76.replaceParentDatasetIds,
6117
+ getChildDatasetIds = _ref76.getChildDatasetIds,
6118
+ saveUnmerged = _ref76.saveUnmerged,
6119
+ preserveOrder = _ref76.preserveOrder;
5416
6120
  // get dataset ids that are depends on this dataset
5417
6121
  var props = toArray(prop);
5418
6122
  var toMergeProps = toArray(toMergeProp);
@@ -5452,11 +6156,11 @@ export function replaceDatasetDepsInState(state, _ref66) {
5452
6156
  }, state);
5453
6157
  return nextState;
5454
6158
  }
5455
- function replacePropValueInState(state, replacedItem, _ref68) {
5456
- var prop = _ref68.prop,
5457
- toMergeProp = _ref68.toMergeProp,
5458
- getChildDatasetIds = _ref68.getChildDatasetIds,
5459
- saveUnmerged = _ref68.saveUnmerged;
6159
+ function replacePropValueInState(state, replacedItem, _ref77) {
6160
+ var prop = _ref77.prop,
6161
+ toMergeProp = _ref77.toMergeProp,
6162
+ getChildDatasetIds = _ref77.getChildDatasetIds,
6163
+ saveUnmerged = _ref77.saveUnmerged;
5460
6164
  // prop is depends on the dataset to be replaced
5461
6165
  // remove prop from state, and move it to toBeMerged
5462
6166
  var nextState = moveValueToBeMerged(state, replacedItem, {
@@ -5474,4 +6178,57 @@ function replacePropValueInState(state, replacedItem, _ref68) {
5474
6178
  }
5475
6179
  return nextState;
5476
6180
  }
5477
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYm94IiwiY29weSIsImRlZXBtZXJnZSIsImNvbnNvbGUiLCJDb25zb2xlIiwiY2xvbmVEZWVwIiwiZ2V0IiwiaXNFcXVhbCIsInBpY2siLCJ1bmlxIiwieG9yIiwiVGFzayIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsIndpdGhUYXNrIiwiREVMQVlfVEFTSyIsIkFDVElPTl9UQVNLIiwiTE9BRF9GSUxFX1RBU0siLCJQUk9DRVNTX0ZJTEVfREFUQSIsIlVOV1JBUF9UQVNLIiwiYWRkTm90aWZpY2F0aW9uIiwiYXBwbHlMYXllckNvbmZpZyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJsYXllclR5cGVDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJsb2FkRmlsZXNFcnIiLCJsb2FkRmlsZXNTdWNjZXNzIiwibG9hZE5leHRGaWxlIiwibmV4dEZpbGVCYXRjaCIsInNldEZpbHRlciIsInByb2Nlc3NGaWxlQ29udGVudCIsImZpdEJvdW5kcyIsImZpdE1hcEJvdW5kcyIsInRvZ2dsZUxheWVyRm9yTWFwIiwiYXBwbHlGaWx0ZXJDb25maWciLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzIiwibG9hZENvbHVtblN0YXRzRXJyb3IiLCJyZWZyZXNoRGF0YXNldFN1Y2Nlc3MiLCJyZWZyZXNoRGF0YXNldEVycm9yIiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsInNldExvYWRpbmdQcm9ncmVzcyIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwiYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCIsInNuYXBUb01hcmtzIiwiYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwiYXJyYXlJbnNlcnQiLCJjb21iaW5lU3BsaXRNYXBzQnlJbmRleCIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4iLCJlcnJvck5vdGlmaWNhdGlvbiIsImVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbiIsImV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSIsImlzVmVjdG9yVGlsZUV4dHJhY3RMYXllciIsIm1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzIiwidG9Ta2V0Y2hGZWF0dXJlIiwiZmVhdHVyZVRvRmlsdGVyVmFsdWUiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwiZ2VuZXJhdGVQb2x5Z29uRmlsdGVyIiwiZ2V0RGVmYXVsdEZpbHRlciIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyIiwiaXNJblJhbmdlIiwiaXNPYmplY3QiLCJpc1BsYWluT2JqZWN0IiwiaXNSZ2JDb2xvciIsInBhcnNlRmllbGRWYWx1ZSIsInJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyIsInNldCIsInVwZGF0ZUZpbHRlclBsb3QiLCJyZW1vdmVGaWx0ZXJQbG90IiwiaXNMYXllckFuaW1hdGFibGUiLCJpc1NpZGVGaWx0ZXIiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzIiwiZ2VuZXJhdGVIYXNoSWQiLCJ0b0FycmF5IiwiYXJyYXlNb3ZlIiwiQU5JTUFUSU9OX1dJTkRPVyIsIkJBU0VfU1BFRUQiLCJDT01QQVJFX1RZUEVTIiwiREVGQVVMVF9URVhUX0xBQkVMIiwiRURJVE9SX01PREVTIiwiRklMVEVSX1RZUEVTIiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJMQVlFUl9UWVBFUyIsIkZQUyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJQTE9UX1RZUEVTIiwiU09SVF9PUkRFUiIsIlNZTkNfVElNRUxJTkVfTU9ERVMiLCJDSEFOTkVMX1NDQUxFUyIsIlNDQUxFX1RZUEVTIiwiSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQiLCJJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUiLCJJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRIIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hUIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUiIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTiIsIkFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UIiwidGV4dFBsYWNlbWVudEZyb21BbmdsZSIsIkFubm90YXRpb25LaW5kIiwiRGF0YXNldFR5cGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJnZXRSZW1vdGVTb3VyY2VGb3JtYXQiLCJMQVlFUl9JRF9MRU5HVEgiLCJMYXllciIsIkxheWVyQ2xhc3NlcyIsImFwcGx5XyIsImNvbXBvc2VfIiwiZmlsdGVyT3V0QnlJZCIsIm1lcmdlXyIsInBheWxvYWRfIiwicGlja18iLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInN3YXBfIiwiaXNWYWxpZE1lcmdlciIsIm1lcmdlU3RhdGVGcm9tTWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwiaXNTYXZlZExheWVyQ29uZmlnVjEiLCJwYXJzZUxheWVyQ29uZmlnIiwic2VyaWFsaXplRmlsdGVyIiwic2VyaWFsaXplTGF5ZXIiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIktlcGxlckdMU2NoZW1hIiwiZ2V0RmlsZXNUb1BhcnNlIiwibG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0IiwicHJvY2Vzc0dlb2pzb24iLCJhc3NpZ25HcHVDaGFubmVsIiwiY29weVRhYmxlQW5kVXBkYXRlIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwicGluVGFibGVDb2x1bW5zIiwic2V0RmlsdGVyR3B1TW9kZSIsInNvcnREYXRhc2V0QnlDb2x1bW4iLCJmaW5kRmllbGRzVG9TaG93IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwiZmluZERlZmF1bHRMYXllciIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwibWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzIiwiZ2V0TmV3TGF5ZXJHcm91cCIsImFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlciIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImZpbmRQYXJlbnRHcm91cEZvckxheWVyIiwiZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkIiwidXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlciIsImdldEZsYXRMYXllck9yZGVyIiwicmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIiLCJnZXRQcm9wVmFsdWVUb01lcmdlciIsImhhc1Byb3BzVG9NZXJnZSIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwiZml4RWZmZWN0T3JkZXIiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsImdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJtZXJnZVRpbWVEb21haW5zIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsImdldERlZmF1bHRUaW1lRm9ybWF0IiwiTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCIsIlRJTUVfSU5URVJWQUxTX09SREVSRUQiLCJtZXJnZUZpbHRlckRvbWFpbiIsImluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSIsImNvbGxlY3RDb2x1bW5WYWx1ZXMiLCJnZXRDb2x1bW5TdGF0aXN0aWNzIiwiY3JlYXRlRWZmZWN0IiwiZmluZE1hcEJvdW5kcyIsInZpc1N0YXRlVXBkYXRlcnMiLCJkZWZhdWx0SW50ZXJhY3Rpb25Db25maWciLCJ0b29sdGlwIiwiaWQiLCJsYWJlbCIsImVuYWJsZWQiLCJjb25maWciLCJmaWVsZHNUb1Nob3ciLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiQUJTT0xVVEUiLCJnZW9jb2RlciIsInBvc2l0aW9uIiwibGltaXRTZWFyY2giLCJicnVzaCIsInNpemUiLCJjb29yZGluYXRlIiwiREVGQVVMVF9BTklNQVRJT05fQ09ORklHIiwiZG9tYWluIiwiY3VycmVudFRpbWUiLCJzcGVlZCIsImlzQW5pbWF0aW5nIiwidGltZVN0ZXBzIiwidGltZUZvcm1hdCIsInRpbWV6b25lIiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJoaWRlQ29udHJvbCIsImR1cmF0aW9uIiwiREVGQVVMVF9FRElUT1IiLCJtb2RlIiwiRFJBV19QT0xZR09OIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJ2aXNpYmxlIiwiSU5JVElBTF9WSVNfU1RBVEUiLCJtYXBJbmZvIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImxheWVycyIsImxheWVyRGF0YSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXIiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsInVuZGVmaW5lZCIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsImNoYXJ0cyIsImNoYXJ0c1RvQmVNZXJnZWQiLCJhbm5vdGF0aW9ucyIsImFubm90YXRpb25zVG9CZU1lcmdlZCIsInNlbGVjdGVkQW5ub3RhdGlvbklkIiwiaXNFZGl0aW5nQW5ub3RhdGlvblRleHQiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsImxheWVyQmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJob3ZlckluZm8iLCJjbGlja2VkIiwibW91c2VQb3MiLCJtYXhEZWZhdWx0VG9vbHRpcHMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkaW5nSW5kaWNhdG9yVmFsdWUiLCJsb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwic2NoZW1hIiwiQUNUSU9OX1RBU0tfRklUX0JPVU5EUyIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIl9vYmplY3RTcHJlYWQiLCJtYXAiLCJseXIiLCJpIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImxlbmd0aCIsImlzVmlzaWJsZSIsImFuaW1hdGlvbiIsInVwZGF0ZUFuaW1hdGlvbkRvbWFpbiIsInBpY2tDaGFuZ2VkUHJvcHMiLCJwcmV2IiwibmV4dCIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibmV3TGF5ZXJJZCIsInNlcmlhbGl6ZWRPbGRMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJ2aXN1YWxDaGFubmVscyIsImNoYW5uZWxOYW1lIiwiY2hhbm5lbCIsImNoYW5uZWxQcm9wTmFtZXMiLCJwcm9wIiwic29tZSIsImxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJlcnIiLCJlIiwiZiIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsInVwZGF0ZWxheWVyVmlzaWJpbHR5IiwiZmlsdGVySW5kZXgiLCJmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUiLCJzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlciIsImVuYWJsZSIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwic3RhdGVXaXRoRGF0YUlkIiwibGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyIiwibmV4dExheWVyIiwidXBkYXRlTGF5ZXJDb25maWciLCJzaG91bGRDYWxjdWxhdGVMYXllckRhdGEiLCJvbGRMYXllckRhdGEiLCJ1cGRhdGVMYXllckRhdGFSZXN1bHQiLCJsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlciIsImxheWVySWQiLCJzcGxpdE1hcElkIiwibWFwSW5kZXgiLCJzbSIsInRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsImFyZ3VtZW50cyIsIm5ld1RleHRMYWJlbCIsInNsaWNlIiwiY3VycmVudEZpZWxkcyIsInRsIiwiZmllbGQiLCJuYW1lIiwiZmlsdGVyIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsImFmIiwiX3RleHRMYWJlbCRmaW5kJGNvbGxpIiwiX3RleHRMYWJlbCRmaW5kIiwiY29sbGlzaW9uRW5hYmxlZCIsIkJvb2xlYW4iLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwyIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwiX3RleHRMYWJlbCQiLCJ2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YSIsImxvYWRlZExheWVyIiwiYWxsb3dFbXB0eUNvbHVtbiIsImlzVmFsaWRUb1NhdmUiLCJ2YWxpZGF0ZWQiLCJvbGRMYXllclR5cGUiLCJuZXdEYXRhc2V0RmllbGRzIiwiZmllbGRzIiwicmVtYXBwZWRGaWVsZHMiLCJ2YWx1ZXMiLCJfcmVmMiIsImZpZWxkS2V5IiwiY3VycmVudEZpZWxkIiwibWF0Y2hlZCIsIl9yZWYzIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiaXNDb25maWdBY3RpdmUiLCJ1cGRhdGVMYXllckRvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGEzIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwiQXJyYXkiLCJpc0FycmF5IiwibmV3VHlwZSIsIm9sZElkIiwiZXJyb3IiLCJkZWZhdWx0TGF5ZXJQcm9wcyIsImFzc2lnbkNvbmZpZ1RvTGF5ZXIiLCJ2aXNDb25maWdTZXR0aW5ncyIsImlzTGF5ZXJIb3ZlcmVkIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTQiLCJzZXR0aW5ncyIsIl9zZXR0aW5ncyRsYXllcnMiLCJvbGRMYXllck1hcCIsIm90aGVyTGF5ZXJzIiwiX3RvUHJvcGVydHlLZXkiLCJyZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQiLCJ2aXN1YWxDaGFubmVsIiwiaW5jb21pbmciLCJfdHlwZW9mIiwiZm91bmQiLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsInVwZGF0ZWRTdGF0ZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJjb2xvciIsInVwZGF0ZUxheWVyQ29sb3JVSSIsInJhbmdlIiwiY29sb3JSYW5nZUNvbmZpZyIsImNvbG9yVUkiLCJjdXN0b21CcmVha3MiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNSIsInNjYWxlIiwiY3VzdG9tT3JkaW5hbCIsImN1c3RvbVBhbGV0dGUiLCJvcmRpbmFsRG9tYWluIiwiY29sb3JCcmVha3MiLCJzaG93Q29sb3JDaGFydCIsImNoYW5uZWxLZXkiLCJqZW5rcyIsImVkaXRCb3VuZHMiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNiIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJfcmVmNCIsInJlZHVjZSIsImFjY3UiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiX3JlZjUiLCJhbmltYXRpb25XaW5kb3ciLCJuZXdGaWx0ZXIiLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsImRhdGFzZXRJZHNUb0ZpbHRlciIsIl9sb29wIiwicmVzIiwidiIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsImZpbHRlcldpdGhQTG90IiwidXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIiwidGltZVJhbmdlIiwiYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlciIsIl91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwibmV4dFZhbHVlIiwiX2kiLCJfYXJyIiwibmV4dFZhbCIsImRvbWFpblN0ZXBzIiwibmV4dEZpbHRlciIsInN0ZXAiLCJkYXRhc2V0SWRzIiwib2xkRGF0YUlkIiwiZGF0YXNldElkIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsImVuZE5hbWUiLCJfYXBwbHlUaW1lRmlsdGVyRW5kRmkiLCJncHVDaGFubmVsIiwiZ3B1RW5kQ2hhbm5lbCIsImxheWVySWREaWZmZXJlbmNlIiwibGF5ZXJEYXRhSWRzIiwibGlkIiwibmV3RGF0YUlkcyIsInNldEZpbHRlclBsb3RVcGRhdGVyIiwiX3JlZjYiLCJuZXdQcm9wIiwicGxvdFR5cGUiLCJjaGFydFR5cGUiLCJ5QXhpcyIsImxpbmVDaGFydCIsImhpc3RvZ3JhbSIsImFkZEZpbHRlclVwZGF0ZXIiLCJjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIiLCJvcmlnaW5hbEluZGV4IiwiaW5kZXgiLCJsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyIiwiX3JlZjciLCJvbGRWaXhDb25maWciLCJ0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyIiwiaXNGaWx0ZXJBbmltYXRpb25Db25maWciLCJzZXRBbmltYXRpb25Db25maWdVcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciIsInVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwiX3JlZjgiLCJzZXRGaWx0ZXJWaWV3VXBkYXRlciIsInNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyIsInRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJhZGRMYXllclVwZGF0ZXIiLCJuZXdMYXllckRhdGEiLCJ3YXJuIiwiX2FjdGlvbiRkYXRhc2V0SWQiLCJkZWZhdWx0RGF0YXNldCIsInJlbW92ZUxheWVyVXBkYXRlciIsIl9yZWY5IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJsYXllclRvUmVtb3ZlIiwicmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyIsImNoYXJ0IiwiaXNMYXllckNoYXJ0Q29uZmlnIiwicmVvcmRlckxheWVyVXBkYXRlciIsIl9yZWYwIiwib3JkZXIiLCJhZGRMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXAiLCJuZXdMYXllck9yZGVyIiwicmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwVG9SZW1vdmUiLCJsYXllcklkc1RvUmVtb3ZlIiwidXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIiLCJvcHRpb25zIiwibmV3TGF5ZXJHcm91cCIsImxheWVySWRzIiwiYWNjIiwiYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cElkIiwiZW50cnkiLCJuZXdHcm91cExheWVyT3JkZXIiLCJyZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlciIsIm5ld0xheWVyR3JvdXBPcmRlciIsInN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXIiLCJvcmlnaW5MYXllcklkIiwiZGVzdGluYXRpb25MYXllcklkIiwib3JpZ2luTGF5ZXJHcm91cElkIiwiZGVzdGluYXRpb25MYXllckdyb3VwSWQiLCJvcmlnaW5JbmRleCIsImRlc3RpbmF0aW9uSW5kZXgiLCJkZXN0SW5kZXgiLCJkdXBsaWNhdGVMYXllclVwZGF0ZXIiLCJfcmVmMSIsIm9yaWdpbmFsIiwib3JpZ2luYWxMYXllck9yZGVySWR4IiwibmV3TGFiZWwiLCJwb3N0Zml4IiwicGFyZW50R3JvdXAiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJ1cGRhdGVkR3JvdXAiLCJhZGRFZmZlY3RVcGRhdGVyIiwiX2FjdGlvbiRjb25maWciLCJfYWN0aW9uJGNvbmZpZzIiLCJfYWN0aW9uJGNvbmZpZzMiLCJlZmZlY3QiLCJuZXdFZmZlY3QiLCJzZXRQcm9wcyIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtZXJnZUNoYXJ0Q29uZmlnIiwiZGlzcGxheSIsImNoYXJ0RGlzcGxheSIsImF4aXNGaWVsZElmUHJlc2VudCIsImF4aXMiLCJmaWVsZE5hbWVzIiwiX2F4aXMkZmllbGQiLCJoYXMiLCJkcm9wTWlzc2luZ0NoYXJ0RmllbGRzIiwiU2V0IiwieEF4aXMiLCJncm91cEJ5Iiwic2hvdWxkUmVtb3ZlIiwicmVtb3ZlZCIsInJlbW92ZWRJZHMiLCJmaWx0ZXJJZHMiLCJmbGF0TWFwIiwiX2NoYXJ0JGNyb3NzRmlsdGVyIiwiY3Jvc3NGaWx0ZXIiLCJyZWR1Y2VSaWdodCIsImFkZENoYXJ0VXBkYXRlciIsIl9yZWYxMyIsIl9jaGFydCRkaXNwbGF5JGlzQ29uZiIsIl9jaGFydCRkaXNwbGF5IiwiZXhpc3RpbmciLCJ1cGRhdGVDaGFydFVwZGF0ZXIiLCJfcmVmMTQiLCJfbmV4dCRjcm9zc0ZpbHRlcjIiLCJfcHJldiRjcm9zc0ZpbHRlciIsIl9wcmV2JGNyb3NzRmlsdGVyMiIsIl9uZXh0JGNyb3NzRmlsdGVyMyIsImRhdGFJZENoYW5nZWQiLCJsYXllcklkQ2hhbmdlZCIsIl9uZXh0JGNyb3NzRmlsdGVyIiwib3duZWRGaWx0ZXJJZHMiLCJyZW1vdmVDaGFydFVwZGF0ZXIiLCJfcmVmMTUiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9yZWYxNiIsIl9jb25maWckdGV4dFNpZGUiLCJfcmVmMTciLCJfY29uZmlnJHRleHRWZXJ0aWNhbFAiLCJfY29uZmlnJGlkIiwiX2NvbmZpZyRpc1Zpc2libGUiLCJfY29uZmlnJGF1dG9TaXplIiwiX2NvbmZpZyRhdXRvU2l6ZVkiLCJfY29uZmlnJGFuY2hvclBvaW50IiwiX2NvbmZpZyRsYWJlbCIsIl9jb25maWckbGluZUNvbG9yIiwiX2NvbmZpZyRsaW5lV2lkdGgiLCJfY29uZmlnJHRleHRXaWR0aCIsIl9jb25maWckdGV4dEhlaWdodCIsIl9jb25maWckdGV4dFZlcnRpY2FsQSIsIl9hcm1MZW5ndGgiLCJfYXJtTGVuZ3RoMiIsIl9hcm1MZW5ndGgzIiwiX3JhZGl1c0luTWV0ZXJzIiwia2luZCIsInByb3ZpZGVkQW5nbGUiLCJhbmdsZSIsImRlcml2ZWRGcm9tQW5nbGUiLCJ0ZXh0U2lkZSIsIlRFWFQiLCJ0ZXh0VmVydGljYWxQb3NpdGlvbiIsInZlcnRpY2FsIiwiYmFzZSIsImF1dG9TaXplIiwiYXV0b1NpemVZIiwiYW5jaG9yUG9pbnQiLCJsaW5lQ29sb3IiLCJsaW5lV2lkdGgiLCJ0ZXh0V2lkdGgiLCJ0ZXh0SGVpZ2h0IiwidGV4dFZlcnRpY2FsQWxpZ24iLCJkZWZhdWx0QW5nbGUiLCJQT0lOVCIsImFybUxlbmd0aCIsIkFSUk9XIiwiQ0lSQ0xFIiwicmFkaXVzSW5NZXRlcnMiLCJhZGRBbm5vdGF0aW9uVXBkYXRlciIsIm5ld0Fubm90YXRpb24iLCJyZW1vdmVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxOCIsImEiLCJ1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxOSIsIm5leHRBbm5vdGF0aW9uIiwibmV3QW5ub3RhdGlvbnMiLCJkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYyMCIsInNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMjEiLCJpc0VkaXRpbmdUZXh0IiwicmVtb3ZlRGF0YXNldFVwZGF0ZXIiLCJkYXRhc2V0S2V5IiwiX3N0YXRlJGRhdGFzZXRzIiwibmV3RGF0YXNldHMiLCJsYXllcnNUb1JlbW92ZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJpbmRleE9mIiwicHVzaCIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMjIiLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYyMyIsIl9yZWYyMyRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYyMyRwYXlsb2FkJGNvbmZpZyIsIl9yZWYyMyRwYXlsb2FkJG9wdGlvbiIsInZpc1N0YXRlIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwibWVyZ2VkU3RhdGUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibWVyZ2VyIiwibWVyZ2UiLCJ0b01lcmdlUHJvcCIsImxheWVySG92ZXJVcGRhdGVyIiwiaW5mbyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlciIsImNvbnRyYWRpY3QiLCJrIiwibGF5ZXJDbGlja1VwZGF0ZXIiLCJwaW5uZWQiLCJwaWNrZWQiLCJtYXBDbGlja1VwZGF0ZXIiLCJtb3VzZU1vdmVVcGRhdGVyIiwiX3JlZjI0IiwiZXZ0IiwicG9pbnQiLCJtb3VzZVBvc2l0aW9uIiwibG5nTGF0IiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiZHVwbGljYXRlIiwiY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgiLCJfcmVmMjUiLCJoYXNUYWJ1bGFyRGF0YXNldERhdGEiLCJkYXRhIiwiX2RhdGEkcm93cyIsIl9kYXRhJGNvbHMiLCJyb3dzIiwiY29scyIsImFycm93VGFibGUiLCJuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlIiwiX2RhdGFzZXQkaW5mbyIsIl9kYXRhc2V0JG1ldGFkYXRhIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJhcHBseSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlMiIsIl9yZWYyNiIsIl9kYXRhc2V0JG1ldGFkYXRhNyIsIl9kYXRhc2V0JG1ldGFkYXRhOCIsIm9uUHJvZ3Jlc3MiLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTkiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYXJnIiwiYWJydXB0IiwiZm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZSIsIl9yZWYyNyIsIl9jYWxsZWUiLCJtZXNzYWdlIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsIl94MiIsImdldERhdGFzZXRQcm9ncmVzc0lkIiwiX2RhdGFzZXQkaW5mbzIiLCJfZGF0YXNldCRtZXRhZGF0YTIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwicHJvZ3Jlc3NJZCIsInByb2dyZXNzIiwiX3Byb2dyZXNzJHBlcmNlbnQiLCJNYXRoIiwicm91bmQiLCJwZXJjZW50IiwiY2hhaW4iLCJoeWRyYXRlZCIsInRhc2siLCJjbGVhckxvYWRpbmdQcm9ncmVzcyIsImlkcyIsImN1cnJlbnQiLCJwYXRjaERhdGFzZXRNZXRhZGF0YSIsInBhdGNoIiwicmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl94MyIsIl9yZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX2NhbGxlZTMiLCJfcmVmMjgiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyIsInJlZnJlc2hEYXRhc2V0VXBkYXRlciIsIl9yZWYyOSIsIl9kYXRhc2V0JG1ldGFkYXRhMyIsIl9kYXRhc2V0JG1ldGFkYXRhNCIsIm5leHREYXRhc2V0IiwicmVmcmVzaEVycm9yIiwicmVmcmVzaFByb2dyZXNzIiwiX3Byb2dyZXNzJHBlcmNlbnQyIiwiYmltYXAiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlciIsIl9yZWYzMCIsIl9kYXRhc2V0JG1ldGFkYXRhNSIsIl9kYXRhc2V0JG1ldGFkYXRhNiIsIm5leHRQZXJjZW50IiwibWF4IiwibWluIiwiZmllbGROYW1lc0VxdWFsIiwiZXZlcnkiLCJyZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2UiLCJuZXh0TGF5ZXJzIiwiZHJvcHBlZExheWVycyIsInJlYm91bmQiLCJuZXh0TGF5ZXJPcmRlciIsIm5leHRTcGxpdE1hcHMiLCJuZXh0TGF5ZXJEYXRhIiwib2xkSWR4IiwiZmlsdGVyc0ZvckRhdGFzZXQiLCJvdGhlckZpbHRlcnMiLCJfdmFsaWRhdGVGaWx0ZXJzVXBkYXQiLCJ1cGRhdGVkRGF0YXNldHMiLCJuZXh0RmlsdGVycyIsInJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfcmVmMzEiLCJfcmVzdWx0JGRhdGEiLCJtZXRhZGF0YVBhdGNoIiwic2NoZW1hVW5jaGFuZ2VkIiwibm90TW9kaWZpZWQiLCJ1cGRhdGUiLCJyZWZyZXNoZWQiLCJyZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSIsImlzRGF0YXNldFJvd0xpc3QiLCJ0b0FycmF5Um93Iiwicm93IiwicmVjb3JkIiwibm9ybWFsaXplRGF0YXNldFJvd3MiLCJsaXN0Iiwibm9ybWFsaXplZCIsImFycmF5Um93IiwiYWRkVG9EYXRhc2V0VXBkYXRlciIsIl9yZWYzMiIsImFwcGxpZWQiLCJ1cHNlcnRCeSIsInVwc2VydFJvd3MiLCJhcHBlbmRSb3dzIiwicmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyIiwiX3JlZjMzIiwicm93SW5kZXhlcyIsImJ5RmllbGQiLCJpbmRleGVzIiwiZmluZFJvd0luZGV4ZXNCeUZpZWxkVmFsdWVzIiwicmVtb3ZlUm93cyIsInJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyIiwiX3JlZjM0IiwiU3RyaW5nIiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJjcmVhdGVEYXRhc2V0VGFza3MiLCJub3RpZmljYXRpb25UYXNrcyIsImh5ZHJhdGVQcm9ncmVzcyIsIl9yZWYzNSIsImRhdGFzZXRJbmRleCIsIl9yZWYzNSRpbmZvIiwicmVzdCIsIl9leGNsdWRlZDIiLCJwcm90byIsInByb2dyZXNzSWRzIiwiZGF0YXNldHNBbGxTZXR0bGVkVGFzayIsImFsbFNldHRsZWQiLCJyZXN1bHRzIiwiYWRkVG9NYXBPcHRpb25zIiwic2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIiLCJjaGFuZ2UiLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQiLCJuZXdEYXRhRW50cmllcyIsInN0YXR1cyIsInJlYXNvbiIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zIiwibGF5ZXJWaXNDb25maWciLCJwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhIiwiX2xheWVyJGNvbmZpZyIsImdlb2pzb24iLCJjb2x1bW5Nb2RlIiwiZkRhdGFJZCIsImRhdGFzZXRGaWx0ZXJlZCIsImRhdGFFbXB0eSIsIm5ld0xheWVycyIsImF1dG9DcmVhdGVMYXllcnMiLCJhZGREZWZhdWx0TGF5ZXJzIiwibGF5ZXJzTm90SW5TcGxpdE1hcHMiLCJ0b29sdGlwRmllbGRzIiwiYXV0b0NyZWF0ZVRvb2x0aXBzIiwiYWRkRGVmYXVsdFRvb2x0aXBzIiwicG9seWdvbkZpbHRlcnMiLCJwb2x5Z29uIiwicG9seWdvbk1ldGFEYXRhSWRzIiwiX2YkbGF5ZXJJZCIsImNlbnRlck1hcCIsImJvdW5kcyIsInBhZGRpbmciLCJmaXRCb3VuZHNUYXNrIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheSIsInJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYSIsInJlbmFtZXMiLCJuZXdUYWJsZSIsIl9sYXllciRjb25maWckdGV4dExhYiIsImNvbmZpZ1BhdGNoIiwiY29sdW1uc1BhdGNoIiwiY29sdW1uc0NoYW5nZWQiLCJjb2x1bW5zIiwiX3JlZjM2IiwiX3JlZjM3IiwiY2tleSIsImNvbCIsIl9yZWYzOCIsImZpZWxkQ29uZmlnIiwibGF5ZXJDb3B5IiwiYXNzaWduIiwiY3JlYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJoYXNBbGxDb2x1bW5zIiwidXBkYXRlRGF0YXNldFVwZGF0ZXIiLCJfaW50ZXJhY3Rpb25Db25maWcyIiwiX3Rvb2x0aXAkY29uZmlnIiwiX2FjdGlvbiRyZW5hbWVzIiwidXBkYXRlU2NoZW1hIiwiZmlsdGVyZWRJZHhDUFUiLCJhbGxJbmRleGVzIiwiZmlsdGVyUmVjb3JkQ1BVIiwic29ydENvbHVtbiIsInNvcnRPcmRlciIsInBpbm5lZENvbHVtbnMiLCJfcmVuYW1lcyRuYW1lIiwiZ2V0Q29sdW1uRmllbGRJZHgiLCJuZXdGaWVsZHNCeU5hbWUiLCJfcmVuYW1lcyRvbGROYW1lIiwiX3VwZGF0ZWQkeUF4aXMiLCJ2aSIsIm9sZE5hbWUiLCJuZXdOYW1lIiwiZmllbGRJZHgiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUyIiwidXBkYXRlZCIsImZpbHRlclRhYmxlIiwicmVjb25jaWxlZCIsIm5leHRGaWVsZHNUb1Nob3ciLCJfcmVuYW1lcyRmJG5hbWUiLCJfc3RhdGUkc3BsaXRNYXBzJGluZGUiLCJpbmRleFRvUmV0cmlldmUiLCJtYXBMYXllcnMiLCJsb2FkRmlsZXNVcGRhdGVyIiwiZmlsZXMiLCJfYWN0aW9uJG9uRmluaXNoIiwib25GaW5pc2giLCJjb21wYW5pb25GaWxlcyIsImZyb20iLCJmaWxlc1RvTG9hZCIsImluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzIiwiZmlsZUNhY2hlIiwibG9hZE5leHRGaWxlVXBkYXRlciIsImxvYWRGaWxlU3RlcFN1Y2Nlc3NVcGRhdGVyIiwiZmlsZU5hbWUiLCJfc3RhdGUkZmlsZUxvYWRpbmciLCJzdGF0ZVdpdGhQcm9ncmVzcyIsInVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyIiwic3RhdGVXaXRoQ2FjaGUiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheSIsImZpbGUiLCJyZW1haW5pbmdGaWxlc1RvTG9hZCIsIm1ha2VMb2FkRmlsZVRhc2siLCJnZW4iLCJjb250ZW50IiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZDIiLCJwYXJzZVByb2dyZXNzIiwicHJldlByb2dyZXNzIiwibmV4dEZpbGVCYXRjaFVwZGF0ZXIiLCJfcmVmMzkiLCJfYWNjdW11bGF0ZWQkZGF0YSIsIl9yZWYzOSRwYXlsb2FkIiwiYWNjdW11bGF0ZWQiLCJ1c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyIsImVuZHNXaXRoIiwic2tpcEFycm93Q29tcGFjdCIsIl9yZWY0MCIsImxvYWRGaWxlc0VyclVwZGF0ZXIiLCJfcmVmNDEiLCJfc3RhdGUkZmlsZUxvYWRpbmcyIiwiYXBwbHlDUFVGaWx0ZXJVcGRhdGVyIiwiX3JlZjQyIiwiZGF0YUlkcyIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJtZXJnZWQiLCJfcmVmNDQiLCJmaXhlZERvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGE3IiwiX3N0YXRlJGZpbHRlcnMiLCJhbmltYXRhYmxlTGF5ZXJzIiwibGF5ZXJEb21haW5zIiwibWVyZ2VkRG9tYWluIiwibWVyZ2VkVGltZVN0ZXBzIiwic29ydCIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjQ1Iiwic2tldGNoZXNFbmFibGVkIiwiZW5hYmxlRHJhd09uTWFwU2tldGNoZXMiLCJEUkFXX1BPSU5UIiwiRFJBV19MSU5FU1RSSU5HIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjQ2IiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWY0NiRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsImZpbmRFZGl0b3JGZWF0dXJlIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlIiwiZnJvbUVkaXRvciIsIml0ZW0iLCJzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIiLCJfcmVmNDciLCJfc3RhdGUkZWRpdG9yJHNlbGVjdGUyIiwibmV4dEZlYXR1cmUiLCJuZXh0RWRpdG9yIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWY0OCIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWY0OSIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzTGF5ZXJJbmNsdWRlZCIsInNrZXRjaEZlYXR1cmUiLCJzdGF0ZVdpdGhvdXRGaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlciIsInZpc2libGVMYXllcklkcyIsImFsbExheWVySWRzIiwic29ydFRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY1MCIsImNvbHVtbiIsInNvcnRNb2RlIiwiY3VycmVudE1vZGUiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJwaW5UYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNTEiLCJjb3B5VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjUyIiwidGV4dCIsImRhdGFDb250YWluZXIiLCJ2YWx1ZUF0Iiwiam9pbiIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjUzIiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnMiIsImNvbG9yRmllbGQiLCJnZXRNYXBwZWRWYWx1ZSIsImZpbHRlclByb3BzIiwibWFwcGVkVmFsdWUiLCJ5aWVsZEZvclBhaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX3g0IiwiX3JlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl9jYWxsZWU0IiwiX3JlZjU0IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJmaWVsZFR5cGUiLCJMT0FEX0NPTFVNTl9TVEFUU19UQVNLIiwibG9hZENvbHVtblN0YXRzVXBkYXRlciIsIl9yZWY1NSIsImZpZWxkTmFtZSIsImZpZWxkTmFtZXNUb0xvYWQiLCJmaWVsZHNUb0xvYWQiLCJpc0xvYWRpbmdTdGF0cyIsInRhc2tzIiwiX3JlZjU2IiwibG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXIiLCJfcmVmNTciLCJuZXdGaWx0ZXJQcm9wcyIsImNvbHVtblN0YXRzIiwibG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyIiwiX3JlZjU4IiwidG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIiLCJjb252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlciIsIl9hY3Rpb24iLCJjbGVhcmVkU3RhdGUiLCJsYWJlbElkIiwiZmxvb3IiLCJyYW5kb20iLCJleHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlciIsIl9yZWY1OSIsImV4dHJhY3RlZCIsInJvd0NvdW50Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNjAiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjYxIiwibGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlciIsIl9sYXllciRmaWx0ZXJlZEl0ZW1DbyIsImV2ZW50IiwiZGVja2dsTGF5ZXJJZCIsImNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJ3bXNGZWF0dXJlSW5mb1VwZGF0ZXIiLCJmZWF0dXJlSW5mbyIsIm9iamVjdCIsIndtc0ZlYXR1cmVJbmZvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvMiIsIl9hY3Rpb24kZW5hYmxlIiwiaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciIsIm5ld0ZpbHRlckRvbWFpbiIsImludGVydmFsIiwiYWRqdXN0VGltZUZpbHRlckludGVydmFsIiwibmV3RmlsdGVyVmFsdWUiLCJzeW5jVGltZWxpbmVNb2RlIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsIl9yZWY2MiIsInNldExvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJfcmVmNjMiLCJfc3RhdGUkbG9hZGluZ1Byb2dyZXMiLCJ0aW1lbGluZVZhbHVlIiwiZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIiLCJmcmVlIiwiX2ZpbHRlciRzeW5jVGltZWxpbmVNIiwibmV3TW9kZSIsInN0YXJ0IiwiaW50ZXJ2YWxJbmRleCIsImN1cnJlbnRJbmRleCIsIm1ldGEiLCJ0YXJnZXRUaW1lSW50ZXJ2YWwiLCJuZXdJbmRleCIsImxheWVyVGltZUludGVydmFsIiwidXBkYXRlZFBsb3RUeXBlIiwiZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwiX3ZhbHVlJGNvbmZpZyIsIl92YWx1ZSRjb25maWcyIiwicmVwbGFjZWQiLCJmaW5kQ2hpbGREYXRhc2V0SWRzIiwiX3ZhbHVlJG5ld0RhdGFzZXQiLCJjaGlsZERhdGFJZHMiLCJtb3ZlVmFsdWVUb0JlTWVyZ2VkIiwicHJvcFZhbHVlcyIsIl9yZWY2NSIsInNhdmVVbm1lcmdlZCIsInN0YXRlUmVtb3ZlZCIsInByb3BWYWx1ZSIsInAiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIl9zZXJpYWxpemVkU3RhdGUkc3BsaSIsInByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZCIsInByZXZpb3VzT3JkZXIiLCJwYXJrZWQiLCJwYXJrZWRJZHMiLCJrbm93biIsIm9yZGVyZWQiLCJfcmVmNjYiLCJhY2N1U3RhdGUiLCJfcmVmNjciLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlcjIiLCJtZXJnZXJPcHRpb25zIiwicGFya2VkRWxzZXdoZXJlIiwicmVwbGFjZWRJdGVtIiwicmVwbGFjZVByb3BWYWx1ZUluU3RhdGUiLCJfcmVmNjgiLCJjaGlsZERhdGFJZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtiYm94fSBmcm9tICdAdHVyZi9iYm94JztcbmltcG9ydCB0eXBlIHtBbGxHZW9KU09OfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBjb3B5IGZyb20gJ2NvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvY2xvbmVEZWVwJztcbmltcG9ydCBnZXQgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvZ2V0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2lzRXF1YWwnO1xuaW1wb3J0IHBpY2sgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvcGljayc7XG5pbXBvcnQgdW5pcSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC91bmlxJztcbmltcG9ydCB4b3IgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQveG9yJztcbmltcG9ydCBUYXNrLCB7ZGlzYWJsZVN0YWNrQ2FwdHVyaW5nLCB3aXRoVGFza30gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG5pbXBvcnQgdHlwZSB7VGFza0Rlc2NyaXB0b3J9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gVGFza3NcbmltcG9ydCB7XG4gIERFTEFZX1RBU0ssXG4gIEFDVElPTl9UQVNLLFxuICBMT0FEX0ZJTEVfVEFTSyxcbiAgUFJPQ0VTU19GSUxFX0RBVEEsXG4gIFVOV1JBUF9UQVNLXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gQWN0aW9uc1xuaW1wb3J0IHtcbiAgYWRkTm90aWZpY2F0aW9uLFxuICBBY3Rpb25UeXBlcyxcbiAgQ3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkLFxuICBNYXBTdGF0ZUFjdGlvbnMsXG4gIFJlY2VpdmVNYXBDb25maWdQYXlsb2FkLFxuICBWaXNTdGF0ZUFjdGlvbnMsXG4gIGFwcGx5TGF5ZXJDb25maWcsXG4gIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzLFxuICBsYXllckNvbmZpZ0NoYW5nZSxcbiAgbGF5ZXJUeXBlQ2hhbmdlLFxuICBsYXllclZpc0NvbmZpZ0NoYW5nZSxcbiAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlLFxuICBsb2FkRmlsZVN0ZXBTdWNjZXNzLFxuICBsb2FkRmlsZXNFcnIsXG4gIGxvYWRGaWxlc1N1Y2Nlc3MsXG4gIGxvYWROZXh0RmlsZSxcbiAgbmV4dEZpbGVCYXRjaCxcbiAgc2V0RmlsdGVyLFxuICBwcm9jZXNzRmlsZUNvbnRlbnQsXG4gIGZpdEJvdW5kcyBhcyBmaXRNYXBCb3VuZHMsXG4gIHRvZ2dsZUxheWVyRm9yTWFwLFxuICBhcHBseUZpbHRlckNvbmZpZyxcbiAgU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWQsXG4gIGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MsXG4gIGxvYWRDb2x1bW5TdGF0c0Vycm9yLFxuICByZWZyZXNoRGF0YXNldFN1Y2Nlc3MsXG4gIHJlZnJlc2hEYXRhc2V0RXJyb3IsXG4gIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3MsXG4gIHNldExvYWRpbmdQcm9ncmVzc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICBhcnJheUluc2VydCxcbiAgY29tYmluZVNwbGl0TWFwc0J5SW5kZXgsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbixcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbixcbiAgZXh0cmFjdFJvd3NJbnNpZGVGZWF0dXJlLFxuICBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIsXG4gIG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzLFxuICB0b1NrZXRjaEZlYXR1cmUsXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXIsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0c1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIHRvQXJyYXksIGFycmF5TW92ZX0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuLy8gTWVyZ2Vyc1xuaW1wb3J0IHtcbiAgQU5JTUFUSU9OX1dJTkRPVyxcbiAgQkFTRV9TUEVFRCxcbiAgQ09NUEFSRV9UWVBFUyxcbiAgREVGQVVMVF9URVhUX0xBQkVMLFxuICBFRElUT1JfTU9ERVMsXG4gIEZJTFRFUl9UWVBFUyxcbiAgRklMVEVSX1ZJRVdfVFlQRVMsXG4gIExBWUVSX1RZUEVTLFxuICBGUFMsXG4gIExJR0hUX0FORF9TSEFET1dfRUZGRUNULFxuICBESVNUQU5DRV9GT0dfVFlQRSxcbiAgU1VSRkFDRV9GT0dfVFlQRSxcbiAgTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG4gIFBMT1RfVFlQRVMsXG4gIFNPUlRfT1JERVIsXG4gIFNZTkNfVElNRUxJTkVfTU9ERVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBTQ0FMRV9UWVBFUyxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRSxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfU0lERSxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04sXG4gIEFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5ULFxuICB0ZXh0UGxhY2VtZW50RnJvbUFuZ2xlLFxuICBBbm5vdGF0aW9uS2luZCxcbiAgRGF0YXNldFR5cGUsXG4gIGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyxcbiAgZ2V0UmVtb3RlU291cmNlRm9ybWF0XG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TEFZRVJfSURfTEVOR1RILCBMYXllciwgTGF5ZXJDbGFzc2VzfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBhcHBseV8sXG4gIGNvbXBvc2VfLFxuICBmaWx0ZXJPdXRCeUlkLFxuICBtZXJnZV8sXG4gIHBheWxvYWRfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBpc1NhdmVkTGF5ZXJDb25maWdWMSxcbiAgcGFyc2VMYXllckNvbmZpZyxcbiAgc2VyaWFsaXplRmlsdGVyLFxuICBzZXJpYWxpemVMYXllcixcbiAgc2VyaWFsaXplVmlzU3RhdGUsXG4gIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YVxufSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuXG5pbXBvcnQgS2VwbGVyR0xTY2hlbWEsIHtNZXJnZXIsIFBvc3RNZXJnZXJQYXlsb2FkLCBWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7Z2V0RmlsZXNUb1BhcnNlLCBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQsIHByb2Nlc3NHZW9qc29ufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEZlYXR1cmUsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgQW5ub3RhdGlvbixcbiAgQW5ub3RhdGlvblByb3BzUGFydGlhbCxcbiAgUHJvdG9EYXRhc2V0LFxuICBDaGFydENvbmZpZyxcbiAgTGF5ZXJDaGFydENvbmZpZ1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgS2VwbGVyVGFibGUsXG4gIEZpbHRlclByb3BzLFxuICBhc3NpZ25HcHVDaGFubmVsLFxuICBjb3B5VGFibGVBbmRVcGRhdGUsXG4gIGNyZWF0ZU5ld0RhdGFFbnRyeSxcbiAgcGluVGFibGVDb2x1bW5zLFxuICBzZXRGaWx0ZXJHcHVNb2RlLFxuICBzb3J0RGF0YXNldEJ5Q29sdW1uXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtmaW5kRmllbGRzVG9TaG93fSBmcm9tICcuL2ludGVyYWN0aW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUxheWVyRGF0YSxcbiAgZmluZERlZmF1bHRMYXllcixcbiAgZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMsXG4gIG1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyxcbiAgZ2V0TmV3TGF5ZXJHcm91cCxcbiAgYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyLFxuICByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIsXG4gIGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcixcbiAgZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIsXG4gIGdldEluZGV4RnJvbUxheWVyRW50cnlJZCxcbiAgdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcixcbiAgZ2V0RmxhdExheWVyT3JkZXIsXG4gIHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyXG59IGZyb20gJy4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtnZXRQcm9wVmFsdWVUb01lcmdlciwgaGFzUHJvcHNUb01lcmdlfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7bWVyZ2VEYXRhc2V0c0J5T3JkZXJ9IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5pbXBvcnQge1xuICBmaXhFZmZlY3RPcmRlcixcbiAgZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMsXG4gIGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMsXG4gIG1lcmdlVGltZURvbWFpbnMsXG4gIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3csXG4gIHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSxcbiAgZ2V0RGVmYXVsdFRpbWVGb3JtYXQsXG4gIExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwsXG4gIFRJTUVfSU5URVJWQUxTX09SREVSRUQsXG4gIG1lcmdlRmlsdGVyRG9tYWluLFxuICBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUsXG4gIGNvbGxlY3RDb2x1bW5WYWx1ZXMsXG4gIGdldENvbHVtblN0YXRpc3RpY3Ncbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7UGF5bG9hZEFjdGlvbn0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcblxuLy8gZGlzYWJsZSBzdGFjayBjYXB0dXJlIGZvciB3aXRoVGFzayBjYWxscyB0aGF0IGhhcHBlbiBvdXRzaWRlIHN0cmljdCByZWR1Y2VyIGNvbnRleHRcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIGNvbXBhcmVNb2RlOiBmYWxzZSxcbiAgICAgIGNvbXBhcmVUeXBlOiBDT01QQVJFX1RZUEVTLkFCU09MVVRFXG4gICAgfVxuICB9LFxuICBnZW9jb2Rlcjoge1xuICAgIGlkOiAnZ2VvY29kZXInLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmdlb2NvZGVyJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbCxcbiAgICBjb25maWc6IHtcbiAgICAgIGxpbWl0U2VhcmNoOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAwLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZVN0ZXBzOiBudWxsLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJ1xuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG4gIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcblxuICAvLyBlZmZlY3RzXG4gIGVmZmVjdHM6IFtdLFxuICBlZmZlY3RPcmRlcjogW10sXG5cbiAgLy8gY2hhcnRzIChlbmFibGVkIGJ5IGRlZmF1bHQ7IGdhdGVkIGJ5IGVuYWJsZUNoYXJ0c1BhbmVsKVxuICBjaGFydHM6IFtdLFxuICBjaGFydHNUb0JlTWVyZ2VkOiBbXSxcblxuICAvLyBhbm5vdGF0aW9uc1xuICBhbm5vdGF0aW9uczogW10sXG4gIGFubm90YXRpb25zVG9CZU1lcmdlZDogW10sXG4gIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBudWxsLFxuICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2UsXG5cbiAgaW50ZXJhY3Rpb25Db25maWc6IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiB7fSxcblxuICBsYXllckJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgb3ZlcmxheUJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgaG92ZXJJbmZvOiB1bmRlZmluZWQsXG4gIGNsaWNrZWQ6IHVuZGVmaW5lZCxcbiAgbW91c2VQb3M6IHt9LFxuICBtYXhEZWZhdWx0VG9vbHRpcHM6IE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuXG4gIC8vIHRoaXMgaXMgdXNlZCB3aGVuIHVzZXIgc3BsaXQgbWFwc1xuICBzcGxpdE1hcHM6IFtcbiAgICAvLyB0aGlzIHdpbGwgY29udGFpbiBhIGxpc3Qgb2Ygb2JqZWN0cyB0b1xuICAgIC8vIGRlc2NyaWJlIHRoZSBzdGF0ZSBvZiBsYXllciBhdmFpbGFiaWxpdHkgYW5kIHZpc2liaWxpdHkgZm9yIGVhY2ggbWFwXG4gICAgLy8gW1xuICAgIC8vICAge1xuICAgIC8vICAgICAgbGF5ZXJzOiB7bGF5ZXJfaWQ6IHRydWUgfCBmYWxzZX1cbiAgICAvLyAgIH1cbiAgICAvLyBdXG4gIF0sXG4gIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFtdLFxuICBpc01lcmdpbmdEYXRhc2V0czoge30sXG4gIC8vIGRlZmF1bHRzIGxheWVyIGNsYXNzZXNcbiAgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXMsXG5cbiAgLy8gZGVmYXVsdCBhbmltYXRpb25cbiAgLy8gdGltZSBpbiB1bml4IHRpbWVzdGFtcCAobWlsbGlzZWNvbmRzKSAodGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBVbml4IEVwb2NoKVxuICBhbmltYXRpb25Db25maWc6IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyxcblxuICBlZGl0b3I6IERFRkFVTFRfRURJVE9SLFxuXG4gIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gIC8vIGZvciBsb2FkaW5nIGRhdGFzZXRzXG4gIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogMCxcbiAgbG9hZGluZ1Byb2dyZXNzOiB7fSxcblxuICBsb2FkZXJzOiBbXSxcbiAgbG9hZE9wdGlvbnM6IHt9LFxuXG4gIC8vIHZpc1N0YXRlTWVyZ2Vyc1xuICBtZXJnZXJzOiBWSVNfU1RBVEVfTUVSR0VSUyxcblxuICAvLyBrZXBsZXIgc2NoZW1hc1xuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hXG59O1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfRklUX0JPVU5EUyA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+IGNiKCksXG5cbiAgJ0FDVElPTl9UQVNLX0ZJVF9CT1VORFMnXG4pO1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTiA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+IGNiKCksXG5cbiAgJ0FDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04nXG4pO1xuXG50eXBlIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGUgPSB7XG4gIGxheWVyczogTGF5ZXJbXTtcbiAgbGF5ZXJEYXRhOiBhbnlbXTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIHdpdGggdXBkYXRlZCBsYXllciBhbmQgbGF5ZXJEYXRhXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhPFMgZXh0ZW5kcyBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlPihcbiAgc3RhdGU6IFMsXG4gIHtsYXllckRhdGEsIGxheWVyLCBpZHh9OiB7bGF5ZXJEYXRhPzogYW55OyBsYXllcjogTGF5ZXI7IGlkeDogbnVtYmVyfVxuKTogUyB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKChseXIsIGkpID0+IChpID09PSBpZHggPyBsYXllciA6IGx5cikpLFxuICAgIGxheWVyRGF0YTogbGF5ZXJEYXRhXG4gICAgICA/IHN0YXRlLmxheWVyRGF0YS5tYXAoKGQsIGkpID0+IChpID09PSBpZHggPyBsYXllckRhdGEgOiBkKSlcbiAgICAgIDogc3RhdGUubGF5ZXJEYXRhXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGxheWVyOiBMYXllcik6IFMge1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICAgID8gYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgICAgICA6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgIH07XG4gIH1cblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBvYmplY3RzIChvciBhcnJheXMpIGFuZCByZXR1cm5zIGEgbmV3IG9iamVjdCB3aXRoIG9ubHkgdGhlXG4gKiBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBjaGFuZ2VkIGJldHdlZW4gdGhlIHR3byBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBwaWNrQ2hhbmdlZFByb3BzPFQ+KHByZXY6IFQsIG5leHQ6IFQpOiBQYXJ0aWFsPFQ+IHtcbiAgY29uc3QgY2hhbmdlZFByb3BzOiBQYXJ0aWFsPFQ+ID0ge307XG4gIGNvbnN0IHBpY2tQcm9wc09mID0gb2JqID0+IHtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VkUHJvcHMsIGtleSkgJiZcbiAgICAgICAgIWlzRXF1YWwocHJldltrZXldLCBuZXh0W2tleV0pXG4gICAgICApIHtcbiAgICAgICAgY2hhbmdlZFByb3BzW2tleV0gPSBuZXh0W2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHBpY2tQcm9wc09mKHByZXYpO1xuICBwaWNrUHJvcHNPZihuZXh0KTtcbiAgcmV0dXJuIGNoYW5nZWRQcm9wcztcbn1cblxuY29uc3QgVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUyA9IFsnZmllbGQnLCAnc2NhbGUnLCAnZG9tYWluJywgJ2FnZ3JlZ2F0aW9uJ107XG5cbi8qKlxuICogQXBwbHkgbGF5ZXIgY29uZmlnXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5LCBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5TGF5ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcklkLCBuZXdMYXllckNvbmZpZywgbGF5ZXJJbmRleH0gPSBhY3Rpb247XG4gIC8vIFNhdmVkIGNvbmZpZ3MgaGF2ZSBhIHZpc3VhbENoYW5uZWxzIHNpYmxpbmc7IHBhcnNlZC9lZGl0b3IgSlNPTiBmb2xkcyB0aG9zZVxuICAvLyBmaWVsZHMgaW50byBjb25maWcuIFJlLXBhcnNpbmcgdGhlIGxhdHRlciBkcm9wcyBjb2xvckZpZWxkIGFuZCByZXNldHMgdGhlIHNjYWxlLlxuICBjb25zdCBuZXdQYXJzZWRMYXllciA9IGlzU2F2ZWRMYXllckNvbmZpZ1YxKG5ld0xheWVyQ29uZmlnKVxuICAgID8gcGFyc2VMYXllckNvbmZpZyhzdGF0ZS5zY2hlbWEsIG5ld0xheWVyQ29uZmlnKVxuICAgIDogbmV3TGF5ZXJDb25maWc7XG4gIGNvbnN0IG9sZExheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgaWYgKCFvbGRMYXllciB8fCAhbmV3UGFyc2VkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVySW5kZXggIT09IG51bGwgJiYgbGF5ZXJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmxheWVyc1tsYXllckluZGV4XSAhPT0gb2xkTGF5ZXIpIHtcbiAgICAvLyBsYXllckluZGV4IGlzIHByb3ZpZGVkLCBidXQgaXQgZG9lc24ndCBtYXRjaCB0aGUgb2xkTGF5ZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW25ld1BhcnNlZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyB2YWxpZCBhbmQgY29udmVydCBpdCB0byBMYXllclxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBuZXdQYXJzZWRMYXllciwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgaWYgKCFuZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAobmV3TGF5ZXIudHlwZSAmJiBuZXdMYXllci50eXBlICE9PSBvbGRMYXllci50eXBlKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgICBpZiAob2xkTGF5ZXJJbmRleCA+PSAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKG5leHRTdGF0ZSwgbGF5ZXJUeXBlQ2hhbmdlKG9sZExheWVyLCBuZXdMYXllci50eXBlKSk7XG4gICAgICAvLyBsYXllclR5cGVDaGFuZ2VVcGRhdGVyIGNoYW5nZXMgdGhlIGlkIG9mIHRoZSBsYXllciwgc28gd2UgbmVlZCB0byBvYnRhaW4gdGhlIG5ldyBpZFxuICAgICAgLy8gYnV0IGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXllciB3YXMgbm90IHJlbW92ZWRcbiAgICAgIGlmIChuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBuZXdMYXllcklkID0gbmV4dFN0YXRlLmxheWVyc1tvbGRMYXllckluZGV4XS5pZDtcbiAgICAgICAgbmV4dFN0YXRlID0gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGFwcGx5TGF5ZXJDb25maWcobmV3TGF5ZXJJZCwgey4uLm5ld0xheWVyQ29uZmlnLCBpZDogbmV3TGF5ZXJJZH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICAvLyBzZXJpYWxpemVMYXllcigpIG1pZ2h0IHJldHVybiBudWxsIGlmIHRoZSBvbGQgbGF5ZXIgaXMgbm90IHZhbGlkLFxuICAvLyB3ZSBzaG91bGQgc3RpbGwgYXBwbHkgdGhlIGNoYW5nZXMgaW4gdGhhdCBjYXNlXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9sZExheWVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0xheWVyID0gc2VyaWFsaXplTGF5ZXIobmV3TGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghaXNFcXVhbChzZXJpYWxpemVkT2xkTGF5ZXIsIHNlcmlhbGl6ZWROZXdMYXllcikpIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkTGF5ZXIuY29uZmlnLCBzZXJpYWxpemVkTmV3TGF5ZXIuY29uZmlnKTtcblxuICAgIGlmICgndmlzQ29uZmlnJyBpbiBjaGFuZ2VkKSB7XG4gICAgICBpZiAoY2hhbmdlZC52aXNDb25maWcpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc0NvbmZpZ0NoYW5nZShvbGRMYXllciwgY2hhbmdlZC52aXNDb25maWcpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWxldGUgY2hhbmdlZC52aXNDb25maWc7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMob2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbE5hbWUgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxOYW1lXTtcbiAgICAgIGNvbnN0IGNoYW5uZWxQcm9wTmFtZXMgPSBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTLm1hcChwcm9wID0+IGNoYW5uZWxbcHJvcF0pO1xuICAgICAgaWYgKGNoYW5uZWxQcm9wTmFtZXMuc29tZShwcm9wID0+IHByb3AgaW4gY2hhbmdlZCkpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICAgICAgICAgICAgb2xkTGF5ZXIsXG4gICAgICAgICAgICBwaWNrKG5ld0xheWVyLmNvbmZpZywgY2hhbm5lbFByb3BOYW1lcyksXG4gICAgICAgICAgICBjaGFubmVsTmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGNoYW5uZWxQcm9wTmFtZXMpIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlZFtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICBsYXllckNvbmZpZ0NoYW5nZShvbGRMYXllciwgcGljayhuZXdMYXllci5jb25maWcsIE9iamVjdC5rZXlzKGNoYW5nZWQpKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlbGF5ZXJWaXNpYmlsdHkoc3RhdGU6IFZpc1N0YXRlLCBuZXdMYXllcjogTGF5ZXIsIGlzVmlzaWJsZT86IGJvb2xlYW4pOiBWaXNTdGF0ZSB7XG4gIGxldCBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2Uoc3RhdGUsIG5ld0xheWVyKTtcbiAgY29uc3QgZmlsdGVySW5kZXggPSBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGUpO1xuICBpZiAoaXNMYXllckFuaW1hdGFibGUobmV3TGF5ZXIpICYmIGZpbHRlckluZGV4ICE9PSAtMSkge1xuICAgIC8vIGlmIGxheWVyIGlzIGdvaW5nIHRvIGJlIHZpc2libGUgd2Ugc3luYyB3aXRoIGZpbHRlciBvdGhlcndpc2Ugd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIG90aGVyIGFuaW1hdGFibGUgbGF5ZXJzIGV4aXN0cyBhbmQgYXJlIHZpc2libGVcbiAgICBuZXdTdGF0ZSA9IHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgZW5hYmxlOiBpc1Zpc2libGUgPyBpc1Zpc2libGUgOiBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpLmxlbmd0aCA+IDBcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3Q29uZmlnKTtcbiAgaWYgKFxuICAgIHR5cGVvZiBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCA9PT0gJ3N0cmluZycgJiZcbiAgICBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCAhPT0gb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICApIHtcbiAgICBjb25zdCB7ZGF0YUlkLCAuLi5yZXN0Q29uZmlnfSA9IGFjdGlvbi5uZXdDb25maWc7XG4gICAgY29uc3Qgc3RhdGVXaXRoRGF0YUlkID0gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld0NvbmZpZzoge2RhdGFJZH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0TGF5ZXIgPSBzdGF0ZVdpdGhEYXRhSWQubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gICAgcmV0dXJuIG5leHRMYXllciAmJiBPYmplY3Qua2V5cyhyZXN0Q29uZmlnKS5sZW5ndGhcbiAgICAgID8gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlV2l0aERhdGFJZCwge29sZExheWVyOiBuZXh0TGF5ZXIsIG5ld0NvbmZpZzogcmVzdENvbmZpZ30pXG4gICAgICA6IHN0YXRlV2l0aERhdGFJZDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGFjdGlvbi5uZXdDb25maWcpO1xuXG4gIGxldCBsYXllckRhdGE7XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBzdGF0ZS5sYXllckRhdGFbaWR4XTtcblxuICAgIGNvbnN0IHVwZGF0ZUxheWVyRGF0YVJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgbmV3TGF5ZXIgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXI7XG4gICAgbGF5ZXJEYXRhID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyRGF0YTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoJ2lzVmlzaWJsZScgaW4gYWN0aW9uLm5ld0NvbmZpZykge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBhY3Rpb24ubmV3Q29uZmlnLmlzVmlzaWJsZSk7XG4gIH1cblxuICBpZiAoJ2NvbHVtbnMnIGluIGFjdGlvbi5uZXdDb25maWcgJiYgbmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgLy8gVE9ETzogU2hhbiwgbWFrZSB0aGUgYW5pbWF0aW9uIGNvbmZpZyBmdW5jdGlvbiBtb3JlIHJvYnVzdFxuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgbGF5ZXJEYXRhLFxuICAgIGlkeFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhY3Rpb24pOiBTIHtcbiAgY29uc3Qge29sZExheWVyLCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICAuLi5vbGRMYXllci5jb25maWcuYW5pbWF0aW9uLFxuICAgICAgW3Byb3BdOiB2YWx1ZVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2lkeF0pO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkXG4gKiBoYW5kbGVzIHR3byBjYXNlczpcbiAqIDEpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBsb2NhbCBTcGxpdE1hcCBsYXllciAodmlzU3RhdGUuc3BsaXRNYXAubGF5ZXJzKVxuICogMikgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGdsb2JhbCBsYXllciAodmlzU3RhdGUubGF5ZXJzKVxuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQoZCA9PiBkLmlkID09PSBsYXllcklkKTtcblxuICBpZiAoIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgaWYgKHNwbGl0TWFwSWQpIHtcbiAgICAvLyBbY2FzZSAxXTogdG9nZ2xlIGxvY2FsIGxheWVyIHZpc2liaWxpdHkgZm9yIGVhY2ggU3BsaXRNYXBcbiAgICBjb25zdCBtYXBJbmRleCA9IG5ld1N0YXRlLnNwbGl0TWFwcy5maW5kSW5kZXgoc20gPT4gc20uaWQgPT09IHNwbGl0TWFwSWQpO1xuICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgIC8vIDEpIGlmIHRoZSBsYXllciBpcyBpbnZpc2libGUgZ2xvYmFsbHlcbiAgICAgIC8vIC0+IHNldCBnbG9iYWwgdmlzaWJpbGl0eSB0byB0cnVlXG4gICAgICBuZXdTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihuZXdTdGF0ZSwgbGF5ZXJDb25maWdDaGFuZ2UobGF5ZXIsIHtpc1Zpc2libGU6IHRydWV9KSk7XG5cbiAgICAgIC8vIC0+IHNldCBsb2NhbCB2aXNpYmlsaXR5IHRvIHRydWUgYW5kIHRoZSBsb2NhbCB2aXNpYmlsaXRpZXMgb2YgYWxsIG90aGVyIFNwbGl0TWFwcyB0byBmYWxzZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzbSA9PlxuICAgICAgICAgIHNtLmlkICE9PSBzcGxpdE1hcElkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIDIpIGVsc2Ugd2hlbiB0aGUgbGF5ZXIgaXMgdmlzaWJsZSBnbG9iYWxseVxuICAgIHJldHVybiB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIobmV3U3RhdGUsIHRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gW2Nhc2UgMl06IHRvZ2dsZSBnbG9iYWwgbGF5ZXIgdmlzaWJpbGl0eVxuICAgIGNvbnN0IG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2lzVmlzaWJsZX0pO1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcblxuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBpc1Zpc2libGUpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICAgIGxheWVyOiBuZXdMYXllcixcbiAgICAgIGlkeFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybnMgaW5kZXggb2YgdGhlIGZpbHRlciBzeW5jZWQgdG8gdGltZWxpbmUgb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlOiBWaXNTdGF0ZSk6IG51bWJlciB7XG4gIHJldHVybiBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgaXNWYWxpZCBmbGFnIG9mIGEgbGF5ZXIuXG4gKiBVcGRhdGVzIGlzVmlzaWJsZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgaXNWYWxpZC5cbiAqIFRyaWdnZXJzIHVwZGF0ZSBvZiBkYXRhIGZvciB0aGUgbGF5ZXIgaW4gb3JkZXIgdG8gZ2V0IGVycm9ycyBhZ2FpbiBkdXJpbmcgbmV4dCB1cGRhdGUgaXRlcmF0aW9uLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJTZXRJc1ZhbGlkVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclNldElzVmFsaWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaXNWYWxpZH0gPSBhY3Rpb247XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgbGF5ZXJUb1VwZGF0ZSA9IHN0YXRlLmxheWVyc1tpZHhdO1xuICBpZiAobGF5ZXJUb1VwZGF0ZSkge1xuICAgIGxldCBuZXdMYXllcjtcbiAgICBsZXQgbmV3RGF0YSA9IG51bGw7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gVHJpZ2dlciBkYXRhIHVwZGF0ZSBpbiBvcmRlciB0byBzaG93IGVycm9ycyBhZ2FpbiBpZiBwcmVzZW50LlxuICAgICAgY29uc3Qge2xheWVyLCBsYXllckRhdGF9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKGxheWVyVG9VcGRhdGUsIHN0YXRlLCB1bmRlZmluZWQpO1xuICAgICAgbmV3TGF5ZXIgPSBsYXllcjtcbiAgICAgIG5ld0RhdGEgPSBsYXllckRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXJUb1VwZGF0ZS51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgbmV3TGF5ZXIuaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtpZHgsIGxheWVyOiBuZXdMYXllciwgbGF5ZXJEYXRhOiBuZXdEYXRhfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGFkZE9yUmVtb3ZlVGV4dExhYmVscyhuZXdGaWVsZHMsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCA9IERFRkFVTFRfVEVYVF9MQUJFTCkge1xuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgY29uc3QgY3VycmVudEZpZWxkcyA9IHRleHRMYWJlbC5tYXAodGwgPT4gdGwuZmllbGQgJiYgdGwuZmllbGQubmFtZSkuZmlsdGVyKGQgPT4gZCk7XG5cbiAgY29uc3QgYWRkRmllbGRzID0gbmV3RmllbGRzLmZpbHRlcihmID0+ICFjdXJyZW50RmllbGRzLmluY2x1ZGVzKGYubmFtZSkpO1xuICBjb25zdCBkZWxldGVGaWVsZHMgPSBjdXJyZW50RmllbGRzLmZpbHRlcihmID0+ICFuZXdGaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBmKSk7XG5cbiAgLy8gZGVsZXRlXG4gIG5ld1RleHRMYWJlbCA9IG5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQgJiYgIWRlbGV0ZUZpZWxkcy5pbmNsdWRlcyh0bC5maWVsZC5uYW1lKSk7XG4gIG5ld1RleHRMYWJlbCA9ICFuZXdUZXh0TGFiZWwubGVuZ3RoID8gW2RlZmF1bHRUZXh0TGFiZWxdIDogbmV3VGV4dExhYmVsO1xuXG4gIC8vIGFkZFxuICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgLi4ubmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCksXG4gICAgLi4uYWRkRmllbGRzLm1hcChhZiA9PiAoe1xuICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgIGZpZWxkOiBhZixcbiAgICAgIGNvbGxpc2lvbkVuYWJsZWQ6IEJvb2xlYW4oXG4gICAgICAgIHRleHRMYWJlbC5maW5kKHRsID0+IHRsLmNvbGxpc2lvbkVuYWJsZWQpPy5jb2xsaXNpb25FbmFibGVkID8/XG4gICAgICAgICAgZGVmYXVsdFRleHRMYWJlbC5jb2xsaXNpb25FbmFibGVkXG4gICAgICApXG4gICAgfSkpXG4gIF07XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIHRleHRMYWJlbCkge1xuICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZXh0TGFiZWxbaWR4XSwgcHJvcCkpIHtcbiAgICByZXR1cm4gdGV4dExhYmVsO1xuICB9XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGlmIChwcm9wID09PSAnZmllbGQnICYmIHZhbHVlID09PSBudWxsICYmIHRleHRMYWJlbC5sZW5ndGggPiAxKSB7XG4gICAgLy8gcmVtb3ZlIGxhYmVsIHdoZW4gZmllbGQgdmFsdWUgaXMgc2V0IHRvIG51bGxcbiAgICBuZXdUZXh0TGFiZWwuc3BsaWNlKGlkeCwgMSk7XG4gIH0gZWxzZSBpZiAocHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAoKHRsLCBpKSA9PiAoaSA9PT0gaWR4ID8gey4uLnRsLCBbcHJvcF06IHZhbHVlfSA6IHRsKSk7XG4gIH1cblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpZHgsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3Qge3RleHRMYWJlbH0gPSBvbGRMYXllci5jb25maWc7XG5cbiAgLy8gd2hlbiBhZGRpbmcgYSBuZXcgZW1wdHkgdGV4dCBsYWJlbCxcbiAgLy8gcmVseSBvbiB0aGUgbGF5ZXIncyBkZWZhdWx0IGNvbmZpZywgb3IgdXNlIHRoZSBjb25zdGFudCBERUZBVUxUX1RFWFRfTEFCRUxcbiAgY29uc3QgZGVmYXVsdFRleHRMYWJlbCA9XG4gICAgb2xkTGF5ZXIuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHtkYXRhSWQ6ICcnfSk/LnRleHRMYWJlbD8uWzBdID8/IERFRkFVTFRfVEVYVF9MQUJFTDtcblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG4gIGlmICghdGV4dExhYmVsW2lkeF0gJiYgaWR4ID09PSB0ZXh0TGFiZWwubGVuZ3RoKSB7XG4gICAgLy8gaWYgaWR4IGlzIHNldCB0byBsZW5ndGgsIGFkZCBlbXB0eSB0ZXh0IGxhYmVsXG4gICAgbmV3VGV4dExhYmVsID0gW1xuICAgICAgLi4udGV4dExhYmVsLFxuICAgICAge1xuICAgICAgICAuLi5kZWZhdWx0VGV4dExhYmVsLFxuICAgICAgICBjb2xsaXNpb25FbmFibGVkOiBCb29sZWFuKHRleHRMYWJlbFswXT8uY29sbGlzaW9uRW5hYmxlZClcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCA9PT0gJ2ZpZWxkcycpIHtcbiAgICBuZXdUZXh0TGFiZWwgPSBhZGRPclJlbW92ZVRleHRMYWJlbHModmFsdWUsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCk7XG4gIH0gZWxzZSBpZiAoaWR4ID09PSAnYWxsJyAmJiBwcm9wKSB7XG4gICAgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLm1hcCh0bCA9PiAoey4uLnRsLCBbcHJvcF06IHZhbHVlfSkpO1xuICB9IGVsc2Uge1xuICAgIG5ld1RleHRMYWJlbCA9IHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCBuZXdUZXh0TGFiZWwpO1xuICB9XG4gIC8vIHVwZGF0ZSB0ZXh0IGxhYmVsIHByb3AgYW5kIHZhbHVlXG4gIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWc6IHt0ZXh0TGFiZWw6IG5ld1RleHRMYWJlbH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxheWVyQ2xhc3NlcywgbGF5ZXIsIHNjaGVtYSkge1xuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKGxheWVyLCBzY2hlbWEpO1xuICByZXR1cm4gbG9hZGVkTGF5ZXJcbiAgICA/IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsb2FkZWRMYXllciwgbGF5ZXJDbGFzc2VzLCB7XG4gICAgICAgIGFsbG93RW1wdHlDb2x1bW46IHRydWVcbiAgICAgIH0pXG4gICAgOiBudWxsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBjb25maWcgZGF0YUlkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgb2xkTGF5ZXI6IExheWVyO1xuICAgIG5ld0NvbmZpZzoge1xuICAgICAgZGF0YUlkOiBzdHJpbmc7XG4gICAgfTtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld0NvbmZpZ30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWR9ID0gbmV3Q29uZmlnO1xuXG4gIGlmICghb2xkTGF5ZXIgfHwgIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkfSk7XG5cbiAgLy8gdGhpcyBtYXkgaGFwcGVuIHdoZW4gYSBsYXllciBpcyBuZXcgKHR5cGU6IG51bGwgYW5kIG5vIGNvbHVtbnMpIGJ1dCBpdCdzIG5vdCByZWFkeSB0byBiZSBzYXZlZFxuICBpZiAobmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgICBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLFxuICAgICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgICAgbmV3TGF5ZXIsXG4gICAgICBzdGF0ZS5zY2hlbWFcbiAgICApO1xuICAgIC8vIGlmIGNhbnQgdmFsaWRhdGUgaXQgd2l0aCBkYXRhIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICBpZiAoIXZhbGlkYXRlZCkge1xuICAgICAgY29uc3Qgb2xkTGF5ZXJUeXBlID0gb2xkTGF5ZXIudHlwZTtcbiAgICAgIGlmIChvbGRMYXllclR5cGUpIHtcbiAgICAgICAgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW29sZExheWVyVHlwZV0oe2RhdGFJZCwgaWQ6IG9sZExheWVyLmlkfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gdmFsaWRhdGVkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBMYXllciBpcyBub3QgdmFsaWQgdG8gc2F2ZSAoZS5nLiBtaXNzaW5nIGNvbHVtbnMpLCBidXQgd2Ugc3RpbGwgbmVlZCB0b1xuICAgIC8vIHJlbWFwIHZpc3VhbCBjaGFubmVsIGZpZWxkcyB0byB0aGUgbmV3IGRhdGFzZXQgdG8gYXZvaWQgc3RhbGUgZmllbGQgcmVmZXJlbmNlc1xuICAgIC8vIHRoYXQgcG9pbnQgdG8gcm93cyBiZXlvbmQgdGhlIG5ldyBkYXRhc2V0J3MgbGVuZ3RoXG4gICAgY29uc3QgbmV3RGF0YXNldEZpZWxkcyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0uZmllbGRzO1xuICAgIGNvbnN0IHJlbWFwcGVkRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkOiBmaWVsZEtleX0pID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRGaWVsZCA9IG5ld0xheWVyLmNvbmZpZ1tmaWVsZEtleV07XG4gICAgICBpZiAoY3VycmVudEZpZWxkKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWQgPSBuZXdEYXRhc2V0RmllbGRzLmZpbmQoZiA9PiBmLm5hbWUgPT09IGN1cnJlbnRGaWVsZC5uYW1lKTtcbiAgICAgICAgcmVtYXBwZWRGaWVsZHNbZmllbGRLZXldID0gbWF0Y2hlZCB8fCBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChPYmplY3Qua2V5cyhyZW1hcHBlZEZpZWxkcykubGVuZ3RoKSB7XG4gICAgICBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHJlbWFwcGVkRmllbGRzKTtcbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgZmllbGQgdHlwZSBjb21wYXRpYmlsaXR5IOKAlCBjbGVhcnMgZmllbGRzIHdob3NlIHR5cGUgaXMgaW5jb21wYXRpYmxlXG4gICAgLy8gd2l0aCB0aGUgY2hhbm5lbCdzIHN1cHBvcnRlZCBmaWVsZCB0eXBlcyAoZS5nLiBzdHJpbmcgZmllbGQgZm9yIGEgbnVtZXJpYyBzY2FsZSlcbiAgICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7a2V5fSkgPT4ge1xuICAgICAgbmV3TGF5ZXIudmFsaWRhdGVWaXN1YWxDaGFubmVsKGtleSk7XG4gICAgfSk7XG4gIH1cblxuICBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBpc1Zpc2libGU6IG9sZExheWVyLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgaXNDb25maWdBY3RpdmU6IHRydWVcbiAgfSk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCB1bmRlZmluZWQpO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEluaXRpYWxMYXllckNvbmZpZyhsYXllciwgZGF0YXNldHMsIGxheWVyQ2xhc3Nlcyk6IExheWVyIHtcbiAgbGV0IG5ld0xheWVyID0gbGF5ZXI7XG4gIGlmICghT2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aCkge1xuICAgIC8vIG5vIGRhdGEgaXMgbG9hZGVkXG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG4gIGlmICghbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIC8vIHNldCBsYXllciBkYXRhSWRcbiAgICBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWQ6IE9iamVjdC5rZXlzKGRhdGFzZXRzKVswXX0pO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG5cbiAgLy8gZmluZCBkZWZhdXQgbGF5ZXIgcHJvcHNcbiAgY29uc3QgcmVzdWx0ID1cbiAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIFtdKVxuICAgICAgOiB7cHJvcHM6IFtdfTtcblxuICAvLyBhbiBhcnJheSBvZiBwb3NzaWJsZSBwcm9wcywgdXNlIDFzdCBvbmVcbiAgY29uc3QgcHJvcHMgPSBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQgOiByZXN1bHQucHJvcHMgfHwgW107XG5cbiAgaWYgKHByb3BzLmxlbmd0aCkge1xuICAgIG5ld0xheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1tsYXllci50eXBlXSh7XG4gICAgICAuLi5wcm9wc1swXSxcbiAgICAgIGxhYmVsOiBuZXdMYXllci5jb25maWcubGFiZWwsXG4gICAgICBkYXRhSWQ6IG5ld0xheWVyLmNvbmZpZy5kYXRhSWQsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogbmV3TGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgICAgaXNWaXNpYmxlOiBuZXdMYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcgPT09ICdmdW5jdGlvbidcbiAgICA/IG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyhkYXRhc2V0KVxuICAgIDogbmV3TGF5ZXI7XG59XG4vKipcbiAqIFVwZGF0ZSBsYXllciB0eXBlLiBQcmV2aWV3cyBsYXllciBjb25maWcgd2lsbCBiZSBjb3BpZWQgaWYgYXBwbGljYWJsZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdUeXBlfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBvbGRJZCA9IG9sZExheWVyLmlkO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkSWQpO1xuXG4gIGlmICghc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgJHtuZXdUeXBlfSBpcyBub3QgYSB2YWxpZCBsYXllciB0eXBlYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0oe1xuICAgIC8vIGtlZXAgb2xkIGxheWVyIGxhYmxlIGFuZCBpc0NvbmZpZ0FjdGl2ZVxuICAgIGxhYmVsOiBvbGRMYXllci5jb25maWcubGFiZWwsXG4gICAgaXNDb25maWdBY3RpdmU6IG9sZExheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICBkYXRhSWQ6IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgfSk7XG5cbiAgaWYgKCFvbGRMYXllci50eXBlKSB7XG4gICAgLy8gaWYgc2V0dGluZyBsYXllciB0eXBlIG9uIGFuIGVtcHR5IGxheWVyXG4gICAgbmV3TGF5ZXIgPSBzZXRJbml0aWFsTGF5ZXJDb25maWcobmV3TGF5ZXIsIHN0YXRlLmRhdGFzZXRzLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIGdldCBhIG1pbnQgbGF5ZXIsIHdpdGggbmV3IGlkIGFuZCB0eXBlXG4gICAgLy8gYmVjYXVzZSBkZWNrLmdsIHVzZXMgaWQgdG8gbWF0Y2ggYmV0d2VlbiBuZXcgYW5kIG9sZCBsYXllci5cbiAgICAvLyBJZiB0eXBlIGhhcyBjaGFuZ2VkIGJ1dCBpZCBpcyB0aGUgc2FtZSwgaXQgd2lsbCBicmVha1xuXG4gICAgY29uc3QgZGVmYXVsdExheWVyUHJvcHMgPVxuICAgICAgdHlwZW9mIHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzKHN0YXRlLmRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdKVxuICAgICAgICA6IG51bGw7XG5cbiAgICBuZXdMYXllci5hc3NpZ25Db25maWdUb0xheWVyKFxuICAgICAgb2xkTGF5ZXIuY29uZmlnLFxuICAgICAgb2xkTGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MsXG4gICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgIGRlZmF1bHRMYXllclByb3BzXG4gICAgKTtcbiAgICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIH1cblxuICBjb25zdCB7Y2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvXG4gIH07XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCB8fCBvbGRMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICAvLyB1cGRhdGUgc3BsaXRNYXAgbGF5ZXIgaWRcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNldHRpbmdzID0+IHtcbiAgICAgICAgY29uc3Qge1tvbGRJZF06IG9sZExheWVyTWFwLCAuLi5vdGhlckxheWVyc30gPSBzZXR0aW5ncy5sYXllcnM7XG4gICAgICAgIHJldHVybiBvbGRJZCBpbiBzZXR0aW5ncy5sYXllcnNcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgIC4uLm90aGVyTGF5ZXJzLFxuICAgICAgICAgICAgICAgIFtsYXllci5pZF06IG9sZExheWVyTWFwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHNldHRpbmdzO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgLy8gdXBkYXRlIGxheWVyT3JkZXIgd2l0aCBuZXcgaWRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgb2xkTGF5ZXIuaWQsIG5ld0xheWVyLmlkKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBCaW5kIHZpc3VhbCBjaGFubmVsIGZpZWxkcyB0byB0aGUgZGF0YXNldCBmaWVsZCBvZiB0aGUgc2FtZSBuYW1lLlxuICogYGFkZERhdGFUb01hcGAgYW5kIGBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VgIG9mdGVuIHBhc3MgYHtuYW1lLCB0eXBlfWBcbiAqIG9yIHByb2Nlc3NvciBmaWVsZHMgd2hvc2UgdmFsdWVBY2Nlc3NvciBpcyBub3QgYm91bmQgdG8gdGhlIEtlcGxlclRhYmxlLCB3aGljaFxuICogbGVhdmVzIHN0cm9rZUNvbG9yRG9tYWluIGF0IGBbMCwgMV1gIChrZXBsZXIuZ2wgIzMwNjEpLlxuICovXG5mdW5jdGlvbiByZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQoXG4gIG5ld0NvbmZpZzogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25bJ25ld0NvbmZpZyddLFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSB8IHVuZGVmaW5lZCxcbiAgdmlzdWFsQ2hhbm5lbDogTGF5ZXJbJ3Zpc3VhbENoYW5uZWxzJ11bc3RyaW5nXSB8IHVuZGVmaW5lZFxuKSB7XG4gIGlmICghZGF0YXNldCB8fCAhdmlzdWFsQ2hhbm5lbCkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgY29uc3QgaW5jb21pbmcgPSBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF07XG4gIGlmICghaW5jb21pbmcgfHwgdHlwZW9mIGluY29taW5nICE9PSAnb2JqZWN0JyB8fCAhaW5jb21pbmcubmFtZSkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgY29uc3QgZm91bmQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGluY29taW5nLm5hbWUpO1xuICBpZiAoIWZvdW5kKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLm5ld0NvbmZpZyxcbiAgICBbdmlzdWFsQ2hhbm5lbC5maWVsZF06IGZvdW5kXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdWaXNDb25maWcsIGNoYW5uZWx9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGNvbnN0IG5ld0NvbmZpZyA9IHJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldChcbiAgICBhY3Rpb24ubmV3Q29uZmlnLFxuICAgIGRhdGFzZXQsXG4gICAgb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF1cbiAgKTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpO1xuICBpZiAobmV3VmlzQ29uZmlnKSBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIC8vIGNhbGxpbmcgdXBkYXRlIGFuaW1hdGlvbiBkb21haW4gZmlyc3QgdG8gbWVyZ2UgYWxsIGxheWVyIGFuaW1hdGlvbiBkb21haW5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG5cbiAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICBpZiAodmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiYgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdKSB7XG4gICAgLy8gaWYgY29sb3IgZmllbGQgY2hhbmdlZCwgc2V0IGN1c3RvbUJyZWFrcyB0byBmYWxzZVxuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgIGxheWVyczogdXBkYXRlZFN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvbGRMYXllckRhdGEgPSB1cGRhdGVkU3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgdXBkYXRlZFN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIGlmIChcbiAgICB2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJlxuICAgIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsPy5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiZcbiAgICAhbmV3VmlzQ29uZmlnXG4gICkge1xuICAgIC8vIHdoZW4gc3dpdGNoaW5nIHRvIGN1c3RvbU9yZGluYWwgc2NhbGUsIGNyZWF0ZSBhIGN1c3RvbVBhbGV0dGUgaW4gY29sb3JVSSB3aXRoIHVwZGF0ZWQgY29sb3JEb21haW5cbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0gaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlKHtcbiAgICAgIHNjYWxlOiBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsLFxuICAgICAgZmllbGQ6IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSxcbiAgICAgIG9yZGluYWxEb21haW46IGxheWVyLmNvbmZpZ1tsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5kb21haW5dLFxuICAgICAgcmFuZ2U6IGxheWVyLmNvbmZpZy52aXNDb25maWdbdmlzdWFsQ2hhbm5lbC5yYW5nZV0sXG4gICAgICBjb2xvckJyZWFrczogbnVsbFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSBjb2xvclJhbmdlIHdpdGggbmV3IGN1c3RvbVBhbGV0dGVcbiAgICBsYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgc2hvd0NvbG9yQ2hhcnQ6IHRydWUsXG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHVwZGF0ZWRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3VmlzQ29uZmlnKTtcblxuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICAvLyBKZW5rcyBicmVha3MgZGVwZW5kIG9uIHRoZSBudW1iZXIgb2YgY29sb3JzLiBSZWNhbGN1bGF0ZSB0aGUgZG9tYWluIHdoZW5cbiAgLy8gdGhlIGNvbG9yIHJhbmdlIG9mIGEgSmVua3MgY2hhbm5lbCBjaGFuZ2VzLlxuICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgICBpZiAoZGF0YXNldCkge1xuICAgICAgT2JqZWN0LmtleXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbEtleSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYW5uZWwgPSBuZXdMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsS2V5XTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoYW5uZWw/LnNjYWxlICYmXG4gICAgICAgICAgbmV3TGF5ZXIuY29uZmlnW2NoYW5uZWwuc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5qZW5rcyAmJlxuICAgICAgICAgIGNoYW5uZWwucmFuZ2UgJiZcbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYWN0aW9uLm5ld1Zpc0NvbmZpZywgY2hhbm5lbC5yYW5nZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWxLZXkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgLy8gRXhjbHVzaXZlIGJpdG1hcCBlZGl0aW5nOiB3aGVuIGVkaXRCb3VuZHMgaXMgdHVybmVkIG9uIGZvciBvbmUgYml0bWFwIGxheWVyLFxuICAvLyB0dXJuIGl0IG9mZiBmb3IgYWxsIG90aGVyIGJpdG1hcCBsYXllcnNcbiAgaWYgKG5ld0xheWVyLnR5cGUgPT09ICdiaXRtYXAnICYmIGFjdGlvbi5uZXdWaXNDb25maWcuZWRpdEJvdW5kcyA9PT0gdHJ1ZSkge1xuICAgIG5leHRTdGF0ZSA9IHtcbiAgICAgIC4uLm5leHRTdGF0ZSxcbiAgICAgIGxheWVyczogbmV4dFN0YXRlLmxheWVycy5tYXAoKGwsIGkpID0+IHtcbiAgICAgICAgaWYgKGkgIT09IGlkeCAmJiBsLnR5cGUgPT09ICdiaXRtYXAnICYmIGwuY29uZmlnLnZpc0NvbmZpZy5lZGl0Qm91bmRzKSB7XG4gICAgICAgICAgcmV0dXJuIGwudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgdmlzQ29uZmlnOiB7Li4ubC5jb25maWcudmlzQ29uZmlnLCBlZGl0Qm91bmRzOiBmYWxzZX1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gbmV4dFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV4dFN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG8gYSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge3ZhbHVlfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFMgPT4ge1xuICBjb25zdCBjdXJyZW50VGltZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWVcbiAgICB9XG4gIH07XG4gIC8vIHVwZGF0ZSBhbmltYXRpb24gY29uZmlnIGZvciBlYWNoIGxheWVyXG4gIHJldHVybiBzdGF0ZS5sYXllcnMucmVkdWNlKChhY2N1LCBsKSA9PiB7XG4gICAgaWYgKGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmIGwudHlwZSAhPT0gJ3RyaXAnKSB7XG4gICAgICByZXR1cm4gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyKGFjY3UsIHtvbGRMYXllcjogbCwgcHJvcDogJ2N1cnJlbnRUaW1lJywgY3VycmVudFRpbWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3dcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7aWQsIGFuaW1hdGlvbldpbmRvd306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBhbmltYXRpb25XaW5kb3dcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICBjb25zdCBuZXdTeW5jVGltZWxpbmVNb2RlID0gZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcik7XG5cbiAgcmV0dXJuIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7aWQsIG1vZGU6IG5ld1N5bmNUaW1lbGluZU1vZGV9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZpbHRlcklkLCBuZXdGaWx0ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIHRoZSBmaWx0ZXJzIHRvIG9ubHkgY29tcGFyZSB0aGUgc2F2ZWQgcHJvcGVydGllc1xuICBjb25zdCBzZXJpYWxpemVkT2xkRmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG9sZEZpbHRlciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIobmV3RmlsdGVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdGaWx0ZXIgfHwgaXNFcXVhbChzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgZmlsdGVyLCBhcHBseSB0aGVtXG4gIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpO1xuICBkZWxldGUgY2hhbmdlZFsnaWQnXTsgLy8gaWQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkXG5cbiAgY29uc3QgZmlsdGVySW5kZXggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlckluZGV4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihcbiAgICBzdGF0ZSxcbiAgICBzZXRGaWx0ZXIoZmlsdGVySW5kZXgsIE9iamVjdC5rZXlzKGNoYW5nZWQpLCBPYmplY3QudmFsdWVzKGNoYW5nZWQpKVxuICApO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeCwgdmFsdWVJbmRleCA9IDB9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSAmJlxuICAgICghQXJyYXkuaXNBcnJheShhY3Rpb24udmFsdWUpIHx8IGFjdGlvbi5wcm9wLmxlbmd0aCAhPT0gYWN0aW9uLnZhbHVlLmxlbmd0aClcbiAgKSB7XG4gICAgQ29uc29sZS5lcnJvcignRXhwZWN0aW5nIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHRoZSBzYW1lIGxlbmd0aCwgc2luY2UgcHJvcCBpcyBhbiBhcnJheScpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBjb252ZXJ0IHByb3AgYW5kIHZhbHVlIHRvIGFycmF5XG4gIGNvbnN0IHByb3BzID0gdG9BcnJheShhY3Rpb24ucHJvcCk7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApID8gdG9BcnJheShhY3Rpb24udmFsdWUpIDogW2FjdGlvbi52YWx1ZV07XG5cbiAgbGV0IG5ld0ZpbHRlciA9IG9sZEZpbHRlcjtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgcGFzc2luZyBpbiBuYW1lIGFzIGFuIGFycmF5IGludG8gX3VwZGF0ZUZpbHRlclByb3AsIHNvIHdlIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMgd2l0aCBlYWNoIG5hbWVcbiAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlcmUgYXMgdG8gd2hhdCBzaG91bGQgYmUgYWRkcmVzc2VkXG4gICAgbGV0IHJlcztcbiAgICBpZiAocHJvcCA9PT0gJ25hbWUnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICByZXMgPSB2YWx1ZS5yZWR1Y2UoKGFjY3UsIHYpID0+IHtcbiAgICAgICAgcmV0dXJuIF91cGRhdGVGaWx0ZXJQcm9wKGFjY3UsIG5ld0ZpbHRlciwgcHJvcCwgdiwgdmFsdWVJbmRleCk7XG4gICAgICB9LCBuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IF91cGRhdGVGaWx0ZXJQcm9wKG5ld1N0YXRlLCBuZXdGaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gICAgbmV3RmlsdGVyID0gcmVzLmZpbHRlcjtcbiAgICBuZXdTdGF0ZSA9IHJlcy5zdGF0ZTtcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBkYXRhc2V0SWRzVG9GaWx0ZXIuY29uY2F0KHJlcy5kYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICB9XG5cbiAgY29uc3QgZW5sYXJnZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkKTtcblxuICBpZiAoZW5sYXJnZWRGaWx0ZXIgJiYgZW5sYXJnZWRGaWx0ZXIuaWQgIT09IG5ld0ZpbHRlci5pZCkge1xuICAgIC8vIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBlbmxhcmdlZCBmaWx0ZXJcbiAgICBuZXdGaWx0ZXIudmlldyA9IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGU7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIHVuaXEoZGF0YXNldElkc1RvRmlsdGVyKSxcbiAgICBuZXdTdGF0ZS5kYXRhc2V0cyxcbiAgICBuZXdTdGF0ZS5maWx0ZXJzLFxuICAgIG5ld1N0YXRlLmxheWVyc1xuICApO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuXG4gIC8vIG5lZWQgdG8gdXBkYXRlIGZpbHRlclBsb3QgYWZ0ZXIgZmlsdGVyIERhdGFzZXQgZm9yIHBsb3QgdG8gdXBkYXRlIG9uIGZpbHRlcmVkIHJlc3VsdFxuICBjb25zdCBmaWx0ZXJXaXRoUExvdCA9IHVwZGF0ZUZpbHRlclBsb3QobmV3U3RhdGUuZGF0YXNldHMsIG5ld1N0YXRlLmZpbHRlcnNbaWR4XSk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgZmlsdGVyV2l0aFBMb3QsIG5ld1N0YXRlKTtcblxuICAvLyBkYXRhSWQgaXMgYW4gYXJyYXlcbiAgLy8gcGFzcyBvbmx5IHRoZSBkYXRhc2V0IHdlIG5lZWQgdG8gdXBkYXRlXG4gIG5ld1N0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIG5ld0ZpbHRlcik7XG5cbiAgLy8gSWYgdGltZSByYW5nZSBmaWx0ZXIgdmFsdWUgd2FzIHVwZGF0ZWQsIGFkanVzdCBhbmltYXRpb24gY29uZmlnXG4gIGlmIChuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBwcm9wcy5pbmNsdWRlcygndmFsdWUnKSkge1xuICAgIG5ld1N0YXRlID0gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgYWN0aW9uLmlkeCk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgZGF0YXNldHMpIHtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcbiAgaWYgKGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF0pIHtcbiAgICAvLyBpZiBkYXRhSWQgYWxyZWFkeSBleGlzdFxuICAgIG5ld0ZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cyk7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbmV3RmlsdGVyLmRhdGFJZC5zbGljZSgpO1xuICAgIG5leHRWYWx1ZVt2YWx1ZUluZGV4XSA9IHZhbHVlO1xuICAgIG5ld0ZpbHRlciA9IHNldChbJ2RhdGFJZCddLCBuZXh0VmFsdWUsIG5ld0ZpbHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ld0ZpbHRlcjtcbn1cblxuZnVuY3Rpb24gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSB7XG4gIGNvbnN0IGRhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG5cbiAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxICYmIHZhbHVlSW5kZXggPT09IDApIHtcbiAgICAvLyBpZiByZW1vdmUgdGhlIG9ubHkgZGF0YUlkLCBjcmVhdGUgYW4gZW1wdHkgZmlsdGVyIGluc3RlYWQ7XG4gICAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2lkOiBmaWx0ZXIuaWR9KTtcbiAgfVxuXG4gIGlmIChkYXRhSWQpIHtcbiAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YUlkKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBbXG4gICAgJ2RhdGFJZCcsXG4gICAgJ25hbWUnLFxuICAgICdmaWVsZElkeCcsXG4gICAgJ2dwdUNoYW5uZWwnLFxuICAgICdlbmROYW1lJyxcbiAgICAnZW5kRmllbGRJZHgnLFxuICAgICdlbmRNYXBwZWRWYWx1ZScsXG4gICAgJ2dwdUVuZENoYW5uZWwnXG4gIF0pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbcHJvcF0pKSB7XG4gICAgICBjb25zdCBuZXh0VmFsID0gZmlsdGVyW3Byb3BdLnNsaWNlKCk7XG4gICAgICBuZXh0VmFsLnNwbGljZSh2YWx1ZUluZGV4LCAxKTtcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIG5leHRWYWwsIGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2VGaWVsZERvbWFpbiBmb3IgdGhlIHJlbWFpbmluZyBmaWVsZHNcbiAgY29uc3QgZG9tYWluU3RlcHMgPSBtZXJnZUZpbHRlckRvbWFpbihmaWx0ZXIsIGRhdGFzZXRzKTtcblxuICBjb25zdCBuZXh0RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICAvLyB2YWx1ZTogbmV4dFZhbHVlLFxuICAgIC4uLihkb21haW5TdGVwcyA/IHtkb21haW46IGRvbWFpblN0ZXBzPy5kb21haW4sIHN0ZXA6IGRvbWFpblN0ZXBzPy5zdGVwfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV4dEZpbHRlci52YWx1ZSwgbmV4dEZpbHRlcik7XG4gIHJldHVybiB7XG4gICAgLi4ubmV4dEZpbHRlcixcbiAgICB2YWx1ZTogbmV4dFZhbHVlXG4gIH07XG59XG5cbi8qKiAqXG4gKiBVcGRhdGVzIGEgc2luZ2xlIHByb3BlcnR5IG9mIGEgZmlsdGVyXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJQcm9wKHN0YXRlLCBmaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4LCBkYXRhc2V0SWRzPykge1xuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBzd2l0Y2ggKHByb3ApIHtcbiAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBpZiB3ZSB1cGRhdGUgZmlsdGVyRGF0YUlkLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHR3byBjYXNlczpcbiAgICAvLyAxLiBkYXRhSWQgaXMgZW1wdHk6IGNyZWF0ZSBhIGRlZmF1bHQgZmlsdGVyXG4gICAgLy8gMi4gQWRkIGEgbmV3IGRhdGFzZXQgaWRcbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmRhdGFJZDoge1xuICAgICAgY29uc3Qgb2xkRGF0YUlkID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgZmlsdGVyID0gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1bmlxKFsuLi5vbGREYXRhSWQsIC4uLmZpbHRlci5kYXRhSWRdKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWU6IHtcbiAgICAgIC8vIHdlIGFyZSBzdXBwb3J0aW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uYWxpdHlcbiAgICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGZpbHRlciBuYW1lIHdpbGwgb25seSB1cGRhdGUgZmlsdGVyIG5hbWUgYnV0IGl0IHdvbid0IGhhdmUgc2lkZSBlZmZlY3RzXG4gICAgICAvLyB3ZSBhcmUgZ29ubmEgdXNlIHBhaXIgb2YgZGF0YXNldHMgYW5kIGZpZWxkSWR4IHRvIHVwZGF0ZSB0aGUgZmlsdGVyXG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleCxcbiAgICAgICAge21lcmdlRG9tYWluOiB2YWx1ZUluZGV4ID4gMH1cbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBpZiAoZmlsdGVyLmdwdSkge1xuICAgICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgICBmaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgLy8gcmVtb3ZlIGZpbHRlciBQbG90IGF0IGRhdGFzZXRJZCwgc28gaXQgd2lsbCBiZSByZWNhbGN1bGF0ZWRcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG5cbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICAvLyBvbmx5IGZpbHRlciB0aGUgY3VycmVudCBkYXRhc2V0XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmVuZE5hbWU6IHtcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleFxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgZmlsdGVyID0gZmlsdGVyLmdwdVxuICAgICAgICAgID8gYXNzaWduR3B1Q2hhbm5lbChmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpXG4gICAgICAgICAgOiB7Li4uZmlsdGVyLCBncHVDaGFubmVsOiB1bmRlZmluZWQsIGdwdUVuZENoYW5uZWw6IHVuZGVmaW5lZH07XG4gICAgICAgIHN0YXRlID0gc2V0KFsnZGF0YXNldHMnLCBkYXRhc2V0SWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG4gICAgICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhc2V0SWQpO1xuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDoge1xuICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgb25seSBkYXRhc2V0SWQvcyBpZiB3ZSBoYXZlIGFkZGVkL3JlbW92ZWQgbGF5ZXJzXG4gICAgICAvLyAtIGNoZWNrIGZvciBsYXllcklkIGNoYW5nZXMgKFhPUiB3b3JrcyBiZWNhdXNlIG9mIHN0cmluZyB2YWx1ZXMpXG4gICAgICAvLyBpZiBubyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxheWVySWRzLCBkb24ndCBkbyBhbnkgZmlsdGVyaW5nXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBsYXllcklkRGlmZmVyZW5jZSA9IHhvcih2YWx1ZSwgZmlsdGVyLmxheWVySWQpO1xuXG4gICAgICBjb25zdCBsYXllckRhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIGxheWVySWREaWZmZXJlbmNlXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIGRhdGFzZXRzSWRzXG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/Lm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBsYXllcklkOiB2YWx1ZSxcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRzXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIHZhbHVlLCBmaWx0ZXIpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge2ZpbHRlciwgZGF0YXNldElkcywgZGF0YXNldElkc1RvRmlsdGVyLCBzdGF0ZX07XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyUGxvdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgbmV3UHJvcH06IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIXN0YXRlLmZpbHRlcnNbaWR4XSkge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnNbJHtpZHh9XSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBmb3IgKGNvbnN0IHByb3AgaW4gbmV3UHJvcCkge1xuICAgIGlmIChwcm9wID09PSAncGxvdFR5cGUnKSB7XG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8obmV3UHJvcC5wbG90VHlwZSkpKG5ld0ZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChwcm9wID09PSAneUF4aXMnKSB7XG4gICAgICBjb25zdCBjaGFydFR5cGUgPSBuZXdQcm9wLnlBeGlzID8gUExPVF9UWVBFUy5saW5lQ2hhcnQgOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbTtcblxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHt0eXBlOiBjaGFydFR5cGV9KSkobWVyZ2VfKG5ld1Byb3ApKG5ld0ZpbHRlcikpO1xuICAgIH1cbiAgfVxuXG4gIG5ld0ZpbHRlciA9IHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcik7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGlkeCA/IG5ld0ZpbHRlciA6IGYpKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBkYXRhSWQsIGZpZWxkLCB2YWx1ZX0gPSBhY3Rpb247XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGlkKTtcbiAgbGV0IGZpbHRlckluZGV4ID0gb3JpZ2luYWxJbmRleDtcbiAgaWYgKCFpZCAmJiAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChvcmlnaW5hbEluZGV4IDwgMCAmJiBkYXRhSWQpIHtcbiAgICBuZXdTdGF0ZSA9IGFkZEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWR9KTtcbiAgICBpZiAobmV3U3RhdGUuZmlsdGVycy5sZW5ndGggIT09IHN0YXRlLmZpbHRlcnMubGVuZ3RoICsgMSkge1xuICAgICAgLy8gTm8gbmV3IGZpbHRlciB3YXMgYWRkZWRcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgZmlsdGVyIHdhcyBhZGRlZCBhdCB0aGUgZW5kXG4gICAgZmlsdGVySW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAtIDE7XG4gICAgbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0gPSB7XG4gICAgICAuLi5uZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSxcbiAgICAgIC4uLihpZCA/IHtpZH0gOiBudWxsKVxuICAgIH07XG4gIH1cblxuICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGlzIGlmIGl0J3MgYSBuZXdseSBjcmVhdGVkIGZpbHRlclxuICAvLyBGaXJzdCB3ZSBtYWtlIHN1cmUgYWxsIHRoZSBkYXRhSWRzIHRoYXQgZmllbGRzIHJlZmVyIHRvIGFyZSB1cGRhdGVkXG4gIGlmIChvcmlnaW5hbEluZGV4ID49IDAgJiYgZGF0YUlkKSB7XG4gICAgLy8gSWYgdGhlIGRhdGFJZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBvbmUgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGRhdGFJZCkgPyBkYXRhSWQgOiBbZGF0YUlkXSkucmVkdWNlKChhY2N1LCBkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnZGF0YUlkJyxcbiAgICAgICAgdmFsdWU6IGQsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIGZpZWxkc1xuICBpZiAoZmllbGQpIHtcbiAgICAvLyBJZiB0aGUgZmllbGQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkIDogW2ZpZWxkXSkucmVkdWNlKChhY2N1LCBmLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSB2YWx1ZSBzZXBhcmF0ZWx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJbmRleCwgcHJvcDogJ3ZhbHVlJywgdmFsdWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAnZGF0YUlkJyBpbiBjb25maWcgJiYgJ2FuaW1hdGlvbldpbmRvdycgaW4gY29uZmlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuICBpZiAoaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnKSkge1xuICAgIC8vIEZpbmQgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvblxuICAgIC8vIEFzc3VtaW5nIHRoZXJlJ3Mgb25seSBvbmUgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvbiwgc2VlIHNldEZpbHRlclZpZXdVcGRhdGVyXG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gIWlzU2lkZUZpbHRlcihmKSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3RmlsdGVyID0gey4uLmZpbHRlciwgLi4uY29uZmlnfTtcbiAgICByZXR1cm4gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKHN0YXRlLCBhcHBseUZpbHRlckNvbmZpZyhmaWx0ZXIuaWQsIG5ld0ZpbHRlcikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGlzQW5pbWF0aW5nOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmlzQW5pbWF0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaGlkZUNvbnRyb2w6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaGlkZUNvbnRyb2xcbiAgfVxufSk7XG5cbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7c3BlZWR9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHNwZWVkXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGxhcmdlciB0aW1lIGZpbHRlciBhdCBib3R0b20gZm9yIHRpbWUgcGxheWJhY2sgKGFwcGx5IHRvIHRpbWUgZmlsdGVyIG9ubHkpXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyVmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICBjb25zdCB7dmlldywgaWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qgc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3ID0gdmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+XG4gICAgICBpID09PSBpZHhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlld1xuICAgICAgICAgIH1cbiAgICAgICAgOiBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBmXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGVzIGZpbHRlciBmZWF0dXJlIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2FjdGlvbi5pZHhdO1xuICBjb25zdCBpc1Zpc2libGUgPSBnZXQoZmlsdGVyLCBbJ3ZhbHVlJywgJ3Byb3BlcnRpZXMnLCAnaXNWaXNpYmxlJ10pO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ2VuYWJsZWQnLFxuICAgIHZhbHVlOiAhaXNWaXNpYmxlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUsIGZpbHRlci5pZCwge1xuICAgICAgaXNWaXNpYmxlOiAhaXNWaXNpYmxlXG4gICAgfSlcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWQsIGlkfSA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBjb25zdCBuZXdGaWx0ZXJzID0gW1xuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoMCwgaWR4KSxcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmZpbHRlcnMubGVuZ3RoKVxuICBdO1xuXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKGRhdGFJZCwgc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0VkaXRvciA9XG4gICAgZ2V0RmlsdGVySWRJbkZlYXR1cmUoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZSkgPT09IGlkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGUuZWRpdG9yO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnXSwgbmV3RmlsdGVycywgc3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydlZGl0b3InXSwgbmV3RWRpdG9yLCBuZXdTdGF0ZSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YUlkLCB1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCBuZXdMYXllcjtcbiAgbGV0IG5ld0xheWVyRGF0YTtcbiAgaWYgKGFjdGlvbi5jb25maWcpIHtcbiAgICBuZXdMYXllciA9IGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZSwgYWN0aW9uLmNvbmZpZyk7XG4gICAgaWYgKCFuZXdMYXllcikge1xuICAgICAgQ29uc29sZS53YXJuKFxuICAgICAgICAnRmFpbGVkIHRvIGNyZWF0ZSBsYXllciBmcm9tIGNvbmZpZywgaXQgdXN1YWxseSBtZWFucyB0aGUgY29uZmlnIGlzIG5vdCBiZSBpbiBjb3JyZWN0IGZvcm1hdCcsXG4gICAgICAgIGFjdGlvbi5jb25maWdcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSk7XG4gICAgbmV3TGF5ZXIgPSByZXN1bHQubGF5ZXI7XG4gICAgbmV3TGF5ZXJEYXRhID0gcmVzdWx0LmxheWVyRGF0YTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbGF5ZXIgd2l0aCBhIHNwZWNpZmljIGRhdGFzZXQgb3IgYSBkZWZhdWx0IG9uZVxuICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gYWN0aW9uLmRhdGFzZXRJZCA/PyBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cylbMF07XG4gICAgbmV3TGF5ZXIgPSBuZXcgTGF5ZXIoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHRydWUsXG4gICAgICBkYXRhSWQ6IGRlZmF1bHREYXRhc2V0XG4gICAgfSk7XG4gICAgbmV3TGF5ZXJEYXRhID0ge307XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCBuZXdMYXllcl0sXG4gICAgbGF5ZXJEYXRhOiBbLi4uc3RhdGUubGF5ZXJEYXRhLCBuZXdMYXllckRhdGFdLFxuICAgIC8vIGFkZCBuZXcgbGF5ZXIgYXQgdGhlIHRvcFxuICAgIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZCwgLi4uc3RhdGUubGF5ZXJPcmRlcl0sXG4gICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXIpXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGF5ZXJVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgLy8gaW52YWxpZCBpbmRleFxuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgbGF5ZXIgd2l0aCBpbnZhbGlkIGlkfGlkeCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnMsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgY2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuICBjb25zdCBsYXllclRvUmVtb3ZlID0gbGF5ZXJzW2lkeF07XG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogZmlsdGVyT3V0QnlJZChsYXllclRvUmVtb3ZlLmlkKShsYXllcnMpLFxuICAgIGxheWVyRGF0YTogcmVtb3ZlRWxlbWVudEF0SW5kZXgoaWR4KShsYXllckRhdGEpLFxuICAgIGxheWVyT3JkZXI6IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllck9yZGVyLCBsYXllclRvUmVtb3ZlLmlkKSxcbiAgICBjbGlja2VkOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mbyxcbiAgICBzcGxpdE1hcHM6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyVG9SZW1vdmUpXG4gICAgLy8gVE9ETzogdXBkYXRlIGZpbHRlcnMsIGNyZWF0ZSBoZWxwZXIgdG8gcmVtb3ZlIGxheWVyIGZvcm0gZmlsdGVyIChyZW1vdmUgbGF5ZXJpZCBhbmQgZGF0YWlkKSBpZiBtYXBwZWRcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKFxuICAgIHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMoXG4gICAgICBuZXdTdGF0ZSxcbiAgICAgIGNoYXJ0ID0+IGlzTGF5ZXJDaGFydENvbmZpZyhjaGFydCkgJiYgY2hhcnQubGF5ZXJJZCA9PT0gbGF5ZXJUb1JlbW92ZS5pZFxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZW9yZGVyIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyT3JkZXI6IG9yZGVyXG59KTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TmV3TGF5ZXJHcm91cChhY3Rpb24pO1xuICBsZXQgbmV3TGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICBpZiAoYWN0aW9uLmxheWVyT3JkZXIpIHtcbiAgICBhY3Rpb24ubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyT3JkZXI6IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllckdyb3VwKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBncm91cCBhbmQgYWxsIGxheWVycyB3aXRoaW4gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwVG9SZW1vdmUgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXBUb1JlbW92ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGxheWVySWRzVG9SZW1vdmUgPSBnZXRGbGF0TGF5ZXJPcmRlcihsYXllckdyb3VwVG9SZW1vdmUubGF5ZXJPcmRlcik7XG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgbGF5ZXJJZHNUb1JlbW92ZS5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIG5ld1N0YXRlID0gcmVtb3ZlTGF5ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWQ6IGxheWVySWR9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cFRvUmVtb3ZlKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhIGxheWVyIGdyb3VwIChsYWJlbCwgdmlzaWJpbGl0eSwgbGF5ZXIgbWVtYmVyc2hpcClcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIG9wdGlvbnN9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBpZiAob3B0aW9ucy5sYXllck9yZGVyKSB7XG4gICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5sYXllckdyb3VwLmxheWVyT3JkZXIsIC4uLm5ld1N0YXRlLmxheWVyT3JkZXJdO1xuICAgIG9wdGlvbnMubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwID0ge1xuICAgIC4uLmxheWVyR3JvdXAsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuXG4gIGlmIChuZXdMYXllckdyb3VwLmlzVmlzaWJsZSAhPT0gbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICBjb25zdCBsYXllcklkcyA9IGdldEZsYXRMYXllck9yZGVyKG5ld0xheWVyR3JvdXAubGF5ZXJPcmRlcik7XG4gICAgbmV3U3RhdGUgPSBuZXdTdGF0ZS5sYXllcnMucmVkdWNlKChhY2MsIGxheWVyKSA9PiB7XG4gICAgICBpZiAobGF5ZXJJZHMuaW5jbHVkZXMobGF5ZXIuaWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoYWNjLCB7XG4gICAgICAgICAgb2xkTGF5ZXI6IGxheWVyLFxuICAgICAgICAgIG5ld0NvbmZpZzoge2lzVmlzaWJsZTogbmV3TGF5ZXJHcm91cC5pc1Zpc2libGV9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBuZXdMYXllckdyb3VwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIGxheWVyIHRvIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgaWYgKCFsYXllckdyb3VwIHx8ICFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZChlbnRyeSA9PiBlbnRyeSA9PT0gbGF5ZXJJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZnJvbSBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cE9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0xheWVyR3JvdXBPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFN3YXAgbGF5ZXIgb3JkZXIgZW50cmllcyBiZXR3ZWVuIHJvb3QgYW5kIGdyb3Vwc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCBzd2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge29yaWdpbkxheWVySWQsIGRlc3RpbmF0aW9uTGF5ZXJJZCwgb3JpZ2luTGF5ZXJHcm91cElkLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH0gPSBhY3Rpb247XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3Qgb3JpZ2luSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICApO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQgJiYgb3JpZ2luSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheU1vdmUoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RpbmF0aW9uSW5kZXgpO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGxldCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBuZXdMYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGZhbHNlXG4gICAgICApO1xuICAgICAgbmV3TGF5ZXJPcmRlci5zcGxpY2UoZGVzdGluYXRpb25JbmRleCA9PT0gLTEgPyAwIDogZGVzdGluYXRpb25JbmRleCwgMCwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSBbLi4ubmV3TGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZF07XG4gICAgfVxuICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGlmIChvcmlnaW5MYXllckdyb3VwSWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgICApO1xuICAgICAgICBpZiAoZGVzdEluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvLyBDcm9zcy1ncm91cCBtb3ZlOiByZW1vdmUgZnJvbSBvcmlnaW4sIHRoZW4gYWRkIHRvIGRlc3RpbmF0aW9uXG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBsZXQgbmV3U3RhdGUgPSBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcblxuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgZGVzdGluYXRpb25MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IG9yaWdpbkxheWVySWQpO1xuICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCAhPT0gLTEgJiYgZGVzdEluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIHJldHVybiBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbi8qKlxuICogZHVwbGljYXRlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8ICFzdGF0ZS5sYXllcnNbaWR4XSkge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXIgJHtpZHh9IG5vdCBmb3VuZCBpbiBsYXllck9yZGVyYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWwgPSBsYXllcnNbaWR4XTtcblxuICBjb25zdCBvcmlnaW5hbExheWVyT3JkZXJJZHggPSBnZXRJbmRleEZyb21MYXllckVudHJ5SWQoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuICBsZXQgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH1gO1xuICBsZXQgcG9zdGZpeCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgd2hpbGUgKGxheWVycy5maW5kKGwgPT4gbC5jb25maWcubGFiZWwgPT09IG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9ICR7Kytwb3N0Zml4fWA7XG4gIH1cblxuICAvLyBjb2xsZWN0IGxheWVyIGNvbmZpZyBmcm9tIG9yaWdpbmFsXG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIob3JpZ2luYWwsIHN0YXRlLnNjaGVtYSk7XG5cbiAgLy8gYXNzaWduIG5ldyBpZCBhbmQgbGFiZWwgdG8gY29waWVkIGxheWVyXG4gIGlmICghbG9hZGVkTGF5ZXI/LmNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsb2FkZWRMYXllci5jb25maWcubGFiZWwgPSBuZXdMYWJlbDtcbiAgbG9hZGVkTGF5ZXIuaWQgPSBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gIC8vIGFkZCBsYXllciB0byBzdGF0ZVxuICBsZXQgbmV4dFN0YXRlID0gYWRkTGF5ZXJVcGRhdGVyKHN0YXRlLCB7Y29uZmlnOiBsb2FkZWRMYXllcn0pO1xuICAvLyByZXRyaWV2ZSBuZXdseSBjcmVhdGVkIGxheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gbmV4dFN0YXRlLmxheWVyc1tuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCAtIDFdO1xuXG4gIC8vIENoZWNrIGlmIHRoZSBvcmlnaW5hbCBsYXllciBpcyBpbnNpZGUgYSBncm91cFxuICBjb25zdCBwYXJlbnRHcm91cCA9IGZpbmRQYXJlbnRHcm91cEZvckxheWVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcblxuICBpZiAocGFyZW50R3JvdXApIHtcbiAgICAvLyBMYXllciBpcyBpbnNpZGUgYSBncm91cCAtIHJlbW92ZSB0aGUgcHJlcGVuZGVkIGlkIGZyb20gcm9vdCBhbmQgaW5zZXJ0IGludG8gdGhlIGdyb3VwXG4gICAgY29uc3QgbGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQgPSBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxKTtcbiAgICBjb25zdCBpZHhJbkdyb3VwID0gcGFyZW50R3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZSA9PiBlID09PSBvcmlnaW5hbC5pZCk7XG4gICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlJbnNlcnQocGFyZW50R3JvdXAubGF5ZXJPcmRlciwgaWR4SW5Hcm91cCwgbmV3TGF5ZXIuaWQpO1xuICAgIGNvbnN0IHVwZGF0ZWRHcm91cCA9IHsuLi5wYXJlbnRHcm91cCwgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfTtcbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCwgdXBkYXRlZEdyb3VwKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgYXQgcm9vdCBsZXZlbCAtIHVzZSBvcmlnaW5hbCBpbmRleC1iYXNlZCBpbnNlcnRpb25cbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlJbnNlcnQoXG4gICAgICBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxLCBuZXh0U3RhdGUubGF5ZXJPcmRlci5sZW5ndGgpLFxuICAgICAgb3JpZ2luYWxMYXllck9yZGVySWR4LFxuICAgICAgbmV3TGF5ZXIuaWRcbiAgICApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUpXG4gICkge1xuICAgIENvbnNvbGUud2FybihgQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgJHtMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC5uYW1lfSBlZmZlY3RgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3QgPSBjcmVhdGVFZmZlY3QoYWN0aW9uLmNvbmZpZyk7XG5cbiAgLy8gY29sbGFwc2UgY29uZmlndXJhdG9ycyBmb3Igb3RoZXIgZWZmZWN0c1xuICBzdGF0ZS5lZmZlY3RzLmZvckVhY2goZWZmZWN0ID0+IGVmZmVjdC5zZXRQcm9wcyh7aXNDb25maWdBY3RpdmU6IGZhbHNlfSkpO1xuXG4gIGNvbnN0IGVmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0cywgbmV3RWZmZWN0XTtcbiAgY29uc3QgZWZmZWN0T3JkZXIgPSBmaXhFZmZlY3RPcmRlcihlZmZlY3RzLCBbbmV3RWZmZWN0LmlkLCAuLi5zdGF0ZS5lZmZlY3RPcmRlcl0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiByZW1vdmUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2VmZmVjdHMsIGVmZmVjdE9yZGVyfSA9IHN0YXRlO1xuICBjb25zdCBlZmZlY3RUb1JlbW92ZSA9IGVmZmVjdHNbaWR4XTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGZpeGVkIGluIHRzXG4gICAgZWZmZWN0czogZmlsdGVyT3V0QnlJZChlZmZlY3RUb1JlbW92ZS5pZCkoZWZmZWN0cyksXG4gICAgZWZmZWN0T3JkZXI6IGVmZmVjdE9yZGVyLmZpbHRlcihlZmZlY3RJZCA9PiBlZmZlY3RJZCAhPT0gZWZmZWN0VG9SZW1vdmUuaWQpXG4gIH07XG59O1xuXG4vKipcbiAqIFJlb3JkZXIgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZWZmZWN0T3JkZXI6IGZpeEVmZmVjdE9yZGVyKHN0YXRlLmVmZmVjdHMsIFsuLi5vcmRlcl0pXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHByb3BzfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBlZmZlY3RPcmRlciA9IHN0YXRlLmVmZmVjdE9yZGVyO1xuICBpZiAocHJvcHMuaWQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5pZCAhPT0gaWQpIHtcbiAgICBjb25zdCBpZHgyID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBwcm9wcy5pZCk7XG4gICAgaWYgKGlkeDIgPj0gMCkge1xuICAgICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBleGlzdGluZyBlZmZlY3QgaWQgJHtpZH1gKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBlZmZlY3RPcmRlciA9IGVmZmVjdE9yZGVyLm1hcChlZmZlY3RPcmRlcklkID0+XG4gICAgICBlZmZlY3RPcmRlcklkID09PSBpZCA/IChwcm9wcy5pZCBhcyBzdHJpbmcpIDogZWZmZWN0T3JkZXJJZFxuICAgICk7XG4gIH1cblxuICBjb25zdCBlZmZlY3QgPSBzdGF0ZS5lZmZlY3RzW2lkeF07XG4gIGNvbnN0IG5leHRQYXJhbXMgPSBwcm9wcy5wYXJhbWV0ZXJzO1xuICAvLyBBIHRpbWVzdGFtcC1vbmx5IG5vLW9wIHN0aWxsIHVzZWQgdG8gYWxsb2NhdGUgYSBuZXcgdmlzU3RhdGUgKHNldFByb3BzXG4gIC8vIG11dGF0ZXMgaW4gcGxhY2UpLiBUaGF0IHJldHJpZ2dlcmVkIG5lc3RlZCByZWFjdC1yZWR1eCBjb25uZWN0IHN1YnNjcmliZXJzXG4gIC8vIHdoaWxlIGRyYWdnaW5nIHRoZSBMaWdodCAmIFNoYWRvdyBkYXktdGltZSBzbGlkZXIgdW50aWwgUmVhY3QgdGhyZXdcbiAgLy8gXCJNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZFwiLlxuICBpZiAoXG4gICAgbmV4dFBhcmFtcyAmJlxuICAgIE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGggPT09IDEgJiZcbiAgICBPYmplY3Qua2V5cyhuZXh0UGFyYW1zKS5sZW5ndGggPT09IDEgJiZcbiAgICBuZXh0UGFyYW1zLnRpbWVzdGFtcCAhPSBudWxsICYmXG4gICAgbmV4dFBhcmFtcy50aW1lc3RhbXAgPT09IGVmZmVjdC5wYXJhbWV0ZXJzLnRpbWVzdGFtcFxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHNdO1xuICBuZXdFZmZlY3RzW2lkeF0uc2V0UHJvcHMocHJvcHMpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNMYXllckNoYXJ0Q29uZmlnKGNoYXJ0OiBDaGFydENvbmZpZyk6IGNoYXJ0IGlzIExheWVyQ2hhcnRDb25maWcge1xuICByZXR1cm4gY2hhcnQudHlwZSA9PT0gJ2xheWVyQ2hhcnQnO1xufVxuXG5mdW5jdGlvbiBtZXJnZUNoYXJ0Q29uZmlnKGNoYXJ0OiBDaGFydENvbmZpZywgcHJvcHM6IFBhcnRpYWw8Q2hhcnRDb25maWc+KTogQ2hhcnRDb25maWcge1xuICByZXR1cm4ge1xuICAgIC4uLmNoYXJ0LFxuICAgIC4uLnByb3BzLFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIC4uLmNoYXJ0LmRpc3BsYXksXG4gICAgICAuLi4ocHJvcHMuZGlzcGxheSB8fCB7fSlcbiAgICB9LFxuICAgIGNoYXJ0RGlzcGxheToge1xuICAgICAgLi4uY2hhcnQuY2hhcnREaXNwbGF5LFxuICAgICAgLi4uKChwcm9wcyBhcyBDaGFydENvbmZpZykuY2hhcnREaXNwbGF5IHx8IHt9KVxuICAgIH1cbiAgfSBhcyBDaGFydENvbmZpZztcbn1cblxuZnVuY3Rpb24gYXhpc0ZpZWxkSWZQcmVzZW50PFQgZXh0ZW5kcyB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGw7IHRpdGxlPzogc3RyaW5nIHwgbnVsbH0+KFxuICBheGlzOiBUIHwgdW5kZWZpbmVkLFxuICBmaWVsZE5hbWVzOiBTZXQ8c3RyaW5nPlxuKTogVCB8IHVuZGVmaW5lZCB7XG4gIGlmICghYXhpcz8uZmllbGQ/Lm5hbWUgfHwgZmllbGROYW1lcy5oYXMoYXhpcy5maWVsZC5uYW1lKSkge1xuICAgIHJldHVybiBheGlzO1xuICB9XG4gIHJldHVybiB7Li4uYXhpcywgZmllbGQ6IG51bGwsIHRpdGxlOiBudWxsfTtcbn1cblxuZnVuY3Rpb24gZHJvcE1pc3NpbmdDaGFydEZpZWxkcyhcbiAgY2hhcnQ6IENoYXJ0Q29uZmlnLFxuICBkYXRhc2V0OiB7ZmllbGRzPzoge25hbWU6IHN0cmluZ31bXX0gfCB1bmRlZmluZWRcbik6IENoYXJ0Q29uZmlnIHtcbiAgY29uc3QgZmllbGROYW1lcyA9IG5ldyBTZXQoKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkubWFwKGZpZWxkID0+IGZpZWxkLm5hbWUpKTtcbiAgY29uc3QgbmV4dCA9IGNoYXJ0IGFzIENoYXJ0Q29uZmlnICYge1xuICAgIHhBeGlzPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgICB5QXhpcz86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgYXhpcz86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgZ3JvdXBCeT86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgdmFsdWU/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICB9O1xuICByZXR1cm4gbWVyZ2VDaGFydENvbmZpZyhjaGFydCwge1xuICAgIHhBeGlzOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC54QXhpcywgZmllbGROYW1lcyksXG4gICAgeUF4aXM6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LnlBeGlzLCBmaWVsZE5hbWVzKSxcbiAgICBheGlzOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC5heGlzLCBmaWVsZE5hbWVzKSxcbiAgICBncm91cEJ5OiBheGlzRmllbGRJZlByZXNlbnQobmV4dC5ncm91cEJ5LCBmaWVsZE5hbWVzKSxcbiAgICB2YWx1ZTogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQudmFsdWUsIGZpZWxkTmFtZXMpXG4gIH0gYXMgUGFydGlhbDxDaGFydENvbmZpZz4pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGFydHNBbmRGaWx0ZXJzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBzaG91bGRSZW1vdmU6IChjaGFydDogQ2hhcnRDb25maWcpID0+IGJvb2xlYW5cbik6IFQge1xuICBjb25zdCBjaGFydHMgPSBzdGF0ZS5jaGFydHMgfHwgW107XG4gIGNvbnN0IHJlbW92ZWQgPSBjaGFydHMuZmlsdGVyKHNob3VsZFJlbW92ZSk7XG4gIGlmICghcmVtb3ZlZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcmVtb3ZlZElkcyA9IG5ldyBTZXQocmVtb3ZlZC5tYXAoY2hhcnQgPT4gY2hhcnQuaWQpKTtcbiAgY29uc3QgZmlsdGVySWRzID0gbmV3IFNldChcbiAgICByZW1vdmVkLmZsYXRNYXAoY2hhcnQgPT4ge1xuICAgICAgY29uc3QgaWQgPSBjaGFydC5jcm9zc0ZpbHRlcj8uZmlsdGVySWQ7XG4gICAgICByZXR1cm4gaWQgPyBbaWQsIGAke2lkfS14YCwgYCR7aWR9LXlgXSA6IFtdO1xuICAgIH0pXG4gICk7XG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0czogY2hhcnRzLmZpbHRlcihjaGFydCA9PiAhcmVtb3ZlZElkcy5oYXMoY2hhcnQuaWQpKVxuICB9O1xuICBpZiAoZmlsdGVySWRzLnNpemUpIHtcbiAgICBuZXh0U3RhdGUgPSBuZXh0U3RhdGUuZmlsdGVycy5yZWR1Y2VSaWdodCgoYWNjdSwgZmlsdGVyLCBpZHgpID0+IHtcbiAgICAgIHJldHVybiBmaWx0ZXJJZHMuaGFzKGZpbHRlci5pZCkgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKGFjY3UsIHtpZHh9KSA6IGFjY3U7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlIGFzIFQ7XG59XG5cbi8qKlxuICogQWRkIGEgY2hhcnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRDaGFydFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2NoYXJ0fTogVmlzU3RhdGVBY3Rpb25zLkFkZENoYXJ0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIWNoYXJ0Py5pZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoKHN0YXRlLmNoYXJ0cyB8fCBbXSkuc29tZShleGlzdGluZyA9PiBleGlzdGluZy5pZCA9PT0gY2hhcnQuaWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2hhcnRzOiBbXG4gICAgICAuLi4oc3RhdGUuY2hhcnRzIHx8IFtdKS5tYXAoZXhpc3RpbmcgPT4gKHtcbiAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAuLi5leGlzdGluZy5kaXNwbGF5LFxuICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KSksXG4gICAgICB7XG4gICAgICAgIC4uLmNoYXJ0LFxuICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgLi4uY2hhcnQuZGlzcGxheSxcbiAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogY2hhcnQuZGlzcGxheT8uaXNDb25maWdBY3RpdmUgPz8gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGEgY2hhcnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVDaGFydFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVDaGFydFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gKHN0YXRlLmNoYXJ0cyB8fCBbXSkuZmluZEluZGV4KGNoYXJ0ID0+IGNoYXJ0LmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHByZXYgPSBzdGF0ZS5jaGFydHNbaWR4XTtcbiAgY29uc3QgZGF0YUlkQ2hhbmdlZCA9IHR5cGVvZiBwcm9wcy5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHByb3BzLmRhdGFJZCAhPT0gcHJldi5kYXRhSWQ7XG4gIGNvbnN0IGxheWVySWRDaGFuZ2VkID1cbiAgICBpc0xheWVyQ2hhcnRDb25maWcocHJldikgJiZcbiAgICB0eXBlb2YgKHByb3BzIGFzIExheWVyQ2hhcnRDb25maWcpLmxheWVySWQgPT09ICdzdHJpbmcnICYmXG4gICAgKHByb3BzIGFzIExheWVyQ2hhcnRDb25maWcpLmxheWVySWQgIT09IHByZXYubGF5ZXJJZDtcbiAgbGV0IG5leHQgPSBtZXJnZUNoYXJ0Q29uZmlnKHByZXYsIHByb3BzKTtcbiAgaWYgKGRhdGFJZENoYW5nZWQgfHwgbGF5ZXJJZENoYW5nZWQpIHtcbiAgICBjb25zdCBkYXRhSWQgPSBuZXh0LmRhdGFJZCB8fCB1bmRlZmluZWQ7XG4gICAgbmV4dCA9IGRyb3BNaXNzaW5nQ2hhcnRGaWVsZHMobmV4dCwgZGF0YUlkID8gc3RhdGUuZGF0YXNldHNbZGF0YUlkXSA6IHVuZGVmaW5lZCk7XG4gICAgaWYgKG5leHQuY3Jvc3NGaWx0ZXI/LmVuYWJsZWQpIHtcbiAgICAgIG5leHQgPSBtZXJnZUNoYXJ0Q29uZmlnKG5leHQsIHtcbiAgICAgICAgY3Jvc3NGaWx0ZXI6IHsuLi5uZXh0LmNyb3NzRmlsdGVyLCBlbmFibGVkOiBmYWxzZSwgdmFsdWU6IHt9LCBmaWVsZE5hbWVzOiB7fX1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBjb25zdCBjaGFydHMgPSBbLi4uc3RhdGUuY2hhcnRzXTtcbiAgY2hhcnRzW2lkeF0gPSBuZXh0O1xuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjaGFydHNcbiAgfTtcbiAgY29uc3QgZmlsdGVySWQgPSBuZXh0LmNyb3NzRmlsdGVyPy5maWx0ZXJJZCB8fCBwcmV2LmNyb3NzRmlsdGVyPy5maWx0ZXJJZDtcbiAgaWYgKHByZXYuY3Jvc3NGaWx0ZXI/LmVuYWJsZWQgJiYgIW5leHQuY3Jvc3NGaWx0ZXI/LmVuYWJsZWQgJiYgZmlsdGVySWQpIHtcbiAgICBjb25zdCBvd25lZEZpbHRlcklkcyA9IG5ldyBTZXQoW2ZpbHRlcklkLCBgJHtmaWx0ZXJJZH0teGAsIGAke2ZpbHRlcklkfS15YF0pO1xuICAgIG5leHRTdGF0ZSA9IG5leHRTdGF0ZS5maWx0ZXJzLnJlZHVjZVJpZ2h0KChhY2N1LCBmaWx0ZXIsIGlkeCkgPT4ge1xuICAgICAgcmV0dXJuIG93bmVkRmlsdGVySWRzLmhhcyhmaWx0ZXIuaWQpID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihhY2N1LCB7aWR4fSkgOiBhY2N1O1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgY2hhcnQgYW5kIGFueSBjcm9zcy1maWx0ZXIgaXQgb3duc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUNoYXJ0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlQ2hhcnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiByZW1vdmVDaGFydHNBbmRGaWx0ZXJzKHN0YXRlLCBjaGFydCA9PiBjaGFydC5pZCA9PT0gaWQpO1xuXG4vLyBBTk5PVEFUSU9OIFVQREFURVJTXG5cbmZ1bmN0aW9uIG1ha2VOZXdBbm5vdGF0aW9uKGNvbmZpZz86IEFubm90YXRpb25Qcm9wc1BhcnRpYWwpOiBBbm5vdGF0aW9uIHtcbiAgY29uc3Qga2luZCA9IGNvbmZpZz8ua2luZCA/PyBJTklUSUFMX0FOTk9UQVRJT05fS0lORDtcbiAgY29uc3QgcHJvdmlkZWRBbmdsZSA9IE51bWJlci5pc0Zpbml0ZSgoY29uZmlnIGFzIGFueSk/LmFuZ2xlKSA/IChjb25maWcgYXMgYW55KS5hbmdsZSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZGVyaXZlZEZyb21BbmdsZSA9XG4gICAgcHJvdmlkZWRBbmdsZSAhPSBudWxsID8gdGV4dFBsYWNlbWVudEZyb21BbmdsZShwcm92aWRlZEFuZ2xlKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdGV4dFNpZGUgPVxuICAgIGNvbmZpZz8udGV4dFNpZGUgPz9cbiAgICBkZXJpdmVkRnJvbUFuZ2xlPy5zaWRlID8/XG4gICAgKGtpbmQgPT09IEFubm90YXRpb25LaW5kLlRFWFQgPyB1bmRlZmluZWQgOiBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9TSURFKTtcbiAgY29uc3QgdGV4dFZlcnRpY2FsUG9zaXRpb24gPVxuICAgIGNvbmZpZz8udGV4dFZlcnRpY2FsUG9zaXRpb24gPz9cbiAgICBkZXJpdmVkRnJvbUFuZ2xlPy52ZXJ0aWNhbCA/P1xuICAgIChraW5kID09PSBBbm5vdGF0aW9uS2luZC5URVhUID8gdW5kZWZpbmVkIDogSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04pO1xuICBjb25zdCBiYXNlID0ge1xuICAgIGlkOiBjb25maWc/LmlkID8/IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGtpbmQsXG4gICAgaXNWaXNpYmxlOiBjb25maWc/LmlzVmlzaWJsZSA/PyB0cnVlLFxuICAgIGF1dG9TaXplOiBjb25maWc/LmF1dG9TaXplID8/IHRydWUsXG4gICAgYXV0b1NpemVZOiBjb25maWc/LmF1dG9TaXplWSA/PyB0cnVlLFxuICAgIGFuY2hvclBvaW50OiBjb25maWc/LmFuY2hvclBvaW50ID8/IChbMCwgMF0gYXMgW251bWJlciwgbnVtYmVyXSksXG4gICAgbGFiZWw6IGNvbmZpZz8ubGFiZWwgPz8gJ05ldyBBbm5vdGF0aW9uJyxcbiAgICBsaW5lQ29sb3I6IGNvbmZpZz8ubGluZUNvbG9yID8/IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICAgIGxpbmVXaWR0aDogY29uZmlnPy5saW5lV2lkdGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gICAgdGV4dFdpZHRoOiBjb25maWc/LnRleHRXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgICB0ZXh0SGVpZ2h0OiBjb25maWc/LnRleHRIZWlnaHQgPz8gSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICAgIHRleHRWZXJ0aWNhbEFsaWduOiBjb25maWc/LnRleHRWZXJ0aWNhbEFsaWduID8/ICgnYm90dG9tJyBhcyBjb25zdCksXG4gICAgLi4uKHRleHRTaWRlID8ge3RleHRTaWRlfSA6IHt9KSxcbiAgICAuLi4odGV4dFZlcnRpY2FsUG9zaXRpb24gPyB7dGV4dFZlcnRpY2FsUG9zaXRpb259IDoge30pLFxuICAgIG1hcEluZGV4OiBjb25maWc/Lm1hcEluZGV4XG4gIH07XG5cbiAgY29uc3QgZGVmYXVsdEFuZ2xlID1cbiAgICB0ZXh0U2lkZSAmJiB0ZXh0VmVydGljYWxQb3NpdGlvblxuICAgICAgPyBBTk5PVEFUSU9OX0FOR0xFX0JZX1BMQUNFTUVOVFtgJHt0ZXh0U2lkZX0tJHt0ZXh0VmVydGljYWxQb3NpdGlvbn1gXVxuICAgICAgOiBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEU7XG5cbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5QT0lOVDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLlBPSU5ULFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogcHJvdmlkZWRBbmdsZSA/PyBkZWZhdWx0QW5nbGVcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5BUlJPVzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLkFSUk9XLFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogcHJvdmlkZWRBbmdsZSA/PyBkZWZhdWx0QW5nbGVcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5DSVJDTEU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5DSVJDTEUsXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiBwcm92aWRlZEFuZ2xlID8/IGRlZmF1bHRBbmdsZSxcbiAgICAgICAgcmFkaXVzSW5NZXRlcnM6IChjb25maWcgYXMgYW55KT8ucmFkaXVzSW5NZXRlcnMgPz8gMTAwMFxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlRFWFQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLlRFWFRcbiAgICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG5ld0Fubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbihhY3Rpb24uY29uZmlnKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogdHJ1ZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBzdGF0ZS5hbm5vdGF0aW9ucy5maWx0ZXIoYSA9PiBhLmlkICE9PSBpZCksXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IG51bGwgOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDpcbiAgICAgIHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IGZhbHNlIDogc3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHRcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kSW5kZXgoYSA9PiBhLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwcmV2ID0gc3RhdGUuYW5ub3RhdGlvbnNbaWR4XTtcbiAgbGV0IG5leHRBbm5vdGF0aW9uOiBBbm5vdGF0aW9uO1xuXG4gIGlmIChjb25maWcua2luZCAmJiBjb25maWcua2luZCAhPT0gcHJldi5raW5kKSB7XG4gICAgbmV4dEFubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbih7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0QW5ub3RhdGlvbiA9IHsuLi5wcmV2LCAuLi5jb25maWd9IGFzIEFubm90YXRpb247XG4gIH1cblxuICBjb25zdCBuZXdBbm5vdGF0aW9ucyA9IFsuLi5zdGF0ZS5hbm5vdGF0aW9uc107XG4gIG5ld0Fubm90YXRpb25zW2lkeF0gPSBuZXh0QW5ub3RhdGlvbjtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogbmV3QW5ub3RhdGlvbnNcbiAgfTtcbn07XG5cbi8qKlxuICogRHVwbGljYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb3JpZ2luYWwgPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kKGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoIW9yaWdpbmFsKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IGR1cGxpY2F0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdBbm5vdGF0aW9uID0ge1xuICAgIC4uLmNsb25lRGVlcChvcmlnaW5hbCksXG4gICAgaWQ6IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGxhYmVsOiBgQ29weSBvZiAke29yaWdpbmFsLmxhYmVsfWBcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogU2V0IHNlbGVjdGVkIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgaXNFZGl0aW5nVGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBpZCA9PT0gc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgJiZcbiAgICAoaXNFZGl0aW5nVGV4dCA/PyBmYWxzZSkgPT09IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBpZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogaXNFZGl0aW5nVGV4dCA/PyBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVCB7XG4gIC8vIGV4dHJhY3QgZGF0YXNldCBrZXlcbiAgY29uc3Qge2RhdGFJZDogZGF0YXNldEtleX0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcblxuICAvLyBjaGVjayBpZiBkYXRhc2V0IGlzIHByZXNlbnRcbiAgaWYgKCFkYXRhc2V0c1tkYXRhc2V0S2V5XSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBsYXllcnMsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGRhdGFzZXRzOiB7W2RhdGFzZXRLZXldOiBkYXRhc2V0LCAuLi5uZXdEYXRhc2V0c31cbiAgfSA9IHN0YXRlO1xuXG4gIGNvbnN0IGxheWVyc1RvUmVtb3ZlID0gbGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YXNldEtleSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgLy8gcmVtb3ZlIGxheWVycyBhbmQgZGF0YXNldHNcbiAgbGV0IG5ld1N0YXRlID0gbGF5ZXJzVG9SZW1vdmUucmVkdWNlKChhY2N1LCBpZCkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZH0pLCB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG5ld0RhdGFzZXRzXG4gIH0pO1xuXG4gIC8vIHVwZGF0ZSBmaWx0ZXJzXG4gIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XG4gIGZvciAoY29uc3QgZmlsdGVyIG9mIG5ld1N0YXRlLmZpbHRlcnMpIHtcbiAgICBjb25zdCB2YWx1ZUluZGV4ID0gZmlsdGVyLmRhdGFJZC5pbmRleE9mKGRhdGFzZXRLZXkpO1xuICAgIGlmICh2YWx1ZUluZGV4ID49IDAgJiYgZmlsdGVyLmRhdGFJZC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBvbmx5IHJlbW92ZSBvbmUgc3luY2VkIGRhdGFzZXQgZnJvbSB0aGUgZmlsdGVyXG4gICAgICBmaWx0ZXJzLnB1c2goX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZUluZGV4IDwgMCkge1xuICAgICAgLy8gbGVhdmUgdGhlIGZpbHRlciBhcyBpc1xuICAgICAgZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgbmV3U3RhdGUgPSB7Li4ubmV3U3RhdGUsIGZpbHRlcnN9O1xuXG4gIHJldHVybiByZW1vdmVDaGFydHNBbmRGaWx0ZXJzKFxuICAgIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcobmV3U3RhdGUsIHtkYXRhSWQ6IGRhdGFzZXRLZXl9KSxcbiAgICBjaGFydCA9PiB7XG4gICAgICBpZiAoY2hhcnQuZGF0YUlkID09PSBkYXRhc2V0S2V5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzTGF5ZXJDaGFydENvbmZpZyhjaGFydCkpIHtcbiAgICAgICAgcmV0dXJuIGxheWVyc1RvUmVtb3ZlLmluY2x1ZGVzKGNoYXJ0LmxheWVySWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhzdGF0ZSwge2RhdGFJZH0pIHtcbiAgbGV0IHtpbnRlcmFjdGlvbkNvbmZpZ30gPSBzdGF0ZTtcbiAgY29uc3Qge3Rvb2x0aXB9ID0gaW50ZXJhY3Rpb25Db25maWc7XG4gIGlmICh0b29sdGlwKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0b29sdGlwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7W2RhdGFJZF06IGZpZWxkcywgLi4uZmllbGRzVG9TaG93fSA9IGNvbmZpZy5maWVsZHNUb1Nob3c7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHsuLi50b29sdGlwLCBjb25maWc6IHsuLi5jb25maWcsIGZpZWxkc1RvU2hvd319XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7Li4uc3RhdGUsIGludGVyYWN0aW9uQ29uZmlnfTtcbn1cbi8qKlxuICogdXBkYXRlIGxheWVyIGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyQmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiB1cGRhdGUgb3ZlcmxheSBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgb3ZlcmxheUJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93RGF0YXNldFRhYmxlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRpbmdEYXRhc2V0OiBhY3Rpb24uZGF0YUlkXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBjdXN0b20gY29sb3IgZm9yIGRhdGFzZXRzIGFuZCBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2NvbG9yOiBhY3Rpb24ubmV3Q29sb3J9fSk7XG59O1xuXG4vKipcbiAqIHJlc2V0IHZpc1N0YXRlIHRvIGluaXRpYWwgU3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZXNldE1hcENvbmZpZ1VwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gIC4uLnN0YXRlLmluaXRpYWxTdGF0ZSxcbiAgaW5pdGlhbFN0YXRlOiBzdGF0ZS5pbml0aWFsU3RhdGVcbn0pO1xuXG4vKipcbiAqIFByb3BhZ2F0ZSBgdmlzU3RhdGVgIHJlZHVjZXIgd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uLiBDdXJyZW50IGNvbmZpZyB3aWxsIGJlIG92ZXJyaWRlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Y29uZmlnID0ge30sIG9wdGlvbnMgPSB7fX1cbiAgfToge1xuICAgIHR5cGU/OiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVDRUlWRV9NQVBfQ09ORklHO1xuICAgIHBheWxvYWQ6IFJlY2VpdmVNYXBDb25maWdQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghY29uZmlnLnZpc1N0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2tlZXBFeGlzdGluZ0NvbmZpZ30gPSBvcHRpb25zO1xuXG4gIC8vIHJlc2V0IGNvbmZpZyBpZiBrZWVwRXhpc3RpbmdDb25maWcgaXMgZmFsc3lcbiAgbGV0IG1lcmdlZFN0YXRlID0gIWtlZXBFeGlzdGluZ0NvbmZpZyA/IHJlc2V0TWFwQ29uZmlnVXBkYXRlcihzdGF0ZSkgOiBzdGF0ZTtcbiAgZm9yIChjb25zdCBtZXJnZXIgb2Ygc3RhdGUubWVyZ2Vycykge1xuICAgIGlmIChpc1ZhbGlkTWVyZ2VyKG1lcmdlcikgJiYgaGFzUHJvcHNUb01lcmdlKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3ApKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlci5tZXJnZShcbiAgICAgICAgbWVyZ2VkU3RhdGUsXG4gICAgICAgIGdldFByb3BWYWx1ZVRvTWVyZ2VyKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3AsIG1lcmdlci50b01lcmdlUHJvcCksXG4gICAgICAgIC8vIGZyb21Db25maWdcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkU3RhdGU7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVySG92ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBob3ZlckluZm86IHtcbiAgICAvLyBkZWNrLmdsIGluZm8gaXMgbXV0YWJsZVxuICAgIC4uLmFjdGlvbi5pbmZvLFxuICAgIC4uLihOdW1iZXIuaXNGaW5pdGUoYWN0aW9uLm1hcEluZGV4KSA/IHttYXBJbmRleDogYWN0aW9uLm1hcEluZGV4fSA6IHt9KVxuICB9XG59KTtcblxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcblxuICBjb25zdCBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAuLi57W2NvbmZpZy5pZF06IGNvbmZpZ31cbiAgfTtcblxuICAvLyBEb24ndCBlbmFibGUgdG9vbHRpcCBhbmQgYnJ1c2ggYXQgdGhlIHNhbWUgdGltZVxuICAvLyBidXQgY29vcmRpbmF0ZXMgY2FuIGJlIHNob3duIGF0IGFsbCB0aW1lXG4gIGNvbnN0IGNvbnRyYWRpY3QgPSBbJ2JydXNoJywgJ3Rvb2x0aXAnXTtcblxuICBpZiAoXG4gICAgY29udHJhZGljdC5pbmNsdWRlcyhjb25maWcuaWQpICYmXG4gICAgY29uZmlnLmVuYWJsZWQgJiZcbiAgICAhc3RhdGUuaW50ZXJhY3Rpb25Db25maWdbY29uZmlnLmlkXS5lbmFibGVkXG4gICkge1xuICAgIC8vIG9ubHkgZW5hYmxlIG9uZSBpbnRlcmFjdGlvbiBhdCBhIHRpbWVcbiAgICBjb250cmFkaWN0LmZvckVhY2goayA9PiB7XG4gICAgICBpZiAoayAhPT0gY29uZmlnLmlkKSB7XG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnW2tdID0gey4uLmludGVyYWN0aW9uQ29uZmlnW2tdLCBlbmFibGVkOiBmYWxzZX07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICB9O1xuXG4gIGlmIChjb25maWcuaWQgPT09ICdnZW9jb2RlcicgJiYgIWNvbmZpZy5lbmFibGVkKSB7XG4gICAgcmV0dXJuIHJlbW92ZURhdGFzZXRVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkOiAnZ2VvY29kZXJfZGF0YXNldCd9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGNsaWNrIGV2ZW50IHdpdGggY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbW91c2VQb3M6IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgcGlubmVkOiBzdGF0ZS5tb3VzZVBvcy5waW5uZWQgPyBudWxsIDogY2xvbmVEZWVwKHN0YXRlLm1vdXNlUG9zKVxuICAgICAgfVxuICAgIDogc3RhdGUubW91c2VQb3MsXG4gIGNsaWNrZWQ6IGFjdGlvbi5pbmZvICYmIGFjdGlvbi5pbmZvLnBpY2tlZCA/IGFjdGlvbi5pbmZvIDogbnVsbFxufSk7XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgY2xpY2sgZXZlbnQsIHVuc2VsZWN0IGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbWFwQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25NYXBDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBudWxsXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIG1vdmUgZXZlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtb3VzZU1vdmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtldnR9OiBWaXNTdGF0ZUFjdGlvbnMuT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChPYmplY3QudmFsdWVzKHN0YXRlLmludGVyYWN0aW9uQ29uZmlnKS5zb21lKGNvbmZpZyA9PiBjb25maWcuZW5hYmxlZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBtb3VzZVBvczoge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LnBvaW50KSA/IHttb3VzZVBvc2l0aW9uOiBbLi4uZXZ0LnBvaW50XX0gOiB7fSksXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5sbmdMYXQpID8ge2Nvb3JkaW5hdGU6IFsuLi5ldnQubG5nTGF0XX0gOiB7fSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBmb3IgYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICBzdGF0ZS5zcGxpdE1hcHMgJiYgc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA9PT0gMFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgLy8gbWF5YmUgd2Ugc2hvdWxkIHVzZSBhbiBhcnJheSB0byBzdG9yZSBzdGF0ZSBmb3IgYSBzaW5nbGUgbWFwIGFzIHdlbGxcbiAgICAgICAgLy8gaWYgY3VycmVudCBtYXBzIGxlbmd0aCBpcyBlcXVhbCB0byAwIGl0IG1lYW5zIHRoYXQgd2UgYXJlIGFib3V0IHRvIHNwbGl0IHRoZSB2aWV3XG4gICAgICAgIHNwbGl0TWFwczogY29tcHV0ZVNwbGl0TWFwTGF5ZXJzKHN0YXRlLmxheWVycywge2R1cGxpY2F0ZTogZmFsc2V9KVxuICAgICAgfVxuICAgIDogY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgoc3RhdGUsIGFjdGlvbik7XG5cbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bWFwSW5kZXgsIGxheWVySWR9OiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtzcGxpdE1hcHN9ID0gc3RhdGU7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IHNwbGl0TWFwcy5tYXAoKHNtLCBpKSA9PlxuICAgICAgaSA9PT0gbWFwSW5kZXhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0sXG4gICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLmxheWVycyxcbiAgICAgICAgICAgICAgLy8gaWYgbGF5ZXJJZCBub3QgaW4gbGF5ZXJzLCBzZXQgaXQgdG8gdmlzaWJsZVxuICAgICAgICAgICAgICBbbGF5ZXJJZF06ICFzcGxpdE1hcHNbaV0ubGF5ZXJzW2xheWVySWRdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNtXG4gICAgKVxuICB9O1xufTtcblxuZnVuY3Rpb24gaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGE/OiBQcm90b0RhdGFzZXRbJ2RhdGEnXSB8IG51bGwpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgZGF0YT8ucm93cz8ubGVuZ3RoIHx8IGRhdGE/LmNvbHM/Lmxlbmd0aCB8fCAoZGF0YSBhcyB7YXJyb3dUYWJsZT86IHVua25vd259KT8uYXJyb3dUYWJsZVxuICApO1xufVxuXG5mdW5jdGlvbiBuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQ6IFByb3RvRGF0YXNldCk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGRhdGFzZXQuaW5mbz8udHlwZSA9PT0gRGF0YXNldFR5cGUuRVhURVJOQUxMWV9IT1NURUQgJiZcbiAgICB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlID09PSAnc3RyaW5nJyAmJlxuICAgICFoYXNUYWJ1bGFyRGF0YXNldERhdGEoZGF0YXNldC5kYXRhKVxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCh7XG4gIGFyZzogZGF0YXNldCxcbiAgb25Qcm9ncmVzc1xufToge1xuICBhcmc6IFByb3RvRGF0YXNldDtcbiAgb25Qcm9ncmVzczogKHByb2dyZXNzOiB7bG9hZGVkOiBudW1iZXI7IHRvdGFsPzogbnVtYmVyOyBwZXJjZW50OiBudW1iZXJ9KSA9PiB2b2lkO1xufSk6IFByb21pc2U8UHJvdG9EYXRhc2V0PiB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBkYXRhc2V0O1xuICB9XG4gIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCh7XG4gICAgc291cmNlOiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgYXMgc3RyaW5nLFxuICAgIGZvcm1hdDogZ2V0UmVtb3RlU291cmNlRm9ybWF0KGRhdGFzZXQubWV0YWRhdGEpLFxuICAgIHNpemU6IHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zaXplID09PSAnbnVtYmVyJyA/IGRhdGFzZXQubWV0YWRhdGEuc2l6ZSA6IHVuZGVmaW5lZCxcbiAgICBieXBhc3NDYWNoZTogZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zKGRhdGFzZXQubWV0YWRhdGEpID4gMCxcbiAgICBvblByb2dyZXNzXG4gIH0pO1xuICBpZiAoIWxvYWRlZC5kYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBkYXRhIGxvYWRlZCBmcm9tICR7ZGF0YXNldC5tZXRhZGF0YT8uc291cmNlfWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uZGF0YXNldCxcbiAgICBkYXRhOiBsb2FkZWQuZGF0YSxcbiAgICBtZXRhZGF0YToge1xuICAgICAgLi4uZGF0YXNldC5tZXRhZGF0YSxcbiAgICAgIGV0YWc6IGxvYWRlZC5ldGFnLFxuICAgICAgbGFzdE1vZGlmaWVkOiBsb2FkZWQubGFzdE1vZGlmaWVkLFxuICAgICAgLi4uKHR5cGVvZiBsb2FkZWQuc2l6ZSA9PT0gJ251bWJlcicgPyB7c2l6ZTogbG9hZGVkLnNpemV9IDoge30pLFxuICAgICAgbGFzdEZldGNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgIHJlZnJlc2hTdGF0dXM6ICdpZGxlJ1xuICAgIH1cbiAgfTtcbn1cblxuY29uc3QgSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlV2l0aFByb2dyZXNzKFxuICBoeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCxcbiAgJ0hZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLJ1xuKTtcblxuY29uc3QgRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZShhc3luYyAobWVzc2FnZTogc3RyaW5nKSA9PiB7XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn0sICdGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0snKTtcblxuZnVuY3Rpb24gZ2V0RGF0YXNldFByb2dyZXNzSWQoZGF0YXNldDogUHJvdG9EYXRhc2V0LCBpbmRleCA9IDApOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGRhdGFzZXQuaW5mbz8uaWQgPT09ICdzdHJpbmcnICYmIGRhdGFzZXQuaW5mby5pZCkge1xuICAgIHJldHVybiBkYXRhc2V0LmluZm8uaWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgPT09ICdzdHJpbmcnICYmIGRhdGFzZXQubWV0YWRhdGEuc291cmNlKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQubWV0YWRhdGEuc291cmNlO1xuICB9XG4gIHJldHVybiBgZGF0YXNldC0ke2luZGV4fWA7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5ld0RhdGFFbnRyeVRhc2soZGF0YXNldDogUHJvdG9EYXRhc2V0LCBkYXRhc2V0czogRGF0YXNldHMpIHtcbiAgaWYgKCFuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZU5ld0RhdGFFbnRyeShkYXRhc2V0LCBkYXRhc2V0cyk7XG4gIH1cbiAgY29uc3QgcHJvZ3Jlc3NJZCA9IGdldERhdGFzZXRQcm9ncmVzc0lkKGRhdGFzZXQpO1xuICByZXR1cm4gSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0soe1xuICAgIGFyZzogZGF0YXNldCxcbiAgICBvblByb2dyZXNzOiBwcm9ncmVzcyA9PlxuICAgICAgc2V0TG9hZGluZ1Byb2dyZXNzKHByb2dyZXNzSWQsIE1hdGgucm91bmQoKHByb2dyZXNzPy5wZXJjZW50ID8/IDApICogMTAwKSlcbiAgfSkuY2hhaW4oaHlkcmF0ZWQgPT4ge1xuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnkoaHlkcmF0ZWQsIGRhdGFzZXRzKTtcbiAgICByZXR1cm4gKFxuICAgICAgdGFzayB8fFxuICAgICAgRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLKCdGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9ycycpXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyTG9hZGluZ1Byb2dyZXNzKHN0YXRlOiBWaXNTdGF0ZSwgaWRzPzogc3RyaW5nW10pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGN1cnJlbnQgPSBzdGF0ZS5sb2FkaW5nUHJvZ3Jlc3MgfHwge307XG4gIGlmICghT2JqZWN0LmtleXMoY3VycmVudCkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICgoc3RhdGUubG9hZGluZ0luZGljYXRvclZhbHVlIHx8IDApIDw9IDApIHtcbiAgICByZXR1cm4gey4uLnN0YXRlLCBsb2FkaW5nUHJvZ3Jlc3M6IHt9fTtcbiAgfVxuICBpZiAoIWlkcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHQgPSB7Li4uY3VycmVudH07XG4gIGlkcy5mb3JFYWNoKGlkID0+IHtcbiAgICBkZWxldGUgbmV4dFtpZF07XG4gIH0pO1xuICByZXR1cm4gey4uLnN0YXRlLCBsb2FkaW5nUHJvZ3Jlc3M6IG5leHR9O1xufVxuXG5mdW5jdGlvbiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0OiBEYXRhc2V0c1tzdHJpbmddLCBwYXRjaDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgcmV0dXJuIGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7XG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICAuLi5wYXRjaFxuICAgIH1cbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUoe1xuICBhcmc6IG1ldGFkYXRhLFxuICBvblByb2dyZXNzXG59OiB7XG4gIGFyZzoge1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIGZvcm1hdD86IHN0cmluZztcbiAgICBzaXplPzogbnVtYmVyO1xuICAgIGV0YWc/OiBzdHJpbmc7XG4gICAgbGFzdE1vZGlmaWVkPzogc3RyaW5nO1xuICB9O1xuICBvblByb2dyZXNzOiAocHJvZ3Jlc3M6IHtsb2FkZWQ6IG51bWJlcjsgdG90YWw/OiBudW1iZXI7IHBlcmNlbnQ6IG51bWJlcn0pID0+IHZvaWQ7XG59KSB7XG4gIC8vIEZldGNoIG9ubHkuIERvIG5vdCBtdXRhdGUgdGhlIFJlZHV4IHRhYmxlIGhlcmU6IHByb2dyZXNzIGV2ZW50cyBjb3B5IGl0LCBhbmRcbiAgLy8gdGhlIHN1Y2Nlc3MgdXBkYXRlciBhcHBsaWVzIHRoZSBzbmFwc2hvdCB0byB3aGF0ZXZlciBpbnN0YW5jZSBpcyBpbiB0aGUgc3RvcmUuXG4gIHJldHVybiBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoey4uLm1ldGFkYXRhLCBvblByb2dyZXNzLCBieXBhc3NDYWNoZTogdHJ1ZX0pO1xufVxuXG5jb25zdCBSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MoXG4gIHJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUsXG4gICdSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbi8qKlxuICogUmUtZmV0Y2ggYW4gZXh0ZXJuYWxseSBob3N0ZWQgZGF0YXNldCBhbmQgcmVwbGFjZSBpdHMgdGFibGUgY29udGVudHMgaW4gcGxhY2UuXG4gKiBMYXllcnMgYW5kIGZpbHRlcnMgYXJlIGtlcHQgd2hlbiBmaWVsZCBuYW1lcyBtYXRjaC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmIChcbiAgICAhZGF0YXNldCB8fFxuICAgIGRhdGFzZXQudHlwZSAhPT0gRGF0YXNldFR5cGUuRVhURVJOQUxMWV9IT1NURUQgfHxcbiAgICB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hTdGF0dXMgPT09ICdsb2FkaW5nJykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHREYXRhc2V0ID0gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge1xuICAgIHJlZnJlc2hTdGF0dXM6ICdsb2FkaW5nJyxcbiAgICByZWZyZXNoRXJyb3I6IHVuZGVmaW5lZCxcbiAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IG5leHREYXRhc2V0XG4gICAgICB9XG4gICAgfSxcbiAgICBSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyh7XG4gICAgICBhcmc6IHtcbiAgICAgICAgc291cmNlOiBuZXh0RGF0YXNldC5tZXRhZGF0YS5zb3VyY2UgYXMgc3RyaW5nLFxuICAgICAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChuZXh0RGF0YXNldC5tZXRhZGF0YSksXG4gICAgICAgIHNpemU6IHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplID09PSAnbnVtYmVyJyA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgICAgIGV0YWc6IHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnID09PSAnc3RyaW5nJyA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLmV0YWcgOiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3RNb2RpZmllZDpcbiAgICAgICAgICB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5sYXN0TW9kaWZpZWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAgb25Qcm9ncmVzczogcHJvZ3Jlc3MgPT5cbiAgICAgICAgcmVmcmVzaERhdGFzZXRQcm9ncmVzcyhkYXRhSWQsIE1hdGgucm91bmQoKHByb2dyZXNzPy5wZXJjZW50ID8/IDApICogMTAwKSlcbiAgICB9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiByZWZyZXNoRGF0YXNldFN1Y2Nlc3MoZGF0YUlkLCByZXN1bHQpLFxuICAgICAgKGVycm9yOiBFcnJvcikgPT4gcmVmcmVzaERhdGFzZXRFcnJvcihkYXRhSWQsIGVycm9yKVxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZWNvcmQgZG93bmxvYWQgcHJvZ3Jlc3MgZm9yIGFuIGluLWZsaWdodCByZW1vdGUgZGF0YXNldCByZWZyZXNoLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHBlcmNlbnR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCB8fCBkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzICE9PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dFBlcmNlbnQgPSBOdW1iZXIuaXNGaW5pdGUocGVyY2VudClcbiAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChwZXJjZW50KSkpXG4gICAgOiAwO1xuICBpZiAoZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFByb2dyZXNzID09PSBuZXh0UGVyY2VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7cmVmcmVzaFByb2dyZXNzOiBuZXh0UGVyY2VudH0pXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBmaWVsZE5hbWVzRXF1YWwoY3VycmVudDoge25hbWU6IHN0cmluZ31bXSwgaW5jb21pbmc/OiB7bmFtZTogc3RyaW5nfVtdIHwgbnVsbCk6IGJvb2xlYW4ge1xuICBpZiAoIWluY29taW5nPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoY3VycmVudC5sZW5ndGggIT09IGluY29taW5nLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gY3VycmVudC5ldmVyeSgoZmllbGQsIGkpID0+IGZpZWxkLm5hbWUgPT09IGluY29taW5nW2ldLm5hbWUpO1xufVxuXG4vKipcbiAqIFdoZW4gYSByZW1vdGUgc25hcHNob3QgY2hhbmdlcyBjb2x1bW4gbmFtZXMsIG9sZCBsYXllciBmaWVsZElkeCAvIGZpbHRlciBuYW1lc1xuICogY2FuIHBvaW50IGF0IHRoZSB3cm9uZyBjb2x1bW4uIFJlLWJpbmQgYnkgbmFtZSBhbmQgZHJvcCBjb25maWdzIHRoYXQgbm8gbG9uZ2VyIGZpdC5cbiAqL1xuZnVuY3Rpb24gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhc2V0czogVmlzU3RhdGVbJ2RhdGFzZXRzJ11cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IG5leHRMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZHJvcHBlZExheWVyczogTGF5ZXJbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBpZiAobGF5ZXIuY29uZmlnLmRhdGFJZCAhPT0gZGF0YUlkKSB7XG4gICAgICBuZXh0TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWJvdW5kID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzLCBsYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgICBpZiAocmVib3VuZD8uaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICBuZXh0TGF5ZXJzLnB1c2gocmVib3VuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyb3BwZWRMYXllcnMucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICBsZXQgbmV4dExheWVyT3JkZXIgPSBzdGF0ZS5sYXllck9yZGVyO1xuICBsZXQgbmV4dFNwbGl0TWFwcyA9IHN0YXRlLnNwbGl0TWFwcztcbiAgZHJvcHBlZExheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBuZXh0TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXh0TGF5ZXJPcmRlciwgbGF5ZXIuaWQpO1xuICAgIG5leHRTcGxpdE1hcHMgPSByZW1vdmVMYXllckZyb21TcGxpdE1hcHMobmV4dFNwbGl0TWFwcywgbGF5ZXIpO1xuICB9KTtcblxuICBjb25zdCBuZXh0TGF5ZXJEYXRhID0gbmV4dExheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgIGNvbnN0IG9sZElkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgob2xkTGF5ZXIgPT4gb2xkTGF5ZXIuaWQgPT09IGxheWVyLmlkKTtcbiAgICByZXR1cm4gb2xkSWR4ID49IDAgPyBzdGF0ZS5sYXllckRhdGFbb2xkSWR4XSA6IHt9O1xuICB9KTtcblxuICBjb25zdCBmaWx0ZXJzRm9yRGF0YXNldCA9IHN0YXRlLmZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiB0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuICBjb25zdCBvdGhlckZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gIXRvQXJyYXkoZmlsdGVyLmRhdGFJZCkuaW5jbHVkZXMoZGF0YUlkKSk7XG5cbiAgY29uc3Qge3ZhbGlkYXRlZCwgdXBkYXRlZERhdGFzZXRzfSA9IHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzKFxuICAgIHsuLi5zdGF0ZSwgZGF0YXNldHMsIGxheWVyczogbmV4dExheWVyc30sXG4gICAgZmlsdGVyc0ZvckRhdGFzZXRcbiAgKTtcblxuICBjb25zdCBuZXh0RmlsdGVycyA9IFsuLi5vdGhlckZpbHRlcnMsIC4uLnZhbGlkYXRlZF07XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIFtkYXRhSWRdLFxuICAgIHVwZGF0ZWREYXRhc2V0cyxcbiAgICBuZXh0RmlsdGVycyxcbiAgICBuZXh0TGF5ZXJzXG4gICk7XG5cbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHMsXG4gICAgbGF5ZXJzOiBuZXh0TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV4dExheWVyRGF0YSxcbiAgICBsYXllck9yZGVyOiBuZXh0TGF5ZXJPcmRlcixcbiAgICBzcGxpdE1hcHM6IG5leHRTcGxpdE1hcHMsXG4gICAgZmlsdGVyczogbmV4dEZpbHRlcnNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuLyoqXG4gKiBBcHBseSBhIGZpbmlzaGVkIHJlbW90ZSByZWZyZXNoOiBrZWVwIGxheWVycywgcmUtcnVuIGZpbHRlcnMgYW5kIGxheWVyIGRhdGEuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByZXN1bHR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbWV0YWRhdGFQYXRjaCA9IHtcbiAgICByZWZyZXNoU3RhdHVzOiAnaWRsZScsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWQsXG4gICAgbGFzdEZldGNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICAvLyBBbHdheXMgd3JpdGUgdmFsaWRhdG9ycy4gQSAyMDAgdGhhdCBvbWl0cyB0aGVtIG11c3Qgbm90IGtlZXAgdGhlIHByZXZpb3VzXG4gICAgLy8gRVRhZyBvciBhIGxhdGVyIDMwNCBjYW4gc2tpcCBhIGJvZHkgd2Ugbm8gbG9uZ2VyIGhhdmUuXG4gICAgZXRhZzogcmVzdWx0LmV0YWcsXG4gICAgbGFzdE1vZGlmaWVkOiByZXN1bHQubGFzdE1vZGlmaWVkLFxuICAgIC4uLih0eXBlb2YgcmVzdWx0LnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IHJlc3VsdC5zaXplfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IHNjaGVtYVVuY2hhbmdlZCA9IGZpZWxkTmFtZXNFcXVhbChkYXRhc2V0LmZpZWxkcywgcmVzdWx0LmRhdGE/LmZpZWxkcyk7XG5cbiAgLy8gQXBwbHkgdGhlIHNuYXBzaG90IHRvIHRoZSB0YWJsZSBjdXJyZW50bHkgaW4gdGhlIHN0b3JlLiBQcm9ncmVzcyBtYXkgaGF2ZVxuICAvLyBjb3BpZWQgaXQgb2ZmIHRoZSBvYmplY3QgdGhhdCBzdGFydGVkIHRoZSBmZXRjaDsgdGhlIHRhc2sgbmV2ZXIgbXV0YXRlcyBpdC5cbiAgaWYgKCFyZXN1bHQubm90TW9kaWZpZWQgJiYgcmVzdWx0LmRhdGEpIHtcbiAgICAvLyBLZXBsZXJUYWJsZS51cGRhdGUgaXMgYXN5bmMgc28gRHVja0RCIGNhbiBhd2FpdCBBcnJvdyBjb252ZXJzaW9uLiBUaGVcbiAgICAvLyBDU1YvR2VvSlNPTiBwYXRoIChhbmQgS2VwbGVyVGFibGUuaW1wb3J0RGF0YSkgcnVuIHN5bmNocm9ub3VzbHkgYmVmb3JlXG4gICAgLy8gdGhlIGZpcnN0IGF3YWl0LCBzbyB0aGUgc3RvcmUgdGFibGUgaXMgdXBkYXRlZCBiZWZvcmUgd2UgY29weSBpdCBiZWxvdy5cbiAgICB2b2lkIGRhdGFzZXQudXBkYXRlKHJlc3VsdC5kYXRhKTtcbiAgfVxuXG4gIGNvbnN0IHJlZnJlc2hlZCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIG1ldGFkYXRhUGF0Y2gpO1xuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogcmVmcmVzaGVkXG4gIH07XG5cbiAgaWYgKHJlc3VsdC5ub3RNb2RpZmllZCB8fCAhcmVzdWx0LmRhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0c1xuICAgIH07XG4gIH1cblxuICBpZiAoIXNjaGVtYVVuY2hhbmdlZCkge1xuICAgIHJldHVybiByZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2Uoc3RhdGUsIGRhdGFJZCwgZGF0YXNldHMpO1xuICB9XG5cbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG5mdW5jdGlvbiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YShzdGF0ZTogVmlzU3RhdGUsIGRhdGFJZDogc3RyaW5nKTogVmlzU3RhdGUge1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5maWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0c1xuICB9O1xuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBbZGF0YUlkXSwgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufVxuXG5mdW5jdGlvbiBpc0RhdGFzZXRSb3dMaXN0KFxuICByb3dzOiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdyB8IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W11cbik6IHJvd3MgaXMgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyb3dzKSB8fCAhcm93cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyb3dzKTtcbiAgfVxuICAvLyBBIHNpbmdsZSBjb2x1bW4tb3JkZXJlZCByb3cgaXMgYW4gYXJyYXkgb2YgcHJpbWl0aXZlczsgYSBsaXN0IG9mIHJvd3MgaXNcbiAgLy8gYW4gYXJyYXkgb2YgYXJyYXlzIG9yIGFuIGFycmF5IG9mIGZpZWxkLW5hbWUgcmVjb3Jkcy5cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93c1swXSkgfHwgaXNQbGFpbk9iamVjdChyb3dzWzBdKTtcbn1cblxuZnVuY3Rpb24gdG9BcnJheVJvdyhyb3c6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93LCBmaWVsZHM6IEZpZWxkW10pOiBhbnlbXSB8IG51bGwge1xuICBpZiAoQXJyYXkuaXNBcnJheShyb3cpKSB7XG4gICAgcmV0dXJuIHJvdy5sZW5ndGggPT09IGZpZWxkcy5sZW5ndGggPyByb3cgOiBudWxsO1xuICB9XG4gIGlmIChpc1BsYWluT2JqZWN0KHJvdykpIHtcbiAgICBjb25zdCByZWNvcmQgPSByb3cgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIGZpZWxkcy5tYXAoZmllbGQgPT5cbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWNvcmQsIGZpZWxkLm5hbWUpID8gcmVjb3JkW2ZpZWxkLm5hbWVdIDogbnVsbFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGFzZXRSb3dzKFxuICByb3dzOiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdyB8IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10sXG4gIGZpZWxkczogRmllbGRbXVxuKTogYW55W11bXSB8IG51bGwge1xuICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBsaXN0ID0gaXNEYXRhc2V0Um93TGlzdChyb3dzKSA/IHJvd3MgOiBbcm93c107XG4gIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkOiBhbnlbXVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFycmF5Um93ID0gdG9BcnJheVJvdyhsaXN0W2ldLCBmaWVsZHMpO1xuICAgIGlmICghYXJyYXlSb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBub3JtYWxpemVkLnB1c2goYXJyYXlSb3cpO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIEFwcGVuZCBvciB1cHNlcnQgcm93cyBvbiBhbiBleGlzdGluZyBpbi1tZW1vcnkgcm93IGRhdGFzZXQuIEtlZXBzIGxheWVycyBhbmQgcmUtcnVucyBmaWx0ZXJzLlxuICogQXJyb3cvRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQgKElOU0VSVCAvIGNvbmNhdCBub3QgaW1wbGVtZW50ZWQpLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcm93cywgb3B0aW9uc306IFZpc1N0YXRlQWN0aW9ucy5BZGRUb0RhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplRGF0YXNldFJvd3Mocm93cywgZGF0YXNldC5maWVsZHMpO1xuICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBhcHBsaWVkID0gb3B0aW9ucz8udXBzZXJ0QnlcbiAgICA/IGRhdGFzZXQudXBzZXJ0Um93cyhub3JtYWxpemVkLCBvcHRpb25zLnVwc2VydEJ5KVxuICAgIDogZGF0YXNldC5hcHBlbmRSb3dzKG5vcm1hbGl6ZWQpO1xuICBpZiAoIWFwcGxpZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHt9KVxuICB9O1xuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbi8qKlxuICogRGVsZXRlIHJvd3MgYnkgaW5kZXggb3IgYnkgZmllbGQgdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBkYXRhc2V0LlxuICogS2VlcHMgbGF5ZXJzLiBBcnJvdy9EdWNrREIgdGFibGVzIHdhcm4gYW5kIGFyZSBsZWZ0IHVuY2hhbmdlZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcm93SW5kZXhlcywgYnlGaWVsZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ZXMgPSBieUZpZWxkXG4gICAgPyBkYXRhc2V0LmZpbmRSb3dJbmRleGVzQnlGaWVsZFZhbHVlcyhieUZpZWxkLmZpZWxkLCB0b0FycmF5KGJ5RmllbGQudmFsdWVzKSlcbiAgICA6IHRvQXJyYXkocm93SW5kZXhlcyA/PyBbXSk7XG4gIGlmICghaW5kZXhlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFkYXRhc2V0LnJlbW92ZVJvd3MoaW5kZXhlcykpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0cyA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHt9KVxuICB9O1xuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbi8qKlxuICogUmVjb3JkIGEgZmFpbGVkIHJlbW90ZSBkYXRhc2V0IHJlZnJlc2ggd2l0aG91dCBkcm9wcGluZyBleGlzdGluZyByb3dzLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGVycm9yfTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IHtcbiAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgW2RhdGFJZF06IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICAgICAgcmVmcmVzaFN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgcmVmcmVzaEVycm9yOiBlcnJvcj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpLFxuICAgICAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZFxuICAgICAgfSlcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3QgdXBkYXRlVmlzRGF0YVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gZGF0YXNldHMgY2FuIGJlIGEgc2luZ2xlIGRhdGEgZW50cmllcyBvciBhbiBhcnJheSBvZiBtdWx0aXBsZSBkYXRhIGVudHJpZXNcbiAgY29uc3Qge2NvbmZpZywgb3B0aW9uc30gPSBhY3Rpb247XG5cbiAgLy8gYXBwbHkgY29uZmlnIGlmIHBhc3NlZCBmcm9tIGFjdGlvblxuICAvLyBUT0RPOiB3ZSBkb24ndCBoYW5kbGUgYXN5bmMgbWVyZ2VycyBoZXJlIHlldFxuICBsZXQgdXBkYXRlZFN0YXRlID0gY29uZmlnXG4gICAgPyByZWNlaXZlTWFwQ29uZmlnVXBkYXRlcihzdGF0ZSwge1xuICAgICAgICBwYXlsb2FkOiB7Y29uZmlnLCBvcHRpb25zfVxuICAgICAgfSlcbiAgICA6IHN0YXRlO1xuXG4gIGNvbnN0IGRhdGFzZXRzID0gdG9BcnJheShhY3Rpb24uZGF0YXNldHMpO1xuICBpZiAoIWRhdGFzZXRzLmxlbmd0aCkge1xuICAgIHJldHVybiB1cGRhdGVkU3RhdGU7XG4gIH1cblxuICBjb25zdCBjcmVhdGVEYXRhc2V0VGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcbiAgY29uc3QgaHlkcmF0ZVByb2dyZXNzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG5cbiAgZGF0YXNldHMuZm9yRWFjaCgoe2luZm8gPSB7fSwgLi4ucmVzdH0sIGRhdGFzZXRJbmRleCkgPT4ge1xuICAgIGNvbnN0IHByb3RvID0ge2luZm8sIC4uLnJlc3R9O1xuICAgIGlmIChuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKHByb3RvKSkge1xuICAgICAgaHlkcmF0ZVByb2dyZXNzW2dldERhdGFzZXRQcm9ncmVzc0lkKHByb3RvLCBkYXRhc2V0SW5kZXgpXSA9IDA7XG4gICAgfVxuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKHByb3RvLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIGNyZWF0ZURhdGFzZXRUYXNrcy5wdXNoKHRhc2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnNgLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtZmFpbGVkLSR7ZGF0YXNldEluZGV4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgcHJvZ3Jlc3NJZHMgPSBPYmplY3Qua2V5cyhoeWRyYXRlUHJvZ3Jlc3MpO1xuICBjb25zdCBkYXRhc2V0c0FsbFNldHRsZWRUYXNrID0gY3JlYXRlRGF0YXNldFRhc2tzLmxlbmd0aFxuICAgID8gVGFzay5hbGxTZXR0bGVkKGNyZWF0ZURhdGFzZXRUYXNrcykubWFwKHJlc3VsdHMgPT5cbiAgICAgICAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3Moe3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uczogb3B0aW9ucywgcHJvZ3Jlc3NJZHN9KVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoZGF0YXNldHNBbGxTZXR0bGVkVGFzaykge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogMSwgdHlwZTogJyd9KSk7XG4gICAgaWYgKHByb2dyZXNzSWRzLmxlbmd0aCkge1xuICAgICAgdXBkYXRlZFN0YXRlID0ge1xuICAgICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICAgIGxvYWRpbmdQcm9ncmVzczoge1xuICAgICAgICAgIC4uLnVwZGF0ZWRTdGF0ZS5sb2FkaW5nUHJvZ3Jlc3MsXG4gICAgICAgICAgLi4uaHlkcmF0ZVByb2dyZXNzXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgW1xuICAgIC4uLihkYXRhc2V0c0FsbFNldHRsZWRUYXNrID8gW2RhdGFzZXRzQWxsU2V0dGxlZFRhc2tdIDogW10pLFxuICAgIC4uLm5vdGlmaWNhdGlvblRhc2tzXG4gIF0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFBheWxvYWRBY3Rpb248Q3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkPlxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7cmVzdWx0cywgYWRkVG9NYXBPcHRpb25zLCBwcm9ncmVzc0lkc30gPSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IHJlc3VsdHMucmVkdWNlKChhY2N1LCByZXN1bHQsIGlkeCkgPT4ge1xuICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgY29uc3QgZGF0YXNldCA9IHJlc3VsdC52YWx1ZTtcbiAgICAgIHJldHVybiB7Li4uYWNjdSwgW2RhdGFzZXQuaWRdOiBkYXRhc2V0fTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2hvdyBlcnJvciBub3RpZmljYXRpb24gb24gVUlcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRGF0YXNldCBlcnJvcjogRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0OlxuICAgICAgICAgICAgICAke3Jlc3VsdC5yZWFzb24gfHwgKHJlc3VsdCBhcyBhbnkpLnZhbHVlfWAsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1jcmVhdGUtZmFpbGVkLSR7aWR4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuICB9LCB7fSBhcyBEYXRhc2V0cyk7XG4gIC8vIHNhdmUgbmV3IGRhdGFzZXQgZW50cnkgdG8gc3RhdGVcbiAgY29uc3QgbWVyZ2VkU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlLCBuZXdEYXRhRW50cmllcylcbiAgfTtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbGF5ZXJNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiBtLndhaXRGb3JMYXllckRhdGEpO1xuICBjb25zdCBkYXRhc2V0TWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gIWxheWVyTWVyZ2Vycy5pbmNsdWRlcyhtKSk7XG5cbiAgY29uc3QgbmV3RGF0YUlkcyA9IE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKTtcbiAgY29uc3QgcG9zdE1lcmdlclBheWxvYWQgPSB7XG4gICAgbmV3RGF0YUlkcyxcbiAgICBvcHRpb25zOiBhZGRUb01hcE9wdGlvbnMsXG4gICAgbGF5ZXJNZXJnZXJzXG4gIH07XG5cbiAgY29uc3QgdXBkYXRlZFN0YXRlID0gYXBwbHlNZXJnZXJzVXBkYXRlcihtZXJnZWRTdGF0ZSwge1xuICAgIG1lcmdlcnM6IGRhdGFzZXRNZXJnZXJzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBjbGVhckxvYWRpbmdQcm9ncmVzcyhcbiAgICAgIHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogLTF9KSksXG4gICAgICBwcm9ncmVzc0lkc1xuICAgICksXG4gICAgbm90aWZpY2F0aW9uVGFza3NcbiAgKTtcbn07XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1lcmdlcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG1lcmdlcnM6IE1lcmdlcjxhbnk+W107XG4gICAgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHttZXJnZXJzLCBwb3N0TWVyZ2VyUGF5bG9hZH0gPSBhY3Rpb247XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IG1lcmdlU3RhdGVSZXN1bHQgPSBtZXJnZVN0YXRlRnJvbU1lcmdlcnMoXG4gICAgc3RhdGUsXG4gICAge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICAuLi5zdGF0ZS5pbml0aWFsU3RhdGVcbiAgICB9LFxuICAgIG1lcmdlcnMsXG4gICAgLy8gbmV3RGF0YUlkcyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICApO1xuXG4gIC8vIGlmIGFsbCBtZXJnZWQsIGtpY2t1cCBwb3N0IG1lcmdlIHByb2Nlc3NcbiAgLy8gaWYgbm90IHdhaXRcbiAgcmV0dXJuIG1lcmdlU3RhdGVSZXN1bHQuYWxsTWVyZ2VkXG4gICAgPyBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkKVxuICAgIDogbWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZTtcbn1cblxuLyoqIFJlYWRzIGBvcHRpb25zLmxheWVyVmlzQ29uZmlnYCBmcm9tIGFkZC1kYXRhLXRvLW1hcCAoc2VlIGBBZGREYXRhVG9NYXBPcHRpb25zYCkuICovXG5mdW5jdGlvbiBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhcbiAgb3B0aW9uczogUG9zdE1lcmdlclBheWxvYWRbJ29wdGlvbnMnXSB8IHVuZGVmaW5lZFxuKTogUGFydGlhbDxMYXllclZpc0NvbmZpZz4gfCB1bmRlZmluZWQge1xuICBpZiAoIW9wdGlvbnMgfHwgISgnbGF5ZXJWaXNDb25maWcnIGluIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBwYXRjaCA9IChvcHRpb25zIGFzIHtsYXllclZpc0NvbmZpZz86IHVua25vd259KS5sYXllclZpc0NvbmZpZztcbiAgaWYgKHBhdGNoID09IG51bGwgfHwgdHlwZW9mIHBhdGNoICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhdGNoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHBhdGNoIGFzIFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+O1xufVxuXG4vKipcbiAqIFBvbHlnb24gZmlsdGVycyBmb3IgdGhlc2UgbGF5ZXJzIHVzZSBjZW50cm9pZHMgLyBkYXRhVG9GZWF0dXJlIGZyb21cbiAqIGNhbGN1bGF0ZUxheWVyRGF0YS4gT3RoZXIgdHlwZXMgKGxhdC9sbmcgcG9pbnRzLCBIMywgYXJjcykgY2FuIGZpbHRlclxuICogZnJvbSBjb2x1bW5zIG9uIHRoZSBmaXJzdCBwYXNzIGFuZCBtdXN0IG5vdCBiZSByZWNhbGN1bGF0ZWQgaGVyZS5cbiAqL1xuZnVuY3Rpb24gcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGxheWVyLnR5cGUgPT09IExBWUVSX1RZUEVTLmdlb2pzb24gfHwgbGF5ZXIuY29uZmlnPy5jb2x1bW5Nb2RlID09PSAnZ2VvanNvbic7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmZ1bmN0aW9uIHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VkU3RhdGU6IFZpc1N0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtuZXdEYXRhSWRzLCBvcHRpb25zLCBsYXllck1lcmdlcnN9ID0gcG9zdE1lcmdlclBheWxvYWQ7XG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBtZXJnZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihmID0+XG4gICAgZi5kYXRhSWQuZmluZChmRGF0YUlkID0+IG5ld0RhdGFJZHMuaW5jbHVkZXMoZkRhdGFJZCkpXG4gICk7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJlZDogc3RyaW5nW10gPSB1bmlxKFxuICAgIG5ld0ZpbHRlcnMucmVkdWNlKChhY2N1LCBmKSA9PiBbLi4uYWNjdSwgLi4uZi5kYXRhSWRdLCBbXSBhcyBzdHJpbmdbXSlcbiAgKTtcbiAgY29uc3QgZGF0YUVtcHR5ID0gbmV3RGF0YUlkcy5sZW5ndGggPCAxO1xuXG4gIGxldCBuZXdMYXllcnMgPSAhZGF0YUVtcHR5XG4gICAgPyBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gbmV3RGF0YUlkcy5yZWR1Y2UoXG4gICAgKGFjY3UsIGlkKSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtpZF06IG1lcmdlZFN0YXRlLmRhdGFzZXRzW2lkXVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbiAgaWYgKCFuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5hdXRvQ3JlYXRlTGF5ZXJzICE9PSBmYWxzZSkge1xuICAgIC8vIG5vIGxheWVyIG1lcmdlZCwgZmluZCBkZWZhdWx0c1xuICAgIGNvbnN0IHJlc3VsdCA9IGFkZERlZmF1bHRMYXllcnMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHJlc3VsdC5zdGF0ZTtcbiAgICBuZXdMYXllcnMgPSByZXN1bHQubmV3TGF5ZXJzO1xuICB9XG5cbiAgaWYgKG1lcmdlZFN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAvLyBpZiBtYXAgaXMgc3BsaXQsIGFkZCBuZXcgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICAgIG5ld0xheWVycyA9IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgICBsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZClcbiAgICApO1xuICAgIC8vIGEgbGF5ZXIgYWxyZWFkeSBpbiBhIHBhbmVsIHdhcyBtZXJnZWQgZnJvbSBzcGxpdCBtYXBzLCB3aGljaCBkZWNpZGUgdGhlIHBhbmVscyBzaG93aW5nIGl0XG4gICAgY29uc3QgbGF5ZXJzTm90SW5TcGxpdE1hcHMgPSBuZXdMYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PiAhbWVyZ2VkU3RhdGUuc3BsaXRNYXBzLnNvbWUoc20gPT4gbC5pZCBpbiBzbS5sYXllcnMpXG4gICAgKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHtcbiAgICAgIC4uLm1lcmdlZFN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKG1lcmdlZFN0YXRlLnNwbGl0TWFwcywgbGF5ZXJzTm90SW5TcGxpdE1hcHMpXG4gICAgfTtcbiAgfVxuXG4gIG1lcmdlZFN0YXRlID0gbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzKFxuICAgIG1lcmdlZFN0YXRlLFxuICAgIGxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zKG9wdGlvbnMpLFxuICAgIG5ld0RhdGFJZHNcbiAgKTtcblxuICAvLyBpZiBubyB0b29sdGlwcyBtZXJnZWQgYWRkIGRlZmF1bHQgdG9vbHRpcHNcbiAgbmV3RGF0YUlkcy5mb3JFYWNoKGRhdGFJZCA9PiB7XG4gICAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IG1lcmdlZFN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIC8vIGxvYWRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIGZhbHNlIGFuZCB3ZSBkb24ndCB3YW50IHRvIHJ1biBhZGREZWZhdWx0VG9vbHRpcHMgd2hlbiB0b29sdGlwRmllbGRzIGlzIGVtcHR5XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucz8uYXV0b0NyZWF0ZVRvb2x0aXBzICE9PSBmYWxzZSAmJlxuICAgICAgKCFBcnJheS5pc0FycmF5KHRvb2x0aXBGaWVsZHMpIHx8ICF0b29sdGlwRmllbGRzLmxlbmd0aClcbiAgICApIHtcbiAgICAgIC8vIGFkZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgdHJ1ZVxuICAgICAgbWVyZ2VkU3RhdGUgPSBhZGREZWZhdWx0VG9vbHRpcHMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzW2RhdGFJZF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdXBkYXRlZERhdGFzZXRzID0gZGF0YUVtcHR5XG4gICAgPyBPYmplY3Qua2V5cyhtZXJnZWRTdGF0ZS5kYXRhc2V0cylcbiAgICA6IHVuaXEoT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpLmNvbmNhdChkYXRhc2V0RmlsdGVyZWQpKTtcblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG1lcmdlZFN0YXRlLCB1cGRhdGVkRGF0YXNldHMsIHVuZGVmaW5lZCk7XG5cbiAgLy8gUG9seWdvbiBwZXItbGF5ZXIgaW5kZXhlcyBuZWVkIGNlbnRyb2lkcyAvIGRhdGFUb0ZlYXR1cmUsIHdoaWNoIGFyZSBvbmx5XG4gIC8vIHBvcHVsYXRlZCBieSB0aGUgbGF5ZXItZGF0YSBwYXNzIGFib3ZlLiBTa2lwIGRhdGFzZXRzIHdob3NlIHRhcmdldGVkIGxheWVyc1xuICAvLyBhbHJlYWR5IGZpbHRlcmVkIGZyb20gY29sdW1ucyAoZS5nLiBsYXQvbG5nIHBvaW50cykuXG4gIGNvbnN0IHBvbHlnb25GaWx0ZXJzID0gdXBkYXRlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKFxuICAgIGYgPT4gZi50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbiAmJiBmLmVuYWJsZWQgIT09IGZhbHNlXG4gICk7XG4gIGNvbnN0IHBvbHlnb25NZXRhRGF0YUlkcyA9IHVuaXEoXG4gICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgbGF5ZXIgPT5cbiAgICAgICAgICBwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhKGxheWVyKSAmJlxuICAgICAgICAgIHBvbHlnb25GaWx0ZXJzLnNvbWUoZiA9PiBmLmxheWVySWQ/LmluY2x1ZGVzKGxheWVyLmlkKSlcbiAgICAgIClcbiAgICAgIC5tYXAobGF5ZXIgPT4gbGF5ZXIuY29uZmlnLmRhdGFJZClcbiAgICAgIC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpICYmIHVwZGF0ZWREYXRhc2V0cy5pbmNsdWRlcyhpZCkpXG4gICk7XG4gIGlmIChwb2x5Z29uTWV0YURhdGFJZHMubGVuZ3RoKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKFxuICAgICAge1xuICAgICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICAgIGRhdGFzZXRzOiBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgICAgICAgIHBvbHlnb25NZXRhRGF0YUlkcyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUuZGF0YXNldHMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmZpbHRlcnMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgICApXG4gICAgICB9LFxuICAgICAgcG9seWdvbk1ldGFEYXRhSWRzXG4gICAgKTtcbiAgfVxuXG4gIC8vIHJlZ2lzdGVyIGxheWVyIGFuaW1hdGlvbiBkb21haW4sXG4gIC8vIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGxheWVyIGRhdGEgaXMgY2FsY3VsYXRlZFxuICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4odXBkYXRlZFN0YXRlKTtcblxuICAvLyB0cnkgdG8gcHJvY2VzcyBsYXllck1lcmdlcnMgYWZ0ZXIgZGF0YXNldCtkYXRhc2V0TWVyZ2Vyc1xuICB1cGRhdGVkU3RhdGUgPVxuICAgIGxheWVyTWVyZ2VycyAmJiBsYXllck1lcmdlcnMubGVuZ3RoID4gMFxuICAgICAgPyBhcHBseU1lcmdlcnNVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwge1xuICAgICAgICAgIG1lcmdlcnM6IGxheWVyTWVyZ2VycyxcbiAgICAgICAgICBwb3N0TWVyZ2VyUGF5bG9hZDogey4uLnBvc3RNZXJnZXJQYXlsb2FkLCBsYXllck1lcmdlcnM6IFtdfVxuICAgICAgICB9KVxuICAgICAgOiB1cGRhdGVkU3RhdGU7XG5cbiAgLy8gY2VudGVyIHRoZSBtYXAgb25jZSB0aGUgZGF0YXNldCBpcyBjcmVhdGVkXG4gIGlmIChuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5jZW50ZXJNYXApIHtcbiAgICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKG5ld0xheWVycyk7XG4gICAgaWYgKGJvdW5kcykge1xuICAgICAgY29uc3QgcGFkZGluZyA9IG9wdGlvbnM/LnBhZGRpbmc7XG4gICAgICBjb25zdCBmaXRCb3VuZHNUYXNrID0gQUNUSU9OX1RBU0tfRklUX0JPVU5EUygpLm1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBmaXRNYXBCb3VuZHMoYm91bmRzLCBwYWRkaW5nKTtcbiAgICAgIH0pO1xuICAgICAgdXBkYXRlZFN0YXRlID0gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBmaXRCb3VuZHNUYXNrKTtcbiAgICB9XG4gIH1cblxuICAvLyBuZWVkIHRvIGNlbnRlciBtYXAgaGVyZSBpZiB3ZSBoYXZlIG5ldyBsYXllcnNcbiAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbn1cblxuLyoqXG4gKiBSZW5hbWUgYW4gZXhpc3RpbmcgZGF0YXNldCBpbiBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7bGFiZWw6IGFjdGlvbi5sYWJlbH19KTtcbn1cblxuY29uc3QgQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyA9IFsnbGFiZWwnLCAnY29sb3InLCAnbWV0YWRhdGEnXTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgcHJvcGVydGllcyBiZWZvcmUgdXBkYXRpbmcgdGhlIGRhdGFzZXQuXG4gKiBNYWtlcyBzdXJlIGVhY2ggcHJvcGVydHkgaXMgaW4gdGhlIGFsbG93ZWQgbGlzdFxuICogTWFrZXMgc3VyZSBjb2xvciB2YWx1ZSBpcyBSR0JcbiAqIFBlcmZvcm1zIGRlZXAgbWVyZ2Ugd2hlbiB1cGRhdGluZyBtZXRhZGF0YVxuICovXG5jb25zdCB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyA9IChwcm9wcywgZGF0YXNldCkgPT4ge1xuICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IE9iamVjdC5lbnRyaWVzKHByb3BzKS5yZWR1Y2UoKGFjYywgZW50cnkpID0+IHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBlbnRyeTtcbiAgICAvLyBpcyBpdCBhbGxvd2VkID9cbiAgICBpZiAoIUFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBhcmUgYWRkaW5nIGEgY29sb3IgYnV0IGl0IGlzIG5vdCBSR0Igd2UgZG9uJ3QgYWNjZXB0IHRoZSB2YWx1ZVxuICAgIC8vIGluIHRoZSBmdXR1cmUgYXMgd2UgYWRkIG1vcmUgcHJvcHMgd2Ugc2hvdWxkIGNoYW5nZSB0aGlzIGlmIGludG8gYSBzd2l0Y2hcbiAgICBpZiAoa2V5ID09PSAnY29sb3InICYmICFpc1JnYkNvbG9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBkbyB3ZSBuZWVkIGRlZXAgbWVyZ2UgP1xuICAgIHJldHVybiB7Li4uYWNjLCBba2V5XTogaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyBkZWVwbWVyZ2UoZGF0YXNldFtrZXldIHx8IHt9LCB2YWx1ZSkgOiB2YWx1ZX07XG4gIH0sIHt9KTtcblxuICByZXR1cm4gdmFsaWRhdGVkUHJvcHM7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBEYXRhc2V0IHByb3BzIChsYWJlbCwgY29sb3IsIG1ldGEpLiBEbyBub3QgdXNlIHRvIHVwZGF0ZSBkYXRhIG9yIGFueSByZWxhdGVkIHByb3BlcnRpZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgcHJvcHN9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG4gIGNvbnN0IGV4aXN0aW5nID0gZGF0YXNldHNbZGF0YUlkXTtcblxuICBpZiAoZXhpc3RpbmcpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzKHByb3BzLCBleGlzdGluZyk7XG4gICAgLy8gIHZhbGlkYXRlIHByb3BzOiBqdXN0IGNvbG9yIGZvciBub3dcbiAgICAvLyAgd2Ugb25seSBhbGxvdyBsYWJlbCwgY29sb3IgYW5kIG1ldGEgdG8gYmUgdXBkYXRlZFxuICAgIC8vIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogUmUtdmFsaWRhdGUgYSBsaXZlIGxheWVyIGFnYWluc3QgYSB0YWJsZSB3aG9zZSBzY2hlbWEganVzdCBjaGFuZ2VkLlxuICpcbiAqIFRoZSBsYXllcidzIGNvbHVtbnMgLyB2aXN1YWwtY2hhbm5lbCBmaWVsZHMgLyB0ZXh0LWxhYmVsIGZpZWxkcyBhcmUgZmlyc3RcbiAqIHJlbWFwcGVkIHRvIHRoZWlyIG5ldyBuYW1lcyAodmlhIGByZW5hbWVzYCkgc28gdGhlIGxheWVyIGZvbGxvd3MgYSByZW5hbWVcbiAqIGluc3RlYWQgb2YgdHJlYXRpbmcgdGhlIG9sZCBjb2x1bW4gYXMgcmVtb3ZlZCwgdGhlbiByZS12YWxpZGF0ZWQgd2l0aFxuICogYHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhYCDigJQgdGhlIHNhbWUgc2VyaWFsaXplICsgdmFsaWRhdGUgcGF0aCB1c2VkXG4gKiB3aGVuIGEgc2F2ZWQgY29uZmlnIGlzIGxvYWRlZCBhZ2FpbnN0IG5ldyBkYXRhLiBSZXR1cm5zIGBudWxsYCB3aGVuIGFcbiAqIHJlcXVpcmVkIGNvbHVtbiBpcyBnb25lICh0aGUgbGF5ZXIgY2FuIG5vIGxvbmdlciBiZSBidWlsdCkuXG4gKi9cbmZ1bmN0aW9uIHJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYShcbiAgbGF5ZXI6IExheWVyLFxuICByZW5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBuZXdUYWJsZTogS2VwbGVyVGFibGUsXG4gIHN0YXRlOiBWaXNTdGF0ZVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3QgY29uZmlnUGF0Y2g6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCBjb2x1bW5zXG4gIGNvbnN0IGNvbHVtbnNQYXRjaDogUmVjb3JkPHN0cmluZywge3ZhbHVlOiBzdHJpbmcgfCBudWxsOyBmaWVsZElkeDogbnVtYmVyfT4gPSB7fTtcbiAgbGV0IGNvbHVtbnNDaGFuZ2VkID0gZmFsc2U7XG4gIE9iamVjdC5lbnRyaWVzKGxheWVyLmNvbmZpZy5jb2x1bW5zIHx8IHt9KS5mb3JFYWNoKChbY2tleSwgY29sXSkgPT4ge1xuICAgIGlmIChjb2w/LnZhbHVlICYmIHJlbmFtZXNbY29sLnZhbHVlXSkge1xuICAgICAgY29sdW1uc1BhdGNoW2NrZXldID0gey4uLmNvbCwgdmFsdWU6IHJlbmFtZXNbY29sLnZhbHVlXX07XG4gICAgICBjb2x1bW5zQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9KTtcbiAgaWYgKGNvbHVtbnNDaGFuZ2VkKSB7XG4gICAgY29uZmlnUGF0Y2guY29sdW1ucyA9IHsuLi5sYXllci5jb25maWcuY29sdW1ucywgLi4uY29sdW1uc1BhdGNofTtcbiAgfVxuXG4gIC8vIGZvbGxvdyByZW5hbWVkIHZpc3VhbC1jaGFubmVsIGZpZWxkcyAoY29sb3JGaWVsZCwgc2l6ZUZpZWxkLCAuLi4pXG4gIE9iamVjdC52YWx1ZXMobGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZH0pID0+IHtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IGxheWVyLmNvbmZpZ1tmaWVsZF07XG4gICAgaWYgKGZpZWxkQ29uZmlnPy5uYW1lICYmIHJlbmFtZXNbZmllbGRDb25maWcubmFtZV0pIHtcbiAgICAgIGNvbmZpZ1BhdGNoW2ZpZWxkXSA9IHsuLi5maWVsZENvbmZpZywgbmFtZTogcmVuYW1lc1tmaWVsZENvbmZpZy5uYW1lXX07XG4gICAgfVxuICB9KTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCB0ZXh0LWxhYmVsIGZpZWxkc1xuICBpZiAobGF5ZXIuY29uZmlnLnRleHRMYWJlbD8ubGVuZ3RoKSB7XG4gICAgY29uc3QgdGV4dExhYmVsID0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbC5tYXAodGwgPT5cbiAgICAgIHRsLmZpZWxkICYmIHJlbmFtZXNbdGwuZmllbGQubmFtZV1cbiAgICAgICAgPyB7Li4udGwsIGZpZWxkOiB7Li4udGwuZmllbGQsIG5hbWU6IHJlbmFtZXNbdGwuZmllbGQubmFtZV19fVxuICAgICAgICA6IHRsXG4gICAgKTtcbiAgICBpZiAodGV4dExhYmVsLnNvbWUoKHRsLCBpKSA9PiB0bCAhPT0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbFtpXSkpIHtcbiAgICAgIGNvbmZpZ1BhdGNoLnRleHRMYWJlbCA9IHRleHRMYWJlbDtcbiAgICB9XG4gIH1cblxuICAvLyBzaGFsbG93LWNvcHkgdGhlIGxheWVyIHNvIHdlIG5ldmVyIG11dGF0ZSByZWR1eCBzdGF0ZTsgdGhlIGNvcHkga2VlcHMgdGhlXG4gIC8vIHByb3RvdHlwZSBtZXRob2RzIChgdmlzdWFsQ2hhbm5lbHNgIGdldHRlciwgYGlzVmFsaWRUb1NhdmVgKSBzbyBpdFxuICAvLyBzZXJpYWxpemVzIGV4YWN0bHkgbGlrZSBhIGxpdmUgbGF5ZXIuXG4gIGNvbnN0IGxheWVyQ29weSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YobGF5ZXIpKSwgbGF5ZXIpO1xuICBpZiAoT2JqZWN0LmtleXMoY29uZmlnUGF0Y2gpLmxlbmd0aCkge1xuICAgIGxheWVyQ29weS5jb25maWcgPSB7Li4ubGF5ZXIuY29uZmlnLCAuLi5jb25maWdQYXRjaH07XG4gIH1cblxuICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICBuZXdUYWJsZSxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgbGF5ZXJDb3B5LFxuICAgIHN0YXRlLnNjaGVtYVxuICApO1xuXG4gIHJldHVybiB2YWxpZGF0ZWQgJiYgdmFsaWRhdGVkLmhhc0FsbENvbHVtbnMoKSA/IHZhbGlkYXRlZCA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGFuIGV4aXN0aW5nIGRhdGFzZXQncyBzY2hlbWEgKGNvbHVtbnMvZmllbGRzKSBpbiBwbGFjZSBhbmQgcmVjb25jaWxlXG4gKiBldmVyeXRoaW5nIHRoYXQgcmVmZXJlbmNlZCB0aGUgb2xkIGNvbHVtbnM6IGZpbHRlcnMsIGxheWVycywgdG9vbHRpcCBmaWVsZHMsXG4gKiBwaW5uZWQgY29sdW1ucyBhbmQgc29ydCBzdGF0ZS4gVGhlIGRhdGFzZXQga2VlcHMgaXRzIGlkL2xhYmVsL2NvbG9yL21ldGFkYXRhLlxuICpcbiAqIGBhY3Rpb24uZGF0YWAgaXMgdGhlIHNhbWUgc2hhcGUgYEtlcGxlclRhYmxlLmltcG9ydERhdGFgIGFjY2VwdHMgKGB7Y29scyxcbiAqIGZpZWxkcywgYXJyb3dUYWJsZX1gIHdoZW4gcmVwbGFjaW5nIGNvbHVtbnMpLiBgYWN0aW9uLnJlbmFtZXNgIGlzIGFuIG9wdGlvbmFsXG4gKiBvbGQg4oaSIG5ldyBjb2x1bW4tbmFtZSBtYXAgc28gbGF5ZXJzL2ZpbHRlcnMvdG9vbHRpcHMgZm9sbG93IGEgcmVuYW1lIGluc3RlYWRcbiAqIG9mIHRyZWF0aW5nIHRoZSBvbGQgY29sdW1uIGFzIHJlbW92ZWQuXG4gKlxuICogUmVjb25jaWxpYXRpb24gaXMgbmFtZS1iYXNlZCDigJQgdGhlIHNhbWUgd2F5IGtlcGxlci5nbCBsb2FkcyBhIHNhdmVkIGNvbmZpZ1xuICogYWdhaW5zdCBjaGFuZ2VkIGRhdGEuIEEgbGF5ZXIgd2hvc2UgcmVxdWlyZWQgY29sdW1uIGlzIGdvbmUgaXMgcmVtb3ZlZDsgYVxuICogZmlsdGVyIG9uIGEgZ29uZSBjb2x1bW4gaXMgZHJvcHBlZCAob3IgdGhlIGRhdGFzZXQgaXMgc3BsaWNlZCBvdXQgb2YgYSBzeW5jZWRcbiAqIGZpbHRlcik7IHRvb2x0aXAgZmllbGRzIGFyZSByZW1hcHBlZCAvIGRyb3BwZWQuXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIGRhdGEsIHJlbmFtZXMgPSB7fX0gPSBhY3Rpb247XG4gIGNvbnN0IGV4aXN0aW5nID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFleGlzdGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIDEuIHJlYnVpbGQgdGhlIHRhYmxlIHNjaGVtYSBpbiBwbGFjZSAoc2FtZSBpZC9sYWJlbC9jb2xvci9tZXRhZGF0YSlcbiAgY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHt9KTtcbiAgbmV3VGFibGUudXBkYXRlU2NoZW1hKGRhdGEpO1xuXG4gIC8vIFRoZSBkYXRhIGNvbnRhaW5lciBpcyByZWJ1aWx0IHVuc29ydGVkIGFuZCB1bmZpbHRlcmVkOyByZXNldCB0aGUgdGFibGUnc1xuICAvLyB2aWV3IHN0YXRlIHRoYXQgaW5kZXhlcyBpbnRvIHRoZSBvbGQgY29udGFpbmVyLlxuICBuZXdUYWJsZS5maWx0ZXJlZElkeENQVSA9IG5ld1RhYmxlLmFsbEluZGV4ZXM7XG4gIG5ld1RhYmxlLmZpbHRlclJlY29yZENQVSA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydENvbHVtbiA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydE9yZGVyID0gbnVsbDtcbiAgbmV3VGFibGUucGlubmVkQ29sdW1ucyA9IChleGlzdGluZy5waW5uZWRDb2x1bW5zIHx8IFtdKVxuICAgIC5tYXAobmFtZSA9PiByZW5hbWVzW25hbWVdID8/IG5hbWUpXG4gICAgLmZpbHRlcihuYW1lID0+IG5ld1RhYmxlLmdldENvbHVtbkZpZWxkSWR4KG5hbWUpID4gLTEpO1xuXG4gIGNvbnN0IG5ld0ZpZWxkc0J5TmFtZSA9IG5ldyBTZXQobmV3VGFibGUuZmllbGRzLm1hcChmID0+IGYubmFtZSkpO1xuICBjb25zdCBuZXdEYXRhc2V0cyA9IHsuLi5zdGF0ZS5kYXRhc2V0cywgW2RhdGFJZF06IG5ld1RhYmxlfTtcblxuICAvLyAyLiByZWNvbmNpbGUgZmlsdGVyc1xuICBsZXQgbmV3RmlsdGVycyA9IHN0YXRlLmZpbHRlcnNcbiAgICAubWFwKGZpbHRlciA9PiB7XG4gICAgICBjb25zdCB2aSA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhSWQpO1xuICAgICAgaWYgKHZpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGROYW1lID0gZmlsdGVyLm5hbWVbdmldO1xuICAgICAgY29uc3QgbmV3TmFtZSA9IHJlbmFtZXNbb2xkTmFtZV0gPz8gb2xkTmFtZTtcbiAgICAgIGNvbnN0IGZpZWxkSWR4ID0gbmV3VGFibGUuZ2V0Q29sdW1uRmllbGRJZHgobmV3TmFtZSk7XG5cbiAgICAgIGlmIChmaWVsZElkeCA9PT0gLTEpIHtcbiAgICAgICAgLy8gY29sdW1uIGlzIGdvbmU6IGRyb3AgYSBzaW5nbGUtZGF0YXNldCBmaWx0ZXIsIHNwbGljZSBpdCBvdXQgb2YgYSBzeW5jZWQgb25lXG4gICAgICAgIHJldHVybiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZpLCBuZXdEYXRhc2V0cyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbHVtbiBwcmVzZW50IChwb3NzaWJseSByZW5hbWVkKTogcmUtcmVzb2x2ZSBuYW1lL2ZpZWxkSWR4L2RvbWFpblxuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShmaWx0ZXIsIG5ld0RhdGFzZXRzLCBkYXRhSWQsIG5ld05hbWUsIHZpLCB7XG4gICAgICAgIG1lcmdlRG9tYWluOiB2aSA+IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCF1cGRhdGVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBicnVzaCBmaWx0ZXJzIGNhcnJ5IGEgc2Vjb25kIHktYXhpcyBmaWVsZDsgZm9sbG93IGEgcmVuYW1lIHRoZXJlIHRvb1xuICAgICAgY29uc3QgeUF4aXMgPVxuICAgICAgICB1cGRhdGVkLnlBeGlzPy5uYW1lICYmXG4gICAgICAgIChyZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV1cbiAgICAgICAgICA/IHsuLi51cGRhdGVkLnlBeGlzLCBuYW1lOiByZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV19XG4gICAgICAgICAgOiBuZXdGaWVsZHNCeU5hbWUuaGFzKHVwZGF0ZWQueUF4aXMubmFtZSlcbiAgICAgICAgICA/IHVwZGF0ZWQueUF4aXNcbiAgICAgICAgICA6IG51bGwpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi51cGRhdGVkLFxuICAgICAgICB5QXhpcyxcbiAgICAgICAgLy8gY2xhbXAgdGhlIHVzZXIncyBwcmV2aW91cyBzZWxlY3Rpb24gaW50byB0aGUgbmV3IGRvbWFpbiBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHJlc2V0dGluZyBpdCB0byB0aGUgZnVsbCByYW5nZVxuICAgICAgICB2YWx1ZTogYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihmaWx0ZXIudmFsdWUsIHVwZGF0ZWQpXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKSBhcyBGaWx0ZXJbXTtcblxuICAvLyByZWFzc2lnbiBHUFUgY2hhbm5lbHMgbm93IHRoYXQgdGhlIGZpbHRlciBsaXN0IGlzIHNldHRsZWRcbiAgbmV3RmlsdGVycyA9IG5ld0ZpbHRlcnMubWFwKGZpbHRlciA9PlxuICAgIGZpbHRlci5ncHUgPyBhc3NpZ25HcHVDaGFubmVsKHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBuZXdGaWx0ZXJzKSwgbmV3RmlsdGVycykgOiBmaWx0ZXJcbiAgKTtcblxuICAvLyAzLiByZWJ1aWxkIHRoZSB0YWJsZSdzIGZpbHRlciBzdGF0ZSAoZ3B1RmlsdGVyIC8gZmlsdGVyUmVjb3JkIC8gZmlsdGVyZWRJbmRleClcbiAgbmV3VGFibGUuZmlsdGVyVGFibGUoXG4gICAgbmV3RmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhSWQpLFxuICAgIHt9XG4gICk7XG5cbiAgLy8gNC4gcmVjb25jaWxlIGxheWVyc1xuICBjb25zdCBsYXllcnNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gc3RhdGUubGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH1cbiAgICBjb25zdCByZWNvbmNpbGVkID0gcmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hKGxheWVyLCByZW5hbWVzLCBuZXdUYWJsZSwgc3RhdGUpO1xuICAgIGlmIChyZWNvbmNpbGVkKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlZDtcbiAgICB9XG4gICAgbGF5ZXJzVG9SZW1vdmUucHVzaChsYXllci5pZCk7XG4gICAgcmV0dXJuIGxheWVyOyAvLyBwbGFjZWhvbGRlciwgZHJvcHBlZCB2aWEgcmVtb3ZlTGF5ZXJVcGRhdGVyIGJlbG93XG4gIH0pO1xuXG4gIC8vIDUuIHJlY29uY2lsZSB0b29sdGlwIGZpZWxkc1RvU2hvd1xuICBsZXQgaW50ZXJhY3Rpb25Db25maWcgPSBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZztcbiAgY29uc3QgdG9vbHRpcCA9IGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwO1xuICBjb25zdCBmaWVsZHNUb1Nob3cgPSB0b29sdGlwPy5jb25maWc/LmZpZWxkc1RvU2hvdz8uW2RhdGFJZF07XG4gIGlmIChmaWVsZHNUb1Nob3cpIHtcbiAgICBjb25zdCBuZXh0RmllbGRzVG9TaG93ID0gZmllbGRzVG9TaG93LmZsYXRNYXAoZiA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gcmVuYW1lc1tmLm5hbWVdID8/IGYubmFtZTtcbiAgICAgIHJldHVybiBuZXdGaWVsZHNCeU5hbWUuaGFzKG5hbWUpID8gW3suLi5mLCBuYW1lfV0gOiBbXTtcbiAgICB9KTtcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICAuLi50b29sdGlwLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAuLi50b29sdGlwLmNvbmZpZyxcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHsuLi50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3csIFtkYXRhSWRdOiBuZXh0RmllbGRzVG9TaG93fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG5ld0RhdGFzZXRzLFxuICAgIGZpbHRlcnM6IG5ld0ZpbHRlcnMsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICAvLyA2LiBkcm9wIGxheWVycyB0aGF0IGxvc3QgdGhlaXIgcmVxdWlyZWQgY29sdW1uc1xuICBuZXh0U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIG5leHRTdGF0ZSk7XG5cbiAgLy8gNy4gcmVjb21wdXRlIGxheWVyIGRvbWFpbnMgKyBkYXRhIGZvciB0aGUgdXBkYXRlZCBkYXRhc2V0XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIGRhdGFJZCk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIHNwZWNpZmljIG1hcCBjbG9zaW5nIGljb25cbiAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNsb3NlIHRoZSBzZWxlY3RlZCBtYXBcbiAqIGFuZCB3aWxsIG1lcmdlIHRoZSByZW1haW5pbmcgb25lIHdpdGggdGhlIGdsb2JhbCBzdGF0ZVxuICogVE9ETzogaSB0aGluayBpbiB0aGUgZnV0dXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbWVyZ2UgbWFwIGxheWVycyB3aXRoIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gYWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4PFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICAvLyByZXRyaWV2ZSBsYXllcnMgbWV0YSBkYXRhIGZyb20gdGhlIHJlbWFpbmluZyBtYXAgdGhhdCB3ZSBuZWVkIHRvIGtlZXBcbiAgY29uc3QgaW5kZXhUb1JldHJpZXZlID0gMSAtIGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBtYXBMYXllcnMgPSBzdGF0ZS5zcGxpdE1hcHNbaW5kZXhUb1JldHJpZXZlXT8ubGF5ZXJzO1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuXG4gIC8vIHVwZGF0ZSBsYXllciB2aXNpYmlsaXR5XG4gIGNvbnN0IG5ld0xheWVycyA9IGxheWVycy5tYXAobGF5ZXIgPT5cbiAgICBtYXBMYXllcnMgJiYgIW1hcExheWVyc1tsYXllci5pZF0gJiYgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgaXQgc2hvdWxkIGJlIGluVmlzaWJsZVxuICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogbGF5ZXJcbiAgKTtcblxuICAvLyBkZWxldGUgbWFwXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgc3BsaXRNYXBzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7ZmlsZXMsIG9uRmluaXNoID0gbG9hZEZpbGVzU3VjY2Vzc30gPSBhY3Rpb247XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgY29tcGFuaW9uRmlsZXMgPSBBcnJheS5mcm9tKGZpbGVzKTtcbiAgY29uc3QgZmlsZXNUb0xvYWQgPSBnZXRGaWxlc1RvUGFyc2UoY29tcGFuaW9uRmlsZXMpO1xuICBpZiAoIWZpbGVzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBmaWxlc1RvTG9hZC5yZWR1Y2UoXG4gICAgKGFjY3UsIGYsIGkpID0+IG1lcmdlXyhpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmLCBpKSkoYWNjdSksXG4gICAge31cbiAgKTtcblxuICBjb25zdCBmaWxlTG9hZGluZyA9IHtcbiAgICBmaWxlQ2FjaGU6IFtdLFxuICAgIGZpbGVzVG9Mb2FkLFxuICAgIGNvbXBhbmlvbkZpbGVzLFxuICAgIG9uRmluaXNoXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gbWVyZ2VfKHtmaWxlTG9hZGluZ1Byb2dyZXNzLCBmaWxlTG9hZGluZ30pKHN0YXRlKTtcblxuICByZXR1cm4gbG9hZE5leHRGaWxlVXBkYXRlcihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBTdWNlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlTmFtZSwgZmlsZUNhY2hlfSA9IGFjdGlvbjtcbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ0RvbmUnfVxuICB9KTtcblxuICAvLyBzYXZlIHByb2Nlc3NlZCBmaWxlIHRvIGZpbGVDYWNoZVxuICBjb25zdCBzdGF0ZVdpdGhDYWNoZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZUNhY2hlfSkpKHN0YXRlV2l0aFByb2dyZXNzKTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoQ2FjaGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufVxuXG4vLyB3aXRoVGFzazxUPihzdGF0ZTogVCwgdGFzazogYW55KTogVFxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5leHRGaWxlVXBkYXRlcihzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBbZmlsZSwgLi4ucmVtYWluaW5nRmlsZXNUb0xvYWRdID0gZmlsZXNUb0xvYWQ7XG5cbiAgLy8gc2F2ZSBmaWxlc1RvTG9hZCB0byBzdGF0ZVxuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVzVG9Mb2FkOiByZW1haW5pbmdGaWxlc1RvTG9hZH0pKShzdGF0ZSk7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMCwgbWVzc2FnZTogJ2xvYWRpbmcuLi4nfVxuICB9KTtcblxuICBjb25zdCB7bG9hZGVycywgbG9hZE9wdGlvbnN9ID0gc3RhdGU7XG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgZmlsZSxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyAmJiBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuZmlsZUNhY2hlLFxuICAgICAgbG9hZGVycyxcbiAgICAgIGxvYWRPcHRpb25zLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nID8gbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmNvbXBhbmlvbkZpbGVzIDogdW5kZWZpbmVkXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvYWRGaWxlVGFzayhcbiAgZmlsZSxcbiAgZmlsZUNhY2hlLFxuICBsb2FkZXJzOiBMb2FkZXJbXSA9IFtdLFxuICBsb2FkT3B0aW9ucyA9IHt9LFxuICBjb21wYW5pb25GaWxlcz86IEZpbGVbXVxuKSB7XG4gIHJldHVybiBMT0FEX0ZJTEVfVEFTSyh7ZmlsZSwgZmlsZUNhY2hlLCBsb2FkZXJzLCBsb2FkT3B0aW9ucywgY29tcGFuaW9uRmlsZXN9KS5iaW1hcChcbiAgICAvLyBwcmV0dGllciBpZ25vcmVcbiAgICAvLyBzdWNjZXNzXG4gICAgZ2VuID0+XG4gICAgICBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICBvbkZpbmlzaDogcmVzdWx0ID0+XG4gICAgICAgICAgcHJvY2Vzc0ZpbGVDb250ZW50KHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGZpbGVDYWNoZVxuICAgICAgICAgIH0pXG4gICAgICB9KSxcblxuICAgIC8vIGVycm9yXG4gICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlLm5hbWUsIGVycilcbiAgKTtcbn1cblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29udGVudCwgZmlsZUNhY2hlfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdwcm9jZXNzaW5nLi4uJ31cbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIFBST0NFU1NfRklMRV9EQVRBKHtjb250ZW50LCBmaWxlQ2FjaGV9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSwgZmlsZUNhY2hlOiByZXN1bHR9KSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoY29udGVudC5maWxlTmFtZSwgZXJyKVxuICAgIClcbiAgKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJvZ3Jlc3MocHJldlByb2dyZXNzID0ge30sIHByb2dyZXNzKSB7XG4gIC8vIFRoaXMgaGFwcGVucyB3aGVuIHJlY2VpdmluZyBxdWVyeSBtZXRhZGF0YSBvciBvdGhlciBjYXNlcyB3ZSBkb24ndFxuICAvLyBoYXZlIGFuIHVwZGF0ZSBmb3IgdGhlIHVzZXIuXG4gIGlmICghcHJvZ3Jlc3MgfHwgIXByb2dyZXNzLnBlcmNlbnQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBlcmNlbnQ6IHByb2dyZXNzLnBlcmNlbnRcbiAgfTtcbn1cblxuLyoqXG4gKiBnZXRzIGNhbGxlZCB3aXRoIHBheWxvYWQgPSBBc3luY0dlbmVyYXRvcjw/Pz8+XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbmV4dEZpbGVCYXRjaFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtnZW4sIGZpbGVOYW1lLCBwcm9ncmVzcywgYWNjdW11bGF0ZWQsIG9uRmluaXNofVxuICB9OiBWaXNTdGF0ZUFjdGlvbnMuTmV4dEZpbGVCYXRjaFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiBwYXJzZVByb2dyZXNzKHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3NbZmlsZU5hbWVdLCBwcm9ncmVzcylcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHN0YXRlV2l0aFByb2dyZXNzLCBbXG4gICAgLi4uKGdldEFwcGxpY2F0aW9uQ29uZmlnKCkudXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmcgJiZcbiAgICBmaWxlTmFtZS5lbmRzV2l0aCgnYXJyb3cnKSAmJlxuICAgIGFjY3VtdWxhdGVkPy5kYXRhPy5sZW5ndGggPiAwXG4gICAgICA/IFtcbiAgICAgICAgICAvLyBTa2lwIGNvbXBhY3Rpb24gd2hpbGUgYmF0Y2hlcyBhcmUgc3RpbGwgYXJyaXZpbmcuIFRoZSBjb21wbGV0ZWRcbiAgICAgICAgICAvLyBmaWxlIGlzIGNvbXBhY3RlZCBvbmNlIGluIHByb2Nlc3NGaWxlQ29udGVudC5cbiAgICAgICAgICBQUk9DRVNTX0ZJTEVfREFUQSh7XG4gICAgICAgICAgICBjb250ZW50OiB7Li4uYWNjdW11bGF0ZWQsIHNraXBBcnJvd0NvbXBhY3Q6IHRydWV9LFxuICAgICAgICAgICAgZmlsZUNhY2hlOiBbXVxuICAgICAgICAgIH0pLmJpbWFwKFxuICAgICAgICAgICAgcmVzdWx0ID0+IGxvYWRGaWxlc1N1Y2Nlc3MocmVzdWx0KSxcbiAgICAgICAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgIDogW10pLFxuICAgIFVOV1JBUF9UQVNLKGdlbi5uZXh0KCkpLmJpbWFwKFxuICAgICAgKHt2YWx1ZSwgZG9uZX0pID0+IHtcbiAgICAgICAgcmV0dXJuIGRvbmVcbiAgICAgICAgICA/IG9uRmluaXNoKGFjY3VtdWxhdGVkKVxuICAgICAgICAgIDogbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgICAgICAgIGdlbixcbiAgICAgICAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgICAgICAgIHByb2dyZXNzOiB2YWx1ZS5wcm9ncmVzcyxcbiAgICAgICAgICAgICAgYWNjdW11bGF0ZWQ6IHZhbHVlLFxuICAgICAgICAgICAgICBvbkZpbmlzaFxuICAgICAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgIClcbiAgXSk7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbG9hZGluZyBmaWxlIGVycm9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzRXJyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXJyb3IsIGZpbGVOYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc0VyclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gdXBkYXRlIHVpIHdpdGggZXJyb3IgbWVzc2FnZVxuICBDb25zb2xlLndhcm4oZXJyb3IpO1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlc1RvTG9hZCwgb25GaW5pc2gsIGZpbGVDYWNoZX0gPSBzdGF0ZS5maWxlTG9hZGluZztcblxuICBjb25zdCBuZXh0U3RhdGUgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7ZXJyb3J9XG4gIH0pO1xuXG4gIC8vIGtpY2sgb2ZmIG5leHQgZmlsZSBvciBmaW5pc2hcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIG5leHRTdGF0ZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKGZpbGVzVG9Mb2FkLmxlbmd0aCA/IGxvYWROZXh0RmlsZSA6ICgpID0+IG9uRmluaXNoKGZpbGVDYWNoZSkpXG4gICk7XG59O1xuXG4vKipcbiAqIFdoZW4gc2VsZWN0IGRhdGFzZXQgZm9yIGV4cG9ydCwgYXBwbHkgY3B1IGZpbHRlciB0byBzZWxlY3RlZCBkYXRhc2V0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYXBwbHlDUFVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlDUFVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFwcGx5IGNwdUZpbHRlclxuICBjb25zdCBkYXRhSWRzID0gdG9BcnJheShkYXRhSWQpO1xuXG4gIHJldHVybiBkYXRhSWRzLnJlZHVjZSgoYWNjdSwgaWQpID0+IGZpbHRlckRhdGFzZXRDUFUoYWNjdSwgaWQpLCBzdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVzZXIgaW5wdXQgdG8gdXBkYXRlIHRoZSBpbmZvIG9mIHRoZSBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRNYXBJbmZvVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRNYXBJbmZvVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1hcEluZm86IHtcbiAgICAuLi5zdGF0ZS5tYXBJbmZvLFxuICAgIC4uLmFjdGlvbi5pbmZvXG4gIH1cbn0pO1xuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIEFsbCBsYXllciBkb21haW4gYW5kIGxheWVyIGRhdGEgb2Ygc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRMYXllcnMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgZGF0YXNldHM6IERhdGFzZXRzXG4pOiB7c3RhdGU6IFZpc1N0YXRlOyBuZXdMYXllcnM6IExheWVyW119IHtcbiAgY29uc3QgZW1wdHk6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZGVmYXVsdExheWVycyA9IE9iamVjdC52YWx1ZXMoZGF0YXNldHMpLnJlZHVjZSgoYWNjdTogTGF5ZXJbXSwgZGF0YXNldCkgPT4ge1xuICAgIGNvbnN0IGZvdW5kTGF5ZXJzID0gZmluZERlZmF1bHRMYXllcihkYXRhc2V0LCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICAgIHJldHVybiBmb3VuZExheWVycyAmJiBmb3VuZExheWVycy5sZW5ndGggPyBhY2N1LmNvbmNhdChmb3VuZExheWVycykgOiBhY2N1O1xuICB9LCBlbXB0eSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0ZToge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIC4uLmRlZmF1bHRMYXllcnNdLFxuICAgICAgbGF5ZXJPcmRlcjogW1xuICAgICAgICAvLyBwdXQgbmV3IGxheWVycyBvbiB0b3Agb2Ygb2xkIG9uZXMgaW4gcmV2ZXJzZVxuICAgICAgICAuLi5nZXRMYXllck9yZGVyRnJvbUxheWVycyhkZWZhdWx0TGF5ZXJzKSxcbiAgICAgICAgLi4uc3RhdGUubGF5ZXJPcmRlclxuICAgICAgXVxuICAgIH0sXG4gICAgbmV3TGF5ZXJzOiBkZWZhdWx0TGF5ZXJzXG4gIH07XG59XG5cbi8qKlxuICogaGVscGVyIGZ1bmN0aW9uIHRvIGZpbmQgZGVmYXVsdCB0b29sdGlwc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YXNldFxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0VG9vbHRpcHMoc3RhdGUsIGRhdGFzZXQpIHtcbiAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IGZpbmRGaWVsZHNUb1Nob3coe1xuICAgIC4uLmRhdGFzZXQsXG4gICAgbWF4RGVmYXVsdFRvb2x0aXBzOiBzdGF0ZS5tYXhEZWZhdWx0VG9vbHRpcHNcbiAgfSk7XG4gIGNvbnN0IG1lcmdlZCA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3csXG4gICAgLi4udG9vbHRpcEZpZWxkc1xuICB9O1xuXG4gIHJldHVybiBzZXQoWydpbnRlcmFjdGlvbkNvbmZpZycsICd0b29sdGlwJywgJ2NvbmZpZycsICdmaWVsZHNUb1Nob3cnXSwgbWVyZ2VkLCBzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmaWxlLCBpbmRleCkge1xuICBjb25zdCBmaWxlTmFtZSA9IGZpbGUubmFtZSB8fCBgVW50aXRsZWQgRmlsZSAke2luZGV4fWA7XG4gIHJldHVybiB7XG4gICAgW2ZpbGVOYW1lXToge1xuICAgICAgLy8gcGVyY2VudCBvZiBjdXJyZW50IGZpbGVcbiAgICAgIHBlcmNlbnQ6IDAsXG4gICAgICBtZXNzYWdlOiAnJyxcbiAgICAgIGZpbGVOYW1lLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge2ZpbGVOYW1lLCBwcm9ncmVzc30pIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICByZXR1cm4gcGlja18oJ2ZpbGVMb2FkaW5nUHJvZ3Jlc3MnKShwaWNrXyhmaWxlTmFtZSkobWVyZ2VfKHByb2dyZXNzKSkpKHN0YXRlKTtcbn1cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBsYXllciBkb21haW5zIGZvciBhbiBhcnJheSBvZiBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBkYXRhSWQ6IHN0cmluZyB8IHN0cmluZ1tdLFxuICB1cGRhdGVkRmlsdGVyPzogRmlsdGVyXG4pOiBTIHtcbiAgY29uc3QgZGF0YUlkcyA9IHR5cGVvZiBkYXRhSWQgPT09ICdzdHJpbmcnID8gW2RhdGFJZF0gOiBkYXRhSWQ7XG4gIGNvbnN0IG5ld0xheWVyczogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBuZXdMYXllckRhdGE6IGFueVtdID0gW107XG5cbiAgc3RhdGUubGF5ZXJzLmZvckVhY2goKG9sZExheWVyLCBpKSA9PiB7XG4gICAgaWYgKG9sZExheWVyLmNvbmZpZy5kYXRhSWQgJiYgZGF0YUlkcy5pbmNsdWRlcyhvbGRMYXllci5jb25maWcuZGF0YUlkKSkge1xuICAgICAgLy8gTm8gbmVlZCB0byByZWNhbGN1bGF0ZSBsYXllciBkb21haW4gaWYgZmlsdGVyIGhhcyBmaXhlZCBkb21haW5cbiAgICAgIGNvbnN0IG5ld0xheWVyID1cbiAgICAgICAgdXBkYXRlZEZpbHRlciAmJiB1cGRhdGVkRmlsdGVyLmZpeGVkRG9tYWluXG4gICAgICAgICAgPyBvbGRMYXllclxuICAgICAgICAgIDogb2xkTGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMsIHVwZGF0ZWRGaWx0ZXIpO1xuXG4gICAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaV0pO1xuXG4gICAgICBuZXdMYXllcnMucHVzaChsYXllcik7XG4gICAgICBuZXdMYXllckRhdGEucHVzaChsYXllckRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllcnMucHVzaChvbGRMYXllcik7XG4gICAgICBuZXdMYXllckRhdGEucHVzaChzdGF0ZS5sYXllckRhdGFbaV0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJEYXRhOiBuZXdMYXllckRhdGFcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbmltYXRpb25Eb21haW48UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUyk6IFMge1xuICAvLyBtZXJnZSBhbGwgYW5pbWF0YWJsZSBsYXllciBkb21haW4gYW5kIHVwZGF0ZSBnbG9iYWwgY29uZmlnXG4gIGNvbnN0IGFuaW1hdGFibGVMYXllcnMgPSBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGlmICghYW5pbWF0YWJsZUxheWVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICBkb21haW46IG51bGwsXG4gICAgICAgIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgICAgICAgdGltZVN0ZXBzOiBudWxsLFxuICAgICAgICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjb25zdCBsYXllckRvbWFpbnMgPSBhbmltYXRhYmxlTGF5ZXJzLm1hcChsID0+IGwuY29uZmlnLmFuaW1hdGlvbi5kb21haW4gfHwgW10pO1xuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IG1lcmdlZERvbWFpbiA9IG1lcmdlVGltZURvbWFpbnMobGF5ZXJEb21haW5zKTtcbiAgY29uc3QgZGVmYXVsdFRpbWVGb3JtYXQgPSBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIobWVyZ2VkRG9tYWluKTtcblxuICAvLyBtZXJnZSB0aW1lU3RlcHNcbiAgbGV0IG1lcmdlZFRpbWVTdGVwczogbnVtYmVyW10gfCBudWxsID0gdW5pcTxudW1iZXI+KFxuICAgIGFuaW1hdGFibGVMYXllcnMucmVkdWNlKChhY2N1LCBsYXllcikgPT4ge1xuICAgICAgYWNjdS5wdXNoKC4uLihsYXllci5jb25maWcuYW5pbWF0aW9uLnRpbWVTdGVwcyB8fCBbXSkpO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfSwgW10pXG4gICkuc29ydCgpO1xuXG4gIG1lcmdlZFRpbWVTdGVwcyA9IG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggPyBtZXJnZWRUaW1lU3RlcHMgOiBudWxsO1xuXG4gIC8vIFRPRE86IGJldHRlciBoYW5kbGluZyBvZiBkdXJhdGlvbiBjYWxjdWxhdGlvblxuICBjb25zdCBkdXJhdGlvbiA9IG1lcmdlZFRpbWVTdGVwc1xuICAgID8gKEJBU0VfU1BFRUQgKiAoMTAwMCAvIEZQUykpIC8gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCAvIChzdGF0ZS5hbmltYXRpb25Db25maWcuc3BlZWQgfHwgMSlcbiAgICA6IG51bGw7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgZG9tYWluOiBtZXJnZWREb21haW4sXG4gICAgICBkZWZhdWx0VGltZUZvcm1hdCxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgdGltZVN0ZXBzOiBtZXJnZWRUaW1lU3RlcHNcbiAgICB9XG4gIH07XG5cbiAgLy8gcmVzZXQgY3VycmVudFRpbWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICBjb25zdCBzeW5jZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzPy5maW5kKGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSkgYXNcbiAgICB8IFRpbWVSYW5nZUZpbHRlclxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIC8vIGlmIHN5bmNlZCBmaWx0ZXIgZXhpc3Qgd2VlIG5lZWQgdG8gbWVyZ2UgYW5pbWF0aW9uQ29uZmlnIGFuZCBmaWx0ZXIgZG9tYWluc1xuICAvLyBhbmQgdmFsaWRhdGUgdGhlIGN1cnJlbnQgdGltZSBhZ2FpbnN0IHRoZSBuZXcgbWVyZ2VkIGRvbWFpblxuICBjb25zdCBuZXdBbmltYXRpb25Eb21haW4gPSBzeW5jZWRGaWx0ZXJcbiAgICA/IG1lcmdlVGltZURvbWFpbnMoW21lcmdlZERvbWFpbiwgc3luY2VkRmlsdGVyLmRvbWFpbl0pXG4gICAgOiBtZXJnZWREb21haW47XG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gaXNJblJhbmdlKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSwgbmV3QW5pbWF0aW9uRG9tYWluKVxuICAgID8gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lXG4gICAgOiBuZXdBbmltYXRpb25Eb21haW5bMF07XG5cbiAgaWYgKGN1cnJlbnRUaW1lICE9PSBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUpIHtcbiAgICAvLyBpZiBjdXJyZW50VGltZSBjaGFuZ2VkLCBuZWVkIHRvIGNhbGwgYW5pbWF0aW9uVGltZVVwZGF0ZXIgdG8gcmUgY2FsbCBmb3JtYXRMYXllckRhdGFcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihuZXh0U3RhdGUsIHt2YWx1ZTogY3VycmVudFRpbWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSBzdGF0dXMgb2YgdGhlIGVkaXRvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEVkaXRvck1vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNldEVkaXRvck1vZGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHNrZXRjaGVzRW5hYmxlZCA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXM7XG4gIGlmIChcbiAgICAhc2tldGNoZXNFbmFibGVkICYmXG4gICAgKG1vZGUgPT09IEVESVRPUl9NT0RFUy5EUkFXX1BPSU5UIHx8IG1vZGUgPT09IEVESVRPUl9NT0RFUy5EUkFXX0xJTkVTVFJJTkcpXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBtb2RlLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgfVxuICB9O1xufTtcblxuLy8gY29uc3QgZmVhdHVyZVRvRmlsdGVyVmFsdWUgPSAoZmVhdHVyZSkgPT4gKHsuLi5mZWF0dXJlLCBpZDogZmVhdHVyZS5pZH0pO1xuLyoqXG4gKiBVcGRhdGUgZWRpdG9yIGZlYXR1cmVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZXNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlcyA9IFtdfTogVmlzU3RhdGVBY3Rpb25zLlNldEZlYXR1cmVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBsYXN0RmVhdHVyZSA9IGZlYXR1cmVzLmxlbmd0aCAmJiBmZWF0dXJlc1tmZWF0dXJlcy5sZW5ndGggLSAxXTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIC8vIG9ubHkgc2F2ZSBub25lIGZpbHRlciBmZWF0dXJlcyB0byBlZGl0b3JcbiAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcy5maWx0ZXIoZiA9PiAhZ2V0RmlsdGVySWRJbkZlYXR1cmUoZikpLFxuICAgICAgbW9kZTpcbiAgICAgICAgbGFzdEZlYXR1cmUgJiYgbGFzdEZlYXR1cmUucHJvcGVydGllcz8uaXNDbG9zZWRcbiAgICAgICAgICA/IGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LnNoYXBlID09PSAnUmVjdGFuZ2xlJ1xuICAgICAgICAgICAgPyBzdGF0ZS5lZGl0b3IubW9kZVxuICAgICAgICAgICAgOiBFRElUT1JfTU9ERVMuRURJVFxuICAgICAgICAgIDogc3RhdGUuZWRpdG9yLm1vZGVcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgZXhpc3RpbmcgZmVhdHVyZVxuICBjb25zdCB7c2VsZWN0ZWRGZWF0dXJlfSA9IHN0YXRlLmVkaXRvcjtcblxuICAvLyBJZiBubyBmZWF0dXJlIGlzIHNlbGVjdGVkIHdlIGNhbiBzaW1wbHkgcmV0dXJuIHNpbmNlIG5vIG9wZXJhdGlvbnNcbiAgaWYgKCFzZWxlY3RlZEZlYXR1cmUpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICAvLyBUT0RPOiBjaGVjayBpZiB0aGUgZmVhdHVyZSBoYXMgY2hhbmdlZFxuICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXMuZmluZChmID0+IGYuaWQgPT09IHNlbGVjdGVkRmVhdHVyZS5pZCk7XG5cbiAgLy8gaWYgZmVhdHVyZSBpcyBwYXJ0IG9mIGEgZmlsdGVyXG4gIGNvbnN0IGZpbHRlcklkID0gZmVhdHVyZSAmJiBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkICYmIGZlYXR1cmUpIHtcbiAgICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gICAgaWYgKGZlYXR1cmUucHJvcGVydGllcykgZmVhdHVyZS5wcm9wZXJ0aWVzLmJib3ggPSBiYm94KGZlYXR1cmUgYXMgdW5rbm93biBhcyBBbGxHZW9KU09OKTtcbiAgICBjb25zdCBmZWF0dXJlVmFsdWUgPSBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmZWF0dXJlLCBmaWx0ZXJJZCk7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZmlsID0+IGZpbC5pZCA9PT0gZmlsdGVySWQpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IGZlYXR1cmVWYWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBmaW5kRWRpdG9yRmVhdHVyZShzdGF0ZTogVmlzU3RhdGUsIGZlYXR1cmU/OiBGZWF0dXJlIHwgbnVsbCk6IEZlYXR1cmUgfCBudWxsIHtcbiAgaWYgKCFmZWF0dXJlPy5pZCkge1xuICAgIHJldHVybiBmZWF0dXJlIHx8IG51bGw7XG4gIH1cbiAgaWYgKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU/LmlkID09PSBmZWF0dXJlLmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU7XG4gIH1cbiAgY29uc3QgZnJvbUVkaXRvciA9IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmVhdHVyZS5pZCk7XG4gIGlmIChmcm9tRWRpdG9yKSB7XG4gICAgcmV0dXJuIGZyb21FZGl0b3I7XG4gIH1cbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmlsdGVySWQpO1xuICAgIGlmIChmaWx0ZXI/LnZhbHVlKSB7XG4gICAgICByZXR1cm4gZmlsdGVyLnZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmVhdHVyZTtcbn1cblxuLyoqXG4gKiBTZXQgdXNlci1mYWNpbmcgR2VvSlNPTiBwcm9wZXJ0aWVzIG9uIGEgc2tldGNoIG9yIHBvbHlnb24tZmlsdGVyIGZlYXR1cmUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlLCBwcm9wZXJ0aWVzfTogVmlzU3RhdGVBY3Rpb25zLlNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBzb3VyY2UgPSBmaW5kRWRpdG9yRmVhdHVyZShzdGF0ZSwgZmVhdHVyZSk7XG4gIGlmICghc291cmNlPy5pZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHRGZWF0dXJlID0gbWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMoc291cmNlLCBwcm9wZXJ0aWVzKTtcbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShuZXh0RmVhdHVyZSk7XG4gIGNvbnN0IG5leHRFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBmaWx0ZXJJZFxuICAgICAgPyBzdGF0ZS5lZGl0b3IuZmVhdHVyZXNcbiAgICAgIDogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLm1hcChpdGVtID0+IChpdGVtLmlkID09PSBuZXh0RmVhdHVyZS5pZCA/IG5leHRGZWF0dXJlIDogaXRlbSkpLFxuICAgIHNlbGVjdGVkRmVhdHVyZTpcbiAgICAgIHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU/LmlkID09PSBuZXh0RmVhdHVyZS5pZFxuICAgICAgICA/IG5leHRGZWF0dXJlXG4gICAgICAgIDogc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZVxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5leHRFZGl0b3JcbiAgfTtcblxuICBpZiAoIWZpbHRlcklkKSB7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySWR4IDwgMCkge1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShuZXh0RmVhdHVyZSwgZmlsdGVySWQpXG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCBzZWxlY3RlZCBmZWF0dXJlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlLCBzZWxlY3Rpb25Db250ZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICBsZXQgc2VsZWN0ZWRGZWF0dXJlID0gZmVhdHVyZTtcbiAgaWYgKGZlYXR1cmU/LnByb3BlcnRpZXMpIHtcbiAgICBzZWxlY3RlZEZlYXR1cmUgPSB7XG4gICAgICAuLi5mZWF0dXJlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgIGJib3g6IGJib3goZmVhdHVyZSBhcyB1bmtub3duIGFzIEFsbEdlb0pTT04pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgc2VsZWN0aW9uQ29udGV4dFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogRGVsZXRlIGV4aXN0aW5nIGZlYXR1cmUgZnJvbSBmaWx0ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRmVhdHVyZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmV9OiBWaXNTdGF0ZUFjdGlvbnMuRGVsZXRlRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFmZWF0dXJlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG5cbiAgaWYgKGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKSB7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSk7XG5cbiAgICByZXR1cm4gZmlsdGVySWR4ID4gLTEgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KSA6IG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gbW9kaWZ5IGVkaXRvciBvYmplY3RcbiAgY29uc3QgbmV3RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXdFZGl0b3JcbiAgfTtcbn1cblxuLyoqXG4gKiBUb2dnbGUgZmVhdHVyZSBhcyBsYXllciBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBheWxvYWQ6IFZpc1N0YXRlQWN0aW9ucy5TZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllciwgZmVhdHVyZX0gPSBwYXlsb2FkO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuXG4gIC8vIGxldCBuZXdGaWx0ZXIgPSBudWxsO1xuICBsZXQgZmlsdGVySWR4O1xuICBsZXQgbmV3TGF5ZXJJZCA9IFtsYXllci5pZF07XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAvLyBJZiBwb2x5Z29uIGZpbHRlciBhbHJlYWR5IGV4aXN0cywgd2UgbmVlZCB0byBmaW5kIG91dCBpZiB0aGUgY3VycmVudCBsYXllciBpcyBhbHJlYWR5IGluY2x1ZGVkXG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuXG4gICAgaWYgKCFzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0pIHtcbiAgICAgIC8vIHdoYXQgaWYgZmlsdGVyIGRvZXNuJ3QgZXhpc3Q/Li4uIG5vdCBwb3NzaWJsZS5cbiAgICAgIC8vIGJlY2F1c2UgZmVhdHVyZXMgaW4gdGhlIGVkaXRvciBpcyBwYXNzZWQgaW4gZnJvbSBmaWx0ZXJzIGFuZCBlZGl0b3JzLlxuICAgICAgLy8gYnV0IHdlIHdpbGwgbW92ZSB0aGlzIGZlYXR1cmUgYmFjayB0byBlZGl0b3IganVzdCBpbiBjYXNlXG4gICAgICBjb25zdCBub25lRmlsdGVyRmVhdHVyZSA9IHtcbiAgICAgICAgLi4uZmVhdHVyZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICBmaWx0ZXJJZDogbnVsbFxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGUuZWRpdG9yLmZlYXR1cmVzLCBub25lRmlsdGVyRmVhdHVyZV0sXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBub25lRmlsdGVyRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gICAgY29uc3Qge2xheWVySWQgPSBbXX0gPSBmaWx0ZXI7XG4gICAgY29uc3QgaXNMYXllckluY2x1ZGVkID0gbGF5ZXJJZC5pbmNsdWRlcyhsYXllci5pZCk7XG5cbiAgICBuZXdMYXllcklkID0gaXNMYXllckluY2x1ZGVkXG4gICAgICA/IC8vIGlmIGxheWVyIGlzIGluY2x1ZGVkLCByZW1vdmUgaXRcbiAgICAgICAgbGF5ZXJJZC5maWx0ZXIobCA9PiBsICE9PSBsYXllci5pZClcbiAgICAgIDogWy4uLmxheWVySWQsIGxheWVyLmlkXTtcblxuICAgIC8vIExhc3QgbGF5ZXIgcmVtb3ZlZDogdHVybiB0aGUgZmlsdGVyIHBvbHlnb24gYmFjayBpbnRvIGEgc2tldGNoXG4gICAgaWYgKCFuZXdMYXllcklkLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2tldGNoRmVhdHVyZSA9IHRvU2tldGNoRmVhdHVyZShmZWF0dXJlKTtcbiAgICAgIGNvbnN0IHN0YXRlV2l0aG91dEZpbHRlciA9IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGVXaXRob3V0RmlsdGVyLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIuZWRpdG9yLFxuICAgICAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGVXaXRob3V0RmlsdGVyLmVkaXRvci5mZWF0dXJlcywgc2tldGNoRmVhdHVyZV0sXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBza2V0Y2hGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGlmIHdlIGhhdmVuJ3QgY3JlYXRlIHRoZSBwb2x5Z29uIGZpbHRlciwgY3JlYXRlIGl0XG4gICAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICAgIC8vIGFkZCBmZWF0dXJlLCByZW1vdmUgZmVhdHVyZSBmcm9tIGVpZHRvclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICAgIGVkaXRvcjoge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBuZXdMYXllcklkXG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGx5IHBvbHlnb24gZmlsdGVyIHRvIGFsbCB2aXNpYmxlIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBheWxvYWQ6IFZpc1N0YXRlQWN0aW9ucy5TZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZmVhdHVyZX0gPSBwYXlsb2FkO1xuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMubGVuZ3RoO1xuXG4gIGNvbnN0IG5ld1N0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZSxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHZpc2libGVMYXllcklkcyA9IGdldChwYXlsb2FkLCAndmlzaWJsZUxheWVySWRzJyk7XG4gIGNvbnN0IGFsbExheWVySWRzID0gQXJyYXkuaXNBcnJheSh2aXNpYmxlTGF5ZXJJZHMpXG4gICAgPyB2aXNpYmxlTGF5ZXJJZHNcbiAgICA6IHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5pc1Zpc2libGUpLm1hcChsID0+IGwuaWQpO1xuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBhbGxMYXllcklkc1xuICB9KTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydFRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW4sIG1vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU29ydFRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBzb3J0TW9kZSA9IG1vZGU7XG4gIGlmICghc29ydE1vZGUpIHtcbiAgICBjb25zdCBjdXJyZW50TW9kZSA9IGdldChkYXRhc2V0LCBbJ3NvcnRDb2x1bW4nLCBjb2x1bW5dKTtcbiAgICAvLyBAdHMtaWdub3JlIC0gc2hvdWxkIGJlIGZpeGFibGUgaW4gYSBUUyBmaWxlXG4gICAgc29ydE1vZGUgPSBjdXJyZW50TW9kZVxuICAgICAgPyBPYmplY3Qua2V5cyhTT1JUX09SREVSKS5maW5kKG0gPT4gbSAhPT0gY3VycmVudE1vZGUpXG4gICAgICA6IFNPUlRfT1JERVIuQVNDRU5ESU5HO1xuICB9XG5cbiAgY29uc3Qgc29ydGVkID0gc29ydERhdGFzZXRCeUNvbHVtbihkYXRhc2V0LCBjb2x1bW4sIHNvcnRNb2RlKTtcbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgc29ydGVkLCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuUGluVGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3RGF0YXNldCA9IHBpblRhYmxlQ29sdW1ucyhkYXRhc2V0LCBjb2x1bW4pO1xuXG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBDb3B5IGNvbHVtbiBjb250ZW50IGFzIHN0cmluZ3NcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5Db3B5VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge3R5cGV9ID0gZGF0YXNldC5maWVsZHNbZmllbGRJZHhdO1xuICBjb25zdCB0ZXh0ID0gZGF0YXNldC5kYXRhQ29udGFpbmVyXG4gICAgLm1hcChyb3cgPT4gcGFyc2VGaWVsZFZhbHVlKHJvdy52YWx1ZUF0KGZpZWxkSWR4KSwgdHlwZSksIHRydWUpXG4gICAgLmpvaW4oJ1xcbicpO1xuXG4gIGNvcHkodGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFNldCBkaXNwbGF5IGZvcm1hdCBmcm9tIGNvbHVtbnMgZnJvbSB1c2VyIHNlbGVjdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGZvcm1hdHN9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHM7XG4gIE9iamVjdC5rZXlzKGZvcm1hdHMpLmZvckVhY2goY29sdW1uID0+IHtcbiAgICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgICBpZiAoZmllbGRJZHggPj0gMCkge1xuICAgICAgY29uc3QgZGlzcGxheUZvcm1hdCA9IGZvcm1hdHNbY29sdW1uXTtcbiAgICAgIGNvbnN0IGZpZWxkID0gbmV3RmllbGRzW2ZpZWxkSWR4XTtcbiAgICAgIG5ld0ZpZWxkcyA9IHN3YXBfKG1lcmdlXyh7ZGlzcGxheUZvcm1hdH0pKGZpZWxkKSBhcyB7aWQ6IHN0cmluZ30pKFxuICAgICAgICBuZXdGaWVsZHMgYXMge2lkOiBzdHJpbmd9W11cbiAgICAgICkgYXMgRmllbGRbXTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzIGFzIEZpZWxkW119KTtcbiAgbGV0IG5ld1N0YXRlID0gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG5cbiAgLy8gdXBkYXRlIGNvbG9yRmllbGQgZGlzcGxheUZvcm1hdFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllcnM6IG5ld1N0YXRlLmxheWVycy5tYXAobGF5ZXIgPT5cbiAgICAgIGxheWVyLmNvbmZpZz8uY29sb3JGaWVsZD8ubmFtZSAmJiBsYXllci5jb25maWcuY29sb3JGaWVsZC5uYW1lIGluIGZvcm1hdHNcbiAgICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICBjb2xvckZpZWxkOiB7XG4gICAgICAgICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvckZpZWxkLFxuICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0OiBmb3JtYXRzW2xheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWVdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBsYXllclxuICAgIClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbnR5cGUgTG9hZENvbHVtblN0YXRzVGFza1BheWxvYWQgPSB7XG4gIGRhdGFzZXQ6IFZpc1N0YXRlWydkYXRhc2V0cyddW3N0cmluZ107XG4gIGZpZWxkOiBGaWVsZDtcbn07XG5cbmZ1bmN0aW9uIGdldE1hcHBlZFZhbHVlKGZpbHRlclByb3BzPzogRmlsdGVyUHJvcHMgfCBudWxsKTogdW5rbm93bltdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGZpbHRlclByb3BzICYmICdtYXBwZWRWYWx1ZScgaW4gZmlsdGVyUHJvcHMgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXJQcm9wcy5tYXBwZWRWYWx1ZSkpIHtcbiAgICByZXR1cm4gZmlsdGVyUHJvcHMubWFwcGVkVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24geWllbGRGb3JQYWludCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgMCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3Moe2RhdGFzZXQsIGZpZWxkfTogTG9hZENvbHVtblN0YXRzVGFza1BheWxvYWQpIHtcbiAgLy8gWWllbGQgc28gdGhlIGRhdGEgdGFibGUgYW5kIHBlci1jb2x1bW4gbG9hZGluZyBzcGlubmVycyBjYW4gcGFpbnQgZmlyc3QuXG4gIGF3YWl0IHlpZWxkRm9yUGFpbnQoKTtcbiAgY29uc3QgZmlsdGVyUHJvcHMgPSBmaWVsZC5maWx0ZXJQcm9wcyB8fCBkYXRhc2V0LmdldENvbHVtbkZpbHRlclByb3BzKGZpZWxkLm5hbWUpO1xuICBjb25zdCBtYXBwZWRWYWx1ZSA9IGdldE1hcHBlZFZhbHVlKGZpbHRlclByb3BzKTtcbiAgY29uc3QgdmFsdWVzID0gbWFwcGVkVmFsdWUgPz8gY29sbGVjdENvbHVtblZhbHVlcyhkYXRhc2V0LmRhdGFDb250YWluZXIsIGZpZWxkLmZpZWxkSWR4KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0Q29sdW1uU3RhdGlzdGljcyh7XG4gICAgdmFsdWVzLFxuICAgIGZpZWxkVHlwZTogZmllbGQudHlwZVxuICB9KTtcblxuICByZXR1cm4ge3Jlc3VsdCwgZmlsdGVyUHJvcHN9O1xufVxuXG5jb25zdCBMT0FEX0NPTFVNTl9TVEFUU19UQVNLID0gVGFzay5mcm9tUHJvbWlzZShcbiAgcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzLFxuICAnTE9BRF9DT0xVTU5fU1RBVFNfVEFTSydcbik7XG5cbi8qKlxuICogU3RhcnQgbG9hZGluZyBjb2x1bW4gc3RhdGlzdGljcyBmb3Igb25lIG9yIG1vcmUgZmllbGRzLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmllbGROYW1lc1RvTG9hZCA9IHRvQXJyYXkoZmllbGROYW1lKTtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkc1RvTG9hZCA9IGRhdGFzZXQ/LmZpZWxkcy5maWx0ZXIoZiA9PiBmaWVsZE5hbWVzVG9Mb2FkLmluY2x1ZGVzKGYubmFtZSkpO1xuICBpZiAoIWRhdGFzZXQgfHwgIWZpZWxkc1RvTG9hZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZmllbGQgPT5cbiAgICBmaWVsZE5hbWVzVG9Mb2FkLmluY2x1ZGVzKGZpZWxkLm5hbWUpID8gey4uLmZpZWxkLCBpc0xvYWRpbmdTdGF0czogdHJ1ZX0gOiBmaWVsZFxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuXG4gIGNvbnN0IHRhc2tzID0gZmllbGRzVG9Mb2FkLm1hcChmID0+XG4gICAgTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyh7ZGF0YXNldDogbmV3RGF0YXNldCwgZmllbGQ6IGZ9KS5iaW1hcChcbiAgICAgICh7cmVzdWx0LCBmaWx0ZXJQcm9wc30pID0+IGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MobmV3RGF0YXNldC5pZCwgZi5uYW1lLCByZXN1bHQsIGZpbHRlclByb3BzKSxcbiAgICAgIChlcnJvcjogRXJyb3IpID0+IGxvYWRDb2x1bW5TdGF0c0Vycm9yKG5ld0RhdGFzZXQuaWQsIGYubmFtZSwgZXJyb3IpXG4gICAgKVxuICApO1xuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICByZXR1cm4gd2l0aFRhc2sobmV4dFN0YXRlLCB0YXNrcyk7XG59XG5cbi8qKlxuICogUGVyc2lzdCBsb2FkZWQgY29sdW1uIHN0YXRpc3RpY3Mgb24gdGhlIGZpZWxkLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtyZXN1bHQsIGZpbHRlclByb3BzLCBkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGQgPSAoZGF0YXNldD8uZmllbGRzIHx8IFtdKS5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZE5hbWUpO1xuICBpZiAoIWRhdGFzZXQgfHwgIWZpZWxkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyUHJvcHMgPSB7XG4gICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgY29sdW1uU3RhdHM6IHJlc3VsdFxuICB9O1xuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZiA9PlxuICAgIGYubmFtZSA9PT0gZmllbGROYW1lID8gey4uLmYsIGZpbHRlclByb3BzOiBuZXdGaWx0ZXJQcm9wcywgaXNMb2FkaW5nU3RhdHM6IGZhbHNlfSA6IGZcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcbiAgcmV0dXJuIHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIENsZWFyIGxvYWRpbmcgZmxhZyB3aGVuIGNvbHVtbiBzdGF0aXN0aWNzIGZhaWwuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIENvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGQgPSAoZGF0YXNldD8uZmllbGRzIHx8IFtdKS5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZE5hbWUpO1xuICBpZiAoIWRhdGFzZXQgfHwgIWZpZWxkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmID0+XG4gICAgZi5uYW1lID09PSBmaWVsZE5hbWUgPyB7Li4uZiwgaXNMb2FkaW5nU3RhdHM6IGZhbHNlfSA6IGZcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcbiAgcmV0dXJuIHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHZpc2libGU6ICFzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGVkaXRvciBza2V0Y2ggZmVhdHVyZXMgaW50byBhIEdlb0pTT04gZGF0YXNldC9sYXllciBhbmQgY2xlYXIgdGhlIHNrZXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBfYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmVhdHVyZXMgPSBzdGF0ZS5lZGl0b3IuZmVhdHVyZXM7XG4gIGlmICghZmVhdHVyZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGRhdGE7XG4gIHRyeSB7XG4gICAgZGF0YSA9IHByb2Nlc3NHZW9qc29uKGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbihmZWF0dXJlcykpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBjb252ZXJ0IGRyYXduIGdlb21ldHJ5IHRvIGEgbGF5ZXI6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdjb252ZXJ0LWVkaXRvci1mZWF0dXJlcydcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFyZWRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCBsYWJlbElkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogOTApICsgMTA7XG5cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKGNsZWFyZWRTdGF0ZSwge1xuICAgIGRhdGFzZXRzOiB7XG4gICAgICBpbmZvOiB7XG4gICAgICAgIGlkOiBgZHJhd24tZ2VvbWV0cnktJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLFxuICAgICAgICBsYWJlbDogYERyYXduIEdlb21ldHJ5ICR7bGFiZWxJZH1gXG4gICAgICB9LFxuICAgICAgZGF0YVxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICAgICAgY2VudGVyTWFwOiBmYWxzZSxcbiAgICAgIGF1dG9DcmVhdGVMYXllcnM6IHRydWVcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIENvcHkgaW4tbWVtb3J5IHJvd3MgKG9yIGxvYWRlZCB2ZWN0b3ItdGlsZSBmZWF0dXJlcykgaW5zaWRlIHRoZSBzZWxlY3RlZFxuICogRHJhdyBvbiBNYXAgcG9seWdvbiBpbnRvIGEgbmV3IGRhdGFzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5FeHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBmZWF0dXJlID0gc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICBjb25zdCBkYXRhSWQgPSBsYXllcj8uY29uZmlnLmRhdGFJZDtcbiAgbGV0IGRhdGFzZXQgPSBkYXRhSWQgPyBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIDogbnVsbDtcblxuICBpZiAoIWxheWVyIHx8ICFkYXRhc2V0IHx8ICFkYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBHUFUgcmFuZ2UvdGltZSBmaWx0ZXJzIGFyZSBub3QgcmVmbGVjdGVkIGluIGZpbHRlcmVkSW5kZXg7IGV2YWx1YXRlIHRoZW0gb24gQ1BVXG4gIC8vIHRoZSBzYW1lIHdheSBleHBvcnQgZGF0YSBkb2VzLCB0aGVuIGNsaXAgdGhlIHJlc3VsdCB0byB0aGUgZHJhd2luZy5cbiAgaWYgKCFpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpKSB7XG4gICAgc3RhdGUgPSBmaWx0ZXJEYXRhc2V0Q1BVKHN0YXRlLCBkYXRhSWQpO1xuICAgIGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICAgIGlmICghZGF0YXNldCkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfVxuXG4gIGxldCBleHRyYWN0ZWQ7XG4gIHRyeSB7XG4gICAgZXh0cmFjdGVkID0gZXh0cmFjdFJvd3NJbnNpZGVGZWF0dXJlKHtsYXllciwgZGF0YXNldCwgZmVhdHVyZX0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBleHRyYWN0IGRhdGE6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgaWYgKCFleHRyYWN0ZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoIWV4dHJhY3RlZC5yb3dDb3VudCkge1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogaXNWZWN0b3JUaWxlRXh0cmFjdExheWVyKGxheWVyKVxuICAgICAgICAgICAgICA/ICdObyBsb2FkZWQgdmVjdG9yIHRpbGUgZmVhdHVyZXMgZm91bmQgaW5zaWRlIHRoZSBzZWxlY3RlZCBkcmF3aW5nJ1xuICAgICAgICAgICAgICA6ICdObyByb3dzIGZvdW5kIGluc2lkZSB0aGUgc2VsZWN0ZWQgZHJhd2luZycsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUtZW1wdHknXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID1cbiAgICAgIGV4dHJhY3RlZC5raW5kID09PSAnZ2VvanNvbidcbiAgICAgICAgPyBwcm9jZXNzR2VvanNvbih7XG4gICAgICAgICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgICAgICAgZmVhdHVyZXM6IGV4dHJhY3RlZC5mZWF0dXJlc1xuICAgICAgICAgIH0pXG4gICAgICAgIDoge2ZpZWxkczogZXh0cmFjdGVkLmZpZWxkcywgcm93czogZXh0cmFjdGVkLnJvd3N9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBleHRyYWN0IGRhdGE6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKHN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBleHRyYWN0LSR7Z2VuZXJhdGVIYXNoSWQoNil9YCxcbiAgICAgICAgbGFiZWw6IGBFeHRyYWN0ZWQgJHtkYXRhc2V0LmxhYmVsfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIFdNUyBmZWF0dXJlIGluZm8gYW5kIHBpbiB0b29sdGlwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3bXNGZWF0dXJlSW5mb1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLldNU0ZlYXR1cmVJbmZvQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlSW5mbywgY29vcmRpbmF0ZX0gPSBhY3Rpb247XG4gIGlmICghbGF5ZXIpIHtcbiAgICBjb25zb2xlLndhcm4oYFdNUyBmZWF0dXJlIGluZm8gbGF5ZXIgZG9lc24ndCBleGlzdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIGNsaWNrZWQgb2JqZWN0IHNpbWlsYXIgdG8gbGF5ZXJDbGlja1VwZGF0ZXIgdG8gcGluIHRoZSB0b29sdGlwXG4gIGNvbnN0IGNsaWNrZWQgPSBmZWF0dXJlSW5mb1xuICAgID8ge1xuICAgICAgICBwaWNrZWQ6IHRydWUsXG4gICAgICAgIG9iamVjdDoge1xuICAgICAgICAgIHdtc0ZlYXR1cmVJbmZvOiBmZWF0dXJlSW5mb1xuICAgICAgICB9LFxuICAgICAgICBjb29yZGluYXRlOiBjb29yZGluYXRlIHx8IFswLCAwXSxcbiAgICAgICAgbGF5ZXI6IHtcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgaWR4OiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXIuaWQpLFxuICAgICAgICAgICAgaWQ6IGxheWVyLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZFxuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHg6IGZpbHRlcklkeCwgZW5hYmxlID0gZmFsc2V9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG5cbiAgLy8gaWYgd2UgZW5hYmxlIHN5bmMgd2UgYXJlIGdvaW5nIHRvIG1lcmdlIGZpbHRlciBhbmQgYW5pbWF0aW9uQ29uZmlnIGRvbWFpbnMgYW5kIHN0b3JlIGludG8gZmlsdGVyLmRvbWFpblxuICBpZiAoZW5hYmxlKSB7XG4gICAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKG5ld1N0YXRlLmxheWVycyk7XG4gICAgLy8gaWYgbm8gYW5pbWF0YWJsZUxheWVycyBhcmUgcHJlc2VudCB3ZSBzaW1wbHkgcmV0dXJuXG4gICAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKGFuaW1hdGFibGVMYXllcnMpO1xuICAgIGNvbnN0IGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciA9IEJvb2xlYW4oaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGgpO1xuXG4gICAgY29uc3QgbmV3RmlsdGVyRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhbZmlsdGVyLmRvbWFpbiwgbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbl0pO1xuXG4gICAgLy8gd2Ugb25seSB1cGRhdGUgYW5pbWF0aW9uV2luZG93IGlmIHdlIGhhdmUgaW50ZXJ2YWwgYmFzZWQgYW5pbWF0aW9uIGxheWVycyB3aXRoIGRlZmluZWQgaW50ZXJ2YWxzIGFuZCB0aGUgY3VycmVudCBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvdyBpcyBub3QgaW50ZXJ2YWxcbiAgICBpZiAoaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyKSB7XG4gICAgICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbCkge1xuICAgICAgICBuZXdTdGF0ZSA9IHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgICAgICBpZDogZmlsdGVyLmlkLFxuICAgICAgICAgIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgICAgLy8gYWRqdXN0IHRpbWUgZmlsdGVyIGludGVydmFsXG4gICAgICBuZXdGaWx0ZXIgPSBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwobmV3U3RhdGUsIG5ld0ZpbHRlcik7XG5cbiAgICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gYWRqdXN0IHZhbHVlIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oXG4gICAgICBuZXdGaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgID8gW25ld0ZpbHRlckRvbWFpblswXSwgbmV3RmlsdGVyRG9tYWluWzBdXVxuICAgICAgICA6IG5ld0ZpbHRlckRvbWFpbixcbiAgICAgIHsuLi5uZXdGaWx0ZXIsIGRvbWFpbjogbmV3RmlsdGVyRG9tYWlufVxuICAgICk7XG5cbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0ge1xuICAgICAgLi4uKG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXIpLFxuICAgICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IHRydWVcbiAgICB9O1xuXG4gICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgfTtcblxuICAgIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gc2V0IHRoZSBhbmltYXRpb24gY29uZmlnIHZhbHVlIHRvIG1hdGNoIGZpbHRlciB2YWx1ZVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICB2YWx1ZTogbmV3RmlsdGVyLnZhbHVlW25ld0ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXVxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IGRvbWFpbiBhbmQgc3RlcFxuICBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiBmYWxzZVxuICB9O1xuXG4gIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIC8vIHJlc2V0IHN5bmMgdGltZWxpbmUgbW9kZVxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZFxuICB9KTtcblxuICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIC8vIHJlc2V0IGZpbHRlciB2YWx1ZVxuICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV3RmlsdGVyLmRvbWFpbiwgbmV3RmlsdGVyKTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gIH0pO1xuXG4gIC8vIHJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvXG4gIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgdmFsdWU6IG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW4/LlswXSA/PyBudWxsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLnNldFRpbWVGaWx0ZXJTeW5jVGltZWxpbmVNb2RlQWN0aW9uXG4pIHtcbiAgY29uc3Qge2lkOiBmaWx0ZXJJZCwgbW9kZTogc3luY1RpbWVsaW5lTW9kZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPT09IC0xKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBpZiAoIXZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyLCBzeW5jVGltZWxpbmVNb2RlKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY1RpbWVsaW5lTW9kZVxuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIHJldHVybiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBmaWx0ZXJJZHgpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSBvZiB0aGUgbG9hZGluZyBpbmRpY2F0b3IuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIHZpc1N0YXRlXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgUGF5bG9hZCB3aXRoIGNoYW5nZSBvZiBudW1iZXIgb2YgYWN0aXZlIGxvYWRpbmcgYWN0aW9ucy5cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3BheWxvYWQ6IHtjaGFuZ2V9fToge3BheWxvYWQ6IFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkfVxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQge2xvYWRpbmdJbmRpY2F0b3JWYWx1ZX0gPSBzdGF0ZTtcbiAgaWYgKCFsb2FkaW5nSW5kaWNhdG9yVmFsdWUpIHtcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWUgPSAwO1xuICB9XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gTWF0aC5tYXgobG9hZGluZ0luZGljYXRvclZhbHVlICsgY2hhbmdlLCAwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IG5leHRWYWx1ZSxcbiAgICAuLi4obmV4dFZhbHVlID09PSAwICYmIE9iamVjdC5rZXlzKHN0YXRlLmxvYWRpbmdQcm9ncmVzcyB8fCB7fSkubGVuZ3RoXG4gICAgICA/IHtsb2FkaW5nUHJvZ3Jlc3M6IHt9fVxuICAgICAgOiB7fSlcbiAgfTtcbn07XG5cbi8qKlxuICogUmVjb3JkIGRvd25sb2FkIHByb2dyZXNzIGZvciBhbiBpbi1mbGlnaHQgcmVtb3RlIGRhdGFzZXQgaHlkcmF0ZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcGVyY2VudH06IFZpc1N0YXRlQWN0aW9ucy5TZXRMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICgoc3RhdGUubG9hZGluZ0luZGljYXRvclZhbHVlIHx8IDApIDw9IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dFBlcmNlbnQgPSBOdW1iZXIuaXNGaW5pdGUocGVyY2VudClcbiAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChwZXJjZW50KSkpXG4gICAgOiAwO1xuICBpZiAoc3RhdGUubG9hZGluZ1Byb2dyZXNzPy5baWRdID09PSBuZXh0UGVyY2VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdQcm9ncmVzczoge1xuICAgICAgLi4uc3RhdGUubG9hZGluZ1Byb2dyZXNzLFxuICAgICAgW2lkXTogbmV4dFBlcmNlbnRcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgZmlsdGVySWR4OiBudW1iZXIpOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICBpZiAoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSB7XG4gICAgY29uc3QgdGltZWxpbmVWYWx1ZSA9IGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzXG4gICAgICA/IHNuYXBUb01hcmtzKHRpbWVsaW5lVmFsdWUsIHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMpXG4gICAgICA6IHRpbWVsaW5lVmFsdWU7XG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIHt2YWx1ZX0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKSB7XG4gIHJldHVybiBmaWx0ZXIudmFsdWVbZmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdO1xufVxuXG5mdW5jdGlvbiBnZXRTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlKSB7XG4gICAgcmV0dXJuIGZpbHRlci5zeW5jVGltZWxpbmVNb2RlID8/IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xuICB9XG5cbiAgcmV0dXJuIFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLCBuZXdNb2RlOiBudW1iZXIpIHtcbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlICYmIG5ld01vZGUgPT09IFNZTkNfVElNRUxJTkVfTU9ERVMuc3RhcnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VGltZUZpbHRlckludGVydmFsKHN0YXRlLCBmaWx0ZXIpIHtcbiAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBsZXQgaW50ZXJ2YWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSW5kZXggPSBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLnJlZHVjZSgoY3VycmVudEluZGV4LCBsKSA9PiB7XG4gICAgICBpZiAobC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IFRJTUVfSU5URVJWQUxTX09SREVSRUQuZmluZEluZGV4KGkgPT4gaSA9PT0gbC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCk7XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+IC0xICYmIG5ld0luZGV4IDwgY3VycmVudEluZGV4ID8gbmV3SW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSwgVElNRV9JTlRFUlZBTFNfT1JERVJFRC5sZW5ndGggLSAxKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgbGF5ZXJUaW1lSW50ZXJ2YWwgPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVEW2ludGVydmFsSW5kZXhdO1xuICAgIGludGVydmFsID0gTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbFtsYXllclRpbWVJbnRlcnZhbF07XG4gIH1cblxuICBpZiAoIWludGVydmFsKSB7XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIC8vIGFkanVzdCBmaWx0ZXJcbiAgY29uc3QgdGltZUZvcm1hdCA9IGdldERlZmF1bHRUaW1lRm9ybWF0KGludGVydmFsKTtcbiAgY29uc3QgdXBkYXRlZFBsb3RUeXBlID0gey4uLmZpbHRlci5wbG90VHlwZSwgaW50ZXJ2YWwsIHRpbWVGb3JtYXR9O1xuICBjb25zdCBuZXdGaWx0ZXIgPSB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUoZmlsdGVyLCB1cGRhdGVkUGxvdFR5cGUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgcmV0dXJuIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3coc3RhdGUsIG5ld0ZpbHRlcik7XG59XG5cbi8vIEZpbmQgZGF0YUlkIGZyb20gYSBzYXZlZCB2aXNTdGF0ZSBwcm9wZXJ0eTpcbi8vIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zLCBsYXllckJsZW5kaW5nLCBvdmVybGF5QmxlbmRpbmcsIHNwbGl0TWFwcywgYW5pbWF0aW9uQ29uZmlnLCBlZGl0b3Jcbi8vIHJlcGxhY2UgaXQgd2l0aCBhbm90aGVyIGRhdGFJZFxuZnVuY3Rpb24gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHZhbHVlOiBhbnksIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IHJlcGxhY2VkID0gdmFsdWVcbiAgICAgIC5tYXAodiA9PiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModiwgZGF0YUlkLCBkYXRhSWRUb1JlcGxhY2UpKVxuICAgICAgLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZS5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHZhbHVlLmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gb3RoZXJzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICB9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YUlkKSAmJiB2YWx1ZS5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgIC8vIGZpbHRlclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogdmFsdWUuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1JlcGxhY2UgOiBkKSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmNvbmZpZz8uZGF0YUlkICYmIHZhbHVlLmNvbmZpZz8uZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBsYXllclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi52YWx1ZS5jb25maWcsXG4gICAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBkYXRhSWQpKSB7XG4gICAgLy8gZm9yIHZhbHVlIHNhdmVkIGFzIHtbZGF0YUlkXTogey4uLn19XG4gICAgcmV0dXJuIHtbZGF0YUlkVG9SZXBsYWNlXTogdmFsdWVbZGF0YUlkXX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gRmluZCBkYXRhc2V0SWRzIGRlcml2ZWQgYSBzYXZlZCB2aXNTdGF0ZSBQcm9wZXJ0eTtcbmZ1bmN0aW9uIGZpbmRDaGlsZERhdGFzZXRJZHModmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgY2hpbGREYXRhSWRzID0gdmFsdWUubWFwKGZpbmRDaGlsZERhdGFzZXRJZHMpLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiBjaGlsZERhdGFJZHMubGVuZ3RoID8gY2hpbGREYXRhSWRzIDogbnVsbDtcbiAgfVxuXG4gIC8vIGNoaWxkIGRhdGEgaWQgdXN1YWxseSBzdG9yZXMgaW4gdGhlIGRlcml2ZWQgZGF0YXNldCBpbmZvXG4gIHJldHVybiB2YWx1ZT8ubmV3RGF0YXNldD8uaW5mby5pZCB8fCBudWxsO1xufVxuXG4vLyBtb3ZlZCB1bm1lcmdlZCBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9uc1xuZnVuY3Rpb24gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcHJvcFZhbHVlcywge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KSB7XG4gIC8vIHJlbW92ZSBwcm9wIHZhbHVlIGZyb20gc3RhdGVcbiAgLy8gVE9ETzogc2hvdWxkIHdlIGFkZCByZW1vdmUgdXBkYXRlciB0byBtZXJnZXIgYXMgd2VsbD9cbiAgaWYgKCFwcm9wVmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHN0YXRlUmVtb3ZlZCA9XG4gICAgcHJvcCA9PT0gJ2xheWVycydcbiAgICAgID8gcHJvcFZhbHVlcy5yZWR1Y2UoKGFjY3UsIHByb3BWYWx1ZSkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZDogcHJvcFZhbHVlLmlkfSksIHN0YXRlKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHN0YXRlW3Byb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgW3Byb3BdOiBzdGF0ZVtwcm9wXS5maWx0ZXIocCA9PiAhcHJvcFZhbHVlcy5maW5kKHByb3BWYWx1ZSA9PiBwLmlkID09PSBwcm9wVmFsdWUuaWQpKVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG5vdCBhcnJheSwgd2Ugd29uJ3QgcmVtb3ZlIGl0LCByZW1vdmUgZGF0YXNldCBzaG91bGQgaGFuZGxlIGl0XG4gICAgICAgIHN0YXRlO1xuXG4gIC8vIG1vdmUgdG8gc3RhdGVUb0JlTWVyZ2VkXG4gIGNvbnN0IHRvQmVNZXJnZWQgPSB7XG4gICAgW3RvTWVyZ2VQcm9wXTogc2F2ZVVubWVyZ2VkXG4gICAgICA/IC8vIGNhbGwgbWVyZ2Ugc2F2ZVVubWVyZ2VkIG1ldGhvZFxuICAgICAgICBzYXZlVW5tZXJnZWQoc3RhdGVSZW1vdmVkLCBwcm9wVmFsdWVzKVxuICAgICAgOiAvLyBpZiB0b01lcmdlUHJvcCBpcyBhcmFheSwgYXBwZW5kIHRvIGl0XG4gICAgICBBcnJheS5pc0FycmF5KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IFsuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLCAuLi5wcm9wVmFsdWVzXVxuICAgICAgOiAvLyBzYXZlIHByb3BWYWx1ZXMgdG8gdG9NZXJnZVxuICAgICAgaXNPYmplY3Qoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sXG4gICAgICAgICAgLi4ucHJvcFZhbHVlc1xuICAgICAgICB9XG4gICAgICA6IHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlUmVtb3ZlZCxcbiAgICAuLi50b0JlTWVyZ2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0QW5kRGVwczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICByZXR1cm4gY29tcG9zZV88VD4oW1xuICAgIGFwcGx5XyhyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlLCB7ZGF0YUlkLCBkYXRhSWRUb1VzZX0pLFxuICAgIGFwcGx5XyhyZW1vdmVEYXRhc2V0VXBkYXRlciwge2RhdGFJZH0pXG4gIF0pKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZXBsYWNlRGF0YXNldEFuZERlcHMoc3RhdGUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAvLyBtYWtlIGEgY29weSBvZiBsYXllck9yZGVyLCBiZWNhdXNlIGxheWVyIGlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGJ5IGNhbGxpbmcgcmVtb3ZlTGF5ZXJVcGRhdGVyXG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICAvLyBwcmVzZXJ2ZSBkYXRhc2V0IG9yZGVyXG4gIG5leHRTdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKS5tYXAoZCA9PlxuICAgIGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZFxuICApO1xuXG4gIC8vIHByZXNlcnZlTGF5ZXJPcmRlclxuICBpZiAobmV4dFN0YXRlLmxheWVyVG9CZU1lcmdlZD8ubGVuZ3RoKSB7XG4gICAgLy8gY29weSBzcGxpdCBtYXBzIHRvIGJlIG1lcmdlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc2V0IGluIHJlbW92ZSBsYXllci5cbiAgICAvLyBLZWVwIHRoZSBvbmVzIG9mIGEgZGF0YXNldCByZXBsYWNlZCBhIG1vbWVudCBlYXJsaWVyIGFuZCBub3QgbWVyZ2VkIGJhY2sgeWV0OlxuICAgIC8vIGl0cyBsYXllcnMgYXJlIG5vIGxvbmdlciBpbiB0aGUgY3VycmVudCBzcGxpdCBtYXBzLlxuICAgIG5leHRTdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkID0gY29tYmluZVNwbGl0TWFwc0J5SW5kZXgoXG4gICAgICBzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkLFxuICAgICAgc2VyaWFsaXplZFN0YXRlPy5zcGxpdE1hcHMgPz8gW11cbiAgICApO1xuICAgIG5leHRTdGF0ZS5sYXllck9yZGVyID0gWy4uLnByZXNlcnZlTGF5ZXJPcmRlcl07XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFRoZSBvcmRlciB0byBwcmVzZXJ2ZSBmb3IgdGhlIGl0ZW1zIHRoYXQgd2lsbCBiZSBtZXJnZWQgYmFjay5cbiAqXG4gKiBgaWRzYCBjb21lcyBmcm9tIHRoZSBzZXJpYWxpemVkIHN0YXRlLCBzbyBpdCBsaXN0cyBldmVyeXRoaW5nIGJ1dCB0aGUgaXRlbXNcbiAqIGFub3RoZXIgZGF0YXNldCdzIHJlcGxhY2VtZW50IHBhcmtlZCBhIG1vbWVudCBhZ286IGFuIGFwcCByZWZyZXNoaW5nIHNldmVyYWxcbiAqIGRhdGFzZXRzIGluIGEgcm93IHByZXBhcmVzIHRoZSBzZWNvbmQgcmVwbGFjZW1lbnQgYmVmb3JlIHRoZSBmaXJzdCBvbmUnc1xuICogaXRlbXMgaGF2ZSBtZXJnZWQgYmFjay4gV3JpdGluZyBgaWRzYCBhcyBpdCBpcyB3b3VsZCBkcm9wIHRob3NlLCBhbmRcbiAqIGBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyYCBwdXRzIGFuIGl0ZW0gaXQgY2Fubm90IHBsYWNlIGF0IHRoZSBmcm9udCDigJRcbiAqIHNvIHRoZXkgd291bGQgY29tZSBiYWNrIHJldmVyc2VkLiBXaGVyZSB0aGV5IGJlbG9uZyBpcyB3aGF0IHRoZSBvcmRlciB3cml0dGVuXG4gKiB3aGVuIHRoZXkgd2VyZSBwYXJrZWQgYWxyZWFkeSBzYXlzLCBzbyB0aGF0IG9yZGVyIGlzIGtlcHQgZm9yIHRoZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQoXG4gIHByZXZpb3VzT3JkZXI6IHN0cmluZ1tdID0gW10sXG4gIGlkczogc3RyaW5nW10sXG4gIHBhcmtlZDoge2lkPzogc3RyaW5nfVtdXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHBhcmtlZElkcyA9IHBhcmtlZFxuICAgIC5tYXAoaXRlbSA9PiBpdGVtPy5pZClcbiAgICAuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSAmJiAhaWRzLmluY2x1ZGVzKGlkIGFzIHN0cmluZykpO1xuXG4gIGlmICghcGFya2VkSWRzLmxlbmd0aCkge1xuICAgIHJldHVybiBpZHM7XG4gIH1cblxuICBjb25zdCBrbm93biA9IG5ldyBTZXQoWy4uLmlkcywgLi4ucGFya2VkSWRzXSk7XG4gIGNvbnN0IG9yZGVyZWQgPSAocHJldmlvdXNPcmRlciB8fCBbXSkuZmlsdGVyKGlkID0+IGtub3duLmhhcyhpZCkpO1xuICBjb25zdCByZXN0ID0gWy4uLmlkcywgLi4ucGFya2VkSWRzXS5maWx0ZXIoaWQgPT4gIW9yZGVyZWQuaW5jbHVkZXMoaWQpKTtcblxuICByZXR1cm4gWy4uLm9yZGVyZWQsIC4uLnJlc3RdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2RhdGFJZCwgZGF0YUlkVG9Vc2V9OiB7ZGF0YUlkOiBzdHJpbmc7IGRhdGFJZFRvVXNlOiBzdHJpbmd9XG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gc3RhdGUubWVyZ2Vycy5yZWR1Y2UoXG4gICAgKFxuICAgICAgYWNjdVN0YXRlLFxuICAgICAge3Byb3AsIHRvTWVyZ2VQcm9wLCByZXBsYWNlUGFyZW50RGF0YXNldElkcywgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWQsIHByZXNlcnZlT3JkZXJ9XG4gICAgKSA9PiB7XG4gICAgICAvLyBnZXQgZGF0YXNldCBpZHMgdGhhdCBhcmUgZGVwZW5kcyBvbiB0aGlzIGRhdGFzZXRcbiAgICAgIGNvbnN0IHByb3BzID0gdG9BcnJheShwcm9wKTtcbiAgICAgIGNvbnN0IHRvTWVyZ2VQcm9wcyA9IHRvQXJyYXkodG9NZXJnZVByb3ApO1xuICAgICAgY29uc3Qgc2F2ZWRQcm9wcyA9IHNlcmlhbGl6ZWRTdGF0ZSA/IHByb3BzLm1hcChwID0+IHNlcmlhbGl6ZWRTdGF0ZVtwXSkgOiBbXTtcblxuICAgICAgbGV0IHJlcGxhY2VkU3RhdGUgPSBhY2N1U3RhdGU7XG4gICAgICBzYXZlZFByb3BzLmZvckVhY2goKHByb3BWYWx1ZSwgaSkgPT4ge1xuICAgICAgICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVyZ2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICBwcm9wOiBwcm9wc1tpXSxcbiAgICAgICAgICB0b01lcmdlUHJvcDogdG9NZXJnZVByb3BzW2ldLFxuICAgICAgICAgIGdldENoaWxkRGF0YXNldElkcyxcbiAgICAgICAgICBzYXZlVW5tZXJnZWRcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBXaGF0IGFub3RoZXIgZGF0YXNldCdzIHJlcGxhY2VtZW50IHBhcmtlZCBhIG1vbWVudCBhZ28gYW5kIGhhcyBub3RcbiAgICAgICAgLy8gbWVyZ2VkIGJhY2sgeWV0LCByZWFkIGJlZm9yZSB0aGlzIG9uZSBwYXJrcyBhbnl0aGluZyBvZiBpdHMgb3duLlxuICAgICAgICBjb25zdCBwYXJrZWRFbHNld2hlcmUgPVxuICAgICAgICAgIG1lcmdlck9wdGlvbnMudG9NZXJnZVByb3AgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0b0FycmF5KHJlcGxhY2VkU3RhdGVbbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcF0gPz8gW10pXG4gICAgICAgICAgICA6IFtdO1xuXG4gICAgICAgIGNvbnN0IHJlcGxhY2VkSXRlbSA9XG4gICAgICAgICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM/Lihwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpIHx8XG4gICAgICAgICAgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gICAgICAgIHJlcGxhY2VkU3RhdGUgPSByZXBsYWNlZEl0ZW1cbiAgICAgICAgICA/IHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKHJlcGxhY2VkU3RhdGUsIHJlcGxhY2VkSXRlbSwgbWVyZ2VyT3B0aW9ucylcbiAgICAgICAgICA6IHJlcGxhY2VkU3RhdGU7XG5cbiAgICAgICAgLy8gT25seSB3aGVuIHRoaXMgZGF0YXNldCBoYWQgaXRlbXMgb2YgaXRzIG93biB0byBwYXJrLiBUaGUgdG9CZU1lcmdlZCBsaXN0XG4gICAgICAgIC8vIGNhbiBzdGlsbCBob2xkIGFub3RoZXIgZGF0YXNldCdzIGl0ZW1zLCByZXBsYWNlZCBhIG1vbWVudCBlYXJsaWVyIGFuZFxuICAgICAgICAvLyBub3QgbWVyZ2VkIGJhY2sgeWV0OyBvdmVyd3JpdGluZyB0aGUgb3JkZXIgdGhleSB3ZXJlIHBhcmtlZCB3aXRoIHdvdWxkXG4gICAgICAgIC8vIG1lcmdlIHRoZW0gYmFjayBpbiByZXZlcnNlLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgcmVwbGFjZWRJdGVtICYmXG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXT8ubGVuZ3RoICYmXG4gICAgICAgICAgcHJlc2VydmVPcmRlclxuICAgICAgICApIHtcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdID0gcHJlc2VydmVkT3JkZXJXaXRoUGFya2VkKFxuICAgICAgICAgICAgcmVwbGFjZWRTdGF0ZVtwcmVzZXJ2ZU9yZGVyXSxcbiAgICAgICAgICAgIHByb3BWYWx1ZS5tYXAoaXRlbSA9PiBpdGVtLmlkKSxcbiAgICAgICAgICAgIHBhcmtlZEVsc2V3aGVyZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVwbGFjZWRTdGF0ZTtcbiAgICB9LFxuICAgIHN0YXRlXG4gICk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUoXG4gIHN0YXRlLFxuICByZXBsYWNlZEl0ZW0sXG4gIHtwcm9wLCB0b01lcmdlUHJvcCwgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWR9XG4pIHtcbiAgLy8gcHJvcCBpcyBkZXBlbmRzIG9uIHRoZSBkYXRhc2V0IHRvIGJlIHJlcGxhY2VkXG4gIC8vIHJlbW92ZSBwcm9wIGZyb20gc3RhdGUsIGFuZCBtb3ZlIGl0IHRvIHRvQmVNZXJnZWRcbiAgbGV0IG5leHRTdGF0ZSA9IG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHJlcGxhY2VkSXRlbSwge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KTtcbiAgY29uc3QgY2hpbGREYXRhSWRzID0gZ2V0Q2hpbGREYXRhc2V0SWRzPy4ocmVwbGFjZWRJdGVtKSB8fCBmaW5kQ2hpbGREYXRhc2V0SWRzKHJlcGxhY2VkSXRlbSk7XG5cbiAgaWYgKGNoaWxkRGF0YUlkcykge1xuICAgIG5leHRTdGF0ZSA9IHRvQXJyYXkoY2hpbGREYXRhSWRzKS5yZWR1Y2UoKGFjY3UsIGNoaWxkRGF0YUlkKSA9PiB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgY2hpbGQgZGF0YXNldCBpZCxcbiAgICAgIC8vIGJ1dCBzdGlsbCBuZWVkIHRvIG1vdmUgb3V0IG9mIHN0YXRlIGFuZCBtZXJnZSBiYWNrIGluXG4gICAgICByZXR1cm4gcmVwbGFjZURhdGFzZXRBbmREZXBzKGFjY3UsIGNoaWxkRGF0YUlkLCBjaGlsZERhdGFJZCk7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUEsU0FBUUEsSUFBSSxRQUFPLFlBQVk7QUFFL0IsT0FBT0MsSUFBSSxNQUFNLG1CQUFtQjtBQUNwQyxPQUFPQyxTQUFTLE1BQU0sV0FBVztBQUNqQyxTQUFRQyxPQUFPLElBQUlDLE9BQU8sUUFBTyxlQUFlO0FBQ2hELE9BQU9DLFNBQVMsTUFBTSw2QkFBNkI7QUFDbkQsT0FBT0MsR0FBRyxNQUFNLHVCQUF1QjtBQUN2QyxPQUFPQyxPQUFPLE1BQU0sMkJBQTJCO0FBQy9DLE9BQU9DLElBQUksTUFBTSx3QkFB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
6181
+ var DATASET_OP_ADD_OPTIONS = {
6182
+ autoCreateLayers: true,
6183
+ centerMap: false,
6184
+ keepExistingConfig: true
6185
+ };
6186
+ function applyDerivedProtoDataset(state, proto) {
6187
+ var resultId = proto.info.id;
6188
+ if (!resultId) {
6189
+ return state;
6190
+ }
6191
+ if (state.datasets[resultId]) {
6192
+ var nextState = updateDatasetUpdater(state, {
6193
+ dataId: resultId,
6194
+ data: proto.data
6195
+ });
6196
+ var existing = nextState.datasets[resultId];
6197
+ if (!existing) {
6198
+ return nextState;
6199
+ }
6200
+ existing.metadata = _objectSpread(_objectSpread({}, existing.metadata), proto.metadata);
6201
+ existing.label = proto.info.label || existing.label;
6202
+ return nextState;
6203
+ }
6204
+ return updateVisDataUpdater(state, {
6205
+ datasets: proto,
6206
+ options: DATASET_OP_ADD_OPTIONS
6207
+ });
6208
+ }
6209
+ export function runGroupByUpdater(state, action) {
6210
+ var _executeGroupBy = executeGroupBy(state, action),
6211
+ nextState = _executeGroupBy.state,
6212
+ proto = _executeGroupBy.proto;
6213
+ return proto ? applyDerivedProtoDataset(nextState, proto) : nextState;
6214
+ }
6215
+ export function runJoinUpdater(state, action) {
6216
+ var _executeJoin = executeJoin(state, action),
6217
+ nextState = _executeJoin.state,
6218
+ proto = _executeJoin.proto;
6219
+ return proto ? applyDerivedProtoDataset(nextState, proto) : nextState;
6220
+ }
6221
+ export function runSpatialJoinUpdater(state, action) {
6222
+ var _executeSpatialJoin = executeSpatialJoin(state, action),
6223
+ nextState = _executeSpatialJoin.state,
6224
+ proto = _executeSpatialJoin.proto;
6225
+ return proto ? applyDerivedProtoDataset(nextState, proto) : nextState;
6226
+ }
6227
+ export function runSuitabilityUpdater(state, action) {
6228
+ var _executeSuitability = executeSuitability(state, action),
6229
+ nextState = _executeSuitability.state,
6230
+ proto = _executeSuitability.proto;
6231
+ return proto ? applyDerivedProtoDataset(nextState, proto) : nextState;
6232
+ }
6233
+ export { addGroupByUpdater, addJoinUpdater, addSpatialJoinUpdater, addSuitabilityUpdater, removeDatasetOpUpdater, setGroupByConfigUpdater, setJoinConfigUpdater, setSpatialJoinConfigUpdater, setSuitabilityConfigUpdater };
6234
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYm94IiwiY29weSIsImRlZXBtZXJnZSIsImNvbnNvbGUiLCJDb25zb2xlIiwiY2xvbmVEZWVwIiwiZ2V0IiwiaXNFcXVhbCIsInBpY2siLCJ1bmlxIiwieG9yIiwiVGFzayIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsIndpdGhUYXNrIiwiREVMQVlfVEFTSyIsIkFDVElPTl9UQVNLIiwiRVhQQU5EX1pJUF9UQVNLIiwiTE9BRF9GSUxFX1RBU0siLCJQUk9DRVNTX0ZJTEVfREFUQSIsIlVOV1JBUF9UQVNLIiwiYWRkTm90aWZpY2F0aW9uIiwiYXBwbHlMYXllckNvbmZpZyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJsYXllclR5cGVDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJsb2FkRmlsZXNFcnIiLCJsb2FkRmlsZXNTdWNjZXNzIiwibG9hZE5leHRGaWxlIiwiZXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3MiLCJuZXh0RmlsZUJhdGNoIiwic2V0RmlsdGVyIiwicHJvY2Vzc0ZpbGVDb250ZW50IiwiZml0Qm91bmRzIiwiZml0TWFwQm91bmRzIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJhcHBseUZpbHRlckNvbmZpZyIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MiLCJsb2FkQ29sdW1uU3RhdHNFcnJvciIsInJlZnJlc2hEYXRhc2V0U3VjY2VzcyIsInJlZnJlc2hEYXRhc2V0RXJyb3IiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzIiwic2V0TG9hZGluZ1Byb2dyZXNzIiwiRklMVEVSX1VQREFURVJfUFJPUFMiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwic25hcFRvTWFya3MiLCJhcHBseUZpbHRlckZpZWxkTmFtZSIsImFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJhcnJheUluc2VydCIsImNvbWJpbmVTcGxpdE1hcHNCeUluZGV4IiwiY29tcHV0ZVNwbGl0TWFwTGF5ZXJzIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImRpc2FibGVHcHVJZkludmVydGVkIiwiZmlsdGVyVHlwZVVzZXNHcHUiLCJnZXRQbG90QmFzZUluZGV4QnlEYXRhSWQiLCJlcnJvck5vdGlmaWNhdGlvbiIsInN1Y2Nlc3NOb3RpZmljYXRpb24iLCJlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24iLCJleHRyYWN0Um93c0luc2lkZUZlYXR1cmUiLCJpc1Jhc3RlclRpbGVFeHRyYWN0TGF5ZXIiLCJpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIiLCJtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyIsInRvU2tldGNoRmVhdHVyZSIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwiZmlsdGVyRGF0YXNldENQVSIsImdlbmVyYXRlUG9seWdvbkZpbHRlciIsImdldERlZmF1bHRGaWx0ZXIiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlciIsImlzSW5SYW5nZSIsImlzT2JqZWN0IiwiaXNQbGFpbk9iamVjdCIsImlzUmdiQ29sb3IiLCJwYXJzZUZpZWxkVmFsdWUiLCJyZW1vdmVMYXllckZyb21TcGxpdE1hcHMiLCJzZXQiLCJ1cGRhdGVGaWx0ZXJQbG90IiwicmVtb3ZlRmlsdGVyUGxvdCIsImlzTGF5ZXJBbmltYXRhYmxlIiwiaXNTaWRlRmlsdGVyIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsImdlbmVyYXRlSGFzaElkIiwidG9BcnJheSIsImFycmF5TW92ZSIsIkFMTF9GSUVMRF9UWVBFUyIsIkFOSU1BVElPTl9XSU5ET1ciLCJCQVNFX1NQRUVEIiwiQ09NUEFSRV9UWVBFUyIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIkVESVRPUl9NT0RFUyIsIkZJTFRFUl9UWVBFUyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiTEFZRVJfVFlQRVMiLCJGUFMiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsIkRJU1RBTkNFX0ZPR19UWVBFIiwiU1VSRkFDRV9GT0dfVFlQRSIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwiUExPVF9UWVBFUyIsIlNPUlRfT1JERVIiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiQ0hBTk5FTF9TQ0FMRVMiLCJTQ0FMRV9UWVBFUyIsIklOSVRJQUxfQU5OT1RBVElPTl9LSU5EIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9TSURFIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04iLCJBTk5PVEFUSU9OX0FOR0xFX0JZX1BMQUNFTUVOVCIsInRleHRQbGFjZW1lbnRGcm9tQW5nbGUiLCJBbm5vdGF0aW9uS2luZCIsIkRhdGFzZXRUeXBlIiwiZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zIiwiZ2V0UmVtb3RlU291cmNlRm9ybWF0IiwiR0VPQ09ERVJfREFUQVNFVF9OQU1FIiwiR0VPQ09ERVJfSUNPTl9DT0xPUiIsIkdFT0NPREVSX0xBWUVSX0lEIiwiQUdHUkVHQVRJT05fQ09VTlRfTEFZRVJfVFlQRVMiLCJpc1BvaW50Q291bnRMYWJlbCIsIkxBWUVSX0lEX0xFTkdUSCIsIkxheWVyIiwiTGF5ZXJDbGFzc2VzIiwiYXBwbHlfIiwiY29tcG9zZV8iLCJmaWx0ZXJPdXRCeUlkIiwiaWZfIiwibWVyZ2VfIiwicGF5bG9hZF8iLCJwaWNrXyIsInJlbW92ZUVsZW1lbnRBdEluZGV4Iiwic3dhcF8iLCJpc1ZhbGlkTWVyZ2VyIiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiVklTX1NUQVRFX01FUkdFUlMiLCJjcmVhdGVMYXllckZyb21Db25maWciLCJpc1NhdmVkTGF5ZXJDb25maWdWMSIsInBhcnNlTGF5ZXJDb25maWciLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZVZpc1N0YXRlIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwiS2VwbGVyR0xTY2hlbWEiLCJnZXRGaWxlc1RvUGFyc2UiLCJpc1ppcEZpbGVOYW1lIiwibG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0IiwicHJvY2Vzc0dlb2pzb24iLCJidWlsZENoYW5nZUNvbHVtblR5cGVEYXRhIiwiZm9ybWF0Q29sdW1uVHlwZUNvbnZlcnNpb25FcnJvciIsImFzc2lnbkdwdUNoYW5uZWwiLCJidWlsZERlbGV0ZUNvbHVtbkRhdGEiLCJidWlsZFJlbmFtZUNvbHVtbkRhdGEiLCJjYW5NdXRhdGVEYXRhc2V0U2NoZW1hIiwiY29weVRhYmxlQW5kVXBkYXRlIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwicGluVGFibGVDb2x1bW5zIiwic2hvd0FsbFRhYmxlQ29sdW1ucyIsInRvZ2dsZUhpZGRlblRhYmxlQ29sdW1uIiwic2V0RmlsdGVyR3B1TW9kZSIsInNvcnREYXRhc2V0QnlDb2x1bW4iLCJyZW1hcENoYXJ0c0ZvckRhdGFzZXQiLCJmaW5kRmllbGRzVG9TaG93IiwiZ2V0Wm9vbU9wYWNpdHlBbm5vdGF0aW9uVGFyZ2V0SWQiLCJyZW1vdmVMYXllckZyb21ab29tT3BhY2l0eSIsImNhbGN1bGF0ZUxheWVyRGF0YSIsImZpbmREZWZhdWx0TGF5ZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsImdldE5ld0xheWVyR3JvdXAiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIiLCJnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIiLCJmaW5kUGFyZW50R3JvdXBGb3JMYXllciIsImdldEluZGV4RnJvbUxheWVyRW50cnlJZCIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyIiwiZ2V0UHJvcFZhbHVlVG9NZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImFkZEdyb3VwQnlVcGRhdGVyIiwiYWRkSm9pblVwZGF0ZXIiLCJhZGRTcGF0aWFsSm9pblVwZGF0ZXIiLCJhZGRTdWl0YWJpbGl0eVVwZGF0ZXIiLCJleGVjdXRlR3JvdXBCeSIsImV4ZWN1dGVKb2luIiwiZXhlY3V0ZVNwYXRpYWxKb2luIiwiZXhlY3V0ZVN1aXRhYmlsaXR5IiwicmVtb3ZlRGF0YXNldE9wVXBkYXRlciIsInJlbW92ZU9wc0ZvckRhdGFzZXRzIiwic2V0R3JvdXBCeUNvbmZpZ1VwZGF0ZXIiLCJzZXRKb2luQ29uZmlnVXBkYXRlciIsInNldFNwYXRpYWxKb2luQ29uZmlnVXBkYXRlciIsInNldFN1aXRhYmlsaXR5Q29uZmlnVXBkYXRlciIsImZpeEVmZmVjdE9yZGVyIiwiZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMiLCJnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwibWVyZ2VUaW1lRG9tYWlucyIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJ1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUiLCJtZXJnZVBsb3RHcm91cEJ5IiwiZ2V0RGVmYXVsdFRpbWVGb3JtYXQiLCJMYXllclRvRmlsdGVyVGltZUludGVydmFsIiwiVElNRV9JTlRFUlZBTFNfT1JERVJFRCIsIm1lcmdlRmlsdGVyRG9tYWluIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwiY29sbGVjdENvbHVtblZhbHVlcyIsImdldENvbHVtblN0YXRpc3RpY3MiLCJvcHRpb25hbE1hcFRleHQiLCJjcmVhdGVFZmZlY3QiLCJmaW5kTWFwQm91bmRzIiwidmlzU3RhdGVVcGRhdGVycyIsImRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyIsInRvb2x0aXAiLCJpZCIsImxhYmVsIiwiZW5hYmxlZCIsImNvbmZpZyIsImZpZWxkc1RvU2hvdyIsInRpbWV6b25lIiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkFCU09MVVRFIiwibGVnZW5kIiwiaGlkZUludmlzaWJsZUxheWVycyIsImdlb2NvZGVyIiwicG9zaXRpb24iLCJsaW1pdFNlYXJjaCIsImNvbG9yIiwiYnJ1c2giLCJzaXplIiwiY29vcmRpbmF0ZSIsImFubm90YXRpb24iLCJ6b29tT3BhY2l0eSIsImNvbnRyb2xsZXJzIiwiREVGQVVMVF9BTklNQVRJT05fQ09ORklHIiwiZG9tYWluIiwiY3VycmVudFRpbWUiLCJzcGVlZCIsImlzQW5pbWF0aW5nIiwidGltZVN0ZXBzIiwidGltZUZvcm1hdCIsImRlZmF1bHRUaW1lRm9ybWF0IiwiaGlkZUNvbnRyb2wiLCJkdXJhdGlvbiIsIkRFRkFVTFRfRURJVE9SIiwibW9kZSIsIkRSQVdfUE9MWUdPTiIsImZlYXR1cmVzIiwic2VsZWN0ZWRGZWF0dXJlIiwidmlzaWJsZSIsIklOSVRJQUxfVklTX1NUQVRFIiwibWFwSW5mbyIsInRpdGxlIiwidW5kZWZpbmVkIiwiZGVzY3JpcHRpb24iLCJsYXllcnMiLCJsYXllckRhdGEiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyIiwibGF5ZXJPcmRlclRvQmVNZXJnZWQiLCJmaWx0ZXJzIiwiZmlsdGVyVG9CZU1lcmdlZCIsImRhdGFzZXRzIiwiZWRpdGluZ0RhdGFzZXQiLCJncm91cEJ5cyIsImpvaW5zIiwic3VpdGFiaWxpdGllcyIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsImNoYXJ0cyIsImNoYXJ0c1RvQmVNZXJnZWQiLCJhbm5vdGF0aW9ucyIsImFubm90YXRpb25zVG9CZU1lcmdlZCIsInNlbGVjdGVkQW5ub3RhdGlvbklkIiwiaXNFZGl0aW5nQW5ub3RhdGlvblRleHQiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsImxheWVyQmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJob3ZlckluZm8iLCJjbGlja2VkIiwibW91c2VQb3MiLCJtYXhEZWZhdWx0VG9vbHRpcHMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJzdGFnZWRUb0FkZCIsImxvYWRpbmdJbmRpY2F0b3JWYWx1ZSIsImxvYWRpbmdQcm9ncmVzcyIsImxvYWRpbmdQcm9jZXNzaW5nIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsInNjaGVtYSIsIkFDVElPTl9UQVNLX0ZJVF9CT1VORFMiLCJmcm9tQ2FsbGJhY2siLCJfIiwiY2IiLCJBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OIiwidXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhIiwic3RhdGUiLCJfcmVmIiwibGF5ZXIiLCJpZHgiLCJfb2JqZWN0U3ByZWFkIiwibWFwIiwibHlyIiwiaSIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJsZW5ndGgiLCJpc1Zpc2libGUiLCJhbmltYXRpb24iLCJ1cGRhdGVBbmltYXRpb25Eb21haW4iLCJwaWNrQ2hhbmdlZFByb3BzIiwicHJldiIsIm5leHQiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUyIsImFwcGx5TGF5ZXJDb25maWdVcGRhdGVyIiwiYWN0aW9uIiwiX3NlcmlhbGl6ZUxheWVyIiwib2xkTGF5ZXJJZCIsIm5ld0xheWVyQ29uZmlnIiwibGF5ZXJJbmRleCIsInNhdmVkTGF5ZXJDb25maWciLCJuZXdQYXJzZWRMYXllciIsIm9sZExheWVyIiwiZmluZCIsImwiLCJkYXRhc2V0IiwiZGF0YUlkIiwibmV3TGF5ZXIiLCJrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWwiLCJuZXh0U3RhdGUiLCJ0eXBlIiwib2xkTGF5ZXJJbmRleCIsImZpbmRJbmRleCIsImxheWVyVHlwZUNoYW5nZVVwZGF0ZXIiLCJuZXdMYXllcklkIiwic2VyaWFsaXplZE9sZExheWVyIiwic2VyaWFsaXplZE5ld0xheWVyIiwiY2hhbmdlZCIsInZpc0NvbmZpZyIsImxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlciIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImVyciIsImUiLCJmIiwibGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsInN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyIiwiZW5hYmxlIiwicHJvcHMiLCJuZXdDb25maWciLCJfYWN0aW9uJG5ld0NvbmZpZyIsInJlc3RDb25maWciLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJzdGF0ZVdpdGhEYXRhSWQiLCJsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIiLCJuZXh0TGF5ZXIiLCJ1cGRhdGVMYXllckNvbmZpZyIsInNob3VsZENhbGN1bGF0ZUxheWVyRGF0YSIsIm9sZExheWVyRGF0YSIsInVwZGF0ZUxheWVyRGF0YVJlc3VsdCIsImxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlciIsIl9kZWZpbmVQcm9wZXJ0eSIsIl9jYWxjdWxhdGVMYXllckRhdGEiLCJsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyIiwibGF5ZXJJZCIsInNwbGl0TWFwSWQiLCJtYXBJbmRleCIsInNtIiwidG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyIiwic3luY2VkV2l0aExheWVyVGltZWxpbmUiLCJsYXllclNldElzVmFsaWRVcGRhdGVyIiwiaXNWYWxpZCIsImxheWVyVG9VcGRhdGUiLCJuZXdEYXRhIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTIiLCJhZGRPclJlbW92ZVRleHRMYWJlbHMiLCJuZXdGaWVsZHMiLCJ0ZXh0TGFiZWwiLCJkZWZhdWx0VGV4dExhYmVsIiwiYXJndW1lbnRzIiwibmV3VGV4dExhYmVsIiwic2xpY2UiLCJjdXJyZW50RmllbGRzIiwidGwiLCJmaWVsZCIsIm5hbWUiLCJmaWx0ZXIiLCJhZGRGaWVsZHMiLCJpbmRleCIsImluY2x1ZGVzIiwib3RoZXIiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsImFmIiwiX3RleHRMYWJlbCRmaW5kJGNvbGxpIiwiX3RleHRMYWJlbCRmaW5kIiwiY29sbGlzaW9uRW5hYmxlZCIsIkJvb2xlYW4iLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwyIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwiX3RleHRMYWJlbCQiLCJ2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YSIsImxvYWRlZExheWVyIiwiYWxsb3dFbXB0eUNvbHVtbiIsImlzVmFsaWRUb1NhdmUiLCJ2YWxpZGF0ZWQiLCJvbGRMYXllclR5cGUiLCJuZXdEYXRhc2V0RmllbGRzIiwiZmllbGRzIiwicmVtYXBwZWRGaWVsZHMiLCJ2YWx1ZXMiLCJfcmVmMiIsImZpZWxkS2V5IiwiY3VycmVudEZpZWxkIiwibWF0Y2hlZCIsIl9yZWYzIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiaXNDb25maWdBY3RpdmUiLCJ1cGRhdGVMYXllckRvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGEzIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwiQXJyYXkiLCJpc0FycmF5IiwibWF5YmVGaXRNYW51YWxMYXllckJvdW5kcyIsImVuYWJsZUZpdEJvdW5kc09uTWFudWFsTGF5ZXIiLCJib3VuZHMiLCJuZXdUeXBlIiwib2xkSWQiLCJlcnJvciIsImRlZmF1bHRMYXllclByb3BzIiwiYXNzaWduQ29uZmlnVG9MYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwiaGFzIiwiaXNMYXllckhvdmVyZWQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNCIsInNldHRpbmdzIiwiX3NldHRpbmdzJGxheWVycyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJfdG9Qcm9wZXJ0eUtleSIsInJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldCIsInZpc3VhbENoYW5uZWwiLCJpbmNvbWluZyIsIl90eXBlb2YiLCJmb3VuZCIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsIiwidXBkYXRlZFN0YXRlIiwiY2hhbm5lbFNjYWxlVHlwZSIsInVwZGF0ZUxheWVyQ29sb3JVSSIsInJhbmdlIiwiY29sb3JSYW5nZUNvbmZpZyIsImNvbG9yVUkiLCJjdXN0b21CcmVha3MiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNSIsInNjYWxlIiwiY3VzdG9tT3JkaW5hbCIsImN1c3RvbVBhbGV0dGUiLCJvcmRpbmFsRG9tYWluIiwiY29sb3JCcmVha3MiLCJzaG93Q29sb3JDaGFydCIsImNoYW5uZWxLZXkiLCJqZW5rcyIsImVkaXRCb3VuZHMiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNiIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJfcmVmNCIsInJlZHVjZSIsImFjY3UiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiX3JlZjUiLCJhbmltYXRpb25XaW5kb3ciLCJwcmV2aW91c1dpbmRvdyIsIm5leHRGaWx0ZXIiLCJ0aW1lUmFuZ2UiLCJpbnRlcnZhbCIsImFkanVzdGVkIiwiZXZlcnkiLCJ2IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm5ld0ZpbHRlciIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwidXBkYXRlRmlsdGVyUGxvdHNBZnRlckZpbHRlcmluZyIsImFmZmVjdGVkRGF0YXNldElkcyIsInVwZGF0ZWRGaWx0ZXJJbmRleCIsInNoYXJlZERhdGFzZXRJZHMiLCJpbnZhbGlkYXRlZEZpbHRlciIsIl9hY3Rpb24kdmFsdWVJbmRleCIsInZhbHVlSW5kZXgiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsInVwZGF0ZUFsbExheWVyRG9tYWluRGF0YSIsImFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIiLCJfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwiX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIm5leHRWYWx1ZSIsIl9pIiwiX2FyciIsIm5leHRWYWwiLCJkb21haW5TdGVwcyIsInN0ZXAiLCJkYXRhc2V0SWRzIiwib2xkRGF0YUlkIiwiZGF0YXNldElkIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsImVuZE5hbWUiLCJfYXBwbHlUaW1lRmlsdGVyRW5kRmkiLCJncHVDaGFubmVsIiwiZ3B1RW5kQ2hhbm5lbCIsInN1cHBvcnRzSW52ZXJzaW9uIiwiX3N0YXRlJGRhdGFzZXRzJGRhdGFzIiwiZGlzYWJsZURhdGFPcGVyYXRpb24iLCJpbnZlcnRlZCIsImxheWVySWREaWZmZXJlbmNlIiwibGF5ZXJEYXRhSWRzIiwibGlkIiwibmV3RGF0YUlkcyIsInNldEZpbHRlclBsb3RVcGRhdGVyIiwiX3JlZjYiLCJuZXdQcm9wIiwicGxvdFR5cGVVcGRhdGUiLCJwbG90VHlwZSIsIl9uZXdGaWx0ZXIkcGxvdFR5cGUiLCJncm91cEJ5IiwiY2hhcnRUeXBlIiwieUF4aXMiLCJsaW5lQ2hhcnQiLCJoaXN0b2dyYW0iLCJhZGRGaWx0ZXJVcGRhdGVyIiwiY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyIiwib3JpZ2luYWxJbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNyIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJ0b2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXIiLCJ0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJfcmVmOCIsInNldEZpbHRlclZpZXdVcGRhdGVyIiwic2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3IiwidG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIiLCJyZW1vdmVGaWx0ZXJVcGRhdGVyIiwiX3N0YXRlJGZpbHRlcnMkaWR4IiwibmV3RmlsdGVycyIsIm5ld0VkaXRvciIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwicmVtb3ZlTGF5ZXJVcGRhdGVyIiwiX3JlZjkiLCJsYXllclRvUmVtb3ZlIiwicmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyIsImNoYXJ0IiwiaXNMYXllckNoYXJ0Q29uZmlnIiwicmVvcmRlckxheWVyVXBkYXRlciIsIl9yZWYwIiwib3JkZXIiLCJhZGRMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXAiLCJuZXdMYXllck9yZGVyIiwicmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwVG9SZW1vdmUiLCJsYXllcklkc1RvUmVtb3ZlIiwidXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIiLCJvcHRpb25zIiwibmV3TGF5ZXJHcm91cCIsImxheWVySWRzIiwiYWNjIiwiYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cElkIiwiZW50cnkiLCJuZXdHcm91cExheWVyT3JkZXIiLCJyZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlciIsIm5ld0xheWVyR3JvdXBPcmRlciIsInN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXIiLCJvcmlnaW5MYXllcklkIiwiZGVzdGluYXRpb25MYXllcklkIiwib3JpZ2luTGF5ZXJHcm91cElkIiwiZGVzdGluYXRpb25MYXllckdyb3VwSWQiLCJvcmlnaW5JbmRleCIsImRlc3RpbmF0aW9uSW5kZXgiLCJkZXN0SW5kZXgiLCJkdXBsaWNhdGVMYXllclVwZGF0ZXIiLCJfcmVmMSIsIm9yaWdpbmFsIiwib3JpZ2luYWxMYXllck9yZGVySWR4IiwibmV3TGFiZWwiLCJwb3N0Zml4IiwicGFyZW50R3JvdXAiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJ1cGRhdGVkR3JvdXAiLCJhZGRFZmZlY3RVcGRhdGVyIiwiX2FjdGlvbiRjb25maWciLCJfYWN0aW9uJGNvbmZpZzIiLCJfYWN0aW9uJGNvbmZpZzMiLCJlZmZlY3QiLCJuZXdFZmZlY3QiLCJzZXRQcm9wcyIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtZXJnZUNoYXJ0Q29uZmlnIiwiZGlzcGxheSIsImNoYXJ0RGlzcGxheSIsImF4aXNGaWVsZElmUHJlc2VudCIsImF4aXMiLCJmaWVsZE5hbWVzIiwiX2F4aXMkZmllbGQiLCJkcm9wTWlzc2luZ0NoYXJ0RmllbGRzIiwiU2V0IiwieEF4aXMiLCJzaG91bGRSZW1vdmUiLCJyZW1vdmVkIiwicmVtb3ZlZElkcyIsImZpbHRlcklkcyIsImZsYXRNYXAiLCJfY2hhcnQkY3Jvc3NGaWx0ZXIiLCJjcm9zc0ZpbHRlciIsInJlZHVjZVJpZ2h0IiwiYWRkQ2hhcnRVcGRhdGVyIiwiX3JlZjEzIiwiX2NoYXJ0JGRpc3BsYXkkaXNDb25mIiwiX2NoYXJ0JGRpc3BsYXkiLCJleGlzdGluZyIsImlzSnNvbkVkaXRvckFjdGl2ZSIsInVwZGF0ZUNoYXJ0VXBkYXRlciIsIl9yZWYxNCIsIl9uZXh0JGNyb3NzRmlsdGVyMiIsIl9wcmV2JGNyb3NzRmlsdGVyIiwiX3ByZXYkY3Jvc3NGaWx0ZXIyIiwiX25leHQkY3Jvc3NGaWx0ZXIzIiwiZGF0YUlkQ2hhbmdlZCIsImxheWVySWRDaGFuZ2VkIiwiX25leHQkY3Jvc3NGaWx0ZXIiLCJvd25lZEZpbHRlcklkcyIsInJlbW92ZUNoYXJ0VXBkYXRlciIsIl9yZWYxNSIsIm1ha2VOZXdBbm5vdGF0aW9uIiwiX2NvbmZpZyRraW5kIiwiX3JlZjE2IiwiX2NvbmZpZyR0ZXh0U2lkZSIsIl9yZWYxNyIsIl9jb25maWckdGV4dFZlcnRpY2FsUCIsIl9jb25maWckaWQiLCJfY29uZmlnJGlzVmlzaWJsZSIsIl9jb25maWckYXV0b1NpemUiLCJfY29uZmlnJGF1dG9TaXplWSIsIl9jb25maWckYW5jaG9yUG9pbnQiLCJfY29uZmlnJGxhYmVsIiwiX2NvbmZpZyRsaW5lQ29sb3IiLCJfY29uZmlnJGxpbmVXaWR0aCIsIl9jb25maWckdGV4dFdpZHRoIiwiX2NvbmZpZyR0ZXh0SGVpZ2h0IiwiX2NvbmZpZyR0ZXh0VmVydGljYWxBIiwiX2FybUxlbmd0aCIsIl9hcm1MZW5ndGgyIiwiX2FybUxlbmd0aDMiLCJfcmFkaXVzSW5NZXRlcnMiLCJraW5kIiwicHJvdmlkZWRBbmdsZSIsImFuZ2xlIiwiZGVyaXZlZEZyb21BbmdsZSIsInRleHRTaWRlIiwiVEVYVCIsInRleHRWZXJ0aWNhbFBvc2l0aW9uIiwidmVydGljYWwiLCJiYXNlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJhbmNob3JQb2ludCIsImxpbmVDb2xvciIsImxpbmVXaWR0aCIsInRleHRXaWR0aCIsInRleHRIZWlnaHQiLCJ0ZXh0VmVydGljYWxBbGlnbiIsImRlZmF1bHRBbmdsZSIsIlBPSU5UIiwiYXJtTGVuZ3RoIiwiQVJST1ciLCJDSVJDTEUiLCJyYWRpdXNJbk1ldGVycyIsImFkZEFubm90YXRpb25VcGRhdGVyIiwibmV3QW5ub3RhdGlvbiIsInJlbW92ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE4IiwiYSIsInVwZGF0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE5IiwibmV4dEFubm90YXRpb24iLCJuZXdBbm5vdGF0aW9ucyIsImR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjIwIiwic2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYyMSIsImlzRWRpdGluZ1RleHQiLCJyZW1vdmVEYXRhc2V0VXBkYXRlciIsImRhdGFzZXRLZXkiLCJyZW1vdmVTaW5nbGVEYXRhc2V0VXBkYXRlciIsIl9zdGF0ZSRkYXRhc2V0cyIsIl9kYXRhc2V0IiwibmV3RGF0YXNldHMiLCJsYXllcnNUb1JlbW92ZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJpbmRleE9mIiwicHVzaCIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMjIiLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYyMyIsIl9yZWYyMyRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYyMyRwYXlsb2FkJGNvbmZpZyIsIl9yZWYyMyRwYXlsb2FkJG9wdGlvbiIsInZpc1N0YXRlIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwibWVyZ2VkU3RhdGUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibWVyZ2VyIiwibWVyZ2UiLCJ0b01lcmdlUHJvcCIsImxheWVySG92ZXJVcGRhdGVyIiwiaW5mbyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlciIsImNvbnRyYWRpY3QiLCJrIiwiZ2VvY29kZXJMYXllciIsIl9jb25maWckY29uZmlnJGNvbG9yIiwibGF5ZXJDbGlja1VwZGF0ZXIiLCJwaW5uZWQiLCJwaWNrZWQiLCJtYXBDbGlja1VwZGF0ZXIiLCJtb3VzZU1vdmVVcGRhdGVyIiwiX3JlZjI0IiwiZXZ0IiwicG9pbnQiLCJtb3VzZVBvc2l0aW9uIiwibG5nTGF0IiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiZHVwbGljYXRlIiwiY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgiLCJfcmVmMjUiLCJoYXNUYWJ1bGFyRGF0YXNldERhdGEiLCJkYXRhIiwiX2RhdGEkcm93cyIsIl9kYXRhJGNvbHMiLCJyb3dzIiwiY29scyIsImFycm93VGFibGUiLCJuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlIiwiX2RhdGFzZXQkaW5mbyIsIl9kYXRhc2V0JG1ldGFkYXRhIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJhcHBseSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlMiIsIl9yZWYyNiIsIl9kYXRhc2V0JG1ldGFkYXRhNyIsIl9kYXRhc2V0JG1ldGFkYXRhOCIsIm9uUHJvZ3Jlc3MiLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTkiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYXJnIiwiYWJydXB0IiwiZm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZSIsIl9yZWYyNyIsIl9jYWxsZWUiLCJtZXNzYWdlIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsIl94MiIsImdldERhdGFzZXRQcm9ncmVzc0lkIiwiX2RhdGFzZXQkaW5mbzIiLCJfZGF0YXNldCRtZXRhZGF0YTIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwicHJvZ3Jlc3NJZCIsInByb2dyZXNzIiwiX3Byb2dyZXNzJHBlcmNlbnQiLCJNYXRoIiwicm91bmQiLCJwZXJjZW50IiwicGhhc2UiLCJjaGFpbiIsImh5ZHJhdGVkIiwidGFzayIsImNsZWFyTG9hZGluZ1Byb2dyZXNzIiwiaWRzIiwiY3VycmVudCIsInByb2Nlc3NpbmciLCJuZXh0UHJvY2Vzc2luZyIsInBhdGNoRGF0YXNldE1ldGFkYXRhIiwicGF0Y2giLCJyZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX3gzIiwiX3JlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUiLCJfY2FsbGVlMyIsIl9yZWYyOCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsIlJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwicmVmcmVzaERhdGFzZXRVcGRhdGVyIiwiX3JlZjI5IiwiX2RhdGFzZXQkbWV0YWRhdGEzIiwiX2RhdGFzZXQkbWV0YWRhdGE0IiwibmV4dERhdGFzZXQiLCJyZWZyZXNoRXJyb3IiLCJyZWZyZXNoUHJvZ3Jlc3MiLCJfcHJvZ3Jlc3MkcGVyY2VudDIiLCJiaW1hcCIsInJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyIiwiX3JlZjMwIiwiX2RhdGFzZXQkbWV0YWRhdGE1IiwiX2RhdGFzZXQkbWV0YWRhdGE2IiwibmV4dFBlcmNlbnQiLCJtYXgiLCJtaW4iLCJmaWVsZE5hbWVzRXF1YWwiLCJyZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2UiLCJuZXh0TGF5ZXJzIiwiZHJvcHBlZExheWVycyIsInJlYm91bmQiLCJuZXh0TGF5ZXJPcmRlciIsIm5leHRTcGxpdE1hcHMiLCJuZXh0TGF5ZXJEYXRhIiwib2xkSWR4IiwiZmlsdGVyc0ZvckRhdGFzZXQiLCJvdGhlckZpbHRlcnMiLCJfdmFsaWRhdGVGaWx0ZXJzVXBkYXQiLCJ1cGRhdGVkRGF0YXNldHMiLCJuZXh0RmlsdGVycyIsInJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfcmVmMzEiLCJfcmVzdWx0JGRhdGEiLCJtZXRhZGF0YVBhdGNoIiwic2NoZW1hVW5jaGFuZ2VkIiwibm90TW9kaWZpZWQiLCJ1cGRhdGUiLCJyZWZyZXNoZWQiLCJyZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSIsImlzRGF0YXNldFJvd0xpc3QiLCJ0b0FycmF5Um93Iiwicm93IiwicmVjb3JkIiwibm9ybWFsaXplRGF0YXNldFJvd3MiLCJsaXN0Iiwibm9ybWFsaXplZCIsImFycmF5Um93IiwiYWRkVG9EYXRhc2V0VXBkYXRlciIsIl9yZWYzMiIsImFwcGxpZWQiLCJ1cHNlcnRCeSIsInVwc2VydFJvd3MiLCJhcHBlbmRSb3dzIiwicmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyIiwiX3JlZjMzIiwicm93SW5kZXhlcyIsImJ5RmllbGQiLCJpbmRleGVzIiwiZmluZFJvd0luZGV4ZXNCeUZpZWxkVmFsdWVzIiwicmVtb3ZlUm93cyIsInJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyIiwiX3JlZjM0IiwiU3RyaW5nIiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJyZWFkeVRhc2tzIiwicmVtb3RlVGFza3MiLCJub3RpZmljYXRpb25UYXNrcyIsImh5ZHJhdGVQcm9ncmVzcyIsIl9yZWYzNSIsImRhdGFzZXRJbmRleCIsIl9yZWYzNSRpbmZvIiwicmVzdCIsIl9leGNsdWRlZDIiLCJwcm90byIsInJlbW90ZSIsInByb2dyZXNzSWRzIiwiYmF0Y2hlcyIsInRhc2tzIiwic2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIiLCJjaGFuZ2UiLCJiYXRjaCIsImFsbFNldHRsZWQiLCJyZXN1bHRzIiwiYWRkVG9NYXBPcHRpb25zIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyIiwiX2FjdGlvbiRwYXlsb2FkIiwibmV3RGF0YUVudHJpZXMiLCJzdGF0dXMiLCJyZWFzb24iLCJsYXllck1lcmdlcnMiLCJtIiwid2FpdEZvckxheWVyRGF0YSIsImRhdGFzZXRNZXJnZXJzIiwicG9zdE1lcmdlclBheWxvYWQiLCJhcHBseU1lcmdlcnNVcGRhdGVyIiwibWVyZ2VTdGF0ZVJlc3VsdCIsImFsbE1lcmdlZCIsInBvc3RNZXJnZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyIsImxheWVyVmlzQ29uZmlnIiwicG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YSIsIl9sYXllciRjb25maWciLCJnZW9qc29uIiwiY29sdW1uTW9kZSIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsImxheWVyc05vdEluU3BsaXRNYXBzIiwidG9vbHRpcEZpZWxkcyIsImF1dG9DcmVhdGVUb29sdGlwcyIsImFkZERlZmF1bHRUb29sdGlwcyIsInBvbHlnb25GaWx0ZXJzIiwicG9seWdvbiIsInBvbHlnb25NZXRhRGF0YUlkcyIsIl9mJGxheWVySWQiLCJjZW50ZXJNYXAiLCJwYWRkaW5nIiwiZml0Qm91bmRzVGFzayIsInJlbmFtZURhdGFzZXRVcGRhdGVyIiwiQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyIsInZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzIiwidmFsaWRhdGVkUHJvcHMiLCJlbnRyaWVzIiwiX2VudHJ5IiwiX3NsaWNlZFRvQXJyYXkiLCJyZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEiLCJyZW5hbWVzIiwibmV3VGFibGUiLCJfbGF5ZXIkY29uZmlnJHRleHRMYWIiLCJjb25maWdQYXRjaCIsImNvbHVtbnNQYXRjaCIsImNvbHVtbnNDaGFuZ2VkIiwiY29sdW1ucyIsIl9yZWYzNiIsIl9yZWYzNyIsImNrZXkiLCJjb2wiLCJfcmVmMzgiLCJmaWVsZENvbmZpZyIsIl90bCRmaWVsZCIsIl90bCRmaWVsZDIiLCJjYW5kaWRhdGUiLCJfcmVuYW1lcyRuYW1lIiwibGF5ZXJDb3B5IiwiYXNzaWduIiwiY3JlYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJoYXNBbGxDb2x1bW5zIiwiRklMVEVSX1BMT1RfWV9BWElTX1RZUEVTIiwiaW50ZWdlciIsInJlYWwiLCJjbGVhclRpbWVsaW5lRmlsdGVyU3RhdGUiLCJfcmVmMzkiLCJfc3luY2VkV2l0aExheWVyVGltZWxpbmUiLCJfc3luY1RpbWVsaW5lTW9kZSIsInN5bmNUaW1lbGluZU1vZGUiLCJfdGltZUJpbnMiLCJ0aW1lQmlucyIsIl9saW5lQ2hhcnQiLCJfdGltZXpvbmUiLCJfaW52ZXJ0VHJlbmRDb2xvciIsImludmVydFRyZW5kQ29sb3IiLCJfc2hvd1RpbWVEaXNwbGF5Iiwic2hvd1RpbWVEaXNwbGF5IiwiX2V4Y2x1ZGVkMyIsImZpeGVkRG9tYWluIiwiZnJlZSIsInJlY29uY2lsZVRpbWVsaW5lUGxvdEFmdGVyUHJpbWFyeVJlbW92YWwiLCJfZmlsdGVyJHlBeGlzIiwiX3ByaW1hcnlEYXRhc2V0JGZpZWxkIiwiX2ZpbHRlciRwbG90VHlwZSIsInByaW1hcnlEYXRhc2V0IiwiX2ZpbHRlciR5QXhpczIiLCJncm91cEJ5RmllbGROYW1lIiwiZmllbGROYW1lIiwiaGFzR3JvdXBCeUZpZWxkIiwidXBkYXRlRGF0YXNldFVwZGF0ZXIiLCJfcmVuYW1lcyRzb3J0ZWRDb2x1bW4iLCJfaW50ZXJhY3Rpb25Db25maWcyIiwiX3Rvb2x0aXAkY29uZmlnIiwiX2FjdGlvbiRyZW5hbWVzIiwiX3JlZjQwIiwic29ydENvbHVtbiIsIl9yZWY0MSIsInNvcnRlZENvbHVtbiIsInNvcnRNb2RlIiwidXBkYXRlU2NoZW1hIiwiZGF0YVJldmlzaW9uIiwiZmlsdGVyZWRJZHhDUFUiLCJhbGxJbmRleGVzIiwiZmlsdGVyUmVjb3JkQ1BVIiwic29ydE9yZGVyIiwibmV3RmllbGRzQnlOYW1lIiwiTWFwIiwicGlubmVkQ29sdW1ucyIsIl9yZW5hbWVzJG5hbWUyIiwiaGlkZGVuQ29sdW1ucyIsIl9yZW5hbWVzJG5hbWUzIiwibmV4dFNvcnRlZENvbHVtbiIsImRhdGFzZXRJZHNUb1JlZmlsdGVyIiwiX3JlbmFtZXMkb2xkTmFtZSIsIl9uZXdUYWJsZSRnZXRDb2x1bW5GaSIsIl91cGRhdGVkJHlBeGlzIiwidmkiLCJvbGROYW1lIiwibmV3TmFtZSIsImZpZWxkSWR4IiwiZ2V0Q29sdW1uRmllbGRJZHgiLCJuZXh0RmlsdGVyVHlwZSIsImdldENvbHVtbkZpbHRlclByb3BzIiwiYWRkIiwiZGV0YWNoZWRGaWx0ZXIiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUyIiwidXBkYXRlZCIsImxlYXZpbmdUaW1lRmlsdGVyIiwib2xkRW5kTmFtZSIsIl9yZW5hbWVzJG9sZEVuZE5hbWUiLCJfcmVmNDIiLCJfYXBwbHlUaW1lRmlsdGVyRW5kRmkyIiwiX3JlbmFtZXMkdXBkYXRlZCR5QXhpIiwieUF4aXNOYW1lIiwieUF4aXNGaWVsZCIsInJlY29uY2lsZWQiLCJyZW1vdmVkTGF5ZXJJZHMiLCJfZmlsdGVyJGxheWVySWQiLCJzdXJ2aXZpbmdMYXllcnMiLCJmcm9tIiwibmV4dEZpZWxkc1RvU2hvdyIsIl9yZW5hbWVzJGYkbmFtZSIsInJlbmFtZVRhYmxlQ29sdW1uVXBkYXRlciIsImNoYW5nZVRhYmxlQ29sdW1uVHlwZVVwZGF0ZXIiLCJkZWxldGVUYWJsZUNvbHVtblVwZGF0ZXIiLCJfc3RhdGUkc3BsaXRNYXBzJGluZGUiLCJpbmRleFRvUmV0cmlldmUiLCJtYXBMYXllcnMiLCJuZXh0RmlsZUxvYWRJZCIsImNyZWF0ZUZpbGVMb2FkSWQiLCJsb2FkSWQiLCJmaW5pc2hGaWxlTG9hZCIsIm9uRmluaXNoIiwiZmlsZUNhY2hlIiwibG9hZEZpbGVzVXBkYXRlciIsIl9zdGF0ZSRmaWxlTG9hZGluZyRvcCIsImZpbGVzIiwiX2FjdGlvbiRvbkZpbmlzaCIsImNvbXBhbmlvbkZpbGVzIiwiZmlsZXNUb0xvYWQiLCJkZWZlckFkZFRvTWFwIiwiYXBwZW5kRGVmZXJyZWRGaWxlTG9hZCIsInByZXZpb3VzRXJyb3JzIiwiZnJvbUVudHJpZXMiLCJfcmVmNDMiLCJfcmVmNDQiLCJpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyIsImxvYWROZXh0RmlsZVVwZGF0ZXIiLCJfcmVmNDUiLCJsb2FkaW5nIiwiZmlsZSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3NVcGRhdGVyIiwiZmlsZU5hbWUiLCJzdGF0ZVdpdGhQcm9ncmVzcyIsInVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyIiwic3RhdGVXaXRoQ2FjaGUiLCJfc3RhdGUkZmlsZUxvYWRpbmciLCJjdXJyZW50TG9hZElkIiwiX2ZpbGVzVG9Mb2FkIiwiX3RvQXJyYXkiLCJyZW1haW5pbmdGaWxlc1RvTG9hZCIsImV4dGVuc2lvbnMiLCJkYXRhc2V0RXh0ZW5zaW9uc0Zyb21Mb2FkZXJzIiwiZXhwYW5zaW9uIiwiYXJjaGl2ZU5hbWUiLCJtYWtlTG9hZEZpbGVUYXNrIiwic2VlbiIsIl9pdGVyYXRvcjQiLCJfc3RlcDQiLCJsb2FkZXIiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwiZXh0ZW5zaW9uIiwiZXh0IiwicmVwbGFjZSIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImNvbXBhbmlvbkZpbGVzRm9yQXJjaGl2ZSIsImV4dHJhY3RlZCIsInNoYXBlZmlsZSIsImNvbXBhbmlvbnMiLCJ3aXRob3V0RmlsZUxvYWRpbmdQcm9ncmVzc0VudHJ5IiwiZXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3NVcGRhdGVyIiwiYWRkRGF0YU9wdGlvbnMiLCJkaXNwbGF5TmFtZSIsImdlbiIsImNvbnRlbnQiLCJwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyIiwiX2FjdGlvbiRwYXlsb2FkMiIsInBhcnNlUHJvZ3Jlc3MiLCJwcmV2UHJvZ3Jlc3MiLCJuZXh0RmlsZUJhdGNoVXBkYXRlciIsIl9yZWY0NiIsIl9hY2N1bXVsYXRlZCRkYXRhIiwiX3JlZjQ2JHBheWxvYWQiLCJhY2N1bXVsYXRlZCIsInVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nIiwiZW5kc1dpdGgiLCJza2lwQXJyb3dDb21wYWN0IiwiX3JlZjQ3IiwiY2xlYXJTdGFnZWRMb2FkZWRGaWxlc1VwZGF0ZXIiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjQ4IiwiZXJyb3JMb2FkSWQiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJfcmVmNDkiLCJkYXRhSWRzIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJlbXB0eSIsImRlZmF1bHRMYXllcnMiLCJmb3VuZExheWVycyIsIm1lcmdlZCIsIl9yZWY1MSIsIl9jYWxjdWxhdGVMYXllckRhdGE3IiwiX3N0YXRlJGZpbHRlcnMiLCJhbmltYXRhYmxlTGF5ZXJzIiwibGF5ZXJEb21haW5zIiwibWVyZ2VkRG9tYWluIiwibWVyZ2VkVGltZVN0ZXBzIiwic29ydCIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjUyIiwic2tldGNoZXNFbmFibGVkIiwiZW5hYmxlRHJhd09uTWFwU2tldGNoZXMiLCJEUkFXX1BPSU5UIiwiRFJBV19MSU5FU1RSSU5HIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjUzIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWY1MyRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsImZpbmRFZGl0b3JGZWF0dXJlIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlIiwiZnJvbUVkaXRvciIsIml0ZW0iLCJzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIiLCJfcmVmNTQiLCJfc3RhdGUkZWRpdG9yJHNlbGVjdGUyIiwibmV4dEZlYXR1cmUiLCJuZXh0RWRpdG9yIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWY1NSIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWY1NiIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZDIiLCJpc0xheWVySW5jbHVkZWQiLCJza2V0Y2hGZWF0dXJlIiwic3RhdGVXaXRob3V0RmlsdGVyIiwic2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIiLCJ2aXNpYmxlTGF5ZXJJZHMiLCJhbGxMYXllcklkcyIsInNvcnRUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNTciLCJjb2x1bW4iLCJjdXJyZW50TW9kZSIsIkFTQ0VORElORyIsInNvcnRlZCIsInBpblRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY1OCIsInRvZ2dsZVRhYmxlQ29sdW1uSGlkZGVuVXBkYXRlciIsIl9yZWY1OSIsInNob3dBbGxUYWJsZUNvbHVtbnNVcGRhdGVyIiwiX3JlZjYwIiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY2MSIsInRleHQiLCJkYXRhQ29udGFpbmVyIiwidmFsdWVBdCIsImpvaW4iLCJzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlciIsIl9yZWY2MiIsImZvcm1hdHMiLCJkaXNwbGF5Rm9ybWF0IiwidGV4dExhYmVsTGF5ZXJJbmRleGVzIiwiX2xheWVyJGNvbmZpZzIiLCJjb2xvckZpZWxkIiwidXBkYXRlZENvbG9yRmllbGQiLCJ1cGRhdGVUZXh0TGFiZWwiLCJnZXRNYXBwZWRWYWx1ZSIsImZpbHRlclByb3BzIiwibWFwcGVkVmFsdWUiLCJ5aWVsZEZvclBhaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX3g0IiwiX3JlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl9jYWxsZWU0IiwiX3JlZjYzIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiZmllbGRUeXBlIiwiTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyIsImxvYWRDb2x1bW5TdGF0c1VwZGF0ZXIiLCJfcmVmNjQiLCJmaWVsZE5hbWVzVG9Mb2FkIiwiZmllbGRzVG9Mb2FkIiwiaXNMb2FkaW5nU3RhdHMiLCJfcmVmNjUiLCJsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlciIsIl9yZWY2NiIsIm5ld0ZpbHRlclByb3BzIiwiY29sdW1uU3RhdHMiLCJsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIiLCJfcmVmNjciLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlciIsImNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyIiwiX2FjdGlvbiIsImNsZWFyZWRTdGF0ZSIsImxhYmVsSWQiLCJmbG9vciIsInJhbmRvbSIsImV4dHJhY3REYXRhRnJvbUZlYXR1cmVVcGRhdGVyIiwiX3JlZjY4IiwiaXNUaWxlZEV4dHJhY3QiLCJyb3dDb3VudCIsImRvd25sb2FkIiwiZG93bmxvYWRDbGlwIiwicG5nIiwianNvbiIsInNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjY5IiwidXBkYXRlcyIsImNoZWNrVGltZUNvbmZpZ0FyZ3MiLCJhbGxvd2VkIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWY3MCIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXIiLCJfbGF5ZXIkZmlsdGVyZWRJdGVtQ28iLCJldmVudCIsImRlY2tnbExheWVySWQiLCJjb3VudCIsImZpbHRlcmVkSXRlbUNvdW50Iiwid21zRmVhdHVyZUluZm9VcGRhdGVyIiwiZmVhdHVyZUluZm8iLCJvYmplY3QiLCJ3bXNGZWF0dXJlSW5mbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbzIiLCJfYWN0aW9uJGVuYWJsZSIsImludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIiLCJuZXdGaWx0ZXJEb21haW4iLCJhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwiLCJuZXdGaWx0ZXJWYWx1ZSIsImVuZCIsInZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUiLCJfcmVmNzEiLCJzZXRMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyIiwiX3JlZjcyIiwiX3N0YXRlJGxvYWRpbmdQcm9ncmVzIiwiX3N0YXRlJGxvYWRpbmdQcm9jZXNzIiwidGltZWxpbmVWYWx1ZSIsImdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyIiwiX2ZpbHRlciRzeW5jVGltZWxpbmVNIiwibmV3TW9kZSIsInN0YXJ0IiwiaW50ZXJ2YWxJbmRleCIsImN1cnJlbnRJbmRleCIsIm1ldGEiLCJ0YXJnZXRUaW1lSW50ZXJ2YWwiLCJuZXdJbmRleCIsImxheWVyVGltZUludGVydmFsIiwidXBkYXRlZFBsb3RUeXBlIiwicGxvdEJhc2VJbmRleEJ5RGF0YUlkIiwiZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwiX3ZhbHVlJGNvbmZpZyIsIl92YWx1ZSRjb25maWcyIiwicmVwbGFjZWQiLCJmaW5kQ2hpbGREYXRhc2V0SWRzIiwiX3ZhbHVlJG5ld0RhdGFzZXQiLCJjaGlsZERhdGFJZHMiLCJtb3ZlVmFsdWVUb0JlTWVyZ2VkIiwicHJvcFZhbHVlcyIsIl9yZWY3NCIsInNhdmVVbm1lcmdlZCIsInN0YXRlUmVtb3ZlZCIsInByb3BWYWx1ZSIsInAiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJkZWxldGVPcmlnaW5hbERhdGFzZXQiLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIl9zZXJpYWxpemVkU3RhdGUkc3BsaSIsInByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZCIsInByZXZpb3VzT3JkZXIiLCJwYXJrZWQiLCJwYXJrZWRJZHMiLCJrbm93biIsIm9yZGVyZWQiLCJfcmVmNzUiLCJhY2N1U3RhdGUiLCJfcmVmNzYiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlcjIiLCJtZXJnZXJPcHRpb25zIiwicGFya2VkRWxzZXdoZXJlIiwicmVwbGFjZWRJdGVtIiwicmVwbGFjZVByb3BWYWx1ZUluU3RhdGUiLCJfcmVmNzciLCJjaGlsZERhdGFJZCIsIkRBVEFTRVRfT1BfQUREX09QVElPTlMiLCJhcHBseURlcml2ZWRQcm90b0RhdGFzZXQiLCJyZXN1bHRJZCIsInJ1bkdyb3VwQnlVcGRhdGVyIiwiX2V4ZWN1dGVHcm91cEJ5IiwicnVuSm9pblVwZGF0ZXIiLCJfZXhlY3V0ZUpvaW4iLCJydW5TcGF0aWFsSm9pblVwZGF0ZXIiLCJfZXhlY3V0ZVNwYXRpYWxKb2luIiwicnVuU3VpdGFiaWxpdHlVcGRhdGVyIiwiX2V4ZWN1dGVTdWl0YWJpbGl0eSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtiYm94fSBmcm9tICdAdHVyZi9iYm94JztcbmltcG9ydCB0eXBlIHtBbGxHZW9KU09OfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBjb3B5IGZyb20gJ2NvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvY2xvbmVEZWVwJztcbmltcG9ydCBnZXQgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvZ2V0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2lzRXF1YWwnO1xuaW1wb3J0IHBpY2sgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvcGljayc7XG5pbXBvcnQgdW5pcSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC91bmlxJztcbmltcG9ydCB4b3IgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQveG9yJztcbmltcG9ydCBUYXNrLCB7ZGlzYWJsZVN0YWNrQ2FwdHVyaW5nLCB3aXRoVGFza30gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG5pbXBvcnQgdHlwZSB7VGFza0Rlc2NyaXB0b3J9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gVGFza3NcbmltcG9ydCB7XG4gIERFTEFZX1RBU0ssXG4gIEFDVElPTl9UQVNLLFxuICBFWFBBTkRfWklQX1RBU0ssXG4gIExPQURfRklMRV9UQVNLLFxuICBQUk9DRVNTX0ZJTEVfREFUQSxcbiAgVU5XUkFQX1RBU0tcbn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBhZGROb3RpZmljYXRpb24sXG4gIEFjdGlvblR5cGVzLFxuICBDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQsXG4gIFZpc1N0YXRlQWN0aW9ucyxcbiAgYXBwbHlMYXllckNvbmZpZyxcbiAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MsXG4gIGxheWVyQ29uZmlnQ2hhbmdlLFxuICBsYXllclR5cGVDaGFuZ2UsXG4gIGxheWVyVmlzQ29uZmlnQ2hhbmdlLFxuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UsXG4gIGxvYWRGaWxlU3RlcFN1Y2Nlc3MsXG4gIGxvYWRGaWxlc0VycixcbiAgbG9hZEZpbGVzU3VjY2VzcyxcbiAgbG9hZE5leHRGaWxlLFxuICBleHBhbmRaaXBBcmNoaXZlU3VjY2VzcyxcbiAgbmV4dEZpbGVCYXRjaCxcbiAgc2V0RmlsdGVyLFxuICBwcm9jZXNzRmlsZUNvbnRlbnQsXG4gIGZpdEJvdW5kcyBhcyBmaXRNYXBCb3VuZHMsXG4gIHRvZ2dsZUxheWVyRm9yTWFwLFxuICBhcHBseUZpbHRlckNvbmZpZyxcbiAgU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWQsXG4gIGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MsXG4gIGxvYWRDb2x1bW5TdGF0c0Vycm9yLFxuICByZWZyZXNoRGF0YXNldFN1Y2Nlc3MsXG4gIHJlZnJlc2hEYXRhc2V0RXJyb3IsXG4gIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3MsXG4gIHNldExvYWRpbmdQcm9ncmVzc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICBhcnJheUluc2VydCxcbiAgY29tYmluZVNwbGl0TWFwc0J5SW5kZXgsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbixcbiAgZGlzYWJsZUdwdUlmSW52ZXJ0ZWQsXG4gIGZpbHRlclR5cGVVc2VzR3B1LFxuICBnZXRQbG90QmFzZUluZGV4QnlEYXRhSWQsXG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBzdWNjZXNzTm90aWZpY2F0aW9uLFxuICBlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24sXG4gIGV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSxcbiAgaXNSYXN0ZXJUaWxlRXh0cmFjdExheWVyLFxuICBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIsXG4gIG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzLFxuICB0b1NrZXRjaEZlYXR1cmUsXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXIsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0c1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIHRvQXJyYXksIGFycmF5TW92ZX0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuLy8gTWVyZ2Vyc1xuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgTEFZRVJfVFlQRVMsXG4gIEZQUyxcbiAgTElHSFRfQU5EX1NIQURPV19FRkZFQ1QsXG4gIERJU1RBTkNFX0ZPR19UWVBFLFxuICBTVVJGQUNFX0ZPR19UWVBFLFxuICBNQVhfREVGQVVMVF9UT09MVElQUyxcbiAgUExPVF9UWVBFUyxcbiAgU09SVF9PUkRFUixcbiAgU1lOQ19USU1FTElORV9NT0RFUyxcbiAgQ0hBTk5FTF9TQ0FMRVMsXG4gIFNDQUxFX1RZUEVTLFxuICBJTklUSUFMX0FOTk9UQVRJT05fS0lORCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9TSURFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTixcbiAgQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlQsXG4gIHRleHRQbGFjZW1lbnRGcm9tQW5nbGUsXG4gIEFubm90YXRpb25LaW5kLFxuICBEYXRhc2V0VHlwZSxcbiAgZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zLFxuICBnZXRSZW1vdGVTb3VyY2VGb3JtYXQsXG4gIEdFT0NPREVSX0RBVEFTRVRfTkFNRSxcbiAgR0VPQ09ERVJfSUNPTl9DT0xPUixcbiAgR0VPQ09ERVJfTEFZRVJfSURcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fQ09VTlRfTEFZRVJfVFlQRVMsXG4gIGlzUG9pbnRDb3VudExhYmVsLFxuICBMQVlFUl9JRF9MRU5HVEgsXG4gIExheWVyLFxuICBMYXllckNsYXNzZXNcbn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgYXBwbHlfLFxuICBjb21wb3NlXyxcbiAgZmlsdGVyT3V0QnlJZCxcbiAgaWZfLFxuICBtZXJnZV8sXG4gIHBheWxvYWRfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBpc1NhdmVkTGF5ZXJDb25maWdWMSxcbiAgcGFyc2VMYXllckNvbmZpZyxcbiAgc2VyaWFsaXplRmlsdGVyLFxuICBzZXJpYWxpemVMYXllcixcbiAgc2VyaWFsaXplVmlzU3RhdGUsXG4gIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YVxufSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuXG5pbXBvcnQgS2VwbGVyR0xTY2hlbWEsIHtNZXJnZXIsIFBvc3RNZXJnZXJQYXlsb2FkLCBWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7XG4gIGdldEZpbGVzVG9QYXJzZSxcbiAgaXNaaXBGaWxlTmFtZSxcbiAgbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0LFxuICBwcm9jZXNzR2VvanNvbixcbiAgWmlwQXJjaGl2ZUV4cGFuc2lvblxufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEZlYXR1cmUsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgQW5ub3RhdGlvbixcbiAgQW5ub3RhdGlvblByb3BzUGFydGlhbCxcbiAgUHJvdG9EYXRhc2V0LFxuICBDaGFydENvbmZpZyxcbiAgTGF5ZXJDaGFydENvbmZpZ1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgS2VwbGVyVGFibGUsXG4gIEZpbHRlclByb3BzLFxuICBidWlsZENoYW5nZUNvbHVtblR5cGVEYXRhLFxuICBmb3JtYXRDb2x1bW5UeXBlQ29udmVyc2lvbkVycm9yLFxuICBhc3NpZ25HcHVDaGFubmVsLFxuICBidWlsZERlbGV0ZUNvbHVtbkRhdGEsXG4gIGJ1aWxkUmVuYW1lQ29sdW1uRGF0YSxcbiAgY2FuTXV0YXRlRGF0YXNldFNjaGVtYSxcbiAgY29weVRhYmxlQW5kVXBkYXRlLFxuICBjcmVhdGVOZXdEYXRhRW50cnksXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc2hvd0FsbFRhYmxlQ29sdW1ucyxcbiAgdG9nZ2xlSGlkZGVuVGFibGVDb2x1bW4sXG4gIHNldEZpbHRlckdwdU1vZGUsXG4gIHNvcnREYXRhc2V0QnlDb2x1bW5cbn0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge3JlbWFwQ2hhcnRzRm9yRGF0YXNldH0gZnJvbSAnLi9jb2x1bW4tZWRpdC1yZWNvbmNpbGUnO1xuaW1wb3J0IHtcbiAgZmluZEZpZWxkc1RvU2hvdyxcbiAgZ2V0Wm9vbU9wYWNpdHlBbm5vdGF0aW9uVGFyZ2V0SWQsXG4gIHJlbW92ZUxheWVyRnJvbVpvb21PcGFjaXR5XG59IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgY2FsY3VsYXRlTGF5ZXJEYXRhLFxuICBmaW5kRGVmYXVsdExheWVyLFxuICBnZXRMYXllck9yZGVyRnJvbUxheWVycyxcbiAgbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzLFxuICBnZXROZXdMYXllckdyb3VwLFxuICBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIsXG4gIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcixcbiAgZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyLFxuICBmaW5kUGFyZW50R3JvdXBGb3JMYXllcixcbiAgZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkLFxuICB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyLFxuICBnZXRGbGF0TGF5ZXJPcmRlcixcbiAgcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXJcbn0gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2dldFByb3BWYWx1ZVRvTWVyZ2VyLCBoYXNQcm9wc1RvTWVyZ2V9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHttZXJnZURhdGFzZXRzQnlPcmRlcn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7XG4gIGFkZEdyb3VwQnlVcGRhdGVyLFxuICBhZGRKb2luVXBkYXRlcixcbiAgYWRkU3BhdGlhbEpvaW5VcGRhdGVyLFxuICBhZGRTdWl0YWJpbGl0eVVwZGF0ZXIsXG4gIGV4ZWN1dGVHcm91cEJ5LFxuICBleGVjdXRlSm9pbixcbiAgZXhlY3V0ZVNwYXRpYWxKb2luLFxuICBleGVjdXRlU3VpdGFiaWxpdHksXG4gIHJlbW92ZURhdGFzZXRPcFVwZGF0ZXIsXG4gIHJlbW92ZU9wc0ZvckRhdGFzZXRzLFxuICBzZXRHcm91cEJ5Q29uZmlnVXBkYXRlcixcbiAgc2V0Sm9pbkNvbmZpZ1VwZGF0ZXIsXG4gIHNldFNwYXRpYWxKb2luQ29uZmlnVXBkYXRlcixcbiAgc2V0U3VpdGFiaWxpdHlDb25maWdVcGRhdGVyXG59IGZyb20gJy4vZGF0YXNldC1vcHMtdXBkYXRlcnMnO1xuaW1wb3J0IHtcbiAgZml4RWZmZWN0T3JkZXIsXG4gIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzLFxuICBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLFxuICBtZXJnZVRpbWVEb21haW5zLFxuICBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93LFxuICB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUsXG4gIG1lcmdlUGxvdEdyb3VwQnksXG4gIGdldERlZmF1bHRUaW1lRm9ybWF0LFxuICBMYXllclRvRmlsdGVyVGltZUludGVydmFsLFxuICBUSU1FX0lOVEVSVkFMU19PUkRFUkVELFxuICBtZXJnZUZpbHRlckRvbWFpbixcbiAgaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlLFxuICBjb2xsZWN0Q29sdW1uVmFsdWVzLFxuICBnZXRDb2x1bW5TdGF0aXN0aWNzLFxuICBvcHRpb25hbE1hcFRleHRcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7UGF5bG9hZEFjdGlvbn0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcblxuLy8gZGlzYWJsZSBzdGFjayBjYXB0dXJlIGZvciB3aXRoVGFzayBjYWxscyB0aGF0IGhhcHBlbiBvdXRzaWRlIHN0cmljdCByZWR1Y2VyIGNvbnRleHRcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIHRpbWV6b25lOiBudWxsLFxuICAgICAgY29tcGFyZU1vZGU6IGZhbHNlLFxuICAgICAgY29tcGFyZVR5cGU6IENPTVBBUkVfVFlQRVMuQUJTT0xVVEVcbiAgICB9XG4gIH0sXG4gIGxlZ2VuZDoge1xuICAgIGlkOiAnbGVnZW5kJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5sZWdlbmQnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgaGlkZUludmlzaWJsZUxheWVyczogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGdlb2NvZGVyOiB7XG4gICAgaWQ6ICdnZW9jb2RlcicsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZ2VvY29kZXInLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsLFxuICAgIGNvbmZpZzoge1xuICAgICAgbGltaXRTZWFyY2g6IGZhbHNlLFxuICAgICAgY29sb3I6IEdFT0NPREVSX0lDT05fQ09MT1JcbiAgICB9XG4gIH0sXG4gIGJydXNoOiB7XG4gICAgaWQ6ICdicnVzaCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuYnJ1c2gnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgLy8gc2l6ZSBpcyBpbiBrbVxuICAgICAgc2l6ZTogMi41XG4gICAgfVxuICB9LFxuICBjb29yZGluYXRlOiB7XG4gICAgaWQ6ICdjb29yZGluYXRlJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5jb29yZGluYXRlJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbFxuICB9LFxuICBhbm5vdGF0aW9uOiB7XG4gICAgaWQ6ICdhbm5vdGF0aW9uJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5hbm5vdGF0aW9uJyxcbiAgICBlbmFibGVkOiBmYWxzZVxuICB9LFxuICB6b29tT3BhY2l0eToge1xuICAgIGlkOiAnem9vbU9wYWNpdHknLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmZhZGVPblpvb20nLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgY29udHJvbGxlcnM6IFtdXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTklNQVRJT05fQ09ORklHOiBBbmltYXRpb25Db25maWcgPSB7XG4gIGRvbWFpbjogbnVsbCxcbiAgY3VycmVudFRpbWU6IG51bGwsXG4gIHNwZWVkOiAxLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIHRpbWVTdGVwczogbnVsbCxcbiAgdGltZUZvcm1hdDogbnVsbCxcbiAgdGltZXpvbmU6IG51bGwsXG4gIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsLFxuICBoaWRlQ29udHJvbDogZmFsc2UsXG4gIGR1cmF0aW9uOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUT1I6IEVkaXRvciA9IHtcbiAgbW9kZTogRURJVE9SX01PREVTLkRSQVdfUE9MWUdPTixcbiAgZmVhdHVyZXM6IFtdLFxuICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gIHZpc2libGU6IHRydWVcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVklTX1NUQVRFOiBWaXNTdGF0ZSA9IHtcbiAgLy8gbWFwIGluZm9cbiAgbWFwSW5mbzoge1xuICAgIHRpdGxlOiB1bmRlZmluZWQsXG4gICAgZGVzY3JpcHRpb246IHVuZGVmaW5lZFxuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG4gIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcbiAgZ3JvdXBCeXM6IFtdLFxuICBqb2luczogW10sXG4gIHN1aXRhYmlsaXRpZXM6IFtdLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICAvLyBjaGFydHMgKGVuYWJsZWQgYnkgZGVmYXVsdDsgZ2F0ZWQgYnkgZW5hYmxlQ2hhcnRzUGFuZWwpXG4gIGNoYXJ0czogW10sXG4gIGNoYXJ0c1RvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGFubm90YXRpb25zXG4gIGFubm90YXRpb25zOiBbXSxcbiAgYW5ub3RhdGlvbnNUb0JlTWVyZ2VkOiBbXSxcbiAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG51bGwsXG4gIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZSxcblxuICBpbnRlcmFjdGlvbkNvbmZpZzogZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHt9LFxuXG4gIGxheWVyQmxlbmRpbmc6ICdub3JtYWwnLFxuICBvdmVybGF5QmxlbmRpbmc6ICdub3JtYWwnLFxuICBob3ZlckluZm86IHVuZGVmaW5lZCxcbiAgY2xpY2tlZDogdW5kZWZpbmVkLFxuICBtb3VzZVBvczoge30sXG4gIG1heERlZmF1bHRUb29sdGlwczogTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG5cbiAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gdXNlciBzcGxpdCBtYXBzXG4gIHNwbGl0TWFwczogW1xuICAgIC8vIHRoaXMgd2lsbCBjb250YWluIGEgbGlzdCBvZiBvYmplY3RzIHRvXG4gICAgLy8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGxheWVyIGF2YWlsYWJpbGl0eSBhbmQgdmlzaWJpbGl0eSBmb3IgZWFjaCBtYXBcbiAgICAvLyBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgICBsYXllcnM6IHtsYXllcl9pZDogdHJ1ZSB8IGZhbHNlfVxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgXSxcbiAgc3BsaXRNYXBzVG9CZU1lcmdlZDogW10sXG4gIGlzTWVyZ2luZ0RhdGFzZXRzOiB7fSxcbiAgLy8gZGVmYXVsdHMgbGF5ZXIgY2xhc3Nlc1xuICBsYXllckNsYXNzZXM6IExheWVyQ2xhc3NlcyxcblxuICAvLyBkZWZhdWx0IGFuaW1hdGlvblxuICAvLyB0aW1lIGluIHVuaXggdGltZXN0YW1wIChtaWxsaXNlY29uZHMpICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVuaXggRXBvY2gpXG4gIGFuaW1hdGlvbkNvbmZpZzogREVGQVVMVF9BTklNQVRJT05fQ09ORklHLFxuXG4gIGVkaXRvcjogREVGQVVMVF9FRElUT1IsXG5cbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgc3RhZ2VkVG9BZGQ6IG51bGwsXG4gIC8vIGZvciBsb2FkaW5nIGRhdGFzZXRzXG4gIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogMCxcbiAgbG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgbG9hZGluZ1Byb2Nlc3Npbmc6IHt9LFxuXG4gIGxvYWRlcnM6IFtdLFxuICBsb2FkT3B0aW9uczoge30sXG5cbiAgLy8gdmlzU3RhdGVNZXJnZXJzXG4gIG1lcmdlcnM6IFZJU19TVEFURV9NRVJHRVJTLFxuXG4gIC8vIGtlcGxlciBzY2hlbWFzXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFcbn07XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19GSVRfQk9VTkRTID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfRklUX0JPVU5EUydcbik7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTidcbik7XG5cbnR5cGUgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZSA9IHtcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllckRhdGE6IGFueVtdO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgd2l0aCB1cGRhdGVkIGxheWVyIGFuZCBsYXllckRhdGFcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGE8UyBleHRlbmRzIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGU+KFxuICBzdGF0ZTogUyxcbiAge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH06IHtsYXllckRhdGE/OiBhbnk7IGxheWVyOiBMYXllcjsgaWR4OiBudW1iZXJ9XG4pOiBTIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAoKGx5ciwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyIDogbHlyKSksXG4gICAgbGF5ZXJEYXRhOiBsYXllckRhdGFcbiAgICAgID8gc3RhdGUubGF5ZXJEYXRhLm1hcCgoZCwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyRGF0YSA6IGQpKVxuICAgICAgOiBzdGF0ZS5sYXllckRhdGFcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2U8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgbGF5ZXI6IExheWVyKTogUyB7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgPyBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgICAgIDogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIG9iamVjdHMgKG9yIGFycmF5cykgYW5kIHJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggb25seSB0aGVcbiAqIHByb3BlcnRpZXMgdGhhdCBoYXZlIGNoYW5nZWQgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIHBpY2tDaGFuZ2VkUHJvcHM8VD4ocHJldjogVCwgbmV4dDogVCk6IFBhcnRpYWw8VD4ge1xuICBjb25zdCBjaGFuZ2VkUHJvcHM6IFBhcnRpYWw8VD4gPSB7fTtcbiAgY29uc3QgcGlja1Byb3BzT2YgPSBvYmogPT4ge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZWRQcm9wcywga2V5KSAmJlxuICAgICAgICAhaXNFcXVhbChwcmV2W2tleV0sIG5leHRba2V5XSlcbiAgICAgICkge1xuICAgICAgICBjaGFuZ2VkUHJvcHNba2V5XSA9IG5leHRba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcGlja1Byb3BzT2YocHJldik7XG4gIHBpY2tQcm9wc09mKG5leHQpO1xuICByZXR1cm4gY2hhbmdlZFByb3BzO1xufVxuXG5jb25zdCBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTID0gWydmaWVsZCcsICdzY2FsZScsICdkb21haW4nLCAnYWdncmVnYXRpb24nXTtcblxuLyoqXG4gKiBBcHBseSBsYXllciBjb25maWdcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHksIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlMYXllckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVySWQsIG5ld0xheWVyQ29uZmlnLCBsYXllckluZGV4fSA9IGFjdGlvbjtcbiAgLy8gU2F2ZWQgY29uZmlncyBoYXZlIGEgdmlzdWFsQ2hhbm5lbHMgc2libGluZzsgcGFyc2VkL2VkaXRvciBKU09OIGZvbGRzIHRob3NlXG4gIC8vIGZpZWxkcyBpbnRvIGNvbmZpZy4gUmUtcGFyc2luZyB0aGUgbGF0dGVyIGRyb3BzIGNvbG9yRmllbGQgYW5kIHJlc2V0cyB0aGUgc2NhbGUuXG4gIGNvbnN0IHNhdmVkTGF5ZXJDb25maWcgPSBpc1NhdmVkTGF5ZXJDb25maWdWMShuZXdMYXllckNvbmZpZyk7XG4gIGNvbnN0IG5ld1BhcnNlZExheWVyID0gc2F2ZWRMYXllckNvbmZpZ1xuICAgID8gcGFyc2VMYXllckNvbmZpZyhzdGF0ZS5zY2hlbWEsIG5ld0xheWVyQ29uZmlnKVxuICAgIDogbmV3TGF5ZXJDb25maWc7XG4gIGNvbnN0IG9sZExheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgaWYgKCFvbGRMYXllciB8fCAhbmV3UGFyc2VkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVySW5kZXggIT09IG51bGwgJiYgbGF5ZXJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmxheWVyc1tsYXllckluZGV4XSAhPT0gb2xkTGF5ZXIpIHtcbiAgICAvLyBsYXllckluZGV4IGlzIHByb3ZpZGVkLCBidXQgaXQgZG9lc24ndCBtYXRjaCB0aGUgb2xkTGF5ZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW25ld1BhcnNlZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyB2YWxpZCBhbmQgY29udmVydCBpdCB0byBMYXllclxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBuZXdQYXJzZWRMYXllciwgc3RhdGUubGF5ZXJDbGFzc2VzLCB7XG4gICAga2VlcFVubGFiZWxlZEFnZ3JlZ2F0aW9uVGV4dExhYmVsOiBzYXZlZExheWVyQ29uZmlnXG4gIH0pO1xuICBpZiAoIW5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChuZXdMYXllci50eXBlICYmIG5ld0xheWVyLnR5cGUgIT09IG9sZExheWVyLnR5cGUpIHtcbiAgICBjb25zdCBvbGRMYXllckluZGV4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICAgIGlmIChvbGRMYXllckluZGV4ID49IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIobmV4dFN0YXRlLCBsYXllclR5cGVDaGFuZ2Uob2xkTGF5ZXIsIG5ld0xheWVyLnR5cGUpKTtcbiAgICAgIC8vIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIgY2hhbmdlcyB0aGUgaWQgb2YgdGhlIGxheWVyLCBzbyB3ZSBuZWVkIHRvIG9idGFpbiB0aGUgbmV3IGlkXG4gICAgICAvLyBidXQgZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIGxheWVyIHdhcyBub3QgcmVtb3ZlZFxuICAgICAgaWYgKG5leHRTdGF0ZS5sYXllcnMubGVuZ3RoID09PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVySWQgPSBuZXh0U3RhdGUubGF5ZXJzW29sZExheWVySW5kZXhdLmlkO1xuICAgICAgICBuZXh0U3RhdGUgPSBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgYXBwbHlMYXllckNvbmZpZyhuZXdMYXllcklkLCB7Li4ubmV3TGF5ZXJDb25maWcsIGlkOiBuZXdMYXllcklkfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIC8vIHNlcmlhbGl6ZUxheWVyKCkgbWlnaHQgcmV0dXJuIG51bGwgaWYgdGhlIG9sZCBsYXllciBpcyBub3QgdmFsaWQsXG4gIC8vIHdlIHNob3VsZCBzdGlsbCBhcHBseSB0aGUgY2hhbmdlcyBpbiB0aGF0IGNhc2VcbiAgY29uc3Qgc2VyaWFsaXplZE9sZExheWVyID0gc2VyaWFsaXplTGF5ZXIob2xkTGF5ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3TGF5ZXIgPSBzZXJpYWxpemVMYXllcihuZXdMYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHNlcmlhbGl6ZWRPbGRMYXllciwgc2VyaWFsaXplZE5ld0xheWVyKSkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRMYXllci5jb25maWcsIHNlcmlhbGl6ZWROZXdMYXllci5jb25maWcpO1xuXG4gICAgaWYgKCd2aXNDb25maWcnIGluIGNoYW5nZWQpIHtcbiAgICAgIGlmIChjaGFuZ2VkLnZpc0NvbmZpZykge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBjaGFuZ2VkLnZpc0NvbmZpZylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjaGFuZ2VkLnZpc0NvbmZpZztcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhvbGRMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsTmFtZSA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbE5hbWVdO1xuICAgICAgY29uc3QgY2hhbm5lbFByb3BOYW1lcyA9IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMubWFwKHByb3AgPT4gY2hhbm5lbFtwcm9wXSk7XG4gICAgICBpZiAoY2hhbm5lbFByb3BOYW1lcy5zb21lKHByb3AgPT4gcHJvcCBpbiBjaGFuZ2VkKSkge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UoXG4gICAgICAgICAgICBvbGRMYXllcixcbiAgICAgICAgICAgIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBjaGFubmVsUHJvcE5hbWVzKSxcbiAgICAgICAgICAgIGNoYW5uZWxOYW1lXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgY2hhbm5lbFByb3BOYW1lcykge1xuICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VkW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoY2hhbmdlZCkubGVuZ3RoID4gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBwaWNrKG5ld0xheWVyLmNvbmZpZywgT2JqZWN0LmtleXMoY2hhbmdlZCkpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVsYXllclZpc2liaWx0eShzdGF0ZTogVmlzU3RhdGUsIG5ld0xheWVyOiBMYXllciwgaXNWaXNpYmxlPzogYm9vbGVhbik6IFZpc1N0YXRlIHtcbiAgbGV0IG5ld1N0YXRlID0gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZShzdGF0ZSwgbmV3TGF5ZXIpO1xuICBjb25zdCBmaWx0ZXJJbmRleCA9IGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZSk7XG4gIGlmIChpc0xheWVyQW5pbWF0YWJsZShuZXdMYXllcikgJiYgZmlsdGVySW5kZXggIT09IC0xKSB7XG4gICAgLy8gaWYgbGF5ZXIgaXMgZ29pbmcgdG8gYmUgdmlzaWJsZSB3ZSBzeW5jIHdpdGggZmlsdGVyIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgb3RoZXIgYW5pbWF0YWJsZSBsYXllcnMgZXhpc3RzIGFuZCBhcmUgdmlzaWJsZVxuICAgIG5ld1N0YXRlID0gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICBlbmFibGU6IGlzVmlzaWJsZSA/IGlzVmlzaWJsZSA6IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycykubGVuZ3RoID4gMFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdDb25maWcpO1xuICBpZiAoXG4gICAgdHlwZW9mIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkID09PSAnc3RyaW5nJyAmJlxuICAgIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkICE9PSBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gICkge1xuICAgIGNvbnN0IHtkYXRhSWQsIC4uLnJlc3RDb25maWd9ID0gYWN0aW9uLm5ld0NvbmZpZztcbiAgICBjb25zdCBzdGF0ZVdpdGhEYXRhSWQgPSBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3Q29uZmlnOiB7ZGF0YUlkfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRMYXllciA9IHN0YXRlV2l0aERhdGFJZC5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgICByZXR1cm4gbmV4dExheWVyICYmIE9iamVjdC5rZXlzKHJlc3RDb25maWcpLmxlbmd0aFxuICAgICAgPyBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGVXaXRoRGF0YUlkLCB7b2xkTGF5ZXI6IG5leHRMYXllciwgbmV3Q29uZmlnOiByZXN0Q29uZmlnfSlcbiAgICAgIDogc3RhdGVXaXRoRGF0YUlkO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoYWN0aW9uLm5ld0NvbmZpZyk7XG5cbiAgbGV0IGxheWVyRGF0YTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuXG4gICAgY29uc3QgdXBkYXRlTGF5ZXJEYXRhUmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICBuZXdMYXllciA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllcjtcbiAgICBsYXllckRhdGEgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXJEYXRhO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmICgnaXNWaXNpYmxlJyBpbiBhY3Rpb24ubmV3Q29uZmlnKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGFjdGlvbi5uZXdDb25maWcuaXNWaXNpYmxlKTtcbiAgfVxuXG4gIGlmICgnY29sdW1ucycgaW4gYWN0aW9uLm5ld0NvbmZpZyAmJiBuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICAvLyBUT0RPOiBTaGFuLCBtYWtlIHRoZSBhbmltYXRpb24gY29uZmlnIGZ1bmN0aW9uIG1vcmUgcm9idXN0XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgIGxheWVyOiBuZXdMYXllcixcbiAgICBsYXllckRhdGEsXG4gICAgaWR4XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGFjdGlvbik6IFMge1xuICBjb25zdCB7b2xkTGF5ZXIsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBhbmltYXRpb246IHtcbiAgICAgIC4uLm9sZExheWVyLmNvbmZpZy5hbmltYXRpb24sXG4gICAgICBbcHJvcF06IHZhbHVlXG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaWR4XSk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWRcbiAqIGhhbmRsZXMgdHdvIGNhc2VzOlxuICogMSkgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGxvY2FsIFNwbGl0TWFwIGxheWVyICh2aXNTdGF0ZS5zcGxpdE1hcC5sYXllcnMpXG4gKiAyKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgZ2xvYmFsIGxheWVyICh2aXNTdGF0ZS5sYXllcnMpXG5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChkID0+IGQuaWQgPT09IGxheWVySWQpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAoc3BsaXRNYXBJZCkge1xuICAgIC8vIFtjYXNlIDFdOiB0b2dnbGUgbG9jYWwgbGF5ZXIgdmlzaWJpbGl0eSBmb3IgZWFjaCBTcGxpdE1hcFxuICAgIGNvbnN0IG1hcEluZGV4ID0gbmV3U3RhdGUuc3BsaXRNYXBzLmZpbmRJbmRleChzbSA9PiBzbS5pZCA9PT0gc3BsaXRNYXBJZCk7XG4gICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgLy8gMSkgaWYgdGhlIGxheWVyIGlzIGludmlzaWJsZSBnbG9iYWxseVxuICAgICAgLy8gLT4gc2V0IGdsb2JhbCB2aXNpYmlsaXR5IHRvIHRydWVcbiAgICAgIG5ld1N0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKG5ld1N0YXRlLCBsYXllckNvbmZpZ0NoYW5nZShsYXllciwge2lzVmlzaWJsZTogdHJ1ZX0pKTtcblxuICAgICAgLy8gLT4gc2V0IGxvY2FsIHZpc2liaWxpdHkgdG8gdHJ1ZSBhbmQgdGhlIGxvY2FsIHZpc2liaWxpdGllcyBvZiBhbGwgb3RoZXIgU3BsaXRNYXBzIHRvIGZhbHNlXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNtID0+XG4gICAgICAgICAgc20uaWQgIT09IHNwbGl0TWFwSWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gMikgZWxzZSB3aGVuIHRoZSBsYXllciBpcyB2aXNpYmxlIGdsb2JhbGx5XG4gICAgcmV0dXJuIHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlcihuZXdTdGF0ZSwgdG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBbY2FzZSAyXTogdG9nZ2xlIGdsb2JhbCBsYXllciB2aXNpYmlsaXR5XG4gICAgY29uc3QgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7aXNWaXNpYmxlfSk7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuXG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGlzVmlzaWJsZSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgICAgaWR4XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBpbmRleCBvZiB0aGUgZmlsdGVyIHN5bmNlZCB0byB0aW1lbGluZSBvciAtMVxuICovXG5mdW5jdGlvbiBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGU6IFZpc1N0YXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyBpc1ZhbGlkIGZsYWcgb2YgYSBsYXllci5cbiAqIFVwZGF0ZXMgaXNWaXNpYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBpc1ZhbGlkLlxuICogVHJpZ2dlcnMgdXBkYXRlIG9mIGRhdGEgZm9yIHRoZSBsYXllciBpbiBvcmRlciB0byBnZXQgZXJyb3JzIGFnYWluIGR1cmluZyBuZXh0IHVwZGF0ZSBpdGVyYXRpb24uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclNldElzVmFsaWRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyU2V0SXNWYWxpZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpc1ZhbGlkfSA9IGFjdGlvbjtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBsYXllclRvVXBkYXRlID0gc3RhdGUubGF5ZXJzW2lkeF07XG4gIGlmIChsYXllclRvVXBkYXRlKSB7XG4gICAgbGV0IG5ld0xheWVyO1xuICAgIGxldCBuZXdEYXRhID0gbnVsbDtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBUcmlnZ2VyIGRhdGEgdXBkYXRlIGluIG9yZGVyIHRvIHNob3cgZXJyb3JzIGFnYWluIGlmIHByZXNlbnQuXG4gICAgICBjb25zdCB7bGF5ZXIsIGxheWVyRGF0YX0gPSBjYWxjdWxhdGVMYXllckRhdGEobGF5ZXJUb1VwZGF0ZSwgc3RhdGUsIHVuZGVmaW5lZCk7XG4gICAgICBuZXdMYXllciA9IGxheWVyO1xuICAgICAgbmV3RGF0YSA9IGxheWVyRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSBsYXllclRvVXBkYXRlLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBuZXdMYXllci5pc1ZhbGlkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2lkeCwgbGF5ZXI6IG5ld0xheWVyLCBsYXllckRhdGE6IG5ld0RhdGF9KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKG5ld0ZpZWxkcywgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsID0gREVGQVVMVF9URVhUX0xBQkVMKSB7XG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBjb25zdCBjdXJyZW50RmllbGRzID0gdGV4dExhYmVsLm1hcCh0bCA9PiB0bC5maWVsZCAmJiB0bC5maWVsZC5uYW1lKS5maWx0ZXIoZCA9PiBkKTtcblxuICBjb25zdCBhZGRGaWVsZHMgPSBuZXdGaWVsZHMuZmlsdGVyKFxuICAgIChmaWVsZCwgaW5kZXgpID0+XG4gICAgICBmaWVsZCAmJlxuICAgICAgZmllbGQubmFtZSAmJlxuICAgICAgIWN1cnJlbnRGaWVsZHMuaW5jbHVkZXMoZmllbGQubmFtZSkgJiZcbiAgICAgIG5ld0ZpZWxkcy5maW5kSW5kZXgob3RoZXIgPT4gb3RoZXIgJiYgb3RoZXIubmFtZSA9PT0gZmllbGQubmFtZSkgPT09IGluZGV4XG4gICk7XG4gIGNvbnN0IGRlbGV0ZUZpZWxkcyA9IGN1cnJlbnRGaWVsZHMuZmlsdGVyKGYgPT4gIW5ld0ZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGYpKTtcblxuICAvLyBkZWxldGVcbiAgbmV3VGV4dExhYmVsID0gbmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCAmJiAhZGVsZXRlRmllbGRzLmluY2x1ZGVzKHRsLmZpZWxkLm5hbWUpKTtcbiAgLy8gQWdncmVnYXRpb24gZGVmYXVsdHMgYWxyZWFkeSBuYW1lIFBvaW50IENvdW50LiBVc2luZyB0aGF0IG9iamVjdCBhcyB0aGVcbiAgLy8gZW1wdHkgcGxhY2Vob2xkZXIsIHRoZW4gYXBwZW5kaW5nIHRoZSBmaWVsZCBqdXN0IHBpY2tlZCwgaW5zZXJ0cyB0aGUgc2FtZVxuICAvLyBsYWJlbCB0d2ljZS4gZGVjay5nbCB0aGVuIHJlamVjdHMgdGhlIGR1cGxpY2F0ZSBjb2xsaXNpb24gbGF5ZXIgaWRzLlxuICBuZXdUZXh0TGFiZWwgPSAhbmV3VGV4dExhYmVsLmxlbmd0aCA/IFt7Li4uZGVmYXVsdFRleHRMYWJlbCwgZmllbGQ6IG51bGx9XSA6IG5ld1RleHRMYWJlbDtcblxuICAvLyBhZGRcbiAgbmV3VGV4dExhYmVsID0gW1xuICAgIC4uLm5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQpLFxuICAgIC4uLmFkZEZpZWxkcy5tYXAoYWYgPT4gKHtcbiAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICBmaWVsZDogYWYsXG4gICAgICBjb2xsaXNpb25FbmFibGVkOiBCb29sZWFuKFxuICAgICAgICB0ZXh0TGFiZWwuZmluZCh0bCA9PiB0bC5jb2xsaXNpb25FbmFibGVkKT8uY29sbGlzaW9uRW5hYmxlZCA/P1xuICAgICAgICAgIGRlZmF1bHRUZXh0TGFiZWwuY29sbGlzaW9uRW5hYmxlZFxuICAgICAgKVxuICAgIH0pKVxuICBdO1xuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCB0ZXh0TGFiZWwpIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGV4dExhYmVsW2lkeF0sIHByb3ApKSB7XG4gICAgcmV0dXJuIHRleHRMYWJlbDtcbiAgfVxuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9IGVsc2UgaWYgKHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4gKGkgPT09IGlkeCA/IHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0gOiB0bCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaWR4LCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IHt0ZXh0TGFiZWx9ID0gb2xkTGF5ZXIuY29uZmlnO1xuXG4gIC8vIHdoZW4gYWRkaW5nIGEgbmV3IGVtcHR5IHRleHQgbGFiZWwsXG4gIC8vIHJlbHkgb24gdGhlIGxheWVyJ3MgZGVmYXVsdCBjb25maWcsIG9yIHVzZSB0aGUgY29uc3RhbnQgREVGQVVMVF9URVhUX0xBQkVMXG4gIGNvbnN0IGRlZmF1bHRUZXh0TGFiZWwgPVxuICAgIG9sZExheWVyLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pPy50ZXh0TGFiZWw/LlswXSA/PyBERUZBVUxUX1RFWFRfTEFCRUw7XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuICBpZiAoIXRleHRMYWJlbFtpZHhdICYmIGlkeCA9PT0gdGV4dExhYmVsLmxlbmd0aCkge1xuICAgIC8vIGlmIGlkeCBpcyBzZXQgdG8gbGVuZ3RoLCBhZGQgZW1wdHkgdGV4dCBsYWJlbFxuICAgIG5ld1RleHRMYWJlbCA9IFtcbiAgICAgIC4uLnRleHRMYWJlbCxcbiAgICAgIHtcbiAgICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgICAgLy8gVGhlIHNsb3QgaXMgZW1wdHkgdW50aWwgYSBmaWVsZCBpcyBwaWNrZWQuIEFnZ3JlZ2F0aW9uIGRlZmF1bHRzIGFscmVhZHlcbiAgICAgICAgLy8gY2FycnkgUG9pbnQgQ291bnQsIGFuZCBjb3B5aW5nIHRoYXQgZmllbGQgd291bGQgYWRkIGEgc2Vjb25kIGxhYmVsLlxuICAgICAgICBmaWVsZDogbnVsbCxcbiAgICAgICAgY29sbGlzaW9uRW5hYmxlZDogQm9vbGVhbih0ZXh0TGFiZWxbMF0/LmNvbGxpc2lvbkVuYWJsZWQpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGlmIChpZHggPT09ICdhbGwnICYmIHByb3AgPT09ICdmaWVsZHMnKSB7XG4gICAgbmV3VGV4dExhYmVsID0gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKHZhbHVlLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwpO1xuICB9IGVsc2UgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAodGwgPT4gKHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0pKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgbmV3VGV4dExhYmVsKTtcbiAgfVxuICAvLyB1cGRhdGUgdGV4dCBsYWJlbCBwcm9wIGFuZCB2YWx1ZVxuICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnOiB7dGV4dExhYmVsOiBuZXdUZXh0TGFiZWx9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsYXllckNsYXNzZXMsIGxheWVyLCBzY2hlbWEpIHtcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihsYXllciwgc2NoZW1hKTtcbiAgcmV0dXJuIGxvYWRlZExheWVyXG4gICAgPyB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbG9hZGVkTGF5ZXIsIGxheWVyQ2xhc3Nlcywge1xuICAgICAgICBhbGxvd0VtcHR5Q29sdW1uOiB0cnVlXG4gICAgICB9KVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgY29uZmlnIGRhdGFJZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG9sZExheWVyOiBMYXllcjtcbiAgICBuZXdDb25maWc6IHtcbiAgICAgIGRhdGFJZDogc3RyaW5nO1xuICAgIH07XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWd9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkfSA9IG5ld0NvbmZpZztcblxuICBpZiAoIW9sZExheWVyIHx8ICFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZH0pO1xuXG4gIC8vIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgbGF5ZXIgaXMgbmV3ICh0eXBlOiBudWxsIGFuZCBubyBjb2x1bW5zKSBidXQgaXQncyBub3QgcmVhZHkgdG8gYmUgc2F2ZWRcbiAgaWYgKG5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YUlkXSxcbiAgICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICAgIG5ld0xheWVyLFxuICAgICAgc3RhdGUuc2NoZW1hXG4gICAgKTtcbiAgICAvLyBpZiBjYW50IHZhbGlkYXRlIGl0IHdpdGggZGF0YSBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIGNvbnN0IG9sZExheWVyVHlwZSA9IG9sZExheWVyLnR5cGU7XG4gICAgICBpZiAob2xkTGF5ZXJUeXBlKSB7XG4gICAgICAgIG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tvbGRMYXllclR5cGVdKHtkYXRhSWQsIGlkOiBvbGRMYXllci5pZH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IHZhbGlkYXRlZDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmUgKGUuZy4gbWlzc2luZyBjb2x1bW5zKSwgYnV0IHdlIHN0aWxsIG5lZWQgdG9cbiAgICAvLyByZW1hcCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIG5ldyBkYXRhc2V0IHRvIGF2b2lkIHN0YWxlIGZpZWxkIHJlZmVyZW5jZXNcbiAgICAvLyB0aGF0IHBvaW50IHRvIHJvd3MgYmV5b25kIHRoZSBuZXcgZGF0YXNldCdzIGxlbmd0aFxuICAgIGNvbnN0IG5ld0RhdGFzZXRGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcztcbiAgICBjb25zdCByZW1hcHBlZEZpZWxkczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZDogZmllbGRLZXl9KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RmllbGQgPSBuZXdMYXllci5jb25maWdbZmllbGRLZXldO1xuICAgICAgaWYgKGN1cnJlbnRGaWVsZCkge1xuICAgICAgICBjb25zdCBtYXRjaGVkID0gbmV3RGF0YXNldEZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBjdXJyZW50RmllbGQubmFtZSk7XG4gICAgICAgIHJlbWFwcGVkRmllbGRzW2ZpZWxkS2V5XSA9IG1hdGNoZWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoT2JqZWN0LmtleXMocmVtYXBwZWRGaWVsZHMpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhyZW1hcHBlZEZpZWxkcyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIGZpZWxkIHR5cGUgY29tcGF0aWJpbGl0eSDigJQgY2xlYXJzIGZpZWxkcyB3aG9zZSB0eXBlIGlzIGluY29tcGF0aWJsZVxuICAgIC8vIHdpdGggdGhlIGNoYW5uZWwncyBzdXBwb3J0ZWQgZmllbGQgdHlwZXMgKGUuZy4gc3RyaW5nIGZpZWxkIGZvciBhIG51bWVyaWMgc2NhbGUpXG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2tleX0pID0+IHtcbiAgICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgaXNWaXNpYmxlOiBvbGRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlXG4gIH0pO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgdW5kZWZpbmVkKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbml0aWFsTGF5ZXJDb25maWcobGF5ZXIsIGRhdGFzZXRzLCBsYXllckNsYXNzZXMpOiBMYXllciB7XG4gIGxldCBuZXdMYXllciA9IGxheWVyO1xuICBpZiAoIU9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGgpIHtcbiAgICAvLyBubyBkYXRhIGlzIGxvYWRlZFxuICAgIHJldHVybiBsYXllcjtcbiAgfVxuICBpZiAoIWxheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAvLyBzZXQgbGF5ZXIgZGF0YUlkXG4gICAgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkOiBPYmplY3Qua2V5cyhkYXRhc2V0cylbMF19KTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIC8vIGZpbmQgZGVmYXV0IGxheWVyIHByb3BzXG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgdHlwZW9mIGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgID8gbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBbXSlcbiAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgLy8gYW4gYXJyYXkgb2YgcG9zc2libGUgcHJvcHMsIHVzZSAxc3Qgb25lXG4gIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuXG4gIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbbGF5ZXIudHlwZV0oe1xuICAgICAgLi4ucHJvcHNbMF0sXG4gICAgICBsYWJlbDogbmV3TGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgICAgZGF0YUlkOiBuZXdMYXllci5jb25maWcuZGF0YUlkLFxuICAgICAgaXNDb25maWdBY3RpdmU6IG5ld0xheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICAgIGlzVmlzaWJsZTogbmV3TGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0eXBlb2YgbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nXG4gICAgPyBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICA6IG5ld0xheWVyO1xufVxuLyoqXG4gKiBGaXQgdGhlIG1hcCB3aGVuIHRoZSBsYXllciB0eXBlIGRyb3Bkb3duIGdpdmVzIGFuIGVtcHR5IGxheWVyIGl0cyBmaXJzdFxuICogdHlwZSBhbmQgdGhhdCBsYXllciBhbHJlYWR5IHBvaW50cyBhdCBhIGRhdGFzZXQuIExhdGVyIHR5cGUgY2hhbmdlcyxcbiAqIHByb2dyYW1tYXRpYyBgbGF5ZXJUeXBlQ2hhbmdlYCwgYW5kIHNhdmVkLWNvbmZpZyBhcHBsaWVzIGxlYXZlIHRoZSBjYW1lcmFcbiAqIGFsb25lLiBHYXRlZCBieSBgZW5hYmxlRml0Qm91bmRzT25NYW51YWxMYXllcmAuXG4gKi9cbmZ1bmN0aW9uIG1heWJlRml0TWFudWFsTGF5ZXJCb3VuZHMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBsYXllcjogTGF5ZXIsXG4gIGZpdEJvdW5kcz86IGJvb2xlYW5cbik6IFZpc1N0YXRlIHtcbiAgaWYgKFxuICAgICFmaXRCb3VuZHMgfHxcbiAgICBvbGRMYXllci50eXBlIHx8XG4gICAgIWxheWVyLmNvbmZpZy5kYXRhSWQgfHxcbiAgICAhZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVGaXRCb3VuZHNPbk1hbnVhbExheWVyXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKFtsYXllcl0pO1xuICBpZiAoIWJvdW5kcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGUsXG4gICAgQUNUSU9OX1RBU0tfRklUX0JPVU5EUygpLm1hcCgoKSA9PiBmaXRNYXBCb3VuZHMoYm91bmRzKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VHlwZX0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgb2xkSWQgPSBvbGRMYXllci5pZDtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZElkKTtcblxuICBpZiAoIXN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSkge1xuICAgIENvbnNvbGUuZXJyb3IoYCR7bmV3VHlwZX0gaXMgbm90IGEgdmFsaWQgbGF5ZXIgdHlwZWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKHtcbiAgICAvLyBrZWVwIG9sZCBsYXllciBsYWJsZSBhbmQgaXNDb25maWdBY3RpdmVcbiAgICBsYWJlbDogb2xkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGlzQ29uZmlnQWN0aXZlOiBvbGRMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgZGF0YUlkOiBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gIH0pO1xuXG4gIGlmICghb2xkTGF5ZXIudHlwZSkge1xuICAgIC8vIGlmIHNldHRpbmcgbGF5ZXIgdHlwZSBvbiBhbiBlbXB0eSBsYXllclxuICAgIG5ld0xheWVyID0gc2V0SW5pdGlhbExheWVyQ29uZmlnKG5ld0xheWVyLCBzdGF0ZS5kYXRhc2V0cywgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBnZXQgYSBtaW50IGxheWVyLCB3aXRoIG5ldyBpZCBhbmQgdHlwZVxuICAgIC8vIGJlY2F1c2UgZGVjay5nbCB1c2VzIGlkIHRvIG1hdGNoIGJldHdlZW4gbmV3IGFuZCBvbGQgbGF5ZXIuXG4gICAgLy8gSWYgdHlwZSBoYXMgY2hhbmdlZCBidXQgaWQgaXMgdGhlIHNhbWUsIGl0IHdpbGwgYnJlYWtcblxuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID1cbiAgICAgIHR5cGVvZiBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhzdGF0ZS5kYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXSlcbiAgICAgICAgOiBudWxsO1xuXG4gICAgbmV3TGF5ZXIuYXNzaWduQ29uZmlnVG9MYXllcihcbiAgICAgIG9sZExheWVyLmNvbmZpZyxcbiAgICAgIG9sZExheWVyLnZpc0NvbmZpZ1NldHRpbmdzLFxuICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICBkZWZhdWx0TGF5ZXJQcm9wc1xuICAgICk7XG4gICAgaWYgKCFBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUy5oYXMobmV3VHlwZSkpIHtcbiAgICAgIGNvbnN0IHRleHRMYWJlbCA9IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwuZmlsdGVyKGxhYmVsID0+ICFpc1BvaW50Q291bnRMYWJlbChsYWJlbCkpO1xuICAgICAgaWYgKHRleHRMYWJlbC5sZW5ndGggIT09IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwubGVuZ3RoKSB7XG4gICAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICB0ZXh0TGFiZWw6IHRleHRMYWJlbC5sZW5ndGggPyB0ZXh0TGFiZWwgOiBbey4uLkRFRkFVTFRfVEVYVF9MQUJFTH1dXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIH1cblxuICBjb25zdCB7Y2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvXG4gIH07XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCB8fCBvbGRMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICAvLyB1cGRhdGUgc3BsaXRNYXAgbGF5ZXIgaWRcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNldHRpbmdzID0+IHtcbiAgICAgICAgY29uc3Qge1tvbGRJZF06IG9sZExheWVyTWFwLCAuLi5vdGhlckxheWVyc30gPSBzZXR0aW5ncy5sYXllcnM7XG4gICAgICAgIHJldHVybiBvbGRJZCBpbiBzZXR0aW5ncy5sYXllcnNcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgIC4uLm90aGVyTGF5ZXJzLFxuICAgICAgICAgICAgICAgIFtsYXllci5pZF06IG9sZExheWVyTWFwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHNldHRpbmdzO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgLy8gdXBkYXRlIGxheWVyT3JkZXIgd2l0aCBuZXcgaWRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgb2xkTGF5ZXIuaWQsIG5ld0xheWVyLmlkKVxuICB9O1xuXG4gIHJldHVybiBtYXliZUZpdE1hbnVhbExheWVyQm91bmRzKG5ld1N0YXRlLCBvbGRMYXllciwgbGF5ZXIsIGFjdGlvbi5maXRCb3VuZHMpO1xufVxuXG4vKipcbiAqIEJpbmQgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBkYXRhc2V0IGZpZWxkIG9mIHRoZSBzYW1lIG5hbWUuXG4gKiBgYWRkRGF0YVRvTWFwYCBhbmQgYGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZWAgb2Z0ZW4gcGFzcyBge25hbWUsIHR5cGV9YFxuICogb3IgcHJvY2Vzc29yIGZpZWxkcyB3aG9zZSB2YWx1ZUFjY2Vzc29yIGlzIG5vdCBib3VuZCB0byB0aGUgS2VwbGVyVGFibGUsIHdoaWNoXG4gKiBsZWF2ZXMgc3Ryb2tlQ29sb3JEb21haW4gYXQgYFswLCAxXWAgKGtlcGxlci5nbCAjMzA2MSkuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldChcbiAgbmV3Q29uZmlnOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblsnbmV3Q29uZmlnJ10sXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlIHwgdW5kZWZpbmVkLFxuICB2aXN1YWxDaGFubmVsOiBMYXllclsndmlzdWFsQ2hhbm5lbHMnXVtzdHJpbmddIHwgdW5kZWZpbmVkXG4pIHtcbiAgaWYgKCFkYXRhc2V0IHx8ICF2aXN1YWxDaGFubmVsKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICBjb25zdCBpbmNvbWluZyA9IG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXTtcbiAgaWYgKCFpbmNvbWluZyB8fCB0eXBlb2YgaW5jb21pbmcgIT09ICdvYmplY3QnIHx8ICFpbmNvbWluZy5uYW1lKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICBjb25zdCBmb3VuZCA9IGRhdGFzZXQuZmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gaW5jb21pbmcubmFtZSk7XG4gIGlmICghZm91bmQpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4ubmV3Q29uZmlnLFxuICAgIFt2aXN1YWxDaGFubmVsLmZpZWxkXTogZm91bmRcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdmlzdWFsIGNoYW5uZWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1Zpc0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgY29uc3QgbmV3Q29uZmlnID0gcmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0KFxuICAgIGFjdGlvbi5uZXdDb25maWcsXG4gICAgZGF0YXNldCxcbiAgICBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXVxuICApO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZyk7XG4gIGlmIChuZXdWaXNDb25maWcpIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXNDb25maWcobmV3VmlzQ29uZmlnKTtcblxuICBuZXdMYXllci51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbCk7XG5cbiAgLy8gY2FsbGluZyB1cGRhdGUgYW5pbWF0aW9uIGRvbWFpbiBmaXJzdCB0byBtZXJnZSBhbGwgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHN0YXRlKTtcblxuICBjb25zdCB2aXN1YWxDaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gIGlmICh2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJiBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0pIHtcbiAgICAvLyBpZiBjb2xvciBmaWVsZCBjaGFuZ2VkLCBzZXQgY3VzdG9tQnJlYWtzIHRvIGZhbHNlXG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdXBkYXRlZFN0YXRlID0ge1xuICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgbGF5ZXJzOiB1cGRhdGVkU3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG9sZExheWVyRGF0YSA9IHVwZGF0ZWRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCB1cGRhdGVkU3RhdGUsIG9sZExheWVyRGF0YSk7XG5cbiAgaWYgKFxuICAgIHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmXG4gICAgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWw/LnNjYWxlXSA9PT0gU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCAmJlxuICAgICFuZXdWaXNDb25maWdcbiAgKSB7XG4gICAgLy8gd2hlbiBzd2l0Y2hpbmcgdG8gY3VzdG9tT3JkaW5hbCBzY2FsZSwgY3JlYXRlIGEgY3VzdG9tUGFsZXR0ZSBpbiBjb2xvclVJIHdpdGggdXBkYXRlZCBjb2xvckRvbWFpblxuICAgIGNvbnN0IGN1c3RvbVBhbGV0dGUgPSBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUoe1xuICAgICAgc2NhbGU6IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwsXG4gICAgICBmaWVsZDogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdLFxuICAgICAgb3JkaW5hbERvbWFpbjogbGF5ZXIuY29uZmlnW2xheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdLmRvbWFpbl0sXG4gICAgICByYW5nZTogbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1t2aXN1YWxDaGFubmVsLnJhbmdlXSxcbiAgICAgIGNvbG9yQnJlYWtzOiBudWxsXG4gICAgfSk7XG4gICAgLy8gdXBkYXRlIGNvbG9yUmFuZ2Ugd2l0aCBuZXcgY3VzdG9tUGFsZXR0ZVxuICAgIGxheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBzaG93Q29sb3JDaGFydDogdHJ1ZSxcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiB0cnVlXG4gICAgICB9LFxuICAgICAgY3VzdG9tUGFsZXR0ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEodXBkYXRlZFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGB2aXNDb25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdWaXNDb25maWcpO1xuXG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IHtcbiAgICAuLi5vbGRMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIC4uLmFjdGlvbi5uZXdWaXNDb25maWdcbiAgfTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHt2aXNDb25maWc6IG5ld1Zpc0NvbmZpZ30pO1xuXG4gIC8vIEplbmtzIGJyZWFrcyBkZXBlbmQgb24gdGhlIG51bWJlciBvZiBjb2xvcnMuIFJlY2FsY3VsYXRlIHRoZSBkb21haW4gd2hlblxuICAvLyB0aGUgY29sb3IgcmFuZ2Ugb2YgYSBKZW5rcyBjaGFubmVsIGNoYW5nZXMuXG4gIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW29sZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICBPYmplY3Qua2V5cyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsS2V5ID0+IHtcbiAgICAgICAgY29uc3QgY2hhbm5lbCA9IG5ld0xheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxLZXldO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hhbm5lbD8uc2NhbGUgJiZcbiAgICAgICAgICBuZXdMYXllci5jb25maWdbY2hhbm5lbC5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmplbmtzICYmXG4gICAgICAgICAgY2hhbm5lbC5yYW5nZSAmJlxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhY3Rpb24ubmV3VmlzQ29uZmlnLCBjaGFubmVsLnJhbmdlKVxuICAgICAgICApIHtcbiAgICAgICAgICBuZXdMYXllci51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbEtleSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICAvLyBFeGNsdXNpdmUgYml0bWFwIGVkaXRpbmc6IHdoZW4gZWRpdEJvdW5kcyBpcyB0dXJuZWQgb24gZm9yIG9uZSBiaXRtYXAgbGF5ZXIsXG4gIC8vIHR1cm4gaXQgb2ZmIGZvciBhbGwgb3RoZXIgYml0bWFwIGxheWVyc1xuICBpZiAobmV3TGF5ZXIudHlwZSA9PT0gJ2JpdG1hcCcgJiYgYWN0aW9uLm5ld1Zpc0NvbmZpZy5lZGl0Qm91bmRzID09PSB0cnVlKSB7XG4gICAgbmV4dFN0YXRlID0ge1xuICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgbGF5ZXJzOiBuZXh0U3RhdGUubGF5ZXJzLm1hcCgobCwgaSkgPT4ge1xuICAgICAgICBpZiAoaSAhPT0gaWR4ICYmIGwudHlwZSA9PT0gJ2JpdG1hcCcgJiYgbC5jb25maWcudmlzQ29uZmlnLmVkaXRCb3VuZHMpIHtcbiAgICAgICAgICByZXR1cm4gbC51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICB2aXNDb25maWc6IHsuLi5sLmNvbmZpZy52aXNDb25maWcsIGVkaXRCb3VuZHM6IGZhbHNlfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBuZXh0U3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXh0U3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXI6IG5ld0xheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBSZXNldCBhbmltYXRpb24gY29uZmlnIGN1cnJlbnQgdGltZSB0byBhIHNwZWNpZmllZCB2YWx1ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyID0gPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7dmFsdWV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogUyA9PiB7XG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlO1xuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBjdXJyZW50VGltZVxuICAgIH1cbiAgfTtcbiAgLy8gdXBkYXRlIGFuaW1hdGlvbiBjb25maWcgZm9yIGVhY2ggbGF5ZXJcbiAgcmV0dXJuIHN0YXRlLmxheWVycy5yZWR1Y2UoKGFjY3UsIGwpID0+IHtcbiAgICBpZiAobC5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgJiYgbC50eXBlICE9PSAndHJpcCcpIHtcbiAgICAgIHJldHVybiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIoYWNjdSwge29sZExheWVyOiBsLCBwcm9wOiAnY3VycmVudFRpbWUnLCBjdXJyZW50VGltZX0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdTtcbiAgfSwgbmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCBhY3Rpb24pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvd1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHtpZCwgYW5pbWF0aW9uV2luZG93fTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBpZCk7XG5cbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBwcmV2aW91c1dpbmRvdyA9IChmaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKS5hbmltYXRpb25XaW5kb3c7XG4gIGxldCBuZXh0RmlsdGVyID0gey4uLmZpbHRlciwgYW5pbWF0aW9uV2luZG93fSBhcyBGaWx0ZXI7XG5cbiAgLy8gRW50ZXJpbmcgb3IgbGVhdmluZyBpbnRlcnZhbCBwbGF5YmFjayBzbmFwcyB0aGUgd2luZG93IG9udG8gaGlzdG9ncmFtIGJpbnMuXG4gIGlmIChcbiAgICBmaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJlxuICAgIChwcmV2aW91c1dpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbCB8fCBhbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWwpXG4gICkge1xuICAgIGNvbnN0IGFkanVzdGVkID0gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhcbiAgICAgIHN0YXRlLFxuICAgICAgbmV4dEZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIsXG4gICAgICBnZXRQbG90QmFzZUluZGV4QnlEYXRhSWQoc3RhdGUuZGF0YXNldHMsIG5leHRGaWx0ZXIsIHN0YXRlLmxheWVycylcbiAgICApO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFkanVzdGVkLnZhbHVlKSAmJiBhZGp1c3RlZC52YWx1ZS5ldmVyeSh2ID0+IE51bWJlci5pc0Zpbml0ZSh2KSkpIHtcbiAgICAgIG5leHRGaWx0ZXIgPSBhZGp1c3RlZDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5leHRGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgY29uc3QgbmV3U3luY1RpbWVsaW5lTW9kZSA9IGdldFN5bmNBbmltYXRpb25Nb2RlKG5leHRGaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKTtcblxuICByZXR1cm4gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtpZCwgbW9kZTogbmV3U3luY1RpbWVsaW5lTW9kZX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZmlsdGVySWQsIG5ld0ZpbHRlcn0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBTZXJpYWxpemUgdGhlIGZpbHRlcnMgdG8gb25seSBjb21wYXJlIHRoZSBzYXZlZCBwcm9wZXJ0aWVzXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIob2xkRmlsdGVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0ZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihuZXdGaWx0ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0ZpbHRlciB8fCBpc0VxdWFsKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIGFueSBjaGFuZ2VzIHRvIHRoZSBmaWx0ZXIsIGFwcGx5IHRoZW1cbiAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcik7XG4gIGRlbGV0ZSBjaGFuZ2VkWydpZCddOyAvLyBpZCBzaG91bGQgbm90IGJlIGNoYW5nZWRcblxuICBjb25zdCBmaWx0ZXJJbmRleCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKFxuICAgIHN0YXRlLFxuICAgIHNldEZpbHRlcihmaWx0ZXJJbmRleCwgT2JqZWN0LmtleXMoY2hhbmdlZCksIE9iamVjdC52YWx1ZXMoY2hhbmdlZCkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZpbHRlclBsb3RzQWZ0ZXJGaWx0ZXJpbmc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFmZmVjdGVkRGF0YXNldElkczogc3RyaW5nW10sXG4gIHVwZGF0ZWRGaWx0ZXJJbmRleD86IG51bWJlclxuKTogUyB7XG4gIGNvbnN0IGZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzLm1hcCgoZmlsdGVyLCBmaWx0ZXJJbmRleCkgPT4ge1xuICAgIGlmIChmaWx0ZXJJbmRleCA9PT0gdXBkYXRlZEZpbHRlckluZGV4KSB7XG4gICAgICByZXR1cm4gdXBkYXRlRmlsdGVyUGxvdChzdGF0ZS5kYXRhc2V0cywgZmlsdGVyLCB1bmRlZmluZWQsIHN0YXRlLmxheWVycyk7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cblxuICAgIGNvbnN0IHNoYXJlZERhdGFzZXRJZHMgPSBmaWx0ZXIuZGF0YUlkLmZpbHRlcihkYXRhSWQgPT4gYWZmZWN0ZWREYXRhc2V0SWRzLmluY2x1ZGVzKGRhdGFJZCkpO1xuICAgIGlmICghc2hhcmVkRGF0YXNldElkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuXG4gICAgY29uc3QgaW52YWxpZGF0ZWRGaWx0ZXIgPSBzaGFyZWREYXRhc2V0SWRzLnJlZHVjZShyZW1vdmVGaWx0ZXJQbG90LCBmaWx0ZXIpO1xuICAgIHJldHVybiB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBpbnZhbGlkYXRlZEZpbHRlciwgdW5kZWZpbmVkLCBzdGF0ZS5sYXllcnMpO1xuICB9KTtcblxuICByZXR1cm4gc2V0KFsnZmlsdGVycyddLCBmaWx0ZXJzLCBzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlclVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCB7aWR4LCB2YWx1ZUluZGV4ID0gMH0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKFxuICAgIEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApICYmXG4gICAgKCFBcnJheS5pc0FycmF5KGFjdGlvbi52YWx1ZSkgfHwgYWN0aW9uLnByb3AubGVuZ3RoICE9PSBhY3Rpb24udmFsdWUubGVuZ3RoKVxuICApIHtcbiAgICBDb25zb2xlLmVycm9yKCdFeHBlY3RpbmcgdmFsdWUgdG8gYmUgYW4gYXJyYXkgb2YgdGhlIHNhbWUgbGVuZ3RoLCBzaW5jZSBwcm9wIGlzIGFuIGFycmF5Jyk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGNvbnZlcnQgcHJvcCBhbmQgdmFsdWUgdG8gYXJyYXlcbiAgY29uc3QgcHJvcHMgPSB0b0FycmF5KGFjdGlvbi5wcm9wKTtcbiAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgPyB0b0FycmF5KGFjdGlvbi52YWx1ZSkgOiBbYWN0aW9uLnZhbHVlXTtcblxuICBsZXQgbmV3RmlsdGVyID0gb2xkRmlsdGVyO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcHJvcCA9IHByb3BzW2ldO1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuICAgIC8vIFdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBwYXNzaW5nIGluIG5hbWUgYXMgYW4gYXJyYXkgaW50byBfdXBkYXRlRmlsdGVyUHJvcCwgc28gd2UgY2FsbCBpdCBtdWx0aXBsZSB0aW1lcyB3aXRoIGVhY2ggbmFtZVxuICAgIC8vIFNlZSB0aGUgY29tbWVudCBpbiB0aGVyZSBhcyB0byB3aGF0IHNob3VsZCBiZSBhZGRyZXNzZWRcbiAgICBsZXQgcmVzO1xuICAgIGlmIChwcm9wID09PSAnbmFtZScgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIHJlcyA9IHZhbHVlLnJlZHVjZSgoYWNjdSwgdikgPT4ge1xuICAgICAgICByZXR1cm4gX3VwZGF0ZUZpbHRlclByb3AoYWNjdSwgbmV3RmlsdGVyLCBwcm9wLCB2LCB2YWx1ZUluZGV4KTtcbiAgICAgIH0sIG5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gX3VwZGF0ZUZpbHRlclByb3AobmV3U3RhdGUsIG5ld0ZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgpO1xuICAgIH1cbiAgICBuZXdGaWx0ZXIgPSByZXMuZmlsdGVyO1xuICAgIG5ld1N0YXRlID0gcmVzLnN0YXRlO1xuICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGRhdGFzZXRJZHNUb0ZpbHRlci5jb25jYXQocmVzLmRhdGFzZXRJZHNUb0ZpbHRlcik7XG4gIH1cblxuICBjb25zdCBlbmxhcmdlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYudmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQpO1xuXG4gIGlmIChlbmxhcmdlZEZpbHRlciAmJiBlbmxhcmdlZEZpbHRlci5pZCAhPT0gbmV3RmlsdGVyLmlkKSB7XG4gICAgLy8gdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGVubGFyZ2VkIGZpbHRlclxuICAgIG5ld0ZpbHRlci52aWV3ID0gRklMVEVSX1ZJRVdfVFlQRVMuc2lkZTtcbiAgfVxuXG4gIC8vIHNhdmUgbmV3IGZpbHRlcnMgdG8gbmV3U3RhdGVcbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgbmV3RmlsdGVyLCBuZXdTdGF0ZSk7XG5cbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgYWZmZWN0ZWREYXRhc2V0SWRzID0gdW5pcShkYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBhZmZlY3RlZERhdGFzZXRJZHMsXG4gICAgbmV3U3RhdGUuZGF0YXNldHMsXG4gICAgbmV3U3RhdGUuZmlsdGVycyxcbiAgICBuZXdTdGF0ZS5sYXllcnNcbiAgKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcblxuICAvLyBVcGRhdGUgcGxvdHMgYWZ0ZXIgZmlsdGVyaW5nIHNvIHRoZXkgdXNlIHRoZSBsYXRlc3QgZmlsdGVyZWQgaW5kZXhlcy5cbiAgLy8gT3RoZXIgdGltZSBmaWx0ZXJzIG5lZWQgdGhlaXIgY2FjaGVkIGJpbnMgaW52YWxpZGF0ZWQgZm9yIHNoYXJlZCBkYXRhc2V0cy5cbiAgbmV3U3RhdGUgPSB1cGRhdGVGaWx0ZXJQbG90c0FmdGVyRmlsdGVyaW5nKG5ld1N0YXRlLCBhZmZlY3RlZERhdGFzZXRJZHMsIGlkeCk7XG5cbiAgLy8gZGF0YUlkIGlzIGFuIGFycmF5XG4gIC8vIHBhc3Mgb25seSB0aGUgZGF0YXNldCB3ZSBuZWVkIHRvIHVwZGF0ZVxuICBuZXdTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YXNldElkc1RvRmlsdGVyLCBuZXdGaWx0ZXIpO1xuXG4gIC8vIElmIHRpbWUgcmFuZ2UgZmlsdGVyIHZhbHVlIHdhcyB1cGRhdGVkLCBhZGp1c3QgYW5pbWF0aW9uIGNvbmZpZ1xuICBpZiAobmV3RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgcHJvcHMuaW5jbHVkZXMoJ3ZhbHVlJykpIHtcbiAgICBuZXdTdGF0ZSA9IGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGFjdGlvbi5pZHgpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIGRhdGFzZXRzKSB7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG4gIGlmIChmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdKSB7XG4gICAgLy8gaWYgZGF0YUlkIGFscmVhZHkgZXhpc3RcbiAgICBuZXdGaWx0ZXIgPSBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpO1xuICB9XG4gIGlmICh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IG5ld0ZpbHRlci5kYXRhSWQuc2xpY2UoKTtcbiAgICBuZXh0VmFsdWVbdmFsdWVJbmRleF0gPSB2YWx1ZTtcbiAgICBuZXdGaWx0ZXIgPSBzZXQoWydkYXRhSWQnXSwgbmV4dFZhbHVlLCBuZXdGaWx0ZXIpO1xuICB9XG4gIHJldHVybiBuZXdGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykge1xuICBjb25zdCBkYXRhSWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuXG4gIGlmIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZUluZGV4ID09PSAwKSB7XG4gICAgLy8gaWYgcmVtb3ZlIHRoZSBvbmx5IGRhdGFJZCwgY3JlYXRlIGFuIGVtcHR5IGZpbHRlciBpbnN0ZWFkO1xuICAgIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtpZDogZmlsdGVyLmlkfSk7XG4gIH1cblxuICBpZiAoZGF0YUlkKSB7XG4gICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFJZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgW1xuICAgICdkYXRhSWQnLFxuICAgICduYW1lJyxcbiAgICAnZmllbGRJZHgnLFxuICAgICdncHVDaGFubmVsJyxcbiAgICAnZW5kTmFtZScsXG4gICAgJ2VuZEZpZWxkSWR4JyxcbiAgICAnZW5kTWFwcGVkVmFsdWUnLFxuICAgICdncHVFbmRDaGFubmVsJ1xuICBdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyW3Byb3BdKSkge1xuICAgICAgY29uc3QgbmV4dFZhbCA9IGZpbHRlcltwcm9wXS5zbGljZSgpO1xuICAgICAgbmV4dFZhbC5zcGxpY2UodmFsdWVJbmRleCwgMSk7XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCBuZXh0VmFsLCBmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG1lcmdlRmllbGREb21haW4gZm9yIHRoZSByZW1haW5pbmcgZmllbGRzXG4gIGNvbnN0IGRvbWFpblN0ZXBzID0gbWVyZ2VGaWx0ZXJEb21haW4oZmlsdGVyLCBkYXRhc2V0cyk7XG5cbiAgY29uc3QgbmV4dEZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgLy8gdmFsdWU6IG5leHRWYWx1ZSxcbiAgICAuLi4oZG9tYWluU3RlcHMgPyB7ZG9tYWluOiBkb21haW5TdGVwcz8uZG9tYWluLCBzdGVwOiBkb21haW5TdGVwcz8uc3RlcH0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBuZXh0VmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKG5leHRGaWx0ZXIudmFsdWUsIG5leHRGaWx0ZXIpO1xuICByZXR1cm4ge1xuICAgIC4uLm5leHRGaWx0ZXIsXG4gICAgdmFsdWU6IG5leHRWYWx1ZVxuICB9O1xufVxuXG4vKiogKlxuICogVXBkYXRlcyBhIHNpbmdsZSBwcm9wZXJ0eSBvZiBhIGZpbHRlclxuICovXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyUHJvcChzdGF0ZSwgZmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCwgZGF0YXNldElkcz8pIHtcbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgc3dpdGNoIChwcm9wKSB7XG4gICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgaWYgd2UgdXBkYXRlIGZpbHRlckRhdGFJZCwgd2UgbmVlZCB0byBjb25zaWRlciB0d28gY2FzZXM6XG4gICAgLy8gMS4gZGF0YUlkIGlzIGVtcHR5OiBjcmVhdGUgYSBkZWZhdWx0IGZpbHRlclxuICAgIC8vIDIuIEFkZCBhIG5ldyBkYXRhc2V0IGlkXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5kYXRhSWQ6IHtcbiAgICAgIGNvbnN0IG9sZERhdGFJZCA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGZpbHRlciA9IF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgc3RhdGUuZGF0YXNldHMpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdW5pcShbLi4ub2xkRGF0YUlkLCAuLi5maWx0ZXIuZGF0YUlkXSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5uYW1lOiB7XG4gICAgICAvLyB3ZSBhcmUgc3VwcG9ydGluZyB0aGUgY3VycmVudCBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBmaWx0ZXIgbmFtZSB3aWxsIG9ubHkgdXBkYXRlIGZpbHRlciBuYW1lIGJ1dCBpdCB3b24ndCBoYXZlIHNpZGUgZWZmZWN0c1xuICAgICAgLy8gd2UgYXJlIGdvbm5hIHVzZSBwYWlyIG9mIGRhdGFzZXRzIGFuZCBmaWVsZElkeCB0byB1cGRhdGUgdGhlIGZpbHRlclxuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXgsXG4gICAgICAgIHttZXJnZURvbWFpbjogZmlsdGVyLmRhdGFJZC5sZW5ndGggPiAxfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZW5kTmFtZToge1xuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4XG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcbiAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICBmaWx0ZXIgPSBmaWx0ZXIuZ3B1XG4gICAgICAgICAgPyBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycylcbiAgICAgICAgICA6IHsuLi5maWx0ZXIsIGdwdUNoYW5uZWw6IHVuZGVmaW5lZCwgZ3B1RW5kQ2hhbm5lbDogdW5kZWZpbmVkfTtcbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG4gICAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXIuZGF0YUlkO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSAnaW52ZXJ0ZWQnOiB7XG4gICAgICBjb25zdCBzdXBwb3J0c0ludmVyc2lvbiA9IGZpbHRlci5kYXRhSWQuZXZlcnkoXG4gICAgICAgIGRhdGFzZXRJZCA9PiAhc3RhdGUuZGF0YXNldHNbZGF0YXNldElkXT8uZGlzYWJsZURhdGFPcGVyYXRpb25cbiAgICAgICk7XG4gICAgICBmaWx0ZXIgPSB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgaW52ZXJ0ZWQ6IHN1cHBvcnRzSW52ZXJzaW9uICYmIEJvb2xlYW4odmFsdWUpXG4gICAgICB9O1xuICAgICAgaWYgKGZpbHRlci5pbnZlcnRlZCkge1xuICAgICAgICAvLyBHUFUgcmFuZ2UgdGVzdHMgY2FuIG9ubHkga2VlcCB2YWx1ZXMgaW5zaWRlIHRoZSB3aW5kb3cuXG4gICAgICAgIGZpbHRlciA9IGRpc2FibGVHcHVJZkludmVydGVkKGZpbHRlcik7XG4gICAgICB9IGVsc2UgaWYgKGZpbHRlclR5cGVVc2VzR3B1KGZpbHRlci50eXBlKSkge1xuICAgICAgICBmaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKFxuICAgICAgICAgIHNldEZpbHRlckdwdU1vZGUoey4uLmZpbHRlciwgZ3B1OiB0cnVlfSwgc3RhdGUuZmlsdGVycyksXG4gICAgICAgICAgc3RhdGUuZmlsdGVyc1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5sYXllcklkOiB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSBvbmx5IGRhdGFzZXRJZC9zIGlmIHdlIGhhdmUgYWRkZWQvcmVtb3ZlZCBsYXllcnNcbiAgICAgIC8vIC0gY2hlY2sgZm9yIGxheWVySWQgY2hhbmdlcyAoWE9SIHdvcmtzIGJlY2F1c2Ugb2Ygc3RyaW5nIHZhbHVlcylcbiAgICAgIC8vIGlmIG5vIGRpZmZlcmVuY2VzIGJldHdlZW4gbGF5ZXJJZHMsIGRvbid0IGRvIGFueSBmaWx0ZXJpbmdcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGxheWVySWREaWZmZXJlbmNlID0geG9yKHZhbHVlLCBmaWx0ZXIubGF5ZXJJZCk7XG5cbiAgICAgIGNvbnN0IGxheWVyRGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgbGF5ZXJJZERpZmZlcmVuY2VcbiAgICAgICAgICAubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgLy8gb25seSBmaWx0ZXIgZGF0YXNldHNJZHNcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGxheWVyRGF0YUlkcztcblxuICAgICAgLy8gVXBkYXRlIG5ld0ZpbHRlciBkYXRhSWRzXG4gICAgICBjb25zdCBuZXdEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICB2YWx1ZVxuICAgICAgICAgID8ubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgZmlsdGVyID0ge1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGxheWVySWQ6IHZhbHVlLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZHNcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgdmFsdWUsIGZpbHRlcik7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB7ZmlsdGVyLCBkYXRhc2V0SWRzLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIHN0YXRlfTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJQbG90VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBuZXdQcm9wfTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclBsb3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUuZmlsdGVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVyc1ske2lkeH1dIGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGZvciAoY29uc3QgcHJvcCBpbiBuZXdQcm9wKSB7XG4gICAgaWYgKHByb3AgPT09ICdwbG90VHlwZScpIHtcbiAgICAgIGxldCBwbG90VHlwZVVwZGF0ZSA9IG5ld1Byb3AucGxvdFR5cGU7XG4gICAgICBpZiAocGxvdFR5cGVVcGRhdGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBsb3RUeXBlVXBkYXRlLCAnZ3JvdXBCeScpKSB7XG4gICAgICAgIHBsb3RUeXBlVXBkYXRlID0ge1xuICAgICAgICAgIC4uLnBsb3RUeXBlVXBkYXRlLFxuICAgICAgICAgIGdyb3VwQnk6IG1lcmdlUGxvdEdyb3VwQnkobmV3RmlsdGVyLnBsb3RUeXBlPy5ncm91cEJ5LCBwbG90VHlwZVVwZGF0ZS5ncm91cEJ5KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHBsb3RUeXBlVXBkYXRlKSkobmV3RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgPT09ICd5QXhpcycpIHtcbiAgICAgIGNvbnN0IGNoYXJ0VHlwZSA9IG5ld1Byb3AueUF4aXMgPyBQTE9UX1RZUEVTLmxpbmVDaGFydCA6IFBMT1RfVFlQRVMuaGlzdG9ncmFtO1xuXG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8oe3R5cGU6IGNoYXJ0VHlwZX0pKShtZXJnZV8obmV3UHJvcCkobmV3RmlsdGVyKSk7XG4gICAgfVxuICB9XG5cbiAgbmV3RmlsdGVyID0gdXBkYXRlRmlsdGVyUGxvdChzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVyLCB1bmRlZmluZWQsIHN0YXRlLmxheWVycyk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGlkeCA/IG5ld0ZpbHRlciA6IGYpKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBkYXRhSWQsIGZpZWxkLCB2YWx1ZX0gPSBhY3Rpb247XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGlkKTtcbiAgbGV0IGZpbHRlckluZGV4ID0gb3JpZ2luYWxJbmRleDtcbiAgaWYgKCFpZCAmJiAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChvcmlnaW5hbEluZGV4IDwgMCAmJiBkYXRhSWQpIHtcbiAgICBuZXdTdGF0ZSA9IGFkZEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWR9KTtcbiAgICBpZiAobmV3U3RhdGUuZmlsdGVycy5sZW5ndGggIT09IHN0YXRlLmZpbHRlcnMubGVuZ3RoICsgMSkge1xuICAgICAgLy8gTm8gbmV3IGZpbHRlciB3YXMgYWRkZWRcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgZmlsdGVyIHdhcyBhZGRlZCBhdCB0aGUgZW5kXG4gICAgZmlsdGVySW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAtIDE7XG4gICAgbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0gPSB7XG4gICAgICAuLi5uZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSxcbiAgICAgIC4uLihpZCA/IHtpZH0gOiBudWxsKVxuICAgIH07XG4gIH1cblxuICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGlzIGlmIGl0J3MgYSBuZXdseSBjcmVhdGVkIGZpbHRlclxuICAvLyBGaXJzdCB3ZSBtYWtlIHN1cmUgYWxsIHRoZSBkYXRhSWRzIHRoYXQgZmllbGRzIHJlZmVyIHRvIGFyZSB1cGRhdGVkXG4gIGlmIChvcmlnaW5hbEluZGV4ID49IDAgJiYgZGF0YUlkKSB7XG4gICAgLy8gSWYgdGhlIGRhdGFJZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBvbmUgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGRhdGFJZCkgPyBkYXRhSWQgOiBbZGF0YUlkXSkucmVkdWNlKChhY2N1LCBkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnZGF0YUlkJyxcbiAgICAgICAgdmFsdWU6IGQsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIGZpZWxkc1xuICBpZiAoZmllbGQpIHtcbiAgICAvLyBJZiB0aGUgZmllbGQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkIDogW2ZpZWxkXSkucmVkdWNlKChhY2N1LCBmLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSB2YWx1ZSBzZXBhcmF0ZWx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJbmRleCwgcHJvcDogJ3ZhbHVlJywgdmFsdWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAnZGF0YUlkJyBpbiBjb25maWcgJiYgJ2FuaW1hdGlvbldpbmRvdycgaW4gY29uZmlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuICBpZiAoaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnKSkge1xuICAgIC8vIEZpbmQgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvblxuICAgIC8vIEFzc3VtaW5nIHRoZXJlJ3Mgb25seSBvbmUgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvbiwgc2VlIHNldEZpbHRlclZpZXdVcGRhdGVyXG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gIWlzU2lkZUZpbHRlcihmKSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3RmlsdGVyID0gey4uLmZpbHRlciwgLi4uY29uZmlnfTtcbiAgICByZXR1cm4gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKHN0YXRlLCBhcHBseUZpbHRlckNvbmZpZyhmaWx0ZXIuaWQsIG5ld0ZpbHRlcikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGlzQW5pbWF0aW5nOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmlzQW5pbWF0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaGlkZUNvbnRyb2w6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaGlkZUNvbnRyb2xcbiAgfVxufSk7XG5cbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7c3BlZWR9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHNwZWVkXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGxhcmdlciB0aW1lIGZpbHRlciBhdCBib3R0b20gZm9yIHRpbWUgcGxheWJhY2sgKGFwcGx5IHRvIHRpbWUgZmlsdGVyIG9ubHkpXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyVmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICBjb25zdCB7dmlldywgaWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qgc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3ID0gdmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+XG4gICAgICBpID09PSBpZHhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlld1xuICAgICAgICAgIH1cbiAgICAgICAgOiBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBmXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGVzIGZpbHRlciBmZWF0dXJlIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2FjdGlvbi5pZHhdO1xuICBjb25zdCBpc1Zpc2libGUgPSBnZXQoZmlsdGVyLCBbJ3ZhbHVlJywgJ3Byb3BlcnRpZXMnLCAnaXNWaXNpYmxlJ10pO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ2VuYWJsZWQnLFxuICAgIHZhbHVlOiAhaXNWaXNpYmxlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUsIGZpbHRlci5pZCwge1xuICAgICAgaXNWaXNpYmxlOiAhaXNWaXNpYmxlXG4gICAgfSlcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWQsIGlkfSA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBjb25zdCBuZXdGaWx0ZXJzID0gW1xuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoMCwgaWR4KSxcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmZpbHRlcnMubGVuZ3RoKVxuICBdO1xuXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKGRhdGFJZCwgc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0VkaXRvciA9XG4gICAgZ2V0RmlsdGVySWRJbkZlYXR1cmUoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZSkgPT09IGlkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGUuZWRpdG9yO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnXSwgbmV3RmlsdGVycywgc3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVGaWx0ZXJQbG90c0FmdGVyRmlsdGVyaW5nKG5ld1N0YXRlLCBkYXRhSWQpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2VkaXRvciddLCBuZXdFZGl0b3IsIG5ld1N0YXRlKTtcblxuICByZXR1cm4gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhSWQsIHVuZGVmaW5lZCk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgbGV0IG5ld0xheWVyO1xuICBsZXQgbmV3TGF5ZXJEYXRhO1xuICBpZiAoYWN0aW9uLmNvbmZpZykge1xuICAgIG5ld0xheWVyID0gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlLCBhY3Rpb24uY29uZmlnKTtcbiAgICBpZiAoIW5ld0xheWVyKSB7XG4gICAgICBDb25zb2xlLndhcm4oXG4gICAgICAgICdGYWlsZWQgdG8gY3JlYXRlIGxheWVyIGZyb20gY29uZmlnLCBpdCB1c3VhbGx5IG1lYW5zIHRoZSBjb25maWcgaXMgbm90IGJlIGluIGNvcnJlY3QgZm9ybWF0JyxcbiAgICAgICAgYWN0aW9uLmNvbmZpZ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlKTtcbiAgICBuZXdMYXllciA9IHJlc3VsdC5sYXllcjtcbiAgICBuZXdMYXllckRhdGEgPSByZXN1bHQubGF5ZXJEYXRhO1xuICB9IGVsc2Uge1xuICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBsYXllciB3aXRoIGEgc3BlY2lmaWMgZGF0YXNldCBvciBhIGRlZmF1bHQgb25lXG4gICAgY29uc3QgZGVmYXVsdERhdGFzZXQgPSBhY3Rpb24uZGF0YXNldElkID8/IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKVswXTtcbiAgICBuZXdMYXllciA9IG5ldyBMYXllcih7XG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGRhdGFJZDogZGVmYXVsdERhdGFzZXRcbiAgICB9KTtcbiAgICBuZXdMYXllckRhdGEgPSB7fTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIG5ld0xheWVyXSxcbiAgICBsYXllckRhdGE6IFsuLi5zdGF0ZS5sYXllckRhdGEsIG5ld0xheWVyRGF0YV0sXG4gICAgLy8gYWRkIG5ldyBsYXllciBhdCB0aGUgdG9wXG4gICAgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkLCAuLi5zdGF0ZS5sYXllck9yZGVyXSxcbiAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcilcbiAgfTtcblxuICBpZiAobmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiByZW1vdmUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVMYXllclVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAvLyBpbnZhbGlkIGluZGV4XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBsYXllciB3aXRoIGludmFsaWQgaWR8aWR4ICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVycywgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG4gIGNvbnN0IGxheWVyVG9SZW1vdmUgPSBsYXllcnNbaWR4XTtcbiAgY29uc3QgaW50ZXJhY3Rpb25Db25maWcgPSBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1xuICAgID8gcmVtb3ZlTGF5ZXJGcm9tWm9vbU9wYWNpdHkoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsIGxheWVyVG9SZW1vdmUuaWQpXG4gICAgOiBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZztcbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBmaWx0ZXJPdXRCeUlkKGxheWVyVG9SZW1vdmUuaWQpKGxheWVycyksXG4gICAgbGF5ZXJEYXRhOiByZW1vdmVFbGVtZW50QXRJbmRleChpZHgpKGxheWVyRGF0YSksXG4gICAgbGF5ZXJPcmRlcjogcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyT3JkZXIsIGxheWVyVG9SZW1vdmUuaWQpLFxuICAgIGNsaWNrZWQ6IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvLFxuICAgIHNwbGl0TWFwczogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXJUb1JlbW92ZSksXG4gICAgLy8gT25seSByZXBsYWNlIGludGVyYWN0aW9uQ29uZmlnIHdoZW4gYSBjb250cm9sbGVyIGFjdHVhbGx5IGxpc3RlZCB0aGlzIGxheWVyLlxuICAgIC8vIFBhcnRpYWwgdGVzdCBzdGF0ZXMgb21pdCBpdCwgYW5kIGFkZGluZyB0aGUga2V5IHdvdWxkIGNoYW5nZSB0aGF0IHNoYXBlLlxuICAgIC4uLihpbnRlcmFjdGlvbkNvbmZpZyAhPT0gc3RhdGUuaW50ZXJhY3Rpb25Db25maWcgPyB7aW50ZXJhY3Rpb25Db25maWd9IDoge30pXG4gICAgLy8gVE9ETzogdXBkYXRlIGZpbHRlcnMsIGNyZWF0ZSBoZWxwZXIgdG8gcmVtb3ZlIGxheWVyIGZvcm0gZmlsdGVyIChyZW1vdmUgbGF5ZXJpZCBhbmQgZGF0YWlkKSBpZiBtYXBwZWRcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKFxuICAgIHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMoXG4gICAgICBuZXdTdGF0ZSxcbiAgICAgIGNoYXJ0ID0+IGlzTGF5ZXJDaGFydENvbmZpZyhjaGFydCkgJiYgY2hhcnQubGF5ZXJJZCA9PT0gbGF5ZXJUb1JlbW92ZS5pZFxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBSZW9yZGVyIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyT3JkZXI6IG9yZGVyXG59KTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TmV3TGF5ZXJHcm91cChhY3Rpb24pO1xuICBsZXQgbmV3TGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICBpZiAoYWN0aW9uLmxheWVyT3JkZXIpIHtcbiAgICBhY3Rpb24ubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyT3JkZXI6IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllckdyb3VwKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBncm91cCBhbmQgYWxsIGxheWVycyB3aXRoaW4gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwVG9SZW1vdmUgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXBUb1JlbW92ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGxheWVySWRzVG9SZW1vdmUgPSBnZXRGbGF0TGF5ZXJPcmRlcihsYXllckdyb3VwVG9SZW1vdmUubGF5ZXJPcmRlcik7XG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgbGF5ZXJJZHNUb1JlbW92ZS5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIG5ld1N0YXRlID0gcmVtb3ZlTGF5ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWQ6IGxheWVySWR9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cFRvUmVtb3ZlKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhIGxheWVyIGdyb3VwIChsYWJlbCwgdmlzaWJpbGl0eSwgbGF5ZXIgbWVtYmVyc2hpcClcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIG9wdGlvbnN9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBpZiAob3B0aW9ucy5sYXllck9yZGVyKSB7XG4gICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5sYXllckdyb3VwLmxheWVyT3JkZXIsIC4uLm5ld1N0YXRlLmxheWVyT3JkZXJdO1xuICAgIG9wdGlvbnMubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwID0ge1xuICAgIC4uLmxheWVyR3JvdXAsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuXG4gIGlmIChuZXdMYXllckdyb3VwLmlzVmlzaWJsZSAhPT0gbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICBjb25zdCBsYXllcklkcyA9IGdldEZsYXRMYXllck9yZGVyKG5ld0xheWVyR3JvdXAubGF5ZXJPcmRlcik7XG4gICAgbmV3U3RhdGUgPSBuZXdTdGF0ZS5sYXllcnMucmVkdWNlKChhY2MsIGxheWVyKSA9PiB7XG4gICAgICBpZiAobGF5ZXJJZHMuaW5jbHVkZXMobGF5ZXIuaWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoYWNjLCB7XG4gICAgICAgICAgb2xkTGF5ZXI6IGxheWVyLFxuICAgICAgICAgIG5ld0NvbmZpZzoge2lzVmlzaWJsZTogbmV3TGF5ZXJHcm91cC5pc1Zpc2libGV9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBuZXdMYXllckdyb3VwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIGxheWVyIHRvIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgaWYgKCFsYXllckdyb3VwIHx8ICFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZChlbnRyeSA9PiBlbnRyeSA9PT0gbGF5ZXJJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZnJvbSBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cE9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0xheWVyR3JvdXBPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFN3YXAgbGF5ZXIgb3JkZXIgZW50cmllcyBiZXR3ZWVuIHJvb3QgYW5kIGdyb3Vwc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCBzd2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge29yaWdpbkxheWVySWQsIGRlc3RpbmF0aW9uTGF5ZXJJZCwgb3JpZ2luTGF5ZXJHcm91cElkLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH0gPSBhY3Rpb247XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3Qgb3JpZ2luSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICApO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQgJiYgb3JpZ2luSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheU1vdmUoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RpbmF0aW9uSW5kZXgpO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGxldCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBuZXdMYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGZhbHNlXG4gICAgICApO1xuICAgICAgbmV3TGF5ZXJPcmRlci5zcGxpY2UoZGVzdGluYXRpb25JbmRleCA9PT0gLTEgPyAwIDogZGVzdGluYXRpb25JbmRleCwgMCwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSBbLi4ubmV3TGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZF07XG4gICAgfVxuICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGlmIChvcmlnaW5MYXllckdyb3VwSWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgICApO1xuICAgICAgICBpZiAoZGVzdEluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvLyBDcm9zcy1ncm91cCBtb3ZlOiByZW1vdmUgZnJvbSBvcmlnaW4sIHRoZW4gYWRkIHRvIGRlc3RpbmF0aW9uXG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBsZXQgbmV3U3RhdGUgPSBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcblxuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgZGVzdGluYXRpb25MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IG9yaWdpbkxheWVySWQpO1xuICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCAhPT0gLTEgJiYgZGVzdEluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIHJldHVybiBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbi8qKlxuICogZHVwbGljYXRlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8ICFzdGF0ZS5sYXllcnNbaWR4XSkge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXIgJHtpZHh9IG5vdCBmb3VuZCBpbiBsYXllck9yZGVyYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWwgPSBsYXllcnNbaWR4XTtcblxuICBjb25zdCBvcmlnaW5hbExheWVyT3JkZXJJZHggPSBnZXRJbmRleEZyb21MYXllckVudHJ5SWQoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuICBsZXQgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH1gO1xuICBsZXQgcG9zdGZpeCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgd2hpbGUgKGxheWVycy5maW5kKGwgPT4gbC5jb25maWcubGFiZWwgPT09IG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9ICR7Kytwb3N0Zml4fWA7XG4gIH1cblxuICAvLyBjb2xsZWN0IGxheWVyIGNvbmZpZyBmcm9tIG9yaWdpbmFsXG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIob3JpZ2luYWwsIHN0YXRlLnNjaGVtYSk7XG5cbiAgLy8gYXNzaWduIG5ldyBpZCBhbmQgbGFiZWwgdG8gY29waWVkIGxheWVyXG4gIGlmICghbG9hZGVkTGF5ZXI/LmNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsb2FkZWRMYXllci5jb25maWcubGFiZWwgPSBuZXdMYWJlbDtcbiAgbG9hZGVkTGF5ZXIuaWQgPSBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gIC8vIGFkZCBsYXllciB0byBzdGF0ZVxuICBsZXQgbmV4dFN0YXRlID0gYWRkTGF5ZXJVcGRhdGVyKHN0YXRlLCB7Y29uZmlnOiBsb2FkZWRMYXllcn0pO1xuICAvLyByZXRyaWV2ZSBuZXdseSBjcmVhdGVkIGxheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gbmV4dFN0YXRlLmxheWVyc1tuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCAtIDFdO1xuXG4gIC8vIENoZWNrIGlmIHRoZSBvcmlnaW5hbCBsYXllciBpcyBpbnNpZGUgYSBncm91cFxuICBjb25zdCBwYXJlbnRHcm91cCA9IGZpbmRQYXJlbnRHcm91cEZvckxheWVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcblxuICBpZiAocGFyZW50R3JvdXApIHtcbiAgICAvLyBMYXllciBpcyBpbnNpZGUgYSBncm91cCAtIHJlbW92ZSB0aGUgcHJlcGVuZGVkIGlkIGZyb20gcm9vdCBhbmQgaW5zZXJ0IGludG8gdGhlIGdyb3VwXG4gICAgY29uc3QgbGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQgPSBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxKTtcbiAgICBjb25zdCBpZHhJbkdyb3VwID0gcGFyZW50R3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZSA9PiBlID09PSBvcmlnaW5hbC5pZCk7XG4gICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlJbnNlcnQocGFyZW50R3JvdXAubGF5ZXJPcmRlciwgaWR4SW5Hcm91cCwgbmV3TGF5ZXIuaWQpO1xuICAgIGNvbnN0IHVwZGF0ZWRHcm91cCA9IHsuLi5wYXJlbnRHcm91cCwgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfTtcbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCwgdXBkYXRlZEdyb3VwKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgYXQgcm9vdCBsZXZlbCAtIHVzZSBvcmlnaW5hbCBpbmRleC1iYXNlZCBpbnNlcnRpb25cbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlJbnNlcnQoXG4gICAgICBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxLCBuZXh0U3RhdGUubGF5ZXJPcmRlci5sZW5ndGgpLFxuICAgICAgb3JpZ2luYWxMYXllck9yZGVySWR4LFxuICAgICAgbmV3TGF5ZXIuaWRcbiAgICApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUpXG4gICkge1xuICAgIENvbnNvbGUud2FybihgQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgJHtMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC5uYW1lfSBlZmZlY3RgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3QgPSBjcmVhdGVFZmZlY3QoYWN0aW9uLmNvbmZpZyk7XG5cbiAgLy8gY29sbGFwc2UgY29uZmlndXJhdG9ycyBmb3Igb3RoZXIgZWZmZWN0c1xuICBzdGF0ZS5lZmZlY3RzLmZvckVhY2goZWZmZWN0ID0+IGVmZmVjdC5zZXRQcm9wcyh7aXNDb25maWdBY3RpdmU6IGZhbHNlfSkpO1xuXG4gIGNvbnN0IGVmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0cywgbmV3RWZmZWN0XTtcbiAgY29uc3QgZWZmZWN0T3JkZXIgPSBmaXhFZmZlY3RPcmRlcihlZmZlY3RzLCBbbmV3RWZmZWN0LmlkLCAuLi5zdGF0ZS5lZmZlY3RPcmRlcl0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiByZW1vdmUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2VmZmVjdHMsIGVmZmVjdE9yZGVyfSA9IHN0YXRlO1xuICBjb25zdCBlZmZlY3RUb1JlbW92ZSA9IGVmZmVjdHNbaWR4XTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGZpeGVkIGluIHRzXG4gICAgZWZmZWN0czogZmlsdGVyT3V0QnlJZChlZmZlY3RUb1JlbW92ZS5pZCkoZWZmZWN0cyksXG4gICAgZWZmZWN0T3JkZXI6IGVmZmVjdE9yZGVyLmZpbHRlcihlZmZlY3RJZCA9PiBlZmZlY3RJZCAhPT0gZWZmZWN0VG9SZW1vdmUuaWQpXG4gIH07XG59O1xuXG4vKipcbiAqIFJlb3JkZXIgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZWZmZWN0T3JkZXI6IGZpeEVmZmVjdE9yZGVyKHN0YXRlLmVmZmVjdHMsIFsuLi5vcmRlcl0pXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHByb3BzfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBlZmZlY3RPcmRlciA9IHN0YXRlLmVmZmVjdE9yZGVyO1xuICBpZiAocHJvcHMuaWQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5pZCAhPT0gaWQpIHtcbiAgICBjb25zdCBpZHgyID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBwcm9wcy5pZCk7XG4gICAgaWYgKGlkeDIgPj0gMCkge1xuICAgICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBleGlzdGluZyBlZmZlY3QgaWQgJHtpZH1gKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBlZmZlY3RPcmRlciA9IGVmZmVjdE9yZGVyLm1hcChlZmZlY3RPcmRlcklkID0+XG4gICAgICBlZmZlY3RPcmRlcklkID09PSBpZCA/IChwcm9wcy5pZCBhcyBzdHJpbmcpIDogZWZmZWN0T3JkZXJJZFxuICAgICk7XG4gIH1cblxuICBjb25zdCBlZmZlY3QgPSBzdGF0ZS5lZmZlY3RzW2lkeF07XG4gIGNvbnN0IG5leHRQYXJhbXMgPSBwcm9wcy5wYXJhbWV0ZXJzO1xuICAvLyBBIHRpbWVzdGFtcC1vbmx5IG5vLW9wIHN0aWxsIHVzZWQgdG8gYWxsb2NhdGUgYSBuZXcgdmlzU3RhdGUgKHNldFByb3BzXG4gIC8vIG11dGF0ZXMgaW4gcGxhY2UpLiBUaGF0IHJldHJpZ2dlcmVkIG5lc3RlZCByZWFjdC1yZWR1eCBjb25uZWN0IHN1YnNjcmliZXJzXG4gIC8vIHdoaWxlIGRyYWdnaW5nIHRoZSBMaWdodCAmIFNoYWRvdyBkYXktdGltZSBzbGlkZXIgdW50aWwgUmVhY3QgdGhyZXdcbiAgLy8gXCJNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZFwiLlxuICBpZiAoXG4gICAgbmV4dFBhcmFtcyAmJlxuICAgIE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGggPT09IDEgJiZcbiAgICBPYmplY3Qua2V5cyhuZXh0UGFyYW1zKS5sZW5ndGggPT09IDEgJiZcbiAgICBuZXh0UGFyYW1zLnRpbWVzdGFtcCAhPSBudWxsICYmXG4gICAgbmV4dFBhcmFtcy50aW1lc3RhbXAgPT09IGVmZmVjdC5wYXJhbWV0ZXJzLnRpbWVzdGFtcFxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHNdO1xuICBuZXdFZmZlY3RzW2lkeF0uc2V0UHJvcHMocHJvcHMpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNMYXllckNoYXJ0Q29uZmlnKGNoYXJ0OiBDaGFydENvbmZpZyk6IGNoYXJ0IGlzIExheWVyQ2hhcnRDb25maWcge1xuICByZXR1cm4gY2hhcnQudHlwZSA9PT0gJ2xheWVyQ2hhcnQnO1xufVxuXG5mdW5jdGlvbiBtZXJnZUNoYXJ0Q29uZmlnKGNoYXJ0OiBDaGFydENvbmZpZywgcHJvcHM6IFBhcnRpYWw8Q2hhcnRDb25maWc+KTogQ2hhcnRDb25maWcge1xuICByZXR1cm4ge1xuICAgIC4uLmNoYXJ0LFxuICAgIC4uLnByb3BzLFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIC4uLmNoYXJ0LmRpc3BsYXksXG4gICAgICAuLi4ocHJvcHMuZGlzcGxheSB8fCB7fSlcbiAgICB9LFxuICAgIGNoYXJ0RGlzcGxheToge1xuICAgICAgLi4uY2hhcnQuY2hhcnREaXNwbGF5LFxuICAgICAgLi4uKChwcm9wcyBhcyBDaGFydENvbmZpZykuY2hhcnREaXNwbGF5IHx8IHt9KVxuICAgIH1cbiAgfSBhcyBDaGFydENvbmZpZztcbn1cblxuZnVuY3Rpb24gYXhpc0ZpZWxkSWZQcmVzZW50PFQgZXh0ZW5kcyB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGw7IHRpdGxlPzogc3RyaW5nIHwgbnVsbH0+KFxuICBheGlzOiBUIHwgdW5kZWZpbmVkLFxuICBmaWVsZE5hbWVzOiBTZXQ8c3RyaW5nPlxuKTogVCB8IHVuZGVmaW5lZCB7XG4gIGlmICghYXhpcz8uZmllbGQ/Lm5hbWUgfHwgZmllbGROYW1lcy5oYXMoYXhpcy5maWVsZC5uYW1lKSkge1xuICAgIHJldHVybiBheGlzO1xuICB9XG4gIHJldHVybiB7Li4uYXhpcywgZmllbGQ6IG51bGwsIHRpdGxlOiBudWxsfTtcbn1cblxuZnVuY3Rpb24gZHJvcE1pc3NpbmdDaGFydEZpZWxkcyhcbiAgY2hhcnQ6IENoYXJ0Q29uZmlnLFxuICBkYXRhc2V0OiB7ZmllbGRzPzoge25hbWU6IHN0cmluZ31bXX0gfCB1bmRlZmluZWRcbik6IENoYXJ0Q29uZmlnIHtcbiAgY29uc3QgZmllbGROYW1lcyA9IG5ldyBTZXQoKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkubWFwKGZpZWxkID0+IGZpZWxkLm5hbWUpKTtcbiAgY29uc3QgbmV4dCA9IGNoYXJ0IGFzIENoYXJ0Q29uZmlnICYge1xuICAgIHhBeGlzPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgICB5QXhpcz86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgYXhpcz86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgZ3JvdXBCeT86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgdmFsdWU/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICB9O1xuICByZXR1cm4gbWVyZ2VDaGFydENvbmZpZyhjaGFydCwge1xuICAgIHhBeGlzOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC54QXhpcywgZmllbGROYW1lcyksXG4gICAgeUF4aXM6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LnlBeGlzLCBmaWVsZE5hbWVzKSxcbiAgICBheGlzOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC5heGlzLCBmaWVsZE5hbWVzKSxcbiAgICBncm91cEJ5OiBheGlzRmllbGRJZlByZXNlbnQobmV4dC5ncm91cEJ5LCBmaWVsZE5hbWVzKSxcbiAgICB2YWx1ZTogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQudmFsdWUsIGZpZWxkTmFtZXMpXG4gIH0gYXMgUGFydGlhbDxDaGFydENvbmZpZz4pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDaGFydHNBbmRGaWx0ZXJzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBzaG91bGRSZW1vdmU6IChjaGFydDogQ2hhcnRDb25maWcpID0+IGJvb2xlYW5cbik6IFQge1xuICBjb25zdCBjaGFydHMgPSBzdGF0ZS5jaGFydHMgfHwgW107XG4gIGNvbnN0IHJlbW92ZWQgPSBjaGFydHMuZmlsdGVyKHNob3VsZFJlbW92ZSk7XG4gIGlmICghcmVtb3ZlZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcmVtb3ZlZElkcyA9IG5ldyBTZXQocmVtb3ZlZC5tYXAoY2hhcnQgPT4gY2hhcnQuaWQpKTtcbiAgY29uc3QgZmlsdGVySWRzID0gbmV3IFNldChcbiAgICByZW1vdmVkLmZsYXRNYXAoY2hhcnQgPT4ge1xuICAgICAgY29uc3QgaWQgPSBjaGFydC5jcm9zc0ZpbHRlcj8uZmlsdGVySWQ7XG4gICAgICByZXR1cm4gaWQgPyBbaWQsIGAke2lkfS14YCwgYCR7aWR9LXlgXSA6IFtdO1xuICAgIH0pXG4gICk7XG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0czogY2hhcnRzLmZpbHRlcihjaGFydCA9PiAhcmVtb3ZlZElkcy5oYXMoY2hhcnQuaWQpKVxuICB9O1xuICBpZiAoZmlsdGVySWRzLnNpemUpIHtcbiAgICBuZXh0U3RhdGUgPSBuZXh0U3RhdGUuZmlsdGVycy5yZWR1Y2VSaWdodCgoYWNjdSwgZmlsdGVyLCBpZHgpID0+IHtcbiAgICAgIHJldHVybiBmaWx0ZXJJZHMuaGFzKGZpbHRlci5pZCkgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKGFjY3UsIHtpZHh9KSA6IGFjY3U7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlIGFzIFQ7XG59XG5cbi8qKlxuICogQWRkIGEgY2hhcnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRDaGFydFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2NoYXJ0fTogVmlzU3RhdGVBY3Rpb25zLkFkZENoYXJ0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIWNoYXJ0Py5pZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoKHN0YXRlLmNoYXJ0cyB8fCBbXSkuc29tZShleGlzdGluZyA9PiBleGlzdGluZy5pZCA9PT0gY2hhcnQuaWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2hhcnRzOiBbXG4gICAgICAuLi4oc3RhdGUuY2hhcnRzIHx8IFtdKS5tYXAoZXhpc3RpbmcgPT4gKHtcbiAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAuLi5leGlzdGluZy5kaXNwbGF5LFxuICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICBpc0pzb25FZGl0b3JBY3RpdmU6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pKSxcbiAgICAgIHtcbiAgICAgICAgLi4uY2hhcnQsXG4gICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAuLi5jaGFydC5kaXNwbGF5LFxuICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBjaGFydC5kaXNwbGF5Py5pc0NvbmZpZ0FjdGl2ZSA/PyBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYSBjaGFydFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUNoYXJ0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHByb3BzfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUNoYXJ0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSAoc3RhdGUuY2hhcnRzIHx8IFtdKS5maW5kSW5kZXgoY2hhcnQgPT4gY2hhcnQuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcHJldiA9IHN0YXRlLmNoYXJ0c1tpZHhdO1xuICBjb25zdCBkYXRhSWRDaGFuZ2VkID0gdHlwZW9mIHByb3BzLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgcHJvcHMuZGF0YUlkICE9PSBwcmV2LmRhdGFJZDtcbiAgY29uc3QgbGF5ZXJJZENoYW5nZWQgPVxuICAgIGlzTGF5ZXJDaGFydENvbmZpZyhwcmV2KSAmJlxuICAgIHR5cGVvZiAocHJvcHMgYXMgTGF5ZXJDaGFydENvbmZpZykubGF5ZXJJZCA9PT0gJ3N0cmluZycgJiZcbiAgICAocHJvcHMgYXMgTGF5ZXJDaGFydENvbmZpZykubGF5ZXJJZCAhPT0gcHJldi5sYXllcklkO1xuICBsZXQgbmV4dCA9IG1lcmdlQ2hhcnRDb25maWcocHJldiwgcHJvcHMpO1xuICBpZiAoZGF0YUlkQ2hhbmdlZCB8fCBsYXllcklkQ2hhbmdlZCkge1xuICAgIGNvbnN0IGRhdGFJZCA9IG5leHQuZGF0YUlkIHx8IHVuZGVmaW5lZDtcbiAgICBuZXh0ID0gZHJvcE1pc3NpbmdDaGFydEZpZWxkcyhuZXh0LCBkYXRhSWQgPyBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIDogdW5kZWZpbmVkKTtcbiAgICBpZiAobmV4dC5jcm9zc0ZpbHRlcj8uZW5hYmxlZCkge1xuICAgICAgbmV4dCA9IG1lcmdlQ2hhcnRDb25maWcobmV4dCwge1xuICAgICAgICBjcm9zc0ZpbHRlcjogey4uLm5leHQuY3Jvc3NGaWx0ZXIsIGVuYWJsZWQ6IGZhbHNlLCB2YWx1ZToge30sIGZpZWxkTmFtZXM6IHt9fVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNoYXJ0cyA9IFsuLi5zdGF0ZS5jaGFydHNdO1xuICBjaGFydHNbaWR4XSA9IG5leHQ7XG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0c1xuICB9O1xuICBjb25zdCBmaWx0ZXJJZCA9IG5leHQuY3Jvc3NGaWx0ZXI/LmZpbHRlcklkIHx8IHByZXYuY3Jvc3NGaWx0ZXI/LmZpbHRlcklkO1xuICBpZiAocHJldi5jcm9zc0ZpbHRlcj8uZW5hYmxlZCAmJiAhbmV4dC5jcm9zc0ZpbHRlcj8uZW5hYmxlZCAmJiBmaWx0ZXJJZCkge1xuICAgIGNvbnN0IG93bmVkRmlsdGVySWRzID0gbmV3IFNldChbZmlsdGVySWQsIGAke2ZpbHRlcklkfS14YCwgYCR7ZmlsdGVySWR9LXlgXSk7XG4gICAgbmV4dFN0YXRlID0gbmV4dFN0YXRlLmZpbHRlcnMucmVkdWNlUmlnaHQoKGFjY3UsIGZpbHRlciwgaWR4KSA9PiB7XG4gICAgICByZXR1cm4gb3duZWRGaWx0ZXJJZHMuaGFzKGZpbHRlci5pZCkgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKGFjY3UsIHtpZHh9KSA6IGFjY3U7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBjaGFydCBhbmQgYW55IGNyb3NzLWZpbHRlciBpdCBvd25zXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlQ2hhcnRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVDaGFydFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMoc3RhdGUsIGNoYXJ0ID0+IGNoYXJ0LmlkID09PSBpZCk7XG5cbi8vIEFOTk9UQVRJT04gVVBEQVRFUlNcblxuZnVuY3Rpb24gbWFrZU5ld0Fubm90YXRpb24oY29uZmlnPzogQW5ub3RhdGlvblByb3BzUGFydGlhbCk6IEFubm90YXRpb24ge1xuICBjb25zdCBraW5kID0gY29uZmlnPy5raW5kID8/IElOSVRJQUxfQU5OT1RBVElPTl9LSU5EO1xuICBjb25zdCBwcm92aWRlZEFuZ2xlID0gTnVtYmVyLmlzRmluaXRlKChjb25maWcgYXMgYW55KT8uYW5nbGUpID8gKGNvbmZpZyBhcyBhbnkpLmFuZ2xlIDogdW5kZWZpbmVkO1xuICBjb25zdCBkZXJpdmVkRnJvbUFuZ2xlID1cbiAgICBwcm92aWRlZEFuZ2xlICE9IG51bGwgPyB0ZXh0UGxhY2VtZW50RnJvbUFuZ2xlKHByb3ZpZGVkQW5nbGUpIDogdW5kZWZpbmVkO1xuICBjb25zdCB0ZXh0U2lkZSA9XG4gICAgY29uZmlnPy50ZXh0U2lkZSA/P1xuICAgIGRlcml2ZWRGcm9tQW5nbGU/LnNpZGUgPz9cbiAgICAoa2luZCA9PT0gQW5ub3RhdGlvbktpbmQuVEVYVCA/IHVuZGVmaW5lZCA6IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUpO1xuICBjb25zdCB0ZXh0VmVydGljYWxQb3NpdGlvbiA9XG4gICAgY29uZmlnPy50ZXh0VmVydGljYWxQb3NpdGlvbiA/P1xuICAgIGRlcml2ZWRGcm9tQW5nbGU/LnZlcnRpY2FsID8/XG4gICAgKGtpbmQgPT09IEFubm90YXRpb25LaW5kLlRFWFQgPyB1bmRlZmluZWQgOiBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTik7XG4gIGNvbnN0IGJhc2UgPSB7XG4gICAgaWQ6IGNvbmZpZz8uaWQgPz8gZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAga2luZCxcbiAgICBpc1Zpc2libGU6IGNvbmZpZz8uaXNWaXNpYmxlID8/IHRydWUsXG4gICAgYXV0b1NpemU6IGNvbmZpZz8uYXV0b1NpemUgPz8gdHJ1ZSxcbiAgICBhdXRvU2l6ZVk6IGNvbmZpZz8uYXV0b1NpemVZID8/IHRydWUsXG4gICAgYW5jaG9yUG9pbnQ6IGNvbmZpZz8uYW5jaG9yUG9pbnQgPz8gKFswLCAwXSBhcyBbbnVtYmVyLCBudW1iZXJdKSxcbiAgICBsYWJlbDogY29uZmlnPy5sYWJlbCA/PyAnTmV3IEFubm90YXRpb24nLFxuICAgIGxpbmVDb2xvcjogY29uZmlnPy5saW5lQ29sb3IgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gICAgbGluZVdpZHRoOiBjb25maWc/LmxpbmVXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgICB0ZXh0V2lkdGg6IGNvbmZpZz8udGV4dFdpZHRoID8/IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRILFxuICAgIHRleHRIZWlnaHQ6IGNvbmZpZz8udGV4dEhlaWdodCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQsXG4gICAgdGV4dFZlcnRpY2FsQWxpZ246IGNvbmZpZz8udGV4dFZlcnRpY2FsQWxpZ24gPz8gKCdib3R0b20nIGFzIGNvbnN0KSxcbiAgICAuLi4odGV4dFNpZGUgPyB7dGV4dFNpZGV9IDoge30pLFxuICAgIC4uLih0ZXh0VmVydGljYWxQb3NpdGlvbiA/IHt0ZXh0VmVydGljYWxQb3NpdGlvbn0gOiB7fSksXG4gICAgbWFwSW5kZXg6IGNvbmZpZz8ubWFwSW5kZXhcbiAgfTtcblxuICBjb25zdCBkZWZhdWx0QW5nbGUgPVxuICAgIHRleHRTaWRlICYmIHRleHRWZXJ0aWNhbFBvc2l0aW9uXG4gICAgICA/IEFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UW2Ake3RleHRTaWRlfS0ke3RleHRWZXJ0aWNhbFBvc2l0aW9ufWBdXG4gICAgICA6IElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRTtcblxuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlBPSU5UOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuUE9JTlQsXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiBwcm92aWRlZEFuZ2xlID8/IGRlZmF1bHRBbmdsZVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkFSUk9XOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQVJST1csXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiBwcm92aWRlZEFuZ2xlID8/IGRlZmF1bHRBbmdsZVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkNJUkNMRTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLkNJUkNMRSxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IHByb3ZpZGVkQW5nbGUgPz8gZGVmYXVsdEFuZ2xlLFxuICAgICAgICByYWRpdXNJbk1ldGVyczogKGNvbmZpZyBhcyBhbnkpPy5yYWRpdXNJbk1ldGVycyA/PyAxMDAwXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuVEVYVDpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuVEVYVFxuICAgICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZCBhIG5ldyBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IG1ha2VOZXdBbm5vdGF0aW9uKGFjdGlvbi5jb25maWcpO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbbmV3QW5ub3RhdGlvbiwgLi4uc3RhdGUuYW5ub3RhdGlvbnNdLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBuZXdBbm5vdGF0aW9uLmlkLFxuICAgIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiB0cnVlXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IHN0YXRlLmFubm90YXRpb25zLmZpbHRlcihhID0+IGEuaWQgIT09IGlkKSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzogcmVtb3ZlTGF5ZXJGcm9tWm9vbU9wYWNpdHkoXG4gICAgICBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIGdldFpvb21PcGFjaXR5QW5ub3RhdGlvblRhcmdldElkKGlkKVxuICAgICksXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IG51bGwgOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDpcbiAgICAgIHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IGZhbHNlIDogc3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHRcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kSW5kZXgoYSA9PiBhLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwcmV2ID0gc3RhdGUuYW5ub3RhdGlvbnNbaWR4XTtcbiAgbGV0IG5leHRBbm5vdGF0aW9uOiBBbm5vdGF0aW9uO1xuXG4gIGlmIChjb25maWcua2luZCAmJiBjb25maWcua2luZCAhPT0gcHJldi5raW5kKSB7XG4gICAgbmV4dEFubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbih7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0QW5ub3RhdGlvbiA9IHsuLi5wcmV2LCAuLi5jb25maWd9IGFzIEFubm90YXRpb247XG4gIH1cblxuICBjb25zdCBuZXdBbm5vdGF0aW9ucyA9IFsuLi5zdGF0ZS5hbm5vdGF0aW9uc107XG4gIG5ld0Fubm90YXRpb25zW2lkeF0gPSBuZXh0QW5ub3RhdGlvbjtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogbmV3QW5ub3RhdGlvbnNcbiAgfTtcbn07XG5cbi8qKlxuICogRHVwbGljYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb3JpZ2luYWwgPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kKGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoIW9yaWdpbmFsKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IGR1cGxpY2F0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdBbm5vdGF0aW9uID0ge1xuICAgIC4uLmNsb25lRGVlcChvcmlnaW5hbCksXG4gICAgaWQ6IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGxhYmVsOiBgQ29weSBvZiAke29yaWdpbmFsLmxhYmVsfWBcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogU2V0IHNlbGVjdGVkIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgaXNFZGl0aW5nVGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBpZCA9PT0gc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgJiZcbiAgICAoaXNFZGl0aW5nVGV4dCA/PyBmYWxzZSkgPT09IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBpZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogaXNFZGl0aW5nVGV4dCA/PyBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IHtkYXRhSWQ6IGRhdGFzZXRLZXl9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG5cbiAgaWYgKCFkYXRhc2V0c1tkYXRhc2V0S2V5XSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIERlcml2ZWQgdGFibGVzIGFyZSBzbmFwc2hvdHM6IGtlZXAgdGhlbSB3aGVuIGEgc291cmNlIGRhdGFzZXQgaXMgZGVsZXRlZC5cbiAgLy8gT25seSBkcm9wIGluLXByb2dyZXNzIGdyb3VwLWJ5IC8gam9pbiBkcmFmdHMgdGhhdCByZWZlcmVuY2VkIHRoaXMgZGF0YXNldC5cbiAgY29uc3QgbmV4dFN0YXRlID0gcmVtb3ZlT3BzRm9yRGF0YXNldHMoc3RhdGUsIFtkYXRhc2V0S2V5XSkgYXMgVDtcbiAgcmV0dXJuIHJlbW92ZVNpbmdsZURhdGFzZXRVcGRhdGVyKG5leHRTdGF0ZSwgZGF0YXNldEtleSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNpbmdsZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFQsIGRhdGFzZXRLZXk6IHN0cmluZyk6IFQge1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGF5ZXJzLFxuICAgIGRhdGFzZXRzOiB7W2RhdGFzZXRLZXldOiBfZGF0YXNldCwgLi4ubmV3RGF0YXNldHN9XG4gIH0gPSBzdGF0ZTtcblxuICBjb25zdCBsYXllcnNUb1JlbW92ZSA9IGxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXRLZXkpLm1hcChsID0+IGwuaWQpO1xuXG4gIGxldCBuZXdTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0c1xuICB9KTtcblxuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBuZXdTdGF0ZS5maWx0ZXJzKSB7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhc2V0S2V5KTtcbiAgICBpZiAodmFsdWVJbmRleCA+PSAwICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgICAgZmlsdGVycy5wdXNoKF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykpO1xuICAgIH0gZWxzZSBpZiAodmFsdWVJbmRleCA8IDApIHtcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBmaWx0ZXJzfTtcblxuICByZXR1cm4gcmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyhcbiAgICByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKG5ld1N0YXRlLCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSksXG4gICAgY2hhcnQgPT4ge1xuICAgICAgaWYgKGNoYXJ0LmRhdGFJZCA9PT0gZGF0YXNldEtleSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0xheWVyQ2hhcnRDb25maWcoY2hhcnQpKSB7XG4gICAgICAgIHJldHVybiBsYXllcnNUb1JlbW92ZS5pbmNsdWRlcyhjaGFydC5sYXllcklkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcoc3RhdGUsIHtkYXRhSWR9KSB7XG4gIGxldCB7aW50ZXJhY3Rpb25Db25maWd9ID0gc3RhdGU7XG4gIGNvbnN0IHt0b29sdGlwfSA9IGludGVyYWN0aW9uQ29uZmlnO1xuICBpZiAodG9vbHRpcCkge1xuICAgIGNvbnN0IHtjb25maWd9ID0gdG9vbHRpcDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3Qge1tkYXRhSWRdOiBmaWVsZHMsIC4uLmZpZWxkc1RvU2hvd30gPSBjb25maWcuZmllbGRzVG9TaG93O1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7Li4udG9vbHRpcCwgY29uZmlnOiB7Li4uY29uZmlnLCBmaWVsZHNUb1Nob3d9fVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gey4uLnN0YXRlLCBpbnRlcmFjdGlvbkNvbmZpZ307XG59XG4vKipcbiAqIHVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllckJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogdXBkYXRlIG92ZXJsYXkgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG92ZXJsYXlCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIERpc3BsYXkgZGF0YXNldCB0YWJsZSBpbiBhIG1vZGFsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0aW5nRGF0YXNldDogYWN0aW9uLmRhdGFJZFxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgY3VzdG9tIGNvbG9yIGZvciBkYXRhc2V0cyBhbmQgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlVGFibGVDb2xvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldENvbG9yVXBkYXRlclxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtjb2xvcjogYWN0aW9uLm5ld0NvbG9yfX0pO1xufTtcblxuLyoqXG4gKiByZXNldCB2aXNTdGF0ZSB0byBpbml0aWFsIFN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVzZXRNYXBDb25maWdVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAuLi5zdGF0ZS5pbml0aWFsU3RhdGUsXG4gIGluaXRpYWxTdGF0ZTogc3RhdGUuaW5pdGlhbFN0YXRlXG59KTtcblxuLyoqXG4gKiBQcm9wYWdhdGUgYHZpc1N0YXRlYCByZWR1Y2VyIHdpdGggYSBuZXcgY29uZmlndXJhdGlvbi4gQ3VycmVudCBjb25maWcgd2lsbCBiZSBvdmVycmlkZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2NvbmZpZyA9IHt9LCBvcHRpb25zID0ge319XG4gIH06IHtcbiAgICB0eXBlPzogdHlwZW9mIEFjdGlvblR5cGVzLlJFQ0VJVkVfTUFQX0NPTkZJRztcbiAgICBwYXlsb2FkOiBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIWNvbmZpZy52aXNTdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtrZWVwRXhpc3RpbmdDb25maWd9ID0gb3B0aW9ucztcblxuICAvLyByZXNldCBjb25maWcgaWYga2VlcEV4aXN0aW5nQ29uZmlnIGlzIGZhbHN5XG4gIGxldCBtZXJnZWRTdGF0ZSA9ICFrZWVwRXhpc3RpbmdDb25maWcgPyByZXNldE1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUpIDogc3RhdGU7XG4gIGZvciAoY29uc3QgbWVyZ2VyIG9mIHN0YXRlLm1lcmdlcnMpIHtcbiAgICBpZiAoaXNWYWxpZE1lcmdlcihtZXJnZXIpICYmIGhhc1Byb3BzVG9NZXJnZShjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wKSkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSBtZXJnZXIubWVyZ2UoXG4gICAgICAgIG1lcmdlZFN0YXRlLFxuICAgICAgICBnZXRQcm9wVmFsdWVUb01lcmdlcihjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wLCBtZXJnZXIudG9NZXJnZVByb3ApLFxuICAgICAgICAvLyBmcm9tQ29uZmlnXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGhvdmVyIGV2ZW50IHdpdGggaG92ZXJlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckhvdmVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVySG92ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaG92ZXJJbmZvOiB7XG4gICAgLy8gZGVjay5nbCBpbmZvIGlzIG11dGFibGVcbiAgICAuLi5hY3Rpb24uaW5mbyxcbiAgICAuLi4oTnVtYmVyLmlzRmluaXRlKGFjdGlvbi5tYXBJbmRleCkgPyB7bWFwSW5kZXg6IGFjdGlvbi5tYXBJbmRleH0gOiB7fSlcbiAgfVxufSk7XG5cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBVcGRhdGUgYGludGVyYWN0aW9uQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5JbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG5cbiAgY29uc3QgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgLi4ue1tjb25maWcuaWRdOiBjb25maWd9XG4gIH07XG5cbiAgLy8gRG9uJ3QgZW5hYmxlIHRvb2x0aXAgYW5kIGJydXNoIGF0IHRoZSBzYW1lIHRpbWVcbiAgLy8gYnV0IGNvb3JkaW5hdGVzIGNhbiBiZSBzaG93biBhdCBhbGwgdGltZVxuICBjb25zdCBjb250cmFkaWN0ID0gWydicnVzaCcsICd0b29sdGlwJ107XG5cbiAgaWYgKFxuICAgIGNvbnRyYWRpY3QuaW5jbHVkZXMoY29uZmlnLmlkKSAmJlxuICAgIGNvbmZpZy5lbmFibGVkICYmXG4gICAgIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2NvbmZpZy5pZF0uZW5hYmxlZFxuICApIHtcbiAgICAvLyBvbmx5IGVuYWJsZSBvbmUgaW50ZXJhY3Rpb24gYXQgYSB0aW1lXG4gICAgY29udHJhZGljdC5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGsgIT09IGNvbmZpZy5pZCkge1xuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZ1trXSA9IHsuLi5pbnRlcmFjdGlvbkNvbmZpZ1trXSwgZW5hYmxlZDogZmFsc2V9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICBpZiAoY29uZmlnLmlkID09PSAnZ2VvY29kZXInICYmICFjb25maWcuZW5hYmxlZCkge1xuICAgIHJldHVybiByZW1vdmVEYXRhc2V0VXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZDogR0VPQ09ERVJfREFUQVNFVF9OQU1FfSk7XG4gIH1cblxuICBpZiAoY29uZmlnLmlkID09PSAnZ2VvY29kZXInKSB7XG4gICAgY29uc3QgZ2VvY29kZXJMYXllciA9IG5ld1N0YXRlLmxheWVycy5maW5kKGxheWVyID0+IGxheWVyLmlkID09PSBHRU9DT0RFUl9MQVlFUl9JRCk7XG4gICAgaWYgKGdlb2NvZGVyTGF5ZXIpIHtcbiAgICAgIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgICAgb2xkTGF5ZXI6IGdlb2NvZGVyTGF5ZXIsXG4gICAgICAgIG5ld0NvbmZpZzoge2NvbG9yOiBjb25maWcuY29uZmlnLmNvbG9yID8/IEdFT0NPREVSX0lDT05fQ09MT1J9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckNsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1vdXNlUG9zOiBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWRcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIHBpbm5lZDogc3RhdGUubW91c2VQb3MucGlubmVkID8gbnVsbCA6IGNsb25lRGVlcChzdGF0ZS5tb3VzZVBvcylcbiAgICAgIH1cbiAgICA6IHN0YXRlLm1vdXNlUG9zLFxuICBjbGlja2VkOiBhY3Rpb24uaW5mbyAmJiBhY3Rpb24uaW5mby5waWNrZWQgPyBhY3Rpb24uaW5mbyA6IG51bGxcbn0pO1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcENsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogbnVsbFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3ZlIGV2ZW50XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbW91c2VNb3ZlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXZ0fTogVmlzU3RhdGVBY3Rpb25zLk9uTW91c2VNb3ZlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoT2JqZWN0LnZhbHVlcyhzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZykuc29tZShjb25maWcgPT4gY29uZmlnLmVuYWJsZWQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbW91c2VQb3M6IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5wb2ludCkgPyB7bW91c2VQb3NpdGlvbjogWy4uLmV2dC5wb2ludF19IDoge30pLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQubG5nTGF0KSA/IHtjb29yZGluYXRlOiBbLi4uZXZ0LmxuZ0xhdF19IDoge30pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgZm9yIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgc3RhdGUuc3BsaXRNYXBzICYmIHN0YXRlLnNwbGl0TWFwcy5sZW5ndGggPT09IDBcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIC8vIG1heWJlIHdlIHNob3VsZCB1c2UgYW4gYXJyYXkgdG8gc3RvcmUgc3RhdGUgZm9yIGEgc2luZ2xlIG1hcCBhcyB3ZWxsXG4gICAgICAgIC8vIGlmIGN1cnJlbnQgbWFwcyBsZW5ndGggaXMgZXF1YWwgdG8gMCBpdCBtZWFucyB0aGF0IHdlIGFyZSBhYm91dCB0byBzcGxpdCB0aGUgdmlld1xuICAgICAgICBzcGxpdE1hcHM6IGNvbXB1dGVTcGxpdE1hcExheWVycyhzdGF0ZS5sYXllcnMsIHtkdXBsaWNhdGU6IGZhbHNlfSlcbiAgICAgIH1cbiAgICA6IGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4KHN0YXRlLCBhY3Rpb24pO1xuXG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgaW4gYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21hcEluZGV4LCBsYXllcklkfTogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7c3BsaXRNYXBzfSA9IHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBzcGxpdE1hcHMubWFwKChzbSwgaSkgPT5cbiAgICAgIGkgPT09IG1hcEluZGV4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLFxuICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXS5sYXllcnMsXG4gICAgICAgICAgICAgIC8vIGlmIGxheWVySWQgbm90IGluIGxheWVycywgc2V0IGl0IHRvIHZpc2libGVcbiAgICAgICAgICAgICAgW2xheWVySWRdOiAhc3BsaXRNYXBzW2ldLmxheWVyc1tsYXllcklkXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzbVxuICAgIClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhPzogUHJvdG9EYXRhc2V0WydkYXRhJ10gfCBudWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGRhdGE/LnJvd3M/Lmxlbmd0aCB8fCBkYXRhPy5jb2xzPy5sZW5ndGggfHwgKGRhdGEgYXMge2Fycm93VGFibGU/OiB1bmtub3dufSk/LmFycm93VGFibGVcbiAgKTtcbn1cblxuZnVuY3Rpb24gbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0OiBQcm90b0RhdGFzZXQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBkYXRhc2V0LmluZm8/LnR5cGUgPT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEICYmXG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSA9PT0gJ3N0cmluZycgJiZcbiAgICAhaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGFzZXQuZGF0YSlcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQoe1xuICBhcmc6IGRhdGFzZXQsXG4gIG9uUHJvZ3Jlc3Ncbn06IHtcbiAgYXJnOiBQcm90b0RhdGFzZXQ7XG4gIG9uUHJvZ3Jlc3M6IChwcm9ncmVzczoge2xvYWRlZDogbnVtYmVyOyB0b3RhbD86IG51bWJlcjsgcGVyY2VudDogbnVtYmVyfSkgPT4gdm9pZDtcbn0pOiBQcm9taXNlPFByb3RvRGF0YXNldD4ge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuICBjb25zdCBsb2FkZWQgPSBhd2FpdCBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoe1xuICAgIHNvdXJjZTogZGF0YXNldC5tZXRhZGF0YT8uc291cmNlIGFzIHN0cmluZyxcbiAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChkYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICBzaXplOiB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc2l6ZSA9PT0gJ251bWJlcicgPyBkYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgYnlwYXNzQ2FjaGU6IGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyhkYXRhc2V0Lm1ldGFkYXRhKSA+IDAsXG4gICAgb25Qcm9ncmVzc1xuICB9KTtcbiAgaWYgKCFsb2FkZWQuZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gZGF0YSBsb2FkZWQgZnJvbSAke2RhdGFzZXQubWV0YWRhdGE/LnNvdXJjZX1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmRhdGFzZXQsXG4gICAgZGF0YTogbG9hZGVkLmRhdGEsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICBldGFnOiBsb2FkZWQuZXRhZyxcbiAgICAgIGxhc3RNb2RpZmllZDogbG9hZGVkLmxhc3RNb2RpZmllZCxcbiAgICAgIC4uLih0eXBlb2YgbG9hZGVkLnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IGxvYWRlZC5zaXplfSA6IHt9KSxcbiAgICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgICByZWZyZXNoU3RhdHVzOiAnaWRsZSdcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyhcbiAgaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQsXG4gICdIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbmNvbnN0IEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoYXN5bmMgKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59LCAnRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLJyk7XG5cbmZ1bmN0aW9uIGdldERhdGFzZXRQcm9ncmVzc0lkKGRhdGFzZXQ6IFByb3RvRGF0YXNldCwgaW5kZXggPSAwKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBkYXRhc2V0LmluZm8/LmlkID09PSAnc3RyaW5nJyAmJiBkYXRhc2V0LmluZm8uaWQpIHtcbiAgICByZXR1cm4gZGF0YXNldC5pbmZvLmlkO1xuICB9XG4gIGlmICh0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlID09PSAnc3RyaW5nJyAmJiBkYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZSkge1xuICAgIHJldHVybiBkYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZTtcbiAgfVxuICByZXR1cm4gYGRhdGFzZXQtJHtpbmRleH1gO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKGRhdGFzZXQ6IFByb3RvRGF0YXNldCwgZGF0YXNldHM6IERhdGFzZXRzKSB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBjcmVhdGVOZXdEYXRhRW50cnkoZGF0YXNldCwgZGF0YXNldHMpO1xuICB9XG4gIGNvbnN0IHByb2dyZXNzSWQgPSBnZXREYXRhc2V0UHJvZ3Jlc3NJZChkYXRhc2V0KTtcbiAgcmV0dXJuIEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKHtcbiAgICBhcmc6IGRhdGFzZXQsXG4gICAgb25Qcm9ncmVzczogcHJvZ3Jlc3MgPT5cbiAgICAgIHNldExvYWRpbmdQcm9ncmVzcyhcbiAgICAgICAgcHJvZ3Jlc3NJZCxcbiAgICAgICAgTWF0aC5yb3VuZCgocHJvZ3Jlc3M/LnBlcmNlbnQgPz8gMCkgKiAxMDApLFxuICAgICAgICBwcm9ncmVzcz8ucGhhc2UgPT09ICdwcm9jZXNzaW5nJyA/ICdwcm9jZXNzaW5nJyA6IHVuZGVmaW5lZFxuICAgICAgKVxuICB9KS5jaGFpbihoeWRyYXRlZCA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeShoeWRyYXRlZCwgZGF0YXNldHMpO1xuICAgIHJldHVybiAoXG4gICAgICB0YXNrIHx8XG4gICAgICBGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0soJ0ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldCBkdWUgdG8gZGF0YSB2ZXJpZmljYXRpb24gZXJyb3JzJylcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJMb2FkaW5nUHJvZ3Jlc3Moc3RhdGU6IFZpc1N0YXRlLCBpZHM/OiBzdHJpbmdbXSk6IFZpc1N0YXRlIHtcbiAgY29uc3QgY3VycmVudCA9IHN0YXRlLmxvYWRpbmdQcm9ncmVzcyB8fCB7fTtcbiAgY29uc3QgcHJvY2Vzc2luZyA9IHN0YXRlLmxvYWRpbmdQcm9jZXNzaW5nIHx8IHt9O1xuICBpZiAoIU9iamVjdC5rZXlzKGN1cnJlbnQpLmxlbmd0aCAmJiAhT2JqZWN0LmtleXMocHJvY2Vzc2luZykubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICgoc3RhdGUubG9hZGluZ0luZGljYXRvclZhbHVlIHx8IDApIDw9IDApIHtcbiAgICByZXR1cm4gey4uLnN0YXRlLCBsb2FkaW5nUHJvZ3Jlc3M6IHt9LCBsb2FkaW5nUHJvY2Vzc2luZzoge319O1xuICB9XG4gIGlmICghaWRzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dCA9IHsuLi5jdXJyZW50fTtcbiAgY29uc3QgbmV4dFByb2Nlc3NpbmcgPSB7Li4ucHJvY2Vzc2luZ307XG4gIGlkcy5mb3JFYWNoKGlkID0+IHtcbiAgICBkZWxldGUgbmV4dFtpZF07XG4gICAgZGVsZXRlIG5leHRQcm9jZXNzaW5nW2lkXTtcbiAgfSk7XG4gIHJldHVybiB7Li4uc3RhdGUsIGxvYWRpbmdQcm9ncmVzczogbmV4dCwgbG9hZGluZ1Byb2Nlc3Npbmc6IG5leHRQcm9jZXNzaW5nfTtcbn1cblxuZnVuY3Rpb24gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldDogRGF0YXNldHNbc3RyaW5nXSwgcGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gIHJldHVybiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge1xuICAgIG1ldGFkYXRhOiB7XG4gICAgICAuLi5kYXRhc2V0Lm1ldGFkYXRhLFxuICAgICAgLi4ucGF0Y2hcbiAgICB9XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlKHtcbiAgYXJnOiBtZXRhZGF0YSxcbiAgb25Qcm9ncmVzc1xufToge1xuICBhcmc6IHtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBmb3JtYXQ/OiBzdHJpbmc7XG4gICAgc2l6ZT86IG51bWJlcjtcbiAgICBldGFnPzogc3RyaW5nO1xuICAgIGxhc3RNb2RpZmllZD86IHN0cmluZztcbiAgfTtcbiAgb25Qcm9ncmVzczogKHByb2dyZXNzOiB7bG9hZGVkOiBudW1iZXI7IHRvdGFsPzogbnVtYmVyOyBwZXJjZW50OiBudW1iZXJ9KSA9PiB2b2lkO1xufSkge1xuICAvLyBGZXRjaCBvbmx5LiBEbyBub3QgbXV0YXRlIHRoZSBSZWR1eCB0YWJsZSBoZXJlOiBwcm9ncmVzcyBldmVudHMgY29weSBpdCwgYW5kXG4gIC8vIHRoZSBzdWNjZXNzIHVwZGF0ZXIgYXBwbGllcyB0aGUgc25hcHNob3QgdG8gd2hhdGV2ZXIgaW5zdGFuY2UgaXMgaW4gdGhlIHN0b3JlLlxuICByZXR1cm4gbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0KHsuLi5tZXRhZGF0YSwgb25Qcm9ncmVzcywgYnlwYXNzQ2FjaGU6IHRydWV9KTtcbn1cblxuY29uc3QgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlV2l0aFByb2dyZXNzKFxuICByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlLFxuICAnUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0snXG4pO1xuXG4vKipcbiAqIFJlLWZldGNoIGFuIGV4dGVybmFsbHkgaG9zdGVkIGRhdGFzZXQgYW5kIHJlcGxhY2UgaXRzIHRhYmxlIGNvbnRlbnRzIGluIHBsYWNlLlxuICogTGF5ZXJzIGFuZCBmaWx0ZXJzIGFyZSBrZXB0IHdoZW4gZmllbGQgbmFtZXMgbWF0Y2guXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoXG4gICAgIWRhdGFzZXQgfHxcbiAgICBkYXRhc2V0LnR5cGUgIT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEIHx8XG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzID09PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RGF0YXNldCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICByZWZyZXNoU3RhdHVzOiAnbG9hZGluZycsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBuZXh0RGF0YXNldFxuICAgICAgfVxuICAgIH0sXG4gICAgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0soe1xuICAgICAgYXJnOiB7XG4gICAgICAgIHNvdXJjZTogbmV4dERhdGFzZXQubWV0YWRhdGEuc291cmNlIGFzIHN0cmluZyxcbiAgICAgICAgZm9ybWF0OiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQobmV4dERhdGFzZXQubWV0YWRhdGEpLFxuICAgICAgICBzaXplOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuc2l6ZSA9PT0gJ251bWJlcicgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplIDogdW5kZWZpbmVkLFxuICAgICAgICBldGFnOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuZXRhZyA9PT0gJ3N0cmluZycgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnIDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6XG4gICAgICAgICAgdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLmxhc3RNb2RpZmllZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIG9uUHJvZ3Jlc3M6IHByb2dyZXNzID0+XG4gICAgICAgIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3MoZGF0YUlkLCBNYXRoLnJvdW5kKChwcm9ncmVzcz8ucGVyY2VudCA/PyAwKSAqIDEwMCkpXG4gICAgfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gcmVmcmVzaERhdGFzZXRTdWNjZXNzKGRhdGFJZCwgcmVzdWx0KSxcbiAgICAgIChlcnJvcjogRXJyb3IpID0+IHJlZnJlc2hEYXRhc2V0RXJyb3IoZGF0YUlkLCBlcnJvcilcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogUmVjb3JkIGRvd25sb2FkIHByb2dyZXNzIGZvciBhbiBpbi1mbGlnaHQgcmVtb3RlIGRhdGFzZXQgcmVmcmVzaC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBwZXJjZW50fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQgfHwgZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFN0YXR1cyAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHRQZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKHBlcmNlbnQpXG4gICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQocGVyY2VudCkpKVxuICAgIDogMDtcbiAgaWYgKGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hQcm9ncmVzcyA9PT0gbmV4dFBlcmNlbnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czoge1xuICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICBbZGF0YUlkXTogcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge3JlZnJlc2hQcm9ncmVzczogbmV4dFBlcmNlbnR9KVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZmllbGROYW1lc0VxdWFsKGN1cnJlbnQ6IHtuYW1lOiBzdHJpbmd9W10sIGluY29taW5nPzoge25hbWU6IHN0cmluZ31bXSB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKCFpbmNvbWluZz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGN1cnJlbnQubGVuZ3RoICE9PSBpbmNvbWluZy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnQuZXZlcnkoKGZpZWxkLCBpKSA9PiBmaWVsZC5uYW1lID09PSBpbmNvbWluZ1tpXS5uYW1lKTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgcmVtb3RlIHNuYXBzaG90IGNoYW5nZXMgY29sdW1uIG5hbWVzLCBvbGQgbGF5ZXIgZmllbGRJZHggLyBmaWx0ZXIgbmFtZXNcbiAqIGNhbiBwb2ludCBhdCB0aGUgd3JvbmcgY29sdW1uLiBSZS1iaW5kIGJ5IG5hbWUgYW5kIGRyb3AgY29uZmlncyB0aGF0IG5vIGxvbmdlciBmaXQuXG4gKi9cbmZ1bmN0aW9uIHJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZShcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBuZXh0TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IGRyb3BwZWRMYXllcnM6IExheWVyW10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgbmV4dExheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVib3VuZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3NlcywgbGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gICAgaWYgKHJlYm91bmQ/LmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgbmV4dExheWVycy5wdXNoKHJlYm91bmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkcm9wcGVkTGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5leHRMYXllck9yZGVyID0gc3RhdGUubGF5ZXJPcmRlcjtcbiAgbGV0IG5leHRTcGxpdE1hcHMgPSBzdGF0ZS5zcGxpdE1hcHM7XG4gIGRyb3BwZWRMYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbmV4dExheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV4dExheWVyT3JkZXIsIGxheWVyLmlkKTtcbiAgICBuZXh0U3BsaXRNYXBzID0gcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKG5leHRTcGxpdE1hcHMsIGxheWVyKTtcbiAgfSk7XG5cbiAgY29uc3QgbmV4dExheWVyRGF0YSA9IG5leHRMYXllcnMubWFwKGxheWVyID0+IHtcbiAgICBjb25zdCBvbGRJZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KG9sZExheWVyID0+IG9sZExheWVyLmlkID09PSBsYXllci5pZCk7XG4gICAgcmV0dXJuIG9sZElkeCA+PSAwID8gc3RhdGUubGF5ZXJEYXRhW29sZElkeF0gOiB7fTtcbiAgfSk7XG5cbiAgY29uc3QgZmlsdGVyc0ZvckRhdGFzZXQgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gdG9BcnJheShmaWx0ZXIuZGF0YUlkKS5pbmNsdWRlcyhkYXRhSWQpKTtcbiAgY29uc3Qgb3RoZXJGaWx0ZXJzID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+ICF0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuXG4gIGNvbnN0IHt2YWxpZGF0ZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhcbiAgICB7Li4uc3RhdGUsIGRhdGFzZXRzLCBsYXllcnM6IG5leHRMYXllcnN9LFxuICAgIGZpbHRlcnNGb3JEYXRhc2V0XG4gICk7XG5cbiAgY29uc3QgbmV4dEZpbHRlcnMgPSBbLi4ub3RoZXJGaWx0ZXJzLCAuLi52YWxpZGF0ZWRdO1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICB1cGRhdGVkRGF0YXNldHMsXG4gICAgbmV4dEZpbHRlcnMsXG4gICAgbmV4dExheWVyc1xuICApO1xuXG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzLFxuICAgIGxheWVyczogbmV4dExheWVycyxcbiAgICBsYXllckRhdGE6IG5leHRMYXllckRhdGEsXG4gICAgbGF5ZXJPcmRlcjogbmV4dExheWVyT3JkZXIsXG4gICAgc3BsaXRNYXBzOiBuZXh0U3BsaXRNYXBzLFxuICAgIGZpbHRlcnM6IG5leHRGaWx0ZXJzXG4gIH07XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIFtkYXRhSWRdLCB1bmRlZmluZWQpO1xuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59XG5cbi8qKlxuICogQXBwbHkgYSBmaW5pc2hlZCByZW1vdGUgcmVmcmVzaDoga2VlcCBsYXllcnMsIHJlLXJ1biBmaWx0ZXJzIGFuZCBsYXllciBkYXRhLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcmVzdWx0fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG1ldGFkYXRhUGF0Y2ggPSB7XG4gICAgcmVmcmVzaFN0YXR1czogJ2lkbGUnLFxuICAgIHJlZnJlc2hFcnJvcjogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkLFxuICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgLy8gQWx3YXlzIHdyaXRlIHZhbGlkYXRvcnMuIEEgMjAwIHRoYXQgb21pdHMgdGhlbSBtdXN0IG5vdCBrZWVwIHRoZSBwcmV2aW91c1xuICAgIC8vIEVUYWcgb3IgYSBsYXRlciAzMDQgY2FuIHNraXAgYSBib2R5IHdlIG5vIGxvbmdlciBoYXZlLlxuICAgIGV0YWc6IHJlc3VsdC5ldGFnLFxuICAgIGxhc3RNb2RpZmllZDogcmVzdWx0Lmxhc3RNb2RpZmllZCxcbiAgICAuLi4odHlwZW9mIHJlc3VsdC5zaXplID09PSAnbnVtYmVyJyA/IHtzaXplOiByZXN1bHQuc2l6ZX0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBzY2hlbWFVbmNoYW5nZWQgPSBmaWVsZE5hbWVzRXF1YWwoZGF0YXNldC5maWVsZHMsIHJlc3VsdC5kYXRhPy5maWVsZHMpO1xuXG4gIC8vIEFwcGx5IHRoZSBzbmFwc2hvdCB0byB0aGUgdGFibGUgY3VycmVudGx5IGluIHRoZSBzdG9yZS4gUHJvZ3Jlc3MgbWF5IGhhdmVcbiAgLy8gY29waWVkIGl0IG9mZiB0aGUgb2JqZWN0IHRoYXQgc3RhcnRlZCB0aGUgZmV0Y2g7IHRoZSB0YXNrIG5ldmVyIG11dGF0ZXMgaXQuXG4gIGlmICghcmVzdWx0Lm5vdE1vZGlmaWVkICYmIHJlc3VsdC5kYXRhKSB7XG4gICAgLy8gS2VwbGVyVGFibGUudXBkYXRlIGlzIGFzeW5jIHNvIER1Y2tEQiBjYW4gYXdhaXQgQXJyb3cgY29udmVyc2lvbi4gVGhlXG4gICAgLy8gQ1NWL0dlb0pTT04gcGF0aCAoYW5kIEtlcGxlclRhYmxlLmltcG9ydERhdGEpIHJ1biBzeW5jaHJvbm91c2x5IGJlZm9yZVxuICAgIC8vIHRoZSBmaXJzdCBhd2FpdCwgc28gdGhlIHN0b3JlIHRhYmxlIGlzIHVwZGF0ZWQgYmVmb3JlIHdlIGNvcHkgaXQgYmVsb3cuXG4gICAgdm9pZCBkYXRhc2V0LnVwZGF0ZShyZXN1bHQuZGF0YSk7XG4gIH1cblxuICBjb25zdCByZWZyZXNoZWQgPSBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCBtZXRhZGF0YVBhdGNoKTtcbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IHJlZnJlc2hlZFxuICB9O1xuXG4gIGlmIChyZXN1bHQubm90TW9kaWZpZWQgfHwgIXJlc3VsdC5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHNcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFzY2hlbWFVbmNoYW5nZWQpIHtcbiAgICByZXR1cm4gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKHN0YXRlLCBkYXRhSWQsIGRhdGFzZXRzKTtcbiAgfVxuXG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuZnVuY3Rpb24gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoc3RhdGU6IFZpc1N0YXRlLCBkYXRhSWQ6IHN0cmluZyk6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgW2RhdGFJZF0sXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUuZmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuZnVuY3Rpb24gaXNEYXRhc2V0Um93TGlzdChcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdXG4pOiByb3dzIGlzIFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocm93cykgfHwgIXJvd3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93cyk7XG4gIH1cbiAgLy8gQSBzaW5nbGUgY29sdW1uLW9yZGVyZWQgcm93IGlzIGFuIGFycmF5IG9mIHByaW1pdGl2ZXM7IGEgbGlzdCBvZiByb3dzIGlzXG4gIC8vIGFuIGFycmF5IG9mIGFycmF5cyBvciBhbiBhcnJheSBvZiBmaWVsZC1uYW1lIHJlY29yZHMuXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHJvd3NbMF0pIHx8IGlzUGxhaW5PYmplY3Qocm93c1swXSk7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXlSb3cocm93OiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdywgZmllbGRzOiBGaWVsZFtdKTogYW55W10gfCBudWxsIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocm93KSkge1xuICAgIHJldHVybiByb3cubGVuZ3RoID09PSBmaWVsZHMubGVuZ3RoID8gcm93IDogbnVsbDtcbiAgfVxuICBpZiAoaXNQbGFpbk9iamVjdChyb3cpKSB7XG4gICAgY29uc3QgcmVjb3JkID0gcm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJldHVybiBmaWVsZHMubWFwKGZpZWxkID0+XG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVjb3JkLCBmaWVsZC5uYW1lKSA/IHJlY29yZFtmaWVsZC5uYW1lXSA6IG51bGxcbiAgICApO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhc2V0Um93cyhcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdLFxuICBmaWVsZHM6IEZpZWxkW11cbik6IGFueVtdW10gfCBudWxsIHtcbiAgaWYgKCFmaWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbGlzdCA9IGlzRGF0YXNldFJvd0xpc3Qocm93cykgPyByb3dzIDogW3Jvd3NdO1xuICBpZiAoIWxpc3QubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZDogYW55W11bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcnJheVJvdyA9IHRvQXJyYXlSb3cobGlzdFtpXSwgZmllbGRzKTtcbiAgICBpZiAoIWFycmF5Um93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbm9ybWFsaXplZC5wdXNoKGFycmF5Um93KTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBBcHBlbmQgb3IgdXBzZXJ0IHJvd3Mgb24gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBkYXRhc2V0LiBLZWVwcyBsYXllcnMgYW5kIHJlLXJ1bnMgZmlsdGVycy5cbiAqIEFycm93L0R1Y2tEQiB0YWJsZXMgd2FybiBhbmQgYXJlIGxlZnQgdW5jaGFuZ2VkIChJTlNFUlQgLyBjb25jYXQgbm90IGltcGxlbWVudGVkKS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb0RhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd3MsIG9wdGlvbnN9OiBWaXNTdGF0ZUFjdGlvbnMuQWRkVG9EYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZURhdGFzZXRSb3dzKHJvd3MsIGRhdGFzZXQuZmllbGRzKTtcbiAgaWYgKCFub3JtYWxpemVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgYXBwbGllZCA9IG9wdGlvbnM/LnVwc2VydEJ5XG4gICAgPyBkYXRhc2V0LnVwc2VydFJvd3Mobm9ybWFsaXplZCwgb3B0aW9ucy51cHNlcnRCeSlcbiAgICA6IGRhdGFzZXQuYXBwZW5kUm93cyhub3JtYWxpemVkKTtcbiAgaWYgKCFhcHBsaWVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIERlbGV0ZSByb3dzIGJ5IGluZGV4IG9yIGJ5IGZpZWxkIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIGluLW1lbW9yeSByb3cgZGF0YXNldC5cbiAqIEtlZXBzIGxheWVycy4gQXJyb3cvRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd0luZGV4ZXMsIGJ5RmllbGR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBpbmRleGVzID0gYnlGaWVsZFxuICAgID8gZGF0YXNldC5maW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMoYnlGaWVsZC5maWVsZCwgdG9BcnJheShieUZpZWxkLnZhbHVlcykpXG4gICAgOiB0b0FycmF5KHJvd0luZGV4ZXMgPz8gW10pO1xuICBpZiAoIWluZGV4ZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghZGF0YXNldC5yZW1vdmVSb3dzKGluZGV4ZXMpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIFJlY29yZCBhIGZhaWxlZCByZW1vdGUgZGF0YXNldCByZWZyZXNoIHdpdGhvdXQgZHJvcHBpbmcgZXhpc3Rpbmcgcm93cy5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBlcnJvcn06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7XG4gICAgICAgIHJlZnJlc2hTdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIHJlZnJlc2hFcnJvcjogZXJyb3I/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSxcbiAgICAgICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgICAgIH0pXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpc0RhdGFVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGRhdGFzZXRzIGNhbiBiZSBhIHNpbmdsZSBkYXRhIGVudHJpZXMgb3IgYW4gYXJyYXkgb2YgbXVsdGlwbGUgZGF0YSBlbnRyaWVzXG4gIGNvbnN0IHtjb25maWcsIG9wdGlvbnN9ID0gYWN0aW9uO1xuXG4gIC8vIGFwcGx5IGNvbmZpZyBpZiBwYXNzZWQgZnJvbSBhY3Rpb25cbiAgLy8gVE9ETzogd2UgZG9uJ3QgaGFuZGxlIGFzeW5jIG1lcmdlcnMgaGVyZSB5ZXRcbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IGNvbmZpZ1xuICAgID8gcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUsIHtcbiAgICAgICAgcGF5bG9hZDoge2NvbmZpZywgb3B0aW9uc31cbiAgICAgIH0pXG4gICAgOiBzdGF0ZTtcblxuICBjb25zdCBkYXRhc2V0cyA9IHRvQXJyYXkoYWN0aW9uLmRhdGFzZXRzKTtcbiAgaWYgKCFkYXRhc2V0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdXBkYXRlZFN0YXRlO1xuICB9XG5cbiAgY29uc3QgcmVhZHlUYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuICBjb25zdCByZW1vdGVUYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuICBjb25zdCBub3RpZmljYXRpb25UYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuICBjb25zdCBoeWRyYXRlUHJvZ3Jlc3M6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuICBkYXRhc2V0cy5mb3JFYWNoKCh7aW5mbyA9IHt9LCAuLi5yZXN0fSwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgY29uc3QgcHJvdG8gPSB7aW5mbywgLi4ucmVzdH07XG4gICAgY29uc3QgcmVtb3RlID0gbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShwcm90byk7XG4gICAgaWYgKHJlbW90ZSkge1xuICAgICAgaHlkcmF0ZVByb2dyZXNzW2dldERhdGFzZXRQcm9ncmVzc0lkKHByb3RvLCBkYXRhc2V0SW5kZXgpXSA9IDA7XG4gICAgfVxuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKHByb3RvLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIChyZW1vdGUgPyByZW1vdGVUYXNrcyA6IHJlYWR5VGFza3MpLnB1c2godGFzayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9yc2AsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1mYWlsZWQtJHtkYXRhc2V0SW5kZXh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICAvLyBQYXJzZWQgZGF0YXNldHMgYXJlIGNvbW1pdHRlZCBvbiB0aGVpciBvd24uIEEgcmVtb3RlIGRvd25sb2FkIGluIHRoZSBzYW1lXG4gIC8vIGFkZCBtdXN0IG5vdCBob2xkIHRoZW0gdW50aWwgdGhlIFVSTCBmaW5pc2hlcy5cbiAgY29uc3QgcHJvZ3Jlc3NJZHMgPSBPYmplY3Qua2V5cyhoeWRyYXRlUHJvZ3Jlc3MpO1xuICBjb25zdCBiYXRjaGVzOiBBcnJheTx7dGFza3M6IFRhc2tEZXNjcmlwdG9yW107IHByb2dyZXNzSWRzOiBzdHJpbmdbXX0+ID0gW107XG4gIGlmIChyZWFkeVRhc2tzLmxlbmd0aCkge1xuICAgIGJhdGNoZXMucHVzaCh7dGFza3M6IHJlYWR5VGFza3MsIHByb2dyZXNzSWRzOiBbXX0pO1xuICB9XG4gIGlmIChyZW1vdGVUYXNrcy5sZW5ndGgpIHtcbiAgICBiYXRjaGVzLnB1c2goe3Rhc2tzOiByZW1vdGVUYXNrcywgcHJvZ3Jlc3NJZHN9KTtcbiAgfVxuXG4gIGlmIChiYXRjaGVzLmxlbmd0aCkge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKFxuICAgICAgdXBkYXRlZFN0YXRlLFxuICAgICAgcGF5bG9hZF8oe2NoYW5nZTogYmF0Y2hlcy5sZW5ndGgsIHR5cGU6ICcnfSlcbiAgICApO1xuICAgIGlmIChwcm9ncmVzc0lkcy5sZW5ndGgpIHtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgICBsb2FkaW5nUHJvZ3Jlc3M6IHtcbiAgICAgICAgICAuLi51cGRhdGVkU3RhdGUubG9hZGluZ1Byb2dyZXNzLFxuICAgICAgICAgIC4uLmh5ZHJhdGVQcm9ncmVzc1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIFtcbiAgICAuLi5iYXRjaGVzLm1hcChiYXRjaCA9PlxuICAgICAgVGFzay5hbGxTZXR0bGVkKGJhdGNoLnRhc2tzKS5tYXAocmVzdWx0cyA9PlxuICAgICAgICBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzcyh7XG4gICAgICAgICAgcmVzdWx0cyxcbiAgICAgICAgICBhZGRUb01hcE9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgcHJvZ3Jlc3NJZHM6IGJhdGNoLnByb2dyZXNzSWRzXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKSxcbiAgICAuLi5ub3RpZmljYXRpb25UYXNrc1xuICBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZD5cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9ucywgcHJvZ3Jlc3NJZHN9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSByZXN1bHRzLnJlZHVjZSgoYWNjdSwgcmVzdWx0LCBpZHgpID0+IHtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXR1cm4gey4uLmFjY3UsIFtkYXRhc2V0LmlkXTogZGF0YXNldH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNob3cgZXJyb3Igbm90aWZpY2F0aW9uIG9uIFVJXG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYERhdGFzZXQgZXJyb3I6IEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldDpcbiAgICAgICAgICAgICAgJHtyZXN1bHQucmVhc29uIHx8IChyZXN1bHQgYXMgYW55KS52YWx1ZX1gLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtY3JlYXRlLWZhaWxlZC0ke2lkeH1gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cbiAgfSwge30gYXMgRGF0YXNldHMpO1xuICAvLyBzYXZlIG5ldyBkYXRhc2V0IGVudHJ5IHRvIHN0YXRlXG4gIGNvbnN0IG1lcmdlZFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZSwgbmV3RGF0YUVudHJpZXMpXG4gIH07XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IGxheWVyTWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gbS53YWl0Rm9yTGF5ZXJEYXRhKTtcbiAgY29uc3QgZGF0YXNldE1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+ICFsYXllck1lcmdlcnMuaW5jbHVkZXMobSkpO1xuXG4gIGNvbnN0IG5ld0RhdGFJZHMgPSBPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcyk7XG4gIGNvbnN0IHBvc3RNZXJnZXJQYXlsb2FkID0ge1xuICAgIG5ld0RhdGFJZHMsXG4gICAgb3B0aW9uczogYWRkVG9NYXBPcHRpb25zLFxuICAgIGxheWVyTWVyZ2Vyc1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZWRTdGF0ZSA9IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIobWVyZ2VkU3RhdGUsIHtcbiAgICBtZXJnZXJzOiBkYXRhc2V0TWVyZ2VycyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgY2xlYXJMb2FkaW5nUHJvZ3Jlc3MoXG4gICAgICBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcih1cGRhdGVkU3RhdGUsIHBheWxvYWRfKHtjaGFuZ2U6IC0xfSkpLFxuICAgICAgcHJvZ3Jlc3NJZHNcbiAgICApLFxuICAgIG5vdGlmaWNhdGlvblRhc2tzXG4gICk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKiBSZWFkcyBgb3B0aW9ucy5sYXllclZpc0NvbmZpZ2AgZnJvbSBhZGQtZGF0YS10by1tYXAgKHNlZSBgQWRkRGF0YVRvTWFwT3B0aW9uc2ApLiAqL1xuZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMoXG4gIG9wdGlvbnM6IFBvc3RNZXJnZXJQYXlsb2FkWydvcHRpb25zJ10gfCB1bmRlZmluZWRcbik6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvcHRpb25zIHx8ICEoJ2xheWVyVmlzQ29uZmlnJyBpbiBvcHRpb25zKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcGF0Y2ggPSAob3B0aW9ucyBhcyB7bGF5ZXJWaXNDb25maWc/OiB1bmtub3dufSkubGF5ZXJWaXNDb25maWc7XG4gIGlmIChwYXRjaCA9PSBudWxsIHx8IHR5cGVvZiBwYXRjaCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXRjaCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBwYXRjaCBhcyBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPjtcbn1cblxuLyoqXG4gKiBQb2x5Z29uIGZpbHRlcnMgZm9yIHRoZXNlIGxheWVycyB1c2UgY2VudHJvaWRzIC8gZGF0YVRvRmVhdHVyZSBmcm9tXG4gKiBjYWxjdWxhdGVMYXllckRhdGEuIE90aGVyIHR5cGVzIChsYXQvbG5nIHBvaW50cywgSDMsIGFyY3MpIGNhbiBmaWx0ZXJcbiAqIGZyb20gY29sdW1ucyBvbiB0aGUgZmlyc3QgcGFzcyBhbmQgbXVzdCBub3QgYmUgcmVjYWxjdWxhdGVkIGhlcmUuXG4gKi9cbmZ1bmN0aW9uIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBsYXllci50eXBlID09PSBMQVlFUl9UWVBFUy5nZW9qc29uIHx8IGxheWVyLmNvbmZpZz8uY29sdW1uTW9kZSA9PT0gJ2dlb2pzb24nO1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5mdW5jdGlvbiBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlZFN0YXRlOiBWaXNTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkKTogVmlzU3RhdGUge1xuICBjb25zdCB7bmV3RGF0YUlkcywgb3B0aW9ucywgbGF5ZXJNZXJnZXJzfSA9IHBvc3RNZXJnZXJQYXlsb2FkO1xuICBjb25zdCBuZXdGaWx0ZXJzID0gbWVyZ2VkU3RhdGUuZmlsdGVycy5maWx0ZXIoZiA9PlxuICAgIGYuZGF0YUlkLmZpbmQoZkRhdGFJZCA9PiBuZXdEYXRhSWRzLmluY2x1ZGVzKGZEYXRhSWQpKVxuICApO1xuICBjb25zdCBkYXRhc2V0RmlsdGVyZWQ6IHN0cmluZ1tdID0gdW5pcShcbiAgICBuZXdGaWx0ZXJzLnJlZHVjZSgoYWNjdSwgZikgPT4gWy4uLmFjY3UsIC4uLmYuZGF0YUlkXSwgW10gYXMgc3RyaW5nW10pXG4gICk7XG4gIGNvbnN0IGRhdGFFbXB0eSA9IG5ld0RhdGFJZHMubGVuZ3RoIDwgMTtcblxuICBsZXQgbmV3TGF5ZXJzID0gIWRhdGFFbXB0eVxuICAgID8gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZCkpXG4gICAgOiBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IG5ld0RhdGFJZHMucmVkdWNlKFxuICAgIChhY2N1LCBpZCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbaWRdOiBtZXJnZWRTdGF0ZS5kYXRhc2V0c1tpZF1cbiAgICB9KSxcbiAgICB7fVxuICApO1xuXG4gIGlmICghbmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuYXV0b0NyZWF0ZUxheWVycyAhPT0gZmFsc2UpIHtcbiAgICAvLyBubyBsYXllciBtZXJnZWQsIGZpbmQgZGVmYXVsdHNcbiAgICBjb25zdCByZXN1bHQgPSBhZGREZWZhdWx0TGF5ZXJzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllcyk7XG4gICAgbWVyZ2VkU3RhdGUgPSByZXN1bHQuc3RhdGU7XG4gICAgbmV3TGF5ZXJzID0gcmVzdWx0Lm5ld0xheWVycztcbiAgfVxuXG4gIGlmIChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgLy8gaWYgbWFwIGlzIHNwbGl0LCBhZGQgbmV3IGxheWVycyB0byBzcGxpdE1hcHNcbiAgICBuZXdMYXllcnMgPSBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpXG4gICAgKTtcbiAgICAvLyBhIGxheWVyIGFscmVhZHkgaW4gYSBwYW5lbCB3YXMgbWVyZ2VkIGZyb20gc3BsaXQgbWFwcywgd2hpY2ggZGVjaWRlIHRoZSBwYW5lbHMgc2hvd2luZyBpdFxuICAgIGNvbnN0IGxheWVyc05vdEluU3BsaXRNYXBzID0gbmV3TGF5ZXJzLmZpbHRlcihcbiAgICAgIGwgPT4gIW1lcmdlZFN0YXRlLnNwbGl0TWFwcy5zb21lKHNtID0+IGwuaWQgaW4gc20ubGF5ZXJzKVxuICAgICk7XG4gICAgbWVyZ2VkU3RhdGUgPSB7XG4gICAgICAuLi5tZXJnZWRTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMsIGxheWVyc05vdEluU3BsaXRNYXBzKVxuICAgIH07XG4gIH1cblxuICBtZXJnZWRTdGF0ZSA9IG1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyhcbiAgICBtZXJnZWRTdGF0ZSxcbiAgICBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhvcHRpb25zKSxcbiAgICBuZXdEYXRhSWRzXG4gICk7XG5cbiAgLy8gaWYgbm8gdG9vbHRpcHMgbWVyZ2VkIGFkZCBkZWZhdWx0IHRvb2x0aXBzXG4gIG5ld0RhdGFJZHMuZm9yRWFjaChkYXRhSWQgPT4ge1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBtZXJnZWRTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICAvLyBsb2FkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyBmYWxzZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBydW4gYWRkRGVmYXVsdFRvb2x0aXBzIHdoZW4gdG9vbHRpcEZpZWxkcyBpcyBlbXB0eVxuICAgIGlmIChcbiAgICAgIG9wdGlvbnM/LmF1dG9DcmVhdGVUb29sdGlwcyAhPT0gZmFsc2UgJiZcbiAgICAgICghQXJyYXkuaXNBcnJheSh0b29sdGlwRmllbGRzKSB8fCAhdG9vbHRpcEZpZWxkcy5sZW5ndGgpXG4gICAgKSB7XG4gICAgICAvLyBhZGRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIHRydWVcbiAgICAgIG1lcmdlZFN0YXRlID0gYWRkRGVmYXVsdFRvb2x0aXBzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllc1tkYXRhSWRdKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHVwZGF0ZWREYXRhc2V0cyA9IGRhdGFFbXB0eVxuICAgID8gT2JqZWN0LmtleXMobWVyZ2VkU3RhdGUuZGF0YXNldHMpXG4gICAgOiB1bmlxKE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKS5jb25jYXQoZGF0YXNldEZpbHRlcmVkKSk7XG5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShtZXJnZWRTdGF0ZSwgdXBkYXRlZERhdGFzZXRzLCB1bmRlZmluZWQpO1xuXG4gIC8vIFBvbHlnb24gcGVyLWxheWVyIGluZGV4ZXMgbmVlZCBjZW50cm9pZHMgLyBkYXRhVG9GZWF0dXJlLCB3aGljaCBhcmUgb25seVxuICAvLyBwb3B1bGF0ZWQgYnkgdGhlIGxheWVyLWRhdGEgcGFzcyBhYm92ZS4gU2tpcCBkYXRhc2V0cyB3aG9zZSB0YXJnZXRlZCBsYXllcnNcbiAgLy8gYWxyZWFkeSBmaWx0ZXJlZCBmcm9tIGNvbHVtbnMgKGUuZy4gbGF0L2xuZyBwb2ludHMpLlxuICBjb25zdCBwb2x5Z29uRmlsdGVycyA9IHVwZGF0ZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihcbiAgICBmID0+IGYudHlwZSA9PT0gRklMVEVSX1RZUEVTLnBvbHlnb24gJiYgZi5lbmFibGVkICE9PSBmYWxzZVxuICApO1xuICBjb25zdCBwb2x5Z29uTWV0YURhdGFJZHMgPSB1bmlxKFxuICAgIHVwZGF0ZWRTdGF0ZS5sYXllcnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIGxheWVyID0+XG4gICAgICAgICAgcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcikgJiZcbiAgICAgICAgICBwb2x5Z29uRmlsdGVycy5zb21lKGYgPT4gZi5sYXllcklkPy5pbmNsdWRlcyhsYXllci5pZCkpXG4gICAgICApXG4gICAgICAubWFwKGxheWVyID0+IGxheWVyLmNvbmZpZy5kYXRhSWQpXG4gICAgICAuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSAmJiB1cGRhdGVkRGF0YXNldHMuaW5jbHVkZXMoaWQpKVxuICApO1xuICBpZiAocG9seWdvbk1ldGFEYXRhSWRzLmxlbmd0aCkge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShcbiAgICAgIHtcbiAgICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgICBkYXRhc2V0czogYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICAgICAgICBwb2x5Z29uTWV0YURhdGFJZHMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmRhdGFzZXRzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5maWx0ZXJzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5sYXllcnNcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHBvbHlnb25NZXRhRGF0YUlkc1xuICAgICk7XG4gIH1cblxuICAvLyByZWdpc3RlciBsYXllciBhbmltYXRpb24gZG9tYWluLFxuICAvLyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlciBsYXllciBkYXRhIGlzIGNhbGN1bGF0ZWRcbiAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHVwZGF0ZWRTdGF0ZSk7XG5cbiAgLy8gdHJ5IHRvIHByb2Nlc3MgbGF5ZXJNZXJnZXJzIGFmdGVyIGRhdGFzZXQrZGF0YXNldE1lcmdlcnNcbiAgdXBkYXRlZFN0YXRlID1cbiAgICBsYXllck1lcmdlcnMgJiYgbGF5ZXJNZXJnZXJzLmxlbmd0aCA+IDBcbiAgICAgID8gYXBwbHlNZXJnZXJzVXBkYXRlcih1cGRhdGVkU3RhdGUsIHtcbiAgICAgICAgICBtZXJnZXJzOiBsYXllck1lcmdlcnMsXG4gICAgICAgICAgcG9zdE1lcmdlclBheWxvYWQ6IHsuLi5wb3N0TWVyZ2VyUGF5bG9hZCwgbGF5ZXJNZXJnZXJzOiBbXX1cbiAgICAgICAgfSlcbiAgICAgIDogdXBkYXRlZFN0YXRlO1xuXG4gIC8vIGNlbnRlciB0aGUgbWFwIG9uY2UgdGhlIGRhdGFzZXQgaXMgY3JlYXRlZFxuICBpZiAobmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuY2VudGVyTWFwKSB7XG4gICAgY29uc3QgYm91bmRzID0gZmluZE1hcEJvdW5kcyhuZXdMYXllcnMpO1xuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSBvcHRpb25zPy5wYWRkaW5nO1xuICAgICAgY29uc3QgZml0Qm91bmRzVGFzayA9IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMoKS5tYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gZml0TWFwQm91bmRzKGJvdW5kcywgcGFkZGluZyk7XG4gICAgICB9KTtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgZml0Qm91bmRzVGFzayk7XG4gICAgfVxuICB9XG5cbiAgLy8gbmVlZCB0byBjZW50ZXIgbWFwIGhlcmUgaWYgd2UgaGF2ZSBuZXcgbGF5ZXJzXG4gIHJldHVybiB1cGRhdGVkU3RhdGU7XG59XG5cbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbmFtZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2xhYmVsOiBhY3Rpb24ubGFiZWx9fSk7XG59XG5cbmNvbnN0IEFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMgPSBbJ2xhYmVsJywgJ2NvbG9yJywgJ21ldGFkYXRhJ107XG5cbi8qKlxuICogVmFsaWRhdGVzIHByb3BlcnRpZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBkYXRhc2V0LlxuICogTWFrZXMgc3VyZSBlYWNoIHByb3BlcnR5IGlzIGluIHRoZSBhbGxvd2VkIGxpc3RcbiAqIE1ha2VzIHN1cmUgY29sb3IgdmFsdWUgaXMgUkdCXG4gKiBQZXJmb3JtcyBkZWVwIG1lcmdlIHdoZW4gdXBkYXRpbmcgbWV0YWRhdGFcbiAqL1xuY29uc3QgdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMgPSAocHJvcHMsIGRhdGFzZXQpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSBPYmplY3QuZW50cmllcyhwcm9wcykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZW50cnk7XG4gICAgLy8gaXMgaXQgYWxsb3dlZCA/XG4gICAgaWYgKCFBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgYXJlIGFkZGluZyBhIGNvbG9yIGJ1dCBpdCBpcyBub3QgUkdCIHdlIGRvbid0IGFjY2VwdCB0aGUgdmFsdWVcbiAgICAvLyBpbiB0aGUgZnV0dXJlIGFzIHdlIGFkZCBtb3JlIHByb3BzIHdlIHNob3VsZCBjaGFuZ2UgdGhpcyBpZiBpbnRvIGEgc3dpdGNoXG4gICAgaWYgKGtleSA9PT0gJ2NvbG9yJyAmJiAhaXNSZ2JDb2xvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gZG8gd2UgbmVlZCBkZWVwIG1lcmdlID9cbiAgICByZXR1cm4gey4uLmFjYywgW2tleV06IGlzUGxhaW5PYmplY3QodmFsdWUpID8gZGVlcG1lcmdlKGRhdGFzZXRba2V5XSB8fCB7fSwgdmFsdWUpIDogdmFsdWV9O1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZFByb3BzO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgRGF0YXNldCBwcm9wcyAobGFiZWwsIGNvbG9yLCBtZXRhKS4gRG8gbm90IHVzZSB0byB1cGRhdGUgZGF0YSBvciBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIHByb3BzfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBjb25zdCBleGlzdGluZyA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyhwcm9wcywgZXhpc3RpbmcpO1xuICAgIC8vICB2YWxpZGF0ZSBwcm9wczoganVzdCBjb2xvciBmb3Igbm93XG4gICAgLy8gIHdlIG9ubHkgYWxsb3cgbGFiZWwsIGNvbG9yIGFuZCBtZXRhIHRvIGJlIHVwZGF0ZWRcbiAgICAvLyBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpO1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKVxuICAgICAgfVxuICAgIH07XG4gICAgLy8gQSB0aWxlc2V0IGFjY2VzcyB0b2tlbiBpcyByZWFkIHdoaWxlIGZvcm1hdHRpbmcgbGF5ZXIgZGF0YS4gUmVmcmVzaFxuICAgIC8vIG9ubHkgd2hlbiB0aGF0IGZpZWxkIGNoYW5nZXMgc28gb3RoZXIgbWV0YWRhdGEgZWRpdHMgKGUuZy4gcmVmcmVzaFxuICAgIC8vIGludGVydmFsKSBkbyBub3QgcmVidWlsZCBldmVyeSBsYXllciBvbiB0aGUgZGF0YXNldC5cbiAgICBpZiAocHJvcHMubWV0YWRhdGEgJiYgJ3RpbGUzZEFjY2Vzc1Rva2VuJyBpbiBwcm9wcy5tZXRhZGF0YSkge1xuICAgICAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIGRhdGFJZCk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogUmUtdmFsaWRhdGUgYSBsaXZlIGxheWVyIGFnYWluc3QgYSB0YWJsZSB3aG9zZSBzY2hlbWEganVzdCBjaGFuZ2VkLlxuICpcbiAqIFRoZSBsYXllcidzIGNvbHVtbnMgLyB2aXN1YWwtY2hhbm5lbCBmaWVsZHMgLyB0ZXh0LWxhYmVsIGZpZWxkcyBhcmUgZmlyc3RcbiAqIHJlbWFwcGVkIHRvIHRoZWlyIG5ldyBuYW1lcyAodmlhIGByZW5hbWVzYCkgc28gdGhlIGxheWVyIGZvbGxvd3MgYSByZW5hbWVcbiAqIGluc3RlYWQgb2YgdHJlYXRpbmcgdGhlIG9sZCBjb2x1bW4gYXMgcmVtb3ZlZCwgdGhlbiByZS12YWxpZGF0ZWQgd2l0aFxuICogYHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhYCDigJQgdGhlIHNhbWUgc2VyaWFsaXplICsgdmFsaWRhdGUgcGF0aCB1c2VkXG4gKiB3aGVuIGEgc2F2ZWQgY29uZmlnIGlzIGxvYWRlZCBhZ2FpbnN0IG5ldyBkYXRhLiBSZXR1cm5zIGBudWxsYCB3aGVuIGFcbiAqIHJlcXVpcmVkIGNvbHVtbiBpcyBnb25lICh0aGUgbGF5ZXIgY2FuIG5vIGxvbmdlciBiZSBidWlsdCkuXG4gKi9cbmZ1bmN0aW9uIHJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYShcbiAgbGF5ZXI6IExheWVyLFxuICByZW5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBuZXdUYWJsZTogS2VwbGVyVGFibGUsXG4gIHN0YXRlOiBWaXNTdGF0ZVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3QgY29uZmlnUGF0Y2g6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCBjb2x1bW5zXG4gIGNvbnN0IGNvbHVtbnNQYXRjaDogUmVjb3JkPHN0cmluZywge3ZhbHVlOiBzdHJpbmcgfCBudWxsOyBmaWVsZElkeDogbnVtYmVyfT4gPSB7fTtcbiAgbGV0IGNvbHVtbnNDaGFuZ2VkID0gZmFsc2U7XG4gIE9iamVjdC5lbnRyaWVzKGxheWVyLmNvbmZpZy5jb2x1bW5zIHx8IHt9KS5mb3JFYWNoKChbY2tleSwgY29sXSkgPT4ge1xuICAgIGlmIChjb2w/LnZhbHVlICYmIHJlbmFtZXNbY29sLnZhbHVlXSkge1xuICAgICAgY29sdW1uc1BhdGNoW2NrZXldID0gey4uLmNvbCwgdmFsdWU6IHJlbmFtZXNbY29sLnZhbHVlXX07XG4gICAgICBjb2x1bW5zQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9KTtcbiAgaWYgKGNvbHVtbnNDaGFuZ2VkKSB7XG4gICAgY29uZmlnUGF0Y2guY29sdW1ucyA9IHsuLi5sYXllci5jb25maWcuY29sdW1ucywgLi4uY29sdW1uc1BhdGNofTtcbiAgfVxuXG4gIC8vIGZvbGxvdyByZW5hbWVkIHZpc3VhbC1jaGFubmVsIGZpZWxkcyAoY29sb3JGaWVsZCwgc2l6ZUZpZWxkLCAuLi4pXG4gIE9iamVjdC52YWx1ZXMobGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZH0pID0+IHtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IGxheWVyLmNvbmZpZ1tmaWVsZF07XG4gICAgaWYgKGZpZWxkQ29uZmlnPy5uYW1lICYmIHJlbmFtZXNbZmllbGRDb25maWcubmFtZV0pIHtcbiAgICAgIGNvbmZpZ1BhdGNoW2ZpZWxkXSA9IHsuLi5maWVsZENvbmZpZywgbmFtZTogcmVuYW1lc1tmaWVsZENvbmZpZy5uYW1lXX07XG4gICAgfVxuICB9KTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCBvciByZS10eXBlZCB0ZXh0LWxhYmVsIGZpZWxkc1xuICBpZiAobGF5ZXIuY29uZmlnLnRleHRMYWJlbD8ubGVuZ3RoKSB7XG4gICAgY29uZmlnUGF0Y2gudGV4dExhYmVsID0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbC5tYXAodGwgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IHRsLmZpZWxkPy5uYW1lO1xuICAgICAgY29uc3QgZmllbGQgPVxuICAgICAgICBuYW1lICYmIG5ld1RhYmxlLmZpZWxkcy5maW5kKGNhbmRpZGF0ZSA9PiBjYW5kaWRhdGUubmFtZSA9PT0gKHJlbmFtZXNbbmFtZV0gPz8gbmFtZSkpO1xuICAgICAgcmV0dXJuIGZpZWxkICYmIChmaWVsZC5uYW1lICE9PSBuYW1lIHx8IGZpZWxkLnR5cGUgIT09IHRsLmZpZWxkPy50eXBlKSA/IHsuLi50bCwgZmllbGR9IDogdGw7XG4gICAgfSk7XG4gIH1cblxuICAvLyBzaGFsbG93LWNvcHkgdGhlIGxheWVyIHNvIHdlIG5ldmVyIG11dGF0ZSByZWR1eCBzdGF0ZTsgdGhlIGNvcHkga2VlcHMgdGhlXG4gIC8vIHByb3RvdHlwZSBtZXRob2RzIChgdmlzdWFsQ2hhbm5lbHNgIGdldHRlciwgYGlzVmFsaWRUb1NhdmVgKSBzbyBpdFxuICAvLyBzZXJpYWxpemVzIGV4YWN0bHkgbGlrZSBhIGxpdmUgbGF5ZXIuXG4gIGNvbnN0IGxheWVyQ29weSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YobGF5ZXIpKSwgbGF5ZXIpO1xuICBpZiAoT2JqZWN0LmtleXMoY29uZmlnUGF0Y2gpLmxlbmd0aCkge1xuICAgIGxheWVyQ29weS5jb25maWcgPSB7Li4ubGF5ZXIuY29uZmlnLCAuLi5jb25maWdQYXRjaH07XG4gIH1cblxuICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICBuZXdUYWJsZSxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgbGF5ZXJDb3B5LFxuICAgIHN0YXRlLnNjaGVtYVxuICApO1xuXG4gIHJldHVybiB2YWxpZGF0ZWQgJiYgdmFsaWRhdGVkLmhhc0FsbENvbHVtbnMoKSA/IHZhbGlkYXRlZCA6IG51bGw7XG59XG5cbmNvbnN0IEZJTFRFUl9QTE9UX1lfQVhJU19UWVBFUyA9IG5ldyBTZXQ8c3RyaW5nPihbQUxMX0ZJRUxEX1RZUEVTLmludGVnZXIsIEFMTF9GSUVMRF9UWVBFUy5yZWFsXSk7XG5cbmZ1bmN0aW9uIGNsZWFyVGltZWxpbmVGaWx0ZXJTdGF0ZShmaWx0ZXI6IEZpbHRlcik6IEZpbHRlciB7XG4gIGNvbnN0IHtcbiAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogX3N5bmNlZFdpdGhMYXllclRpbWVsaW5lLFxuICAgIHN5bmNUaW1lbGluZU1vZGU6IF9zeW5jVGltZWxpbmVNb2RlLFxuICAgIHRpbWVCaW5zOiBfdGltZUJpbnMsXG4gICAgbGluZUNoYXJ0OiBfbGluZUNoYXJ0LFxuICAgIHRpbWV6b25lOiBfdGltZXpvbmUsXG4gICAgaW52ZXJ0VHJlbmRDb2xvcjogX2ludmVydFRyZW5kQ29sb3IsXG4gICAgc2hvd1RpbWVEaXNwbGF5OiBfc2hvd1RpbWVEaXNwbGF5LFxuICAgIC4uLnJlc3RcbiAgfSA9IGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5yZXN0LFxuICAgIGZpeGVkRG9tYWluOiBmYWxzZSxcbiAgICBpc0FuaW1hdGluZzogZmFsc2UsXG4gICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmZyZWUsXG4gICAgeUF4aXM6IG51bGwsXG4gICAgcGxvdFR5cGU6IHt0eXBlOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbX1cbiAgfSBhcyBGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIHJlY29uY2lsZVRpbWVsaW5lUGxvdEFmdGVyUHJpbWFyeVJlbW92YWwoXG4gIGZpbHRlcjogRmlsdGVyLFxuICBkYXRhc2V0czogVmlzU3RhdGVbJ2RhdGFzZXRzJ11cbik6IEZpbHRlciB7XG4gIGlmIChmaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICBjb25zdCBwcmltYXJ5RGF0YXNldCA9IGRhdGFzZXRzW2ZpbHRlci5kYXRhSWRbMF1dO1xuICBjb25zdCB5QXhpcyA9IGZpbHRlci55QXhpcz8ubmFtZVxuICAgID8gcHJpbWFyeURhdGFzZXQ/LmZpZWxkcy5maW5kKFxuICAgICAgICBmaWVsZCA9PiBmaWVsZC5uYW1lID09PSBmaWx0ZXIueUF4aXM/Lm5hbWUgJiYgRklMVEVSX1BMT1RfWV9BWElTX1RZUEVTLmhhcyhmaWVsZC50eXBlKVxuICAgICAgKSA/PyBudWxsXG4gICAgOiBudWxsO1xuICBjb25zdCBncm91cEJ5RmllbGROYW1lID0gZmlsdGVyLnBsb3RUeXBlPy5ncm91cEJ5Py5maWVsZE5hbWU7XG4gIGNvbnN0IGhhc0dyb3VwQnlGaWVsZCA9IGdyb3VwQnlGaWVsZE5hbWVcbiAgICA/IHByaW1hcnlEYXRhc2V0Py5maWVsZHMuc29tZShmaWVsZCA9PiBmaWVsZC5uYW1lID09PSBncm91cEJ5RmllbGROYW1lKVxuICAgIDogdHJ1ZTtcbiAgY29uc3QgcGxvdFR5cGUgPSB7XG4gICAgLi4uZmlsdGVyLnBsb3RUeXBlLFxuICAgIC4uLihmaWx0ZXIueUF4aXMgJiYgIXlBeGlzID8ge3R5cGU6IFBMT1RfVFlQRVMuaGlzdG9ncmFtfSA6IHt9KSxcbiAgICAuLi4oIWhhc0dyb3VwQnlGaWVsZCA/IHtncm91cEJ5OiBudWxsfSA6IHt9KVxuICB9O1xuXG4gIHJldHVybiB7Li4uZmlsdGVyLCB5QXhpcywgcGxvdFR5cGUsIGxpbmVDaGFydDogdW5kZWZpbmVkfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgYW4gZXhpc3RpbmcgZGF0YXNldCdzIHNjaGVtYSAoY29sdW1ucy9maWVsZHMpIGluIHBsYWNlIGFuZCByZWNvbmNpbGVcbiAqIGV2ZXJ5dGhpbmcgdGhhdCByZWZlcmVuY2VkIHRoZSBvbGQgY29sdW1uczogZmlsdGVycywgbGF5ZXJzLCB0b29sdGlwIGZpZWxkcyxcbiAqIHBpbm5lZCBjb2x1bW5zIGFuZCBzb3J0IHN0YXRlLiBUaGUgZGF0YXNldCBrZWVwcyBpdHMgaWQvbGFiZWwvY29sb3IvbWV0YWRhdGEuXG4gKlxuICogYGFjdGlvbi5kYXRhYCBpcyB0aGUgc2FtZSBzaGFwZSBgS2VwbGVyVGFibGUuaW1wb3J0RGF0YWAgYWNjZXB0cyAoYHtjb2xzLFxuICogZmllbGRzLCBhcnJvd1RhYmxlfWAgd2hlbiByZXBsYWNpbmcgY29sdW1ucykuIGBhY3Rpb24ucmVuYW1lc2AgaXMgYW4gb3B0aW9uYWxcbiAqIG9sZCDihpIgbmV3IGNvbHVtbi1uYW1lIG1hcCBzbyBsYXllcnMvZmlsdGVycy90b29sdGlwcyBmb2xsb3cgYSByZW5hbWUgaW5zdGVhZFxuICogb2YgdHJlYXRpbmcgdGhlIG9sZCBjb2x1bW4gYXMgcmVtb3ZlZC5cbiAqXG4gKiBSZWNvbmNpbGlhdGlvbiBpcyBuYW1lLWJhc2VkIOKAlCB0aGUgc2FtZSB3YXkga2VwbGVyLmdsIGxvYWRzIGEgc2F2ZWQgY29uZmlnXG4gKiBhZ2FpbnN0IGNoYW5nZWQgZGF0YS4gQSBsYXllciB3aG9zZSByZXF1aXJlZCBjb2x1bW4gaXMgZ29uZSBpcyByZW1vdmVkOyBhXG4gKiBmaWx0ZXIgb24gYSBnb25lIGNvbHVtbiBpcyBkcm9wcGVkIChvciB0aGUgZGF0YXNldCBpcyBzcGxpY2VkIG91dCBvZiBhIHN5bmNlZFxuICogZmlsdGVyKTsgdG9vbHRpcCBmaWVsZHMgYXJlIHJlbWFwcGVkIC8gZHJvcHBlZC5cbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgZGF0YSwgcmVuYW1lcyA9IHt9fSA9IGFjdGlvbjtcbiAgY29uc3QgZXhpc3RpbmcgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gMS4gcmVidWlsZCB0aGUgdGFibGUgc2NoZW1hIGluIHBsYWNlIChzYW1lIGlkL2xhYmVsL2NvbG9yL21ldGFkYXRhKVxuICBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywge30pO1xuICBjb25zdCBbc29ydGVkQ29sdW1uLCBzb3J0TW9kZV0gPSBPYmplY3QuZW50cmllcyhleGlzdGluZy5zb3J0Q29sdW1uIHx8IHt9KVswXSB8fCBbXTtcbiAgbmV3VGFibGUudXBkYXRlU2NoZW1hKGRhdGEpO1xuICBuZXdUYWJsZS5kYXRhUmV2aXNpb24gPSBleGlzdGluZy5kYXRhUmV2aXNpb24gKyAxO1xuXG4gIC8vIFRoZSBkYXRhIGNvbnRhaW5lciBpcyByZWJ1aWx0IHVuc29ydGVkIGFuZCB1bmZpbHRlcmVkOyByZXNldCB0aGUgdGFibGUnc1xuICAvLyB2aWV3IHN0YXRlIHRoYXQgaW5kZXhlcyBpbnRvIHRoZSBvbGQgY29udGFpbmVyLlxuICBuZXdUYWJsZS5maWx0ZXJlZElkeENQVSA9IG5ld1RhYmxlLmFsbEluZGV4ZXM7XG4gIG5ld1RhYmxlLmZpbHRlclJlY29yZENQVSA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydENvbHVtbiA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydE9yZGVyID0gbnVsbDtcbiAgY29uc3QgbmV3RmllbGRzQnlOYW1lID0gbmV3IE1hcChuZXdUYWJsZS5maWVsZHMubWFwKGZpZWxkID0+IFtmaWVsZC5uYW1lLCBmaWVsZF0pKTtcbiAgbmV3VGFibGUucGlubmVkQ29sdW1ucyA9IChleGlzdGluZy5waW5uZWRDb2x1bW5zIHx8IFtdKVxuICAgIC5tYXAobmFtZSA9PiByZW5hbWVzW25hbWVdID8/IG5hbWUpXG4gICAgLmZpbHRlcihuYW1lID0+IG5ld0ZpZWxkc0J5TmFtZS5oYXMobmFtZSkpO1xuICBuZXdUYWJsZS5oaWRkZW5Db2x1bW5zID0gKGV4aXN0aW5nLmhpZGRlbkNvbHVtbnMgfHwgW10pXG4gICAgLm1hcChuYW1lID0+IHJlbmFtZXNbbmFtZV0gPz8gbmFtZSlcbiAgICAuZmlsdGVyKG5hbWUgPT4gbmV3RmllbGRzQnlOYW1lLmhhcyhuYW1lKSk7XG4gIGNvbnN0IG5leHRTb3J0ZWRDb2x1bW4gPSBzb3J0ZWRDb2x1bW4gPyByZW5hbWVzW3NvcnRlZENvbHVtbl0gPz8gc29ydGVkQ29sdW1uIDogbnVsbDtcbiAgaWYgKG5leHRTb3J0ZWRDb2x1bW4gJiYgc29ydE1vZGUgJiYgbmV3RmllbGRzQnlOYW1lLmhhcyhuZXh0U29ydGVkQ29sdW1uKSkge1xuICAgIHNvcnREYXRhc2V0QnlDb2x1bW4obmV3VGFibGUsIG5leHRTb3J0ZWRDb2x1bW4sIHNvcnRNb2RlKTtcbiAgfVxuXG4gIGNvbnN0IG5ld0RhdGFzZXRzID0gey4uLnN0YXRlLmRhdGFzZXRzLCBbZGF0YUlkXTogbmV3VGFibGV9O1xuICBjb25zdCBkYXRhc2V0SWRzVG9SZWZpbHRlciA9IG5ldyBTZXQ8c3RyaW5nPihbZGF0YUlkXSk7XG5cbiAgLy8gMi4gcmVjb25jaWxlIGZpbHRlcnNcbiAgbGV0IG5ld0ZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzXG4gICAgLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3QgdmkgPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YUlkKTtcbiAgICAgIGlmICh2aSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gUG9seWdvbiBmaWx0ZXJzIHRhcmdldCBsYXllcnMgcmF0aGVyIHRoYW4gZGF0YXNldCBmaWVsZHMsIHNvIGEgY29sdW1uXG4gICAgICAvLyB0eXBlIGNoYW5nZSBzaG91bGQgbm90IHJlY29uY2lsZSB0aGVtIGFnYWluc3QgdGhlIGZpZWxkIGxpc3QuXG4gICAgICBpZiAoZmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9sZE5hbWUgPSBmaWx0ZXIubmFtZVt2aV07XG4gICAgICBjb25zdCBuZXdOYW1lID0gcmVuYW1lc1tvbGROYW1lXSA/PyBvbGROYW1lO1xuICAgICAgY29uc3QgZmllbGRJZHggPSBuZXdUYWJsZS5nZXRDb2x1bW5GaWVsZElkeChuZXdOYW1lKTtcbiAgICAgIGNvbnN0IG5leHRGaWx0ZXJUeXBlID0gZmllbGRJZHggPT09IC0xID8gbnVsbCA6IG5ld1RhYmxlLmdldENvbHVtbkZpbHRlclByb3BzKG5ld05hbWUpPy50eXBlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkSWR4ID09PSAtMSB8fFxuICAgICAgICAoZmlsdGVyLmRhdGFJZC5sZW5ndGggPiAxICYmIG5leHRGaWx0ZXJUeXBlICYmIG5leHRGaWx0ZXJUeXBlICE9PSBmaWx0ZXIudHlwZSlcbiAgICAgICkge1xuICAgICAgICAvLyBEcm9wIGEgbWlzc2luZyBmaWVsZCBvciBkZXRhY2ggYW4gaW5jb21wYXRpYmxlIHN5bmNlZCBtZW1iZXIuXG4gICAgICAgIGlmIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGZpbHRlci5kYXRhSWQuZm9yRWFjaChpZCA9PiBkYXRhc2V0SWRzVG9SZWZpbHRlci5hZGQoaWQpKTtcbiAgICAgICAgY29uc3QgZGV0YWNoZWRGaWx0ZXIgPSBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmksIG5ld0RhdGFzZXRzKTtcbiAgICAgICAgcmV0dXJuIHZpID09PSAwXG4gICAgICAgICAgPyByZWNvbmNpbGVUaW1lbGluZVBsb3RBZnRlclByaW1hcnlSZW1vdmFsKGRldGFjaGVkRmlsdGVyLCBuZXdEYXRhc2V0cylcbiAgICAgICAgICA6IGRldGFjaGVkRmlsdGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBjb2x1bW4gcHJlc2VudCAocG9zc2libHkgcmVuYW1lZCk6IHJlLXJlc29sdmUgbmFtZS9maWVsZElkeC9kb21haW5cbiAgICAgIGxldCB7ZmlsdGVyOiB1cGRhdGVkfSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKGZpbHRlciwgbmV3RGF0YXNldHMsIGRhdGFJZCwgbmV3TmFtZSwgdmksIHtcbiAgICAgICAgbWVyZ2VEb21haW46IHZpID4gMFxuICAgICAgfSk7XG4gICAgICBpZiAoIXVwZGF0ZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBsZWF2aW5nVGltZUZpbHRlciA9XG4gICAgICAgIGZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlICYmIHVwZGF0ZWQudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZTtcblxuICAgICAgY29uc3Qgb2xkRW5kTmFtZSA9IHRvQXJyYXkoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLmVuZE5hbWUpW3ZpXTtcbiAgICAgIGlmICh1cGRhdGVkLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgb2xkRW5kTmFtZSkge1xuICAgICAgICBjb25zdCBlbmROYW1lID0gcmVuYW1lc1tvbGRFbmROYW1lXSA/PyBvbGRFbmROYW1lO1xuICAgICAgICB1cGRhdGVkID1cbiAgICAgICAgICBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUodXBkYXRlZCwgbmV3RGF0YXNldHMsIGRhdGFJZCwgZW5kTmFtZSwgdmkpLmZpbHRlciA/P1xuICAgICAgICAgIGFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSh1cGRhdGVkLCBuZXdEYXRhc2V0cywgZGF0YUlkLCBudWxsLCB2aSkuZmlsdGVyID8/XG4gICAgICAgICAgdXBkYXRlZDtcbiAgICAgIH1cblxuICAgICAgLy8gVGltZSBwbG90cyBvbmx5IGFjY2VwdCBudW1lcmljIHktYXhpcyBmaWVsZHMuIFJlLXJlc29sdmUgdGhlIGNvbXBsZXRlXG4gICAgICAvLyBmaWVsZCBzbyB0eXBlIGFuZCBmaWVsZElkeCBhbHNvIGZvbGxvdyBhIHNjaGVtYSBjaGFuZ2UuXG4gICAgICBsZXQgeUF4aXMgPSB1cGRhdGVkLnlBeGlzO1xuICAgICAgaWYgKHZpID09PSAwICYmIHVwZGF0ZWQueUF4aXM/Lm5hbWUpIHtcbiAgICAgICAgY29uc3QgeUF4aXNOYW1lID0gcmVuYW1lc1t1cGRhdGVkLnlBeGlzLm5hbWVdID8/IHVwZGF0ZWQueUF4aXMubmFtZTtcbiAgICAgICAgY29uc3QgeUF4aXNGaWVsZCA9IG5ld0ZpZWxkc0J5TmFtZS5nZXQoeUF4aXNOYW1lKTtcbiAgICAgICAgeUF4aXMgPSB5QXhpc0ZpZWxkICYmIEZJTFRFUl9QTE9UX1lfQVhJU19UWVBFUy5oYXMoeUF4aXNGaWVsZC50eXBlKSA/IHlBeGlzRmllbGQgOiBudWxsO1xuICAgICAgfVxuXG4gICAgICBsZXQgbmV4dEZpbHRlciA9IHtcbiAgICAgICAgLi4udXBkYXRlZCxcbiAgICAgICAgeUF4aXMsXG4gICAgICAgIC4uLih1cGRhdGVkLnlBeGlzICYmICF5QXhpc1xuICAgICAgICAgID8ge3Bsb3RUeXBlOiB7Li4udXBkYXRlZC5wbG90VHlwZSwgdHlwZTogUExPVF9UWVBFUy5oaXN0b2dyYW19fVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAvLyBjbGFtcCB0aGUgdXNlcidzIHByZXZpb3VzIHNlbGVjdGlvbiBpbnRvIHRoZSBuZXcgZG9tYWluIGluc3RlYWQgb2ZcbiAgICAgICAgLy8gcmVzZXR0aW5nIGl0IHRvIHRoZSBmdWxsIHJhbmdlXG4gICAgICAgIHZhbHVlOiBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKGZpbHRlci52YWx1ZSwgdXBkYXRlZClcbiAgICAgIH07XG4gICAgICBpZiAobGVhdmluZ1RpbWVGaWx0ZXIpIHtcbiAgICAgICAgbmV4dEZpbHRlciA9IGNsZWFyVGltZWxpbmVGaWx0ZXJTdGF0ZShuZXh0RmlsdGVyKTtcbiAgICAgIH0gZWxzZSBpZiAodmkgPT09IDAgJiYgbmV4dEZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwQnkgPSBuZXh0RmlsdGVyLnBsb3RUeXBlLmdyb3VwQnk7XG4gICAgICAgIGlmIChncm91cEJ5ICYmIHJlbmFtZXNbZ3JvdXBCeS5maWVsZE5hbWVdKSB7XG4gICAgICAgICAgbmV4dEZpbHRlci5wbG90VHlwZSA9IHtcbiAgICAgICAgICAgIC4uLm5leHRGaWx0ZXIucGxvdFR5cGUsXG4gICAgICAgICAgICBncm91cEJ5OiB7Li4uZ3JvdXBCeSwgZmllbGROYW1lOiByZW5hbWVzW2dyb3VwQnkuZmllbGROYW1lXX1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFRpbWVsaW5lIGJpbnMgY2FuIHJlbWFpbiBpZGVudGljYWwgd2hpbGUgeS1heGlzIG9yIGdyb3VwLWJ5IHZhbHVlc1xuICAgICAgICAvLyBjaGFuZ2UsIHNvIGRvIG5vdCByZXVzZSB0aGUgb2xkIHNlcmllcyBjYWNoZSBhZnRlciBhIGRhdGEgcmVidWlsZC5cbiAgICAgICAgbmV4dEZpbHRlciA9IHsuLi5uZXh0RmlsdGVyLCBsaW5lQ2hhcnQ6IHVuZGVmaW5lZH07XG4gICAgICB9XG4gICAgICAvLyBLZWVwIGV4aXN0aW5nIHBsb3RzOyB0aW1lIHBsb3RzIGFyZSByZWJ1aWx0IGFmdGVyIGZpbHRlcmluZyBiZWxvdy5cbiAgICAgIHJldHVybiBmaWx0ZXIudHlwZSA9PT0gbmV4dEZpbHRlci50eXBlIHx8IG5leHRGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZVxuICAgICAgICA/IG5leHRGaWx0ZXJcbiAgICAgICAgOiB1cGRhdGVGaWx0ZXJQbG90KG5ld0RhdGFzZXRzLCBuZXh0RmlsdGVyLCBkYXRhSWQsIHN0YXRlLmxheWVycyk7XG4gICAgfSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIEZpbHRlcltdO1xuXG4gIC8vIDMuIHJlY29uY2lsZSBsYXllcnNcbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmU6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IG5ld0xheWVycyA9IHN0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgIGlmIChsYXllci5jb25maWcuZGF0YUlkICE9PSBkYXRhSWQpIHtcbiAgICAgIHJldHVybiBsYXllcjtcbiAgICB9XG4gICAgY29uc3QgcmVjb25jaWxlZCA9IHJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYShsYXllciwgcmVuYW1lcywgbmV3VGFibGUsIHN0YXRlKTtcbiAgICBpZiAocmVjb25jaWxlZCkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZWQ7XG4gICAgfVxuICAgIGxheWVyc1RvUmVtb3ZlLnB1c2gobGF5ZXIuaWQpO1xuICAgIHJldHVybiBsYXllcjsgLy8gcGxhY2Vob2xkZXIsIGRyb3BwZWQgdmlhIHJlbW92ZUxheWVyVXBkYXRlciBiZWxvd1xuICB9KTtcblxuICAvLyBQb2x5Z29uIGZpbHRlcnMgcmVmZXJlbmNlIGxheWVycywgbm90IGZpZWxkcy4gUHJlc2VydmUgdGhlbSBmb3Igc2NoZW1hXG4gIC8vIGVkaXRzIHRoYXQga2VlcCB0aGVpciB0YXJnZXQgbGF5ZXJzLCBidXQgcmVtb3ZlIGludmFsaWQgdGFyZ2V0cyBiZWZvcmVcbiAgLy8gcmVidWlsZGluZyBmaWx0ZXIgcmVjb3JkcyB3aGVuIGEgcmVxdWlyZWQgbGF5ZXIgY29sdW1uIHdhcyBkZWxldGVkLlxuICBjb25zdCByZW1vdmVkTGF5ZXJJZHMgPSBuZXcgU2V0KGxheWVyc1RvUmVtb3ZlKTtcbiAgaWYgKHJlbW92ZWRMYXllcklkcy5zaXplKSB7XG4gICAgbmV3RmlsdGVycyA9IG5ld0ZpbHRlcnMuZmxhdE1hcChmaWx0ZXIgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBmaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnBvbHlnb24gfHxcbiAgICAgICAgIWZpbHRlci5sYXllcklkPy5zb21lKGlkID0+IHJlbW92ZWRMYXllcklkcy5oYXMoaWQpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBbZmlsdGVyXTtcbiAgICAgIH1cbiAgICAgIGZpbHRlci5kYXRhSWQuZm9yRWFjaChpZCA9PiBkYXRhc2V0SWRzVG9SZWZpbHRlci5hZGQoaWQpKTtcbiAgICAgIGNvbnN0IGxheWVySWQgPSBmaWx0ZXIubGF5ZXJJZC5maWx0ZXIoaWQgPT4gIXJlbW92ZWRMYXllcklkcy5oYXMoaWQpKTtcbiAgICAgIHJldHVybiBsYXllcklkLmxlbmd0aCA/IFt7Li4uZmlsdGVyLCBsYXllcklkfV0gOiBbXTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJlYXNzaWduIEdQVSBjaGFubmVscyBub3cgdGhhdCB0aGUgZmlsdGVyIGxpc3QgaXMgc2V0dGxlZC5cbiAgbmV3RmlsdGVycyA9IG5ld0ZpbHRlcnMubWFwKGZpbHRlciA9PlxuICAgIGZpbHRlci5ncHUgPyBhc3NpZ25HcHVDaGFubmVsKHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBuZXdGaWx0ZXJzKSwgbmV3RmlsdGVycykgOiBmaWx0ZXJcbiAgKTtcblxuICAvLyA0LiByZWJ1aWxkIHRoZSB0YWJsZSdzIGZpbHRlciBzdGF0ZSB1c2luZyBvbmx5IGxheWVycyB0aGF0IHdpbGwgc3Vydml2ZVxuICBjb25zdCBzdXJ2aXZpbmdMYXllcnMgPSBuZXdMYXllcnMuZmlsdGVyKGxheWVyID0+ICFyZW1vdmVkTGF5ZXJJZHMuaGFzKGxheWVyLmlkKSk7XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIEFycmF5LmZyb20oZGF0YXNldElkc1RvUmVmaWx0ZXIpLFxuICAgIG5ld0RhdGFzZXRzLFxuICAgIG5ld0ZpbHRlcnMsXG4gICAgc3Vydml2aW5nTGF5ZXJzXG4gICk7XG5cbiAgLy8gNS4gcmVjb25jaWxlIHRvb2x0aXAgZmllbGRzVG9TaG93XG4gIGxldCBpbnRlcmFjdGlvbkNvbmZpZyA9IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnO1xuICBjb25zdCB0b29sdGlwID0gaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA7XG4gIGNvbnN0IGZpZWxkc1RvU2hvdyA9IHRvb2x0aXA/LmNvbmZpZz8uZmllbGRzVG9TaG93Py5bZGF0YUlkXTtcbiAgaWYgKGZpZWxkc1RvU2hvdykge1xuICAgIGNvbnN0IG5leHRGaWVsZHNUb1Nob3cgPSBmaWVsZHNUb1Nob3cuZmxhdE1hcChmID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSByZW5hbWVzW2YubmFtZV0gPz8gZi5uYW1lO1xuICAgICAgcmV0dXJuIG5ld0ZpZWxkc0J5TmFtZS5oYXMobmFtZSkgPyBbey4uLmYsIG5hbWV9XSA6IFtdO1xuICAgIH0pO1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIC4uLnRvb2x0aXAsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIC4uLnRvb2x0aXAuY29uZmlnLFxuICAgICAgICAgIGZpZWxkc1RvU2hvdzogey4uLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdywgW2RhdGFJZF06IG5leHRGaWVsZHNUb1Nob3d9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0cyxcbiAgICBmaWx0ZXJzOiBuZXdGaWx0ZXJzLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGNoYXJ0czogcmVtYXBDaGFydHNGb3JEYXRhc2V0KHN0YXRlLmNoYXJ0cywgZGF0YUlkLCByZW5hbWVzLCBuZXdGaWVsZHNCeU5hbWUpXG4gIH07XG5cbiAgLy8gNi4gZHJvcCBsYXllcnMgdGhhdCBsb3N0IHRoZWlyIHJlcXVpcmVkIGNvbHVtbnNcbiAgbmV4dFN0YXRlID0gbGF5ZXJzVG9SZW1vdmUucmVkdWNlKChhY2N1LCBpZCkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZH0pLCBuZXh0U3RhdGUpO1xuXG4gIC8vIEZpbHRlcmluZyBhbmQgcG9seWdvbi1sYXllciByZW1vdmFsIGNhbiBjaGFuZ2UgdGhlIHJvd3MgYmVoaW5kIHRpbWVsaW5lXG4gIC8vIHBsb3RzLCBzbyByZWJ1aWxkIHRoZWlyIGNhY2hlZCBiaW5zL3NlcmllcyBmcm9tIHRoZSByZWNvbmNpbGVkIHN0YXRlLlxuICBuZXh0U3RhdGUgPSB1cGRhdGVGaWx0ZXJQbG90c0FmdGVyRmlsdGVyaW5nKG5leHRTdGF0ZSwgQXJyYXkuZnJvbShkYXRhc2V0SWRzVG9SZWZpbHRlcikpO1xuXG4gIC8vIDcuIHJlY29tcHV0ZSBsYXllciBkb21haW5zICsgZGF0YSBmb3IgdGhlIHVwZGF0ZWQgZGF0YXNldFxuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBkYXRhSWQpO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogUmVuYW1lIGEgY29sdW1uJ3Mgc3RvcmVkIGlkZW50aXR5IChgZmllbGQubmFtZWApIGFuZCBldmVyeSBsYXllciwgZmlsdGVyLFxuICogdG9vbHRpcCwgYW5kIGNoYXJ0IHJlZmVyZW5jZSB0aGF0IHVzZWQgdGhlIG9sZCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbmFtZVRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBmaWVsZE5hbWUsIG5ld05hbWV9ID0gYWN0aW9uO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFjYW5NdXRhdGVEYXRhc2V0U2NoZW1hKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHBheWxvYWQgPSBidWlsZFJlbmFtZUNvbHVtbkRhdGEoZGF0YXNldCwgZmllbGROYW1lLCBuZXdOYW1lKTtcbiAgaWYgKCFwYXlsb2FkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0VXBkYXRlcihzdGF0ZSwge1xuICAgIGRhdGFJZCxcbiAgICBkYXRhOiBwYXlsb2FkLmRhdGEsXG4gICAgcmVuYW1lczogcGF5bG9hZC5yZW5hbWVzXG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBjb21wbGV0ZSBjb2x1bW4gYmVmb3JlIGNvbW1pdHRpbmcgaXRzIG5ldyB0eXBlLiBBIGZhaWxlZCB2YWx1ZVxuICogbGVhdmVzIHRoZSB0YWJsZSBhbmQgZXZlcnkgcmVmZXJlbmNlIHVuY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZVRhYmxlQ29sdW1uVHlwZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ2hhbmdlVGFibGVDb2x1bW5UeXBlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBmaWVsZE5hbWUsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFjYW5NdXRhdGVEYXRhc2V0U2NoZW1hKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IGJ1aWxkQ2hhbmdlQ29sdW1uVHlwZURhdGEoZGF0YXNldCwgZmllbGROYW1lLCBuZXdUeXBlKTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgaWQ6IGBjb2x1bW4tdHlwZS0ke2RhdGFJZH0tJHtmaWVsZE5hbWV9YCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBDYW5ub3QgY2hhbmdlIOKAnCR7ZmllbGROYW1lfeKAnSB0byAke25ld1R5cGV9OiAke2Zvcm1hdENvbHVtblR5cGVDb252ZXJzaW9uRXJyb3IoXG4gICAgICAgICAgICAgIHJlc3VsdC5lcnJvclxuICAgICAgICAgICAgKX0uIE5vIHZhbHVlcyB3ZXJlIGNoYW5nZWQuYFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0VXBkYXRlcihzdGF0ZSwge1xuICAgIGRhdGFJZCxcbiAgICBkYXRhOiByZXN1bHQucGF5bG9hZC5kYXRhLFxuICAgIHJlbmFtZXM6IHJlc3VsdC5wYXlsb2FkLnJlbmFtZXNcbiAgfSk7XG59XG5cbi8qKlxuICogRHJvcCBhIGNvbHVtbiBhbmQgdGhlIGxheWVycywgZmlsdGVycywgYW5kIG90aGVyIHJlZmVyZW5jZXMgdGhhdCByZXF1aXJlZCBpdC5cbiAqIFRoZSBsYXN0IHJlbWFpbmluZyBjb2x1bW4gaXMga2VwdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZVRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5EZWxldGVUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgZmllbGROYW1lfSA9IGFjdGlvbjtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCB8fCAhY2FuTXV0YXRlRGF0YXNldFNjaGVtYShkYXRhc2V0KSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwYXlsb2FkID0gYnVpbGREZWxldGVDb2x1bW5EYXRhKGRhdGFzZXQsIGZpZWxkTmFtZSk7XG4gIGlmICghcGF5bG9hZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gdXBkYXRlRGF0YXNldFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBkYXRhSWQsXG4gICAgZGF0YTogcGF5bG9hZC5kYXRhLFxuICAgIHJlbmFtZXM6IHBheWxvYWQucmVuYW1lc1xuICB9KTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIHNwZWNpZmljIG1hcCBjbG9zaW5nIGljb25cbiAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNsb3NlIHRoZSBzZWxlY3RlZCBtYXBcbiAqIGFuZCB3aWxsIG1lcmdlIHRoZSByZW1haW5pbmcgb25lIHdpdGggdGhlIGdsb2JhbCBzdGF0ZVxuICogVE9ETzogaSB0aGluayBpbiB0aGUgZnV0dXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbWVyZ2UgbWFwIGxheWVycyB3aXRoIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gYWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4PFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICAvLyByZXRyaWV2ZSBsYXllcnMgbWV0YSBkYXRhIGZyb20gdGhlIHJlbWFpbmluZyBtYXAgdGhhdCB3ZSBuZWVkIHRvIGtlZXBcbiAgY29uc3QgaW5kZXhUb1JldHJpZXZlID0gMSAtIGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBtYXBMYXllcnMgPSBzdGF0ZS5zcGxpdE1hcHNbaW5kZXhUb1JldHJpZXZlXT8ubGF5ZXJzO1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuXG4gIC8vIHVwZGF0ZSBsYXllciB2aXNpYmlsaXR5XG4gIGNvbnN0IG5ld0xheWVycyA9IGxheWVycy5tYXAobGF5ZXIgPT5cbiAgICBtYXBMYXllcnMgJiYgIW1hcExheWVyc1tsYXllci5pZF0gJiYgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgaXQgc2hvdWxkIGJlIGluVmlzaWJsZVxuICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogbGF5ZXJcbiAgKTtcblxuICAvLyBkZWxldGUgbWFwXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgc3BsaXRNYXBzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xubGV0IG5leHRGaWxlTG9hZElkID0gMTtcblxuZnVuY3Rpb24gY3JlYXRlRmlsZUxvYWRJZCgpOiBudW1iZXIge1xuICBjb25zdCBsb2FkSWQgPSBuZXh0RmlsZUxvYWRJZDtcbiAgbmV4dEZpbGVMb2FkSWQgKz0gMTtcbiAgcmV0dXJuIGxvYWRJZDtcbn1cblxuZnVuY3Rpb24gZmluaXNoRmlsZUxvYWQoXG4gIG9uRmluaXNoOiAocGF5bG9hZDogYW55LCBvcHRpb25zPzogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc09wdGlvbnMpID0+IGFueSxcbiAgZmlsZUNhY2hlOiBhbnlbXSxcbiAgb3B0aW9uczogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc09wdGlvbnMgfCB1bmRlZmluZWQsXG4gIGxvYWRJZDogbnVtYmVyXG4pIHtcbiAgY29uc3QgYWN0aW9uID0gb3B0aW9ucyA/IG9uRmluaXNoKGZpbGVDYWNoZSwgb3B0aW9ucykgOiBvbkZpbmlzaChmaWxlQ2FjaGUpO1xuICByZXR1cm4gey4uLmFjdGlvbiwgbG9hZElkfTtcbn1cblxuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7ZmlsZXMsIG9uRmluaXNoID0gbG9hZEZpbGVzU3VjY2Vzcywgb3B0aW9uc30gPSBhY3Rpb247XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgY29tcGFuaW9uRmlsZXMgPSBBcnJheS5mcm9tKGZpbGVzKTtcbiAgY29uc3QgZmlsZXNUb0xvYWQgPSBnZXRGaWxlc1RvUGFyc2UoY29tcGFuaW9uRmlsZXMpO1xuXG4gIC8vIEFub3RoZXIgZHJvcCB3aGlsZSBhIGRlZmVycmVkIHBhcnNlIGlzIHJ1bm5pbmcgbXVzdCBqb2luIHRoYXQgbG9hZC5cbiAgLy8gUmVwbGFjaW5nIGBmaWxlTG9hZGluZ2AgbWFrZXMgdGhlIGluLWZsaWdodCBmaWxlIGZpbmlzaCBhZ2FpbnN0IHRoZSBuZXdcbiAgLy8gY2FjaGUgYW5kIGRyb3AgdGhlIGZpbGVzIHRoYXQgd2VyZSBhbHJlYWR5IGJlaW5nIHBhcnNlZC5cbiAgaWYgKHN0YXRlLmZpbGVMb2FkaW5nICYmIHN0YXRlLmZpbGVMb2FkaW5nLm9wdGlvbnM/LmRlZmVyQWRkVG9NYXAgJiYgb3B0aW9ucz8uZGVmZXJBZGRUb01hcCkge1xuICAgIHJldHVybiBhcHBlbmREZWZlcnJlZEZpbGVMb2FkKHN0YXRlLCB7ZmlsZXNUb0xvYWQsIGNvbXBhbmlvbkZpbGVzfSk7XG4gIH1cblxuICBpZiAoIWZpbGVzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIEEgZGVmZXJyZWQgbG9hZCBpcyBhbm90aGVyIGJhdGNoIGZvciB0aGUgc2FtZSBBZGQgRGF0YSBjbGljay4gS2VlcCBmaWxlc1xuICAvLyBhbHJlYWR5IHN0YWdlZCwgYW5kIGtlZXAgdGhlaXIgZXJyb3IgY2FyZHMsIGluc3RlYWQgb2Ygc3RhcnRpbmcgb3Zlci5cbiAgY29uc3QgcHJldmlvdXNFcnJvcnMgPVxuICAgIG9wdGlvbnM/LmRlZmVyQWRkVG9NYXAgJiYgc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1xuICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzcykuZmlsdGVyKChbLCB2YWx1ZV0pID0+IHZhbHVlPy5lcnJvcilcbiAgICAgICAgKVxuICAgICAgOiB7fTtcblxuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gZmlsZXNUb0xvYWQucmVkdWNlKFxuICAgIChhY2N1LCBmLCBpKSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZiwgaSkpKGFjY3UpLFxuICAgIHByZXZpb3VzRXJyb3JzXG4gICk7XG5cbiAgY29uc3QgZmlsZUxvYWRpbmcgPSB7XG4gICAgbG9hZElkOiBjcmVhdGVGaWxlTG9hZElkKCksXG4gICAgZmlsZUNhY2hlOiBbXSxcbiAgICBmaWxlc1RvTG9hZCxcbiAgICBjb21wYW5pb25GaWxlcyxcbiAgICBvbkZpbmlzaCxcbiAgICAuLi4ob3B0aW9ucyA/IHtvcHRpb25zfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IG1lcmdlXyh7XG4gICAgZmlsZUxvYWRpbmdQcm9ncmVzcyxcbiAgICBmaWxlTG9hZGluZyxcbiAgICAuLi4ob3B0aW9ucz8uZGVmZXJBZGRUb01hcCA/IHt9IDoge3N0YWdlZFRvQWRkOiBudWxsfSlcbiAgfSkoc3RhdGUpO1xuXG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIGRyb3AgdG8gdGhlIGRlZmVycmVkIGxvYWQgdGhhdCBpcyBhbHJlYWR5IHBhcnNpbmcuXG4gKiBUaGUgY3VycmVudCBmaWxlIGtlZXBzIGl0cyBjYWNoZTsgdGhlIG5ldyBmaWxlcyBydW4gYWZ0ZXIgaXQuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZERlZmVycmVkRmlsZUxvYWQoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIGZpbGVzVG9Mb2FkLFxuICAgIGNvbXBhbmlvbkZpbGVzXG4gIH06IHtcbiAgICBmaWxlc1RvTG9hZDogRmlsZVtdO1xuICAgIGNvbXBhbmlvbkZpbGVzOiBGaWxlW107XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbG9hZGluZyA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBpZiAoIWxvYWRpbmcgfHwgKCFmaWxlc1RvTG9hZC5sZW5ndGggJiYgIWNvbXBhbmlvbkZpbGVzLmxlbmd0aCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gZmlsZXNUb0xvYWQucmVkdWNlKFxuICAgIChhY2N1LCBmaWxlLCBpbmRleCkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSkoYWNjdSksXG4gICAgc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsZUxvYWRpbmdQcm9ncmVzcyxcbiAgICBmaWxlTG9hZGluZzoge1xuICAgICAgLi4ubG9hZGluZyxcbiAgICAgIGZpbGVzVG9Mb2FkOiBbLi4uQXJyYXkuZnJvbShsb2FkaW5nLmZpbGVzVG9Mb2FkKSwgLi4uZmlsZXNUb0xvYWRdLFxuICAgICAgY29tcGFuaW9uRmlsZXM6IFsuLi4obG9hZGluZy5jb21wYW5pb25GaWxlcyB8fCBbXSksIC4uLmNvbXBhbmlvbkZpbGVzXVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBTdWNlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlTmFtZSwgZmlsZUNhY2hlfSA9IGFjdGlvbjtcbiAgY29uc3QgbG9hZElkID0gc3RhdGUuZmlsZUxvYWRpbmcubG9hZElkO1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAnRG9uZSd9XG4gIH0pO1xuXG4gIC8vIHNhdmUgcHJvY2Vzc2VkIGZpbGUgdG8gZmlsZUNhY2hlXG4gIGNvbnN0IHN0YXRlV2l0aENhY2hlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlQ2FjaGV9KSkoc3RhdGVXaXRoUHJvZ3Jlc3MpO1xuXG4gIC8vIERlY2lkZSBhZnRlciB0aGUgcGF1c2UsIGFuZCBvbmx5IGZvciB0aGlzIGxvYWQuIEEgZHJvcCBkdXJpbmcgdGhlc2VcbiAgLy8gMjAwbXMgam9pbnMgdGhlIHF1ZXVlOyBjYW5jZWwgb3IgYSBuZXdlciBsb2FkIG1ha2VzIHRoaXMgY29udGludWF0aW9uIHN0YWxlLlxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoQ2FjaGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcCgoKSA9PiBsb2FkTmV4dEZpbGUobG9hZElkKSlcbiAgKTtcbn1cblxuLy8gd2l0aFRhc2s8VD4oc3RhdGU6IFQsIHRhc2s6IGFueSk6IFRcblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZVVwZGF0ZXIoc3RhdGU6IFZpc1N0YXRlLCBhY3Rpb24/OiB7bG9hZElkPzogbnVtYmVyfSk6IFZpc1N0YXRlIHtcbiAgY29uc3QgbG9hZElkID0gYWN0aW9uPy5sb2FkSWQ7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcgfHwgKGxvYWRJZCAhPSBudWxsICYmIHN0YXRlLmZpbGVMb2FkaW5nLmxvYWRJZCAhPT0gbG9hZElkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNoLCBmaWxlQ2FjaGUsIG9wdGlvbnMsIGxvYWRJZDogY3VycmVudExvYWRJZH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgaWYgKCFmaWxlc1RvTG9hZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLKCkubWFwKCgpID0+IGZpbmlzaEZpbGVMb2FkKG9uRmluaXNoLCBmaWxlQ2FjaGUsIG9wdGlvbnMsIGN1cnJlbnRMb2FkSWQpKVxuICAgICk7XG4gIH1cbiAgY29uc3QgW2ZpbGUsIC4uLnJlbWFpbmluZ0ZpbGVzVG9Mb2FkXSA9IGZpbGVzVG9Mb2FkO1xuXG4gIC8vIHNhdmUgZmlsZXNUb0xvYWQgdG8gc3RhdGVcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlc1RvTG9hZDogcmVtYWluaW5nRmlsZXNUb0xvYWR9KSkoc3RhdGUpO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDAsIG1lc3NhZ2U6ICdsb2FkaW5nLi4uJ31cbiAgfSk7XG5cbiAgY29uc3Qge2xvYWRlcnMsIGxvYWRPcHRpb25zfSA9IHN0YXRlO1xuICBpZiAoaXNaaXBGaWxlTmFtZShmaWxlLm5hbWUpKSB7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgICBFWFBBTkRfWklQX1RBU0soe2ZpbGUsIGV4dGVuc2lvbnM6IGRhdGFzZXRFeHRlbnNpb25zRnJvbUxvYWRlcnMobG9hZGVycyl9KS5iaW1hcChcbiAgICAgICAgZXhwYW5zaW9uID0+XG4gICAgICAgICAgZXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3Moe1xuICAgICAgICAgICAgbG9hZElkOiBjdXJyZW50TG9hZElkLFxuICAgICAgICAgICAgYXJjaGl2ZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgIGV4cGFuc2lvblxuICAgICAgICAgIH0pLFxuICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGUubmFtZSwgZXJyLCBjdXJyZW50TG9hZElkKVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIG1ha2VMb2FkRmlsZVRhc2soXG4gICAgICBmaWxlLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nICYmIG5leHRTdGF0ZS5maWxlTG9hZGluZy5maWxlQ2FjaGUsXG4gICAgICBsb2FkZXJzLFxuICAgICAgbG9hZE9wdGlvbnMsXG4gICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgPyBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuY29tcGFuaW9uRmlsZXMgOiB1bmRlZmluZWQsXG4gICAgICBvcHRpb25zXG4gICAgKVxuICApO1xufVxuXG5mdW5jdGlvbiBkYXRhc2V0RXh0ZW5zaW9uc0Zyb21Mb2FkZXJzKFxuICBsb2FkZXJzOiBBcnJheTx7ZXh0ZW5zaW9ucz86IHJlYWRvbmx5IHN0cmluZ1tdfT4gPSBbXVxuKTogc3RyaW5nW10ge1xuICBjb25zdCBleHRlbnNpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgbG9hZGVyIG9mIGxvYWRlcnMpIHtcbiAgICBmb3IgKGNvbnN0IGV4dGVuc2lvbiBvZiBsb2FkZXI/LmV4dGVuc2lvbnMgfHwgW10pIHtcbiAgICAgIGNvbnN0IGV4dCA9IFN0cmluZyhleHRlbnNpb24pLnJlcGxhY2UoL15cXC4vLCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoIWV4dCB8fCBleHQgPT09ICd6aXAnIHx8IHNlZW4uaGFzKGV4dCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChleHQpO1xuICAgICAgZXh0ZW5zaW9ucy5wdXNoKGV4dCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBleHRlbnNpb25zO1xufVxuXG5mdW5jdGlvbiBjb21wYW5pb25GaWxlc0ZvckFyY2hpdmUoZXhwYW5zaW9uOiBaaXBBcmNoaXZlRXhwYW5zaW9uLCBleGlzdGluZz86IEZpbGVbXSk6IEZpbGVbXSB7XG4gIGNvbnN0IGV4dHJhY3RlZCA9XG4gICAgZXhwYW5zaW9uLmtpbmQgPT09ICdzaGFwZWZpbGUnXG4gICAgICA/IFtleHBhbnNpb24uc2hhcGVmaWxlLCAuLi5leHBhbnNpb24uY29tcGFuaW9uc11cbiAgICAgIDogWy4uLmV4cGFuc2lvbi5kYXRhc2V0cywgLi4uZXhwYW5zaW9uLmNvbXBhbmlvbnNdO1xuICByZXR1cm4gWy4uLmV4dHJhY3RlZCwgLi4uKGV4aXN0aW5nIHx8IFtdKV07XG59XG5cbmZ1bmN0aW9uIHdpdGhvdXRGaWxlTG9hZGluZ1Byb2dyZXNzRW50cnkoXG4gIHByb2dyZXNzOiBWaXNTdGF0ZVsnZmlsZUxvYWRpbmdQcm9ncmVzcyddLFxuICBmaWxlTmFtZTogc3RyaW5nXG4pOiBWaXNTdGF0ZVsnZmlsZUxvYWRpbmdQcm9ncmVzcyddIHtcbiAgaWYgKCFwcm9ncmVzcyB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb2dyZXNzLCBmaWxlTmFtZSkpIHtcbiAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gIH1cbiAgY29uc3QgbmV4dCA9IHsuLi5wcm9ncmVzc307XG4gIGRlbGV0ZSBuZXh0W2ZpbGVOYW1lXTtcbiAgcmV0dXJuIG5leHQ7XG59XG5cbi8qKlxuICogQXBwbHkgYW4gdW5wYWNrZWQgemlwLiBPbmUgc2hhcGVmaWxlIGtlZXBzIHRoZSBhcmNoaXZlIG5hbWUuIEFueSBvdGhlclxuICogbWl4IGlzIHF1ZXVlZCBhcyBvbmUgZGF0YXNldCBwZXIgc3VwcG9ydGVkIG1lbWJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZFppcEFyY2hpdmVTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5FeHBhbmRaaXBBcmNoaXZlU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBsb2FkaW5nID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGlmICghbG9hZGluZyB8fCBsb2FkaW5nLmxvYWRJZCAhPT0gYWN0aW9uLmxvYWRJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7YXJjaGl2ZU5hbWUsIGV4cGFuc2lvbn0gPSBhY3Rpb247XG4gIGNvbnN0IGNvbXBhbmlvbkZpbGVzID0gY29tcGFuaW9uRmlsZXNGb3JBcmNoaXZlKGV4cGFuc2lvbiwgbG9hZGluZy5jb21wYW5pb25GaWxlcyk7XG5cbiAgaWYgKGV4cGFuc2lvbi5raW5kID09PSAnc2hhcGVmaWxlJykge1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7Y29tcGFuaW9uRmlsZXN9KSkoc3RhdGUpO1xuICAgIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBuZXh0U3RhdGUsXG4gICAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgICBleHBhbnNpb24uc2hhcGVmaWxlLFxuICAgICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgJiYgbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmZpbGVDYWNoZSxcbiAgICAgICAgbG9hZGVycyxcbiAgICAgICAgbG9hZE9wdGlvbnMsXG4gICAgICAgIGNvbXBhbmlvbkZpbGVzLFxuICAgICAgICBsb2FkaW5nLm9wdGlvbnMsXG4gICAgICAgIGFyY2hpdmVOYW1lXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRzID0gZXhwYW5zaW9uLmRhdGFzZXRzO1xuICBjb25zdCBmaWxlc1RvTG9hZCA9IFsuLi5kYXRhc2V0cywgLi4uQXJyYXkuZnJvbShsb2FkaW5nLmZpbGVzVG9Mb2FkKV07XG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBkYXRhc2V0cy5yZWR1Y2UoXG4gICAgKGFjY3UsIGZpbGUsIGluZGV4KSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpKShhY2N1KSxcbiAgICB3aXRob3V0RmlsZUxvYWRpbmdQcm9ncmVzc0VudHJ5KHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3MsIGFyY2hpdmVOYW1lKVxuICApO1xuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsZUxvYWRpbmdQcm9ncmVzcyxcbiAgICBmaWxlTG9hZGluZzoge1xuICAgICAgLi4ubG9hZGluZyxcbiAgICAgIGZpbGVzVG9Mb2FkLFxuICAgICAgY29tcGFuaW9uRmlsZXNcbiAgICB9XG4gIH07XG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSwge2xvYWRJZDogYWN0aW9uLmxvYWRJZH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvYWRGaWxlVGFzayhcbiAgZmlsZSxcbiAgZmlsZUNhY2hlLFxuICBsb2FkZXJzOiBMb2FkZXJbXSA9IFtdLFxuICBsb2FkT3B0aW9ucyA9IHt9LFxuICBjb21wYW5pb25GaWxlcz86IEZpbGVbXSxcbiAgYWRkRGF0YU9wdGlvbnM/OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzT3B0aW9ucyxcbiAgZmlsZU5hbWU/OiBzdHJpbmdcbikge1xuICBjb25zdCBkaXNwbGF5TmFtZSA9IGZpbGVOYW1lIHx8IGZpbGUubmFtZTtcbiAgcmV0dXJuIExPQURfRklMRV9UQVNLKHtcbiAgICBmaWxlLFxuICAgIGZpbGVDYWNoZSxcbiAgICBsb2FkZXJzLFxuICAgIGxvYWRPcHRpb25zLFxuICAgIGNvbXBhbmlvbkZpbGVzLFxuICAgIC4uLihmaWxlTmFtZSA/IHtmaWxlTmFtZX0gOiB7fSlcbiAgfSkuYmltYXAoXG4gICAgLy8gcHJldHRpZXIgaWdub3JlXG4gICAgLy8gc3VjY2Vzc1xuICAgIGdlbiA9PlxuICAgICAgbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgIGdlbixcbiAgICAgICAgZmlsZU5hbWU6IGRpc3BsYXlOYW1lLFxuICAgICAgICBvbkZpbmlzaDogcmVzdWx0ID0+XG4gICAgICAgICAgcHJvY2Vzc0ZpbGVDb250ZW50KHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGZpbGVDYWNoZVxuICAgICAgICAgIH0pLFxuICAgICAgICAuLi4oYWRkRGF0YU9wdGlvbnMgPyB7b3B0aW9uczogYWRkRGF0YU9wdGlvbnN9IDoge30pXG4gICAgICB9KSxcblxuICAgIC8vIGVycm9yXG4gICAgZXJyID0+IGxvYWRGaWxlc0VycihkaXNwbGF5TmFtZSwgZXJyKVxuICApO1xufVxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Qcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb250ZW50LCBmaWxlQ2FjaGV9ID0gYWN0aW9uLnBheWxvYWQ7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ3Byb2Nlc3NpbmcuLi4nfVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQsIGZpbGVDYWNoZX0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+IGxvYWRGaWxlU3RlcFN1Y2Nlc3Moe2ZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLCBmaWxlQ2FjaGU6IHJlc3VsdH0pLFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0Vycihjb250ZW50LmZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICApO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQcm9ncmVzcyhwcmV2UHJvZ3Jlc3MgPSB7fSwgcHJvZ3Jlc3MpIHtcbiAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gcmVjZWl2aW5nIHF1ZXJ5IG1ldGFkYXRhIG9yIG90aGVyIGNhc2VzIHdlIGRvbid0XG4gIC8vIGhhdmUgYW4gdXBkYXRlIGZvciB0aGUgdXNlci5cbiAgaWYgKCFwcm9ncmVzcyB8fCAhcHJvZ3Jlc3MucGVyY2VudCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGVyY2VudDogcHJvZ3Jlc3MucGVyY2VudFxuICB9O1xufVxuXG4vKipcbiAqIGdldHMgY2FsbGVkIHdpdGggcGF5bG9hZCA9IEFzeW5jR2VuZXJhdG9yPD8/Pz5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBuZXh0RmlsZUJhdGNoVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2dlbiwgZmlsZU5hbWUsIHByb2dyZXNzLCBhY2N1bXVsYXRlZCwgb25GaW5pc2gsIG9wdGlvbnN9XG4gIH06IFZpc1N0YXRlQWN0aW9ucy5OZXh0RmlsZUJhdGNoVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHBhcnNlUHJvZ3Jlc3Moc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1tmaWxlTmFtZV0sIHByb2dyZXNzKVxuICB9KTtcblxuICBjb25zdCBkZWZlckFkZFRvTWFwID0gQm9vbGVhbihvcHRpb25zPy5kZWZlckFkZFRvTWFwKTtcblxuICByZXR1cm4gd2l0aFRhc2soc3RhdGVXaXRoUHJvZ3Jlc3MsIFtcbiAgICAuLi4oZ2V0QXBwbGljYXRpb25Db25maWcoKS51c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyAmJlxuICAgICFkZWZlckFkZFRvTWFwICYmXG4gICAgZmlsZU5hbWUuZW5kc1dpdGgoJ2Fycm93JykgJiZcbiAgICBhY2N1bXVsYXRlZD8uZGF0YT8ubGVuZ3RoID4gMFxuICAgICAgPyBbXG4gICAgICAgICAgLy8gU2tpcCBjb21wYWN0aW9uIHdoaWxlIGJhdGNoZXMgYXJlIHN0aWxsIGFycml2aW5nLiBUaGUgY29tcGxldGVkXG4gICAgICAgICAgLy8gZmlsZSBpcyBjb21wYWN0ZWQgb25jZSBpbiBwcm9jZXNzRmlsZUNvbnRlbnQuXG4gICAgICAgICAgUFJPQ0VTU19GSUxFX0RBVEEoe1xuICAgICAgICAgICAgY29udGVudDogey4uLmFjY3VtdWxhdGVkLCBza2lwQXJyb3dDb21wYWN0OiB0cnVlfSxcbiAgICAgICAgICAgIGZpbGVDYWNoZTogW11cbiAgICAgICAgICB9KS5iaW1hcChcbiAgICAgICAgICAgIHJlc3VsdCA9PiAob3B0aW9ucyA/IGxvYWRGaWxlc1N1Y2Nlc3MocmVzdWx0LCBvcHRpb25zKSA6IGxvYWRGaWxlc1N1Y2Nlc3MocmVzdWx0KSksXG4gICAgICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICA6IFtdKSxcbiAgICBVTldSQVBfVEFTSyhnZW4ubmV4dCgpKS5iaW1hcChcbiAgICAgICh7dmFsdWUsIGRvbmV9KSA9PiB7XG4gICAgICAgIHJldHVybiBkb25lXG4gICAgICAgICAgPyBvbkZpbmlzaChhY2N1bXVsYXRlZClcbiAgICAgICAgICA6IG5leHRGaWxlQmF0Y2goe1xuICAgICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICBwcm9ncmVzczogdmFsdWUucHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgb25GaW5pc2gsXG4gICAgICAgICAgICAgIC4uLihvcHRpb25zID8ge29wdGlvbnN9IDoge30pXG4gICAgICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICBdKTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsb2FkaW5nIGZpbGUgZXJyb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8qKlxuICogRHJvcCBmaWxlcyB3YWl0aW5nIG9uIHRoZSBBZGQgRGF0YSBidXR0b24gYW5kIGFib3J0IGFuIGluLXByb2dyZXNzIG1vZGFsIGxvYWQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY2xlYXJTdGFnZWRMb2FkZWRGaWxlc1VwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gIHN0YWdlZFRvQWRkOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBmaWxlTmFtZSwgbG9hZElkOiBlcnJvckxvYWRJZH06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcgfHwgKGVycm9yTG9hZElkICE9IG51bGwgJiYgc3RhdGUuZmlsZUxvYWRpbmcubG9hZElkICE9PSBlcnJvckxvYWRJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gdXBkYXRlIHVpIHdpdGggZXJyb3IgbWVzc2FnZVxuICBDb25zb2xlLndhcm4oZXJyb3IpO1xuICBjb25zdCBsb2FkSWQgPSBzdGF0ZS5maWxlTG9hZGluZy5sb2FkSWQ7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge2Vycm9yfVxuICB9KTtcblxuICAvLyBTYW1lIHBhdXNlIGFzIGEgc3VjY2Vzc2Z1bCBmaWxlLiBSZS1jaGVjayB0aGlzIGxvYWQncyBxdWV1ZSB3aGVuIGl0IGVuZHMuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBuZXh0U3RhdGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcCgoKSA9PiBsb2FkTmV4dEZpbGUobG9hZElkKSlcbiAgKTtcbn07XG5cbi8qKlxuICogV2hlbiBzZWxlY3QgZGF0YXNldCBmb3IgZXhwb3J0LCBhcHBseSBjcHUgZmlsdGVyIHRvIHNlbGVjdGVkIGRhdGFzZXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseUNQVUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5BcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYXBwbHkgY3B1RmlsdGVyXG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2N1LCBpZCkgPT4gZmlsdGVyRGF0YXNldENQVShhY2N1LCBpZCksIHN0YXRlKTtcbn07XG5cbi8qKlxuICogVXNlciBpbnB1dCB0byB1cGRhdGUgdGhlIGluZm8gb2YgdGhlIG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcEluZm9VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldE1hcEluZm9VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG5leHQgPSB7Li4uc3RhdGUubWFwSW5mbywgLi4uYWN0aW9uLmluZm99O1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIG1hcEluZm86IHtcbiAgICAgIHRpdGxlOiBvcHRpb25hbE1hcFRleHQobmV4dC50aXRsZSksXG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9uYWxNYXBUZXh0KG5leHQuZGVzY3JpcHRpb24pXG4gICAgfVxuICB9O1xufTtcbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBBbGwgbGF5ZXIgZG9tYWluIGFuZCBsYXllciBkYXRhIG9mIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0TGF5ZXJzKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFzZXRzOiBEYXRhc2V0c1xuKToge3N0YXRlOiBWaXNTdGF0ZTsgbmV3TGF5ZXJzOiBMYXllcltdfSB7XG4gIGNvbnN0IGVtcHR5OiBMYXllcltdID0gW107XG4gIGNvbnN0IGRlZmF1bHRMYXllcnMgPSBPYmplY3QudmFsdWVzKGRhdGFzZXRzKS5yZWR1Y2UoKGFjY3U6IExheWVyW10sIGRhdGFzZXQpID0+IHtcbiAgICBjb25zdCBmb3VuZExheWVycyA9IGZpbmREZWZhdWx0TGF5ZXIoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgICByZXR1cm4gZm91bmRMYXllcnMgJiYgZm91bmRMYXllcnMubGVuZ3RoID8gYWNjdS5jb25jYXQoZm91bmRMYXllcnMpIDogYWNjdTtcbiAgfSwgZW1wdHkpO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdGU6IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCAuLi5kZWZhdWx0TGF5ZXJzXSxcbiAgICAgIGxheWVyT3JkZXI6IFtcbiAgICAgICAgLy8gcHV0IG5ldyBsYXllcnMgb24gdG9wIG9mIG9sZCBvbmVzIGluIHJldmVyc2VcbiAgICAgICAgLi4uZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMoZGVmYXVsdExheWVycyksXG4gICAgICAgIC4uLnN0YXRlLmxheWVyT3JkZXJcbiAgICAgIF1cbiAgICB9LFxuICAgIG5ld0xheWVyczogZGVmYXVsdExheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIGhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGRlZmF1bHQgdG9vbHRpcHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdFRvb2x0aXBzKHN0YXRlLCBkYXRhc2V0KSB7XG4gIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBmaW5kRmllbGRzVG9TaG93KHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIG1heERlZmF1bHRUb29sdGlwczogc3RhdGUubWF4RGVmYXVsdFRvb2x0aXBzXG4gIH0pO1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LFxuICAgIC4uLnRvb2x0aXBGaWVsZHNcbiAgfTtcblxuICByZXR1cm4gc2V0KFsnaW50ZXJhY3Rpb25Db25maWcnLCAndG9vbHRpcCcsICdjb25maWcnLCAnZmllbGRzVG9TaG93J10sIG1lcmdlZCwgc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpIHtcbiAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUgfHwgYFVudGl0bGVkIEZpbGUgJHtpbmRleH1gO1xuICByZXR1cm4ge1xuICAgIFtmaWxlTmFtZV06IHtcbiAgICAgIC8vIHBlcmNlbnQgb2YgY3VycmVudCBmaWxlXG4gICAgICBwZXJjZW50OiAwLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtmaWxlTmFtZSwgcHJvZ3Jlc3N9KSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIHBpY2tfKCdmaWxlTG9hZGluZ1Byb2dyZXNzJykocGlja18oZmlsZU5hbWUpKG1lcmdlXyhwcm9ncmVzcykpKShzdGF0ZSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgbGF5ZXIgZG9tYWlucyBmb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YTxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgdXBkYXRlZEZpbHRlcj86IEZpbHRlclxuKTogUyB7XG4gIGNvbnN0IGRhdGFJZHMgPSB0eXBlb2YgZGF0YUlkID09PSAnc3RyaW5nJyA/IFtkYXRhSWRdIDogZGF0YUlkO1xuICBjb25zdCBuZXdMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKChvbGRMYXllciwgaSkgPT4ge1xuICAgIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkICYmIGRhdGFJZHMuaW5jbHVkZXMob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgbGF5ZXIgZG9tYWluIGlmIGZpbHRlciBoYXMgZml4ZWQgZG9tYWluXG4gICAgICBjb25zdCBuZXdMYXllciA9XG4gICAgICAgIHVwZGF0ZWRGaWx0ZXIgJiYgdXBkYXRlZEZpbHRlci5maXhlZERvbWFpblxuICAgICAgICAgID8gb2xkTGF5ZXJcbiAgICAgICAgICA6IG9sZExheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzLCB1cGRhdGVkRmlsdGVyKTtcblxuICAgICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2ldKTtcblxuICAgICAgbmV3TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2gobGF5ZXJEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJzLnB1c2gob2xkTGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2goc3RhdGUubGF5ZXJEYXRhW2ldKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV3TGF5ZXJEYXRhXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQW5pbWF0aW9uRG9tYWluPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMpOiBTIHtcbiAgLy8gbWVyZ2UgYWxsIGFuaW1hdGFibGUgbGF5ZXIgZG9tYWluIGFuZCB1cGRhdGUgZ2xvYmFsIGNvbmZpZ1xuICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgZG9tYWluOiBudWxsLFxuICAgICAgICBpc0FuaW1hdGluZzogZmFsc2UsXG4gICAgICAgIHRpbWVTdGVwczogbnVsbCxcbiAgICAgICAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGF5ZXJEb21haW5zID0gYW5pbWF0YWJsZUxheWVycy5tYXAobCA9PiBsLmNvbmZpZy5hbmltYXRpb24uZG9tYWluIHx8IFtdKTtcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBtZXJnZWREb21haW4gPSBtZXJnZVRpbWVEb21haW5zKGxheWVyRG9tYWlucyk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lRm9ybWF0ID0gZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyKG1lcmdlZERvbWFpbik7XG5cbiAgLy8gbWVyZ2UgdGltZVN0ZXBzXG4gIGxldCBtZXJnZWRUaW1lU3RlcHM6IG51bWJlcltdIHwgbnVsbCA9IHVuaXE8bnVtYmVyPihcbiAgICBhbmltYXRhYmxlTGF5ZXJzLnJlZHVjZSgoYWNjdSwgbGF5ZXIpID0+IHtcbiAgICAgIGFjY3UucHVzaCguLi4obGF5ZXIuY29uZmlnLmFuaW1hdGlvbi50aW1lU3RlcHMgfHwgW10pKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sIFtdKVxuICApLnNvcnQoKTtcblxuICBtZXJnZWRUaW1lU3RlcHMgPSBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoID8gbWVyZ2VkVGltZVN0ZXBzIDogbnVsbDtcblxuICAvLyBUT0RPOiBiZXR0ZXIgaGFuZGxpbmcgb2YgZHVyYXRpb24gY2FsY3VsYXRpb25cbiAgY29uc3QgZHVyYXRpb24gPSBtZXJnZWRUaW1lU3RlcHNcbiAgICA/IChCQVNFX1NQRUVEICogKDEwMDAgLyBGUFMpKSAvIG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggLyAoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnNwZWVkIHx8IDEpXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGRvbWFpbjogbWVyZ2VkRG9tYWluLFxuICAgICAgZGVmYXVsdFRpbWVGb3JtYXQsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRpbWVTdGVwczogbWVyZ2VkVGltZVN0ZXBzXG4gICAgfVxuICB9O1xuXG4gIC8vIHJlc2V0IGN1cnJlbnRUaW1lIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgY29uc3Qgc3luY2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycz8uZmluZChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIGFzXG4gICAgfCBUaW1lUmFuZ2VGaWx0ZXJcbiAgICB8IHVuZGVmaW5lZDtcblxuICAvLyBpZiBzeW5jZWQgZmlsdGVyIGV4aXN0IHdlZSBuZWVkIHRvIG1lcmdlIGFuaW1hdGlvbkNvbmZpZyBhbmQgZmlsdGVyIGRvbWFpbnNcbiAgLy8gYW5kIHZhbGlkYXRlIHRoZSBjdXJyZW50IHRpbWUgYWdhaW5zdCB0aGUgbmV3IG1lcmdlZCBkb21haW5cbiAgY29uc3QgbmV3QW5pbWF0aW9uRG9tYWluID0gc3luY2VkRmlsdGVyXG4gICAgPyBtZXJnZVRpbWVEb21haW5zKFttZXJnZWREb21haW4sIHN5bmNlZEZpbHRlci5kb21haW5dKVxuICAgIDogbWVyZ2VkRG9tYWluO1xuICBjb25zdCBjdXJyZW50VGltZSA9IGlzSW5SYW5nZShzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUsIG5ld0FuaW1hdGlvbkRvbWFpbilcbiAgICA/IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgIDogbmV3QW5pbWF0aW9uRG9tYWluWzBdO1xuXG4gIGlmIChjdXJyZW50VGltZSAhPT0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lKSB7XG4gICAgLy8gaWYgY3VycmVudFRpbWUgY2hhbmdlZCwgbmVlZCB0byBjYWxsIGFuaW1hdGlvblRpbWVVcGRhdGVyIHRvIHJlIGNhbGwgZm9ybWF0TGF5ZXJEYXRhXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV4dFN0YXRlLCB7dmFsdWU6IGN1cnJlbnRUaW1lfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc3RhdHVzIG9mIHRoZSBlZGl0b3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFZGl0b3JNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bW9kZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JNb2RlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBza2V0Y2hlc0VuYWJsZWQgPSBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzO1xuICBpZiAoXG4gICAgIXNrZXRjaGVzRW5hYmxlZCAmJlxuICAgIChtb2RlID09PSBFRElUT1JfTU9ERVMuRFJBV19QT0lOVCB8fCBtb2RlID09PSBFRElUT1JfTU9ERVMuRFJBV19MSU5FU1RSSU5HKVxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgbW9kZSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcbn07XG5cbi8vIGNvbnN0IGZlYXR1cmVUb0ZpbHRlclZhbHVlID0gKGZlYXR1cmUpID0+ICh7Li4uZmVhdHVyZSwgaWQ6IGZlYXR1cmUuaWR9KTtcbi8qKlxuICogVXBkYXRlIGVkaXRvciBmZWF0dXJlc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZlYXR1cmVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZXMgPSBbXX06IFZpc1N0YXRlQWN0aW9ucy5TZXRGZWF0dXJlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbGFzdEZlYXR1cmUgPSBmZWF0dXJlcy5sZW5ndGggJiYgZmVhdHVyZXNbZmVhdHVyZXMubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAvLyBvbmx5IHNhdmUgbm9uZSBmaWx0ZXIgZmVhdHVyZXMgdG8gZWRpdG9yXG4gICAgICBmZWF0dXJlczogZmVhdHVyZXMuZmlsdGVyKGYgPT4gIWdldEZpbHRlcklkSW5GZWF0dXJlKGYpKSxcbiAgICAgIG1vZGU6XG4gICAgICAgIGxhc3RGZWF0dXJlICYmIGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LmlzQ2xvc2VkXG4gICAgICAgICAgPyBsYXN0RmVhdHVyZS5wcm9wZXJ0aWVzPy5zaGFwZSA9PT0gJ1JlY3RhbmdsZSdcbiAgICAgICAgICAgID8gc3RhdGUuZWRpdG9yLm1vZGVcbiAgICAgICAgICAgIDogRURJVE9SX01PREVTLkVESVRcbiAgICAgICAgICA6IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHJpZXZlIGV4aXN0aW5nIGZlYXR1cmVcbiAgY29uc3Qge3NlbGVjdGVkRmVhdHVyZX0gPSBzdGF0ZS5lZGl0b3I7XG5cbiAgLy8gSWYgbm8gZmVhdHVyZSBpcyBzZWxlY3RlZCB3ZSBjYW4gc2ltcGx5IHJldHVybiBzaW5jZSBubyBvcGVyYXRpb25zXG4gIGlmICghc2VsZWN0ZWRGZWF0dXJlKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gVE9ETzogY2hlY2sgaWYgdGhlIGZlYXR1cmUgaGFzIGNoYW5nZWRcbiAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzLmZpbmQoZiA9PiBmLmlkID09PSBzZWxlY3RlZEZlYXR1cmUuaWQpO1xuXG4gIC8vIGlmIGZlYXR1cmUgaXMgcGFydCBvZiBhIGZpbHRlclxuICBjb25zdCBmaWx0ZXJJZCA9IGZlYXR1cmUgJiYgZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCAmJiBmZWF0dXJlKSB7XG4gICAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICAgIGlmIChmZWF0dXJlLnByb3BlcnRpZXMpIGZlYXR1cmUucHJvcGVydGllcy5iYm94ID0gYmJveChmZWF0dXJlIGFzIHVua25vd24gYXMgQWxsR2VvSlNPTik7XG4gICAgY29uc3QgZmVhdHVyZVZhbHVlID0gZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVySWQpO1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGZpbCA9PiBmaWwuaWQgPT09IGZpbHRlcklkKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBmZWF0dXJlVmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gZmluZEVkaXRvckZlYXR1cmUoc3RhdGU6IFZpc1N0YXRlLCBmZWF0dXJlPzogRmVhdHVyZSB8IG51bGwpOiBGZWF0dXJlIHwgbnVsbCB7XG4gIGlmICghZmVhdHVyZT8uaWQpIHtcbiAgICByZXR1cm4gZmVhdHVyZSB8fCBudWxsO1xuICB9XG4gIGlmIChzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlPy5pZCA9PT0gZmVhdHVyZS5pZCkge1xuICAgIHJldHVybiBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlO1xuICB9XG4gIGNvbnN0IGZyb21FZGl0b3IgPSBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGZlYXR1cmUuaWQpO1xuICBpZiAoZnJvbUVkaXRvcikge1xuICAgIHJldHVybiBmcm9tRWRpdG9yO1xuICB9XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGZpbHRlcklkKTtcbiAgICBpZiAoZmlsdGVyPy52YWx1ZSkge1xuICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZlYXR1cmU7XG59XG5cbi8qKlxuICogU2V0IHVzZXItZmFjaW5nIEdlb0pTT04gcHJvcGVydGllcyBvbiBhIHNrZXRjaCBvciBwb2x5Z29uLWZpbHRlciBmZWF0dXJlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgcHJvcGVydGllc306IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgc291cmNlID0gZmluZEVkaXRvckZlYXR1cmUoc3RhdGUsIGZlYXR1cmUpO1xuICBpZiAoIXNvdXJjZT8uaWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RmVhdHVyZSA9IG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzKHNvdXJjZSwgcHJvcGVydGllcyk7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUobmV4dEZlYXR1cmUpO1xuICBjb25zdCBuZXh0RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogZmlsdGVySWRcbiAgICAgID8gc3RhdGUuZWRpdG9yLmZlYXR1cmVzXG4gICAgICA6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5tYXAoaXRlbSA9PiAoaXRlbS5pZCA9PT0gbmV4dEZlYXR1cmUuaWQgPyBuZXh0RmVhdHVyZSA6IGl0ZW0pKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6XG4gICAgICBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlPy5pZCA9PT0gbmV4dEZlYXR1cmUuaWRcbiAgICAgICAgPyBuZXh0RmVhdHVyZVxuICAgICAgICA6IHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmVcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXh0RWRpdG9yXG4gIH07XG5cbiAgaWYgKCFmaWx0ZXJJZCkge1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA8IDApIHtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUobmV4dEZlYXR1cmUsIGZpbHRlcklkKVxuICB9KTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmVhdHVyZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgc2VsZWN0aW9uQ29udGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgbGV0IHNlbGVjdGVkRmVhdHVyZSA9IGZlYXR1cmU7XG4gIGlmIChmZWF0dXJlPy5wcm9wZXJ0aWVzKSB7XG4gICAgc2VsZWN0ZWRGZWF0dXJlID0ge1xuICAgICAgLi4uZmVhdHVyZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICBiYm94OiBiYm94KGZlYXR1cmUgYXMgdW5rbm93biBhcyBBbGxHZW9KU09OKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZSxcbiAgICAgIHNlbGVjdGlvbkNvbnRleHRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIERlbGV0ZSBleGlzdGluZyBmZWF0dXJlIGZyb20gZmlsdGVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZlYXR1cmVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlfTogVmlzU3RhdGVBY3Rpb25zLkRlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZmVhdHVyZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgfVxuICB9O1xuXG4gIGlmIChnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSkge1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpO1xuXG4gICAgcmV0dXJuIGZpbHRlcklkeCA+IC0xID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSkgOiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIG1vZGlmeSBlZGl0b3Igb2JqZWN0XG4gIGNvbnN0IG5ld0VkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV3RWRpdG9yXG4gIH07XG59XG5cbi8qKlxuICogVG9nZ2xlIGZlYXR1cmUgYXMgbGF5ZXIgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmV9ID0gcGF5bG9hZDtcbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcblxuICAvLyBsZXQgbmV3RmlsdGVyID0gbnVsbDtcbiAgbGV0IGZpbHRlcklkeDtcbiAgbGV0IG5ld0xheWVySWQgPSBbbGF5ZXIuaWRdO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgLy8gSWYgcG9seWdvbiBmaWx0ZXIgYWxyZWFkeSBleGlzdHMsIHdlIG5lZWQgdG8gZmluZCBvdXQgaWYgdGhlIGN1cnJlbnQgbGF5ZXIgaXMgYWxyZWFkeSBpbmNsdWRlZFxuICBpZiAoZmlsdGVySWQpIHtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcblxuICAgIGlmICghc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdKSB7XG4gICAgICAvLyB3aGF0IGlmIGZpbHRlciBkb2Vzbid0IGV4aXN0Py4uLiBub3QgcG9zc2libGUuXG4gICAgICAvLyBiZWNhdXNlIGZlYXR1cmVzIGluIHRoZSBlZGl0b3IgaXMgcGFzc2VkIGluIGZyb20gZmlsdGVycyBhbmQgZWRpdG9ycy5cbiAgICAgIC8vIGJ1dCB3ZSB3aWxsIG1vdmUgdGhpcyBmZWF0dXJlIGJhY2sgdG8gZWRpdG9yIGp1c3QgaW4gY2FzZVxuICAgICAgY29uc3Qgbm9uZUZpbHRlckZlYXR1cmUgPSB7XG4gICAgICAgIC4uLmZlYXR1cmUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgZmlsdGVySWQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgbm9uZUZpbHRlckZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbm9uZUZpbHRlckZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICAgIGNvbnN0IHtsYXllcklkID0gW119ID0gZmlsdGVyO1xuICAgIGNvbnN0IGlzTGF5ZXJJbmNsdWRlZCA9IGxheWVySWQuaW5jbHVkZXMobGF5ZXIuaWQpO1xuXG4gICAgbmV3TGF5ZXJJZCA9IGlzTGF5ZXJJbmNsdWRlZFxuICAgICAgPyAvLyBpZiBsYXllciBpcyBpbmNsdWRlZCwgcmVtb3ZlIGl0XG4gICAgICAgIGxheWVySWQuZmlsdGVyKGwgPT4gbCAhPT0gbGF5ZXIuaWQpXG4gICAgICA6IFsuLi5sYXllcklkLCBsYXllci5pZF07XG5cbiAgICAvLyBMYXN0IGxheWVyIHJlbW92ZWQ6IHR1cm4gdGhlIGZpbHRlciBwb2x5Z29uIGJhY2sgaW50byBhIHNrZXRjaFxuICAgIGlmICghbmV3TGF5ZXJJZC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNrZXRjaEZlYXR1cmUgPSB0b1NrZXRjaEZlYXR1cmUoZmVhdHVyZSk7XG4gICAgICBjb25zdCBzdGF0ZVdpdGhvdXRGaWx0ZXIgPSByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlV2l0aG91dEZpbHRlcixcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGVXaXRob3V0RmlsdGVyLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlV2l0aG91dEZpbHRlci5lZGl0b3IuZmVhdHVyZXMsIHNrZXRjaEZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogc2tldGNoRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBpZiB3ZSBoYXZlbid0IGNyZWF0ZSB0aGUgcG9seWdvbiBmaWx0ZXIsIGNyZWF0ZSBpdFxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgICAvLyBhZGQgZmVhdHVyZSwgcmVtb3ZlIGZlYXR1cmUgZnJvbSBlaWR0b3JcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgICBlZGl0b3I6IHtcbiAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogbmV3TGF5ZXJJZFxuICB9KTtcbn1cblxuLyoqXG4gKiBBcHBseSBwb2x5Z29uIGZpbHRlciB0byBhbGwgdmlzaWJsZSBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZlYXR1cmV9ID0gcGF5bG9hZDtcblxuICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICBjb25zdCBuZXdTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWUsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCB2aXNpYmxlTGF5ZXJJZHMgPSBnZXQocGF5bG9hZCwgJ3Zpc2libGVMYXllcklkcycpO1xuICBjb25zdCBhbGxMYXllcklkcyA9IEFycmF5LmlzQXJyYXkodmlzaWJsZUxheWVySWRzKVxuICAgID8gdmlzaWJsZUxheWVySWRzXG4gICAgOiBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuaXNWaXNpYmxlKS5tYXAobCA9PiBsLmlkKTtcblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogYWxsTGF5ZXJJZHNcbiAgfSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1uLCBtb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgc29ydE1vZGUgPSBtb2RlO1xuICBpZiAoIXNvcnRNb2RlKSB7XG4gICAgY29uc3QgY3VycmVudE1vZGUgPSBnZXQoZGF0YXNldCwgWydzb3J0Q29sdW1uJywgY29sdW1uXSk7XG4gICAgLy8gQHRzLWlnbm9yZSAtIHNob3VsZCBiZSBmaXhhYmxlIGluIGEgVFMgZmlsZVxuICAgIHNvcnRNb2RlID0gY3VycmVudE1vZGVcbiAgICAgID8gT2JqZWN0LmtleXMoU09SVF9PUkRFUikuZmluZChtID0+IG0gIT09IGN1cnJlbnRNb2RlKVxuICAgICAgOiBTT1JUX09SREVSLkFTQ0VORElORztcbiAgfVxuXG4gIGNvbnN0IHNvcnRlZCA9IHNvcnREYXRhc2V0QnlDb2x1bW4oZGF0YXNldCwgY29sdW1uLCBzb3J0TW9kZSk7XG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIHNvcnRlZCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaW5UYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLlBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBwaW5UYWJsZUNvbHVtbnMoZGF0YXNldCwgY29sdW1uKTtcblxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZVRhYmxlQ29sdW1uSGlkZGVuVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlVGFibGVDb2x1bW5IaWRkZW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgdG9nZ2xlSGlkZGVuVGFibGVDb2x1bW4oZGF0YXNldCwgY29sdW1uKSwgc3RhdGUpO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG93QWxsVGFibGVDb2x1bW5zVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLlNob3dBbGxUYWJsZUNvbHVtbnNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgc2hvd0FsbFRhYmxlQ29sdW1ucyhkYXRhc2V0KSwgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvcHkgY29sdW1uIGNvbnRlbnQgYXMgc3RyaW5nc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLkNvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogU2V0IGRpc3BsYXkgZm9ybWF0IGZyb20gY29sdW1ucyBmcm9tIHVzZXIgc2VsZWN0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZm9ybWF0c306IFZpc1N0YXRlQWN0aW9ucy5TZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcztcbiAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICAgIGlmIChmaWVsZElkeCA+PSAwKSB7XG4gICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZm9ybWF0c1tjb2x1bW5dO1xuICAgICAgY29uc3QgZmllbGQgPSBuZXdGaWVsZHNbZmllbGRJZHhdO1xuICAgICAgbmV3RmllbGRzID0gc3dhcF8obWVyZ2VfKHtkaXNwbGF5Rm9ybWF0fSkoZmllbGQpIGFzIHtpZDogc3RyaW5nfSkoXG4gICAgICAgIG5ld0ZpZWxkcyBhcyB7aWQ6IHN0cmluZ31bXVxuICAgICAgKSBhcyBGaWVsZFtdO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHMgYXMgRmllbGRbXX0pO1xuICBsZXQgbmV3U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbiAgY29uc3QgdGV4dExhYmVsTGF5ZXJJbmRleGVzOiBudW1iZXJbXSA9IFtdO1xuXG4gIC8vIExheWVyIGNvbmZpZ3MgcmV0YWluIHRoZWlyIG93biBmaWVsZCBvYmplY3RzLCBzbyBrZWVwIHRob3NlIGNvcGllcyBpbiBzeW5jXG4gIC8vIHdpdGggdGhlIGRpc3BsYXkgZm9ybWF0IHN0b3JlZCBvbiB0aGUgZGF0YXNldCBmaWVsZC5cbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdTdGF0ZS5sYXllcnMubWFwKChsYXllciwgbGF5ZXJJbmRleCkgPT4ge1xuICAgICAgLy8gQ29sdW1uIG5hbWVzIGFyZSBub3QgdW5pcXVlIGFjcm9zcyBkYXRhc2V0cy4gT25seSB1cGRhdGUgbGF5ZXJzIHRoYXRcbiAgICAgIC8vIGJlbG9uZyB0byB0aGUgZGF0YXNldCB0YXJnZXRlZCBieSB0aGlzIGFjdGlvbi5cbiAgICAgIGlmIChsYXllci5jb25maWcuZGF0YUlkICE9PSBkYXRhSWQpIHtcbiAgICAgICAgcmV0dXJuIGxheWVyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2xvckZpZWxkID0gbGF5ZXIuY29uZmlnPy5jb2xvckZpZWxkO1xuICAgICAgY29uc3QgdXBkYXRlZENvbG9yRmllbGQgPVxuICAgICAgICBjb2xvckZpZWxkPy5uYW1lICYmIGNvbG9yRmllbGQubmFtZSBpbiBmb3JtYXRzXG4gICAgICAgICAgPyB7Li4uY29sb3JGaWVsZCwgZGlzcGxheUZvcm1hdDogZm9ybWF0c1tjb2xvckZpZWxkLm5hbWVdfVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIC8vIFRleHQgbGFiZWxzIGFsc28ga2VlcCBmaWVsZCBjb3BpZXMgaW5zdGVhZCBvZiByZWFkaW5nIGRhdGFzZXQuZmllbGRzIGF0IHJlbmRlciB0aW1lLlxuICAgICAgY29uc3QgdGV4dExhYmVsID0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbC5tYXAobGFiZWwgPT4ge1xuICAgICAgICBjb25zdCB7ZmllbGR9ID0gbGFiZWw7XG4gICAgICAgIHJldHVybiBmaWVsZD8ubmFtZSAmJiBmaWVsZC5uYW1lIGluIGZvcm1hdHNcbiAgICAgICAgICA/IHsuLi5sYWJlbCwgZmllbGQ6IHsuLi5maWVsZCwgZGlzcGxheUZvcm1hdDogZm9ybWF0c1tmaWVsZC5uYW1lXX19XG4gICAgICAgICAgOiBsYWJlbDtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdXBkYXRlVGV4dExhYmVsID0gdGV4dExhYmVsLnNvbWUoXG4gICAgICAgIChsYWJlbCwgaW5kZXgpID0+IGxhYmVsICE9PSBsYXllci5jb25maWcudGV4dExhYmVsW2luZGV4XVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVUZXh0TGFiZWwpIHtcbiAgICAgICAgdGV4dExhYmVsTGF5ZXJJbmRleGVzLnB1c2gobGF5ZXJJbmRleCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVkQ29sb3JGaWVsZCB8fCB1cGRhdGVUZXh0TGFiZWxcbiAgICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICAuLi4odXBkYXRlZENvbG9yRmllbGQgPyB7Y29sb3JGaWVsZDogdXBkYXRlZENvbG9yRmllbGR9IDoge30pLFxuICAgICAgICAgICAgLi4uKHVwZGF0ZVRleHRMYWJlbCA/IHt0ZXh0TGFiZWx9IDoge30pXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBsYXllcjtcbiAgICB9KVxuICB9O1xuXG4gIGlmICh0ZXh0TGFiZWxMYXllckluZGV4ZXMubGVuZ3RoKSB7XG4gICAgLy8gTGFiZWwgYWNjZXNzb3JzIGFuZCBjaGFyYWN0ZXIgc2V0cyBhcmUgY2FjaGVkIGluIGxheWVyRGF0YS4gUmVidWlsZCB0aGVtXG4gICAgLy8gaW1tZWRpYXRlbHkgc28gdGhlIG5ldyBmb3JtYXQgYXBwZWFycyB3aXRob3V0IHJlbW92aW5nIGFuZCByZS1hZGRpbmcgdGhlIGxhYmVsIGZpZWxkLlxuICAgIGNvbnN0IGxheWVycyA9IG5ld1N0YXRlLmxheWVycy5zbGljZSgpO1xuICAgIGNvbnN0IGxheWVyRGF0YSA9IG5ld1N0YXRlLmxheWVyRGF0YS5zbGljZSgpO1xuICAgIHRleHRMYWJlbExheWVySW5kZXhlcy5mb3JFYWNoKGxheWVySW5kZXggPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKGxheWVyc1tsYXllckluZGV4XSwgbmV3U3RhdGUsIGxheWVyRGF0YVtsYXllckluZGV4XSk7XG4gICAgICBsYXllcnNbbGF5ZXJJbmRleF0gPSByZXN1bHQubGF5ZXI7XG4gICAgICBsYXllckRhdGFbbGF5ZXJJbmRleF0gPSByZXN1bHQubGF5ZXJEYXRhO1xuICAgIH0pO1xuICAgIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBsYXllcnMsIGxheWVyRGF0YX07XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbnR5cGUgTG9hZENvbHVtblN0YXRzVGFza1BheWxvYWQgPSB7XG4gIGRhdGFzZXQ6IFZpc1N0YXRlWydkYXRhc2V0cyddW3N0cmluZ107XG4gIGZpZWxkOiBGaWVsZDtcbn07XG5cbmZ1bmN0aW9uIGdldE1hcHBlZFZhbHVlKGZpbHRlclByb3BzPzogRmlsdGVyUHJvcHMgfCBudWxsKTogdW5rbm93bltdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGZpbHRlclByb3BzICYmICdtYXBwZWRWYWx1ZScgaW4gZmlsdGVyUHJvcHMgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXJQcm9wcy5tYXBwZWRWYWx1ZSkpIHtcbiAgICByZXR1cm4gZmlsdGVyUHJvcHMubWFwcGVkVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24geWllbGRGb3JQYWludCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgMCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3Moe2RhdGFzZXQsIGZpZWxkfTogTG9hZENvbHVtblN0YXRzVGFza1BheWxvYWQpIHtcbiAgLy8gWWllbGQgc28gdGhlIGRhdGEgdGFibGUgYW5kIHBlci1jb2x1bW4gbG9hZGluZyBzcGlubmVycyBjYW4gcGFpbnQgZmlyc3QuXG4gIGF3YWl0IHlpZWxkRm9yUGFpbnQoKTtcbiAgY29uc3QgZmlsdGVyUHJvcHMgPSBmaWVsZC5maWx0ZXJQcm9wcyB8fCBkYXRhc2V0LmdldENvbHVtbkZpbHRlclByb3BzKGZpZWxkLm5hbWUpO1xuICBjb25zdCBtYXBwZWRWYWx1ZSA9IGdldE1hcHBlZFZhbHVlKGZpbHRlclByb3BzKTtcbiAgY29uc3QgdmFsdWVzID0gbWFwcGVkVmFsdWUgPz8gY29sbGVjdENvbHVtblZhbHVlcyhkYXRhc2V0LmRhdGFDb250YWluZXIsIGZpZWxkLmZpZWxkSWR4KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0Q29sdW1uU3RhdGlzdGljcyh7XG4gICAgdmFsdWVzLFxuICAgIGZpZWxkVHlwZTogZmllbGQudHlwZVxuICB9KTtcblxuICByZXR1cm4ge3Jlc3VsdCwgZmlsdGVyUHJvcHN9O1xufVxuXG5jb25zdCBMT0FEX0NPTFVNTl9TVEFUU19UQVNLID0gVGFzay5mcm9tUHJvbWlzZShcbiAgcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzLFxuICAnTE9BRF9DT0xVTU5fU1RBVFNfVEFTSydcbik7XG5cbi8qKlxuICogU3RhcnQgbG9hZGluZyBjb2x1bW4gc3RhdGlzdGljcyBmb3Igb25lIG9yIG1vcmUgZmllbGRzLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmllbGROYW1lc1RvTG9hZCA9IHRvQXJyYXkoZmllbGROYW1lKTtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkc1RvTG9hZCA9IGRhdGFzZXQ/LmZpZWxkcy5maWx0ZXIoZiA9PiBmaWVsZE5hbWVzVG9Mb2FkLmluY2x1ZGVzKGYubmFtZSkpO1xuICBpZiAoIWRhdGFzZXQgfHwgIWZpZWxkc1RvTG9hZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZmllbGQgPT5cbiAgICBmaWVsZE5hbWVzVG9Mb2FkLmluY2x1ZGVzKGZpZWxkLm5hbWUpID8gey4uLmZpZWxkLCBpc0xvYWRpbmdTdGF0czogdHJ1ZX0gOiBmaWVsZFxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuXG4gIGNvbnN0IHRhc2tzID0gZmllbGRzVG9Mb2FkLm1hcChmID0+XG4gICAgTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyh7ZGF0YXNldDogbmV3RGF0YXNldCwgZmllbGQ6IGZ9KS5iaW1hcChcbiAgICAgICh7cmVzdWx0LCBmaWx0ZXJQcm9wc30pID0+XG4gICAgICAgIGxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MobmV3RGF0YXNldC5pZCwgZi5uYW1lLCByZXN1bHQsIGZpbHRlclByb3BzLCB7XG4gICAgICAgICAgZmllbGRUeXBlOiBmLnR5cGVcbiAgICAgICAgfSksXG4gICAgICAoZXJyb3I6IEVycm9yKSA9PlxuICAgICAgICBsb2FkQ29sdW1uU3RhdHNFcnJvcihuZXdEYXRhc2V0LmlkLCBmLm5hbWUsIGVycm9yLCB7XG4gICAgICAgICAgZmllbGRUeXBlOiBmLnR5cGVcbiAgICAgICAgfSlcbiAgICApXG4gICk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIHJldHVybiB3aXRoVGFzayhuZXh0U3RhdGUsIHRhc2tzKTtcbn1cblxuLyoqXG4gKiBQZXJzaXN0IGxvYWRlZCBjb2x1bW4gc3RhdGlzdGljcyBvbiB0aGUgZmllbGQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHJlc3VsdCxcbiAgICBmaWx0ZXJQcm9wcyxcbiAgICBkYXRhSWQsXG4gICAgZmllbGROYW1lLFxuICAgIGZpZWxkVHlwZVxuICB9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkID0gKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZCB8fCAoZmllbGRUeXBlICE9PSB1bmRlZmluZWQgJiYgZmllbGQudHlwZSAhPT0gZmllbGRUeXBlKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlclByb3BzID0ge1xuICAgIC4uLmZpbHRlclByb3BzLFxuICAgIGNvbHVtblN0YXRzOiByZXN1bHRcbiAgfTtcbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGYgPT5cbiAgICBmLm5hbWUgPT09IGZpZWxkTmFtZSA/IHsuLi5mLCBmaWx0ZXJQcm9wczogbmV3RmlsdGVyUHJvcHMsIGlzTG9hZGluZ1N0YXRzOiBmYWxzZX0gOiBmXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG4gIHJldHVybiBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBDbGVhciBsb2FkaW5nIGZsYWcgd2hlbiBjb2x1bW4gc3RhdGlzdGljcyBmYWlsLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXJyb3IsIGRhdGFJZCwgZmllbGROYW1lLCBmaWVsZFR5cGV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZCA9IChkYXRhc2V0Py5maWVsZHMgfHwgW10pLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGQgfHwgKGZpZWxkVHlwZSAhPT0gdW5kZWZpbmVkICYmIGZpZWxkLnR5cGUgIT09IGZpZWxkVHlwZSkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgQ29uc29sZS5lcnJvcihlcnJvcik7XG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmID0+XG4gICAgZi5uYW1lID09PSBmaWVsZE5hbWUgPyB7Li4uZiwgaXNMb2FkaW5nU3RhdHM6IGZhbHNlfSA6IGZcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcbiAgcmV0dXJuIHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHZpc2libGU6ICFzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGVkaXRvciBza2V0Y2ggZmVhdHVyZXMgaW50byBhIEdlb0pTT04gZGF0YXNldC9sYXllciBhbmQgY2xlYXIgdGhlIHNrZXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBfYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmVhdHVyZXMgPSBzdGF0ZS5lZGl0b3IuZmVhdHVyZXM7XG4gIGlmICghZmVhdHVyZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGRhdGE7XG4gIHRyeSB7XG4gICAgZGF0YSA9IHByb2Nlc3NHZW9qc29uKGVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbihmZWF0dXJlcykpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBjb252ZXJ0IGRyYXduIGdlb21ldHJ5IHRvIGEgbGF5ZXI6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdjb252ZXJ0LWVkaXRvci1mZWF0dXJlcydcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFyZWRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCBsYWJlbElkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogOTApICsgMTA7XG5cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKGNsZWFyZWRTdGF0ZSwge1xuICAgIGRhdGFzZXRzOiB7XG4gICAgICBpbmZvOiB7XG4gICAgICAgIGlkOiBgZHJhd24tZ2VvbWV0cnktJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLFxuICAgICAgICBsYWJlbDogYERyYXduIEdlb21ldHJ5ICR7bGFiZWxJZH1gXG4gICAgICB9LFxuICAgICAgZGF0YVxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICAgICAgY2VudGVyTWFwOiBmYWxzZSxcbiAgICAgIGF1dG9DcmVhdGVMYXllcnM6IHRydWVcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIENvcHkgaW4tbWVtb3J5IHJvd3MgKG9yIGxvYWRlZCB2ZWN0b3ItdGlsZSBmZWF0dXJlcykgaW5zaWRlIHRoZSBzZWxlY3RlZFxuICogRHJhdyBvbiBNYXAgcG9seWdvbiBpbnRvIGEgbmV3IGRhdGFzZXQuIFJhc3RlciB0aWxlcyBkb3dubG9hZCBhIFBORyBjbGlwIGFuZCBhXG4gKiBHZW9KU09OIHNpZGVjYXIgKGJib3ggcmVjdGFuZ2xlICsgc3RhdHMpIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBkYXRhc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2xheWVySWR9OiBWaXNTdGF0ZUFjdGlvbnMuRXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmVhdHVyZSA9IHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU7XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgY29uc3QgZGF0YUlkID0gbGF5ZXI/LmNvbmZpZy5kYXRhSWQ7XG4gIGxldCBkYXRhc2V0ID0gZGF0YUlkID8gc3RhdGUuZGF0YXNldHNbZGF0YUlkXSA6IG51bGw7XG5cbiAgaWYgKCFsYXllciB8fCAhZGF0YXNldCB8fCAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgaXNUaWxlZEV4dHJhY3QgPSBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpIHx8IGlzUmFzdGVyVGlsZUV4dHJhY3RMYXllcihsYXllcik7XG5cbiAgLy8gR1BVIHJhbmdlL3RpbWUgZmlsdGVycyBhcmUgbm90IHJlZmxlY3RlZCBpbiBmaWx0ZXJlZEluZGV4OyBldmFsdWF0ZSB0aGVtIG9uIENQVVxuICAvLyB0aGUgc2FtZSB3YXkgZXhwb3J0IGRhdGEgZG9lcywgdGhlbiBjbGlwIHRoZSByZXN1bHQgdG8gdGhlIGRyYXdpbmcuXG4gIGlmICghaXNUaWxlZEV4dHJhY3QpIHtcbiAgICBzdGF0ZSA9IGZpbHRlckRhdGFzZXRDUFUoc3RhdGUsIGRhdGFJZCk7XG4gICAgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gICAgaWYgKCFkYXRhc2V0KSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9XG5cbiAgbGV0IGV4dHJhY3RlZDtcbiAgdHJ5IHtcbiAgICBleHRyYWN0ZWQgPSBleHRyYWN0Um93c0luc2lkZUZlYXR1cmUoe2xheWVyLCBkYXRhc2V0LCBmZWF0dXJlfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YTogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpZiAoIWV4dHJhY3RlZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmICghZXh0cmFjdGVkLnJvd0NvdW50KSB7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBpc1Jhc3RlclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpXG4gICAgICAgICAgICAgID8gJ05vIGxvYWRlZCByYXN0ZXIgcGl4ZWxzIGZvdW5kIGluc2lkZSB0aGUgc2VsZWN0ZWQgZHJhd2luZydcbiAgICAgICAgICAgICAgOiBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpXG4gICAgICAgICAgICAgID8gJ05vIGxvYWRlZCB2ZWN0b3IgdGlsZSBmZWF0dXJlcyBmb3VuZCBpbnNpZGUgdGhlIHNlbGVjdGVkIGRyYXdpbmcnXG4gICAgICAgICAgICAgIDogJ05vIHJvd3MgZm91bmQgaW5zaWRlIHRoZSBzZWxlY3RlZCBkcmF3aW5nJyxcbiAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1kYXRhLWZyb20tZmVhdHVyZS1lbXB0eSdcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGlmIChpc1Jhc3RlclRpbGVFeHRyYWN0TGF5ZXIobGF5ZXIpKSB7XG4gICAgY29uc3QgcG9seWdvbiA9IGZlYXR1cmU7XG4gICAgY29uc3QgZG93bmxvYWQgPVxuICAgICAgdHlwZW9mIChsYXllciBhcyBhbnkpLmRvd25sb2FkQ2xpcCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IFByb21pc2UucmVzb2x2ZSgobGF5ZXIgYXMgYW55KS5kb3dubG9hZENsaXAocG9seWdvbikpXG4gICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKHtwbmc6IGZhbHNlLCBqc29uOiBmYWxzZX0pO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgVU5XUkFQX1RBU0soZG93bmxvYWQpLmJpbWFwKFxuICAgICAgICAocmVzdWx0OiB7cG5nPzogYm9vbGVhbn0gfCBudWxsKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIHJlc3VsdD8ucG5nXG4gICAgICAgICAgICAgID8gc3VjY2Vzc05vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRG93bmxvYWRlZCByYXN0ZXIgY2xpcCBpbWFnZSBhbmQgc3RhdHMgZmlsZScsXG4gICAgICAgICAgICAgICAgICBpZDogJ2V4dHJhY3QtcmFzdGVyLWNsaXAnXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgOiBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRmFpbGVkIHRvIGRvd25sb2FkIHJhc3RlciBjbGlwIGltYWdlJyxcbiAgICAgICAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1yYXN0ZXItY2xpcCdcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICksXG4gICAgICAgIGVyciA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBkb3dubG9hZCByYXN0ZXIgY2xpcDogJHtcbiAgICAgICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycilcbiAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1yYXN0ZXItY2xpcCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID1cbiAgICAgIGV4dHJhY3RlZC5raW5kID09PSAnZ2VvanNvbidcbiAgICAgICAgPyBwcm9jZXNzR2VvanNvbih7XG4gICAgICAgICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgICAgICAgZmVhdHVyZXM6IGV4dHJhY3RlZC5mZWF0dXJlc1xuICAgICAgICAgIH0pXG4gICAgICAgIDoge2ZpZWxkczogZXh0cmFjdGVkLmZpZWxkcywgcm93czogZXh0cmFjdGVkLnJvd3N9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBleHRyYWN0IGRhdGE6ICR7bWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKHN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBleHRyYWN0LSR7Z2VuZXJhdGVIYXNoSWQoNil9YCxcbiAgICAgICAgbGFiZWw6IGBFeHRyYWN0ZWQgJHtkYXRhc2V0LmxhYmVsfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIFdNUyBmZWF0dXJlIGluZm8gYW5kIHBpbiB0b29sdGlwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3bXNGZWF0dXJlSW5mb1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLldNU0ZlYXR1cmVJbmZvQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlSW5mbywgY29vcmRpbmF0ZX0gPSBhY3Rpb247XG4gIGlmICghbGF5ZXIpIHtcbiAgICBjb25zb2xlLndhcm4oYFdNUyBmZWF0dXJlIGluZm8gbGF5ZXIgZG9lc24ndCBleGlzdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIGNsaWNrZWQgb2JqZWN0IHNpbWlsYXIgdG8gbGF5ZXJDbGlja1VwZGF0ZXIgdG8gcGluIHRoZSB0b29sdGlwXG4gIGNvbnN0IGNsaWNrZWQgPSBmZWF0dXJlSW5mb1xuICAgID8ge1xuICAgICAgICBwaWNrZWQ6IHRydWUsXG4gICAgICAgIG9iamVjdDoge1xuICAgICAgICAgIHdtc0ZlYXR1cmVJbmZvOiBmZWF0dXJlSW5mb1xuICAgICAgICB9LFxuICAgICAgICBjb29yZGluYXRlOiBjb29yZGluYXRlIHx8IFswLCAwXSxcbiAgICAgICAgbGF5ZXI6IHtcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgaWR4OiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXIuaWQpLFxuICAgICAgICAgICAgaWQ6IGxheWVyLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZFxuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHg6IGZpbHRlcklkeCwgZW5hYmxlID0gZmFsc2V9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG5cbiAgLy8gaWYgd2UgZW5hYmxlIHN5bmMgd2UgYXJlIGdvaW5nIHRvIG1lcmdlIGZpbHRlciBhbmQgYW5pbWF0aW9uQ29uZmlnIGRvbWFpbnMgYW5kIHN0b3JlIGludG8gZmlsdGVyLmRvbWFpblxuICBpZiAoZW5hYmxlKSB7XG4gICAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKG5ld1N0YXRlLmxheWVycyk7XG4gICAgLy8gaWYgbm8gYW5pbWF0YWJsZUxheWVycyBhcmUgcHJlc2VudCB3ZSBzaW1wbHkgcmV0dXJuXG4gICAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKGFuaW1hdGFibGVMYXllcnMpO1xuICAgIGNvbnN0IGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciA9IEJvb2xlYW4oaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGgpO1xuXG4gICAgY29uc3QgbmV3RmlsdGVyRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhbZmlsdGVyLmRvbWFpbiwgbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbl0pO1xuXG4gICAgLy8gd2Ugb25seSB1cGRhdGUgYW5pbWF0aW9uV2luZG93IGlmIHdlIGhhdmUgaW50ZXJ2YWwgYmFzZWQgYW5pbWF0aW9uIGxheWVycyB3aXRoIGRlZmluZWQgaW50ZXJ2YWxzIGFuZCB0aGUgY3VycmVudCBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvdyBpcyBub3QgaW50ZXJ2YWxcbiAgICBpZiAoaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyKSB7XG4gICAgICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbCkge1xuICAgICAgICBuZXdTdGF0ZSA9IHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgICAgICBpZDogZmlsdGVyLmlkLFxuICAgICAgICAgIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgICAgLy8gYWRqdXN0IHRpbWUgZmlsdGVyIGludGVydmFsXG4gICAgICBuZXdGaWx0ZXIgPSBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwobmV3U3RhdGUsIG5ld0ZpbHRlcik7XG5cbiAgICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gYWRqdXN0IHZhbHVlIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oXG4gICAgICBuZXdGaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgID8gW25ld0ZpbHRlckRvbWFpblswXSwgbmV3RmlsdGVyRG9tYWluWzBdXVxuICAgICAgICA6IG5ld0ZpbHRlckRvbWFpbixcbiAgICAgIHsuLi5uZXdGaWx0ZXIsIGRvbWFpbjogbmV3RmlsdGVyRG9tYWlufVxuICAgICk7XG5cbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0ge1xuICAgICAgLi4uKG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXIpLFxuICAgICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IHRydWVcbiAgICB9O1xuXG4gICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgfTtcblxuICAgIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gc2V0IHRoZSBhbmltYXRpb24gY29uZmlnIHZhbHVlIHRvIG1hdGNoIGZpbHRlciB2YWx1ZVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICB2YWx1ZTogbmV3RmlsdGVyLnZhbHVlW25ld0ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXVxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IGRvbWFpbiBhbmQgc3RlcFxuICBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiBmYWxzZVxuICB9O1xuXG4gIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIC8vIHJlc2V0IHN5bmMgdGltZWxpbmUgbW9kZVxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZFxuICB9KTtcblxuICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIC8vIHJlc2V0IGZpbHRlciB2YWx1ZVxuICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV3RmlsdGVyLmRvbWFpbiwgbmV3RmlsdGVyKTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gIH0pO1xuXG4gIC8vIHJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvXG4gIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgdmFsdWU6IG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW4/LlswXSA/PyBudWxsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLnNldFRpbWVGaWx0ZXJTeW5jVGltZWxpbmVNb2RlQWN0aW9uXG4pIHtcbiAgY29uc3Qge2lkOiBmaWx0ZXJJZCwgbW9kZTogc3luY1RpbWVsaW5lTW9kZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPT09IC0xKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBpZiAoIXZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyLCBzeW5jVGltZWxpbmVNb2RlKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY1RpbWVsaW5lTW9kZVxuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIHJldHVybiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBmaWx0ZXJJZHgpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSBvZiB0aGUgbG9hZGluZyBpbmRpY2F0b3IuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIHZpc1N0YXRlXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgUGF5bG9hZCB3aXRoIGNoYW5nZSBvZiBudW1iZXIgb2YgYWN0aXZlIGxvYWRpbmcgYWN0aW9ucy5cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3BheWxvYWQ6IHtjaGFuZ2V9fToge3BheWxvYWQ6IFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkfVxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQge2xvYWRpbmdJbmRpY2F0b3JWYWx1ZX0gPSBzdGF0ZTtcbiAgaWYgKCFsb2FkaW5nSW5kaWNhdG9yVmFsdWUpIHtcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWUgPSAwO1xuICB9XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gTWF0aC5tYXgobG9hZGluZ0luZGljYXRvclZhbHVlICsgY2hhbmdlLCAwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IG5leHRWYWx1ZSxcbiAgICAuLi4obmV4dFZhbHVlID09PSAwICYmXG4gICAgKE9iamVjdC5rZXlzKHN0YXRlLmxvYWRpbmdQcm9ncmVzcyB8fCB7fSkubGVuZ3RoIHx8XG4gICAgICBPYmplY3Qua2V5cyhzdGF0ZS5sb2FkaW5nUHJvY2Vzc2luZyB8fCB7fSkubGVuZ3RoKVxuICAgICAgPyB7bG9hZGluZ1Byb2dyZXNzOiB7fSwgbG9hZGluZ1Byb2Nlc3Npbmc6IHt9fVxuICAgICAgOiB7fSlcbiAgfTtcbn07XG5cbi8qKlxuICogUmVjb3JkIGRvd25sb2FkIHByb2dyZXNzIGZvciBhbiBpbi1mbGlnaHQgcmVtb3RlIGRhdGFzZXQgaHlkcmF0ZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcGVyY2VudCwgcGhhc2V9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TG9hZGluZ1Byb2dyZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoKHN0YXRlLmxvYWRpbmdJbmRpY2F0b3JWYWx1ZSB8fCAwKSA8PSAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHRQZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKHBlcmNlbnQpXG4gICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQocGVyY2VudCkpKVxuICAgIDogMDtcbiAgY29uc3QgcHJvY2Vzc2luZyA9IHBoYXNlID09PSAncHJvY2Vzc2luZyc7XG4gIGlmIChcbiAgICBzdGF0ZS5sb2FkaW5nUHJvZ3Jlc3M/LltpZF0gPT09IG5leHRQZXJjZW50ICYmXG4gICAgQm9vbGVhbihzdGF0ZS5sb2FkaW5nUHJvY2Vzc2luZz8uW2lkXSkgPT09IHByb2Nlc3NpbmdcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbG9hZGluZ1Byb2dyZXNzOiB7XG4gICAgICAuLi5zdGF0ZS5sb2FkaW5nUHJvZ3Jlc3MsXG4gICAgICBbaWRdOiBuZXh0UGVyY2VudFxuICAgIH0sXG4gICAgLi4uKHByb2Nlc3NpbmdcbiAgICAgID8ge1xuICAgICAgICAgIGxvYWRpbmdQcm9jZXNzaW5nOiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5sb2FkaW5nUHJvY2Vzc2luZyxcbiAgICAgICAgICAgIFtpZF06IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDoge30pXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgZmlsdGVySWR4OiBudW1iZXIpOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICBpZiAoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSB7XG4gICAgY29uc3QgdGltZWxpbmVWYWx1ZSA9IGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzXG4gICAgICA/IHNuYXBUb01hcmtzKHRpbWVsaW5lVmFsdWUsIHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMpXG4gICAgICA6IHRpbWVsaW5lVmFsdWU7XG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIHt2YWx1ZX0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKSB7XG4gIHJldHVybiBmaWx0ZXIudmFsdWVbZmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdO1xufVxuXG5mdW5jdGlvbiBnZXRTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlKSB7XG4gICAgcmV0dXJuIGZpbHRlci5zeW5jVGltZWxpbmVNb2RlID8/IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xuICB9XG5cbiAgcmV0dXJuIFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLCBuZXdNb2RlOiBudW1iZXIpIHtcbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlICYmIG5ld01vZGUgPT09IFNZTkNfVElNRUxJTkVfTU9ERVMuc3RhcnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VGltZUZpbHRlckludGVydmFsKHN0YXRlLCBmaWx0ZXIpIHtcbiAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBsZXQgaW50ZXJ2YWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSW5kZXggPSBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLnJlZHVjZSgoY3VycmVudEluZGV4LCBsKSA9PiB7XG4gICAgICBpZiAobC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IFRJTUVfSU5URVJWQUxTX09SREVSRUQuZmluZEluZGV4KGkgPT4gaSA9PT0gbC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCk7XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+IC0xICYmIG5ld0luZGV4IDwgY3VycmVudEluZGV4ID8gbmV3SW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSwgVElNRV9JTlRFUlZBTFNfT1JERVJFRC5sZW5ndGggLSAxKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgbGF5ZXJUaW1lSW50ZXJ2YWwgPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVEW2ludGVydmFsSW5kZXhdO1xuICAgIGludGVydmFsID0gTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbFtsYXllclRpbWVJbnRlcnZhbF07XG4gIH1cblxuICBpZiAoIWludGVydmFsKSB7XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIC8vIGFkanVzdCBmaWx0ZXJcbiAgY29uc3QgdGltZUZvcm1hdCA9IGdldERlZmF1bHRUaW1lRm9ybWF0KGludGVydmFsKTtcbiAgY29uc3QgdXBkYXRlZFBsb3RUeXBlID0gey4uLmZpbHRlci5wbG90VHlwZSwgaW50ZXJ2YWwsIHRpbWVGb3JtYXR9O1xuICBjb25zdCBwbG90QmFzZUluZGV4QnlEYXRhSWQgPSBnZXRQbG90QmFzZUluZGV4QnlEYXRhSWQoc3RhdGUuZGF0YXNldHMsIGZpbHRlciwgc3RhdGUubGF5ZXJzKTtcbiAgY29uc3QgbmV3RmlsdGVyID0gdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlKFxuICAgIGZpbHRlcixcbiAgICB1cGRhdGVkUGxvdFR5cGUsXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgdW5kZWZpbmVkLFxuICAgIHBsb3RCYXNlSW5kZXhCeURhdGFJZFxuICApO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyLCBwbG90QmFzZUluZGV4QnlEYXRhSWQpO1xufVxuXG4vLyBGaW5kIGRhdGFJZCBmcm9tIGEgc2F2ZWQgdmlzU3RhdGUgcHJvcGVydHk6XG4vLyBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9ucywgbGF5ZXJCbGVuZGluZywgb3ZlcmxheUJsZW5kaW5nLCBzcGxpdE1hcHMsIGFuaW1hdGlvbkNvbmZpZywgZWRpdG9yXG4vLyByZXBsYWNlIGl0IHdpdGggYW5vdGhlciBkYXRhSWRcbmZ1bmN0aW9uIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2YWx1ZTogYW55LCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCByZXBsYWNlZCA9IHZhbHVlXG4gICAgICAubWFwKHYgPT4gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHYsIGRhdGFJZCwgZGF0YUlkVG9SZXBsYWNlKSlcbiAgICAgIC5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUuZGF0YUlkID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIG90aGVyc1xuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgfTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLmRhdGFJZCkgJiYgdmFsdWUuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAvLyBmaWx0ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IHZhbHVlLmRhdGFJZC5tYXAoZCA9PiAoZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9SZXBsYWNlIDogZCkpXG4gICAgfTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5jb25maWc/LmRhdGFJZCAmJiB2YWx1ZS5jb25maWc/LmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gbGF5ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4udmFsdWUuY29uZmlnLFxuICAgICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgZGF0YUlkKSkge1xuICAgIC8vIGZvciB2YWx1ZSBzYXZlZCBhcyB7W2RhdGFJZF06IHsuLi59fVxuICAgIHJldHVybiB7W2RhdGFJZFRvUmVwbGFjZV06IHZhbHVlW2RhdGFJZF19O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIEZpbmQgZGF0YXNldElkcyBkZXJpdmVkIGEgc2F2ZWQgdmlzU3RhdGUgUHJvcGVydHk7XG5mdW5jdGlvbiBmaW5kQ2hpbGREYXRhc2V0SWRzKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGNvbnN0IGNoaWxkRGF0YUlkcyA9IHZhbHVlLm1hcChmaW5kQ2hpbGREYXRhc2V0SWRzKS5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gY2hpbGREYXRhSWRzLmxlbmd0aCA/IGNoaWxkRGF0YUlkcyA6IG51bGw7XG4gIH1cblxuICByZXR1cm4gdmFsdWU/Lm5ld0RhdGFzZXQ/LmluZm8uaWQgfHwgbnVsbDtcbn1cblxuLy8gbW92ZWQgdW5tZXJnZWQgbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnNcbmZ1bmN0aW9uIG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHByb3BWYWx1ZXMsIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSkge1xuICAvLyByZW1vdmUgcHJvcCB2YWx1ZSBmcm9tIHN0YXRlXG4gIC8vIFRPRE86IHNob3VsZCB3ZSBhZGQgcmVtb3ZlIHVwZGF0ZXIgdG8gbWVyZ2VyIGFzIHdlbGw/XG4gIGlmICghcHJvcFZhbHVlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBzdGF0ZVJlbW92ZWQgPVxuICAgIHByb3AgPT09ICdsYXllcnMnXG4gICAgICA/IHByb3BWYWx1ZXMucmVkdWNlKChhY2N1LCBwcm9wVmFsdWUpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWQ6IHByb3BWYWx1ZS5pZH0pLCBzdGF0ZSlcbiAgICAgIDogQXJyYXkuaXNBcnJheShzdGF0ZVtwcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIFtwcm9wXTogc3RhdGVbcHJvcF0uZmlsdGVyKHAgPT4gIXByb3BWYWx1ZXMuZmluZChwcm9wVmFsdWUgPT4gcC5pZCA9PT0gcHJvcFZhbHVlLmlkKSlcbiAgICAgICAgfVxuICAgICAgOiAvLyBpZiBub3QgYXJyYXksIHdlIHdvbid0IHJlbW92ZSBpdCwgcmVtb3ZlIGRhdGFzZXQgc2hvdWxkIGhhbmRsZSBpdFxuICAgICAgICBzdGF0ZTtcblxuICAvLyBtb3ZlIHRvIHN0YXRlVG9CZU1lcmdlZFxuICBjb25zdCB0b0JlTWVyZ2VkID0ge1xuICAgIFt0b01lcmdlUHJvcF06IHNhdmVVbm1lcmdlZFxuICAgICAgPyAvLyBjYWxsIG1lcmdlIHNhdmVVbm1lcmdlZCBtZXRob2RcbiAgICAgICAgc2F2ZVVubWVyZ2VkKHN0YXRlUmVtb3ZlZCwgcHJvcFZhbHVlcylcbiAgICAgIDogLy8gaWYgdG9NZXJnZVByb3AgaXMgYXJhYXksIGFwcGVuZCB0byBpdFxuICAgICAgQXJyYXkuaXNBcnJheShzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyBbLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSwgLi4ucHJvcFZhbHVlc11cbiAgICAgIDogLy8gc2F2ZSBwcm9wVmFsdWVzIHRvIHRvTWVyZ2VcbiAgICAgIGlzT2JqZWN0KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLFxuICAgICAgICAgIC4uLnByb3BWYWx1ZXNcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZVJlbW92ZWQsXG4gICAgLi4udG9CZU1lcmdlZFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBsYWNlRGF0YXNldEFuZERlcHM8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nLFxuICBvcHRpb25zOiB7ZGVsZXRlT3JpZ2luYWxEYXRhc2V0PzogYm9vbGVhbn0gPSB7fVxuKTogVCB7XG4gIC8vIFRoZSBzYW1lIGlkIG1lYW5zIHRoZSBuZXcgdGFibGUgb2NjdXBpZXMgdGhlIG9sZCBzbG90LCBzbyB0aGUgcHJldmlvdXMgcm93cyBoYXZlIHRvIGdvLlxuICBjb25zdCBkZWxldGVPcmlnaW5hbERhdGFzZXQgPSBvcHRpb25zLmRlbGV0ZU9yaWdpbmFsRGF0YXNldCAhPT0gZmFsc2UgfHwgZGF0YUlkID09PSBkYXRhSWRUb1VzZTtcbiAgcmV0dXJuIGNvbXBvc2VfPFQ+KFtcbiAgICBhcHBseV8ocmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZSwge2RhdGFJZCwgZGF0YUlkVG9Vc2V9KSxcbiAgICBpZl8oZGVsZXRlT3JpZ2luYWxEYXRhc2V0LCBhcHBseV8ocmVtb3ZlRGF0YXNldFVwZGF0ZXIsIHtkYXRhSWR9KSlcbiAgXSkoc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2U8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nLFxuICBvcHRpb25zOiB7ZGVsZXRlT3JpZ2luYWxEYXRhc2V0PzogYm9vbGVhbn0gPSB7fVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuICBjb25zdCBkZWxldGVPcmlnaW5hbERhdGFzZXQgPSBvcHRpb25zLmRlbGV0ZU9yaWdpbmFsRGF0YXNldCAhPT0gZmFsc2UgfHwgZGF0YUlkID09PSBkYXRhSWRUb1VzZTtcbiAgY29uc3QgbmV4dFN0YXRlID0gcmVwbGFjZURhdGFzZXRBbmREZXBzKHN0YXRlLCBkYXRhSWQsIGRhdGFJZFRvVXNlLCB7ZGVsZXRlT3JpZ2luYWxEYXRhc2V0fSk7XG4gIC8vIG1ha2UgYSBjb3B5IG9mIGxheWVyT3JkZXIsIGJlY2F1c2UgbGF5ZXIgaWQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXQgYnkgY2FsbGluZyByZW1vdmVMYXllclVwZGF0ZXJcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIC8vIFdoZW4gdGhlIG9yaWdpbmFsIHRhYmxlIHN0YXlzLCB0aGUgcmVwbGFjZW1lbnQgdGFrZXMgaXRzIHBsYWNlIGFuZCB0aGUgb3JpZ2luYWwgZm9sbG93cyBpdC5cbiAgbmV4dFN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyID0gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpLmZsYXRNYXAoZCA9PiB7XG4gICAgaWYgKGQgIT09IGRhdGFJZCkge1xuICAgICAgcmV0dXJuIFtkXTtcbiAgICB9XG4gICAgcmV0dXJuIGRlbGV0ZU9yaWdpbmFsRGF0YXNldCA/IFtkYXRhSWRUb1VzZV0gOiBbZGF0YUlkVG9Vc2UsIGRdO1xuICB9KTtcblxuICAvLyBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgaWYgKG5leHRTdGF0ZS5sYXllclRvQmVNZXJnZWQ/Lmxlbmd0aCkge1xuICAgIC8vIGNvcHkgc3BsaXQgbWFwcyB0byBiZSBtZXJnZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZXNldCBpbiByZW1vdmUgbGF5ZXIuXG4gICAgLy8gS2VlcCB0aGUgb25lcyBvZiBhIGRhdGFzZXQgcmVwbGFjZWQgYSBtb21lbnQgZWFybGllciBhbmQgbm90IG1lcmdlZCBiYWNrIHlldDpcbiAgICAvLyBpdHMgbGF5ZXJzIGFyZSBubyBsb25nZXIgaW4gdGhlIGN1cnJlbnQgc3BsaXQgbWFwcy5cbiAgICBuZXh0U3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCA9IGNvbWJpbmVTcGxpdE1hcHNCeUluZGV4KFxuICAgICAgc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCxcbiAgICAgIHNlcmlhbGl6ZWRTdGF0ZT8uc3BsaXRNYXBzID8/IFtdXG4gICAgKTtcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5wcmVzZXJ2ZUxheWVyT3JkZXJdO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBUaGUgb3JkZXIgdG8gcHJlc2VydmUgZm9yIHRoZSBpdGVtcyB0aGF0IHdpbGwgYmUgbWVyZ2VkIGJhY2suXG4gKlxuICogYGlkc2AgY29tZXMgZnJvbSB0aGUgc2VyaWFsaXplZCBzdGF0ZSwgc28gaXQgbGlzdHMgZXZlcnl0aGluZyBidXQgdGhlIGl0ZW1zXG4gKiBhbm90aGVyIGRhdGFzZXQncyByZXBsYWNlbWVudCBwYXJrZWQgYSBtb21lbnQgYWdvOiBhbiBhcHAgcmVmcmVzaGluZyBzZXZlcmFsXG4gKiBkYXRhc2V0cyBpbiBhIHJvdyBwcmVwYXJlcyB0aGUgc2Vjb25kIHJlcGxhY2VtZW50IGJlZm9yZSB0aGUgZmlyc3Qgb25lJ3NcbiAqIGl0ZW1zIGhhdmUgbWVyZ2VkIGJhY2suIFdyaXRpbmcgYGlkc2AgYXMgaXQgaXMgd291bGQgZHJvcCB0aG9zZSwgYW5kXG4gKiBgaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcmAgcHV0cyBhbiBpdGVtIGl0IGNhbm5vdCBwbGFjZSBhdCB0aGUgZnJvbnQg4oCUXG4gKiBzbyB0aGV5IHdvdWxkIGNvbWUgYmFjayByZXZlcnNlZC4gV2hlcmUgdGhleSBiZWxvbmcgaXMgd2hhdCB0aGUgb3JkZXIgd3JpdHRlblxuICogd2hlbiB0aGV5IHdlcmUgcGFya2VkIGFscmVhZHkgc2F5cywgc28gdGhhdCBvcmRlciBpcyBrZXB0IGZvciB0aGVtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlc2VydmVkT3JkZXJXaXRoUGFya2VkKFxuICBwcmV2aW91c09yZGVyOiBzdHJpbmdbXSA9IFtdLFxuICBpZHM6IHN0cmluZ1tdLFxuICBwYXJrZWQ6IHtpZD86IHN0cmluZ31bXVxuKTogc3RyaW5nW10ge1xuICBjb25zdCBwYXJrZWRJZHMgPSBwYXJrZWRcbiAgICAubWFwKGl0ZW0gPT4gaXRlbT8uaWQpXG4gICAgLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkgJiYgIWlkcy5pbmNsdWRlcyhpZCBhcyBzdHJpbmcpKTtcblxuICBpZiAoIXBhcmtlZElkcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gaWRzO1xuICB9XG5cbiAgY29uc3Qga25vd24gPSBuZXcgU2V0KFsuLi5pZHMsIC4uLnBhcmtlZElkc10pO1xuICBjb25zdCBvcmRlcmVkID0gKHByZXZpb3VzT3JkZXIgfHwgW10pLmZpbHRlcihpZCA9PiBrbm93bi5oYXMoaWQpKTtcbiAgY29uc3QgcmVzdCA9IFsuLi5pZHMsIC4uLnBhcmtlZElkc10uZmlsdGVyKGlkID0+ICFvcmRlcmVkLmluY2x1ZGVzKGlkKSk7XG5cbiAgcmV0dXJuIFsuLi5vcmRlcmVkLCAuLi5yZXN0XTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGU8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtkYXRhSWQsIGRhdGFJZFRvVXNlfToge2RhdGFJZDogc3RyaW5nOyBkYXRhSWRUb1VzZTogc3RyaW5nfVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHN0YXRlLm1lcmdlcnMucmVkdWNlKFxuICAgIChcbiAgICAgIGFjY3VTdGF0ZSxcbiAgICAgIHtwcm9wLCB0b01lcmdlUHJvcCwgcmVwbGFjZVBhcmVudERhdGFzZXRJZHMsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkLCBwcmVzZXJ2ZU9yZGVyfVxuICAgICkgPT4ge1xuICAgICAgLy8gZ2V0IGRhdGFzZXQgaWRzIHRoYXQgYXJlIGRlcGVuZHMgb24gdGhpcyBkYXRhc2V0XG4gICAgICBjb25zdCBwcm9wcyA9IHRvQXJyYXkocHJvcCk7XG4gICAgICBjb25zdCB0b01lcmdlUHJvcHMgPSB0b0FycmF5KHRvTWVyZ2VQcm9wKTtcbiAgICAgIGNvbnN0IHNhdmVkUHJvcHMgPSBzZXJpYWxpemVkU3RhdGUgPyBwcm9wcy5tYXAocCA9PiBzZXJpYWxpemVkU3RhdGVbcF0pIDogW107XG5cbiAgICAgIGxldCByZXBsYWNlZFN0YXRlID0gYWNjdVN0YXRlO1xuICAgICAgc2F2ZWRQcm9wcy5mb3JFYWNoKChwcm9wVmFsdWUsIGkpID0+IHtcbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lcmdlck9wdGlvbnMgPSB7XG4gICAgICAgICAgcHJvcDogcHJvcHNbaV0sXG4gICAgICAgICAgdG9NZXJnZVByb3A6IHRvTWVyZ2VQcm9wc1tpXSxcbiAgICAgICAgICBnZXRDaGlsZERhdGFzZXRJZHMsXG4gICAgICAgICAgc2F2ZVVubWVyZ2VkXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gV2hhdCBhbm90aGVyIGRhdGFzZXQncyByZXBsYWNlbWVudCBwYXJrZWQgYSBtb21lbnQgYWdvIGFuZCBoYXMgbm90XG4gICAgICAgIC8vIG1lcmdlZCBiYWNrIHlldCwgcmVhZCBiZWZvcmUgdGhpcyBvbmUgcGFya3MgYW55dGhpbmcgb2YgaXRzIG93bi5cbiAgICAgICAgY29uc3QgcGFya2VkRWxzZXdoZXJlID1cbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdG9BcnJheShyZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdID8/IFtdKVxuICAgICAgICAgICAgOiBbXTtcblxuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW0gPVxuICAgICAgICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzPy4ocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKSB8fFxuICAgICAgICAgIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyhwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAgICAgICByZXBsYWNlZFN0YXRlID0gcmVwbGFjZWRJdGVtXG4gICAgICAgICAgPyByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShyZXBsYWNlZFN0YXRlLCByZXBsYWNlZEl0ZW0sIG1lcmdlck9wdGlvbnMpXG4gICAgICAgICAgOiByZXBsYWNlZFN0YXRlO1xuXG4gICAgICAgIC8vIE9ubHkgd2hlbiB0aGlzIGRhdGFzZXQgaGFkIGl0ZW1zIG9mIGl0cyBvd24gdG8gcGFyay4gVGhlIHRvQmVNZXJnZWQgbGlzdFxuICAgICAgICAvLyBjYW4gc3RpbGwgaG9sZCBhbm90aGVyIGRhdGFzZXQncyBpdGVtcywgcmVwbGFjZWQgYSBtb21lbnQgZWFybGllciBhbmRcbiAgICAgICAgLy8gbm90IG1lcmdlZCBiYWNrIHlldDsgb3ZlcndyaXRpbmcgdGhlIG9yZGVyIHRoZXkgd2VyZSBwYXJrZWQgd2l0aCB3b3VsZFxuICAgICAgICAvLyBtZXJnZSB0aGVtIGJhY2sgaW4gcmV2ZXJzZS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcGxhY2VkSXRlbSAmJlxuICAgICAgICAgIG1lcmdlck9wdGlvbnMudG9NZXJnZVByb3AgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcF0/Lmxlbmd0aCAmJlxuICAgICAgICAgIHByZXNlcnZlT3JkZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVtwcmVzZXJ2ZU9yZGVyXSA9IHByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZChcbiAgICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0sXG4gICAgICAgICAgICBwcm9wVmFsdWUubWFwKGl0ZW0gPT4gaXRlbS5pZCksXG4gICAgICAgICAgICBwYXJrZWRFbHNld2hlcmVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlcGxhY2VkU3RhdGU7XG4gICAgfSxcbiAgICBzdGF0ZVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKFxuICBzdGF0ZSxcbiAgcmVwbGFjZWRJdGVtLFxuICB7cHJvcCwgdG9NZXJnZVByb3AsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkfVxuKSB7XG4gIC8vIHByb3AgaXMgZGVwZW5kcyBvbiB0aGUgZGF0YXNldCB0byBiZSByZXBsYWNlZFxuICAvLyByZW1vdmUgcHJvcCBmcm9tIHN0YXRlLCBhbmQgbW92ZSBpdCB0byB0b0JlTWVyZ2VkXG4gIGxldCBuZXh0U3RhdGUgPSBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCByZXBsYWNlZEl0ZW0sIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSk7XG4gIGNvbnN0IGNoaWxkRGF0YUlkcyA9IGdldENoaWxkRGF0YXNldElkcz8uKHJlcGxhY2VkSXRlbSkgfHwgZmluZENoaWxkRGF0YXNldElkcyhyZXBsYWNlZEl0ZW0pO1xuXG4gIGlmIChjaGlsZERhdGFJZHMpIHtcbiAgICBuZXh0U3RhdGUgPSB0b0FycmF5KGNoaWxkRGF0YUlkcykucmVkdWNlKChhY2N1LCBjaGlsZERhdGFJZCkgPT4ge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGNoaWxkIGRhdGFzZXQgaWQsXG4gICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBtb3ZlIG91dCBvZiBzdGF0ZSBhbmQgbWVyZ2UgYmFjayBpblxuICAgICAgcmV0dXJuIHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhhY2N1LCBjaGlsZERhdGFJZCwgY2hpbGREYXRhSWQpO1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuY29uc3QgREFUQVNFVF9PUF9BRERfT1BUSU9OUyA9IHtcbiAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZSxcbiAgY2VudGVyTWFwOiBmYWxzZSxcbiAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBhcHBseURlcml2ZWRQcm90b0RhdGFzZXQoc3RhdGU6IFZpc1N0YXRlLCBwcm90bzogUHJvdG9EYXRhc2V0KTogVmlzU3RhdGUge1xuICBjb25zdCByZXN1bHRJZCA9IHByb3RvLmluZm8uaWQ7XG4gIGlmICghcmVzdWx0SWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKHN0YXRlLmRhdGFzZXRzW3Jlc3VsdElkXSkge1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHVwZGF0ZURhdGFzZXRVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiByZXN1bHRJZCwgZGF0YTogcHJvdG8uZGF0YX0pO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gbmV4dFN0YXRlLmRhdGFzZXRzW3Jlc3VsdElkXTtcbiAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICByZXR1cm4gbmV4dFN0YXRlO1xuICAgIH1cbiAgICBleGlzdGluZy5tZXRhZGF0YSA9IHtcbiAgICAgIC4uLmV4aXN0aW5nLm1ldGFkYXRhLFxuICAgICAgLi4ucHJvdG8ubWV0YWRhdGFcbiAgICB9O1xuICAgIGV4aXN0aW5nLmxhYmVsID0gcHJvdG8uaW5mby5sYWJlbCB8fCBleGlzdGluZy5sYWJlbDtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG4gIHJldHVybiB1cGRhdGVWaXNEYXRhVXBkYXRlcihzdGF0ZSwge1xuICAgIGRhdGFzZXRzOiBwcm90byxcbiAgICBvcHRpb25zOiBEQVRBU0VUX09QX0FERF9PUFRJT05TXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuR3JvdXBCeVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUnVuR3JvdXBCeVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge3N0YXRlOiBuZXh0U3RhdGUsIHByb3RvfSA9IGV4ZWN1dGVHcm91cEJ5KHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gcHJvdG8gPyBhcHBseURlcml2ZWRQcm90b0RhdGFzZXQobmV4dFN0YXRlLCBwcm90bykgOiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5Kb2luVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SdW5Kb2luVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7c3RhdGU6IG5leHRTdGF0ZSwgcHJvdG99ID0gZXhlY3V0ZUpvaW4oc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBwcm90byA/IGFwcGx5RGVyaXZlZFByb3RvRGF0YXNldChuZXh0U3RhdGUsIHByb3RvKSA6IG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1blNwYXRpYWxKb2luVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SdW5TcGF0aWFsSm9pblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge3N0YXRlOiBuZXh0U3RhdGUsIHByb3RvfSA9IGV4ZWN1dGVTcGF0aWFsSm9pbihzdGF0ZSwgYWN0aW9uKTtcbiAgcmV0dXJuIHByb3RvID8gYXBwbHlEZXJpdmVkUHJvdG9EYXRhc2V0KG5leHRTdGF0ZSwgcHJvdG8pIDogbmV4dFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuU3VpdGFiaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJ1blN1aXRhYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7c3RhdGU6IG5leHRTdGF0ZSwgcHJvdG99ID0gZXhlY3V0ZVN1aXRhYmlsaXR5KHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gcHJvdG8gPyBhcHBseURlcml2ZWRQcm90b0RhdGFzZXQobmV4dFN0YXRlLCBwcm90bykgOiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCB7XG4gIGFkZEdyb3VwQnlVcGRhdGVyLFxuICBhZGRKb2luVXBkYXRlcixcbiAgYWRkU3BhdGlhbEpvaW5VcGRhdGVyLFxuICBhZGRTdWl0YWJpbGl0eVVwZGF0ZXIsXG4gIHJlbW92ZURhdGFzZXRPcFVwZGF0ZXIsXG4gIHNldEdyb3VwQnlDb25maWdVcGRhdGVyLFxuICBzZXRKb2luQ29uZmlnVXBkYXRlcixcbiAgc2V0U3BhdGlhbEpvaW5Db25maWdVcGRhdGVyLFxuICBzZXRTdWl0YWJpbGl0eUNvbmZpZ1VwZGF0ZXJcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUEsU0FBUUEsSUFBSSxRQUFPLFlBQVk7QUFFL0IsT0FBT0MsSUFBSSxNQUFNLG1CQUFtQjtBQUNwQyxPQUFPQyxTQUFTLE1BQU0sV0FBVztBQUNqQyxTQUFRQyxPQUFPLElBQUlDLE9BQU8sUUFBTyxlQUFlO0FBQ2hELE9BQU9DLFNBQVMsTUFBTSw2QkFBNkI7QUFDbkQsT0FBT0MsR0FBRyxNQUFNLHVCQUF1QjtBQUN2QyxPQUFPQyxPQUFPLE1BQU0sMkJBQTJCO0FBQy9DLE9BQU9DLElBQUksTUFBTSx3QkFBd0I7QUFDekMsT0FBT0MsSUFBSSxNQUFNLHdCQUF3QjtBQUN6QyxPQUFPQyxHQUFHLE1BQU0sdUJBQXVCO0FBQ3ZDLE9BQU9DLElBQUksSUFBR0MscUJBQXFCLEVBQUVDLFFBQVEsUUFBTyxrQkFBa0I7QUFFdEU7QUFDQSxTQUNFQyxVQUFVLEVBQ1ZDLFdBQVcsRUFDWEMsZUFBZSxFQUNmQyxjQUFjLEVBQ2RDLGlCQUFpQixFQUNqQkMsV0FBVyxRQUNOLGtCQUFrQjtBQUN6QjtBQUNBLFNBQ0VDLGVBQWUsRUFNZkMsZ0JBQWdCLEVBQ2hCQyx1QkFBdUIsRUFDdkJDLGlCQUFpQixFQUNqQkMsZUFBZSxFQUNmQyxvQkFBb0IsRUFDcEJDLDhCQUE4QixFQUM5QkMsbUJBQW1CLEVBQ25CQyxZQUFZLEVBQ1pDLGdCQUFnQixFQUNoQkMsWUFBWSxFQUNaQyx1QkFB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