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

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.
@@ -105,6 +105,7 @@ exports.runJoinUpdater = runJoinUpdater;
105
105
  exports.runSpatialJoinUpdater = runSpatialJoinUpdater;
106
106
  exports.runSuitabilityUpdater = runSuitabilityUpdater;
107
107
  exports.setAnimationConfigUpdater = setAnimationConfigUpdater;
108
+ exports.setCameraTourUpdater = exports.setCameraBookmarksUpdater = void 0;
108
109
  exports.setColumnDisplayFormatUpdater = setColumnDisplayFormatUpdater;
109
110
  exports.setEditorFeaturePropertiesUpdater = setEditorFeaturePropertiesUpdater;
110
111
  exports.setEditorModeUpdater = void 0;
@@ -197,6 +198,7 @@ var _mergerHandler = require("./merger-handler");
197
198
  var _visStateMerger = require("./vis-state-merger");
198
199
  var _schemas = _interopRequireDefault(require("@kepler.gl/schemas"));
199
200
  var _processors = require("@kepler.gl/processors");
201
+ var _webMercator = require("@math.gl/web-mercator");
200
202
  var _table = require("@kepler.gl/table");
201
203
  var _columnEditReconcile = require("./column-edit-reconcile");
202
204
  var _interactionUtils = require("./interaction-utils");
@@ -375,6 +377,9 @@ var INITIAL_VIS_STATE = exports.INITIAL_VIS_STATE = {
375
377
  // charts (enabled by default; gated by enableChartsPanel)
376
378
  charts: [],
377
379
  chartsToBeMerged: [],
380
+ // camera bookmarks
381
+ cameraBookmarks: [],
382
+ cameraTour: null,
378
383
  // annotations
379
384
  annotations: [],
380
385
  annotationsToBeMerged: [],
@@ -1239,11 +1244,14 @@ function layerVisConfigChangeUpdater(state, action) {
1239
1244
  var _calculateLayerData6 = (0, _layerUtils.calculateLayerData)(newLayer, nextState, oldLayerData),
1240
1245
  layerData = _calculateLayerData6.layerData,
1241
1246
  layer = _calculateLayerData6.layer;
1242
- return updateStateWithLayerAndData(nextState, {
1247
+ var updatedState = updateStateWithLayerAndData(nextState, {
1243
1248
  layerData: layerData,
1244
1249
  layer: layer,
1245
1250
  idx: idx
1246
1251
  });
1252
+ return newLayer.type === 'zarr' && props.some(function (p) {
1253
+ return p === 'zarrAxis' || p === 'zarrVariable';
1254
+ }) ? updateAnimationDomain(updatedState) : updatedState;
1247
1255
  }
1248
1256
  return updateStateWithLayerAndData(nextState, {
1249
1257
  layer: newLayer,
@@ -2712,16 +2720,19 @@ function makeNewAnnotation(config) {
2712
2720
  var kind = (_config$kind = config === null || config === void 0 ? void 0 : config.kind) !== null && _config$kind !== void 0 ? _config$kind : _constants.INITIAL_ANNOTATION_KIND;
2713
2721
  var providedAngle = Number.isFinite(config === null || config === void 0 ? void 0 : config.angle) ? config.angle : undefined;
2714
2722
  var derivedFromAngle = providedAngle != null ? (0, _constants.textPlacementFromAngle)(providedAngle) : undefined;
2715
- var textSide = (_ref17 = (_config$textSide = config === null || config === void 0 ? void 0 : config.textSide) !== null && _config$textSide !== void 0 ? _config$textSide : derivedFromAngle === null || derivedFromAngle === void 0 ? void 0 : derivedFromAngle.side) !== null && _ref17 !== void 0 ? _ref17 : kind === _constants.AnnotationKind.TEXT ? undefined : _constants.INITIAL_ANNOTATION_TEXT_SIDE;
2716
- var textVerticalPosition = (_ref18 = (_config$textVerticalP = config === null || config === void 0 ? void 0 : config.textVerticalPosition) !== null && _config$textVerticalP !== void 0 ? _config$textVerticalP : derivedFromAngle === null || derivedFromAngle === void 0 ? void 0 : derivedFromAngle.vertical) !== null && _ref18 !== void 0 ? _ref18 : kind === _constants.AnnotationKind.TEXT ? undefined : _constants.INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION;
2717
- var base = _objectSpread(_objectSpread(_objectSpread({
2723
+ var textSide = (_ref17 = (_config$textSide = config === null || config === void 0 ? void 0 : config.textSide) !== null && _config$textSide !== void 0 ? _config$textSide : derivedFromAngle === null || derivedFromAngle === void 0 ? void 0 : derivedFromAngle.side) !== null && _ref17 !== void 0 ? _ref17 : kind === _constants.AnnotationKind.TEXT || kind === _constants.AnnotationKind.RULER ? undefined : _constants.INITIAL_ANNOTATION_TEXT_SIDE;
2724
+ var textVerticalPosition = (_ref18 = (_config$textVerticalP = config === null || config === void 0 ? void 0 : config.textVerticalPosition) !== null && _config$textVerticalP !== void 0 ? _config$textVerticalP : derivedFromAngle === null || derivedFromAngle === void 0 ? void 0 : derivedFromAngle.vertical) !== null && _ref18 !== void 0 ? _ref18 : kind === _constants.AnnotationKind.TEXT || kind === _constants.AnnotationKind.RULER ? undefined : _constants.INITIAL_ANNOTATION_TEXT_VERTICAL_POSITION;
2725
+ var base = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
2718
2726
  id: (_config$id = config === null || config === void 0 ? void 0 : config.id) !== null && _config$id !== void 0 ? _config$id : (0, _commonUtils.generateHashId)(6),
2719
2727
  kind: kind,
2720
2728
  isVisible: (_config$isVisible = config === null || config === void 0 ? void 0 : config.isVisible) !== null && _config$isVisible !== void 0 ? _config$isVisible : true,
2721
2729
  autoSize: (_config$autoSize = config === null || config === void 0 ? void 0 : config.autoSize) !== null && _config$autoSize !== void 0 ? _config$autoSize : true,
2722
2730
  autoSizeY: (_config$autoSizeY = config === null || config === void 0 ? void 0 : config.autoSizeY) !== null && _config$autoSizeY !== void 0 ? _config$autoSizeY : true,
2723
2731
  anchorPoint: (_config$anchorPoint = config === null || config === void 0 ? void 0 : config.anchorPoint) !== null && _config$anchorPoint !== void 0 ? _config$anchorPoint : [0, 0],
2724
- label: (_config$label = config === null || config === void 0 ? void 0 : config.label) !== null && _config$label !== void 0 ? _config$label : 'New Annotation',
2732
+ label: (_config$label = config === null || config === void 0 ? void 0 : config.label) !== null && _config$label !== void 0 ? _config$label : 'New Annotation'
2733
+ }, config !== null && config !== void 0 && config.editorState ? {
2734
+ editorState: config.editorState
2735
+ } : {}), {}, {
2725
2736
  lineColor: (_config$lineColor = config === null || config === void 0 ? void 0 : config.lineColor) !== null && _config$lineColor !== void 0 ? _config$lineColor : _constants.INITIAL_ANNOTATION_LINE_COLOR,
2726
2737
  lineWidth: (_config$lineWidth = config === null || config === void 0 ? void 0 : config.lineWidth) !== null && _config$lineWidth !== void 0 ? _config$lineWidth : _constants.INITIAL_ANNOTATION_LINE_WIDTH,
2727
2738
  textWidth: (_config$textWidth = config === null || config === void 0 ? void 0 : config.textWidth) !== null && _config$textWidth !== void 0 ? _config$textWidth : _constants.INITIAL_ANNOTATION_TEXT_WIDTH,
@@ -2755,6 +2766,20 @@ function makeNewAnnotation(config) {
2755
2766
  angle: providedAngle !== null && providedAngle !== void 0 ? providedAngle : defaultAngle,
2756
2767
  radiusInMeters: (_radiusInMeters = config === null || config === void 0 ? void 0 : config.radiusInMeters) !== null && _radiusInMeters !== void 0 ? _radiusInMeters : 1000
2757
2768
  });
2769
+ case _constants.AnnotationKind.RULER:
2770
+ {
2771
+ var _endPoint, _showCustomText, _showDistance;
2772
+ var anchorPoint = base.anchorPoint;
2773
+ var shifted = (0, _webMercator.addMetersToLngLat)(anchorPoint, [_constants.INITIAL_ANNOTATION_RULER_LENGTH_METERS, 0, 0]);
2774
+ var altitude = anchorPoint[2];
2775
+ var defaultEndPoint = altitude !== undefined && Number.isFinite(altitude) ? [shifted[0], shifted[1], altitude] : [shifted[0], shifted[1]];
2776
+ return _objectSpread(_objectSpread({}, base), {}, {
2777
+ kind: _constants.AnnotationKind.RULER,
2778
+ endPoint: (_endPoint = config === null || config === void 0 ? void 0 : config.endPoint) !== null && _endPoint !== void 0 ? _endPoint : defaultEndPoint,
2779
+ showCustomText: (_showCustomText = config === null || config === void 0 ? void 0 : config.showCustomText) !== null && _showCustomText !== void 0 ? _showCustomText : true,
2780
+ showDistance: (_showDistance = config === null || config === void 0 ? void 0 : config.showDistance) !== null && _showDistance !== void 0 ? _showDistance : true
2781
+ });
2782
+ }
2758
2783
  case _constants.AnnotationKind.TEXT:
2759
2784
  default:
2760
2785
  return _objectSpread(_objectSpread({}, base), {}, {
@@ -3016,6 +3041,16 @@ var resetMapConfigUpdater = exports.resetMapConfigUpdater = function resetMapCon
3016
3041
  initialState: state.initialState
3017
3042
  });
3018
3043
  };
3044
+ var setCameraBookmarksUpdater = exports.setCameraBookmarksUpdater = function setCameraBookmarksUpdater(state, action) {
3045
+ return _objectSpread(_objectSpread({}, state), {}, {
3046
+ cameraBookmarks: (0, _utils.normalizeCameraBookmarks)(action.payload)
3047
+ });
3048
+ };
3049
+ var setCameraTourUpdater = exports.setCameraTourUpdater = function setCameraTourUpdater(state, action) {
3050
+ return _objectSpread(_objectSpread({}, state), {}, {
3051
+ cameraTour: (0, _utils.normalizeCameraTour)(action.payload)
3052
+ });
3053
+ };
3019
3054
 
3020
3055
  /**
3021
3056
  * Propagate `visState` reducer with a new configuration. Current config will be override.
@@ -3034,7 +3069,10 @@ var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receive
3034
3069
  var keepExistingConfig = options.keepExistingConfig;
3035
3070
 
3036
3071
  // reset config if keepExistingConfig is falsy
3037
- var mergedState = !keepExistingConfig ? resetMapConfigUpdater(state) : state;
3072
+ var mergedState = !keepExistingConfig ? _objectSpread(_objectSpread({}, resetMapConfigUpdater(state)), {}, {
3073
+ cameraBookmarks: [],
3074
+ cameraTour: null
3075
+ }) : state;
3038
3076
  var _iterator3 = _createForOfIteratorHelper(state.mergers),
3039
3077
  _step3;
3040
3078
  try {
@@ -3380,6 +3418,9 @@ function refreshDatasetUpdater(state, _ref30) {
3380
3418
  arg: {
3381
3419
  source: nextDataset.metadata.source,
3382
3420
  format: (0, _constants.getRemoteSourceFormat)(nextDataset.metadata),
3421
+ csvHeader: nextDataset.fields.map(function (field) {
3422
+ return field.name;
3423
+ }),
3383
3424
  size: typeof nextDataset.metadata.size === 'number' ? nextDataset.metadata.size : undefined,
3384
3425
  etag: typeof nextDataset.metadata.etag === 'string' ? nextDataset.metadata.etag : undefined,
3385
3426
  lastModified: typeof nextDataset.metadata.lastModified === 'string' ? nextDataset.metadata.lastModified : undefined
@@ -3533,11 +3574,41 @@ function refreshDatasetSuccessUpdater(state, _ref32) {
3533
3574
  if (!schemaUnchanged) {
3534
3575
  return rebindLayersAndFiltersAfterSchemaChange(state, dataId, datasets);
3535
3576
  }
3536
- return reapplyFiltersAndLayerData(_objectSpread(_objectSpread({}, state), {}, {
3537
- datasets: datasets
3577
+
3578
+ // Rebuild domains from all datasets in a synced filter, keeping its selection
3579
+ // and settings. Revalidating a saved filter would reset its GPU mode.
3580
+ var filters = state.filters.map(function (filter) {
3581
+ if (!filter.dataId.includes(dataId) || filter.type === _constants.FILTER_TYPES.polygon) {
3582
+ return filter;
3583
+ }
3584
+ var domainSteps = (0, _utils.mergeFilterDomain)(filter, datasets);
3585
+ return domainSteps ? _objectSpread(_objectSpread({}, filter), {}, {
3586
+ domain: domainSteps.domain,
3587
+ step: domainSteps.step
3588
+ }) : filter;
3589
+ });
3590
+ var nextState = reapplyFiltersAndLayerData(_objectSpread(_objectSpread({}, state), {}, {
3591
+ datasets: datasets,
3592
+ filters: filters
3538
3593
  }), dataId);
3594
+ return _objectSpread(_objectSpread({}, nextState), {}, {
3595
+ filters: nextState.filters.map(function (filter) {
3596
+ return filter.dataId.includes(dataId) ? (0, _utils.updateFilterPlot)(nextState.datasets, filter.dataId.reduce(_utils.removeFilterPlot, filter), undefined, nextState.layers) : filter;
3597
+ })
3598
+ });
3539
3599
  }
3540
3600
  function reapplyFiltersAndLayerData(state, dataId) {
3601
+ // Polygon filters read cached geometry. Refresh it before filtering so a
3602
+ // moved feature is tested at its new position, including same-length updates.
3603
+ var needsGeometry = state.layers.some(function (layer) {
3604
+ return layer.config.dataId === dataId && polygonFilterDependsOnLayerMeta(layer) && state.filters.some(function (filter) {
3605
+ var _filter$layerId;
3606
+ return filter.type === _constants.FILTER_TYPES.polygon && filter.enabled !== false && ((_filter$layerId = filter.layerId) === null || _filter$layerId === void 0 ? void 0 : _filter$layerId.includes(layer.id));
3607
+ });
3608
+ });
3609
+ if (needsGeometry) {
3610
+ state = updateAllLayerDomainData(state, [dataId], undefined);
3611
+ }
3541
3612
  var filteredDatasets = (0, _utils.applyFiltersToDatasets)([dataId], state.datasets, state.filters, state.layers);
3542
3613
  var nextState = _objectSpread(_objectSpread({}, state), {}, {
3543
3614
  datasets: filteredDatasets
@@ -3585,8 +3656,8 @@ function normalizeDatasetRows(rows, fields) {
3585
3656
  }
3586
3657
 
3587
3658
  /**
3588
- * Append or upsert rows on an existing in-memory row dataset. Keeps layers and re-runs filters.
3589
- * Arrow/DuckDB tables warn and are left unchanged (INSERT / concat not implemented).
3659
+ * Append or upsert rows on an existing in-memory row or Arrow dataset. Keeps layers and re-runs filters.
3660
+ * DuckDB tables warn and are left unchanged (INSERT not implemented). Nested, binary, and geoarrow Arrow columns are rejected.
3590
3661
  * @memberof visStateUpdaters
3591
3662
  * @public
3592
3663
  */
@@ -3613,8 +3684,8 @@ function addToDatasetUpdater(state, _ref33) {
3613
3684
  }
3614
3685
 
3615
3686
  /**
3616
- * Delete rows by index or by field values from an existing in-memory row dataset.
3617
- * Keeps layers. Arrow/DuckDB tables warn and are left unchanged.
3687
+ * Delete rows by index or by field values from an existing in-memory row or Arrow dataset.
3688
+ * Keeps layers. DuckDB tables warn and are left unchanged.
3618
3689
  * @memberof visStateUpdaters
3619
3690
  * @public
3620
3691
  */
@@ -4310,8 +4381,8 @@ function updateDatasetUpdater(state, action) {
4310
4381
  var removedLayerIds = new Set(layersToRemove);
4311
4382
  if (removedLayerIds.size) {
4312
4383
  newFilters = newFilters.flatMap(function (filter) {
4313
- var _filter$layerId;
4314
- if (filter.type !== _constants.FILTER_TYPES.polygon || !((_filter$layerId = filter.layerId) !== null && _filter$layerId !== void 0 && _filter$layerId.some(function (id) {
4384
+ var _filter$layerId2;
4385
+ if (filter.type !== _constants.FILTER_TYPES.polygon || !((_filter$layerId2 = filter.layerId) !== null && _filter$layerId2 !== void 0 && _filter$layerId2.some(function (id) {
4315
4386
  return removedLayerIds.has(id);
4316
4387
  }))) {
4317
4388
  return [filter];
@@ -5315,8 +5386,8 @@ function setPolygonFilterLayerUpdater(state, payload) {
5315
5386
  });
5316
5387
  }
5317
5388
  var filter = state.filters[filterIdx];
5318
- var _filter$layerId2 = filter.layerId,
5319
- layerId = _filter$layerId2 === void 0 ? [] : _filter$layerId2;
5389
+ var _filter$layerId3 = filter.layerId,
5390
+ layerId = _filter$layerId3 === void 0 ? [] : _filter$layerId3;
5320
5391
  var isLayerIncluded = layerId.includes(layer.id);
5321
5392
  newLayerId = isLayerIncluded ?
5322
5393
  // if layer is included, remove it
@@ -6398,7 +6469,8 @@ function replaceDatasetDepsInState(state, _ref77) {
6398
6469
  var replacedState = accuState;
6399
6470
  savedProps.forEach(function (propValue, i) {
6400
6471
  var _replacedState$merger, _replacedState$merger2;
6401
- if (propValue == null) {
6472
+ // Camera snapshots never reference datasets, even when a dataset ID is "id".
6473
+ if (propValue == null || props[i] === 'cameraBookmarks') {
6402
6474
  return;
6403
6475
  }
6404
6476
  var mergerOptions = {
@@ -6502,4 +6574,4 @@ function runSuitabilityUpdater(state, action) {
6502
6574
  proto = _executeSuitability.proto;
6503
6575
  return proto ? applyDerivedProtoDataset(nextState, proto) : nextState;
6504
6576
  }
6505
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfYWN0aW9ucyIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJzIiwiX2NvbXBvc2VySGVscGVycyIsIl9tZXJnZXJIYW5kbGVyIiwiX3Zpc1N0YXRlTWVyZ2VyIiwiX3NjaGVtYXMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl9jb2x1bW5FZGl0UmVjb25jaWxlIiwiX2ludGVyYWN0aW9uVXRpbHMiLCJfbGF5ZXJVdGlscyIsIl9kYXRhc2V0T3BzVXBkYXRlcnMiLCJfZWZmZWN0cyIsIl9kYXRhVXRpbHMiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiX2V4Y2x1ZGVkMyIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl90b1Byb3BlcnR5S2V5IiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImEiLCJ1IiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkaXNhYmxlU3RhY2tDYXB0dXJpbmciLCJ2aXNTdGF0ZVVwZGF0ZXJzIiwiZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnIiwiZXhwb3J0cyIsInRvb2x0aXAiLCJpZCIsImxhYmVsIiwiZW5hYmxlZCIsImNvbmZpZyIsImZpZWxkc1RvU2hvdyIsInRpbWV6b25lIiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkNPTVBBUkVfVFlQRVMiLCJBQlNPTFVURSIsImxlZ2VuZCIsImhpZGVJbnZpc2libGVMYXllcnMiLCJnZW9jb2RlciIsInBvc2l0aW9uIiwibGltaXRTZWFyY2giLCJjb2xvciIsIkdFT0NPREVSX0lDT05fQ09MT1IiLCJicnVzaCIsInNpemUiLCJjb29yZGluYXRlIiwiYW5ub3RhdGlvbiIsInpvb21PcGFjaXR5IiwiY29udHJvbGxlcnMiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJoaWRlQ29udHJvbCIsImR1cmF0aW9uIiwiREVGQVVMVF9FRElUT1IiLCJtb2RlIiwiRURJVE9SX01PREVTIiwiRFJBV19QT0xZR09OIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJ2aXNpYmxlIiwiSU5JVElBTF9WSVNfU1RBVEUiLCJtYXBJbmZvIiwidGl0bGUiLCJ1bmRlZmluZWQiLCJkZXNjcmlwdGlvbiIsImxheWVycyIsImxheWVyRGF0YSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXIiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsImdyb3VwQnlzIiwiam9pbnMiLCJzdWl0YWJpbGl0aWVzIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiY2hhcnRzIiwiY2hhcnRzVG9CZU1lcmdlZCIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvbnNUb0JlTWVyZ2VkIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwic3BsaXRNYXBzIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImlzTWVyZ2luZ0RhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiTGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwic3RhZ2VkVG9BZGQiLCJsb2FkaW5nSW5kaWNhdG9yVmFsdWUiLCJsb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkaW5nUHJvY2Vzc2luZyIsImxvYWRlcnMiLCJsb2FkT3B0aW9ucyIsIm1lcmdlcnMiLCJWSVNfU1RBVEVfTUVSR0VSUyIsInNjaGVtYSIsIktlcGxlckdMU2NoZW1hIiwiQUNUSU9OX1RBU0tfRklUX0JPVU5EUyIsIlRhc2siLCJmcm9tQ2FsbGJhY2siLCJfIiwiY2IiLCJBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OIiwidXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhIiwic3RhdGUiLCJfcmVmIiwibGF5ZXIiLCJpZHgiLCJtYXAiLCJseXIiLCJkIiwidXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZSIsIm5ld1N0YXRlIiwiaXNWaXNpYmxlIiwiYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCIsInJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyIsImFuaW1hdGlvbiIsInVwZGF0ZUFuaW1hdGlvbkRvbWFpbiIsInBpY2tDaGFuZ2VkUHJvcHMiLCJwcmV2IiwiY2hhbmdlZFByb3BzIiwicGlja1Byb3BzT2YiLCJvYmoiLCJrZXkiLCJwcm90b3R5cGUiLCJpc0VxdWFsIiwiVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUyIsImFwcGx5TGF5ZXJDb25maWdVcGRhdGVyIiwiYWN0aW9uIiwiX3NlcmlhbGl6ZUxheWVyIiwib2xkTGF5ZXJJZCIsIm5ld0xheWVyQ29uZmlnIiwibGF5ZXJJbmRleCIsInNhdmVkTGF5ZXJDb25maWciLCJpc1NhdmVkTGF5ZXJDb25maWdWMSIsIm5ld1BhcnNlZExheWVyIiwicGFyc2VMYXllckNvbmZpZyIsIm9sZExheWVyIiwiZmluZCIsImwiLCJkYXRhc2V0IiwiZGF0YUlkIiwibmV3TGF5ZXIiLCJ2YWxpZGF0ZUxheWVyV2l0aERhdGEiLCJrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWwiLCJuZXh0U3RhdGUiLCJ0eXBlIiwib2xkTGF5ZXJJbmRleCIsImZpbmRJbmRleCIsImxheWVyVHlwZUNoYW5nZVVwZGF0ZXIiLCJsYXllclR5cGVDaGFuZ2UiLCJuZXdMYXllcklkIiwiYXBwbHlMYXllckNvbmZpZyIsInNlcmlhbGl6ZWRPbGRMYXllciIsInNlcmlhbGl6ZUxheWVyIiwic2VyaWFsaXplZE5ld0xheWVyIiwiY2hhbmdlZCIsInZpc0NvbmZpZyIsImxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzQ29uZmlnQ2hhbmdlIiwidmlzdWFsQ2hhbm5lbHMiLCJjaGFubmVsTmFtZSIsImNoYW5uZWwiLCJjaGFubmVsUHJvcE5hbWVzIiwicHJvcCIsInNvbWUiLCJsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyIiwibGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlIiwicGljayIsIl9pdGVyYXRvciIsIl9zdGVwIiwiZXJyIiwibGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJ1cGRhdGVsYXllclZpc2liaWx0eSIsImZpbHRlckluZGV4IiwiZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lIiwiaXNMYXllckFuaW1hdGFibGUiLCJzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlciIsImVuYWJsZSIsImdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzIiwicHJvcHMiLCJuZXdDb25maWciLCJfYWN0aW9uJG5ld0NvbmZpZyIsInJlc3RDb25maWciLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwic3RhdGVXaXRoRGF0YUlkIiwibGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyIiwibmV4dExheWVyIiwidXBkYXRlTGF5ZXJDb25maWciLCJzaG91bGRDYWxjdWxhdGVMYXllckRhdGEiLCJvbGRMYXllckRhdGEiLCJ1cGRhdGVMYXllckRhdGFSZXN1bHQiLCJjYWxjdWxhdGVMYXllckRhdGEiLCJsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlciIsImxheWVySWQiLCJzcGxpdE1hcElkIiwibWFwSW5kZXgiLCJzbSIsInRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciIsInRvZ2dsZUxheWVyRm9yTWFwIiwic3luY2VkV2l0aExheWVyVGltZWxpbmUiLCJsYXllclNldElzVmFsaWRVcGRhdGVyIiwiaXNWYWxpZCIsImxheWVyVG9VcGRhdGUiLCJuZXdEYXRhIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTIiLCJhZGRPclJlbW92ZVRleHRMYWJlbHMiLCJuZXdGaWVsZHMiLCJ0ZXh0TGFiZWwiLCJkZWZhdWx0VGV4dExhYmVsIiwiREVGQVVMVF9URVhUX0xBQkVMIiwibmV3VGV4dExhYmVsIiwiY3VycmVudEZpZWxkcyIsInRsIiwiZmllbGQiLCJhZGRGaWVsZHMiLCJpbmRleCIsImluY2x1ZGVzIiwib3RoZXIiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJhZiIsIl90ZXh0TGFiZWwkZmluZCRjb2xsaSIsIl90ZXh0TGFiZWwkZmluZCIsImNvbGxpc2lvbkVuYWJsZWQiLCJCb29sZWFuIiwidXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlIiwic3BsaWNlIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyIiwiX29sZExheWVyJGdldERlZmF1bHRMIiwiX29sZExheWVyJGdldERlZmF1bHRMMiIsImdldERlZmF1bHRMYXllckNvbmZpZyIsIl90ZXh0TGFiZWwkIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIm1heWJlRml0TWFudWFsTGF5ZXJCb3VuZHMiLCJmaXRCb3VuZHMiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsImVuYWJsZUZpdEJvdW5kc09uTWFudWFsTGF5ZXIiLCJib3VuZHMiLCJmaW5kTWFwQm91bmRzIiwid2l0aFRhc2siLCJmaXRNYXBCb3VuZHMiLCJuZXdUeXBlIiwib2xkSWQiLCJDb25zb2xlIiwiZXJyb3IiLCJkZWZhdWx0TGF5ZXJQcm9wcyIsImFzc2lnbkNvbmZpZ1RvTGF5ZXIiLCJ2aXNDb25maWdTZXR0aW5ncyIsIkFHR1JFR0FUSU9OX0NPVU5UX0xBWUVSX1RZUEVTIiwiaXNQb2ludENvdW50TGFiZWwiLCJpc0xheWVySG92ZXJlZCIsIl9jYWxjdWxhdGVMYXllckRhdGE0Iiwic2V0dGluZ3MiLCJfc2V0dGluZ3MkbGF5ZXJzIiwib2xkTGF5ZXJNYXAiLCJvdGhlckxheWVycyIsInJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyIiwicmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0IiwidmlzdWFsQ2hhbm5lbCIsImluY29taW5nIiwiX3R5cGVvZjIiLCJmb3VuZCIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsIiwidXBkYXRlZFN0YXRlIiwiY2hhbm5lbFNjYWxlVHlwZSIsIkNIQU5ORUxfU0NBTEVTIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJjaGFubmVsS2V5IiwiamVua3MiLCJlZGl0Qm91bmRzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTYiLCJzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyIiwiX3JlZjQiLCJyZWR1Y2UiLCJhY2N1Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJzZXRGaWx0ZXJVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlciIsIl9yZWY1IiwiYW5pbWF0aW9uV2luZG93IiwicHJldmlvdXNXaW5kb3ciLCJuZXh0RmlsdGVyIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwiQU5JTUFUSU9OX1dJTkRPVyIsImludGVydmFsIiwiYWRqdXN0ZWQiLCJhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93IiwiZ2V0UGxvdEJhc2VJbmRleEJ5RGF0YUlkIiwiZXZlcnkiLCJ2IiwiaXNGaW5pdGUiLCJpbmRleE9mIiwic2V0RmlsdGVyIiwic3dhcF8iLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm5ld0ZpbHRlciIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwidXBkYXRlRmlsdGVyUGxvdHNBZnRlckZpbHRlcmluZyIsImFmZmVjdGVkRGF0YXNldElkcyIsInVwZGF0ZWRGaWx0ZXJJbmRleCIsIl9maWx0ZXIkcGxvdFR5cGUiLCJ1cGRhdGVGaWx0ZXJQbG90Iiwic2hvdWxkUmVmcmVzaE51bWVyaWNQbG90IiwiaXNTaWRlRmlsdGVyIiwicGxvdFR5cGUiLCJQTE9UX1RZUEVTIiwibGluZUNoYXJ0Iiwic2hhcmVkRGF0YXNldElkcyIsImludmFsaWRhdGVkRmlsdGVyIiwicmVtb3ZlRmlsdGVyUGxvdCIsIl9hY3Rpb24kdmFsdWVJbmRleCIsInZhbHVlSW5kZXgiLCJ0b0FycmF5IiwiZGF0YXNldElkc1RvRmlsdGVyIiwiX2xvb3AiLCJyZXMiLCJfdXBkYXRlRmlsdGVyUHJvcCIsImVubGFyZ2VkRmlsdGVyIiwidmlldyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiZW5sYXJnZWQiLCJzaWRlIiwidW5pcSIsImZpbHRlcmVkRGF0YXNldHMiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwidXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIiwiYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlciIsIl91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJjdXJyZW50RGF0YUlkIiwiZmllbGROYW1lIiwiZW5kRmllbGROYW1lIiwiZW5kTmFtZSIsInByZXZpb3VzVmFsdWUiLCJuZXh0RGF0YUlkcyIsIl9pIiwiX2FyciIsIm5leHRDaGFubmVscyIsImNhbmRpZGF0ZSIsImNhblJlYmluZEZpZWxkIiwiZmllbGRUeXBlIiwiYXJlRmlsdGVyRmllbGRUeXBlc0NvbXBhdGlibGUiLCJfcmVmNiIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJyZWJvdW5kRmlsdGVyIiwibmV4dE5hbWVzIiwibmV4dEZpZWxkSWR4IiwiZmllbGRJZHgiLCJncHUiLCJfYXBwbHlUaW1lRmlsdGVyRW5kRmkiLCJhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUiLCJyZWJvdW5kRW5kRmlsdGVyIiwiX2FwcGx5VGltZUZpbHRlckVuZEZpMiIsImNsZWFyZWRFbmRGaWx0ZXIiLCJkb21haW5TdGVwcyIsIm1lcmdlRmlsdGVyRG9tYWluIiwic3RlcCIsImFzc2lnbkdwdUNoYW5uZWwiLCJzZXRGaWx0ZXJHcHVNb2RlIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsIl9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJuZXh0VmFsdWUiLCJnZXREZWZhdWx0RmlsdGVyIiwiX2kyIiwiX2FycjIiLCJuZXh0VmFsIiwiZGF0YXNldElkcyIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwib2xkRGF0YUlkIiwiZGF0YXNldElkIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwidXBkYXRlZEZpbHRlciIsIm5ld0RhdGFzZXQiLCJfYXBwbHlUaW1lRmlsdGVyRW5kRmkzIiwiZ3B1Q2hhbm5lbCIsImdwdUVuZENoYW5uZWwiLCJzdXBwb3J0c0ludmVyc2lvbiIsIl9zdGF0ZSRkYXRhc2V0cyRkYXRhcyIsImRpc2FibGVEYXRhT3BlcmF0aW9uIiwiaW52ZXJ0ZWQiLCJkaXNhYmxlR3B1SWZJbnZlcnRlZCIsImZpbHRlclR5cGVVc2VzR3B1IiwibGF5ZXJJZERpZmZlcmVuY2UiLCJ4b3IiLCJsYXllckRhdGFJZHMiLCJsaWQiLCJuZXdEYXRhSWRzIiwic2V0RmlsdGVyUGxvdFVwZGF0ZXIiLCJfcmVmNyIsIl9uZXdGaWx0ZXIkcGxvdFR5cGUiLCJfbmV3RmlsdGVyJHBsb3RUeXBlMyIsIm5ld1Byb3AiLCJwcmV2aW91c051bWVyaWNJbnRlcnZhbCIsIm51bWVyaWNJbnRlcnZhbCIsInBsb3RUeXBlVXBkYXRlIiwiX25ld0ZpbHRlciRwbG90VHlwZTIiLCJncm91cEJ5IiwibWVyZ2VQbG90R3JvdXBCeSIsInBpY2tfIiwibWVyZ2VfIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJoaXN0b2dyYW0iLCJudW1lcmljSW50ZXJ2YWxDaGFuZ2VkIiwiYmlucyIsImFkZEZpbHRlclVwZGF0ZXIiLCJjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIiLCJvcmlnaW5hbEluZGV4IiwibGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciIsIl9yZWY4Iiwib2xkVml4Q29uZmlnIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciIsImlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnIiwic2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciIsInVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwiX3JlZjkiLCJzZXRGaWx0ZXJWaWV3VXBkYXRlciIsInNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyIsIm9wZW5lZEZpbHRlciIsInRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyIiwiZmVhdHVyZVRvRmlsdGVyVmFsdWUiLCJyZW1vdmVGaWx0ZXJVcGRhdGVyIiwiX3N0YXRlJGZpbHRlcnMkaWR4IiwibmV3RmlsdGVycyIsIm5ld0VkaXRvciIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiYWRkTGF5ZXJVcGRhdGVyIiwibmV3TGF5ZXJEYXRhIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwid2FybiIsIl9hY3Rpb24kZGF0YXNldElkIiwiZGVmYXVsdERhdGFzZXQiLCJMYXllciIsInJlbW92ZUxheWVyVXBkYXRlciIsIl9yZWYwIiwibGF5ZXJUb1JlbW92ZSIsInJlbW92ZUxheWVyRnJvbVpvb21PcGFjaXR5IiwiZmlsdGVyT3V0QnlJZCIsInJlbW92ZUVsZW1lbnRBdEluZGV4IiwicmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyIiwicmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyIsImNoYXJ0IiwiaXNMYXllckNoYXJ0Q29uZmlnIiwicmVvcmRlckxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JkZXIiLCJhZGRMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXAiLCJnZXROZXdMYXllckdyb3VwIiwibmV3TGF5ZXJPcmRlciIsImFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cFRvUmVtb3ZlIiwiZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyIiwibGF5ZXJJZHNUb1JlbW92ZSIsImdldEZsYXRMYXllck9yZGVyIiwidXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIiLCJvcHRpb25zIiwibmV3TGF5ZXJHcm91cCIsImxheWVySWRzIiwiYWNjIiwidXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlciIsImFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBJZCIsImVudHJ5IiwibmV3R3JvdXBMYXllck9yZGVyIiwicmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXIiLCJuZXdMYXllckdyb3VwT3JkZXIiLCJzd2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyIiwib3JpZ2luTGF5ZXJJZCIsImRlc3RpbmF0aW9uTGF5ZXJJZCIsIm9yaWdpbkxheWVyR3JvdXBJZCIsImRlc3RpbmF0aW9uTGF5ZXJHcm91cElkIiwib3JpZ2luSW5kZXgiLCJkZXN0aW5hdGlvbkluZGV4IiwiYXJyYXlNb3ZlIiwiZGVzdEluZGV4IiwiZHVwbGljYXRlTGF5ZXJVcGRhdGVyIiwiX3JlZjEwIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJnZW5lcmF0ZUhhc2hJZCIsIkxBWUVSX0lEX0xFTkdUSCIsInBhcmVudEdyb3VwIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJhcnJheUluc2VydCIsInVwZGF0ZWRHcm91cCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIl9hY3Rpb24kY29uZmlnMiIsIl9hY3Rpb24kY29uZmlnMyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiZWZmZWN0IiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwibmV3RWZmZWN0IiwiY3JlYXRlRWZmZWN0Iiwic2V0UHJvcHMiLCJmaXhFZmZlY3RPcmRlciIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTIiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEzIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtZXJnZUNoYXJ0Q29uZmlnIiwiZGlzcGxheSIsImNoYXJ0RGlzcGxheSIsImF4aXNGaWVsZElmUHJlc2VudCIsImF4aXMiLCJmaWVsZE5hbWVzIiwiX2F4aXMkZmllbGQiLCJkcm9wTWlzc2luZ0NoYXJ0RmllbGRzIiwiU2V0IiwieEF4aXMiLCJzaG91bGRSZW1vdmUiLCJyZW1vdmVkIiwicmVtb3ZlZElkcyIsImZpbHRlcklkcyIsImZsYXRNYXAiLCJfY2hhcnQkY3Jvc3NGaWx0ZXIiLCJjcm9zc0ZpbHRlciIsInJlZHVjZVJpZ2h0IiwiYWRkQ2hhcnRVcGRhdGVyIiwiX3JlZjE0IiwiX2NoYXJ0JGRpc3BsYXkkaXNDb25mIiwiX2NoYXJ0JGRpc3BsYXkiLCJleGlzdGluZyIsImlzSnNvbkVkaXRvckFjdGl2ZSIsInVwZGF0ZUNoYXJ0VXBkYXRlciIsIl9yZWYxNSIsIl9uZXh0JGNyb3NzRmlsdGVyMiIsIl9wcmV2JGNyb3NzRmlsdGVyIiwiX3ByZXYkY3Jvc3NGaWx0ZXIyIiwiX25leHQkY3Jvc3NGaWx0ZXIzIiwiZGF0YUlkQ2hhbmdlZCIsImxheWVySWRDaGFuZ2VkIiwiX25leHQkY3Jvc3NGaWx0ZXIiLCJvd25lZEZpbHRlcklkcyIsInJlbW92ZUNoYXJ0VXBkYXRlciIsIl9yZWYxNiIsIm1ha2VOZXdBbm5vdGF0aW9uIiwiX2NvbmZpZyRraW5kIiwiX3JlZjE3IiwiX2NvbmZpZyR0ZXh0U2lkZSIsIl9yZWYxOCIsIl9jb25maWckdGV4dFZlcnRpY2FsUCIsIl9jb25maWckaWQiLCJfY29uZmlnJGlzVmlzaWJsZSIsIl9jb25maWckYXV0b1NpemUiLCJfY29uZmlnJGF1dG9TaXplWSIsIl9jb25maWckYW5jaG9yUG9pbnQiLCJfY29uZmlnJGxhYmVsIiwiX2NvbmZpZyRsaW5lQ29sb3IiLCJfY29uZmlnJGxpbmVXaWR0aCIsIl9jb25maWckdGV4dFdpZHRoIiwiX2NvbmZpZyR0ZXh0SGVpZ2h0IiwiX2NvbmZpZyR0ZXh0VmVydGljYWxBIiwiX2FybUxlbmd0aCIsIl9hcm1MZW5ndGgyIiwiX2FybUxlbmd0aDMiLCJfcmFkaXVzSW5NZXRlcnMiLCJraW5kIiwiSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQiLCJwcm92aWRlZEFuZ2xlIiwiYW5nbGUiLCJkZXJpdmVkRnJvbUFuZ2xlIiwidGV4dFBsYWNlbWVudEZyb21BbmdsZSIsInRleHRTaWRlIiwiQW5ub3RhdGlvbktpbmQiLCJURVhUIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfU0lERSIsInRleHRWZXJ0aWNhbFBvc2l0aW9uIiwidmVydGljYWwiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTiIsImJhc2UiLCJhdXRvU2l6ZSIsImF1dG9TaXplWSIsImFuY2hvclBvaW50IiwibGluZUNvbG9yIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJsaW5lV2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCIsInRleHRXaWR0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRIIiwidGV4dEhlaWdodCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCIsInRleHRWZXJ0aWNhbEFsaWduIiwiZGVmYXVsdEFuZ2xlIiwiQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlQiLCJJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUiLCJQT0lOVCIsImFybUxlbmd0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RIIiwiQVJST1ciLCJDSVJDTEUiLCJyYWRpdXNJbk1ldGVycyIsImFkZEFubm90YXRpb25VcGRhdGVyIiwibmV3QW5ub3RhdGlvbiIsInJlbW92ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE5IiwiZ2V0Wm9vbU9wYWNpdHlBbm5vdGF0aW9uVGFyZ2V0SWQiLCJ1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYyMCIsIm5leHRBbm5vdGF0aW9uIiwibmV3QW5ub3RhdGlvbnMiLCJkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYyMSIsImNsb25lRGVlcCIsInNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMjIiLCJpc0VkaXRpbmdUZXh0IiwicmVtb3ZlRGF0YXNldFVwZGF0ZXIiLCJkYXRhc2V0S2V5IiwicmVtb3ZlT3BzRm9yRGF0YXNldHMiLCJyZW1vdmVTaW5nbGVEYXRhc2V0VXBkYXRlciIsIl9zdGF0ZSRkYXRhc2V0cyIsIl9kYXRhc2V0IiwibmV3RGF0YXNldHMiLCJsYXllcnNUb1JlbW92ZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJyZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnIiwiX3JlZjIzIiwiX2ludGVyYWN0aW9uQ29uZmlnIiwiX2NvbmZpZyRmaWVsZHNUb1Nob3ciLCJ1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsInVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyIiwidXBkYXRlRGF0YXNldFByb3BzVXBkYXRlciIsIm5ld0NvbG9yIiwicmVzZXRNYXBDb25maWdVcGRhdGVyIiwiaW5pdGlhbFN0YXRlIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJfcmVmMjQiLCJfcmVmMjQkcGF5bG9hZCIsInBheWxvYWQiLCJfcmVmMjQkcGF5bG9hZCRjb25maWciLCJfcmVmMjQkcGF5bG9hZCRvcHRpb24iLCJ2aXNTdGF0ZSIsImtlZXBFeGlzdGluZ0NvbmZpZyIsIm1lcmdlZFN0YXRlIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm1lcmdlciIsImlzVmFsaWRNZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZSIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwidG9NZXJnZVByb3AiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiayIsIkdFT0NPREVSX0RBVEFTRVRfTkFNRSIsImdlb2NvZGVyTGF5ZXIiLCJHRU9DT0RFUl9MQVlFUl9JRCIsIl9jb25maWckY29uZmlnJGNvbG9yIiwibGF5ZXJDbGlja1VwZGF0ZXIiLCJwaW5uZWQiLCJwaWNrZWQiLCJtYXBDbGlja1VwZGF0ZXIiLCJtb3VzZU1vdmVVcGRhdGVyIiwiX3JlZjI1IiwiZXZ0IiwicG9pbnQiLCJtb3VzZVBvc2l0aW9uIiwibG5nTGF0IiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiY29tcHV0ZVNwbGl0TWFwTGF5ZXJzIiwiZHVwbGljYXRlIiwiY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgiLCJfcmVmMjYiLCJoYXNUYWJ1bGFyRGF0YXNldERhdGEiLCJkYXRhIiwiX2RhdGEkcm93cyIsIl9kYXRhJGNvbHMiLCJyb3dzIiwiY29scyIsImFycm93VGFibGUiLCJuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlIiwiX2RhdGFzZXQkaW5mbyIsIl9kYXRhc2V0JG1ldGFkYXRhIiwiRGF0YXNldFR5cGUiLCJFWFRFUk5BTExZX0hPU1RFRCIsIm1ldGFkYXRhIiwic291cmNlIiwiaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJfeCIsIl9oeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlMiIsIl9yZWYyNyIsIl9kYXRhc2V0JG1ldGFkYXRhNyIsIl9kYXRhc2V0JG1ldGFkYXRhOCIsIm9uUHJvZ3Jlc3MiLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTkiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYXJnIiwiYWJydXB0IiwibG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0IiwiZm9ybWF0IiwiZ2V0UmVtb3RlU291cmNlRm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZSIsIl9yZWYyOCIsIl9jYWxsZWUiLCJtZXNzYWdlIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsIl94MiIsImdldERhdGFzZXRQcm9ncmVzc0lkIiwiX2RhdGFzZXQkaW5mbzIiLCJfZGF0YXNldCRtZXRhZGF0YTIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwicHJvZ3Jlc3NJZCIsInByb2dyZXNzIiwiX3Byb2dyZXNzJHBlcmNlbnQiLCJzZXRMb2FkaW5nUHJvZ3Jlc3MiLCJNYXRoIiwicm91bmQiLCJwZXJjZW50IiwicGhhc2UiLCJjaGFpbiIsImh5ZHJhdGVkIiwidGFzayIsImNsZWFyTG9hZGluZ1Byb2dyZXNzIiwiaWRzIiwiY3VycmVudCIsInByb2Nlc3NpbmciLCJuZXh0UHJvY2Vzc2luZyIsInBhdGNoRGF0YXNldE1ldGFkYXRhIiwicGF0Y2giLCJjb3B5VGFibGVBbmRVcGRhdGUiLCJyZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX3gzIiwiX3JlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUiLCJfY2FsbGVlMyIsIl9yZWYyOSIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsIlJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwicmVmcmVzaERhdGFzZXRVcGRhdGVyIiwiX3JlZjMwIiwiX2RhdGFzZXQkbWV0YWRhdGEzIiwiX2RhdGFzZXQkbWV0YWRhdGE0IiwibmV4dERhdGFzZXQiLCJyZWZyZXNoRXJyb3IiLCJyZWZyZXNoUHJvZ3Jlc3MiLCJfcHJvZ3Jlc3MkcGVyY2VudDIiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzIiwiYmltYXAiLCJyZWZyZXNoRGF0YXNldFN1Y2Nlc3MiLCJyZWZyZXNoRGF0YXNldEVycm9yIiwicmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXIiLCJfcmVmMzEiLCJfZGF0YXNldCRtZXRhZGF0YTUiLCJfZGF0YXNldCRtZXRhZGF0YTYiLCJuZXh0UGVyY2VudCIsIm1heCIsIm1pbiIsImZpZWxkTmFtZXNFcXVhbCIsInJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZSIsIm5leHRMYXllcnMiLCJkcm9wcGVkTGF5ZXJzIiwicmVib3VuZCIsIm5leHRMYXllck9yZGVyIiwibmV4dFNwbGl0TWFwcyIsIm5leHRMYXllckRhdGEiLCJvbGRJZHgiLCJmaWx0ZXJzRm9yRGF0YXNldCIsIm90aGVyRmlsdGVycyIsIl92YWxpZGF0ZUZpbHRlcnNVcGRhdCIsInZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzIiwidXBkYXRlZERhdGFzZXRzIiwibmV4dEZpbHRlcnMiLCJyZWZyZXNoRGF0YXNldFN1Y2Nlc3NVcGRhdGVyIiwiX3JlZjMyIiwiX3Jlc3VsdCRkYXRhIiwibWV0YWRhdGFQYXRjaCIsInNjaGVtYVVuY2hhbmdlZCIsIm5vdE1vZGlmaWVkIiwidXBkYXRlIiwicmVmcmVzaGVkIiwicmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEiLCJpc0RhdGFzZXRSb3dMaXN0IiwiaXNQbGFpbk9iamVjdCIsInRvQXJyYXlSb3ciLCJyb3ciLCJyZWNvcmQiLCJub3JtYWxpemVEYXRhc2V0Um93cyIsImxpc3QiLCJub3JtYWxpemVkIiwiYXJyYXlSb3ciLCJhZGRUb0RhdGFzZXRVcGRhdGVyIiwiX3JlZjMzIiwiYXBwbGllZCIsInVwc2VydEJ5IiwidXBzZXJ0Um93cyIsImFwcGVuZFJvd3MiLCJyZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIiLCJfcmVmMzQiLCJyb3dJbmRleGVzIiwiYnlGaWVsZCIsImluZGV4ZXMiLCJmaW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMiLCJyZW1vdmVSb3dzIiwicmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXIiLCJfcmVmMzUiLCJ1cGRhdGVWaXNEYXRhVXBkYXRlciIsInJlYWR5VGFza3MiLCJyZW1vdGVUYXNrcyIsIm5vdGlmaWNhdGlvblRhc2tzIiwiaHlkcmF0ZVByb2dyZXNzIiwiX3JlZjM2IiwiZGF0YXNldEluZGV4IiwiX3JlZjM2JGluZm8iLCJyZXN0IiwicHJvdG8iLCJyZW1vdGUiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsInByb2dyZXNzSWRzIiwiYmF0Y2hlcyIsInRhc2tzIiwic2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIiLCJwYXlsb2FkXyIsImNoYW5nZSIsImJhdGNoIiwiYmF0Y2hJbmRleCIsImFsbFNldHRsZWQiLCJyZXN1bHRzIiwib25GaW5pc2giLCJhZGRUb01hcE9wdGlvbnMiLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9yZWYzNyIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwiQUNUSU9OX1RBU0siLCJyZWFzb24iLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJERUxBWV9UQVNLIiwibWVyZ2VTdGF0ZVJlc3VsdCIsIm1lcmdlU3RhdGVGcm9tTWVyZ2VycyIsImFsbE1lcmdlZCIsInBvc3RNZXJnZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyIsImxheWVyVmlzQ29uZmlnIiwicG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YSIsIl9sYXllciRjb25maWciLCJMQVlFUl9UWVBFUyIsImdlb2pzb24iLCJjb2x1bW5Nb2RlIiwiZkRhdGFJZCIsImRhdGFzZXRGaWx0ZXJlZCIsImRhdGFFbXB0eSIsIm5ld0xheWVycyIsImF1dG9DcmVhdGVMYXllcnMiLCJhZGREZWZhdWx0TGF5ZXJzIiwibGF5ZXJzTm90SW5TcGxpdE1hcHMiLCJtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMiLCJ0b29sdGlwRmllbGRzIiwiYXV0b0NyZWF0ZVRvb2x0aXBzIiwiYWRkRGVmYXVsdFRvb2x0aXBzIiwicG9seWdvbkZpbHRlcnMiLCJwb2x5Z29uIiwicG9seWdvbk1ldGFEYXRhSWRzIiwiX2YkbGF5ZXJJZCIsImNlbnRlck1hcCIsInBhZGRpbmciLCJmaXRCb3VuZHNUYXNrIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheTIiLCJpc1JnYkNvbG9yIiwiZGVlcG1lcmdlIiwicmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hIiwicmVuYW1lcyIsIm5ld1RhYmxlIiwiX2xheWVyJGNvbmZpZyR0ZXh0TGFiIiwiY29uZmlnUGF0Y2giLCJjb2x1bW5zUGF0Y2giLCJjb2x1bW5zQ2hhbmdlZCIsImNvbHVtbnMiLCJfcmVmMzgiLCJfcmVmMzkiLCJja2V5IiwiY29sIiwiX3JlZjQwIiwiZmllbGRDb25maWciLCJfdGwkZmllbGQiLCJfdGwkZmllbGQyIiwiX3JlbmFtZXMkbmFtZSIsImxheWVyQ29weSIsImFzc2lnbiIsImNyZWF0ZSIsImdldFByb3RvdHlwZU9mIiwiaGFzQWxsQ29sdW1ucyIsIkZJTFRFUl9QTE9UX1lfQVhJU19UWVBFUyIsIkFMTF9GSUVMRF9UWVBFUyIsImludGVnZXIiLCJyZWFsIiwiY2xlYXJUaW1lbGluZUZpbHRlclN0YXRlIiwiX3JlZjQxIiwiX3N5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwiX3N5bmNUaW1lbGluZU1vZGUiLCJzeW5jVGltZWxpbmVNb2RlIiwiX3RpbWVCaW5zIiwidGltZUJpbnMiLCJfbGluZUNoYXJ0IiwiX3RpbWV6b25lIiwiX2ludmVydFRyZW5kQ29sb3IiLCJpbnZlcnRUcmVuZENvbG9yIiwiX3Nob3dUaW1lRGlzcGxheSIsInNob3dUaW1lRGlzcGxheSIsImZpeGVkRG9tYWluIiwiZnJlZSIsInJlY29uY2lsZVRpbWVsaW5lUGxvdEFmdGVyUHJpbWFyeVJlbW92YWwiLCJfZmlsdGVyJHlBeGlzIiwiX3ByaW1hcnlEYXRhc2V0JGZpZWxkIiwiX2ZpbHRlciRwbG90VHlwZTIiLCJwcmltYXJ5RGF0YXNldCIsIl9maWx0ZXIkeUF4aXMyIiwiZ3JvdXBCeUZpZWxkTmFtZSIsImhhc0dyb3VwQnlGaWVsZCIsInVwZGF0ZURhdGFzZXRVcGRhdGVyIiwiX3JlbmFtZXMkc29ydGVkQ29sdW1uIiwiX2ludGVyYWN0aW9uQ29uZmlnMiIsIl90b29sdGlwJGNvbmZpZyIsIl9hY3Rpb24kcmVuYW1lcyIsIl9yZWY0MiIsInNvcnRDb2x1bW4iLCJfcmVmNDMiLCJzb3J0ZWRDb2x1bW4iLCJzb3J0TW9kZSIsInVwZGF0ZVNjaGVtYSIsImRhdGFSZXZpc2lvbiIsImZpbHRlcmVkSWR4Q1BVIiwiYWxsSW5kZXhlcyIsImZpbHRlclJlY29yZENQVSIsInNvcnRPcmRlciIsIm5ld0ZpZWxkc0J5TmFtZSIsIk1hcCIsInBpbm5lZENvbHVtbnMiLCJfcmVuYW1lcyRuYW1lMiIsImhpZGRlbkNvbHVtbnMiLCJfcmVuYW1lcyRuYW1lMyIsIm5leHRTb3J0ZWRDb2x1bW4iLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwiZGF0YXNldElkc1RvUmVmaWx0ZXIiLCJfcmVuYW1lcyRvbGROYW1lIiwiX25ld1RhYmxlJGdldENvbHVtbkZpIiwiX3VwZGF0ZWQkeUF4aXMiLCJ2aSIsIm9sZE5hbWUiLCJuZXdOYW1lIiwiZ2V0Q29sdW1uRmllbGRJZHgiLCJuZXh0RmlsdGVyVHlwZSIsImdldENvbHVtbkZpbHRlclByb3BzIiwiYWRkIiwiZGV0YWNoZWRGaWx0ZXIiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUyIiwidXBkYXRlZCIsImxlYXZpbmdUaW1lRmlsdGVyIiwib2xkRW5kTmFtZSIsIl9yZW5hbWVzJG9sZEVuZE5hbWUiLCJfcmVmNDQiLCJfYXBwbHlUaW1lRmlsdGVyRW5kRmk0IiwiX3JlbmFtZXMkdXBkYXRlZCR5QXhpIiwieUF4aXNOYW1lIiwieUF4aXNGaWVsZCIsInJlY29uY2lsZWQiLCJyZW1vdmVkTGF5ZXJJZHMiLCJfZmlsdGVyJGxheWVySWQiLCJzdXJ2aXZpbmdMYXllcnMiLCJuZXh0RmllbGRzVG9TaG93IiwiX3JlbmFtZXMkZiRuYW1lIiwicmVtYXBDaGFydHNGb3JEYXRhc2V0IiwicmVuYW1lVGFibGVDb2x1bW5VcGRhdGVyIiwiY2FuTXV0YXRlRGF0YXNldFNjaGVtYSIsImJ1aWxkUmVuYW1lQ29sdW1uRGF0YSIsImNoYW5nZVRhYmxlQ29sdW1uVHlwZVVwZGF0ZXIiLCJidWlsZENoYW5nZUNvbHVtblR5cGVEYXRhIiwiZm9ybWF0Q29sdW1uVHlwZUNvbnZlcnNpb25FcnJvciIsImRlbGV0ZVRhYmxlQ29sdW1uVXBkYXRlciIsImJ1aWxkRGVsZXRlQ29sdW1uRGF0YSIsIl9zdGF0ZSRzcGxpdE1hcHMkaW5kZSIsImluZGV4VG9SZXRyaWV2ZSIsIm1hcExheWVycyIsIm5leHRGaWxlTG9hZElkIiwiY3JlYXRlRmlsZUxvYWRJZCIsImxvYWRJZCIsImZpbmlzaEZpbGVMb2FkIiwiZmlsZUNhY2hlIiwibG9hZEZpbGVzVXBkYXRlciIsIl9zdGF0ZSRmaWxlTG9hZGluZyRvcCIsImZpbGVzIiwiX2FjdGlvbiRvbkZpbmlzaCIsImxvYWRGaWxlc1N1Y2Nlc3MiLCJjb21wYW5pb25GaWxlcyIsImZpbGVzVG9Mb2FkIiwiZ2V0RmlsZXNUb1BhcnNlIiwiZGVmZXJBZGRUb01hcCIsImFwcGVuZERlZmVycmVkRmlsZUxvYWQiLCJwcmV2aW91c0Vycm9ycyIsImZyb21FbnRyaWVzIiwiX3JlZjQ1IiwiX3JlZjQ2IiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwiX3JlZjQ3IiwibG9hZGluZyIsImZpbGUiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInN0YXRlV2l0aENhY2hlIiwibG9hZE5leHRGaWxlIiwiX3N0YXRlJGZpbGVMb2FkaW5nIiwiY3VycmVudExvYWRJZCIsIl9maWxlc1RvTG9hZCIsIl90b0FycmF5MiIsInJlbWFpbmluZ0ZpbGVzVG9Mb2FkIiwiaXNaaXBGaWxlTmFtZSIsIkVYUEFORF9aSVBfVEFTSyIsImV4dGVuc2lvbnMiLCJkYXRhc2V0RXh0ZW5zaW9uc0Zyb21Mb2FkZXJzIiwiZXhwYW5zaW9uIiwiZXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3MiLCJhcmNoaXZlTmFtZSIsImxvYWRGaWxlc0VyciIsIm1ha2VMb2FkRmlsZVRhc2siLCJzZWVuIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImxvYWRlciIsIl9pdGVyYXRvcjUiLCJfc3RlcDUiLCJleHRlbnNpb24iLCJleHQiLCJyZXBsYWNlIiwidHJpbSIsInRvTG93ZXJDYXNlIiwiY29tcGFuaW9uRmlsZXNGb3JBcmNoaXZlIiwiZXh0cmFjdGVkIiwic2hhcGVmaWxlIiwiY29tcGFuaW9ucyIsIndpdGhvdXRGaWxlTG9hZGluZ1Byb2dyZXNzRW50cnkiLCJleHBhbmRaaXBBcmNoaXZlU3VjY2Vzc1VwZGF0ZXIiLCJhZGREYXRhT3B0aW9ucyIsImRpc3BsYXlOYW1lIiwiTE9BRF9GSUxFX1RBU0siLCJnZW4iLCJuZXh0RmlsZUJhdGNoIiwicHJvY2Vzc0ZpbGVDb250ZW50IiwiY29udGVudCIsInVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nIiwicHJlcGFyZVByb2dyZXNzaXZlUmVwbGF5IiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIlBST0NFU1NfRklMRV9EQVRBIiwibG9hZEZpbGVTdGVwU3VjY2VzcyIsInBhcnNlUHJvZ3Jlc3MiLCJwcmV2UHJvZ3Jlc3MiLCJuZXh0RmlsZUJhdGNoVXBkYXRlciIsIl9yZWY0OCIsIl9hY2N1bXVsYXRlZCRkYXRhIiwiX3JlZjQ4JHBheWxvYWQiLCJhY2N1bXVsYXRlZCIsImVuZHNXaXRoIiwic2tpcEFycm93Q29tcGFjdCIsIlVOV1JBUF9UQVNLIiwiX3JlZjQ5IiwiY2xlYXJTdGFnZWRMb2FkZWRGaWxlc1VwZGF0ZXIiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjUwIiwiZXJyb3JMb2FkSWQiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJfcmVmNTEiLCJkYXRhSWRzIiwiZmlsdGVyRGF0YXNldENQVSIsInNldE1hcEluZm9VcGRhdGVyIiwib3B0aW9uYWxNYXBUZXh0IiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJmaW5kRGVmYXVsdExheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJmaW5kRmllbGRzVG9TaG93IiwibWVyZ2VkIiwiX3JlZjUzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTciLCJfc3RhdGUkZmlsdGVycyIsImFuaW1hdGFibGVMYXllcnMiLCJsYXllckRvbWFpbnMiLCJtZXJnZWREb21haW4iLCJtZXJnZVRpbWVEb21haW5zIiwiZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyIiwibWVyZ2VkVGltZVN0ZXBzIiwic29ydCIsIkJBU0VfU1BFRUQiLCJGUFMiLCJzeW5jZWRGaWx0ZXIiLCJuZXdBbmltYXRpb25Eb21haW4iLCJpc0luUmFuZ2UiLCJzZXRFZGl0b3JNb2RlVXBkYXRlciIsIl9yZWY1NCIsInNrZXRjaGVzRW5hYmxlZCIsImVuYWJsZURyYXdPbk1hcFNrZXRjaGVzIiwiRFJBV19QT0lOVCIsIkRSQVdfTElORVNUUklORyIsInNldEZlYXR1cmVzVXBkYXRlciIsIl9yZWY1NSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aTIiLCJfcmVmNTUkZmVhdHVyZXMiLCJsYXN0RmVhdHVyZSIsInByb3BlcnRpZXMiLCJpc0Nsb3NlZCIsInNoYXBlIiwiRURJVCIsImZlYXR1cmUiLCJiYm94IiwiZmVhdHVyZVZhbHVlIiwiZmlsdGVySWR4IiwiZmlsIiwiZmluZEVkaXRvckZlYXR1cmUiLCJfc3RhdGUkZWRpdG9yJHNlbGVjdGUiLCJmcm9tRWRpdG9yIiwiaXRlbSIsInNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzVXBkYXRlciIsIl9yZWY1NiIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZTIiLCJuZXh0RmVhdHVyZSIsIm1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzIiwibmV4dEVkaXRvciIsInNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNTciLCJzZWxlY3Rpb25Db250ZXh0IiwiZGVsZXRlRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNTgiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyIiwibm9uZUZpbHRlckZlYXR1cmUiLCJfZmlsdGVyJGxheWVySWQyIiwiaXNMYXllckluY2x1ZGVkIiwic2tldGNoRmVhdHVyZSIsInRvU2tldGNoRmVhdHVyZSIsInN0YXRlV2l0aG91dEZpbHRlciIsImdlbmVyYXRlUG9seWdvbkZpbHRlciIsInNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyIiwidmlzaWJsZUxheWVySWRzIiwiYWxsTGF5ZXJJZHMiLCJzb3J0VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjU5IiwiY29sdW1uIiwiY3VycmVudE1vZGUiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwic29ydGVkIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjYwIiwicGluVGFibGVDb2x1bW5zIiwidG9nZ2xlVGFibGVDb2x1bW5IaWRkZW5VcGRhdGVyIiwiX3JlZjYxIiwidG9nZ2xlSGlkZGVuVGFibGVDb2x1bW4iLCJzaG93QWxsVGFibGVDb2x1bW5zVXBkYXRlciIsIl9yZWY2MiIsInNob3dBbGxUYWJsZUNvbHVtbnMiLCJjb3B5VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjYzIiwidGV4dCIsImRhdGFDb250YWluZXIiLCJwYXJzZUZpZWxkVmFsdWUiLCJ2YWx1ZUF0Iiwiam9pbiIsImNvcHkiLCJzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlciIsIl9yZWY2NCIsImZvcm1hdHMiLCJkaXNwbGF5Rm9ybWF0IiwidGV4dExhYmVsTGF5ZXJJbmRleGVzIiwiX2xheWVyJGNvbmZpZzIiLCJjb2xvckZpZWxkIiwidXBkYXRlZENvbG9yRmllbGQiLCJ1cGRhdGVUZXh0TGFiZWwiLCJnZXRNYXBwZWRWYWx1ZSIsImZpbHRlclByb3BzIiwibWFwcGVkVmFsdWUiLCJ5aWVsZEZvclBhaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX3g0IiwiX3JlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl9jYWxsZWU0IiwiX3JlZjY1IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiY29sbGVjdENvbHVtblZhbHVlcyIsImdldENvbHVtblN0YXRpc3RpY3MiLCJMT0FEX0NPTFVNTl9TVEFUU19UQVNLIiwibG9hZENvbHVtblN0YXRzVXBkYXRlciIsIl9yZWY2NiIsImZpZWxkTmFtZXNUb0xvYWQiLCJmaWVsZHNUb0xvYWQiLCJpc0xvYWRpbmdTdGF0cyIsIl9yZWY2NyIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MiLCJsb2FkQ29sdW1uU3RhdHNFcnJvciIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyIiwiX3JlZjY4IiwibmV3RmlsdGVyUHJvcHMiLCJjb2x1bW5TdGF0cyIsImxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlciIsIl9yZWY2OSIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwiY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIiLCJfYWN0aW9uIiwicHJvY2Vzc0dlb2pzb24iLCJlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24iLCJjbGVhcmVkU3RhdGUiLCJsYWJlbElkIiwiZmxvb3IiLCJyYW5kb20iLCJleHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlciIsIl9yZWY3MCIsImlzVGlsZWRFeHRyYWN0IiwiaXNWZWN0b3JUaWxlRXh0cmFjdExheWVyIiwiaXNSYXN0ZXJUaWxlRXh0cmFjdExheWVyIiwiZXh0cmFjdFJvd3NJbnNpZGVGZWF0dXJlIiwicm93Q291bnQiLCJkb3dubG9hZCIsImRvd25sb2FkQ2xpcCIsInBuZyIsImpzb24iLCJzdWNjZXNzTm90aWZpY2F0aW9uIiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNzEiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjcyIiwibGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlciIsIl9sYXllciRmaWx0ZXJlZEl0ZW1DbyIsImV2ZW50IiwiZGVja2dsTGF5ZXJJZCIsImNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJ3bXNGZWF0dXJlSW5mb1VwZGF0ZXIiLCJmZWF0dXJlSW5mbyIsImNvbnNvbGUiLCJvYmplY3QiLCJ3bXNGZWF0dXJlSW5mbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbzIiLCJfYWN0aW9uJGVuYWJsZSIsImludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyIiwibmV3RmlsdGVyRG9tYWluIiwiYWRqdXN0VGltZUZpbHRlckludGVydmFsIiwibmV3RmlsdGVyVmFsdWUiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsIl9yZWY3MyIsInNldExvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJfcmVmNzQiLCJfc3RhdGUkbG9hZGluZ1Byb2dyZXMiLCJfc3RhdGUkbG9hZGluZ1Byb2Nlc3MiLCJ0aW1lbGluZVZhbHVlIiwiZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIiLCJzbmFwVG9NYXJrcyIsIl9maWx0ZXIkc3luY1RpbWVsaW5lTSIsIm5ld01vZGUiLCJzdGFydCIsImludGVydmFsSW5kZXgiLCJjdXJyZW50SW5kZXgiLCJtZXRhIiwidGFyZ2V0VGltZUludGVydmFsIiwibmV3SW5kZXgiLCJUSU1FX0lOVEVSVkFMU19PUkRFUkVEIiwibGF5ZXJUaW1lSW50ZXJ2YWwiLCJMYXllclRvRmlsdGVyVGltZUludGVydmFsIiwiZ2V0RGVmYXVsdFRpbWVGb3JtYXQiLCJ1cGRhdGVkUGxvdFR5cGUiLCJwbG90QmFzZUluZGV4QnlEYXRhSWQiLCJ1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUiLCJkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfdmFsdWUkY29uZmlnIiwiX3ZhbHVlJGNvbmZpZzIiLCJyZXBsYWNlZCIsImlzT2JqZWN0IiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmNzYiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwiZGVsZXRlT3JpZ2luYWxEYXRhc2V0IiwiY29tcG9zZV8iLCJhcHBseV8iLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwiaWZfIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwiX3NlcmlhbGl6ZWRTdGF0ZSRzcGxpIiwiY29tYmluZVNwbGl0TWFwc0J5SW5kZXgiLCJwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQiLCJwcmV2aW91c09yZGVyIiwicGFya2VkIiwicGFya2VkSWRzIiwia25vd24iLCJvcmRlcmVkIiwiX3JlZjc3IiwiYWNjdVN0YXRlIiwiX3JlZjc4IiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJnZXRDaGlsZERhdGFzZXRJZHMiLCJwcmVzZXJ2ZU9yZGVyIiwidG9NZXJnZVByb3BzIiwic2F2ZWRQcm9wcyIsInJlcGxhY2VkU3RhdGUiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIyIiwibWVyZ2VyT3B0aW9ucyIsInBhcmtlZEVsc2V3aGVyZSIsInJlcGxhY2VkSXRlbSIsInJlcGxhY2VQcm9wVmFsdWVJblN0YXRlIiwiX3JlZjc5IiwiY2hpbGREYXRhSWQiLCJEQVRBU0VUX09QX0FERF9PUFRJT05TIiwiYXBwbHlEZXJpdmVkUHJvdG9EYXRhc2V0IiwicmVzdWx0SWQiLCJydW5Hcm91cEJ5VXBkYXRlciIsIl9leGVjdXRlR3JvdXBCeSIsImV4ZWN1dGVHcm91cEJ5IiwicnVuSm9pblVwZGF0ZXIiLCJfZXhlY3V0ZUpvaW4iLCJleGVjdXRlSm9pbiIsInJ1blNwYXRpYWxKb2luVXBkYXRlciIsIl9leGVjdXRlU3BhdGlhbEpvaW4iLCJleGVjdXRlU3BhdGlhbEpvaW4iLCJydW5TdWl0YWJpbGl0eVVwZGF0ZXIiLCJfZXhlY3V0ZVN1aXRhYmlsaXR5IiwiZXhlY3V0ZVN1aXRhYmlsaXR5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpcy1zdGF0ZS11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2Jib3h9IGZyb20gJ0B0dXJmL2Jib3gnO1xuaW1wb3J0IHR5cGUge0FsbEdlb0pTT059IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IGNvcHkgZnJvbSAnY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9jbG9uZURlZXAnO1xuaW1wb3J0IGdldCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9nZXQnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvaXNFcXVhbCc7XG5pbXBvcnQgcGljayBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9waWNrJztcbmltcG9ydCB1bmlxIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3VuaXEnO1xuaW1wb3J0IHhvciBmcm9tICdlcy10b29sa2l0L2NvbXBhdC94b3InO1xuaW1wb3J0IFRhc2ssIHtkaXNhYmxlU3RhY2tDYXB0dXJpbmcsIHdpdGhUYXNrfSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbmltcG9ydCB0eXBlIHtUYXNrRGVzY3JpcHRvcn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBUYXNrc1xuaW1wb3J0IHtcbiAgREVMQVlfVEFTSyxcbiAgQUNUSU9OX1RBU0ssXG4gIEVYUEFORF9aSVBfVEFTSyxcbiAgTE9BRF9GSUxFX1RBU0ssXG4gIFBST0NFU1NfRklMRV9EQVRBLFxuICBVTldSQVBfVEFTS1xufSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGFkZE5vdGlmaWNhdGlvbixcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIGV4cGFuZFppcEFyY2hpdmVTdWNjZXNzLFxuICBuZXh0RmlsZUJhdGNoLFxuICBzZXRGaWx0ZXIsXG4gIHByb2Nlc3NGaWxlQ29udGVudCxcbiAgZml0Qm91bmRzIGFzIGZpdE1hcEJvdW5kcyxcbiAgdG9nZ2xlTGF5ZXJGb3JNYXAsXG4gIGFwcGx5RmlsdGVyQ29uZmlnLFxuICBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZCxcbiAgbG9hZENvbHVtblN0YXRzU3VjY2VzcyxcbiAgbG9hZENvbHVtblN0YXRzRXJyb3IsXG4gIHJlZnJlc2hEYXRhc2V0U3VjY2VzcyxcbiAgcmVmcmVzaERhdGFzZXRFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRQcm9ncmVzcyxcbiAgc2V0TG9hZGluZ1Byb2dyZXNzXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbi8vIFV0aWxzXG5pbXBvcnQge1xuICBGSUxURVJfVVBEQVRFUl9QUk9QUyxcbiAgYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCxcbiAgc25hcFRvTWFya3MsXG4gIGFwcGx5RmlsdGVyRmllbGROYW1lLFxuICBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIGFycmF5SW5zZXJ0LFxuICBjb21iaW5lU3BsaXRNYXBzQnlJbmRleCxcbiAgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzLFxuICBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluLFxuICBhcmVGaWx0ZXJGaWVsZFR5cGVzQ29tcGF0aWJsZSxcbiAgZGlzYWJsZUdwdUlmSW52ZXJ0ZWQsXG4gIGZpbHRlclR5cGVVc2VzR3B1LFxuICBnZXRQbG90QmFzZUluZGV4QnlEYXRhSWQsXG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBzdWNjZXNzTm90aWZpY2F0aW9uLFxuICBlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24sXG4gIGV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSxcbiAgaXNSYXN0ZXJUaWxlRXh0cmFjdExheWVyLFxuICBpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIsXG4gIG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzLFxuICB0b1NrZXRjaEZlYXR1cmUsXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXIsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0c1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIHRvQXJyYXksIGFycmF5TW92ZX0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuLy8gTWVyZ2Vyc1xuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgTEFZRVJfVFlQRVMsXG4gIEZQUyxcbiAgTElHSFRfQU5EX1NIQURPV19FRkZFQ1QsXG4gIERJU1RBTkNFX0ZPR19UWVBFLFxuICBTVVJGQUNFX0ZPR19UWVBFLFxuICBNQVhfREVGQVVMVF9UT09MVElQUyxcbiAgUExPVF9UWVBFUyxcbiAgU09SVF9PUkRFUixcbiAgU1lOQ19USU1FTElORV9NT0RFUyxcbiAgQ0hBTk5FTF9TQ0FMRVMsXG4gIFNDQUxFX1RZUEVTLFxuICBJTklUSUFMX0FOTk9UQVRJT05fS0lORCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9TSURFLFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTixcbiAgQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlQsXG4gIHRleHRQbGFjZW1lbnRGcm9tQW5nbGUsXG4gIEFubm90YXRpb25LaW5kLFxuICBEYXRhc2V0VHlwZSxcbiAgZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zLFxuICBnZXRSZW1vdGVTb3VyY2VGb3JtYXQsXG4gIEdFT0NPREVSX0RBVEFTRVRfTkFNRSxcbiAgR0VPQ09ERVJfSUNPTl9DT0xPUixcbiAgR0VPQ09ERVJfTEFZRVJfSURcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fQ09VTlRfTEFZRVJfVFlQRVMsXG4gIGlzUG9pbnRDb3VudExhYmVsLFxuICBMQVlFUl9JRF9MRU5HVEgsXG4gIExheWVyLFxuICBMYXllckNsYXNzZXNcbn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgYXBwbHlfLFxuICBjb21wb3NlXyxcbiAgZmlsdGVyT3V0QnlJZCxcbiAgaWZfLFxuICBtZXJnZV8sXG4gIHBheWxvYWRfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBpc1NhdmVkTGF5ZXJDb25maWdWMSxcbiAgcGFyc2VMYXllckNvbmZpZyxcbiAgc2VyaWFsaXplRmlsdGVyLFxuICBzZXJpYWxpemVMYXllcixcbiAgc2VyaWFsaXplVmlzU3RhdGUsXG4gIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YVxufSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuXG5pbXBvcnQgS2VwbGVyR0xTY2hlbWEsIHtNZXJnZXIsIFBvc3RNZXJnZXJQYXlsb2FkLCBWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7XG4gIGdldEZpbGVzVG9QYXJzZSxcbiAgaXNaaXBGaWxlTmFtZSxcbiAgbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0LFxuICBwcm9jZXNzR2VvanNvbixcbiAgdHlwZSBGaWxlQ2FjaGVJdGVtLFxuICBaaXBBcmNoaXZlRXhwYW5zaW9uXG59IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5cbmltcG9ydCB7XG4gIEZpbHRlcixcbiAgRmVhdHVyZSxcbiAgSW50ZXJhY3Rpb25Db25maWcsXG4gIEFuaW1hdGlvbkNvbmZpZyxcbiAgRmlsdGVyQW5pbWF0aW9uQ29uZmlnLFxuICBFZGl0b3IsXG4gIEZpZWxkLFxuICBMYXllclZpc0NvbmZpZyxcbiAgUmFuZ2VGaWx0ZXIsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgQW5ub3RhdGlvbixcbiAgQW5ub3RhdGlvblByb3BzUGFydGlhbCxcbiAgUHJvdG9EYXRhc2V0LFxuICBDaGFydENvbmZpZyxcbiAgTGF5ZXJDaGFydENvbmZpZ1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgS2VwbGVyVGFibGUsXG4gIEZpbHRlclByb3BzLFxuICBidWlsZENoYW5nZUNvbHVtblR5cGVEYXRhLFxuICBmb3JtYXRDb2x1bW5UeXBlQ29udmVyc2lvbkVycm9yLFxuICBhc3NpZ25HcHVDaGFubmVsLFxuICBidWlsZERlbGV0ZUNvbHVtbkRhdGEsXG4gIGJ1aWxkUmVuYW1lQ29sdW1uRGF0YSxcbiAgY2FuTXV0YXRlRGF0YXNldFNjaGVtYSxcbiAgY29weVRhYmxlQW5kVXBkYXRlLFxuICBjcmVhdGVOZXdEYXRhRW50cnksXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc2hvd0FsbFRhYmxlQ29sdW1ucyxcbiAgdG9nZ2xlSGlkZGVuVGFibGVDb2x1bW4sXG4gIHNldEZpbHRlckdwdU1vZGUsXG4gIHNvcnREYXRhc2V0QnlDb2x1bW5cbn0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge3JlbWFwQ2hhcnRzRm9yRGF0YXNldH0gZnJvbSAnLi9jb2x1bW4tZWRpdC1yZWNvbmNpbGUnO1xuaW1wb3J0IHtcbiAgZmluZEZpZWxkc1RvU2hvdyxcbiAgZ2V0Wm9vbU9wYWNpdHlBbm5vdGF0aW9uVGFyZ2V0SWQsXG4gIHJlbW92ZUxheWVyRnJvbVpvb21PcGFjaXR5XG59IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgY2FsY3VsYXRlTGF5ZXJEYXRhLFxuICBmaW5kRGVmYXVsdExheWVyLFxuICBnZXRMYXllck9yZGVyRnJvbUxheWVycyxcbiAgbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzLFxuICBnZXROZXdMYXllckdyb3VwLFxuICBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIsXG4gIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcixcbiAgZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyLFxuICBmaW5kUGFyZW50R3JvdXBGb3JMYXllcixcbiAgZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkLFxuICB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyLFxuICBnZXRGbGF0TGF5ZXJPcmRlcixcbiAgcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXJcbn0gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2dldFByb3BWYWx1ZVRvTWVyZ2VyLCBoYXNQcm9wc1RvTWVyZ2V9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHttZXJnZURhdGFzZXRzQnlPcmRlcn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7XG4gIGFkZEdyb3VwQnlVcGRhdGVyLFxuICBhZGRKb2luVXBkYXRlcixcbiAgYWRkU3BhdGlhbEpvaW5VcGRhdGVyLFxuICBhZGRTdWl0YWJpbGl0eVVwZGF0ZXIsXG4gIGV4ZWN1dGVHcm91cEJ5LFxuICBleGVjdXRlSm9pbixcbiAgZXhlY3V0ZVNwYXRpYWxKb2luLFxuICBleGVjdXRlU3VpdGFiaWxpdHksXG4gIHJlbW92ZURhdGFzZXRPcFVwZGF0ZXIsXG4gIHJlbW92ZU9wc0ZvckRhdGFzZXRzLFxuICBzZXRHcm91cEJ5Q29uZmlnVXBkYXRlcixcbiAgc2V0Sm9pbkNvbmZpZ1VwZGF0ZXIsXG4gIHNldFNwYXRpYWxKb2luQ29uZmlnVXBkYXRlcixcbiAgc2V0U3VpdGFiaWxpdHlDb25maWdVcGRhdGVyXG59IGZyb20gJy4vZGF0YXNldC1vcHMtdXBkYXRlcnMnO1xuaW1wb3J0IHtcbiAgZml4RWZmZWN0T3JkZXIsXG4gIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzLFxuICBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLFxuICBtZXJnZVRpbWVEb21haW5zLFxuICBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93LFxuICB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUsXG4gIG1lcmdlUGxvdEdyb3VwQnksXG4gIGdldERlZmF1bHRUaW1lRm9ybWF0LFxuICBMYXllclRvRmlsdGVyVGltZUludGVydmFsLFxuICBUSU1FX0lOVEVSVkFMU19PUkRFUkVELFxuICBtZXJnZUZpbHRlckRvbWFpbixcbiAgaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlLFxuICBjb2xsZWN0Q29sdW1uVmFsdWVzLFxuICBnZXRDb2x1bW5TdGF0aXN0aWNzLFxuICBvcHRpb25hbE1hcFRleHRcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7UGF5bG9hZEFjdGlvbn0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcblxuLy8gZGlzYWJsZSBzdGFjayBjYXB0dXJlIGZvciB3aXRoVGFzayBjYWxscyB0aGF0IGhhcHBlbiBvdXRzaWRlIHN0cmljdCByZWR1Y2VyIGNvbnRleHRcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIHRpbWV6b25lOiBudWxsLFxuICAgICAgY29tcGFyZU1vZGU6IGZhbHNlLFxuICAgICAgY29tcGFyZVR5cGU6IENPTVBBUkVfVFlQRVMuQUJTT0xVVEVcbiAgICB9XG4gIH0sXG4gIGxlZ2VuZDoge1xuICAgIGlkOiAnbGVnZW5kJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5sZWdlbmQnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgaGlkZUludmlzaWJsZUxheWVyczogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGdlb2NvZGVyOiB7XG4gICAgaWQ6ICdnZW9jb2RlcicsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZ2VvY29kZXInLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsLFxuICAgIGNvbmZpZzoge1xuICAgICAgbGltaXRTZWFyY2g6IGZhbHNlLFxuICAgICAgY29sb3I6IEdFT0NPREVSX0lDT05fQ09MT1JcbiAgICB9XG4gIH0sXG4gIGJydXNoOiB7XG4gICAgaWQ6ICdicnVzaCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuYnJ1c2gnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgLy8gc2l6ZSBpcyBpbiBrbVxuICAgICAgc2l6ZTogMi41XG4gICAgfVxuICB9LFxuICBjb29yZGluYXRlOiB7XG4gICAgaWQ6ICdjb29yZGluYXRlJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5jb29yZGluYXRlJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbFxuICB9LFxuICBhbm5vdGF0aW9uOiB7XG4gICAgaWQ6ICdhbm5vdGF0aW9uJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5hbm5vdGF0aW9uJyxcbiAgICBlbmFibGVkOiBmYWxzZVxuICB9LFxuICB6b29tT3BhY2l0eToge1xuICAgIGlkOiAnem9vbU9wYWNpdHknLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmZhZGVPblpvb20nLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgY29udHJvbGxlcnM6IFtdXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTklNQVRJT05fQ09ORklHOiBBbmltYXRpb25Db25maWcgPSB7XG4gIGRvbWFpbjogbnVsbCxcbiAgY3VycmVudFRpbWU6IG51bGwsXG4gIHNwZWVkOiAxLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIHRpbWVTdGVwczogbnVsbCxcbiAgdGltZUZvcm1hdDogbnVsbCxcbiAgdGltZXpvbmU6IG51bGwsXG4gIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsLFxuICBoaWRlQ29udHJvbDogZmFsc2UsXG4gIGR1cmF0aW9uOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUT1I6IEVkaXRvciA9IHtcbiAgbW9kZTogRURJVE9SX01PREVTLkRSQVdfUE9MWUdPTixcbiAgZmVhdHVyZXM6IFtdLFxuICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gIHZpc2libGU6IHRydWVcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVklTX1NUQVRFOiBWaXNTdGF0ZSA9IHtcbiAgLy8gbWFwIGluZm9cbiAgbWFwSW5mbzoge1xuICAgIHRpdGxlOiB1bmRlZmluZWQsXG4gICAgZGVzY3JpcHRpb246IHVuZGVmaW5lZFxuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG4gIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcbiAgZ3JvdXBCeXM6IFtdLFxuICBqb2luczogW10sXG4gIHN1aXRhYmlsaXRpZXM6IFtdLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICAvLyBjaGFydHMgKGVuYWJsZWQgYnkgZGVmYXVsdDsgZ2F0ZWQgYnkgZW5hYmxlQ2hhcnRzUGFuZWwpXG4gIGNoYXJ0czogW10sXG4gIGNoYXJ0c1RvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGFubm90YXRpb25zXG4gIGFubm90YXRpb25zOiBbXSxcbiAgYW5ub3RhdGlvbnNUb0JlTWVyZ2VkOiBbXSxcbiAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG51bGwsXG4gIGlzRWRpdGluZ0Fubm90YXRpb25UZXh0OiBmYWxzZSxcblxuICBpbnRlcmFjdGlvbkNvbmZpZzogZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHt9LFxuXG4gIGxheWVyQmxlbmRpbmc6ICdub3JtYWwnLFxuICBvdmVybGF5QmxlbmRpbmc6ICdub3JtYWwnLFxuICBob3ZlckluZm86IHVuZGVmaW5lZCxcbiAgY2xpY2tlZDogdW5kZWZpbmVkLFxuICBtb3VzZVBvczoge30sXG4gIG1heERlZmF1bHRUb29sdGlwczogTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG5cbiAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gdXNlciBzcGxpdCBtYXBzXG4gIHNwbGl0TWFwczogW1xuICAgIC8vIHRoaXMgd2lsbCBjb250YWluIGEgbGlzdCBvZiBvYmplY3RzIHRvXG4gICAgLy8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGxheWVyIGF2YWlsYWJpbGl0eSBhbmQgdmlzaWJpbGl0eSBmb3IgZWFjaCBtYXBcbiAgICAvLyBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgICBsYXllcnM6IHtsYXllcl9pZDogdHJ1ZSB8IGZhbHNlfVxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgXSxcbiAgc3BsaXRNYXBzVG9CZU1lcmdlZDogW10sXG4gIGlzTWVyZ2luZ0RhdGFzZXRzOiB7fSxcbiAgLy8gZGVmYXVsdHMgbGF5ZXIgY2xhc3Nlc1xuICBsYXllckNsYXNzZXM6IExheWVyQ2xhc3NlcyxcblxuICAvLyBkZWZhdWx0IGFuaW1hdGlvblxuICAvLyB0aW1lIGluIHVuaXggdGltZXN0YW1wIChtaWxsaXNlY29uZHMpICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVuaXggRXBvY2gpXG4gIGFuaW1hdGlvbkNvbmZpZzogREVGQVVMVF9BTklNQVRJT05fQ09ORklHLFxuXG4gIGVkaXRvcjogREVGQVVMVF9FRElUT1IsXG5cbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgc3RhZ2VkVG9BZGQ6IG51bGwsXG4gIC8vIGZvciBsb2FkaW5nIGRhdGFzZXRzXG4gIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogMCxcbiAgbG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgbG9hZGluZ1Byb2Nlc3Npbmc6IHt9LFxuXG4gIGxvYWRlcnM6IFtdLFxuICBsb2FkT3B0aW9uczoge30sXG5cbiAgLy8gdmlzU3RhdGVNZXJnZXJzXG4gIG1lcmdlcnM6IFZJU19TVEFURV9NRVJHRVJTLFxuXG4gIC8vIGtlcGxlciBzY2hlbWFzXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFcbn07XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19GSVRfQk9VTkRTID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfRklUX0JPVU5EUydcbik7XG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OID0gVGFzay5mcm9tQ2FsbGJhY2soXG4gIChfLCBjYikgPT4gY2IoKSxcblxuICAnQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTidcbik7XG5cbnR5cGUgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZSA9IHtcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllckRhdGE6IGFueVtdO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgd2l0aCB1cGRhdGVkIGxheWVyIGFuZCBsYXllckRhdGFcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGE8UyBleHRlbmRzIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGU+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+IHtcbiAgICBpZiAobC5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgJiYgbC50eXBlICE9PSAndHJpcCcpIHtcbiAgICAgIHJldHVybiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIoYWNjdSwge29sZExheWVyOiBsLCBwcm9wOiAnY3VycmVudFRpbWUnLCBjdXJyZW50VGltZX0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdTtcbiAgfSwgbmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCBhY3Rpb24pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvd1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHtpZCwgYW5pbWF0aW9uV2luZG93fTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBpZCk7XG5cbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBwcmV2aW91c1dpbmRvdyA9IChmaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKS5hbmltYXRpb25XaW5kb3c7XG4gIGxldCBuZXh0RmlsdGVyID0gey4uLmZpbHRlciwgYW5pbWF0aW9uV2luZG93fSBhcyBGaWx0ZXI7XG5cbiAgLy8gRW50ZXJpbmcgb3IgbGVhdmluZyBpbnRlcnZhbCBwbGF5YmFjayBzbmFwcyB0aGUgd2luZG93IG9udG8gaGlzdG9ncmFtIGJpbnMuXG4gIGlmIChcbiAgICAoZmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgfHwgZmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5yYW5nZSkgJiZcbiAgICAocHJldmlvdXNXaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWwgfHwgYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKVxuICApIHtcbiAgICBjb25zdCBhZGp1c3RlZCA9IGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3coXG4gICAgICBzdGF0ZSxcbiAgICAgIG5leHRGaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyIHwgUmFuZ2VGaWx0ZXIsXG4gICAgICBnZXRQbG90QmFzZUluZGV4QnlEYXRhSWQoc3RhdGUuZGF0YXNldHMsIG5leHRGaWx0ZXIsIHN0YXRlLmxheWVycylcbiAgICApO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFkanVzdGVkLnZhbHVlKSAmJiBhZGp1c3RlZC52YWx1ZS5ldmVyeSh2ID0+IE51bWJlci5pc0Zpbml0ZSh2KSkpIHtcbiAgICAgIG5leHRGaWx0ZXIgPSBhZGp1c3RlZDtcbiAgICB9XG4gIH1cblxuICBpZiAoZmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5yYW5nZSkge1xuICAgIGNvbnN0IGZpbHRlckluZGV4ID0gc3RhdGUuZmlsdGVycy5pbmRleE9mKGZpbHRlcik7XG4gICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoXG4gICAgICBzdGF0ZSxcbiAgICAgIHNldEZpbHRlcihcbiAgICAgICAgZmlsdGVySW5kZXgsXG4gICAgICAgIFsnYW5pbWF0aW9uV2luZG93JywgJ3ZhbHVlJ10sXG4gICAgICAgIFthbmltYXRpb25XaW5kb3csIG5leHRGaWx0ZXIudmFsdWVdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV4dEZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICBpZiAoZmlsdGVyLnR5cGUgIT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTeW5jVGltZWxpbmVNb2RlID0gZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV4dEZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpO1xuICByZXR1cm4gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtpZCwgbW9kZTogbmV3U3luY1RpbWVsaW5lTW9kZX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZmlsdGVySWQsIG5ld0ZpbHRlcn0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBTZXJpYWxpemUgdGhlIGZpbHRlcnMgdG8gb25seSBjb21wYXJlIHRoZSBzYXZlZCBwcm9wZXJ0aWVzXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIob2xkRmlsdGVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0ZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihuZXdGaWx0ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0ZpbHRlciB8fCBpc0VxdWFsKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIGFueSBjaGFuZ2VzIHRvIHRoZSBmaWx0ZXIsIGFwcGx5IHRoZW1cbiAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcik7XG4gIGRlbGV0ZSBjaGFuZ2VkWydpZCddOyAvLyBpZCBzaG91bGQgbm90IGJlIGNoYW5nZWRcblxuICBjb25zdCBmaWx0ZXJJbmRleCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKFxuICAgIHN0YXRlLFxuICAgIHNldEZpbHRlcihmaWx0ZXJJbmRleCwgT2JqZWN0LmtleXMoY2hhbmdlZCksIE9iamVjdC52YWx1ZXMoY2hhbmdlZCkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZpbHRlclBsb3RzQWZ0ZXJGaWx0ZXJpbmc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFmZmVjdGVkRGF0YXNldElkczogc3RyaW5nW10sXG4gIHVwZGF0ZWRGaWx0ZXJJbmRleD86IG51bWJlclxuKTogUyB7XG4gIGNvbnN0IGZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzLm1hcCgoZmlsdGVyLCBmaWx0ZXJJbmRleCkgPT4ge1xuICAgIGlmIChmaWx0ZXJJbmRleCA9PT0gdXBkYXRlZEZpbHRlckluZGV4KSB7XG4gICAgICByZXR1cm4gdXBkYXRlRmlsdGVyUGxvdChzdGF0ZS5kYXRhc2V0cywgZmlsdGVyLCB1bmRlZmluZWQsIHN0YXRlLmxheWVycyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkUmVmcmVzaE51bWVyaWNQbG90ID1cbiAgICAgIGZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMucmFuZ2UgJiZcbiAgICAgICghaXNTaWRlRmlsdGVyKGZpbHRlcikgfHwgZmlsdGVyLnBsb3RUeXBlPy50eXBlID09PSBQTE9UX1RZUEVTLmxpbmVDaGFydCk7XG4gICAgaWYgKGZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlICYmICFzaG91bGRSZWZyZXNoTnVtZXJpY1Bsb3QpIHtcbiAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hhcmVkRGF0YXNldElkcyA9IGZpbHRlci5kYXRhSWQuZmlsdGVyKGRhdGFJZCA9PiBhZmZlY3RlZERhdGFzZXRJZHMuaW5jbHVkZXMoZGF0YUlkKSk7XG4gICAgaWYgKCFzaGFyZWREYXRhc2V0SWRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnZhbGlkYXRlZEZpbHRlciA9IHNoYXJlZERhdGFzZXRJZHMucmVkdWNlKHJlbW92ZUZpbHRlclBsb3QsIGZpbHRlcik7XG4gICAgcmV0dXJuIHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIGludmFsaWRhdGVkRmlsdGVyLCB1bmRlZmluZWQsIHN0YXRlLmxheWVycyk7XG4gIH0pO1xuXG4gIHJldHVybiBzZXQoWydmaWx0ZXJzJ10sIGZpbHRlcnMsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHgsIHZhbHVlSW5kZXggPSAwfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgJiZcbiAgICAoIUFycmF5LmlzQXJyYXkoYWN0aW9uLnZhbHVlKSB8fCBhY3Rpb24ucHJvcC5sZW5ndGggIT09IGFjdGlvbi52YWx1ZS5sZW5ndGgpXG4gICkge1xuICAgIENvbnNvbGUuZXJyb3IoJ0V4cGVjdGluZyB2YWx1ZSB0byBiZSBhbiBhcnJheSBvZiB0aGUgc2FtZSBsZW5ndGgsIHNpbmNlIHByb3AgaXMgYW4gYXJyYXknKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gY29udmVydCBwcm9wIGFuZCB2YWx1ZSB0byBhcnJheVxuICBjb25zdCBwcm9wcyA9IHRvQXJyYXkoYWN0aW9uLnByb3ApO1xuICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSA/IHRvQXJyYXkoYWN0aW9uLnZhbHVlKSA6IFthY3Rpb24udmFsdWVdO1xuXG4gIGxldCBuZXdGaWx0ZXIgPSBvbGRGaWx0ZXI7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwcm9wID0gcHJvcHNbaV07XG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IHBhc3NpbmcgaW4gbmFtZSBhcyBhbiBhcnJheSBpbnRvIF91cGRhdGVGaWx0ZXJQcm9wLCBzbyB3ZSBjYWxsIGl0IG11bHRpcGxlIHRpbWVzIHdpdGggZWFjaCBuYW1lXG4gICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZXJlIGFzIHRvIHdoYXQgc2hvdWxkIGJlIGFkZHJlc3NlZFxuICAgIGxldCByZXM7XG4gICAgaWYgKHByb3AgPT09ICduYW1lJyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgcmVzID0gdmFsdWUucmVkdWNlKChhY2N1LCB2KSA9PiB7XG4gICAgICAgIHJldHVybiBfdXBkYXRlRmlsdGVyUHJvcChhY2N1LCBuZXdGaWx0ZXIsIHByb3AsIHYsIHZhbHVlSW5kZXgpO1xuICAgICAgfSwgbmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBfdXBkYXRlRmlsdGVyUHJvcChuZXdTdGF0ZSwgbmV3RmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgfVxuICAgIG5ld0ZpbHRlciA9IHJlcy5maWx0ZXI7XG4gICAgbmV3U3RhdGUgPSByZXMuc3RhdGU7XG4gICAgZGF0YXNldElkc1RvRmlsdGVyID0gZGF0YXNldElkc1RvRmlsdGVyLmNvbmNhdChyZXMuZGF0YXNldElkc1RvRmlsdGVyKTtcbiAgfVxuXG4gIGNvbnN0IGVubGFyZ2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCk7XG5cbiAgaWYgKGVubGFyZ2VkRmlsdGVyICYmIGVubGFyZ2VkRmlsdGVyLmlkICE9PSBuZXdGaWx0ZXIuaWQpIHtcbiAgICAvLyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgZW5sYXJnZWQgZmlsdGVyXG4gICAgbmV3RmlsdGVyLnZpZXcgPSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xuICB9XG5cbiAgLy8gc2F2ZSBuZXcgZmlsdGVycyB0byBuZXdTdGF0ZVxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBuZXdGaWx0ZXIsIG5ld1N0YXRlKTtcblxuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBhZmZlY3RlZERhdGFzZXRJZHMgPSB1bmlxKGRhdGFzZXRJZHNUb0ZpbHRlcik7XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIGFmZmVjdGVkRGF0YXNldElkcyxcbiAgICBuZXdTdGF0ZS5kYXRhc2V0cyxcbiAgICBuZXdTdGF0ZS5maWx0ZXJzLFxuICAgIG5ld1N0YXRlLmxheWVyc1xuICApO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuXG4gIC8vIFVwZGF0ZSBwbG90cyBhZnRlciBmaWx0ZXJpbmcgc28gdGhleSB1c2UgdGhlIGxhdGVzdCBmaWx0ZXJlZCBpbmRleGVzLlxuICAvLyBPdGhlciB0aW1lIGZpbHRlcnMgbmVlZCB0aGVpciBjYWNoZWQgYmlucyBpbnZhbGlkYXRlZCBmb3Igc2hhcmVkIGRhdGFzZXRzLlxuICBuZXdTdGF0ZSA9IHVwZGF0ZUZpbHRlclBsb3RzQWZ0ZXJGaWx0ZXJpbmcobmV3U3RhdGUsIGFmZmVjdGVkRGF0YXNldElkcywgaWR4KTtcblxuICAvLyBkYXRhSWQgaXMgYW4gYXJyYXlcbiAgLy8gcGFzcyBvbmx5IHRoZSBkYXRhc2V0IHdlIG5lZWQgdG8gdXBkYXRlXG4gIG5ld1N0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIG5ld0ZpbHRlcik7XG5cbiAgLy8gSWYgdGltZSByYW5nZSBmaWx0ZXIgdmFsdWUgd2FzIHVwZGF0ZWQsIGFkanVzdCBhbmltYXRpb24gY29uZmlnXG4gIGlmIChuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBwcm9wcy5pbmNsdWRlcygndmFsdWUnKSkge1xuICAgIG5ld1N0YXRlID0gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgYWN0aW9uLmlkeCk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgZGF0YXNldHMsIGZpbHRlcnMpIHtcbiAgY29uc3QgY3VycmVudERhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gIGlmIChjdXJyZW50RGF0YUlkICYmIHZhbHVlICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IGZpZWxkTmFtZSA9IGZpbHRlci5uYW1lW3ZhbHVlSW5kZXhdO1xuICAgIGNvbnN0IGVuZEZpZWxkTmFtZSA9IHRvQXJyYXkoZmlsdGVyLmVuZE5hbWUpW3ZhbHVlSW5kZXhdO1xuICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBmaWx0ZXIudmFsdWU7XG4gICAgY29uc3QgbmV4dERhdGFJZHMgPSBmaWx0ZXIuZGF0YUlkLnNsaWNlKCk7XG4gICAgbmV4dERhdGFJZHNbdmFsdWVJbmRleF0gPSB2YWx1ZTtcblxuICAgIGxldCBuZXh0RmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGN1cnJlbnREYXRhSWQpO1xuICAgIG5leHRGaWx0ZXIgPSBzZXQoWydkYXRhSWQnXSwgbmV4dERhdGFJZHMsIG5leHRGaWx0ZXIpO1xuXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIFsnZ3B1Q2hhbm5lbCcsICdncHVFbmRDaGFubmVsJ10pIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5leHRGaWx0ZXJbcHJvcF0pKSB7XG4gICAgICAgIGNvbnN0IG5leHRDaGFubmVscyA9IG5leHRGaWx0ZXJbcHJvcF0uc2xpY2UoKTtcbiAgICAgICAgbmV4dENoYW5uZWxzW3ZhbHVlSW5kZXhdID0gdW5kZWZpbmVkO1xuICAgICAgICBuZXh0RmlsdGVyID0gc2V0KFtwcm9wXSwgbmV4dENoYW5uZWxzLCBuZXh0RmlsdGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbdmFsdWVdO1xuICAgIGNvbnN0IGZpZWxkID0gZGF0YXNldD8uZmllbGRzLmZpbmQoY2FuZGlkYXRlID0+IGNhbmRpZGF0ZS5uYW1lID09PSBmaWVsZE5hbWUpO1xuICAgIGNvbnN0IGNhblJlYmluZEZpZWxkID1cbiAgICAgIGZpZWxkICYmICghZmlsdGVyLmZpZWxkVHlwZSB8fCBhcmVGaWx0ZXJGaWVsZFR5cGVzQ29tcGF0aWJsZShmaWx0ZXIuZmllbGRUeXBlLCBmaWVsZC50eXBlKSk7XG4gICAgY29uc3Qge2ZpbHRlcjogcmVib3VuZEZpbHRlcn0gPSBjYW5SZWJpbmRGaWVsZFxuICAgICAgPyBhcHBseUZpbHRlckZpZWxkTmFtZShuZXh0RmlsdGVyLCBkYXRhc2V0cywgdmFsdWUsIGZpZWxkTmFtZSwgdmFsdWVJbmRleCwge1xuICAgICAgICAgIG1lcmdlRG9tYWluOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICA6IHtmaWx0ZXI6IG51bGx9O1xuXG4gICAgaWYgKHJlYm91bmRGaWx0ZXIpIHtcbiAgICAgIG5leHRGaWx0ZXIgPSByZWJvdW5kRmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXh0TmFtZXMgPSBuZXh0RmlsdGVyLm5hbWUuc2xpY2UoKTtcbiAgICAgIGNvbnN0IG5leHRGaWVsZElkeCA9IG5leHRGaWx0ZXIuZmllbGRJZHguc2xpY2UoKTtcbiAgICAgIG5leHROYW1lc1t2YWx1ZUluZGV4XSA9ICcnO1xuICAgICAgbmV4dEZpZWxkSWR4W3ZhbHVlSW5kZXhdID0gLTE7XG4gICAgICBuZXh0RmlsdGVyID0ge1xuICAgICAgICAuLi5uZXh0RmlsdGVyLFxuICAgICAgICBuYW1lOiBuZXh0TmFtZXMsXG4gICAgICAgIGZpZWxkSWR4OiBuZXh0RmllbGRJZHgsXG4gICAgICAgIGdwdTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGVuZEZpZWxkTmFtZSAmJiBuZXh0RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHJlYm91bmRFbmRGaWx0ZXJ9ID0gYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lKFxuICAgICAgICBuZXh0RmlsdGVyLFxuICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGVuZEZpZWxkTmFtZSxcbiAgICAgICAgdmFsdWVJbmRleFxuICAgICAgKTtcbiAgICAgIGlmIChyZWJvdW5kRW5kRmlsdGVyKSB7XG4gICAgICAgIG5leHRGaWx0ZXIgPSByZWJvdW5kRW5kRmlsdGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qge2ZpbHRlcjogY2xlYXJlZEVuZEZpbHRlcn0gPSBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUoXG4gICAgICAgICAgbmV4dEZpbHRlcixcbiAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIHZhbHVlSW5kZXhcbiAgICAgICAgKTtcbiAgICAgICAgbmV4dEZpbHRlciA9IGNsZWFyZWRFbmRGaWx0ZXIgfHwgbmV4dEZpbHRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKG5leHRGaWx0ZXIsIGRhdGFzZXRzKTtcbiAgICBuZXh0RmlsdGVyID0ge1xuICAgICAgLi4ubmV4dEZpbHRlcixcbiAgICAgIC4uLihkb21haW5TdGVwcyA/IHtkb21haW46IGRvbWFpblN0ZXBzLmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHMuc3RlcH0gOiB7fSlcbiAgICB9O1xuXG4gICAgaWYgKG5leHRGaWx0ZXIuZ3B1KSB7XG4gICAgICBuZXh0RmlsdGVyID0gYXNzaWduR3B1Q2hhbm5lbChzZXRGaWx0ZXJHcHVNb2RlKG5leHRGaWx0ZXIsIGZpbHRlcnMpLCBmaWx0ZXJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dEZpbHRlcixcbiAgICAgIHZhbHVlOiBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKHByZXZpb3VzVmFsdWUsIG5leHRGaWx0ZXIpXG4gICAgfTtcbiAgfVxuXG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG4gIGlmIChjdXJyZW50RGF0YUlkKSB7XG4gICAgLy8gaWYgZGF0YUlkIGFscmVhZHkgZXhpc3RcbiAgICBuZXdGaWx0ZXIgPSBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpO1xuICB9XG4gIGlmICh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IG5ld0ZpbHRlci5kYXRhSWQuc2xpY2UoKTtcbiAgICBuZXh0VmFsdWVbdmFsdWVJbmRleF0gPSB2YWx1ZTtcbiAgICBuZXdGaWx0ZXIgPSBzZXQoWydkYXRhSWQnXSwgbmV4dFZhbHVlLCBuZXdGaWx0ZXIpO1xuICB9XG4gIHJldHVybiBuZXdGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykge1xuICBjb25zdCBkYXRhSWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuXG4gIGlmIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZUluZGV4ID09PSAwKSB7XG4gICAgLy8gaWYgcmVtb3ZlIHRoZSBvbmx5IGRhdGFJZCwgY3JlYXRlIGFuIGVtcHR5IGZpbHRlciBpbnN0ZWFkO1xuICAgIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtpZDogZmlsdGVyLmlkfSk7XG4gIH1cblxuICBpZiAoZGF0YUlkKSB7XG4gICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFJZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgW1xuICAgICdkYXRhSWQnLFxuICAgICduYW1lJyxcbiAgICAnZmllbGRJZHgnLFxuICAgICdncHVDaGFubmVsJyxcbiAgICAnZW5kTmFtZScsXG4gICAgJ2VuZEZpZWxkSWR4JyxcbiAgICAnZW5kTWFwcGVkVmFsdWUnLFxuICAgICdncHVFbmRDaGFubmVsJ1xuICBdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyW3Byb3BdKSkge1xuICAgICAgY29uc3QgbmV4dFZhbCA9IGZpbHRlcltwcm9wXS5zbGljZSgpO1xuICAgICAgbmV4dFZhbC5zcGxpY2UodmFsdWVJbmRleCwgMSk7XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCBuZXh0VmFsLCBmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG1lcmdlRmllbGREb21haW4gZm9yIHRoZSByZW1haW5pbmcgZmllbGRzXG4gIGNvbnN0IGRvbWFpblN0ZXBzID0gbWVyZ2VGaWx0ZXJEb21haW4oZmlsdGVyLCBkYXRhc2V0cyk7XG5cbiAgY29uc3QgbmV4dEZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgLy8gdmFsdWU6IG5leHRWYWx1ZSxcbiAgICAuLi4oZG9tYWluU3RlcHMgPyB7ZG9tYWluOiBkb21haW5TdGVwcz8uZG9tYWluLCBzdGVwOiBkb21haW5TdGVwcz8uc3RlcH0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBuZXh0VmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKG5leHRGaWx0ZXIudmFsdWUsIG5leHRGaWx0ZXIpO1xuICByZXR1cm4ge1xuICAgIC4uLm5leHRGaWx0ZXIsXG4gICAgdmFsdWU6IG5leHRWYWx1ZVxuICB9O1xufVxuXG4vKiogKlxuICogVXBkYXRlcyBhIHNpbmdsZSBwcm9wZXJ0eSBvZiBhIGZpbHRlclxuICovXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyUHJvcChzdGF0ZSwgZmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCwgZGF0YXNldElkcz8pIHtcbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgc3dpdGNoIChwcm9wKSB7XG4gICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgaWYgd2UgdXBkYXRlIGZpbHRlckRhdGFJZCwgd2UgbmVlZCB0byBjb25zaWRlciB0d28gY2FzZXM6XG4gICAgLy8gMS4gZGF0YUlkIGlzIGVtcHR5OiBjcmVhdGUgYSBkZWZhdWx0IGZpbHRlclxuICAgIC8vIDIuIEFkZCBhIG5ldyBkYXRhc2V0IGlkXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5kYXRhSWQ6IHtcbiAgICAgIGNvbnN0IG9sZERhdGFJZCA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGZpbHRlciA9IF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgdmFsdWVJbmRleCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBzdGF0ZS5maWx0ZXJzXG4gICAgICApO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdW5pcShbLi4ub2xkRGF0YUlkLCAuLi5maWx0ZXIuZGF0YUlkXSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5uYW1lOiB7XG4gICAgICAvLyB3ZSBhcmUgc3VwcG9ydGluZyB0aGUgY3VycmVudCBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBmaWx0ZXIgbmFtZSB3aWxsIG9ubHkgdXBkYXRlIGZpbHRlciBuYW1lIGJ1dCBpdCB3b24ndCBoYXZlIHNpZGUgZWZmZWN0c1xuICAgICAgLy8gd2UgYXJlIGdvbm5hIHVzZSBwYWlyIG9mIGRhdGFzZXRzIGFuZCBmaWVsZElkeCB0byB1cGRhdGUgdGhlIGZpbHRlclxuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXgsXG4gICAgICAgIHttZXJnZURvbWFpbjogZmlsdGVyLmRhdGFJZC5sZW5ndGggPiAxfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZW5kTmFtZToge1xuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4XG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcbiAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICBmaWx0ZXIgPSBmaWx0ZXIuZ3B1XG4gICAgICAgICAgPyBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycylcbiAgICAgICAgICA6IHsuLi5maWx0ZXIsIGdwdUNoYW5uZWw6IHVuZGVmaW5lZCwgZ3B1RW5kQ2hhbm5lbDogdW5kZWZpbmVkfTtcbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG4gICAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXIuZGF0YUlkO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSAnaW52ZXJ0ZWQnOiB7XG4gICAgICBjb25zdCBzdXBwb3J0c0ludmVyc2lvbiA9IGZpbHRlci5kYXRhSWQuZXZlcnkoXG4gICAgICAgIGRhdGFzZXRJZCA9PiAhc3RhdGUuZGF0YXNldHNbZGF0YXNldElkXT8uZGlzYWJsZURhdGFPcGVyYXRpb25cbiAgICAgICk7XG4gICAgICBmaWx0ZXIgPSB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgaW52ZXJ0ZWQ6IHN1cHBvcnRzSW52ZXJzaW9uICYmIEJvb2xlYW4odmFsdWUpXG4gICAgICB9O1xuICAgICAgaWYgKGZpbHRlci5pbnZlcnRlZCkge1xuICAgICAgICAvLyBHUFUgcmFuZ2UgdGVzdHMgY2FuIG9ubHkga2VlcCB2YWx1ZXMgaW5zaWRlIHRoZSB3aW5kb3cuXG4gICAgICAgIGZpbHRlciA9IGRpc2FibGVHcHVJZkludmVydGVkKGZpbHRlcik7XG4gICAgICB9IGVsc2UgaWYgKGZpbHRlclR5cGVVc2VzR3B1KGZpbHRlci50eXBlKSkge1xuICAgICAgICBmaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKFxuICAgICAgICAgIHNldEZpbHRlckdwdU1vZGUoey4uLmZpbHRlciwgZ3B1OiB0cnVlfSwgc3RhdGUuZmlsdGVycyksXG4gICAgICAgICAgc3RhdGUuZmlsdGVyc1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5sYXllcklkOiB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSBvbmx5IGRhdGFzZXRJZC9zIGlmIHdlIGhhdmUgYWRkZWQvcmVtb3ZlZCBsYXllcnNcbiAgICAgIC8vIC0gY2hlY2sgZm9yIGxheWVySWQgY2hhbmdlcyAoWE9SIHdvcmtzIGJlY2F1c2Ugb2Ygc3RyaW5nIHZhbHVlcylcbiAgICAgIC8vIGlmIG5vIGRpZmZlcmVuY2VzIGJldHdlZW4gbGF5ZXJJZHMsIGRvbid0IGRvIGFueSBmaWx0ZXJpbmdcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGxheWVySWREaWZmZXJlbmNlID0geG9yKHZhbHVlLCBmaWx0ZXIubGF5ZXJJZCk7XG5cbiAgICAgIGNvbnN0IGxheWVyRGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgbGF5ZXJJZERpZmZlcmVuY2VcbiAgICAgICAgICAubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgLy8gb25seSBmaWx0ZXIgZGF0YXNldHNJZHNcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGxheWVyRGF0YUlkcztcblxuICAgICAgLy8gVXBkYXRlIG5ld0ZpbHRlciBkYXRhSWRzXG4gICAgICBjb25zdCBuZXdEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICB2YWx1ZVxuICAgICAgICAgID8ubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgZmlsdGVyID0ge1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGxheWVySWQ6IHZhbHVlLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZHNcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgdmFsdWUsIGZpbHRlcik7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB7ZmlsdGVyLCBkYXRhc2V0SWRzLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIHN0YXRlfTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJQbG90VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBuZXdQcm9wfTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclBsb3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUuZmlsdGVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVyc1ske2lkeH1dIGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBjb25zdCBwcmV2aW91c051bWVyaWNJbnRlcnZhbCA9IG5ld0ZpbHRlci5wbG90VHlwZT8ubnVtZXJpY0ludGVydmFsO1xuXG4gIGZvciAoY29uc3QgcHJvcCBpbiBuZXdQcm9wKSB7XG4gICAgaWYgKHByb3AgPT09ICdwbG90VHlwZScpIHtcbiAgICAgIGxldCBwbG90VHlwZVVwZGF0ZSA9IG5ld1Byb3AucGxvdFR5cGU7XG4gICAgICBpZiAocGxvdFR5cGVVcGRhdGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBsb3RUeXBlVXBkYXRlLCAnZ3JvdXBCeScpKSB7XG4gICAgICAgIHBsb3RUeXBlVXBkYXRlID0ge1xuICAgICAgICAgIC4uLnBsb3RUeXBlVXBkYXRlLFxuICAgICAgICAgIGdyb3VwQnk6IG1lcmdlUGxvdEdyb3VwQnkobmV3RmlsdGVyLnBsb3RUeXBlPy5ncm91cEJ5LCBwbG90VHlwZVVwZGF0ZS5ncm91cEJ5KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHBsb3RUeXBlVXBkYXRlKSkobmV3RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgPT09ICd5QXhpcycpIHtcbiAgICAgIGNvbnN0IGNoYXJ0VHlwZSA9IG5ld1Byb3AueUF4aXMgPyBQTE9UX1RZUEVTLmxpbmVDaGFydCA6IFBMT1RfVFlQRVMuaGlzdG9ncmFtO1xuXG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8oe3R5cGU6IGNoYXJ0VHlwZX0pKShtZXJnZV8obmV3UHJvcCkobmV3RmlsdGVyKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbnVtZXJpY0ludGVydmFsQ2hhbmdlZCA9XG4gICAgbmV3RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5yYW5nZSAmJlxuICAgIG5ld0ZpbHRlci5wbG90VHlwZT8ubnVtZXJpY0ludGVydmFsICE9PSBwcmV2aW91c051bWVyaWNJbnRlcnZhbDtcbiAgaWYgKG51bWVyaWNJbnRlcnZhbENoYW5nZWQpIHtcbiAgICBuZXdGaWx0ZXIgPSB7Li4uKG5ld0ZpbHRlciBhcyBSYW5nZUZpbHRlciksIGJpbnM6IHVuZGVmaW5lZCwgbGluZUNoYXJ0OiB1bmRlZmluZWR9O1xuICB9XG5cbiAgbmV3RmlsdGVyID0gdXBkYXRlRmlsdGVyUGxvdChzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVyLCB1bmRlZmluZWQsIHN0YXRlLmxheWVycyk7XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBpZHggPyBuZXdGaWx0ZXIgOiBmKSlcbiAgfTtcblxuICBpZiAoXG4gICAgbnVtZXJpY0ludGVydmFsQ2hhbmdlZCAmJlxuICAgIG5ld0ZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMucmFuZ2UgJiZcbiAgICBuZXdGaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICkge1xuICAgIGNvbnN0IGFkanVzdGVkID0gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhcbiAgICAgIG5ld1N0YXRlLFxuICAgICAgbmV3RmlsdGVyIGFzIFJhbmdlRmlsdGVyLFxuICAgICAgZ2V0UGxvdEJhc2VJbmRleEJ5RGF0YUlkKG5ld1N0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXIsIG5ld1N0YXRlLmxheWVycylcbiAgICApO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFkanVzdGVkLnZhbHVlKSAmJiBhZGp1c3RlZC52YWx1ZS5ldmVyeShOdW1iZXIuaXNGaW5pdGUpKSB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeCwgcHJvcDogJ3ZhbHVlJywgdmFsdWU6IGFkanVzdGVkLnZhbHVlfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBkYXRhSWQsIGZpZWxkLCB2YWx1ZX0gPSBhY3Rpb247XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGlkKTtcbiAgbGV0IGZpbHRlckluZGV4ID0gb3JpZ2luYWxJbmRleDtcbiAgaWYgKCFpZCAmJiAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChvcmlnaW5hbEluZGV4IDwgMCAmJiBkYXRhSWQpIHtcbiAgICBuZXdTdGF0ZSA9IGFkZEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWR9KTtcbiAgICBpZiAobmV3U3RhdGUuZmlsdGVycy5sZW5ndGggIT09IHN0YXRlLmZpbHRlcnMubGVuZ3RoICsgMSkge1xuICAgICAgLy8gTm8gbmV3IGZpbHRlciB3YXMgYWRkZWRcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgZmlsdGVyIHdhcyBhZGRlZCBhdCB0aGUgZW5kXG4gICAgZmlsdGVySW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAtIDE7XG4gICAgbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0gPSB7XG4gICAgICAuLi5uZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSxcbiAgICAgIC4uLihpZCA/IHtpZH0gOiBudWxsKVxuICAgIH07XG4gIH1cblxuICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGlzIGlmIGl0J3MgYSBuZXdseSBjcmVhdGVkIGZpbHRlclxuICAvLyBGaXJzdCB3ZSBtYWtlIHN1cmUgYWxsIHRoZSBkYXRhSWRzIHRoYXQgZmllbGRzIHJlZmVyIHRvIGFyZSB1cGRhdGVkXG4gIGlmIChvcmlnaW5hbEluZGV4ID49IDAgJiYgZGF0YUlkKSB7XG4gICAgLy8gSWYgdGhlIGRhdGFJZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBvbmUgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGRhdGFJZCkgPyBkYXRhSWQgOiBbZGF0YUlkXSkucmVkdWNlKChhY2N1LCBkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnZGF0YUlkJyxcbiAgICAgICAgdmFsdWU6IGQsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIGZpZWxkc1xuICBpZiAoZmllbGQpIHtcbiAgICAvLyBJZiB0aGUgZmllbGQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkIDogW2ZpZWxkXSkucmVkdWNlKChhY2N1LCBmLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSB2YWx1ZSBzZXBhcmF0ZWx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJbmRleCwgcHJvcDogJ3ZhbHVlJywgdmFsdWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAnZGF0YUlkJyBpbiBjb25maWcgJiYgJ2FuaW1hdGlvbldpbmRvdycgaW4gY29uZmlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuICBpZiAoaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnKSkge1xuICAgIC8vIEZpbmQgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvblxuICAgIC8vIEFzc3VtaW5nIHRoZXJlJ3Mgb25seSBvbmUgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvbiwgc2VlIHNldEZpbHRlclZpZXdVcGRhdGVyXG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gIWlzU2lkZUZpbHRlcihmKSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3RmlsdGVyID0gey4uLmZpbHRlciwgLi4uY29uZmlnfTtcbiAgICByZXR1cm4gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKHN0YXRlLCBhcHBseUZpbHRlckNvbmZpZyhmaWx0ZXIuaWQsIG5ld0ZpbHRlcikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGlzQW5pbWF0aW5nOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmlzQW5pbWF0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaGlkZUNvbnRyb2w6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaGlkZUNvbnRyb2xcbiAgfVxufSk7XG5cbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7c3BlZWR9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHNwZWVkXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGxhcmdlciB0aW1lIGZpbHRlciBhdCBib3R0b20gZm9yIHRpbWUgcGxheWJhY2sgKGFwcGx5IHRvIHRpbWUgZmlsdGVyIG9ubHkpXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyVmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICBjb25zdCB7dmlldywgaWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qgc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3ID0gdmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQ7XG4gIGNvbnN0IGZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT5cbiAgICBpID09PSBpZHhcbiAgICAgID8ge1xuICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgdmlld1xuICAgICAgICB9XG4gICAgICA6IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlld1xuICAgICAgPyB7XG4gICAgICAgICAgLi4uZixcbiAgICAgICAgICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5zaWRlXG4gICAgICAgIH1cbiAgICAgIDogZlxuICApO1xuXG4gIGNvbnN0IG9wZW5lZEZpbHRlciA9IGZpbHRlcnNbaWR4XTtcbiAgaWYgKHZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkICYmIG9wZW5lZEZpbHRlcj8udHlwZSA9PT0gRklMVEVSX1RZUEVTLnJhbmdlKSB7XG4gICAgY29uc3QgaW52YWxpZGF0ZWRGaWx0ZXIgPSB0b0FycmF5KG9wZW5lZEZpbHRlci5kYXRhSWQpLnJlZHVjZShyZW1vdmVGaWx0ZXJQbG90LCBvcGVuZWRGaWx0ZXIpO1xuICAgIGZpbHRlcnNbaWR4XSA9IHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIGludmFsaWRhdGVkRmlsdGVyLCB1bmRlZmluZWQsIHN0YXRlLmxheWVycyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnNcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBmaWx0ZXIgZmVhdHVyZSB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1thY3Rpb24uaWR4XTtcbiAgY29uc3QgaXNWaXNpYmxlID0gZ2V0KGZpbHRlciwgWyd2YWx1ZScsICdwcm9wZXJ0aWVzJywgJ2lzVmlzaWJsZSddKTtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICdlbmFibGVkJyxcbiAgICB2YWx1ZTogIWlzVmlzaWJsZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuaWQsIHtcbiAgICAgIGlzVmlzaWJsZTogIWlzVmlzaWJsZVxuICAgIH0pXG4gIH0pO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZHh9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkLCBpZH0gPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgY29uc3QgbmV3RmlsdGVycyA9IFtcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKDAsIGlkeCksXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZShpZHggKyAxLCBzdGF0ZS5maWx0ZXJzLmxlbmd0aClcbiAgXTtcblxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhkYXRhSWQsIHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXJzLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdFZGl0b3IgPVxuICAgIGdldEZpbHRlcklkSW5GZWF0dXJlKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmUpID09PSBpZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgICAgICB9XG4gICAgICA6IHN0YXRlLmVkaXRvcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJ10sIG5ld0ZpbHRlcnMsIHN0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gdXBkYXRlRmlsdGVyUGxvdHNBZnRlckZpbHRlcmluZyhuZXdTdGF0ZSwgZGF0YUlkKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydlZGl0b3InXSwgbmV3RWRpdG9yLCBuZXdTdGF0ZSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YUlkLCB1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCBuZXdMYXllcjtcbiAgbGV0IG5ld0xheWVyRGF0YTtcbiAgaWYgKGFjdGlvbi5jb25maWcpIHtcbiAgICBuZXdMYXllciA9IGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZSwgYWN0aW9uLmNvbmZpZyk7XG4gICAgaWYgKCFuZXdMYXllcikge1xuICAgICAgQ29uc29sZS53YXJuKFxuICAgICAgICAnRmFpbGVkIHRvIGNyZWF0ZSBsYXllciBmcm9tIGNvbmZpZywgaXQgdXN1YWxseSBtZWFucyB0aGUgY29uZmlnIGlzIG5vdCBiZSBpbiBjb3JyZWN0IGZvcm1hdCcsXG4gICAgICAgIGFjdGlvbi5jb25maWdcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSk7XG4gICAgbmV3TGF5ZXIgPSByZXN1bHQubGF5ZXI7XG4gICAgbmV3TGF5ZXJEYXRhID0gcmVzdWx0LmxheWVyRGF0YTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbGF5ZXIgd2l0aCBhIHNwZWNpZmljIGRhdGFzZXQgb3IgYSBkZWZhdWx0IG9uZVxuICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gYWN0aW9uLmRhdGFzZXRJZCA/PyBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cylbMF07XG4gICAgbmV3TGF5ZXIgPSBuZXcgTGF5ZXIoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHRydWUsXG4gICAgICBkYXRhSWQ6IGRlZmF1bHREYXRhc2V0XG4gICAgfSk7XG4gICAgbmV3TGF5ZXJEYXRhID0ge307XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCBuZXdMYXllcl0sXG4gICAgbGF5ZXJEYXRhOiBbLi4uc3RhdGUubGF5ZXJEYXRhLCBuZXdMYXllckRhdGFdLFxuICAgIC8vIGFkZCBuZXcgbGF5ZXIgYXQgdGhlIHRvcFxuICAgIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZCwgLi4uc3RhdGUubGF5ZXJPcmRlcl0sXG4gICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXIpXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGF5ZXJVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgLy8gaW52YWxpZCBpbmRleFxuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgbGF5ZXIgd2l0aCBpbnZhbGlkIGlkfGlkeCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnMsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgY2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuICBjb25zdCBsYXllclRvUmVtb3ZlID0gbGF5ZXJzW2lkeF07XG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0gc3RhdGUuaW50ZXJhY3Rpb25Db25maWdcbiAgICA/IHJlbW92ZUxheWVyRnJvbVpvb21PcGFjaXR5KHN0YXRlLmludGVyYWN0aW9uQ29uZmlnLCBsYXllclRvUmVtb3ZlLmlkKVxuICAgIDogc3RhdGUuaW50ZXJhY3Rpb25Db25maWc7XG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogZmlsdGVyT3V0QnlJZChsYXllclRvUmVtb3ZlLmlkKShsYXllcnMpLFxuICAgIGxheWVyRGF0YTogcmVtb3ZlRWxlbWVudEF0SW5kZXgoaWR4KShsYXllckRhdGEpLFxuICAgIGxheWVyT3JkZXI6IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllck9yZGVyLCBsYXllclRvUmVtb3ZlLmlkKSxcbiAgICBjbGlja2VkOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mbyxcbiAgICBzcGxpdE1hcHM6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyVG9SZW1vdmUpLFxuICAgIC8vIE9ubHkgcmVwbGFjZSBpbnRlcmFjdGlvbkNvbmZpZyB3aGVuIGEgY29udHJvbGxlciBhY3R1YWxseSBsaXN0ZWQgdGhpcyBsYXllci5cbiAgICAvLyBQYXJ0aWFsIHRlc3Qgc3RhdGVzIG9taXQgaXQsIGFuZCBhZGRpbmcgdGhlIGtleSB3b3VsZCBjaGFuZ2UgdGhhdCBzaGFwZS5cbiAgICAuLi4oaW50ZXJhY3Rpb25Db25maWcgIT09IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnID8ge2ludGVyYWN0aW9uQ29uZmlnfSA6IHt9KVxuICAgIC8vIFRPRE86IHVwZGF0ZSBmaWx0ZXJzLCBjcmVhdGUgaGVscGVyIHRvIHJlbW92ZSBsYXllciBmb3JtIGZpbHRlciAocmVtb3ZlIGxheWVyaWQgYW5kIGRhdGFpZCkgaWYgbWFwcGVkXG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihcbiAgICByZW1vdmVDaGFydHNBbmRGaWx0ZXJzKFxuICAgICAgbmV3U3RhdGUsXG4gICAgICBjaGFydCA9PiBpc0xheWVyQ2hhcnRDb25maWcoY2hhcnQpICYmIGNoYXJ0LmxheWVySWQgPT09IGxheWVyVG9SZW1vdmUuaWRcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogUmVvcmRlciBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllck9yZGVyOiBvcmRlclxufSk7XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldE5ld0xheWVyR3JvdXAoYWN0aW9uKTtcbiAgbGV0IG5ld0xheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgaWYgKGFjdGlvbi5sYXllck9yZGVyKSB7XG4gICAgYWN0aW9uLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllck9yZGVyOiBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJHcm91cClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZ3JvdXAgYW5kIGFsbCBsYXllcnMgd2l0aGluIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cFRvUmVtb3ZlID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwVG9SZW1vdmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBsYXllcklkc1RvUmVtb3ZlID0gZ2V0RmxhdExheWVyT3JkZXIobGF5ZXJHcm91cFRvUmVtb3ZlLmxheWVyT3JkZXIpO1xuICBsZXQgbmV3U3RhdGUgPSB7Li4uc3RhdGV9O1xuXG4gIGxheWVySWRzVG9SZW1vdmUuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBuZXdTdGF0ZSA9IHJlbW92ZUxheWVyVXBkYXRlcihuZXdTdGF0ZSwge2lkOiBsYXllcklkfSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBUb1JlbW92ZSk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYSBsYXllciBncm91cCAobGFiZWwsIHZpc2liaWxpdHksIGxheWVyIG1lbWJlcnNoaXApXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBvcHRpb25zfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgaWYgKG9wdGlvbnMubGF5ZXJPcmRlcikge1xuICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSBbLi4ubGF5ZXJHcm91cC5sYXllck9yZGVyLCAuLi5uZXdTdGF0ZS5sYXllck9yZGVyXTtcbiAgICBvcHRpb25zLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cCA9IHtcbiAgICAuLi5sYXllckdyb3VwLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcblxuICBpZiAobmV3TGF5ZXJHcm91cC5pc1Zpc2libGUgIT09IGxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgY29uc3QgbGF5ZXJJZHMgPSBnZXRGbGF0TGF5ZXJPcmRlcihuZXdMYXllckdyb3VwLmxheWVyT3JkZXIpO1xuICAgIG5ld1N0YXRlID0gbmV3U3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjLCBsYXllcikgPT4ge1xuICAgICAgaWYgKGxheWVySWRzLmluY2x1ZGVzKGxheWVyLmlkKSkge1xuICAgICAgICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKGFjYywge1xuICAgICAgICAgIG9sZExheWVyOiBsYXllcixcbiAgICAgICAgICBuZXdDb25maWc6IHtpc1Zpc2libGU6IG5ld0xheWVyR3JvdXAuaXNWaXNpYmxlfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cCk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBsYXllciB0byBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7bGF5ZXJHcm91cElkLCBsYXllcklkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gIGlmICghbGF5ZXJHcm91cCB8fCAhbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAobGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmQoZW50cnkgPT4gZW50cnkgPT09IGxheWVySWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGZyb20gYSBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyR3JvdXBPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllckdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICByZXR1cm4gdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZDogbGF5ZXJHcm91cElkLFxuICAgIG9wdGlvbnM6IHtsYXllck9yZGVyOiBuZXdMYXllckdyb3VwT3JkZXJ9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBTd2FwIGxheWVyIG9yZGVyIGVudHJpZXMgYmV0d2VlbiByb290IGFuZCBncm91cHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3Qgc3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Td2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtvcmlnaW5MYXllcklkLCBkZXN0aW5hdGlvbkxheWVySWQsIG9yaWdpbkxheWVyR3JvdXBJZCwgZGVzdGluYXRpb25MYXllckdyb3VwSWR9ID0gYWN0aW9uO1xuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBvcmlnaW5MYXllcklkXG4gICAgKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkICYmIG9yaWdpbkluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25JbmRleCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlNb3ZlKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0aW5hdGlvbkluZGV4KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiAhZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBsZXQgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gbmV3TGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBmYWxzZVxuICAgICAgKTtcbiAgICAgIG5ld0xheWVyT3JkZXIuc3BsaWNlKGRlc3RpbmF0aW9uSW5kZXggPT09IC0xID8gMCA6IGRlc3RpbmF0aW9uSW5kZXgsIDAsIG9yaWdpbkxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllck9yZGVyID0gWy4uLm5ld0xheWVyT3JkZXIsIG9yaWdpbkxheWVySWRdO1xuICAgIH1cbiAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgfVxuXG4gIGlmIChvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBpZiAob3JpZ2luTGF5ZXJHcm91cElkID09PSBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICAgICk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGU7XG4gICAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBkZXN0aW5hdGlvbkxheWVySWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlc3RJbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIHtcbiAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgLy8gQ3Jvc3MtZ3JvdXAgbW92ZTogcmVtb3ZlIGZyb20gb3JpZ2luLCB0aGVuIGFkZCB0byBkZXN0aW5hdGlvblxuICAgIGNvbnN0IGxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgbGV0IG5ld1N0YXRlID0gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG5cbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKTtcbiAgICAgIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3Qgb3JpZ2luSW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5ID09PSBvcmlnaW5MYXllcklkKTtcbiAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggIT09IC0xICYmIGRlc3RJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICAgIGxheWVyT3JkZXI6IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgICAgLi4ubGF5ZXJHcm91cCxcbiAgICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICByZXR1cm4gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIGR1cGxpY2F0ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCAhc3RhdGUubGF5ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyICR7aWR4fSBub3QgZm91bmQgaW4gbGF5ZXJPcmRlcmApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsID0gbGF5ZXJzW2lkeF07XG5cbiAgY29uc3Qgb3JpZ2luYWxMYXllck9yZGVySWR4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcbiAgbGV0IG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9YDtcbiAgbGV0IHBvc3RmaXggPSAwO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gIHdoaWxlIChsYXllcnMuZmluZChsID0+IGwuY29uZmlnLmxhYmVsID09PSBuZXdMYWJlbCkpIHtcbiAgICBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfSAkeysrcG9zdGZpeH1gO1xuICB9XG5cbiAgLy8gY29sbGVjdCBsYXllciBjb25maWcgZnJvbSBvcmlnaW5hbFxuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9yaWdpbmFsLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIC8vIGFzc2lnbiBuZXcgaWQgYW5kIGxhYmVsIHRvIGNvcGllZCBsYXllclxuICBpZiAoIWxvYWRlZExheWVyPy5jb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbG9hZGVkTGF5ZXIuY29uZmlnLmxhYmVsID0gbmV3TGFiZWw7XG4gIGxvYWRlZExheWVyLmlkID0gZ2VuZXJhdGVIYXNoSWQoTEFZRVJfSURfTEVOR1RIKTtcblxuICAvLyBhZGQgbGF5ZXIgdG8gc3RhdGVcbiAgbGV0IG5leHRTdGF0ZSA9IGFkZExheWVyVXBkYXRlcihzdGF0ZSwge2NvbmZpZzogbG9hZGVkTGF5ZXJ9KTtcbiAgLy8gcmV0cmlldmUgbmV3bHkgY3JlYXRlZCBsYXllclxuICBjb25zdCBuZXdMYXllciA9IG5leHRTdGF0ZS5sYXllcnNbbmV4dFN0YXRlLmxheWVycy5sZW5ndGggLSAxXTtcblxuICAvLyBDaGVjayBpZiB0aGUgb3JpZ2luYWwgbGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXBcbiAgY29uc3QgcGFyZW50R3JvdXAgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5hbC5pZCk7XG5cbiAgaWYgKHBhcmVudEdyb3VwKSB7XG4gICAgLy8gTGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXAgLSByZW1vdmUgdGhlIHByZXBlbmRlZCBpZCBmcm9tIHJvb3QgYW5kIGluc2VydCBpbnRvIHRoZSBncm91cFxuICAgIGNvbnN0IGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkID0gbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSk7XG4gICAgY29uc3QgaWR4SW5Hcm91cCA9IHBhcmVudEdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGUgPT4gZSA9PT0gb3JpZ2luYWwuaWQpO1xuICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KHBhcmVudEdyb3VwLmxheWVyT3JkZXIsIGlkeEluR3JvdXAsIG5ld0xheWVyLmlkKTtcbiAgICBjb25zdCB1cGRhdGVkR3JvdXAgPSB7Li4ucGFyZW50R3JvdXAsIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn07XG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQsIHVwZGF0ZWRHcm91cCk7XG4gICAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIGF0IHJvb3QgbGV2ZWwgLSB1c2Ugb3JpZ2luYWwgaW5kZXgtYmFzZWQgaW5zZXJ0aW9uXG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KFxuICAgICAgbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSwgbmV4dFN0YXRlLmxheWVyT3JkZXIubGVuZ3RoKSxcbiAgICAgIG9yaWdpbmFsTGF5ZXJPcmRlcklkeCxcbiAgICAgIG5ld0xheWVyLmlkXG4gICAgKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oYENhbid0IGFkZCBtb3JlIHRoYW4gb25lICR7TElHSFRfQU5EX1NIQURPV19FRkZFQ1QubmFtZX0gZWZmZWN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0ID0gY3JlYXRlRWZmZWN0KGFjdGlvbi5jb25maWcpO1xuXG4gIC8vIGNvbGxhcHNlIGNvbmZpZ3VyYXRvcnMgZm9yIG90aGVyIGVmZmVjdHNcbiAgc3RhdGUuZWZmZWN0cy5mb3JFYWNoKGVmZmVjdCA9PiBlZmZlY3Quc2V0UHJvcHMoe2lzQ29uZmlnQWN0aXZlOiBmYWxzZX0pKTtcblxuICBjb25zdCBlZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHMsIG5ld0VmZmVjdF07XG4gIGNvbnN0IGVmZmVjdE9yZGVyID0gZml4RWZmZWN0T3JkZXIoZWZmZWN0cywgW25ld0VmZmVjdC5pZCwgLi4uc3RhdGUuZWZmZWN0T3JkZXJdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtlZmZlY3RzLCBlZmZlY3RPcmRlcn0gPSBzdGF0ZTtcbiAgY29uc3QgZWZmZWN0VG9SZW1vdmUgPSBlZmZlY3RzW2lkeF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBmaXhlZCBpbiB0c1xuICAgIGVmZmVjdHM6IGZpbHRlck91dEJ5SWQoZWZmZWN0VG9SZW1vdmUuaWQpKGVmZmVjdHMpLFxuICAgIGVmZmVjdE9yZGVyOiBlZmZlY3RPcmRlci5maWx0ZXIoZWZmZWN0SWQgPT4gZWZmZWN0SWQgIT09IGVmZmVjdFRvUmVtb3ZlLmlkKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW9yZGVyIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVmZmVjdE9yZGVyOiBmaXhFZmZlY3RPcmRlcihzdGF0ZS5lZmZlY3RzLCBbLi4ub3JkZXJdKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZWZmZWN0T3JkZXIgPSBzdGF0ZS5lZmZlY3RPcmRlcjtcbiAgaWYgKHByb3BzLmlkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuaWQgIT09IGlkKSB7XG4gICAgY29uc3QgaWR4MiA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gcHJvcHMuaWQpO1xuICAgIGlmIChpZHgyID49IDApIHtcbiAgICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggZXhpc3RpbmcgZWZmZWN0IGlkICR7aWR9YCk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgZWZmZWN0T3JkZXIgPSBlZmZlY3RPcmRlci5tYXAoZWZmZWN0T3JkZXJJZCA9PlxuICAgICAgZWZmZWN0T3JkZXJJZCA9PT0gaWQgPyAocHJvcHMuaWQgYXMgc3RyaW5nKSA6IGVmZmVjdE9yZGVySWRcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZWZmZWN0ID0gc3RhdGUuZWZmZWN0c1tpZHhdO1xuICBjb25zdCBuZXh0UGFyYW1zID0gcHJvcHMucGFyYW1ldGVycztcbiAgLy8gQSB0aW1lc3RhbXAtb25seSBuby1vcCBzdGlsbCB1c2VkIHRvIGFsbG9jYXRlIGEgbmV3IHZpc1N0YXRlIChzZXRQcm9wc1xuICAvLyBtdXRhdGVzIGluIHBsYWNlKS4gVGhhdCByZXRyaWdnZXJlZCBuZXN0ZWQgcmVhY3QtcmVkdXggY29ubmVjdCBzdWJzY3JpYmVyc1xuICAvLyB3aGlsZSBkcmFnZ2luZyB0aGUgTGlnaHQgJiBTaGFkb3cgZGF5LXRpbWUgc2xpZGVyIHVudGlsIFJlYWN0IHRocmV3XG4gIC8vIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWRcIi5cbiAgaWYgKFxuICAgIG5leHRQYXJhbXMgJiZcbiAgICBPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoID09PSAxICYmXG4gICAgT2JqZWN0LmtleXMobmV4dFBhcmFtcykubGVuZ3RoID09PSAxICYmXG4gICAgbmV4dFBhcmFtcy50aW1lc3RhbXAgIT0gbnVsbCAmJlxuICAgIG5leHRQYXJhbXMudGltZXN0YW1wID09PSBlZmZlY3QucGFyYW1ldGVycy50aW1lc3RhbXBcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzXTtcbiAgbmV3RWZmZWN0c1tpZHhdLnNldFByb3BzKHByb3BzKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGlzTGF5ZXJDaGFydENvbmZpZyhjaGFydDogQ2hhcnRDb25maWcpOiBjaGFydCBpcyBMYXllckNoYXJ0Q29uZmlnIHtcbiAgcmV0dXJuIGNoYXJ0LnR5cGUgPT09ICdsYXllckNoYXJ0Jztcbn1cblxuZnVuY3Rpb24gbWVyZ2VDaGFydENvbmZpZyhjaGFydDogQ2hhcnRDb25maWcsIHByb3BzOiBQYXJ0aWFsPENoYXJ0Q29uZmlnPik6IENoYXJ0Q29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5jaGFydCxcbiAgICAuLi5wcm9wcyxcbiAgICBkaXNwbGF5OiB7XG4gICAgICAuLi5jaGFydC5kaXNwbGF5LFxuICAgICAgLi4uKHByb3BzLmRpc3BsYXkgfHwge30pXG4gICAgfSxcbiAgICBjaGFydERpc3BsYXk6IHtcbiAgICAgIC4uLmNoYXJ0LmNoYXJ0RGlzcGxheSxcbiAgICAgIC4uLigocHJvcHMgYXMgQ2hhcnRDb25maWcpLmNoYXJ0RGlzcGxheSB8fCB7fSlcbiAgICB9XG4gIH0gYXMgQ2hhcnRDb25maWc7XG59XG5cbmZ1bmN0aW9uIGF4aXNGaWVsZElmUHJlc2VudDxUIGV4dGVuZHMge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsOyB0aXRsZT86IHN0cmluZyB8IG51bGx9PihcbiAgYXhpczogVCB8IHVuZGVmaW5lZCxcbiAgZmllbGROYW1lczogU2V0PHN0cmluZz5cbik6IFQgfCB1bmRlZmluZWQge1xuICBpZiAoIWF4aXM/LmZpZWxkPy5uYW1lIHx8IGZpZWxkTmFtZXMuaGFzKGF4aXMuZmllbGQubmFtZSkpIHtcbiAgICByZXR1cm4gYXhpcztcbiAgfVxuICByZXR1cm4gey4uLmF4aXMsIGZpZWxkOiBudWxsLCB0aXRsZTogbnVsbH07XG59XG5cbmZ1bmN0aW9uIGRyb3BNaXNzaW5nQ2hhcnRGaWVsZHMoXG4gIGNoYXJ0OiBDaGFydENvbmZpZyxcbiAgZGF0YXNldDoge2ZpZWxkcz86IHtuYW1lOiBzdHJpbmd9W119IHwgdW5kZWZpbmVkXG4pOiBDaGFydENvbmZpZyB7XG4gIGNvbnN0IGZpZWxkTmFtZXMgPSBuZXcgU2V0KChkYXRhc2V0Py5maWVsZHMgfHwgW10pLm1hcChmaWVsZCA9PiBmaWVsZC5uYW1lKSk7XG4gIGNvbnN0IG5leHQgPSBjaGFydCBhcyBDaGFydENvbmZpZyAmIHtcbiAgICB4QXhpcz86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgeUF4aXM/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIGF4aXM/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIGdyb3VwQnk/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIHZhbHVlPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgfTtcbiAgcmV0dXJuIG1lcmdlQ2hhcnRDb25maWcoY2hhcnQsIHtcbiAgICB4QXhpczogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQueEF4aXMsIGZpZWxkTmFtZXMpLFxuICAgIHlBeGlzOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC55QXhpcywgZmllbGROYW1lcyksXG4gICAgYXhpczogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQuYXhpcywgZmllbGROYW1lcyksXG4gICAgZ3JvdXBCeTogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQuZ3JvdXBCeSwgZmllbGROYW1lcyksXG4gICAgdmFsdWU6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LnZhbHVlLCBmaWVsZE5hbWVzKVxuICB9IGFzIFBhcnRpYWw8Q2hhcnRDb25maWc+KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hhcnRzQW5kRmlsdGVyczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgc2hvdWxkUmVtb3ZlOiAoY2hhcnQ6IENoYXJ0Q29uZmlnKSA9PiBib29sZWFuXG4pOiBUIHtcbiAgY29uc3QgY2hhcnRzID0gc3RhdGUuY2hhcnRzIHx8IFtdO1xuICBjb25zdCByZW1vdmVkID0gY2hhcnRzLmZpbHRlcihzaG91bGRSZW1vdmUpO1xuICBpZiAoIXJlbW92ZWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHJlbW92ZWRJZHMgPSBuZXcgU2V0KHJlbW92ZWQubWFwKGNoYXJ0ID0+IGNoYXJ0LmlkKSk7XG4gIGNvbnN0IGZpbHRlcklkcyA9IG5ldyBTZXQoXG4gICAgcmVtb3ZlZC5mbGF0TWFwKGNoYXJ0ID0+IHtcbiAgICAgIGNvbnN0IGlkID0gY2hhcnQuY3Jvc3NGaWx0ZXI/LmZpbHRlcklkO1xuICAgICAgcmV0dXJuIGlkID8gW2lkLCBgJHtpZH0teGAsIGAke2lkfS15YF0gOiBbXTtcbiAgICB9KVxuICApO1xuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjaGFydHM6IGNoYXJ0cy5maWx0ZXIoY2hhcnQgPT4gIXJlbW92ZWRJZHMuaGFzKGNoYXJ0LmlkKSlcbiAgfTtcbiAgaWYgKGZpbHRlcklkcy5zaXplKSB7XG4gICAgbmV4dFN0YXRlID0gbmV4dFN0YXRlLmZpbHRlcnMucmVkdWNlUmlnaHQoKGFjY3UsIGZpbHRlciwgaWR4KSA9PiB7XG4gICAgICByZXR1cm4gZmlsdGVySWRzLmhhcyhmaWx0ZXIuaWQpID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihhY2N1LCB7aWR4fSkgOiBhY2N1O1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZSBhcyBUO1xufVxuXG4vKipcbiAqIEFkZCBhIGNoYXJ0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkQ2hhcnRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjaGFydH06IFZpc1N0YXRlQWN0aW9ucy5BZGRDaGFydFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjaGFydD8uaWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKChzdGF0ZS5jaGFydHMgfHwgW10pLnNvbWUoZXhpc3RpbmcgPT4gZXhpc3RpbmcuaWQgPT09IGNoYXJ0LmlkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0czogW1xuICAgICAgLi4uKHN0YXRlLmNoYXJ0cyB8fCBbXSkubWFwKGV4aXN0aW5nID0+ICh7XG4gICAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgLi4uZXhpc3RpbmcuZGlzcGxheSxcbiAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgaXNKc29uRWRpdG9yQWN0aXZlOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KSksXG4gICAgICB7XG4gICAgICAgIC4uLmNoYXJ0LFxuICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgLi4uY2hhcnQuZGlzcGxheSxcbiAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogY2hhcnQuZGlzcGxheT8uaXNDb25maWdBY3RpdmUgPz8gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGEgY2hhcnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVDaGFydFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVDaGFydFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+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/IGRlZmF1bHRBbmdsZSxcbiAgICAgICAgcmFkaXVzSW5NZXRlcnM6IChjb25maWcgYXMgYW55KT8ucmFkaXVzSW5NZXRlcnMgPz8gMTAwMFxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlRFWFQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLlRFWFRcbiAgICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG5ld0Fubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbihhY3Rpb24uY29uZmlnKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogdHJ1ZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBzdGF0ZS5hbm5vdGF0aW9ucy5maWx0ZXIoYSA9PiBhLmlkICE9PSBpZCksXG4gICAgaW50ZXJhY3Rpb25Db25maWc6IHJlbW92ZUxheWVyRnJvbVpvb21PcGFjaXR5KFxuICAgICAgc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICBnZXRab29tT3BhY2l0eUFubm90YXRpb25UYXJnZXRJZChpZClcbiAgICApLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBudWxsIDogc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6XG4gICAgICBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBmYWxzZSA6IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZEluZGV4KGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcHJldiA9IHN0YXRlLmFubm90YXRpb25zW2lkeF07XG4gIGxldCBuZXh0QW5ub3RhdGlvbjogQW5ub3RhdGlvbjtcblxuICBpZiAoY29uZmlnLmtpbmQgJiYgY29uZmlnLmtpbmQgIT09IHByZXYua2luZCkge1xuICAgIG5leHRBbm5vdGF0aW9uID0gbWFrZU5ld0Fubm90YXRpb24oey4uLnByZXYsIC4uLmNvbmZpZ30gYXMgQW5ub3RhdGlvblByb3BzUGFydGlhbCk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dEFubm90YXRpb24gPSB7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uO1xuICB9XG5cbiAgY29uc3QgbmV3QW5ub3RhdGlvbnMgPSBbLi4uc3RhdGUuYW5ub3RhdGlvbnNdO1xuICBuZXdBbm5vdGF0aW9uc1tpZHhdID0gbmV4dEFubm90YXRpb247XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IG5ld0Fubm90YXRpb25zXG4gIH07XG59O1xuXG4vKipcbiAqIER1cGxpY2F0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZChhID0+IGEuaWQgPT09IGlkKTtcbiAgaWYgKCFvcmlnaW5hbCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCBkdXBsaWNhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IHtcbiAgICAuLi5jbG9uZURlZXAob3JpZ2luYWwpLFxuICAgIGlkOiBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBsYWJlbDogYENvcHkgb2YgJHtvcmlnaW5hbC5sYWJlbH1gXG4gIH07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFtuZXdBbm5vdGF0aW9uLCAuLi5zdGF0ZS5hbm5vdGF0aW9uc10sXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG5ld0Fubm90YXRpb24uaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlXG4gIH07XG59O1xuXG4vKipcbiAqIFNldCBzZWxlY3RlZCBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGlzRWRpdGluZ1RleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgaWQgPT09IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkICYmXG4gICAgKGlzRWRpdGluZ1RleHQgPz8gZmFsc2UpID09PSBzdGF0ZS5pc0VkaXRpbmdBbm5vdGF0aW9uVGV4dFxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGlzRWRpdGluZ1RleHQgPz8gZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZGF0YXNldCBhbmQgYWxsIGxheWVycywgZmlsdGVycywgdG9vbHRpcCBjb25maWdzIHRoYXQgYmFzZWQgb24gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEYXRhc2V0VXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICBjb25zdCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBEZXJpdmVkIHRhYmxlcyBhcmUgc25hcHNob3RzOiBrZWVwIHRoZW0gd2hlbiBhIHNvdXJjZSBkYXRhc2V0IGlzIGRlbGV0ZWQuXG4gIC8vIE9ubHkgZHJvcCBpbi1wcm9ncmVzcyBncm91cC1ieSAvIGpvaW4gZHJhZnRzIHRoYXQgcmVmZXJlbmNlZCB0aGlzIGRhdGFzZXQuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlbW92ZU9wc0ZvckRhdGFzZXRzKHN0YXRlLCBbZGF0YXNldEtleV0pIGFzIFQ7XG4gIHJldHVybiByZW1vdmVTaW5nbGVEYXRhc2V0VXBkYXRlcihuZXh0U3RhdGUsIGRhdGFzZXRLZXkpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTaW5nbGVEYXRhc2V0VXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBULCBkYXRhc2V0S2V5OiBzdHJpbmcpOiBUIHtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBpZiAoIWRhdGFzZXRzW2RhdGFzZXRLZXldKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGxheWVycyxcbiAgICBkYXRhc2V0czoge1tkYXRhc2V0S2V5XTogX2RhdGFzZXQsIC4uLm5ld0RhdGFzZXRzfVxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmUgPSBsYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhc2V0S2V5KS5tYXAobCA9PiBsLmlkKTtcblxuICBsZXQgbmV3U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHNcbiAgfSk7XG5cbiAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgbmV3U3RhdGUuZmlsdGVycykge1xuICAgIGNvbnN0IHZhbHVlSW5kZXggPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YXNldEtleSk7XG4gICAgaWYgKHZhbHVlSW5kZXggPj0gMCAmJiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDEpIHtcbiAgICAgIGZpbHRlcnMucHVzaChfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlSW5kZXggPCAwKSB7XG4gICAgICBmaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBuZXdTdGF0ZSA9IHsuLi5uZXdTdGF0ZSwgZmlsdGVyc307XG5cbiAgcmV0dXJuIHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMoXG4gICAgcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhuZXdTdGF0ZSwge2RhdGFJZDogZGF0YXNldEtleX0pLFxuICAgIGNoYXJ0ID0+IHtcbiAgICAgIGlmIChjaGFydC5kYXRhSWQgPT09IGRhdGFzZXRLZXkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNMYXllckNoYXJ0Q29uZmlnKGNoYXJ0KSkge1xuICAgICAgICByZXR1cm4gbGF5ZXJzVG9SZW1vdmUuaW5jbHVkZXMoY2hhcnQubGF5ZXJJZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICApO1xufVxuXG5mdW5jdGlvbiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKHN0YXRlLCB7ZGF0YUlkfSkge1xuICBsZXQge2ludGVyYWN0aW9uQ29uZmlnfSA9IHN0YXRlO1xuICBjb25zdCB7dG9vbHRpcH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgaWYgKHRvb2x0aXApIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRvb2x0aXA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHtbZGF0YUlkXTogZmllbGRzLCAuLi5maWVsZHNUb1Nob3d9ID0gY29uZmlnLmZpZWxkc1RvU2hvdztcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDogey4uLnRvb2x0aXAsIGNvbmZpZzogey4uLmNvbmZpZywgZmllbGRzVG9TaG93fX1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgaW50ZXJhY3Rpb25Db25maWd9O1xufVxuLyoqXG4gKiB1cGRhdGUgbGF5ZXIgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIHVwZGF0ZSBvdmVybGF5IGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBvdmVybGF5QmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiBEaXNwbGF5IGRhdGFzZXQgdGFibGUgaW4gYSBtb2RhbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNob3dEYXRhc2V0VGFibGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdGluZ0RhdGFzZXQ6IGFjdGlvbi5kYXRhSWRcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGN1c3RvbSBjb2xvciBmb3IgZGF0YXNldHMgYW5kIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRDb2xvclVwZGF0ZXJcbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7Y29sb3I6IGFjdGlvbi5uZXdDb2xvcn19KTtcbn07XG5cbi8qKlxuICogcmVzZXQgdmlzU3RhdGUgdG8gaW5pdGlhbCBTdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc2V0TWFwQ29uZmlnVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlLFxuICBpbml0aWFsU3RhdGU6IHN0YXRlLmluaXRpYWxTdGF0ZVxufSk7XG5cbi8qKlxuICogUHJvcGFnYXRlIGB2aXNTdGF0ZWAgcmVkdWNlciB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgY29uZmlnIHdpbGwgYmUgb3ZlcnJpZGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtjb25maWcgPSB7fSwgb3B0aW9ucyA9IHt9fVxuICB9OiB7XG4gICAgdHlwZT86IHR5cGVvZiBBY3Rpb25UeXBlcy5SRUNFSVZFX01BUF9DT05GSUc7XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjb25maWcudmlzU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7a2VlcEV4aXN0aW5nQ29uZmlnfSA9IG9wdGlvbnM7XG5cbiAgLy8gcmVzZXQgY29uZmlnIGlmIGtlZXBFeGlzdGluZ0NvbmZpZyBpcyBmYWxzeVxuICBsZXQgbWVyZ2VkU3RhdGUgPSAha2VlcEV4aXN0aW5nQ29uZmlnID8gcmVzZXRNYXBDb25maWdVcGRhdGVyKHN0YXRlKSA6IHN0YXRlO1xuICBmb3IgKGNvbnN0IG1lcmdlciBvZiBzdGF0ZS5tZXJnZXJzKSB7XG4gICAgaWYgKGlzVmFsaWRNZXJnZXIobWVyZ2VyKSAmJiBoYXNQcm9wc1RvTWVyZ2UoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCkpIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VyLm1lcmdlKFxuICAgICAgICBtZXJnZWRTdGF0ZSxcbiAgICAgICAgZ2V0UHJvcFZhbHVlVG9NZXJnZXIoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCwgbWVyZ2VyLnRvTWVyZ2VQcm9wKSxcbiAgICAgICAgLy8gZnJvbUNvbmZpZ1xuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBob3ZlciBldmVudCB3aXRoIGhvdmVyZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJIb3ZlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckhvdmVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGhvdmVySW5mbzoge1xuICAgIC8vIGRlY2suZ2wgaW5mbyBpcyBtdXRhYmxlXG4gICAgLi4uYWN0aW9uLmluZm8sXG4gICAgLi4uKE51bWJlci5pc0Zpbml0ZShhY3Rpb24ubWFwSW5kZXgpID8ge21hcEluZGV4OiBhY3Rpb24ubWFwSW5kZXh9IDoge30pXG4gIH1cbn0pO1xuXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogVXBkYXRlIGBpbnRlcmFjdGlvbkNvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgIC4uLntbY29uZmlnLmlkXTogY29uZmlnfVxuICB9O1xuXG4gIC8vIERvbid0IGVuYWJsZSB0b29sdGlwIGFuZCBicnVzaCBhdCB0aGUgc2FtZSB0aW1lXG4gIC8vIGJ1dCBjb29yZGluYXRlcyBjYW4gYmUgc2hvd24gYXQgYWxsIHRpbWVcbiAgY29uc3QgY29udHJhZGljdCA9IFsnYnJ1c2gnLCAndG9vbHRpcCddO1xuXG4gIGlmIChcbiAgICBjb250cmFkaWN0LmluY2x1ZGVzKGNvbmZpZy5pZCkgJiZcbiAgICBjb25maWcuZW5hYmxlZCAmJlxuICAgICFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1tjb25maWcuaWRdLmVuYWJsZWRcbiAgKSB7XG4gICAgLy8gb25seSBlbmFibGUgb25lIGludGVyYWN0aW9uIGF0IGEgdGltZVxuICAgIGNvbnRyYWRpY3QuZm9yRWFjaChrID0+IHtcbiAgICAgIGlmIChrICE9PSBjb25maWcuaWQpIHtcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdba10gPSB7Li4uaW50ZXJhY3Rpb25Db25maWdba10sIGVuYWJsZWQ6IGZhbHNlfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgaWYgKGNvbmZpZy5pZCA9PT0gJ2dlb2NvZGVyJyAmJiAhY29uZmlnLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gcmVtb3ZlRGF0YXNldFVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWQ6IEdFT0NPREVSX0RBVEFTRVRfTkFNRX0pO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5pZCA9PT0gJ2dlb2NvZGVyJykge1xuICAgIGNvbnN0IGdlb2NvZGVyTGF5ZXIgPSBuZXdTdGF0ZS5sYXllcnMuZmluZChsYXllciA9PiBsYXllci5pZCA9PT0gR0VPQ09ERVJfTEFZRVJfSUQpO1xuICAgIGlmIChnZW9jb2RlckxheWVyKSB7XG4gICAgICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICAgIG9sZExheWVyOiBnZW9jb2RlckxheWVyLFxuICAgICAgICBuZXdDb25maWc6IHtjb2xvcjogY29uZmlnLmNvbmZpZy5jb2xvciA/PyBHRU9DT0RFUl9JQ09OX0NPTE9SfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgY2xpY2sgZXZlbnQgd2l0aCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtb3VzZVBvczogc3RhdGUuaW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICBwaW5uZWQ6IHN0YXRlLm1vdXNlUG9zLnBpbm5lZCA/IG51bGwgOiBjbG9uZURlZXAoc3RhdGUubW91c2VQb3MpXG4gICAgICB9XG4gICAgOiBzdGF0ZS5tb3VzZVBvcyxcbiAgY2xpY2tlZDogYWN0aW9uLmluZm8gJiYgYWN0aW9uLmluZm8ucGlja2VkID8gYWN0aW9uLmluZm8gOiBudWxsXG59KTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBjbGljayBldmVudCwgdW5zZWxlY3QgY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Pbk1hcENsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG51bGxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgbW92ZSBldmVudFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1vdXNlTW92ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2V2dH06IFZpc1N0YXRlQWN0aW9ucy5Pbk1vdXNlTW92ZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKE9iamVjdC52YWx1ZXMoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcpLnNvbWUoY29uZmlnID0+IGNvbmZpZy5lbmFibGVkKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1vdXNlUG9zOiB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQucG9pbnQpID8ge21vdXNlUG9zaXRpb246IFsuLi5ldnQucG9pbnRdfSA6IHt9KSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LmxuZ0xhdCkgPyB7Y29vcmRpbmF0ZTogWy4uLmV2dC5sbmdMYXRdfSA6IHt9KVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGZvciBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gIHN0YXRlLnNwbGl0TWFwcyAmJiBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID09PSAwXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAvLyBtYXliZSB3ZSBzaG91bGQgdXNlIGFuIGFycmF5IHRvIHN0b3JlIHN0YXRlIGZvciBhIHNpbmdsZSBtYXAgYXMgd2VsbFxuICAgICAgICAvLyBpZiBjdXJyZW50IG1hcHMgbGVuZ3RoIGlzIGVxdWFsIHRvIDAgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc3BsaXQgdGhlIHZpZXdcbiAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMoc3RhdGUubGF5ZXJzLCB7ZHVwbGljYXRlOiBmYWxzZX0pXG4gICAgICB9XG4gICAgOiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleChzdGF0ZSwgYWN0aW9uKTtcblxuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGluIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttYXBJbmRleCwgbGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckZvck1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3NwbGl0TWFwc30gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogc3BsaXRNYXBzLm1hcCgoc20sIGkpID0+XG4gICAgICBpID09PSBtYXBJbmRleFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXSxcbiAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0ubGF5ZXJzLFxuICAgICAgICAgICAgICAvLyBpZiBsYXllcklkIG5vdCBpbiBsYXllcnMsIHNldCBpdCB0byB2aXNpYmxlXG4gICAgICAgICAgICAgIFtsYXllcklkXTogIXNwbGl0TWFwc1tpXS5sYXllcnNbbGF5ZXJJZF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc21cbiAgICApXG4gIH07XG59O1xuXG5mdW5jdGlvbiBoYXNUYWJ1bGFyRGF0YXNldERhdGEoZGF0YT86IFByb3RvRGF0YXNldFsnZGF0YSddIHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBkYXRhPy5yb3dzPy5sZW5ndGggfHwgZGF0YT8uY29scz8ubGVuZ3RoIHx8IChkYXRhIGFzIHthcnJvd1RhYmxlPzogdW5rbm93bn0pPy5hcnJvd1RhYmxlXG4gICk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldDogUHJvdG9EYXRhc2V0KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgZGF0YXNldC5pbmZvPy50eXBlID09PSBEYXRhc2V0VHlwZS5FWFRFUk5BTExZX0hPU1RFRCAmJlxuICAgIHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgPT09ICdzdHJpbmcnICYmXG4gICAgIWhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhc2V0LmRhdGEpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0KHtcbiAgYXJnOiBkYXRhc2V0LFxuICBvblByb2dyZXNzXG59OiB7XG4gIGFyZzogUHJvdG9EYXRhc2V0O1xuICBvblByb2dyZXNzOiAocHJvZ3Jlc3M6IHtsb2FkZWQ6IG51bWJlcjsgdG90YWw/OiBudW1iZXI7IHBlcmNlbnQ6IG51bWJlcn0pID0+IHZvaWQ7XG59KTogUHJvbWlzZTxQcm90b0RhdGFzZXQ+IHtcbiAgaWYgKCFuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cbiAgY29uc3QgbG9hZGVkID0gYXdhaXQgbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0KHtcbiAgICBzb3VyY2U6IGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSBhcyBzdHJpbmcsXG4gICAgZm9ybWF0OiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQoZGF0YXNldC5tZXRhZGF0YSksXG4gICAgc2l6ZTogdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNpemUgPT09ICdudW1iZXInID8gZGF0YXNldC5tZXRhZGF0YS5zaXplIDogdW5kZWZpbmVkLFxuICAgIGJ5cGFzc0NhY2hlOiBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMoZGF0YXNldC5tZXRhZGF0YSkgPiAwLFxuICAgIG9uUHJvZ3Jlc3NcbiAgfSk7XG4gIGlmICghbG9hZGVkLmRhdGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGRhdGEgbG9hZGVkIGZyb20gJHtkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2V9YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIGRhdGE6IGxvYWRlZC5kYXRhLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAuLi5kYXRhc2V0Lm1ldGFkYXRhLFxuICAgICAgZXRhZzogbG9hZGVkLmV0YWcsXG4gICAgICBsYXN0TW9kaWZpZWQ6IGxvYWRlZC5sYXN0TW9kaWZpZWQsXG4gICAgICAuLi4odHlwZW9mIGxvYWRlZC5zaXplID09PSAnbnVtYmVyJyA/IHtzaXplOiBsb2FkZWQuc2l6ZX0gOiB7fSksXG4gICAgICBsYXN0RmV0Y2hlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgcmVmcmVzaFN0YXR1czogJ2lkbGUnXG4gICAgfVxuICB9O1xufVxuXG5jb25zdCBIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MoXG4gIGh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0LFxuICAnSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0snXG4pO1xuXG5jb25zdCBGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKGFzeW5jIChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufSwgJ0ZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSycpO1xuXG5mdW5jdGlvbiBnZXREYXRhc2V0UHJvZ3Jlc3NJZChkYXRhc2V0OiBQcm90b0RhdGFzZXQsIGluZGV4ID0gMCk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgZGF0YXNldC5pbmZvPy5pZCA9PT0gJ3N0cmluZycgJiYgZGF0YXNldC5pbmZvLmlkKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQuaW5mby5pZDtcbiAgfVxuICBpZiAodHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSA9PT0gJ3N0cmluZycgJiYgZGF0YXNldC5tZXRhZGF0YS5zb3VyY2UpIHtcbiAgICByZXR1cm4gZGF0YXNldC5tZXRhZGF0YS5zb3VyY2U7XG4gIH1cbiAgcmV0dXJuIGBkYXRhc2V0LSR7aW5kZXh9YDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayhkYXRhc2V0OiBQcm90b0RhdGFzZXQsIGRhdGFzZXRzOiBEYXRhc2V0cykge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gY3JlYXRlTmV3RGF0YUVudHJ5KGRhdGFzZXQsIGRhdGFzZXRzKTtcbiAgfVxuICBjb25zdCBwcm9ncmVzc0lkID0gZ2V0RGF0YXNldFByb2dyZXNzSWQoZGF0YXNldCk7XG4gIHJldHVybiBIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyh7XG4gICAgYXJnOiBkYXRhc2V0LFxuICAgIG9uUHJvZ3Jlc3M6IHByb2dyZXNzID0+XG4gICAgICBzZXRMb2FkaW5nUHJvZ3Jlc3MoXG4gICAgICAgIHByb2dyZXNzSWQsXG4gICAgICAgIE1hdGgucm91bmQoKHByb2dyZXNzPy5wZXJjZW50ID8/IDApICogMTAwKSxcbiAgICAgICAgcHJvZ3Jlc3M/LnBoYXNlID09PSAncHJvY2Vzc2luZycgPyAncHJvY2Vzc2luZycgOiB1bmRlZmluZWRcbiAgICAgIClcbiAgfSkuY2hhaW4oaHlkcmF0ZWQgPT4ge1xuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnkoaHlkcmF0ZWQsIGRhdGFzZXRzKTtcbiAgICByZXR1cm4gKFxuICAgICAgdGFzayB8fFxuICAgICAgRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLKCdGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9ycycpXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyTG9hZGluZ1Byb2dyZXNzKHN0YXRlOiBWaXNTdGF0ZSwgaWRzPzogc3RyaW5nW10pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGN1cnJlbnQgPSBzdGF0ZS5sb2FkaW5nUHJvZ3Jlc3MgfHwge307XG4gIGNvbnN0IHByb2Nlc3NpbmcgPSBzdGF0ZS5sb2FkaW5nUHJvY2Vzc2luZyB8fCB7fTtcbiAgaWYgKCFPYmplY3Qua2V5cyhjdXJyZW50KS5sZW5ndGggJiYgIU9iamVjdC5rZXlzKHByb2Nlc3NpbmcpLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoKHN0YXRlLmxvYWRpbmdJbmRpY2F0b3JWYWx1ZSB8fCAwKSA8PSAwKSB7XG4gICAgcmV0dXJuIHsuLi5zdGF0ZSwgbG9hZGluZ1Byb2dyZXNzOiB7fSwgbG9hZGluZ1Byb2Nlc3Npbmc6IHt9fTtcbiAgfVxuICBpZiAoIWlkcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHQgPSB7Li4uY3VycmVudH07XG4gIGNvbnN0IG5leHRQcm9jZXNzaW5nID0gey4uLnByb2Nlc3Npbmd9O1xuICBpZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgZGVsZXRlIG5leHRbaWRdO1xuICAgIGRlbGV0ZSBuZXh0UHJvY2Vzc2luZ1tpZF07XG4gIH0pO1xuICByZXR1cm4gey4uLnN0YXRlLCBsb2FkaW5nUHJvZ3Jlc3M6IG5leHQsIGxvYWRpbmdQcm9jZXNzaW5nOiBuZXh0UHJvY2Vzc2luZ307XG59XG5cbmZ1bmN0aW9uIHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQ6IERhdGFzZXRzW3N0cmluZ10sIHBhdGNoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICByZXR1cm4gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtcbiAgICBtZXRhZGF0YToge1xuICAgICAgLi4uZGF0YXNldC5tZXRhZGF0YSxcbiAgICAgIC4uLnBhdGNoXG4gICAgfVxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSh7XG4gIGFyZzogbWV0YWRhdGEsXG4gIG9uUHJvZ3Jlc3Ncbn06IHtcbiAgYXJnOiB7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgZm9ybWF0Pzogc3RyaW5nO1xuICAgIHNpemU/OiBudW1iZXI7XG4gICAgZXRhZz86IHN0cmluZztcbiAgICBsYXN0TW9kaWZpZWQ/OiBzdHJpbmc7XG4gIH07XG4gIG9uUHJvZ3Jlc3M6IChwcm9ncmVzczoge2xvYWRlZDogbnVtYmVyOyB0b3RhbD86IG51bWJlcjsgcGVyY2VudDogbnVtYmVyfSkgPT4gdm9pZDtcbn0pIHtcbiAgLy8gRmV0Y2ggb25seS4gRG8gbm90IG11dGF0ZSB0aGUgUmVkdXggdGFibGUgaGVyZTogcHJvZ3Jlc3MgZXZlbnRzIGNvcHkgaXQsIGFuZFxuICAvLyB0aGUgc3VjY2VzcyB1cGRhdGVyIGFwcGxpZXMgdGhlIHNuYXBzaG90IHRvIHdoYXRldmVyIGluc3RhbmNlIGlzIGluIHRoZSBzdG9yZS5cbiAgcmV0dXJuIGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCh7Li4ubWV0YWRhdGEsIG9uUHJvZ3Jlc3MsIGJ5cGFzc0NhY2hlOiB0cnVlfSk7XG59XG5cbmNvbnN0IFJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyhcbiAgcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSxcbiAgJ1JFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLJ1xuKTtcblxuLyoqXG4gKiBSZS1mZXRjaCBhbiBleHRlcm5hbGx5IGhvc3RlZCBkYXRhc2V0IGFuZCByZXBsYWNlIGl0cyB0YWJsZSBjb250ZW50cyBpbiBwbGFjZS5cbiAqIExheWVycyBhbmQgZmlsdGVycyBhcmUga2VwdCB3aGVuIGZpZWxkIG5hbWVzIG1hdGNoLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKFxuICAgICFkYXRhc2V0IHx8XG4gICAgZGF0YXNldC50eXBlICE9PSBEYXRhc2V0VHlwZS5FWFRFUk5BTExZX0hPU1RFRCB8fFxuICAgIHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFN0YXR1cyA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dERhdGFzZXQgPSBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7XG4gICAgcmVmcmVzaFN0YXR1czogJ2xvYWRpbmcnLFxuICAgIHJlZnJlc2hFcnJvcjogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogbmV4dERhdGFzZXRcbiAgICAgIH1cbiAgICB9LFxuICAgIFJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKHtcbiAgICAgIGFyZzoge1xuICAgICAgICBzb3VyY2U6IG5leHREYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZSBhcyBzdHJpbmcsXG4gICAgICAgIGZvcm1hdDogZ2V0UmVtb3RlU291cmNlRm9ybWF0KG5leHREYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICAgICAgc2l6ZTogdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLnNpemUgPT09ICdudW1iZXInID8gbmV4dERhdGFzZXQubWV0YWRhdGEuc2l6ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZXRhZzogdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLmV0YWcgPT09ICdzdHJpbmcnID8gbmV4dERhdGFzZXQubWV0YWRhdGEuZXRhZyA6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFzdE1vZGlmaWVkOlxuICAgICAgICAgIHR5cGVvZiBuZXh0RGF0YXNldC5tZXRhZGF0YS5sYXN0TW9kaWZpZWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IG5leHREYXRhc2V0Lm1ldGFkYXRhLmxhc3RNb2RpZmllZFxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICBvblByb2dyZXNzOiBwcm9ncmVzcyA9PlxuICAgICAgICByZWZyZXNoRGF0YXNldFByb2dyZXNzKGRhdGFJZCwgTWF0aC5yb3VuZCgocHJvZ3Jlc3M/LnBlcmNlbnQgPz8gMCkgKiAxMDApKVxuICAgIH0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+IHJlZnJlc2hEYXRhc2V0U3VjY2VzcyhkYXRhSWQsIHJlc3VsdCksXG4gICAgICAoZXJyb3I6IEVycm9yKSA9PiByZWZyZXNoRGF0YXNldEVycm9yKGRhdGFJZCwgZXJyb3IpXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIFJlY29yZCBkb3dubG9hZCBwcm9ncmVzcyBmb3IgYW4gaW4tZmxpZ2h0IHJlbW90ZSBkYXRhc2V0IHJlZnJlc2guXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcGVyY2VudH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0IHx8IGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hTdGF0dXMgIT09ICdsb2FkaW5nJykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXh0UGVyY2VudCA9IE51bWJlci5pc0Zpbml0ZShwZXJjZW50KVxuICAgID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKHBlcmNlbnQpKSlcbiAgICA6IDA7XG4gIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoUHJvZ3Jlc3MgPT09IG5leHRQZXJjZW50KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IHtcbiAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgW2RhdGFJZF06IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtyZWZyZXNoUHJvZ3Jlc3M6IG5leHRQZXJjZW50fSlcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpZWxkTmFtZXNFcXVhbChjdXJyZW50OiB7bmFtZTogc3RyaW5nfVtdLCBpbmNvbWluZz86IHtuYW1lOiBzdHJpbmd9W10gfCBudWxsKTogYm9vbGVhbiB7XG4gIGlmICghaW5jb21pbmc/Lmxlbmd0aCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChjdXJyZW50Lmxlbmd0aCAhPT0gaW5jb21pbmcubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBjdXJyZW50LmV2ZXJ5KChmaWVsZCwgaSkgPT4gZmllbGQubmFtZSA9PT0gaW5jb21pbmdbaV0ubmFtZSk7XG59XG5cbi8qKlxuICogV2hlbiBhIHJlbW90ZSBzbmFwc2hvdCBjaGFuZ2VzIGNvbHVtbiBuYW1lcywgb2xkIGxheWVyIGZpZWxkSWR4IC8gZmlsdGVyIG5hbWVzXG4gKiBjYW4gcG9pbnQgYXQgdGhlIHdyb25nIGNvbHVtbi4gUmUtYmluZCBieSBuYW1lIGFuZCBkcm9wIGNvbmZpZ3MgdGhhdCBubyBsb25nZXIgZml0LlxuICovXG5mdW5jdGlvbiByZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2UoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXVxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgbmV4dExheWVyczogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkcm9wcGVkTGF5ZXJzOiBMYXllcltdID0gW107XG5cbiAgc3RhdGUubGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIGlmIChsYXllci5jb25maWcuZGF0YUlkICE9PSBkYXRhSWQpIHtcbiAgICAgIG5leHRMYXllcnMucHVzaChsYXllcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlYm91bmQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBzdGF0ZS5sYXllckNsYXNzZXMsIGxheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICAgIGlmIChyZWJvdW5kPy5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgIG5leHRMYXllcnMucHVzaChyZWJvdW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZHJvcHBlZExheWVycy5wdXNoKGxheWVyKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZXh0TGF5ZXJPcmRlciA9IHN0YXRlLmxheWVyT3JkZXI7XG4gIGxldCBuZXh0U3BsaXRNYXBzID0gc3RhdGUuc3BsaXRNYXBzO1xuICBkcm9wcGVkTGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIG5leHRMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5leHRMYXllck9yZGVyLCBsYXllci5pZCk7XG4gICAgbmV4dFNwbGl0TWFwcyA9IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhuZXh0U3BsaXRNYXBzLCBsYXllcik7XG4gIH0pO1xuXG4gIGNvbnN0IG5leHRMYXllckRhdGEgPSBuZXh0TGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgY29uc3Qgb2xkSWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChvbGRMYXllciA9PiBvbGRMYXllci5pZCA9PT0gbGF5ZXIuaWQpO1xuICAgIHJldHVybiBvbGRJZHggPj0gMCA/IHN0YXRlLmxheWVyRGF0YVtvbGRJZHhdIDoge307XG4gIH0pO1xuXG4gIGNvbnN0IGZpbHRlcnNGb3JEYXRhc2V0ID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+IHRvQXJyYXkoZmlsdGVyLmRhdGFJZCkuaW5jbHVkZXMoZGF0YUlkKSk7XG4gIGNvbnN0IG90aGVyRmlsdGVycyA9IHN0YXRlLmZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiAhdG9BcnJheShmaWx0ZXIuZGF0YUlkKS5pbmNsdWRlcyhkYXRhSWQpKTtcblxuICBjb25zdCB7dmFsaWRhdGVkLCB1cGRhdGVkRGF0YXNldHN9ID0gdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMoXG4gICAgey4uLnN0YXRlLCBkYXRhc2V0cywgbGF5ZXJzOiBuZXh0TGF5ZXJzfSxcbiAgICBmaWx0ZXJzRm9yRGF0YXNldFxuICApO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXJzID0gWy4uLm90aGVyRmlsdGVycywgLi4udmFsaWRhdGVkXTtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgW2RhdGFJZF0sXG4gICAgdXBkYXRlZERhdGFzZXRzLFxuICAgIG5leHRGaWx0ZXJzLFxuICAgIG5leHRMYXllcnNcbiAgKTtcblxuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogZmlsdGVyZWREYXRhc2V0cyxcbiAgICBsYXllcnM6IG5leHRMYXllcnMsXG4gICAgbGF5ZXJEYXRhOiBuZXh0TGF5ZXJEYXRhLFxuICAgIGxheWVyT3JkZXI6IG5leHRMYXllck9yZGVyLFxuICAgIHNwbGl0TWFwczogbmV4dFNwbGl0TWFwcyxcbiAgICBmaWx0ZXJzOiBuZXh0RmlsdGVyc1xuICB9O1xuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBbZGF0YUlkXSwgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufVxuXG4vKipcbiAqIEFwcGx5IGEgZmluaXNoZWQgcmVtb3RlIHJlZnJlc2g6IGtlZXAgbGF5ZXJzLCByZS1ydW4gZmlsdGVycyBhbmQgbGF5ZXIgZGF0YS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFN1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJlc3VsdH06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldFN1Y2Nlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBtZXRhZGF0YVBhdGNoID0ge1xuICAgIHJlZnJlc2hTdGF0dXM6ICdpZGxlJyxcbiAgICByZWZyZXNoRXJyb3I6IHVuZGVmaW5lZCxcbiAgICByZWZyZXNoUHJvZ3Jlc3M6IHVuZGVmaW5lZCxcbiAgICBsYXN0RmV0Y2hlZEF0OiBEYXRlLm5vdygpLFxuICAgIC8vIEFsd2F5cyB3cml0ZSB2YWxpZGF0b3JzLiBBIDIwMCB0aGF0IG9taXRzIHRoZW0gbXVzdCBub3Qga2VlcCB0aGUgcHJldmlvdXNcbiAgICAvLyBFVGFnIG9yIGEgbGF0ZXIgMzA0IGNhbiBza2lwIGEgYm9keSB3ZSBubyBsb25nZXIgaGF2ZS5cbiAgICBldGFnOiByZXN1bHQuZXRhZyxcbiAgICBsYXN0TW9kaWZpZWQ6IHJlc3VsdC5sYXN0TW9kaWZpZWQsXG4gICAgLi4uKHR5cGVvZiByZXN1bHQuc2l6ZSA9PT0gJ251bWJlcicgPyB7c2l6ZTogcmVzdWx0LnNpemV9IDoge30pXG4gIH07XG5cbiAgY29uc3Qgc2NoZW1hVW5jaGFuZ2VkID0gZmllbGROYW1lc0VxdWFsKGRhdGFzZXQuZmllbGRzLCByZXN1bHQuZGF0YT8uZmllbGRzKTtcblxuICAvLyBBcHBseSB0aGUgc25hcHNob3QgdG8gdGhlIHRhYmxlIGN1cnJlbnRseSBpbiB0aGUgc3RvcmUuIFByb2dyZXNzIG1heSBoYXZlXG4gIC8vIGNvcGllZCBpdCBvZmYgdGhlIG9iamVjdCB0aGF0IHN0YXJ0ZWQgdGhlIGZldGNoOyB0aGUgdGFzayBuZXZlciBtdXRhdGVzIGl0LlxuICBpZiAoIXJlc3VsdC5ub3RNb2RpZmllZCAmJiByZXN1bHQuZGF0YSkge1xuICAgIC8vIEtlcGxlclRhYmxlLnVwZGF0ZSBpcyBhc3luYyBzbyBEdWNrREIgY2FuIGF3YWl0IEFycm93IGNvbnZlcnNpb24uIFRoZVxuICAgIC8vIENTVi9HZW9KU09OIHBhdGggKGFuZCBLZXBsZXJUYWJsZS5pbXBvcnREYXRhKSBydW4gc3luY2hyb25vdXNseSBiZWZvcmVcbiAgICAvLyB0aGUgZmlyc3QgYXdhaXQsIHNvIHRoZSBzdG9yZSB0YWJsZSBpcyB1cGRhdGVkIGJlZm9yZSB3ZSBjb3B5IGl0IGJlbG93LlxuICAgIHZvaWQgZGF0YXNldC51cGRhdGUocmVzdWx0LmRhdGEpO1xuICB9XG5cbiAgY29uc3QgcmVmcmVzaGVkID0gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwgbWV0YWRhdGFQYXRjaCk7XG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiByZWZyZXNoZWRcbiAgfTtcblxuICBpZiAocmVzdWx0Lm5vdE1vZGlmaWVkIHx8ICFyZXN1bHQuZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzXG4gICAgfTtcbiAgfVxuXG4gIGlmICghc2NoZW1hVW5jaGFuZ2VkKSB7XG4gICAgcmV0dXJuIHJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZShzdGF0ZSwgZGF0YUlkLCBkYXRhc2V0cyk7XG4gIH1cblxuICByZXR1cm4gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoey4uLnN0YXRlLCBkYXRhc2V0c30sIGRhdGFJZCk7XG59XG5cbmZ1bmN0aW9uIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHN0YXRlOiBWaXNTdGF0ZSwgZGF0YUlkOiBzdHJpbmcpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIFtkYXRhSWRdLFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzXG4gICk7XG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzXG4gIH07XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIFtkYXRhSWRdLCB1bmRlZmluZWQpO1xuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGlzRGF0YXNldFJvd0xpc3QoXG4gIHJvd3M6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93IHwgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXVxuKTogcm93cyBpcyBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJvd3MpIHx8ICFyb3dzLmxlbmd0aCkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJvd3MpO1xuICB9XG4gIC8vIEEgc2luZ2xlIGNvbHVtbi1vcmRlcmVkIHJvdyBpcyBhbiBhcnJheSBvZiBwcmltaXRpdmVzOyBhIGxpc3Qgb2Ygcm93cyBpc1xuICAvLyBhbiBhcnJheSBvZiBhcnJheXMgb3IgYW4gYXJyYXkgb2YgZmllbGQtbmFtZSByZWNvcmRzLlxuICByZXR1cm4gQXJyYXkuaXNBcnJheShyb3dzWzBdKSB8fCBpc1BsYWluT2JqZWN0KHJvd3NbMF0pO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5Um93KHJvdzogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3csIGZpZWxkczogRmllbGRbXSk6IGFueVtdIHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KHJvdykpIHtcbiAgICByZXR1cm4gcm93Lmxlbmd0aCA9PT0gZmllbGRzLmxlbmd0aCA/IHJvdyA6IG51bGw7XG4gIH1cbiAgaWYgKGlzUGxhaW5PYmplY3Qocm93KSkge1xuICAgIGNvbnN0IHJlY29yZCA9IHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZXR1cm4gZmllbGRzLm1hcChmaWVsZCA9PlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlY29yZCwgZmllbGQubmFtZSkgPyByZWNvcmRbZmllbGQubmFtZV0gOiBudWxsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YXNldFJvd3MoXG4gIHJvd3M6IFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93IHwgVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3dbXSxcbiAgZmllbGRzOiBGaWVsZFtdXG4pOiBhbnlbXVtdIHwgbnVsbCB7XG4gIGlmICghZmllbGRzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGxpc3QgPSBpc0RhdGFzZXRSb3dMaXN0KHJvd3MpID8gcm93cyA6IFtyb3dzXTtcbiAgaWYgKCFsaXN0Lmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IGFueVtdW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXJyYXlSb3cgPSB0b0FycmF5Um93KGxpc3RbaV0sIGZpZWxkcyk7XG4gICAgaWYgKCFhcnJheVJvdykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIG5vcm1hbGl6ZWQucHVzaChhcnJheVJvdyk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKlxuICogQXBwZW5kIG9yIHVwc2VydCByb3dzIG9uIGFuIGV4aXN0aW5nIGluLW1lbW9yeSByb3cgZGF0YXNldC4gS2VlcHMgbGF5ZXJzIGFuZCByZS1ydW5zIGZpbHRlcnMuXG4gKiBBcnJvdy9EdWNrREIgdGFibGVzIHdhcm4gYW5kIGFyZSBsZWZ0IHVuY2hhbmdlZCAoSU5TRVJUIC8gY29uY2F0IG5vdCBpbXBsZW1lbnRlZCkuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkVG9EYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByb3dzLCBvcHRpb25zfTogVmlzU3RhdGVBY3Rpb25zLkFkZFRvRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVEYXRhc2V0Um93cyhyb3dzLCBkYXRhc2V0LmZpZWxkcyk7XG4gIGlmICghbm9ybWFsaXplZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGFwcGxpZWQgPSBvcHRpb25zPy51cHNlcnRCeVxuICAgID8gZGF0YXNldC51cHNlcnRSb3dzKG5vcm1hbGl6ZWQsIG9wdGlvbnMudXBzZXJ0QnkpXG4gICAgOiBkYXRhc2V0LmFwcGVuZFJvd3Mobm9ybWFsaXplZCk7XG4gIGlmICghYXBwbGllZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge30pXG4gIH07XG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuLyoqXG4gKiBEZWxldGUgcm93cyBieSBpbmRleCBvciBieSBmaWVsZCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBpbi1tZW1vcnkgcm93IGRhdGFzZXQuXG4gKiBLZWVwcyBsYXllcnMuIEFycm93L0R1Y2tEQiB0YWJsZXMgd2FybiBhbmQgYXJlIGxlZnQgdW5jaGFuZ2VkLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUZyb21EYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCByb3dJbmRleGVzLCBieUZpZWxkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZyb21EYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgaW5kZXhlcyA9IGJ5RmllbGRcbiAgICA/IGRhdGFzZXQuZmluZFJvd0luZGV4ZXNCeUZpZWxkVmFsdWVzKGJ5RmllbGQuZmllbGQsIHRvQXJyYXkoYnlGaWVsZC52YWx1ZXMpKVxuICAgIDogdG9BcnJheShyb3dJbmRleGVzID8/IFtdKTtcbiAgaWYgKCFpbmRleGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWRhdGFzZXQucmVtb3ZlUm93cyhpbmRleGVzKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRzID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge30pXG4gIH07XG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuLyoqXG4gKiBSZWNvcmQgYSBmYWlsZWQgcmVtb3RlIGRhdGFzZXQgcmVmcmVzaCB3aXRob3V0IGRyb3BwaW5nIGV4aXN0aW5nIHJvd3MuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZXJyb3J9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czoge1xuICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICBbZGF0YUlkXTogcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge1xuICAgICAgICByZWZyZXNoU3RhdHVzOiAnZXJyb3InLFxuICAgICAgICByZWZyZXNoRXJyb3I6IGVycm9yPy5tZXNzYWdlIHx8IFN0cmluZyhlcnJvciksXG4gICAgICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkXG4gICAgICB9KVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xudHlwZSBQcm9ncmVzc2l2ZUxvYWRDb250aW51YXRpb24gPSBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkRmlsZXNTdWNjZXNzPiAmIHtcbiAgcHJvZ3Jlc3NpdmVTdGVwczogRmlsZUNhY2hlSXRlbVtdW107XG59O1xuXG50eXBlIFByb2dyZXNzaXZlVXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb24gPSBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb24gJiB7XG4gIG9uRmluaXNoPzogUHJvZ3Jlc3NpdmVMb2FkQ29udGludWF0aW9uO1xufTtcblxudHlwZSBQcm9ncmVzc2l2ZUNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCA9IENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCAmIHtcbiAgb25GaW5pc2g/OiBQcm9ncmVzc2l2ZUxvYWRDb250aW51YXRpb247XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpc0RhdGFVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGRhdGFzZXRzIGNhbiBiZSBhIHNpbmdsZSBkYXRhIGVudHJpZXMgb3IgYW4gYXJyYXkgb2YgbXVsdGlwbGUgZGF0YSBlbnRyaWVzXG4gIGNvbnN0IHtjb25maWcsIG9wdGlvbnN9ID0gYWN0aW9uO1xuXG4gIC8vIGFwcGx5IGNvbmZpZyBpZiBwYXNzZWQgZnJvbSBhY3Rpb25cbiAgLy8gVE9ETzogd2UgZG9uJ3QgaGFuZGxlIGFzeW5jIG1lcmdlcnMgaGVyZSB5ZXRcbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IGNvbmZpZ1xuICAgID8gcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUsIHtcbiAgICAgICAgcGF5bG9hZDoge2NvbmZpZywgb3B0aW9uc31cbiAgICAgIH0pXG4gICAgOiBzdGF0ZTtcblxuICBjb25zdCBkYXRhc2V0cyA9IHRvQXJyYXkoYWN0aW9uLmRhdGFzZXRzKTtcbiAgaWYgKCFkYXRhc2V0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdXBkYXRlZFN0YXRlO1xuICB9XG5cbiAgY29uc3QgcmVhZHlUYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuICBjb25zdCByZW1vdGVUYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuICBjb25zdCBub3RpZmljYXRpb25UYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuICBjb25zdCBoeWRyYXRlUHJvZ3Jlc3M6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuICBkYXRhc2V0cy5mb3JFYWNoKCh7aW5mbyA9IHt9LCAuLi5yZXN0fSwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgY29uc3QgcHJvdG8gPSB7aW5mbywgLi4ucmVzdH07XG4gICAgY29uc3QgcmVtb3RlID0gbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShwcm90byk7XG4gICAgaWYgKHJlbW90ZSkge1xuICAgICAgaHlkcmF0ZVByb2dyZXNzW2dldERhdGFzZXRQcm9ncmVzc0lkKHByb3RvLCBkYXRhc2V0SW5kZXgpXSA9IDA7XG4gICAgfVxuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKHByb3RvLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIChyZW1vdGUgPyByZW1vdGVUYXNrcyA6IHJlYWR5VGFza3MpLnB1c2godGFzayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9yc2AsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1mYWlsZWQtJHtkYXRhc2V0SW5kZXh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICAvLyBQYXJzZWQgZGF0YXNldHMgYXJlIGNvbW1pdHRlZCBvbiB0aGVpciBvd24uIEEgcmVtb3RlIGRvd25sb2FkIGluIHRoZSBzYW1lXG4gIC8vIGFkZCBtdXN0IG5vdCBob2xkIHRoZW0gdW50aWwgdGhlIFVSTCBmaW5pc2hlcy5cbiAgY29uc3QgcHJvZ3Jlc3NJZHMgPSBPYmplY3Qua2V5cyhoeWRyYXRlUHJvZ3Jlc3MpO1xuICBjb25zdCBiYXRjaGVzOiBBcnJheTx7dGFza3M6IFRhc2tEZXNjcmlwdG9yW107IHByb2dyZXNzSWRzOiBzdHJpbmdbXX0+ID0gW107XG4gIGlmIChyZWFkeVRhc2tzLmxlbmd0aCkge1xuICAgIGJhdGNoZXMucHVzaCh7dGFza3M6IHJlYWR5VGFza3MsIHByb2dyZXNzSWRzOiBbXX0pO1xuICB9XG4gIGlmIChyZW1vdGVUYXNrcy5sZW5ndGgpIHtcbiAgICBiYXRjaGVzLnB1c2goe3Rhc2tzOiByZW1vdGVUYXNrcywgcHJvZ3Jlc3NJZHN9KTtcbiAgfVxuXG4gIGlmIChiYXRjaGVzLmxlbmd0aCkge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKFxuICAgICAgdXBkYXRlZFN0YXRlLFxuICAgICAgcGF5bG9hZF8oe2NoYW5nZTogYmF0Y2hlcy5sZW5ndGgsIHR5cGU6ICcnfSlcbiAgICApO1xuICAgIGlmIChwcm9ncmVzc0lkcy5sZW5ndGgpIHtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgICBsb2FkaW5nUHJvZ3Jlc3M6IHtcbiAgICAgICAgICAuLi51cGRhdGVkU3RhdGUubG9hZGluZ1Byb2dyZXNzLFxuICAgICAgICAgIC4uLmh5ZHJhdGVQcm9ncmVzc1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIFtcbiAgICAuLi5iYXRjaGVzLm1hcCgoYmF0Y2gsIGJhdGNoSW5kZXgpID0+XG4gICAgICBUYXNrLmFsbFNldHRsZWQoYmF0Y2gudGFza3MpLm1hcChyZXN1bHRzID0+IHtcbiAgICAgICAgY29uc3Qgb25GaW5pc2ggPSAoYWN0aW9uIGFzIFByb2dyZXNzaXZlVXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb24pLm9uRmluaXNoO1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBQcm9ncmVzc2l2ZUNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCA9IHtcbiAgICAgICAgICByZXN1bHRzLFxuICAgICAgICAgIGFkZFRvTWFwT3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICBwcm9ncmVzc0lkczogYmF0Y2gucHJvZ3Jlc3NJZHMsXG4gICAgICAgICAgLi4uKG9uRmluaXNoICYmIGJhdGNoSW5kZXggPT09IGJhdGNoZXMubGVuZ3RoIC0gMSA/IHtvbkZpbmlzaH0gOiB7fSlcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzKHBheWxvYWQpO1xuICAgICAgfSlcbiAgICApLFxuICAgIC4uLm5vdGlmaWNhdGlvblRhc2tzXG4gIF0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFBheWxvYWRBY3Rpb248Q3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkPlxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7cmVzdWx0cywgYWRkVG9NYXBPcHRpb25zLCBwcm9ncmVzc0lkcywgb25GaW5pc2h9ID1cbiAgICBhY3Rpb24ucGF5bG9hZCBhcyBQcm9ncmVzc2l2ZUNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZDtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tEZXNjcmlwdG9yW10gPSBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IHJlc3VsdHMucmVkdWNlKChhY2N1LCByZXN1bHQsIGlkeCkgPT4ge1xuICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgY29uc3QgZGF0YXNldCA9IHJlc3VsdC52YWx1ZTtcbiAgICAgIHJldHVybiB7Li4uYWNjdSwgW2RhdGFzZXQuaWRdOiBkYXRhc2V0fTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2hvdyBlcnJvciBub3RpZmljYXRpb24gb24gVUlcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRGF0YXNldCBlcnJvcjogRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0OlxuICAgICAgICAgICAgICAke3Jlc3VsdC5yZWFzb24gfHwgKHJlc3VsdCBhcyBhbnkpLnZhbHVlfWAsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1jcmVhdGUtZmFpbGVkLSR7aWR4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuICB9LCB7fSBhcyBEYXRhc2V0cyk7XG4gIC8vIHNhdmUgbmV3IGRhdGFzZXQgZW50cnkgdG8gc3RhdGVcbiAgY29uc3QgbWVyZ2VkU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlLCBuZXdEYXRhRW50cmllcylcbiAgfTtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbGF5ZXJNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiBtLndhaXRGb3JMYXllckRhdGEpO1xuICBjb25zdCBkYXRhc2V0TWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gIWxheWVyTWVyZ2Vycy5pbmNsdWRlcyhtKSk7XG5cbiAgY29uc3QgbmV3RGF0YUlkcyA9IE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKTtcbiAgY29uc3QgcG9zdE1lcmdlclBheWxvYWQgPSB7XG4gICAgbmV3RGF0YUlkcyxcbiAgICBvcHRpb25zOiBhZGRUb01hcE9wdGlvbnMsXG4gICAgbGF5ZXJNZXJnZXJzXG4gIH07XG5cbiAgY29uc3QgdXBkYXRlZFN0YXRlID0gYXBwbHlNZXJnZXJzVXBkYXRlcihtZXJnZWRTdGF0ZSwge1xuICAgIG1lcmdlcnM6IGRhdGFzZXRNZXJnZXJzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBjbGVhckxvYWRpbmdQcm9ncmVzcyhcbiAgICAgIHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogLTF9KSksXG4gICAgICBwcm9ncmVzc0lkc1xuICAgICksXG4gICAgW1xuICAgICAgLi4ubm90aWZpY2F0aW9uVGFza3MsXG4gICAgICAvLyBNYXRjaCB0aGUgb3JpZ2luYWwgQXJyb3cgYmF0Y2hpbmcgY2FkZW5jZTogY3Jvc3MgYW4gZXZlbnQtbG9vcCB0dXJuIHNvXG4gICAgICAvLyBSZWFjdC9kZWNrLmdsIGNhbiBwYWludCB0aGlzIHNuYXBzaG90IGJlZm9yZSB0aGUgbmV4dCB0YWJsZSB1cGRhdGUuXG4gICAgICAuLi4ob25GaW5pc2ggPyBbREVMQVlfVEFTSygxMCkubWFwKCgpID0+IG9uRmluaXNoKV0gOiBbXSlcbiAgICBdXG4gICk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKiBSZWFkcyBgb3B0aW9ucy5sYXllclZpc0NvbmZpZ2AgZnJvbSBhZGQtZGF0YS10by1tYXAgKHNlZSBgQWRkRGF0YVRvTWFwT3B0aW9uc2ApLiAqL1xuZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMoXG4gIG9wdGlvbnM6IFBvc3RNZXJnZXJQYXlsb2FkWydvcHRpb25zJ10gfCB1bmRlZmluZWRcbik6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+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+XG4gICAgICAgICAgcHJvY2Vzc0ZpbGVDb250ZW50KHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgICAuLi4oYWRkRGF0YU9wdGlvbnM/LmRlZmVyQWRkVG9NYXAgJiYgZ2V0QXBwbGljYXRpb25Db25maWcoKS51c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZ1xuICAgICAgICAgICAgICAgID8ge3ByZXBhcmVQcm9ncmVzc2l2ZVJlcGxheTogdHJ1ZX1cbiAgICAgICAgICAgICAgICA6IHt9KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpbGVDYWNoZVxuICAgICAgICAgIH0pLFxuICAgICAgICAuLi4oYWRkRGF0YU9wdGlvbnMgPyB7b3B0aW9uczogYWRkRGF0YU9wdGlvbnN9IDoge30pXG4gICAgICB9KSxcblxuICAgIC8vIGVycm9yXG4gICAgZXJyID0+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/IGFwcGx5RGVyaXZlZFByb3RvRGF0YXNldChuZXh0U3RhdGUsIHByb3RvKSA6IG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1blNwYXRpYWxKb2luVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SdW5TcGF0aWFsSm9pblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge3N0YXRlOiBuZXh0U3RhdGUsIHByb3RvfSA9IGV4ZWN1dGVTcGF0aWFsSm9pbihzdGF0ZSwgYWN0aW9uKTtcbiAgcmV0dXJuIHByb3RvID8gYXBwbHlEZXJpdmVkUHJvdG9EYXRhc2V0KG5leHRTdGF0ZSwgcHJvdG8pIDogbmV4dFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuU3VpdGFiaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJ1blN1aXRhYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7c3RhdGU6IG5leHRTdGF0ZSwgcHJvdG99ID0gZXhlY3V0ZVN1aXRhYmlsaXR5KHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gcHJvdG8gPyBhcHBseURlcml2ZWRQcm90b0RhdGFzZXQobmV4dFN0YXRlLCBwcm90bykgOiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCB7XG4gIGFkZEdyb3VwQnlVcGRhdGVyLFxuICBhZGRKb2luVXBkYXRlcixcbiAgYWRkU3BhdGlhbEpvaW5VcGRhdGVyLFxuICBhZGRTdWl0YWJpbGl0eVVwZGF0ZXIsXG4gIHJlbW92ZURhdGFzZXRPcFVwZGF0ZXIsXG4gIHNldEdyb3VwQnlDb25maWdVcGRhdGVyLFxuICBzZXRKb2luQ29uZmlnVXBkYXRlcixcbiAgc2V0U3BhdGlhbEpvaW5Db25maWdVcGRhdGVyLFxuICBzZXRTdWl0YWJpbGl0eUNvbmZpZ1VwZGF0ZXJcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
6577
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfYWN0aW9ucyIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJzIiwiX2NvbXBvc2VySGVscGVycyIsIl9tZXJnZXJIYW5kbGVyIiwiX3Zpc1N0YXRlTWVyZ2VyIiwiX3NjaGVtYXMiLCJfcHJvY2Vzc29ycyIsIl93ZWJNZXJjYXRvciIsIl90YWJsZSIsIl9jb2x1bW5FZGl0UmVjb25jaWxlIiwiX2ludGVyYWN0aW9uVXRpbHMiLCJfbGF5ZXJVdGlscyIsIl9kYXRhc2V0T3BzVXBkYXRlcnMiLCJfZWZmZWN0cyIsIl9kYXRhVXRpbHMiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiX2V4Y2x1ZGVkMyIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl90b1Byb3BlcnR5S2V5IiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImEiLCJ1IiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkaXNhYmxlU3RhY2tDYXB0dXJpbmciLCJ2aXNTdGF0ZVVwZGF0ZXJzIiwiZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnIiwiZXhwb3J0cyIsInRvb2x0aXAiLCJpZCIsImxhYmVsIiwiZW5hYmxlZCIsImNvbmZpZyIsImZpZWxkc1RvU2hvdyIsInRpbWV6b25lIiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkNPTVBBUkVfVFlQRVMiLCJBQlNPTFVURSIsImxlZ2VuZCIsImhpZGVJbnZpc2libGVMYXllcnMiLCJnZW9jb2RlciIsInBvc2l0aW9uIiwibGltaXRTZWFyY2giLCJjb2xvciIsIkdFT0NPREVSX0lDT05fQ09MT1IiLCJicnVzaCIsInNpemUiLCJjb29yZGluYXRlIiwiYW5ub3RhdGlvbiIsInpvb21PcGFjaXR5IiwiY29udHJvbGxlcnMiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJoaWRlQ29udHJvbCIsImR1cmF0aW9uIiwiREVGQVVMVF9FRElUT1IiLCJtb2RlIiwiRURJVE9SX01PREVTIiwiRFJBV19QT0xZR09OIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJ2aXNpYmxlIiwiSU5JVElBTF9WSVNfU1RBVEUiLCJtYXBJbmZvIiwidGl0bGUiLCJ1bmRlZmluZWQiLCJkZXNjcmlwdGlvbiIsImxheWVycyIsImxheWVyRGF0YSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXIiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsImdyb3VwQnlzIiwiam9pbnMiLCJzdWl0YWJpbGl0aWVzIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiY2hhcnRzIiwiY2hhcnRzVG9CZU1lcmdlZCIsImNhbWVyYUJvb2ttYXJrcyIsImNhbWVyYVRvdXIiLCJhbm5vdGF0aW9ucyIsImFubm90YXRpb25zVG9CZU1lcmdlZCIsInNlbGVjdGVkQW5ub3RhdGlvbklkIiwiaXNFZGl0aW5nQW5ub3RhdGlvblRleHQiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsImxheWVyQmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJob3ZlckluZm8iLCJjbGlja2VkIiwibW91c2VQb3MiLCJtYXhEZWZhdWx0VG9vbHRpcHMiLCJNQVhfREVGQVVMVF9UT09MVElQUyIsInNwbGl0TWFwcyIsInNwbGl0TWFwc1RvQmVNZXJnZWQiLCJpc01lcmdpbmdEYXRhc2V0cyIsImxheWVyQ2xhc3NlcyIsIkxheWVyQ2xhc3NlcyIsImFuaW1hdGlvbkNvbmZpZyIsImVkaXRvciIsImZpbGVMb2FkaW5nIiwiZmlsZUxvYWRpbmdQcm9ncmVzcyIsInN0YWdlZFRvQWRkIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ1Byb2Nlc3NpbmciLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwiVklTX1NUQVRFX01FUkdFUlMiLCJzY2hlbWEiLCJLZXBsZXJHTFNjaGVtYSIsIkFDVElPTl9UQVNLX0ZJVF9CT1VORFMiLCJUYXNrIiwiZnJvbUNhbGxiYWNrIiwiXyIsImNiIiwiQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTiIsInVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSIsInN0YXRlIiwiX3JlZiIsImxheWVyIiwiaWR4IiwibWFwIiwibHlyIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImlzVmlzaWJsZSIsImFkZE5ld0xheWVyc1RvU3BsaXRNYXAiLCJyZW1vdmVMYXllckZyb21TcGxpdE1hcHMiLCJhbmltYXRpb24iLCJ1cGRhdGVBbmltYXRpb25Eb21haW4iLCJwaWNrQ2hhbmdlZFByb3BzIiwicHJldiIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwia2V5IiwicHJvdG90eXBlIiwiaXNFcXVhbCIsIlZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMiLCJhcHBseUxheWVyQ29uZmlnVXBkYXRlciIsImFjdGlvbiIsIl9zZXJpYWxpemVMYXllciIsIm9sZExheWVySWQiLCJuZXdMYXllckNvbmZpZyIsImxheWVySW5kZXgiLCJzYXZlZExheWVyQ29uZmlnIiwiaXNTYXZlZExheWVyQ29uZmlnVjEiLCJuZXdQYXJzZWRMYXllciIsInBhcnNlTGF5ZXJDb25maWciLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwia2VlcFVubGFiZWxlZEFnZ3JlZ2F0aW9uVGV4dExhYmVsIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibGF5ZXJUeXBlQ2hhbmdlIiwibmV3TGF5ZXJJZCIsImFwcGx5TGF5ZXJDb25maWciLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInBpY2siLCJfaXRlcmF0b3IiLCJfc3RlcCIsImVyciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsImlzTGF5ZXJBbmltYXRhYmxlIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJ0b2dnbGVMYXllckZvck1hcCIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIm5ld1RleHRMYWJlbCIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwiYWRkRmllbGRzIiwiaW5kZXgiLCJpbmNsdWRlcyIsIm90aGVyIiwiZGVsZXRlRmllbGRzIiwiZmQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiYWYiLCJfdGV4dExhYmVsJGZpbmQkY29sbGkiLCJfdGV4dExhYmVsJGZpbmQiLCJjb2xsaXNpb25FbmFibGVkIiwiQm9vbGVhbiIsInVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZSIsInNwbGljZSIsImxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlciIsIl9vbGRMYXllciRnZXREZWZhdWx0TCIsIl9vbGRMYXllciRnZXREZWZhdWx0TDIiLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJfdGV4dExhYmVsJCIsInZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhIiwibG9hZGVkTGF5ZXIiLCJhbGxvd0VtcHR5Q29sdW1uIiwiaXNWYWxpZFRvU2F2ZSIsInZhbGlkYXRlZCIsIm9sZExheWVyVHlwZSIsIm5ld0RhdGFzZXRGaWVsZHMiLCJmaWVsZHMiLCJyZW1hcHBlZEZpZWxkcyIsInZhbHVlcyIsIl9yZWYyIiwiZmllbGRLZXkiLCJjdXJyZW50RmllbGQiLCJtYXRjaGVkIiwiX3JlZjMiLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJpc0NvbmZpZ0FjdGl2ZSIsInVwZGF0ZUxheWVyRG9tYWluIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTMiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJyZXN1bHQiLCJmaW5kRGVmYXVsdExheWVyUHJvcHMiLCJtYXliZUZpdE1hbnVhbExheWVyQm91bmRzIiwiZml0Qm91bmRzIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJlbmFibGVGaXRCb3VuZHNPbk1hbnVhbExheWVyIiwiYm91bmRzIiwiZmluZE1hcEJvdW5kcyIsIndpdGhUYXNrIiwiZml0TWFwQm91bmRzIiwibmV3VHlwZSIsIm9sZElkIiwiQ29uc29sZSIsImVycm9yIiwiZGVmYXVsdExheWVyUHJvcHMiLCJhc3NpZ25Db25maWdUb0xheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUyIsImlzUG9pbnRDb3VudExhYmVsIiwiaXNMYXllckhvdmVyZWQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNCIsInNldHRpbmdzIiwiX3NldHRpbmdzJGxheWVycyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsInJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldCIsInZpc3VhbENoYW5uZWwiLCJpbmNvbWluZyIsIl90eXBlb2YyIiwiZm91bmQiLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsInVwZGF0ZWRTdGF0ZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsInVwZGF0ZUxheWVyQ29sb3JVSSIsInJhbmdlIiwiY29sb3JSYW5nZUNvbmZpZyIsImNvbG9yVUkiLCJjdXN0b21CcmVha3MiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNSIsInNjYWxlIiwiU0NBTEVfVFlQRVMiLCJjdXN0b21PcmRpbmFsIiwiY3VzdG9tUGFsZXR0ZSIsImluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSIsIm9yZGluYWxEb21haW4iLCJjb2xvckJyZWFrcyIsInNob3dDb2xvckNoYXJ0IiwiY2hhbm5lbEtleSIsImplbmtzIiwiZWRpdEJvdW5kcyIsIl9jYWxjdWxhdGVMYXllckRhdGE2IiwicCIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJfcmVmNCIsInJlZHVjZSIsImFjY3UiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiX3JlZjUiLCJhbmltYXRpb25XaW5kb3ciLCJwcmV2aW91c1dpbmRvdyIsIm5leHRGaWx0ZXIiLCJGSUxURVJfVFlQRVMiLCJ0aW1lUmFuZ2UiLCJBTklNQVRJT05fV0lORE9XIiwiaW50ZXJ2YWwiLCJhZGp1c3RlZCIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJnZXRQbG90QmFzZUluZGV4QnlEYXRhSWQiLCJldmVyeSIsInYiLCJpc0Zpbml0ZSIsImluZGV4T2YiLCJzZXRGaWx0ZXIiLCJzd2FwXyIsIm5ld1N5bmNUaW1lbGluZU1vZGUiLCJnZXRTeW5jQW5pbWF0aW9uTW9kZSIsInNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyIiwiYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyIiwiX3NlcmlhbGl6ZUZpbHRlciIsImZpbHRlcklkIiwibmV3RmlsdGVyIiwib2xkRmlsdGVyIiwic2VyaWFsaXplZE9sZEZpbHRlciIsInNlcmlhbGl6ZUZpbHRlciIsInNlcmlhbGl6ZWROZXdGaWx0ZXIiLCJ1cGRhdGVGaWx0ZXJQbG90c0FmdGVyRmlsdGVyaW5nIiwiYWZmZWN0ZWREYXRhc2V0SWRzIiwidXBkYXRlZEZpbHRlckluZGV4IiwiX2ZpbHRlciRwbG90VHlwZSIsInVwZGF0ZUZpbHRlclBsb3QiLCJzaG91bGRSZWZyZXNoTnVtZXJpY1Bsb3QiLCJpc1NpZGVGaWx0ZXIiLCJwbG90VHlwZSIsIlBMT1RfVFlQRVMiLCJsaW5lQ2hhcnQiLCJzaGFyZWREYXRhc2V0SWRzIiwiaW52YWxpZGF0ZWRGaWx0ZXIiLCJyZW1vdmVGaWx0ZXJQbG90IiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsInRvQXJyYXkiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJlbmxhcmdlZCIsInNpZGUiLCJ1bmlxIiwiZmlsdGVyZWREYXRhc2V0cyIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEiLCJhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyIiwiX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsImN1cnJlbnREYXRhSWQiLCJmaWVsZE5hbWUiLCJlbmRGaWVsZE5hbWUiLCJlbmROYW1lIiwicHJldmlvdXNWYWx1ZSIsIm5leHREYXRhSWRzIiwiX2kiLCJfYXJyIiwibmV4dENoYW5uZWxzIiwiY2FuZGlkYXRlIiwiY2FuUmViaW5kRmllbGQiLCJmaWVsZFR5cGUiLCJhcmVGaWx0ZXJGaWVsZFR5cGVzQ29tcGF0aWJsZSIsIl9yZWY2IiwiYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJtZXJnZURvbWFpbiIsInJlYm91bmRGaWx0ZXIiLCJuZXh0TmFtZXMiLCJuZXh0RmllbGRJZHgiLCJmaWVsZElkeCIsImdwdSIsIl9hcHBseVRpbWVGaWx0ZXJFbmRGaSIsImFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSIsInJlYm91bmRFbmRGaWx0ZXIiLCJfYXBwbHlUaW1lRmlsdGVyRW5kRmkyIiwiY2xlYXJlZEVuZEZpbHRlciIsImRvbWFpblN0ZXBzIiwibWVyZ2VGaWx0ZXJEb21haW4iLCJzdGVwIiwiYXNzaWduR3B1Q2hhbm5lbCIsInNldEZpbHRlckdwdU1vZGUiLCJhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluIiwiX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIm5leHRWYWx1ZSIsImdldERlZmF1bHRGaWx0ZXIiLCJfaTIiLCJfYXJyMiIsIm5leHRWYWwiLCJkYXRhc2V0SWRzIiwiRklMVEVSX1VQREFURVJfUFJPUFMiLCJvbGREYXRhSWQiLCJkYXRhc2V0SWQiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsIl9hcHBseVRpbWVGaWx0ZXJFbmRGaTMiLCJncHVDaGFubmVsIiwiZ3B1RW5kQ2hhbm5lbCIsInN1cHBvcnRzSW52ZXJzaW9uIiwiX3N0YXRlJGRhdGFzZXRzJGRhdGFzIiwiZGlzYWJsZURhdGFPcGVyYXRpb24iLCJpbnZlcnRlZCIsImRpc2FibGVHcHVJZkludmVydGVkIiwiZmlsdGVyVHlwZVVzZXNHcHUiLCJsYXllcklkRGlmZmVyZW5jZSIsInhvciIsImxheWVyRGF0YUlkcyIsImxpZCIsIm5ld0RhdGFJZHMiLCJzZXRGaWx0ZXJQbG90VXBkYXRlciIsIl9yZWY3IiwiX25ld0ZpbHRlciRwbG90VHlwZSIsIl9uZXdGaWx0ZXIkcGxvdFR5cGUzIiwibmV3UHJvcCIsInByZXZpb3VzTnVtZXJpY0ludGVydmFsIiwibnVtZXJpY0ludGVydmFsIiwicGxvdFR5cGVVcGRhdGUiLCJfbmV3RmlsdGVyJHBsb3RUeXBlMiIsImdyb3VwQnkiLCJtZXJnZVBsb3RHcm91cEJ5IiwicGlja18iLCJtZXJnZV8iLCJjaGFydFR5cGUiLCJ5QXhpcyIsImhpc3RvZ3JhbSIsIm51bWVyaWNJbnRlcnZhbENoYW5nZWQiLCJiaW5zIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyIiwiX3JlZjgiLCJvbGRWaXhDb25maWciLCJ0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyIiwiaXNGaWx0ZXJBbmltYXRpb25Db25maWciLCJzZXRBbmltYXRpb25Db25maWdVcGRhdGVyIiwiYXBwbHlGaWx0ZXJDb25maWciLCJ0b2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXIiLCJ0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJfcmVmOSIsInNldEZpbHRlclZpZXdVcGRhdGVyIiwic2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3Iiwib3BlbmVkRmlsdGVyIiwidG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIiLCJmZWF0dXJlVG9GaWx0ZXJWYWx1ZSIsInJlbW92ZUZpbHRlclVwZGF0ZXIiLCJfc3RhdGUkZmlsdGVycyRpZHgiLCJuZXdGaWx0ZXJzIiwibmV3RWRpdG9yIiwiZ2V0RmlsdGVySWRJbkZlYXR1cmUiLCJhZGRMYXllclVwZGF0ZXIiLCJuZXdMYXllckRhdGEiLCJjcmVhdGVMYXllckZyb21Db25maWciLCJ3YXJuIiwiX2FjdGlvbiRkYXRhc2V0SWQiLCJkZWZhdWx0RGF0YXNldCIsIkxheWVyIiwicmVtb3ZlTGF5ZXJVcGRhdGVyIiwiX3JlZjAiLCJsYXllclRvUmVtb3ZlIiwicmVtb3ZlTGF5ZXJGcm9tWm9vbU9wYWNpdHkiLCJmaWx0ZXJPdXRCeUlkIiwicmVtb3ZlRWxlbWVudEF0SW5kZXgiLCJyZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIiLCJyZW1vdmVDaGFydHNBbmRGaWx0ZXJzIiwiY2hhcnQiLCJpc0xheWVyQ2hhcnRDb25maWciLCJyZW9yZGVyTGF5ZXJVcGRhdGVyIiwiX3JlZjEiLCJvcmRlciIsImFkZExheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cCIsImdldE5ld0xheWVyR3JvdXAiLCJuZXdMYXllck9yZGVyIiwiYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyIiwicmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwVG9SZW1vdmUiLCJnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIiLCJsYXllcklkc1RvUmVtb3ZlIiwiZ2V0RmxhdExheWVyT3JkZXIiLCJ1cGRhdGVMYXllckdyb3VwVXBkYXRlciIsIm9wdGlvbnMiLCJuZXdMYXllckdyb3VwIiwibGF5ZXJJZHMiLCJhY2MiLCJ1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyIiwiYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cElkIiwiZW50cnkiLCJuZXdHcm91cExheWVyT3JkZXIiLCJyZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlciIsIm5ld0xheWVyR3JvdXBPcmRlciIsInN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXIiLCJvcmlnaW5MYXllcklkIiwiZGVzdGluYXRpb25MYXllcklkIiwib3JpZ2luTGF5ZXJHcm91cElkIiwiZGVzdGluYXRpb25MYXllckdyb3VwSWQiLCJvcmlnaW5JbmRleCIsImRlc3RpbmF0aW9uSW5kZXgiLCJhcnJheU1vdmUiLCJkZXN0SW5kZXgiLCJkdXBsaWNhdGVMYXllclVwZGF0ZXIiLCJfcmVmMTAiLCJvcmlnaW5hbCIsIm9yaWdpbmFsTGF5ZXJPcmRlcklkeCIsImdldEluZGV4RnJvbUxheWVyRW50cnlJZCIsIm5ld0xhYmVsIiwicG9zdGZpeCIsImdlbmVyYXRlSGFzaElkIiwiTEFZRVJfSURfTEVOR1RIIiwicGFyZW50R3JvdXAiLCJmaW5kUGFyZW50R3JvdXBGb3JMYXllciIsImxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkIiwiaWR4SW5Hcm91cCIsImFycmF5SW5zZXJ0IiwidXBkYXRlZEdyb3VwIiwiYWRkRWZmZWN0VXBkYXRlciIsIl9hY3Rpb24kY29uZmlnIiwiX2FjdGlvbiRjb25maWcyIiwiX2FjdGlvbiRjb25maWczIiwiTElHSFRfQU5EX1NIQURPV19FRkZFQ1QiLCJlZmZlY3QiLCJESVNUQU5DRV9GT0dfVFlQRSIsIlNVUkZBQ0VfRk9HX1RZUEUiLCJuZXdFZmZlY3QiLCJjcmVhdGVFZmZlY3QiLCJzZXRQcm9wcyIsImZpeEVmZmVjdE9yZGVyIiwicmVtb3ZlRWZmZWN0VXBkYXRlciIsIl9yZWYxMSIsImVmZmVjdFRvUmVtb3ZlIiwiZWZmZWN0SWQiLCJyZW9yZGVyRWZmZWN0VXBkYXRlciIsIl9yZWYxMiIsInVwZGF0ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTMiLCJpZHgyIiwiZWZmZWN0T3JkZXJJZCIsIm5leHRQYXJhbXMiLCJwYXJhbWV0ZXJzIiwidGltZXN0YW1wIiwibmV3RWZmZWN0cyIsIm1lcmdlQ2hhcnRDb25maWciLCJkaXNwbGF5IiwiY2hhcnREaXNwbGF5IiwiYXhpc0ZpZWxkSWZQcmVzZW50IiwiYXhpcyIsImZpZWxkTmFtZXMiLCJfYXhpcyRmaWVsZCIsImRyb3BNaXNzaW5nQ2hhcnRGaWVsZHMiLCJTZXQiLCJ4QXhpcyIsInNob3VsZFJlbW92ZSIsInJlbW92ZWQiLCJyZW1vdmVkSWRzIiwiZmlsdGVySWRzIiwiZmxhdE1hcCIsIl9jaGFydCRjcm9zc0ZpbHRlciIsImNyb3NzRmlsdGVyIiwicmVkdWNlUmlnaHQiLCJhZGRDaGFydFVwZGF0ZXIiLCJfcmVmMTQiLCJfY2hhcnQkZGlzcGxheSRpc0NvbmYiLCJfY2hhcnQkZGlzcGxheSIsImV4aXN0aW5nIiwiaXNKc29uRWRpdG9yQWN0aXZlIiwidXBkYXRlQ2hhcnRVcGRhdGVyIiwiX3JlZjE1IiwiX25leHQkY3Jvc3NGaWx0ZXIyIiwiX3ByZXYkY3Jvc3NGaWx0ZXIiLCJfcHJldiRjcm9zc0ZpbHRlcjIiLCJfbmV4dCRjcm9zc0ZpbHRlcjMiLCJkYXRhSWRDaGFuZ2VkIiwibGF5ZXJJZENoYW5nZWQiLCJfbmV4dCRjcm9zc0ZpbHRlciIsIm93bmVkRmlsdGVySWRzIiwicmVtb3ZlQ2hhcnRVcGRhdGVyIiwiX3JlZjE2IiwibWFrZU5ld0Fubm90YXRpb24iLCJfY29uZmlnJGtpbmQiLCJfcmVmMTciLCJfY29uZmlnJHRleHRTaWRlIiwiX3JlZjE4IiwiX2NvbmZpZyR0ZXh0VmVydGljYWxQIiwiX2NvbmZpZyRpZCIsIl9jb25maWckaXNWaXNpYmxlIiwiX2NvbmZpZyRhdXRvU2l6ZSIsIl9jb25maWckYXV0b1NpemVZIiwiX2NvbmZpZyRhbmNob3JQb2ludCIsIl9jb25maWckbGFiZWwiLCJfY29uZmlnJGxpbmVDb2xvciIsIl9jb25maWckbGluZVdpZHRoIiwiX2NvbmZpZyR0ZXh0V2lkdGgiLCJfY29uZmlnJHRleHRIZWlnaHQiLCJfY29uZmlnJHRleHRWZXJ0aWNhbEEiLCJfYXJtTGVuZ3RoIiwiX2FybUxlbmd0aDIiLCJfYXJtTGVuZ3RoMyIsIl9yYWRpdXNJbk1ldGVycyIsImtpbmQiLCJJTklUSUFMX0FOTk9UQVRJT05fS0lORCIsInByb3ZpZGVkQW5nbGUiLCJhbmdsZSIsImRlcml2ZWRGcm9tQW5nbGUiLCJ0ZXh0UGxhY2VtZW50RnJvbUFuZ2xlIiwidGV4dFNpZGUiLCJBbm5vdGF0aW9uS2luZCIsIlRFWFQiLCJSVUxFUiIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUiLCJ0ZXh0VmVydGljYWxQb3NpdGlvbiIsInZlcnRpY2FsIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04iLCJiYXNlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJhbmNob3JQb2ludCIsImVkaXRvclN0YXRlIiwibGluZUNvbG9yIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJsaW5lV2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCIsInRleHRXaWR0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRIIiwidGV4dEhlaWdodCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCIsInRleHRWZXJ0aWNhbEFsaWduIiwiZGVmYXVsdEFuZ2xlIiwiQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlQiLCJJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUiLCJQT0lOVCIsImFybUxlbmd0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RIIiwiQVJST1ciLCJDSVJDTEUiLCJyYWRpdXNJbk1ldGVycyIsIl9lbmRQb2ludCIsIl9zaG93Q3VzdG9tVGV4dCIsIl9zaG93RGlzdGFuY2UiLCJzaGlmdGVkIiwiYWRkTWV0ZXJzVG9MbmdMYXQiLCJJTklUSUFMX0FOTk9UQVRJT05fUlVMRVJfTEVOR1RIX01FVEVSUyIsImFsdGl0dWRlIiwiZGVmYXVsdEVuZFBvaW50IiwiZW5kUG9pbnQiLCJzaG93Q3VzdG9tVGV4dCIsInNob3dEaXN0YW5jZSIsImFkZEFubm90YXRpb25VcGRhdGVyIiwibmV3QW5ub3RhdGlvbiIsInJlbW92ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE5IiwiZ2V0Wm9vbU9wYWNpdHlBbm5vdGF0aW9uVGFyZ2V0SWQiLCJ1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYyMCIsIm5leHRBbm5vdGF0aW9uIiwibmV3QW5ub3RhdGlvbnMiLCJkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYyMSIsImNsb25lRGVlcCIsInNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMjIiLCJpc0VkaXRpbmdUZXh0IiwicmVtb3ZlRGF0YXNldFVwZGF0ZXIiLCJkYXRhc2V0S2V5IiwicmVtb3ZlT3BzRm9yRGF0YXNldHMiLCJyZW1vdmVTaW5nbGVEYXRhc2V0VXBkYXRlciIsIl9zdGF0ZSRkYXRhc2V0cyIsIl9kYXRhc2V0IiwibmV3RGF0YXNldHMiLCJsYXllcnNUb1JlbW92ZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJyZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnIiwiX3JlZjIzIiwiX2ludGVyYWN0aW9uQ29uZmlnIiwiX2NvbmZpZyRmaWVsZHNUb1Nob3ciLCJ1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsInVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyIiwidXBkYXRlRGF0YXNldFByb3BzVXBkYXRlciIsIm5ld0NvbG9yIiwicmVzZXRNYXBDb25maWdVcGRhdGVyIiwiaW5pdGlhbFN0YXRlIiwic2V0Q2FtZXJhQm9va21hcmtzVXBkYXRlciIsIm5vcm1hbGl6ZUNhbWVyYUJvb2ttYXJrcyIsInBheWxvYWQiLCJzZXRDYW1lcmFUb3VyVXBkYXRlciIsIm5vcm1hbGl6ZUNhbWVyYVRvdXIiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYyNCIsIl9yZWYyNCRwYXlsb2FkIiwiX3JlZjI0JHBheWxvYWQkY29uZmlnIiwiX3JlZjI0JHBheWxvYWQkb3B0aW9uIiwidmlzU3RhdGUiLCJrZWVwRXhpc3RpbmdDb25maWciLCJtZXJnZWRTdGF0ZSIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJtZXJnZXIiLCJpc1ZhbGlkTWVyZ2VyIiwiaGFzUHJvcHNUb01lcmdlIiwibWVyZ2UiLCJnZXRQcm9wVmFsdWVUb01lcmdlciIsInRvTWVyZ2VQcm9wIiwibGF5ZXJIb3ZlclVwZGF0ZXIiLCJpbmZvIiwiaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyIiwiY29udHJhZGljdCIsImsiLCJHRU9DT0RFUl9EQVRBU0VUX05BTUUiLCJnZW9jb2RlckxheWVyIiwiR0VPQ09ERVJfTEFZRVJfSUQiLCJfY29uZmlnJGNvbmZpZyRjb2xvciIsImxheWVyQ2xpY2tVcGRhdGVyIiwicGlubmVkIiwicGlja2VkIiwibWFwQ2xpY2tVcGRhdGVyIiwibW91c2VNb3ZlVXBkYXRlciIsIl9yZWYyNSIsImV2dCIsInBvaW50IiwibW91c2VQb3NpdGlvbiIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwiX3JlZjI2IiwiaGFzVGFidWxhckRhdGFzZXREYXRhIiwiZGF0YSIsIl9kYXRhJHJvd3MiLCJfZGF0YSRjb2xzIiwicm93cyIsImNvbHMiLCJhcnJvd1RhYmxlIiwibmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZSIsIl9kYXRhc2V0JGluZm8iLCJfZGF0YXNldCRtZXRhZGF0YSIsIkRhdGFzZXRUeXBlIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJfcmVmMjciLCJfZGF0YXNldCRtZXRhZGF0YTciLCJfZGF0YXNldCRtZXRhZGF0YTgiLCJvblByb2dyZXNzIiwibG9hZGVkIiwiX2RhdGFzZXQkbWV0YWRhdGE5Iiwid3JhcCIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImFyZyIsImFicnVwdCIsImxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCIsImZvcm1hdCIsImdldFJlbW90ZVNvdXJjZUZvcm1hdCIsImJ5cGFzc0NhY2hlIiwiZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zIiwic2VudCIsIkVycm9yIiwiZXRhZyIsImxhc3RNb2RpZmllZCIsImxhc3RGZXRjaGVkQXQiLCJEYXRlIiwibm93IiwicmVmcmVzaFN0YXR1cyIsInN0b3AiLCJIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyIsImZyb21Qcm9taXNlV2l0aFByb2dyZXNzIiwiRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2UiLCJfcmVmMjgiLCJfY2FsbGVlIiwibWVzc2FnZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJfeDIiLCJnZXREYXRhc2V0UHJvZ3Jlc3NJZCIsIl9kYXRhc2V0JGluZm8yIiwiX2RhdGFzZXQkbWV0YWRhdGEyIiwiY3JlYXRlTmV3RGF0YUVudHJ5VGFzayIsImNyZWF0ZU5ld0RhdGFFbnRyeSIsInByb2dyZXNzSWQiLCJwcm9ncmVzcyIsIl9wcm9ncmVzcyRwZXJjZW50Iiwic2V0TG9hZGluZ1Byb2dyZXNzIiwiTWF0aCIsInJvdW5kIiwicGVyY2VudCIsInBoYXNlIiwiY2hhaW4iLCJoeWRyYXRlZCIsInRhc2siLCJjbGVhckxvYWRpbmdQcm9ncmVzcyIsImlkcyIsImN1cnJlbnQiLCJwcm9jZXNzaW5nIiwibmV4dFByb2Nlc3NpbmciLCJwYXRjaERhdGFzZXRNZXRhZGF0YSIsInBhdGNoIiwiY29weVRhYmxlQW5kVXBkYXRlIiwicmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl94MyIsIl9yZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX2NhbGxlZTMiLCJfcmVmMjkiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJSRUZSRVNIX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyIsInJlZnJlc2hEYXRhc2V0VXBkYXRlciIsIl9yZWYzMCIsIl9kYXRhc2V0JG1ldGFkYXRhMyIsIl9kYXRhc2V0JG1ldGFkYXRhNCIsIm5leHREYXRhc2V0IiwicmVmcmVzaEVycm9yIiwicmVmcmVzaFByb2dyZXNzIiwiY3N2SGVhZGVyIiwiX3Byb2dyZXNzJHBlcmNlbnQyIiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsImJpbWFwIiwicmVmcmVzaERhdGFzZXRTdWNjZXNzIiwicmVmcmVzaERhdGFzZXRFcnJvciIsInJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyIiwiX3JlZjMxIiwiX2RhdGFzZXQkbWV0YWRhdGE1IiwiX2RhdGFzZXQkbWV0YWRhdGE2IiwibmV4dFBlcmNlbnQiLCJtYXgiLCJtaW4iLCJmaWVsZE5hbWVzRXF1YWwiLCJyZWJpbmRMYXllcnNBbmRGaWx0ZXJzQWZ0ZXJTY2hlbWFDaGFuZ2UiLCJuZXh0TGF5ZXJzIiwiZHJvcHBlZExheWVycyIsInJlYm91bmQiLCJuZXh0TGF5ZXJPcmRlciIsIm5leHRTcGxpdE1hcHMiLCJuZXh0TGF5ZXJEYXRhIiwib2xkSWR4IiwiZmlsdGVyc0ZvckRhdGFzZXQiLCJvdGhlckZpbHRlcnMiLCJfdmFsaWRhdGVGaWx0ZXJzVXBkYXQiLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsInVwZGF0ZWREYXRhc2V0cyIsIm5leHRGaWx0ZXJzIiwicmVmcmVzaERhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9yZWYzMiIsIl9yZXN1bHQkZGF0YSIsIm1ldGFkYXRhUGF0Y2giLCJzY2hlbWFVbmNoYW5nZWQiLCJub3RNb2RpZmllZCIsInVwZGF0ZSIsInJlZnJlc2hlZCIsInBvbHlnb24iLCJyZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSIsIm5lZWRzR2VvbWV0cnkiLCJwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhIiwiX2ZpbHRlciRsYXllcklkIiwiaXNEYXRhc2V0Um93TGlzdCIsImlzUGxhaW5PYmplY3QiLCJ0b0FycmF5Um93Iiwicm93IiwicmVjb3JkIiwibm9ybWFsaXplRGF0YXNldFJvd3MiLCJsaXN0Iiwibm9ybWFsaXplZCIsImFycmF5Um93IiwiYWRkVG9EYXRhc2V0VXBkYXRlciIsIl9yZWYzMyIsImFwcGxpZWQiLCJ1cHNlcnRCeSIsInVwc2VydFJvd3MiLCJhcHBlbmRSb3dzIiwicmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyIiwiX3JlZjM0Iiwicm93SW5kZXhlcyIsImJ5RmllbGQiLCJpbmRleGVzIiwiZmluZFJvd0luZGV4ZXNCeUZpZWxkVmFsdWVzIiwicmVtb3ZlUm93cyIsInJlZnJlc2hEYXRhc2V0RXJyb3JVcGRhdGVyIiwiX3JlZjM1IiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJyZWFkeVRhc2tzIiwicmVtb3RlVGFza3MiLCJub3RpZmljYXRpb25UYXNrcyIsImh5ZHJhdGVQcm9ncmVzcyIsIl9yZWYzNiIsImRhdGFzZXRJbmRleCIsIl9yZWYzNiRpbmZvIiwicmVzdCIsInByb3RvIiwicmVtb3RlIiwiYWRkTm90aWZpY2F0aW9uIiwiZXJyb3JOb3RpZmljYXRpb24iLCJwcm9ncmVzc0lkcyIsImJhdGNoZXMiLCJ0YXNrcyIsInNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyIiwicGF5bG9hZF8iLCJjaGFuZ2UiLCJiYXRjaCIsImJhdGNoSW5kZXgiLCJhbGxTZXR0bGVkIiwicmVzdWx0cyIsIm9uRmluaXNoIiwiYWRkVG9NYXBPcHRpb25zIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MiLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfcmVmMzciLCJuZXdEYXRhRW50cmllcyIsInN0YXR1cyIsIkFDVElPTl9UQVNLIiwicmVhc29uIiwibWVyZ2VEYXRhc2V0c0J5T3JkZXIiLCJsYXllck1lcmdlcnMiLCJtIiwid2FpdEZvckxheWVyRGF0YSIsImRhdGFzZXRNZXJnZXJzIiwicG9zdE1lcmdlclBheWxvYWQiLCJhcHBseU1lcmdlcnNVcGRhdGVyIiwiREVMQVlfVEFTSyIsIm1lcmdlU3RhdGVSZXN1bHQiLCJtZXJnZVN0YXRlRnJvbU1lcmdlcnMiLCJhbGxNZXJnZWQiLCJwb3N0TWVyZ2VVcGRhdGVyIiwibGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMiLCJsYXllclZpc0NvbmZpZyIsIl9sYXllciRjb25maWciLCJMQVlFUl9UWVBFUyIsImdlb2pzb24iLCJjb2x1bW5Nb2RlIiwiZkRhdGFJZCIsImRhdGFzZXRGaWx0ZXJlZCIsImRhdGFFbXB0eSIsIm5ld0xheWVycyIsImF1dG9DcmVhdGVMYXllcnMiLCJhZGREZWZhdWx0TGF5ZXJzIiwibGF5ZXJzTm90SW5TcGxpdE1hcHMiLCJtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMiLCJ0b29sdGlwRmllbGRzIiwiYXV0b0NyZWF0ZVRvb2x0aXBzIiwiYWRkRGVmYXVsdFRvb2x0aXBzIiwicG9seWdvbkZpbHRlcnMiLCJwb2x5Z29uTWV0YURhdGFJZHMiLCJfZiRsYXllcklkIiwiY2VudGVyTWFwIiwicGFkZGluZyIsImZpdEJvdW5kc1Rhc2siLCJyZW5hbWVEYXRhc2V0VXBkYXRlciIsIkFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMiLCJ2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyIsInZhbGlkYXRlZFByb3BzIiwiZW50cmllcyIsIl9lbnRyeSIsIl9zbGljZWRUb0FycmF5MiIsImlzUmdiQ29sb3IiLCJkZWVwbWVyZ2UiLCJyZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEiLCJyZW5hbWVzIiwibmV3VGFibGUiLCJfbGF5ZXIkY29uZmlnJHRleHRMYWIiLCJjb25maWdQYXRjaCIsImNvbHVtbnNQYXRjaCIsImNvbHVtbnNDaGFuZ2VkIiwiY29sdW1ucyIsIl9yZWYzOCIsIl9yZWYzOSIsImNrZXkiLCJjb2wiLCJfcmVmNDAiLCJmaWVsZENvbmZpZyIsIl90bCRmaWVsZCIsIl90bCRmaWVsZDIiLCJfcmVuYW1lcyRuYW1lIiwibGF5ZXJDb3B5IiwiYXNzaWduIiwiY3JlYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJoYXNBbGxDb2x1bW5zIiwiRklMVEVSX1BMT1RfWV9BWElTX1RZUEVTIiwiQUxMX0ZJRUxEX1RZUEVTIiwiaW50ZWdlciIsInJlYWwiLCJjbGVhclRpbWVsaW5lRmlsdGVyU3RhdGUiLCJfcmVmNDEiLCJfc3luY2VkV2l0aExheWVyVGltZWxpbmUiLCJfc3luY1RpbWVsaW5lTW9kZSIsInN5bmNUaW1lbGluZU1vZGUiLCJfdGltZUJpbnMiLCJ0aW1lQmlucyIsIl9saW5lQ2hhcnQiLCJfdGltZXpvbmUiLCJfaW52ZXJ0VHJlbmRDb2xvciIsImludmVydFRyZW5kQ29sb3IiLCJfc2hvd1RpbWVEaXNwbGF5Iiwic2hvd1RpbWVEaXNwbGF5IiwiZml4ZWREb21haW4iLCJmcmVlIiwicmVjb25jaWxlVGltZWxpbmVQbG90QWZ0ZXJQcmltYXJ5UmVtb3ZhbCIsIl9maWx0ZXIkeUF4aXMiLCJfcHJpbWFyeURhdGFzZXQkZmllbGQiLCJfZmlsdGVyJHBsb3RUeXBlMiIsInByaW1hcnlEYXRhc2V0IiwiX2ZpbHRlciR5QXhpczIiLCJncm91cEJ5RmllbGROYW1lIiwiaGFzR3JvdXBCeUZpZWxkIiwidXBkYXRlRGF0YXNldFVwZGF0ZXIiLCJfcmVuYW1lcyRzb3J0ZWRDb2x1bW4iLCJfaW50ZXJhY3Rpb25Db25maWcyIiwiX3Rvb2x0aXAkY29uZmlnIiwiX2FjdGlvbiRyZW5hbWVzIiwiX3JlZjQyIiwic29ydENvbHVtbiIsIl9yZWY0MyIsInNvcnRlZENvbHVtbiIsInNvcnRNb2RlIiwidXBkYXRlU2NoZW1hIiwiZGF0YVJldmlzaW9uIiwiZmlsdGVyZWRJZHhDUFUiLCJhbGxJbmRleGVzIiwiZmlsdGVyUmVjb3JkQ1BVIiwic29ydE9yZGVyIiwibmV3RmllbGRzQnlOYW1lIiwiTWFwIiwicGlubmVkQ29sdW1ucyIsIl9yZW5hbWVzJG5hbWUyIiwiaGlkZGVuQ29sdW1ucyIsIl9yZW5hbWVzJG5hbWUzIiwibmV4dFNvcnRlZENvbHVtbiIsInNvcnREYXRhc2V0QnlDb2x1bW4iLCJkYXRhc2V0SWRzVG9SZWZpbHRlciIsIl9yZW5hbWVzJG9sZE5hbWUiLCJfbmV3VGFibGUkZ2V0Q29sdW1uRmkiLCJfdXBkYXRlZCR5QXhpcyIsInZpIiwib2xkTmFtZSIsIm5ld05hbWUiLCJnZXRDb2x1bW5GaWVsZElkeCIsIm5leHRGaWx0ZXJUeXBlIiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJhZGQiLCJkZXRhY2hlZEZpbHRlciIsIl9hcHBseUZpbHRlckZpZWxkTmFtZTIiLCJ1cGRhdGVkIiwibGVhdmluZ1RpbWVGaWx0ZXIiLCJvbGRFbmROYW1lIiwiX3JlbmFtZXMkb2xkRW5kTmFtZSIsIl9yZWY0NCIsIl9hcHBseVRpbWVGaWx0ZXJFbmRGaTQiLCJfcmVuYW1lcyR1cGRhdGVkJHlBeGkiLCJ5QXhpc05hbWUiLCJ5QXhpc0ZpZWxkIiwicmVjb25jaWxlZCIsInJlbW92ZWRMYXllcklkcyIsIl9maWx0ZXIkbGF5ZXJJZDIiLCJzdXJ2aXZpbmdMYXllcnMiLCJuZXh0RmllbGRzVG9TaG93IiwiX3JlbmFtZXMkZiRuYW1lIiwicmVtYXBDaGFydHNGb3JEYXRhc2V0IiwicmVuYW1lVGFibGVDb2x1bW5VcGRhdGVyIiwiY2FuTXV0YXRlRGF0YXNldFNjaGVtYSIsImJ1aWxkUmVuYW1lQ29sdW1uRGF0YSIsImNoYW5nZVRhYmxlQ29sdW1uVHlwZVVwZGF0ZXIiLCJidWlsZENoYW5nZUNvbHVtblR5cGVEYXRhIiwiZm9ybWF0Q29sdW1uVHlwZUNvbnZlcnNpb25FcnJvciIsImRlbGV0ZVRhYmxlQ29sdW1uVXBkYXRlciIsImJ1aWxkRGVsZXRlQ29sdW1uRGF0YSIsIl9zdGF0ZSRzcGxpdE1hcHMkaW5kZSIsImluZGV4VG9SZXRyaWV2ZSIsIm1hcExheWVycyIsIm5leHRGaWxlTG9hZElkIiwiY3JlYXRlRmlsZUxvYWRJZCIsImxvYWRJZCIsImZpbmlzaEZpbGVMb2FkIiwiZmlsZUNhY2hlIiwibG9hZEZpbGVzVXBkYXRlciIsIl9zdGF0ZSRmaWxlTG9hZGluZyRvcCIsImZpbGVzIiwiX2FjdGlvbiRvbkZpbmlzaCIsImxvYWRGaWxlc1N1Y2Nlc3MiLCJjb21wYW5pb25GaWxlcyIsImZpbGVzVG9Mb2FkIiwiZ2V0RmlsZXNUb1BhcnNlIiwiZGVmZXJBZGRUb01hcCIsImFwcGVuZERlZmVycmVkRmlsZUxvYWQiLCJwcmV2aW91c0Vycm9ycyIsImZyb21FbnRyaWVzIiwiX3JlZjQ1IiwiX3JlZjQ2IiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwiX3JlZjQ3IiwibG9hZGluZyIsImZpbGUiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInN0YXRlV2l0aENhY2hlIiwibG9hZE5leHRGaWxlIiwiX3N0YXRlJGZpbGVMb2FkaW5nIiwiY3VycmVudExvYWRJZCIsIl9maWxlc1RvTG9hZCIsIl90b0FycmF5MiIsInJlbWFpbmluZ0ZpbGVzVG9Mb2FkIiwiaXNaaXBGaWxlTmFtZSIsIkVYUEFORF9aSVBfVEFTSyIsImV4dGVuc2lvbnMiLCJkYXRhc2V0RXh0ZW5zaW9uc0Zyb21Mb2FkZXJzIiwiZXhwYW5zaW9uIiwiZXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3MiLCJhcmNoaXZlTmFtZSIsImxvYWRGaWxlc0VyciIsIm1ha2VMb2FkRmlsZVRhc2siLCJzZWVuIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImxvYWRlciIsIl9pdGVyYXRvcjUiLCJfc3RlcDUiLCJleHRlbnNpb24iLCJleHQiLCJyZXBsYWNlIiwidHJpbSIsInRvTG93ZXJDYXNlIiwiY29tcGFuaW9uRmlsZXNGb3JBcmNoaXZlIiwiZXh0cmFjdGVkIiwic2hhcGVmaWxlIiwiY29tcGFuaW9ucyIsIndpdGhvdXRGaWxlTG9hZGluZ1Byb2dyZXNzRW50cnkiLCJleHBhbmRaaXBBcmNoaXZlU3VjY2Vzc1VwZGF0ZXIiLCJhZGREYXRhT3B0aW9ucyIsImRpc3BsYXlOYW1lIiwiTE9BRF9GSUxFX1RBU0siLCJnZW4iLCJuZXh0RmlsZUJhdGNoIiwicHJvY2Vzc0ZpbGVDb250ZW50IiwiY29udGVudCIsInVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nIiwicHJlcGFyZVByb2dyZXNzaXZlUmVwbGF5IiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIlBST0NFU1NfRklMRV9EQVRBIiwibG9hZEZpbGVTdGVwU3VjY2VzcyIsInBhcnNlUHJvZ3Jlc3MiLCJwcmV2UHJvZ3Jlc3MiLCJuZXh0RmlsZUJhdGNoVXBkYXRlciIsIl9yZWY0OCIsIl9hY2N1bXVsYXRlZCRkYXRhIiwiX3JlZjQ4JHBheWxvYWQiLCJhY2N1bXVsYXRlZCIsImVuZHNXaXRoIiwic2tpcEFycm93Q29tcGFjdCIsIlVOV1JBUF9UQVNLIiwiX3JlZjQ5IiwiY2xlYXJTdGFnZWRMb2FkZWRGaWxlc1VwZGF0ZXIiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjUwIiwiZXJyb3JMb2FkSWQiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJfcmVmNTEiLCJkYXRhSWRzIiwiZmlsdGVyRGF0YXNldENQVSIsInNldE1hcEluZm9VcGRhdGVyIiwib3B0aW9uYWxNYXBUZXh0IiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJmaW5kRGVmYXVsdExheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJmaW5kRmllbGRzVG9TaG93IiwibWVyZ2VkIiwiX3JlZjUzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTciLCJfc3RhdGUkZmlsdGVycyIsImFuaW1hdGFibGVMYXllcnMiLCJsYXllckRvbWFpbnMiLCJtZXJnZWREb21haW4iLCJtZXJnZVRpbWVEb21haW5zIiwiZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyIiwibWVyZ2VkVGltZVN0ZXBzIiwic29ydCIsIkJBU0VfU1BFRUQiLCJGUFMiLCJzeW5jZWRGaWx0ZXIiLCJuZXdBbmltYXRpb25Eb21haW4iLCJpc0luUmFuZ2UiLCJzZXRFZGl0b3JNb2RlVXBkYXRlciIsIl9yZWY1NCIsInNrZXRjaGVzRW5hYmxlZCIsImVuYWJsZURyYXdPbk1hcFNrZXRjaGVzIiwiRFJBV19QT0lOVCIsIkRSQVdfTElORVNUUklORyIsInNldEZlYXR1cmVzVXBkYXRlciIsIl9yZWY1NSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aTIiLCJfcmVmNTUkZmVhdHVyZXMiLCJsYXN0RmVhdHVyZSIsInByb3BlcnRpZXMiLCJpc0Nsb3NlZCIsInNoYXBlIiwiRURJVCIsImZlYXR1cmUiLCJiYm94IiwiZmVhdHVyZVZhbHVlIiwiZmlsdGVySWR4IiwiZmlsIiwiZmluZEVkaXRvckZlYXR1cmUiLCJfc3RhdGUkZWRpdG9yJHNlbGVjdGUiLCJmcm9tRWRpdG9yIiwiaXRlbSIsInNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzVXBkYXRlciIsIl9yZWY1NiIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZTIiLCJuZXh0RmVhdHVyZSIsIm1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzIiwibmV4dEVkaXRvciIsInNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNTciLCJzZWxlY3Rpb25Db250ZXh0IiwiZGVsZXRlRmVhdHVyZVVwZGF0ZXIiLCJfcmVmNTgiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyIiwibm9uZUZpbHRlckZlYXR1cmUiLCJfZmlsdGVyJGxheWVySWQzIiwiaXNMYXllckluY2x1ZGVkIiwic2tldGNoRmVhdHVyZSIsInRvU2tldGNoRmVhdHVyZSIsInN0YXRlV2l0aG91dEZpbHRlciIsImdlbmVyYXRlUG9seWdvbkZpbHRlciIsInNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyIiwidmlzaWJsZUxheWVySWRzIiwiYWxsTGF5ZXJJZHMiLCJzb3J0VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjU5IiwiY29sdW1uIiwiY3VycmVudE1vZGUiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwic29ydGVkIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjYwIiwicGluVGFibGVDb2x1bW5zIiwidG9nZ2xlVGFibGVDb2x1bW5IaWRkZW5VcGRhdGVyIiwiX3JlZjYxIiwidG9nZ2xlSGlkZGVuVGFibGVDb2x1bW4iLCJzaG93QWxsVGFibGVDb2x1bW5zVXBkYXRlciIsIl9yZWY2MiIsInNob3dBbGxUYWJsZUNvbHVtbnMiLCJjb3B5VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjYzIiwidGV4dCIsImRhdGFDb250YWluZXIiLCJwYXJzZUZpZWxkVmFsdWUiLCJ2YWx1ZUF0Iiwiam9pbiIsImNvcHkiLCJzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlciIsIl9yZWY2NCIsImZvcm1hdHMiLCJkaXNwbGF5Rm9ybWF0IiwidGV4dExhYmVsTGF5ZXJJbmRleGVzIiwiX2xheWVyJGNvbmZpZzIiLCJjb2xvckZpZWxkIiwidXBkYXRlZENvbG9yRmllbGQiLCJ1cGRhdGVUZXh0TGFiZWwiLCJnZXRNYXBwZWRWYWx1ZSIsImZpbHRlclByb3BzIiwibWFwcGVkVmFsdWUiLCJ5aWVsZEZvclBhaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX3g0IiwiX3JlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl9jYWxsZWU0IiwiX3JlZjY1IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiY29sbGVjdENvbHVtblZhbHVlcyIsImdldENvbHVtblN0YXRpc3RpY3MiLCJMT0FEX0NPTFVNTl9TVEFUU19UQVNLIiwibG9hZENvbHVtblN0YXRzVXBkYXRlciIsIl9yZWY2NiIsImZpZWxkTmFtZXNUb0xvYWQiLCJmaWVsZHNUb0xvYWQiLCJpc0xvYWRpbmdTdGF0cyIsIl9yZWY2NyIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MiLCJsb2FkQ29sdW1uU3RhdHNFcnJvciIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyIiwiX3JlZjY4IiwibmV3RmlsdGVyUHJvcHMiLCJjb2x1bW5TdGF0cyIsImxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlciIsIl9yZWY2OSIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwiY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIiLCJfYWN0aW9uIiwicHJvY2Vzc0dlb2pzb24iLCJlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24iLCJjbGVhcmVkU3RhdGUiLCJsYWJlbElkIiwiZmxvb3IiLCJyYW5kb20iLCJleHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlciIsIl9yZWY3MCIsImlzVGlsZWRFeHRyYWN0IiwiaXNWZWN0b3JUaWxlRXh0cmFjdExheWVyIiwiaXNSYXN0ZXJUaWxlRXh0cmFjdExheWVyIiwiZXh0cmFjdFJvd3NJbnNpZGVGZWF0dXJlIiwicm93Q291bnQiLCJkb3dubG9hZCIsImRvd25sb2FkQ2xpcCIsInBuZyIsImpzb24iLCJzdWNjZXNzTm90aWZpY2F0aW9uIiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNzEiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjcyIiwibGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlciIsIl9sYXllciRmaWx0ZXJlZEl0ZW1DbyIsImV2ZW50IiwiZGVja2dsTGF5ZXJJZCIsImNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJ3bXNGZWF0dXJlSW5mb1VwZGF0ZXIiLCJmZWF0dXJlSW5mbyIsImNvbnNvbGUiLCJvYmplY3QiLCJ3bXNGZWF0dXJlSW5mbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbzIiLCJfYWN0aW9uJGVuYWJsZSIsImludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyIiwibmV3RmlsdGVyRG9tYWluIiwiYWRqdXN0VGltZUZpbHRlckludGVydmFsIiwibmV3RmlsdGVyVmFsdWUiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsIl9yZWY3MyIsInNldExvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJfcmVmNzQiLCJfc3RhdGUkbG9hZGluZ1Byb2dyZXMiLCJfc3RhdGUkbG9hZGluZ1Byb2Nlc3MiLCJ0aW1lbGluZVZhbHVlIiwiZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIiLCJzbmFwVG9NYXJrcyIsIl9maWx0ZXIkc3luY1RpbWVsaW5lTSIsIm5ld01vZGUiLCJzdGFydCIsImludGVydmFsSW5kZXgiLCJjdXJyZW50SW5kZXgiLCJtZXRhIiwidGFyZ2V0VGltZUludGVydmFsIiwibmV3SW5kZXgiLCJUSU1FX0lOVEVSVkFMU19PUkRFUkVEIiwibGF5ZXJUaW1lSW50ZXJ2YWwiLCJMYXllclRvRmlsdGVyVGltZUludGVydmFsIiwiZ2V0RGVmYXVsdFRpbWVGb3JtYXQiLCJ1cGRhdGVkUGxvdFR5cGUiLCJwbG90QmFzZUluZGV4QnlEYXRhSWQiLCJ1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUiLCJkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfdmFsdWUkY29uZmlnIiwiX3ZhbHVlJGNvbmZpZzIiLCJyZXBsYWNlZCIsImlzT2JqZWN0IiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmNzYiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJkZWxldGVPcmlnaW5hbERhdGFzZXQiLCJjb21wb3NlXyIsImFwcGx5XyIsInJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUiLCJpZl8iLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSIsIl9uZXh0U3RhdGUkbGF5ZXJUb0JlTSIsInNlcmlhbGl6ZWRTdGF0ZSIsInNlcmlhbGl6ZVZpc1N0YXRlIiwicHJlc2VydmVMYXllck9yZGVyIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJfc2VyaWFsaXplZFN0YXRlJHNwbGkiLCJjb21iaW5lU3BsaXRNYXBzQnlJbmRleCIsInByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZCIsInByZXZpb3VzT3JkZXIiLCJwYXJrZWQiLCJwYXJrZWRJZHMiLCJrbm93biIsIm9yZGVyZWQiLCJfcmVmNzciLCJhY2N1U3RhdGUiLCJfcmVmNzgiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlcjIiLCJtZXJnZXJPcHRpb25zIiwicGFya2VkRWxzZXdoZXJlIiwicmVwbGFjZWRJdGVtIiwicmVwbGFjZVByb3BWYWx1ZUluU3RhdGUiLCJfcmVmNzkiLCJjaGlsZERhdGFJZCIsIkRBVEFTRVRfT1BfQUREX09QVElPTlMiLCJhcHBseURlcml2ZWRQcm90b0RhdGFzZXQiLCJyZXN1bHRJZCIsInJ1bkdyb3VwQnlVcGRhdGVyIiwiX2V4ZWN1dGVHcm91cEJ5IiwiZXhlY3V0ZUdyb3VwQnkiLCJydW5Kb2luVXBkYXRlciIsIl9leGVjdXRlSm9pbiIsImV4ZWN1dGVKb2luIiwicnVuU3BhdGlhbEpvaW5VcGRhdGVyIiwiX2V4ZWN1dGVTcGF0aWFsSm9pbiIsImV4ZWN1dGVTcGF0aWFsSm9pbiIsInJ1blN1aXRhYmlsaXR5VXBkYXRlciIsIl9leGVjdXRlU3VpdGFiaWxpdHkiLCJleGVjdXRlU3VpdGFiaWxpdHkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzLXN0YXRlLXVwZGF0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7YmJveH0gZnJvbSAnQHR1cmYvYmJveCc7XG5pbXBvcnQgdHlwZSB7QWxsR2VvSlNPTn0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgY29weSBmcm9tICdjb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2Nsb25lRGVlcCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2dldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9pc0VxdWFsJztcbmltcG9ydCBwaWNrIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3BpY2snO1xuaW1wb3J0IHVuaXEgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvdW5pcSc7XG5pbXBvcnQgeG9yIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3hvcic7XG5pbXBvcnQgVGFzaywge2Rpc2FibGVTdGFja0NhcHR1cmluZywgd2l0aFRhc2t9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuaW1wb3J0IHR5cGUge1Rhc2tEZXNjcmlwdG9yfSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIFRhc2tzXG5pbXBvcnQge1xuICBERUxBWV9UQVNLLFxuICBBQ1RJT05fVEFTSyxcbiAgRVhQQU5EX1pJUF9UQVNLLFxuICBMT0FEX0ZJTEVfVEFTSyxcbiAgUFJPQ0VTU19GSUxFX0RBVEEsXG4gIFVOV1JBUF9UQVNLXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gQWN0aW9uc1xuaW1wb3J0IHtcbiAgYWRkTm90aWZpY2F0aW9uLFxuICBBY3Rpb25UeXBlcyxcbiAgQ3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkLFxuICBNYXBTdGF0ZUFjdGlvbnMsXG4gIFJlY2VpdmVNYXBDb25maWdQYXlsb2FkLFxuICBWaXNTdGF0ZUFjdGlvbnMsXG4gIGFwcGx5TGF5ZXJDb25maWcsXG4gIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzLFxuICBsYXllckNvbmZpZ0NoYW5nZSxcbiAgbGF5ZXJUeXBlQ2hhbmdlLFxuICBsYXllclZpc0NvbmZpZ0NoYW5nZSxcbiAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlLFxuICBsb2FkRmlsZVN0ZXBTdWNjZXNzLFxuICBsb2FkRmlsZXNFcnIsXG4gIGxvYWRGaWxlc1N1Y2Nlc3MsXG4gIGxvYWROZXh0RmlsZSxcbiAgZXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3MsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIHNldEZpbHRlcixcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBmaXRCb3VuZHMgYXMgZml0TWFwQm91bmRzLFxuICB0b2dnbGVMYXllckZvck1hcCxcbiAgYXBwbHlGaWx0ZXJDb25maWcsXG4gIFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkLFxuICBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzLFxuICBsb2FkQ29sdW1uU3RhdHNFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRTdWNjZXNzLFxuICByZWZyZXNoRGF0YXNldEVycm9yLFxuICByZWZyZXNoRGF0YXNldFByb2dyZXNzLFxuICBzZXRMb2FkaW5nUHJvZ3Jlc3Ncbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuLy8gVXRpbHNcbmltcG9ydCB7XG4gIEZJTFRFUl9VUERBVEVSX1BST1BTLFxuICBub3JtYWxpemVDYW1lcmFCb29rbWFya3MsXG4gIG5vcm1hbGl6ZUNhbWVyYVRvdXIsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICBhcnJheUluc2VydCxcbiAgY29tYmluZVNwbGl0TWFwc0J5SW5kZXgsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbixcbiAgYXJlRmlsdGVyRmllbGRUeXBlc0NvbXBhdGlibGUsXG4gIGRpc2FibGVHcHVJZkludmVydGVkLFxuICBmaWx0ZXJUeXBlVXNlc0dwdSxcbiAgZ2V0UGxvdEJhc2VJbmRleEJ5RGF0YUlkLFxuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgc3VjY2Vzc05vdGlmaWNhdGlvbixcbiAgZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uLFxuICBleHRyYWN0Um93c0luc2lkZUZlYXR1cmUsXG4gIGlzUmFzdGVyVGlsZUV4dHJhY3RMYXllcixcbiAgaXNWZWN0b3JUaWxlRXh0cmFjdExheWVyLFxuICBtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyxcbiAgdG9Ta2V0Y2hGZWF0dXJlLFxuICBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSxcbiAgZmlsdGVyRGF0YXNldENQVSxcbiAgZ2VuZXJhdGVQb2x5Z29uRmlsdGVyLFxuICBnZXREZWZhdWx0RmlsdGVyLFxuICBnZXRGaWx0ZXJJZEluRmVhdHVyZSxcbiAgZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyLFxuICBpc0luUmFuZ2UsXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1JnYkNvbG9yLFxuICBwYXJzZUZpZWxkVmFsdWUsXG4gIHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyxcbiAgc2V0LFxuICB1cGRhdGVGaWx0ZXJQbG90LFxuICByZW1vdmVGaWx0ZXJQbG90LFxuICBpc0xheWVyQW5pbWF0YWJsZSxcbiAgaXNTaWRlRmlsdGVyLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZyxcbiAgdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHNcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCB0b0FycmF5LCBhcnJheU1vdmV9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbi8vIE1lcmdlcnNcbmltcG9ydCB7XG4gIEFMTF9GSUVMRF9UWVBFUyxcbiAgQU5JTUFUSU9OX1dJTkRPVyxcbiAgQkFTRV9TUEVFRCxcbiAgQ09NUEFSRV9UWVBFUyxcbiAgREVGQVVMVF9URVhUX0xBQkVMLFxuICBFRElUT1JfTU9ERVMsXG4gIEZJTFRFUl9UWVBFUyxcbiAgRklMVEVSX1ZJRVdfVFlQRVMsXG4gIExBWUVSX1RZUEVTLFxuICBGUFMsXG4gIExJR0hUX0FORF9TSEFET1dfRUZGRUNULFxuICBESVNUQU5DRV9GT0dfVFlQRSxcbiAgU1VSRkFDRV9GT0dfVFlQRSxcbiAgTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG4gIFBMT1RfVFlQRVMsXG4gIFNPUlRfT1JERVIsXG4gIFNZTkNfVElNRUxJTkVfTU9ERVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBTQ0FMRV9UWVBFUyxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRSxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1JVTEVSX0xFTkdUSF9NRVRFUlMsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1ZFUlRJQ0FMX1BPU0lUSU9OLFxuICBBTk5PVEFUSU9OX0FOR0xFX0JZX1BMQUNFTUVOVCxcbiAgdGV4dFBsYWNlbWVudEZyb21BbmdsZSxcbiAgQW5ub3RhdGlvbktpbmQsXG4gIERhdGFzZXRUeXBlLFxuICBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMsXG4gIGdldFJlbW90ZVNvdXJjZUZvcm1hdCxcbiAgR0VPQ09ERVJfREFUQVNFVF9OQU1FLFxuICBHRU9DT0RFUl9JQ09OX0NPTE9SLFxuICBHRU9DT0RFUl9MQVlFUl9JRFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUyxcbiAgaXNQb2ludENvdW50TGFiZWwsXG4gIExBWUVSX0lEX0xFTkdUSCxcbiAgTGF5ZXIsXG4gIExheWVyQ2xhc3Nlc1xufSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBhcHBseV8sXG4gIGNvbXBvc2VfLFxuICBmaWx0ZXJPdXRCeUlkLFxuICBpZl8sXG4gIG1lcmdlXyxcbiAgcGF5bG9hZF8sXG4gIHBpY2tfLFxuICByZW1vdmVFbGVtZW50QXRJbmRleCxcbiAgc3dhcF9cbn0gZnJvbSAnLi9jb21wb3Nlci1oZWxwZXJzJztcbmltcG9ydCB7aXNWYWxpZE1lcmdlciwgbWVyZ2VTdGF0ZUZyb21NZXJnZXJzfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7XG4gIFZJU19TVEFURV9NRVJHRVJTLFxuICBjcmVhdGVMYXllckZyb21Db25maWcsXG4gIGlzU2F2ZWRMYXllckNvbmZpZ1YxLFxuICBwYXJzZUxheWVyQ29uZmlnLFxuICBzZXJpYWxpemVGaWx0ZXIsXG4gIHNlcmlhbGl6ZUxheWVyLFxuICBzZXJpYWxpemVWaXNTdGF0ZSxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge01lcmdlciwgUG9zdE1lcmdlclBheWxvYWQsIFZpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtcbiAgZ2V0RmlsZXNUb1BhcnNlLFxuICBpc1ppcEZpbGVOYW1lLFxuICBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQsXG4gIHByb2Nlc3NHZW9qc29uLFxuICB0eXBlIEZpbGVDYWNoZUl0ZW0sXG4gIFppcEFyY2hpdmVFeHBhbnNpb25cbn0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcblxuaW1wb3J0IHtcbiAgRmlsdGVyLFxuICBGZWF0dXJlLFxuICBJbnRlcmFjdGlvbkNvbmZpZyxcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBGaWx0ZXJBbmltYXRpb25Db25maWcsXG4gIEVkaXRvcixcbiAgRmllbGQsXG4gIExheWVyVmlzQ29uZmlnLFxuICBSYW5nZUZpbHRlcixcbiAgVGltZVJhbmdlRmlsdGVyLFxuICBBbm5vdGF0aW9uLFxuICBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsLFxuICBQcm90b0RhdGFzZXQsXG4gIENoYXJ0Q29uZmlnLFxuICBMYXllckNoYXJ0Q29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtMb2FkZXJ9IGZyb20gJ0Bsb2FkZXJzLmdsL2xvYWRlci11dGlscyc7XG5pbXBvcnQge2FkZE1ldGVyc1RvTG5nTGF0fSBmcm9tICdAbWF0aC5nbC93ZWItbWVyY2F0b3InO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgS2VwbGVyVGFibGUsXG4gIEZpbHRlclByb3BzLFxuICBidWlsZENoYW5nZUNvbHVtblR5cGVEYXRhLFxuICBmb3JtYXRDb2x1bW5UeXBlQ29udmVyc2lvbkVycm9yLFxuICBhc3NpZ25HcHVDaGFubmVsLFxuICBidWlsZERlbGV0ZUNvbHVtbkRhdGEsXG4gIGJ1aWxkUmVuYW1lQ29sdW1uRGF0YSxcbiAgY2FuTXV0YXRlRGF0YXNldFNjaGVtYSxcbiAgY29weVRhYmxlQW5kVXBkYXRlLFxuICBjcmVhdGVOZXdEYXRhRW50cnksXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc2hvd0FsbFRhYmxlQ29sdW1ucyxcbiAgdG9nZ2xlSGlkZGVuVGFibGVDb2x1bW4sXG4gIHNldEZpbHRlckdwdU1vZGUsXG4gIHNvcnREYXRhc2V0QnlDb2x1bW5cbn0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge3JlbWFwQ2hhcnRzRm9yRGF0YXNldH0gZnJvbSAnLi9jb2x1bW4tZWRpdC1yZWNvbmNpbGUnO1xuaW1wb3J0IHtcbiAgZmluZEZpZWxkc1RvU2hvdyxcbiAgZ2V0Wm9vbU9wYWNpdHlBbm5vdGF0aW9uVGFyZ2V0SWQsXG4gIHJlbW92ZUxheWVyRnJvbVpvb21PcGFjaXR5XG59IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgY2FsY3VsYXRlTGF5ZXJEYXRhLFxuICBmaW5kRGVmYXVsdExheWVyLFxuICBnZXRMYXllck9yZGVyRnJvbUxheWVycyxcbiAgbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzLFxuICBnZXROZXdMYXllckdyb3VwLFxuICBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIsXG4gIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcixcbiAgZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyLFxuICBmaW5kUGFyZW50R3JvdXBGb3JMYXllcixcbiAgZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkLFxuICB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyLFxuICBnZXRGbGF0TGF5ZXJPcmRlcixcbiAgcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXJcbn0gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2dldFByb3BWYWx1ZVRvTWVyZ2VyLCBoYXNQcm9wc1RvTWVyZ2V9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHttZXJnZURhdGFzZXRzQnlPcmRlcn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7XG4gIGFkZEdyb3VwQnlVcGRhdGVyLFxuICBhZGRKb2luVXBkYXRlcixcbiAgYWRkU3BhdGlhbEpvaW5VcGRhdGVyLFxuICBhZGRTdWl0YWJpbGl0eVVwZGF0ZXIsXG4gIGV4ZWN1dGVHcm91cEJ5LFxuICBleGVjdXRlSm9pbixcbiAgZXhlY3V0ZVNwYXRpYWxKb2luLFxuICBleGVjdXRlU3VpdGFiaWxpdHksXG4gIHJlbW92ZURhdGFzZXRPcFVwZGF0ZXIsXG4gIHJlbW92ZU9wc0ZvckRhdGFzZXRzLFxuICBzZXRHcm91cEJ5Q29uZmlnVXBkYXRlcixcbiAgc2V0Sm9pbkNvbmZpZ1VwZGF0ZXIsXG4gIHNldFNwYXRpYWxKb2luQ29uZmlnVXBkYXRlcixcbiAgc2V0U3VpdGFiaWxpdHlDb25maWdVcGRhdGVyXG59IGZyb20gJy4vZGF0YXNldC1vcHMtdXBkYXRlcnMnO1xuaW1wb3J0IHtcbiAgZml4RWZmZWN0T3JkZXIsXG4gIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzLFxuICBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLFxuICBtZXJnZVRpbWVEb21haW5zLFxuICBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93LFxuICB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUsXG4gIG1lcmdlUGxvdEdyb3VwQnksXG4gIGdldERlZmF1bHRUaW1lRm9ybWF0LFxuICBMYXllclRvRmlsdGVyVGltZUludGVydmFsLFxuICBUSU1FX0lOVEVSVkFMU19PUkRFUkVELFxuICBtZXJnZUZpbHRlckRvbWFpbixcbiAgaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlLFxuICBjb2xsZWN0Q29sdW1uVmFsdWVzLFxuICBnZXRDb2x1bW5TdGF0aXN0aWNzLFxuICBvcHRpb25hbE1hcFRleHRcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7UGF5bG9hZEFjdGlvbn0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcblxuLy8gZGlzYWJsZSBzdGFjayBjYXB0dXJlIGZvciB3aXRoVGFzayBjYWxscyB0aGF0IGhhcHBlbiBvdXRzaWRlIHN0cmljdCByZWR1Y2VyIGNvbnRleHRcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIHRpbWV6b25lOiBudWxsLFxuICAgICAgY29tcGFyZU1vZGU6IGZhbHNlLFxuICAgICAgY29tcGFyZVR5cGU6IENPTVBBUkVfVFlQRVMuQUJTT0xVVEVcbiAgICB9XG4gIH0sXG4gIGxlZ2VuZDoge1xuICAgIGlkOiAnbGVnZW5kJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5sZWdlbmQnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgaGlkZUludmlzaWJsZUxheWVyczogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGdlb2NvZGVyOiB7XG4gICAgaWQ6ICdnZW9jb2RlcicsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZ2VvY29kZXInLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsLFxuICAgIGNvbmZpZzoge1xuICAgICAgbGltaXRTZWFyY2g6IGZhbHNlLFxuICAgICAgY29sb3I6IEdFT0NPREVSX0lDT05fQ09MT1JcbiAgICB9XG4gIH0sXG4gIGJydXNoOiB7XG4gICAgaWQ6ICdicnVzaCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuYnJ1c2gnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgLy8gc2l6ZSBpcyBpbiBrbVxuICAgICAgc2l6ZTogMi41XG4gICAgfVxuICB9LFxuICBjb29yZGluYXRlOiB7XG4gICAgaWQ6ICdjb29yZGluYXRlJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5jb29yZGluYXRlJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbFxuICB9LFxuICBhbm5vdGF0aW9uOiB7XG4gICAgaWQ6ICdhbm5vdGF0aW9uJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5hbm5vdGF0aW9uJyxcbiAgICBlbmFibGVkOiBmYWxzZVxuICB9LFxuICB6b29tT3BhY2l0eToge1xuICAgIGlkOiAnem9vbU9wYWNpdHknLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmZhZGVPblpvb20nLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgY29udHJvbGxlcnM6IFtdXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTklNQVRJT05fQ09ORklHOiBBbmltYXRpb25Db25maWcgPSB7XG4gIGRvbWFpbjogbnVsbCxcbiAgY3VycmVudFRpbWU6IG51bGwsXG4gIHNwZWVkOiAxLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIHRpbWVTdGVwczogbnVsbCxcbiAgdGltZUZvcm1hdDogbnVsbCxcbiAgdGltZXpvbmU6IG51bGwsXG4gIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsLFxuICBoaWRlQ29udHJvbDogZmFsc2UsXG4gIGR1cmF0aW9uOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUT1I6IEVkaXRvciA9IHtcbiAgbW9kZTogRURJVE9SX01PREVTLkRSQVdfUE9MWUdPTixcbiAgZmVhdHVyZXM6IFtdLFxuICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gIHZpc2libGU6IHRydWVcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVklTX1NUQVRFOiBWaXNTdGF0ZSA9IHtcbiAgLy8gbWFwIGluZm9cbiAgbWFwSW5mbzoge1xuICAgIHRpdGxlOiB1bmRlZmluZWQsXG4gICAgZGVzY3JpcHRpb246IHVuZGVmaW5lZFxuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG4gIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcbiAgZ3JvdXBCeXM6IFtdLFxuICBqb2luczogW10sXG4gIHN1aXRhYmlsaXRpZXM6IFtdLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICAvLyBjaGFydHMgKGVuYWJsZWQgYnkgZGVmYXVsdDsgZ2F0ZWQgYnkgZW5hYmxlQ2hhcnRzUGFuZWwpXG4gIGNoYXJ0czogW10sXG4gIGNoYXJ0c1RvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGNhbWVyYSBib29rbWFya3NcbiAgY2FtZXJhQm9va21hcmtzOiBbXSxcbiAgY2FtZXJhVG91cjogbnVsbCxcblxuICAvLyBhbm5vdGF0aW9uc1xuICBhbm5vdGF0aW9uczogW10sXG4gIGFubm90YXRpb25zVG9CZU1lcmdlZDogW10sXG4gIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBudWxsLFxuICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2UsXG5cbiAgaW50ZXJhY3Rpb25Db25maWc6IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiB7fSxcblxuICBsYXllckJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgb3ZlcmxheUJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgaG92ZXJJbmZvOiB1bmRlZmluZWQsXG4gIGNsaWNrZWQ6IHVuZGVmaW5lZCxcbiAgbW91c2VQb3M6IHt9LFxuICBtYXhEZWZhdWx0VG9vbHRpcHM6IE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuXG4gIC8vIHRoaXMgaXMgdXNlZCB3aGVuIHVzZXIgc3BsaXQgbWFwc1xuICBzcGxpdE1hcHM6IFtcbiAgICAvLyB0aGlzIHdpbGwgY29udGFpbiBhIGxpc3Qgb2Ygb2JqZWN0cyB0b1xuICAgIC8vIGRlc2NyaWJlIHRoZSBzdGF0ZSBvZiBsYXllciBhdmFpbGFiaWxpdHkgYW5kIHZpc2liaWxpdHkgZm9yIGVhY2ggbWFwXG4gICAgLy8gW1xuICAgIC8vICAge1xuICAgIC8vICAgICAgbGF5ZXJzOiB7bGF5ZXJfaWQ6IHRydWUgfCBmYWxzZX1cbiAgICAvLyAgIH1cbiAgICAvLyBdXG4gIF0sXG4gIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFtdLFxuICBpc01lcmdpbmdEYXRhc2V0czoge30sXG4gIC8vIGRlZmF1bHRzIGxheWVyIGNsYXNzZXNcbiAgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXMsXG5cbiAgLy8gZGVmYXVsdCBhbmltYXRpb25cbiAgLy8gdGltZSBpbiB1bml4IHRpbWVzdGFtcCAobWlsbGlzZWNvbmRzKSAodGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBVbml4IEVwb2NoKVxuICBhbmltYXRpb25Db25maWc6IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyxcblxuICBlZGl0b3I6IERFRkFVTFRfRURJVE9SLFxuXG4gIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gIHN0YWdlZFRvQWRkOiBudWxsLFxuICAvLyBmb3IgbG9hZGluZyBkYXRhc2V0c1xuICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IDAsXG4gIGxvYWRpbmdQcm9ncmVzczoge30sXG4gIGxvYWRpbmdQcm9jZXNzaW5nOiB7fSxcblxuICBsb2FkZXJzOiBbXSxcbiAgbG9hZE9wdGlvbnM6IHt9LFxuXG4gIC8vIHZpc1N0YXRlTWVyZ2Vyc1xuICBtZXJnZXJzOiBWSVNfU1RBVEVfTUVSR0VSUyxcblxuICAvLyBrZXBsZXIgc2NoZW1hc1xuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hXG59O1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfRklUX0JPVU5EUyA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+IGNiKCksXG5cbiAgJ0FDVElPTl9UQVNLX0ZJVF9CT1VORFMnXG4pO1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTiA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+IGNiKCksXG5cbiAgJ0FDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04nXG4pO1xuXG50eXBlIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGUgPSB7XG4gIGxheWVyczogTGF5ZXJbXTtcbiAgbGF5ZXJEYXRhOiBhbnlbXTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIHdpdGggdXBkYXRlZCBsYXllciBhbmQgbGF5ZXJEYXRhXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhPFMgZXh0ZW5kcyBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlPihcbiAgc3RhdGU6IFMsXG4gIHtsYXllckRhdGEsIGxheWVyLCBpZHh9OiB7bGF5ZXJEYXRhPzogYW55OyBsYXllcjogTGF5ZXI7IGlkeDogbnVtYmVyfVxuKTogUyB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKChseXIsIGkpID0+IChpID09PSBpZHggPyBsYXllciA6IGx5cikpLFxuICAgIGxheWVyRGF0YTogbGF5ZXJEYXRhXG4gICAgICA/IHN0YXRlLmxheWVyRGF0YS5tYXAoKGQsIGkpID0+IChpID09PSBpZHggPyBsYXllckRhdGEgOiBkKSlcbiAgICAgIDogc3RhdGUubGF5ZXJEYXRhXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGxheWVyOiBMYXllcik6IFMge1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICAgID8gYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgICAgICA6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgIH07XG4gIH1cblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBvYmplY3RzIChvciBhcnJheXMpIGFuZCByZXR1cm5zIGEgbmV3IG9iamVjdCB3aXRoIG9ubHkgdGhlXG4gKiBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBjaGFuZ2VkIGJldHdlZW4gdGhlIHR3byBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBwaWNrQ2hhbmdlZFByb3BzPFQ+KHByZXY6IFQsIG5leHQ6IFQpOiBQYXJ0aWFsPFQ+IHtcbiAgY29uc3QgY2hhbmdlZFByb3BzOiBQYXJ0aWFsPFQ+ID0ge307XG4gIGNvbnN0IHBpY2tQcm9wc09mID0gb2JqID0+IHtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VkUHJvcHMsIGtleSkgJiZcbiAgICAgICAgIWlzRXF1YWwocHJldltrZXldLCBuZXh0W2tleV0pXG4gICAgICApIHtcbiAgICAgICAgY2hhbmdlZFByb3BzW2tleV0gPSBuZXh0W2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHBpY2tQcm9wc09mKHByZXYpO1xuICBwaWNrUHJvcHNPZihuZXh0KTtcbiAgcmV0dXJuIGNoYW5nZWRQcm9wcztcbn1cblxuY29uc3QgVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUyA9IFsnZmllbGQnLCAnc2NhbGUnLCAnZG9tYWluJywgJ2FnZ3JlZ2F0aW9uJ107XG5cbi8qKlxuICogQXBwbHkgbGF5ZXIgY29uZmlnXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5LCBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5TGF5ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcklkLCBuZXdMYXllckNvbmZpZywgbGF5ZXJJbmRleH0gPSBhY3Rpb247XG4gIC8vIFNhdmVkIGNvbmZpZ3MgaGF2ZSBhIHZpc3VhbENoYW5uZWxzIHNpYmxpbmc7IHBhcnNlZC9lZGl0b3IgSlNPTiBmb2xkcyB0aG9zZVxuICAvLyBmaWVsZHMgaW50byBjb25maWcuIFJlLXBhcnNpbmcgdGhlIGxhdHRlciBkcm9wcyBjb2xvckZpZWxkIGFuZCByZXNldHMgdGhlIHNjYWxlLlxuICBjb25zdCBzYXZlZExheWVyQ29uZmlnID0gaXNTYXZlZExheWVyQ29uZmlnVjEobmV3TGF5ZXJDb25maWcpO1xuICBjb25zdCBuZXdQYXJzZWRMYXllciA9IHNhdmVkTGF5ZXJDb25maWdcbiAgICA/IHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBuZXdMYXllckNvbmZpZylcbiAgICA6IG5ld0xheWVyQ29uZmlnO1xuICBjb25zdCBvbGRMYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gIGlmICghb2xkTGF5ZXIgfHwgIW5ld1BhcnNlZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllckluZGV4ICE9PSBudWxsICYmIGxheWVySW5kZXggIT09IHVuZGVmaW5lZCAmJiBzdGF0ZS5sYXllcnNbbGF5ZXJJbmRleF0gIT09IG9sZExheWVyKSB7XG4gICAgLy8gbGF5ZXJJbmRleCBpcyBwcm92aWRlZCwgYnV0IGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIG9sZExheWVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tuZXdQYXJzZWRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgdmFsaWQgYW5kIGNvbnZlcnQgaXQgdG8gTGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbmV3UGFyc2VkTGF5ZXIsIHN0YXRlLmxheWVyQ2xhc3Nlcywge1xuICAgIGtlZXBVbmxhYmVsZWRBZ2dyZWdhdGlvblRleHRMYWJlbDogc2F2ZWRMYXllckNvbmZpZ1xuICB9KTtcbiAgaWYgKCFuZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAobmV3TGF5ZXIudHlwZSAmJiBuZXdMYXllci50eXBlICE9PSBvbGRMYXllci50eXBlKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgICBpZiAob2xkTGF5ZXJJbmRleCA+PSAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKG5leHRTdGF0ZSwgbGF5ZXJUeXBlQ2hhbmdlKG9sZExheWVyLCBuZXdMYXllci50eXBlKSk7XG4gICAgICAvLyBsYXllclR5cGVDaGFuZ2VVcGRhdGVyIGNoYW5nZXMgdGhlIGlkIG9mIHRoZSBsYXllciwgc28gd2UgbmVlZCB0byBvYnRhaW4gdGhlIG5ldyBpZFxuICAgICAgLy8gYnV0IGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXllciB3YXMgbm90IHJlbW92ZWRcbiAgICAgIGlmIChuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBuZXdMYXllcklkID0gbmV4dFN0YXRlLmxheWVyc1tvbGRMYXllckluZGV4XS5pZDtcbiAgICAgICAgbmV4dFN0YXRlID0gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGFwcGx5TGF5ZXJDb25maWcobmV3TGF5ZXJJZCwgey4uLm5ld0xheWVyQ29uZmlnLCBpZDogbmV3TGF5ZXJJZH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICAvLyBzZXJpYWxpemVMYXllcigpIG1pZ2h0IHJldHVybiBudWxsIGlmIHRoZSBvbGQgbGF5ZXIgaXMgbm90IHZhbGlkLFxuICAvLyB3ZSBzaG91bGQgc3RpbGwgYXBwbHkgdGhlIGNoYW5nZXMgaW4gdGhhdCBjYXNlXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9sZExheWVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0xheWVyID0gc2VyaWFsaXplTGF5ZXIobmV3TGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghaXNFcXVhbChzZXJpYWxpemVkT2xkTGF5ZXIsIHNlcmlhbGl6ZWROZXdMYXllcikpIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkTGF5ZXIuY29uZmlnLCBzZXJpYWxpemVkTmV3TGF5ZXIuY29uZmlnKTtcblxuICAgIGlmICgndmlzQ29uZmlnJyBpbiBjaGFuZ2VkKSB7XG4gICAgICBpZiAoY2hhbmdlZC52aXNDb25maWcpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc0NvbmZpZ0NoYW5nZShvbGRMYXllciwgY2hhbmdlZC52aXNDb25maWcpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWxldGUgY2hhbmdlZC52aXNDb25maWc7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMob2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbE5hbWUgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxOYW1lXTtcbiAgICAgIGNvbnN0IGNoYW5uZWxQcm9wTmFtZXMgPSBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTLm1hcChwcm9wID0+IGNoYW5uZWxbcHJvcF0pO1xuICAgICAgaWYgKGNoYW5uZWxQcm9wTmFtZXMuc29tZShwcm9wID0+IHByb3AgaW4gY2hhbmdlZCkpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICAgICAgICAgICAgb2xkTGF5ZXIsXG4gICAgICAgICAgICBwaWNrKG5ld0xheWVyLmNvbmZpZywgY2hhbm5lbFByb3BOYW1lcyksXG4gICAgICAgICAgICBjaGFubmVsTmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGNoYW5uZWxQcm9wTmFtZXMpIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlZFtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICBsYXllckNvbmZpZ0NoYW5nZShvbGRMYXllciwgcGljayhuZXdMYXllci5jb25maWcsIE9iamVjdC5rZXlzKGNoYW5nZWQpKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlbGF5ZXJWaXNpYmlsdHkoc3RhdGU6IFZpc1N0YXRlLCBuZXdMYXllcjogTGF5ZXIsIGlzVmlzaWJsZT86IGJvb2xlYW4pOiBWaXNTdGF0ZSB7XG4gIGxldCBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2Uoc3RhdGUsIG5ld0xheWVyKTtcbiAgY29uc3QgZmlsdGVySW5kZXggPSBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGUpO1xuICBpZiAoaXNMYXllckFuaW1hdGFibGUobmV3TGF5ZXIpICYmIGZpbHRlckluZGV4ICE9PSAtMSkge1xuICAgIC8vIGlmIGxheWVyIGlzIGdvaW5nIHRvIGJlIHZpc2libGUgd2Ugc3luYyB3aXRoIGZpbHRlciBvdGhlcndpc2Ugd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIG90aGVyIGFuaW1hdGFibGUgbGF5ZXJzIGV4aXN0cyBhbmQgYXJlIHZpc2libGVcbiAgICBuZXdTdGF0ZSA9IHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgZW5hYmxlOiBpc1Zpc2libGUgPyBpc1Zpc2libGUgOiBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpLmxlbmd0aCA+IDBcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3Q29uZmlnKTtcbiAgaWYgKFxuICAgIHR5cGVvZiBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCA9PT0gJ3N0cmluZycgJiZcbiAgICBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCAhPT0gb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICApIHtcbiAgICBjb25zdCB7ZGF0YUlkLCAuLi5yZXN0Q29uZmlnfSA9IGFjdGlvbi5uZXdDb25maWc7XG4gICAgY29uc3Qgc3RhdGVXaXRoRGF0YUlkID0gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld0NvbmZpZzoge2RhdGFJZH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0TGF5ZXIgPSBzdGF0ZVdpdGhEYXRhSWQubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gICAgcmV0dXJuIG5leHRMYXllciAmJiBPYmplY3Qua2V5cyhyZXN0Q29uZmlnKS5sZW5ndGhcbiAgICAgID8gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlV2l0aERhdGFJZCwge29sZExheWVyOiBuZXh0TGF5ZXIsIG5ld0NvbmZpZzogcmVzdENvbmZpZ30pXG4gICAgICA6IHN0YXRlV2l0aERhdGFJZDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGFjdGlvbi5uZXdDb25maWcpO1xuXG4gIGxldCBsYXllckRhdGE7XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBzdGF0ZS5sYXllckRhdGFbaWR4XTtcblxuICAgIGNvbnN0IHVwZGF0ZUxheWVyRGF0YVJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgbmV3TGF5ZXIgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXI7XG4gICAgbGF5ZXJEYXRhID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyRGF0YTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoJ2lzVmlzaWJsZScgaW4gYWN0aW9uLm5ld0NvbmZpZykge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBhY3Rpb24ubmV3Q29uZmlnLmlzVmlzaWJsZSk7XG4gIH1cblxuICBpZiAoJ2NvbHVtbnMnIGluIGFjdGlvbi5uZXdDb25maWcgJiYgbmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgLy8gVE9ETzogU2hhbiwgbWFrZSB0aGUgYW5pbWF0aW9uIGNvbmZpZyBmdW5jdGlvbiBtb3JlIHJvYnVzdFxuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgbGF5ZXJEYXRhLFxuICAgIGlkeFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhY3Rpb24pOiBTIHtcbiAgY29uc3Qge29sZExheWVyLCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICAuLi5vbGRMYXllci5jb25maWcuYW5pbWF0aW9uLFxuICAgICAgW3Byb3BdOiB2YWx1ZVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2lkeF0pO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkXG4gKiBoYW5kbGVzIHR3byBjYXNlczpcbiAqIDEpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBsb2NhbCBTcGxpdE1hcCBsYXllciAodmlzU3RhdGUuc3BsaXRNYXAubGF5ZXJzKVxuICogMikgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGdsb2JhbCBsYXllciAodmlzU3RhdGUubGF5ZXJzKVxuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQoZCA9PiBkLmlkID09PSBsYXllcklkKTtcblxuICBpZiAoIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgaWYgKHNwbGl0TWFwSWQpIHtcbiAgICAvLyBbY2FzZSAxXTogdG9nZ2xlIGxvY2FsIGxheWVyIHZpc2liaWxpdHkgZm9yIGVhY2ggU3BsaXRNYXBcbiAgICBjb25zdCBtYXBJbmRleCA9IG5ld1N0YXRlLnNwbGl0TWFwcy5maW5kSW5kZXgoc20gPT4gc20uaWQgPT09IHNwbGl0TWFwSWQpO1xuICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgIC8vIDEpIGlmIHRoZSBsYXllciBpcyBpbnZpc2libGUgZ2xvYmFsbHlcbiAgICAgIC8vIC0+IHNldCBnbG9iYWwgdmlzaWJpbGl0eSB0byB0cnVlXG4gICAgICBuZXdTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihuZXdTdGF0ZSwgbGF5ZXJDb25maWdDaGFuZ2UobGF5ZXIsIHtpc1Zpc2libGU6IHRydWV9KSk7XG5cbiAgICAgIC8vIC0+IHNldCBsb2NhbCB2aXNpYmlsaXR5IHRvIHRydWUgYW5kIHRoZSBsb2NhbCB2aXNpYmlsaXRpZXMgb2YgYWxsIG90aGVyIFNwbGl0TWFwcyB0byBmYWxzZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzbSA9PlxuICAgICAgICAgIHNtLmlkICE9PSBzcGxpdE1hcElkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIDIpIGVsc2Ugd2hlbiB0aGUgbGF5ZXIgaXMgdmlzaWJsZSBnbG9iYWxseVxuICAgIHJldHVybiB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIobmV3U3RhdGUsIHRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gW2Nhc2UgMl06IHRvZ2dsZSBnbG9iYWwgbGF5ZXIgdmlzaWJpbGl0eVxuICAgIGNvbnN0IG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2lzVmlzaWJsZX0pO1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcblxuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBpc1Zpc2libGUpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICAgIGxheWVyOiBuZXdMYXllcixcbiAgICAgIGlkeFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybnMgaW5kZXggb2YgdGhlIGZpbHRlciBzeW5jZWQgdG8gdGltZWxpbmUgb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlOiBWaXNTdGF0ZSk6IG51bWJlciB7XG4gIHJldHVybiBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgaXNWYWxpZCBmbGFnIG9mIGEgbGF5ZXIuXG4gKiBVcGRhdGVzIGlzVmlzaWJsZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgaXNWYWxpZC5cbiAqIFRyaWdnZXJzIHVwZGF0ZSBvZiBkYXRhIGZvciB0aGUgbGF5ZXIgaW4gb3JkZXIgdG8gZ2V0IGVycm9ycyBhZ2FpbiBkdXJpbmcgbmV4dCB1cGRhdGUgaXRlcmF0aW9uLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJTZXRJc1ZhbGlkVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclNldElzVmFsaWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaXNWYWxpZH0gPSBhY3Rpb247XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgbGF5ZXJUb1VwZGF0ZSA9IHN0YXRlLmxheWVyc1tpZHhdO1xuICBpZiAobGF5ZXJUb1VwZGF0ZSkge1xuICAgIGxldCBuZXdMYXllcjtcbiAgICBsZXQgbmV3RGF0YSA9IG51bGw7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gVHJpZ2dlciBkYXRhIHVwZGF0ZSBpbiBvcmRlciB0byBzaG93IGVycm9ycyBhZ2FpbiBpZiBwcmVzZW50LlxuICAgICAgY29uc3Qge2xheWVyLCBsYXllckRhdGF9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKGxheWVyVG9VcGRhdGUsIHN0YXRlLCB1bmRlZmluZWQpO1xuICAgICAgbmV3TGF5ZXIgPSBsYXllcjtcbiAgICAgIG5ld0RhdGEgPSBsYXllckRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXJUb1VwZGF0ZS51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgbmV3TGF5ZXIuaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtpZHgsIGxheWVyOiBuZXdMYXllciwgbGF5ZXJEYXRhOiBuZXdEYXRhfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGFkZE9yUmVtb3ZlVGV4dExhYmVscyhuZXdGaWVsZHMsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCA9IERFRkFVTFRfVEVYVF9MQUJFTCkge1xuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgY29uc3QgY3VycmVudEZpZWxkcyA9IHRleHRMYWJlbC5tYXAodGwgPT4gdGwuZmllbGQgJiYgdGwuZmllbGQubmFtZSkuZmlsdGVyKGQgPT4gZCk7XG5cbiAgY29uc3QgYWRkRmllbGRzID0gbmV3RmllbGRzLmZpbHRlcihcbiAgICAoZmllbGQsIGluZGV4KSA9PlxuICAgICAgZmllbGQgJiZcbiAgICAgIGZpZWxkLm5hbWUgJiZcbiAgICAgICFjdXJyZW50RmllbGRzLmluY2x1ZGVzKGZpZWxkLm5hbWUpICYmXG4gICAgICBuZXdGaWVsZHMuZmluZEluZGV4KG90aGVyID0+IG90aGVyICYmIG90aGVyLm5hbWUgPT09IGZpZWxkLm5hbWUpID09PSBpbmRleFxuICApO1xuICBjb25zdCBkZWxldGVGaWVsZHMgPSBjdXJyZW50RmllbGRzLmZpbHRlcihmID0+ICFuZXdGaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBmKSk7XG5cbiAgLy8gZGVsZXRlXG4gIG5ld1RleHRMYWJlbCA9IG5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQgJiYgIWRlbGV0ZUZpZWxkcy5pbmNsdWRlcyh0bC5maWVsZC5uYW1lKSk7XG4gIC8vIEFnZ3JlZ2F0aW9uIGRlZmF1bHRzIGFscmVhZHkgbmFtZSBQb2ludCBDb3VudC4gVXNpbmcgdGhhdCBvYmplY3QgYXMgdGhlXG4gIC8vIGVtcHR5IHBsYWNlaG9sZGVyLCB0aGVuIGFwcGVuZGluZyB0aGUgZmllbGQganVzdCBwaWNrZWQsIGluc2VydHMgdGhlIHNhbWVcbiAgLy8gbGFiZWwgdHdpY2UuIGRlY2suZ2wgdGhlbiByZWplY3RzIHRoZSBkdXBsaWNhdGUgY29sbGlzaW9uIGxheWVyIGlkcy5cbiAgbmV3VGV4dExhYmVsID0gIW5ld1RleHRMYWJlbC5sZW5ndGggPyBbey4uLmRlZmF1bHRUZXh0TGFiZWwsIGZpZWxkOiBudWxsfV0gOiBuZXdUZXh0TGFiZWw7XG5cbiAgLy8gYWRkXG4gIG5ld1RleHRMYWJlbCA9IFtcbiAgICAuLi5uZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkKSxcbiAgICAuLi5hZGRGaWVsZHMubWFwKGFmID0+ICh7XG4gICAgICAuLi5kZWZhdWx0VGV4dExhYmVsLFxuICAgICAgZmllbGQ6IGFmLFxuICAgICAgY29sbGlzaW9uRW5hYmxlZDogQm9vbGVhbihcbiAgICAgICAgdGV4dExhYmVsLmZpbmQodGwgPT4gdGwuY29sbGlzaW9uRW5hYmxlZCk/LmNvbGxpc2lvbkVuYWJsZWQgPz9cbiAgICAgICAgICBkZWZhdWx0VGV4dExhYmVsLmNvbGxpc2lvbkVuYWJsZWRcbiAgICAgIClcbiAgICB9KSlcbiAgXTtcblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgdGV4dExhYmVsKSB7XG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRleHRMYWJlbFtpZHhdLCBwcm9wKSkge1xuICAgIHJldHVybiB0ZXh0TGFiZWw7XG4gIH1cblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgaWYgKHByb3AgPT09ICdmaWVsZCcgJiYgdmFsdWUgPT09IG51bGwgJiYgdGV4dExhYmVsLmxlbmd0aCA+IDEpIHtcbiAgICAvLyByZW1vdmUgbGFiZWwgd2hlbiBmaWVsZCB2YWx1ZSBpcyBzZXQgdG8gbnVsbFxuICAgIG5ld1RleHRMYWJlbC5zcGxpY2UoaWR4LCAxKTtcbiAgfSBlbHNlIGlmIChwcm9wKSB7XG4gICAgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLm1hcCgodGwsIGkpID0+IChpID09PSBpZHggPyB7Li4udGwsIFtwcm9wXTogdmFsdWV9IDogdGwpKTtcbiAgfVxuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlkeCwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCB7dGV4dExhYmVsfSA9IG9sZExheWVyLmNvbmZpZztcblxuICAvLyB3aGVuIGFkZGluZyBhIG5ldyBlbXB0eSB0ZXh0IGxhYmVsLFxuICAvLyByZWx5IG9uIHRoZSBsYXllcidzIGRlZmF1bHQgY29uZmlnLCBvciB1c2UgdGhlIGNvbnN0YW50IERFRkFVTFRfVEVYVF9MQUJFTFxuICBjb25zdCBkZWZhdWx0VGV4dExhYmVsID1cbiAgICBvbGRMYXllci5nZXREZWZhdWx0TGF5ZXJDb25maWcoe2RhdGFJZDogJyd9KT8udGV4dExhYmVsPy5bMF0gPz8gREVGQVVMVF9URVhUX0xBQkVMO1xuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcbiAgaWYgKCF0ZXh0TGFiZWxbaWR4XSAmJiBpZHggPT09IHRleHRMYWJlbC5sZW5ndGgpIHtcbiAgICAvLyBpZiBpZHggaXMgc2V0IHRvIGxlbmd0aCwgYWRkIGVtcHR5IHRleHQgbGFiZWxcbiAgICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgICAuLi50ZXh0TGFiZWwsXG4gICAgICB7XG4gICAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICAgIC8vIFRoZSBzbG90IGlzIGVtcHR5IHVudGlsIGEgZmllbGQgaXMgcGlja2VkLiBBZ2dyZWdhdGlvbiBkZWZhdWx0cyBhbHJlYWR5XG4gICAgICAgIC8vIGNhcnJ5IFBvaW50IENvdW50LCBhbmQgY29weWluZyB0aGF0IGZpZWxkIHdvdWxkIGFkZCBhIHNlY29uZCBsYWJlbC5cbiAgICAgICAgZmllbGQ6IG51bGwsXG4gICAgICAgIGNvbGxpc2lvbkVuYWJsZWQ6IEJvb2xlYW4odGV4dExhYmVsWzBdPy5jb2xsaXNpb25FbmFibGVkKVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBpZiAoaWR4ID09PSAnYWxsJyAmJiBwcm9wID09PSAnZmllbGRzJykge1xuICAgIG5ld1RleHRMYWJlbCA9IGFkZE9yUmVtb3ZlVGV4dExhYmVscyh2YWx1ZSwgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsKTtcbiAgfSBlbHNlIGlmIChpZHggPT09ICdhbGwnICYmIHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKHRsID0+ICh7Li4udGwsIFtwcm9wXTogdmFsdWV9KSk7XG4gIH0gZWxzZSB7XG4gICAgbmV3VGV4dExhYmVsID0gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIG5ld1RleHRMYWJlbCk7XG4gIH1cbiAgLy8gdXBkYXRlIHRleHQgbGFiZWwgcHJvcCBhbmQgdmFsdWVcbiAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgIG9sZExheWVyLFxuICAgIG5ld0NvbmZpZzoge3RleHRMYWJlbDogbmV3VGV4dExhYmVsfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgbGF5ZXJDbGFzc2VzLCBsYXllciwgc2NoZW1hKSB7XG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIobGF5ZXIsIHNjaGVtYSk7XG4gIHJldHVybiBsb2FkZWRMYXllclxuICAgID8gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxvYWRlZExheWVyLCBsYXllckNsYXNzZXMsIHtcbiAgICAgICAgYWxsb3dFbXB0eUNvbHVtbjogdHJ1ZVxuICAgICAgfSlcbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGNvbmZpZyBkYXRhSWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBvbGRMYXllcjogTGF5ZXI7XG4gICAgbmV3Q29uZmlnOiB7XG4gICAgICBkYXRhSWQ6IHN0cmluZztcbiAgICB9O1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZH0gPSBuZXdDb25maWc7XG5cbiAgaWYgKCFvbGRMYXllciB8fCAhc3RhdGUuZGF0YXNldHNbZGF0YUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWR9KTtcblxuICAvLyB0aGlzIG1heSBoYXBwZW4gd2hlbiBhIGxheWVyIGlzIG5ldyAodHlwZTogbnVsbCBhbmQgbm8gY29sdW1ucykgYnV0IGl0J3Mgbm90IHJlYWR5IHRvIGJlIHNhdmVkXG4gIGlmIChuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICAgIHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0sXG4gICAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgICBuZXdMYXllcixcbiAgICAgIHN0YXRlLnNjaGVtYVxuICAgICk7XG4gICAgLy8gaWYgY2FudCB2YWxpZGF0ZSBpdCB3aXRoIGRhdGEgY3JlYXRlIGEgbmV3IG9uZVxuICAgIGlmICghdmFsaWRhdGVkKSB7XG4gICAgICBjb25zdCBvbGRMYXllclR5cGUgPSBvbGRMYXllci50eXBlO1xuICAgICAgaWYgKG9sZExheWVyVHlwZSkge1xuICAgICAgICBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbb2xkTGF5ZXJUeXBlXSh7ZGF0YUlkLCBpZDogb2xkTGF5ZXIuaWR9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSB2YWxpZGF0ZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlIChlLmcuIG1pc3NpbmcgY29sdW1ucyksIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvXG4gICAgLy8gcmVtYXAgdmlzdWFsIGNoYW5uZWwgZmllbGRzIHRvIHRoZSBuZXcgZGF0YXNldCB0byBhdm9pZCBzdGFsZSBmaWVsZCByZWZlcmVuY2VzXG4gICAgLy8gdGhhdCBwb2ludCB0byByb3dzIGJleW9uZCB0aGUgbmV3IGRhdGFzZXQncyBsZW5ndGhcbiAgICBjb25zdCBuZXdEYXRhc2V0RmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHM7XG4gICAgY29uc3QgcmVtYXBwZWRGaWVsZHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGQ6IGZpZWxkS2V5fSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEZpZWxkID0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkS2V5XTtcbiAgICAgIGlmIChjdXJyZW50RmllbGQpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZCA9IG5ld0RhdGFzZXRGaWVsZHMuZmluZChmID0+IGYubmFtZSA9PT0gY3VycmVudEZpZWxkLm5hbWUpO1xuICAgICAgICByZW1hcHBlZEZpZWxkc1tmaWVsZEtleV0gPSBtYXRjaGVkIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKE9iamVjdC5rZXlzKHJlbWFwcGVkRmllbGRzKS5sZW5ndGgpIHtcbiAgICAgIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcocmVtYXBwZWRGaWVsZHMpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSBmaWVsZCB0eXBlIGNvbXBhdGliaWxpdHkg4oCUIGNsZWFycyBmaWVsZHMgd2hvc2UgdHlwZSBpcyBpbmNvbXBhdGlibGVcbiAgICAvLyB3aXRoIHRoZSBjaGFubmVsJ3Mgc3VwcG9ydGVkIGZpZWxkIHR5cGVzIChlLmcuIHN0cmluZyBmaWVsZCBmb3IgYSBudW1lcmljIHNjYWxlKVxuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtrZXl9KSA9PiB7XG4gICAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGlzVmlzaWJsZTogb2xkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZVxuICB9KTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHVuZGVmaW5lZCk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5pdGlhbExheWVyQ29uZmlnKGxheWVyLCBkYXRhc2V0cywgbGF5ZXJDbGFzc2VzKTogTGF5ZXIge1xuICBsZXQgbmV3TGF5ZXIgPSBsYXllcjtcbiAgaWYgKCFPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoKSB7XG4gICAgLy8gbm8gZGF0YSBpcyBsb2FkZWRcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cbiAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgLy8gc2V0IGxheWVyIGRhdGFJZFxuICAgIG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZDogT2JqZWN0LmtleXMoZGF0YXNldHMpWzBdfSk7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvLyBmaW5kIGRlZmF1dCBsYXllciBwcm9wc1xuICBjb25zdCByZXN1bHQgPVxuICAgIHR5cGVvZiBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICA/IGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgW10pXG4gICAgICA6IHtwcm9wczogW119O1xuXG4gIC8vIGFuIGFycmF5IG9mIHBvc3NpYmxlIHByb3BzLCB1c2UgMXN0IG9uZVxuICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcblxuICBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW2xheWVyLnR5cGVdKHtcbiAgICAgIC4uLnByb3BzWzBdLFxuICAgICAgbGFiZWw6IG5ld0xheWVyLmNvbmZpZy5sYWJlbCxcbiAgICAgIGRhdGFJZDogbmV3TGF5ZXIuY29uZmlnLmRhdGFJZCxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBuZXdMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgICBpc1Zpc2libGU6IG5ld0xheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpXG4gICAgOiBuZXdMYXllcjtcbn1cbi8qKlxuICogRml0IHRoZSBtYXAgd2hlbiB0aGUgbGF5ZXIgdHlwZSBkcm9wZG93biBnaXZlcyBhbiBlbXB0eSBsYXllciBpdHMgZmlyc3RcbiAqIHR5cGUgYW5kIHRoYXQgbGF5ZXIgYWxyZWFkeSBwb2ludHMgYXQgYSBkYXRhc2V0LiBMYXRlciB0eXBlIGNoYW5nZXMsXG4gKiBwcm9ncmFtbWF0aWMgYGxheWVyVHlwZUNoYW5nZWAsIGFuZCBzYXZlZC1jb25maWcgYXBwbGllcyBsZWF2ZSB0aGUgY2FtZXJhXG4gKiBhbG9uZS4gR2F0ZWQgYnkgYGVuYWJsZUZpdEJvdW5kc09uTWFudWFsTGF5ZXJgLlxuICovXG5mdW5jdGlvbiBtYXliZUZpdE1hbnVhbExheWVyQm91bmRzKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIG9sZExheWVyOiBMYXllcixcbiAgbGF5ZXI6IExheWVyLFxuICBmaXRCb3VuZHM/OiBib29sZWFuXG4pOiBWaXNTdGF0ZSB7XG4gIGlmIChcbiAgICAhZml0Qm91bmRzIHx8XG4gICAgb2xkTGF5ZXIudHlwZSB8fFxuICAgICFsYXllci5jb25maWcuZGF0YUlkIHx8XG4gICAgIWdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRml0Qm91bmRzT25NYW51YWxMYXllclxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgYm91bmRzID0gZmluZE1hcEJvdW5kcyhbbGF5ZXJdKTtcbiAgaWYgKCFib3VuZHMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlLFxuICAgIEFDVElPTl9UQVNLX0ZJVF9CT1VORFMoKS5tYXAoKCkgPT4gZml0TWFwQm91bmRzKGJvdW5kcykpXG4gICk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHR5cGUuIFByZXZpZXdzIGxheWVyIGNvbmZpZyB3aWxsIGJlIGNvcGllZCBpZiBhcHBsaWNhYmxlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG9sZElkID0gb2xkTGF5ZXIuaWQ7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRJZCk7XG5cbiAgaWYgKCFzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0pIHtcbiAgICBDb25zb2xlLmVycm9yKGAke25ld1R5cGV9IGlzIG5vdCBhIHZhbGlkIGxheWVyIHR5cGVgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSh7XG4gICAgLy8ga2VlcCBvbGQgbGF5ZXIgbGFibGUgYW5kIGlzQ29uZmlnQWN0aXZlXG4gICAgbGFiZWw6IG9sZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogb2xkTGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgIGRhdGFJZDogb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICB9KTtcblxuICBpZiAoIW9sZExheWVyLnR5cGUpIHtcbiAgICAvLyBpZiBzZXR0aW5nIGxheWVyIHR5cGUgb24gYW4gZW1wdHkgbGF5ZXJcbiAgICBuZXdMYXllciA9IHNldEluaXRpYWxMYXllckNvbmZpZyhuZXdMYXllciwgc3RhdGUuZGF0YXNldHMsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZ2V0IGEgbWludCBsYXllciwgd2l0aCBuZXcgaWQgYW5kIHR5cGVcbiAgICAvLyBiZWNhdXNlIGRlY2suZ2wgdXNlcyBpZCB0byBtYXRjaCBiZXR3ZWVuIG5ldyBhbmQgb2xkIGxheWVyLlxuICAgIC8vIElmIHR5cGUgaGFzIGNoYW5nZWQgYnV0IGlkIGlzIHRoZSBzYW1lLCBpdCB3aWxsIGJyZWFrXG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9XG4gICAgICB0eXBlb2Ygc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoc3RhdGUuZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF0pXG4gICAgICAgIDogbnVsbDtcblxuICAgIG5ld0xheWVyLmFzc2lnbkNvbmZpZ1RvTGF5ZXIoXG4gICAgICBvbGRMYXllci5jb25maWcsXG4gICAgICBvbGRMYXllci52aXNDb25maWdTZXR0aW5ncyxcbiAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgZGVmYXVsdExheWVyUHJvcHNcbiAgICApO1xuICAgIGlmICghQUdHUkVHQVRJT05fQ09VTlRfTEFZRVJfVFlQRVMuaGFzKG5ld1R5cGUpKSB7XG4gICAgICBjb25zdCB0ZXh0TGFiZWwgPSBuZXdMYXllci5jb25maWcudGV4dExhYmVsLmZpbHRlcihsYWJlbCA9PiAhaXNQb2ludENvdW50TGFiZWwobGFiZWwpKTtcbiAgICAgIGlmICh0ZXh0TGFiZWwubGVuZ3RoICE9PSBuZXdMYXllci5jb25maWcudGV4dExhYmVsLmxlbmd0aCkge1xuICAgICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgdGV4dExhYmVsOiB0ZXh0TGFiZWwubGVuZ3RoID8gdGV4dExhYmVsIDogW3suLi5ERUZBVUxUX1RFWFRfTEFCRUx9XVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICB9XG5cbiAgY29uc3Qge2NsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mb1xuICB9O1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgfHwgb2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHNwbGl0TWFwIGxheWVyIGlkXG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzZXR0aW5ncyA9PiB7XG4gICAgICAgIGNvbnN0IHtbb2xkSWRdOiBvbGRMYXllck1hcCwgLi4ub3RoZXJMYXllcnN9ID0gc2V0dGluZ3MubGF5ZXJzO1xuICAgICAgICByZXR1cm4gb2xkSWQgaW4gc2V0dGluZ3MubGF5ZXJzXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAuLi5vdGhlckxheWVycyxcbiAgICAgICAgICAgICAgICBbbGF5ZXIuaWRdOiBvbGRMYXllck1hcFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzZXR0aW5ncztcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBsYXllck9yZGVyIHdpdGggbmV3IGlkXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG9sZExheWVyLmlkLCBuZXdMYXllci5pZClcbiAgfTtcblxuICByZXR1cm4gbWF5YmVGaXRNYW51YWxMYXllckJvdW5kcyhuZXdTdGF0ZSwgb2xkTGF5ZXIsIGxheWVyLCBhY3Rpb24uZml0Qm91bmRzKTtcbn1cblxuLyoqXG4gKiBCaW5kIHZpc3VhbCBjaGFubmVsIGZpZWxkcyB0byB0aGUgZGF0YXNldCBmaWVsZCBvZiB0aGUgc2FtZSBuYW1lLlxuICogYGFkZERhdGFUb01hcGAgYW5kIGBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VgIG9mdGVuIHBhc3MgYHtuYW1lLCB0eXBlfWBcbiAqIG9yIHByb2Nlc3NvciBmaWVsZHMgd2hvc2UgdmFsdWVBY2Nlc3NvciBpcyBub3QgYm91bmQgdG8gdGhlIEtlcGxlclRhYmxlLCB3aGljaFxuICogbGVhdmVzIHN0cm9rZUNvbG9yRG9tYWluIGF0IGBbMCwgMV1gIChrZXBsZXIuZ2wgIzMwNjEpLlxuICovXG5mdW5jdGlvbiByZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQoXG4gIG5ld0NvbmZpZzogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25bJ25ld0NvbmZpZyddLFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSB8IHVuZGVmaW5lZCxcbiAgdmlzdWFsQ2hhbm5lbDogTGF5ZXJbJ3Zpc3VhbENoYW5uZWxzJ11bc3RyaW5nXSB8IHVuZGVmaW5lZFxuKSB7XG4gIGlmICghZGF0YXNldCB8fCAhdmlzdWFsQ2hhbm5lbCkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgY29uc3QgaW5jb21pbmcgPSBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF07XG4gIGlmICghaW5jb21pbmcgfHwgdHlwZW9mIGluY29taW5nICE9PSAnb2JqZWN0JyB8fCAhaW5jb21pbmcubmFtZSkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgY29uc3QgZm91bmQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGluY29taW5nLm5hbWUpO1xuICBpZiAoIWZvdW5kKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLm5ld0NvbmZpZyxcbiAgICBbdmlzdWFsQ2hhbm5lbC5maWVsZF06IGZvdW5kXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdWaXNDb25maWcsIGNoYW5uZWx9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGNvbnN0IG5ld0NvbmZpZyA9IHJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldChcbiAgICBhY3Rpb24ubmV3Q29uZmlnLFxuICAgIGRhdGFzZXQsXG4gICAgb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF1cbiAgKTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpO1xuICBpZiAobmV3VmlzQ29uZmlnKSBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIC8vIGNhbGxpbmcgdXBkYXRlIGFuaW1hdGlvbiBkb21haW4gZmlyc3QgdG8gbWVyZ2UgYWxsIGxheWVyIGFuaW1hdGlvbiBkb21haW5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG5cbiAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICBpZiAodmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiYgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdKSB7XG4gICAgLy8gaWYgY29sb3IgZmllbGQgY2hhbmdlZCwgc2V0IGN1c3RvbUJyZWFrcyB0byBmYWxzZVxuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgIGxheWVyczogdXBkYXRlZFN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvbGRMYXllckRhdGEgPSB1cGRhdGVkU3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgdXBkYXRlZFN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIGlmIChcbiAgICB2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJlxuICAgIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsPy5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiZcbiAgICAhbmV3VmlzQ29uZmlnXG4gICkge1xuICAgIC8vIHdoZW4gc3dpdGNoaW5nIHRvIGN1c3RvbU9yZGluYWwgc2NhbGUsIGNyZWF0ZSBhIGN1c3RvbVBhbGV0dGUgaW4gY29sb3JVSSB3aXRoIHVwZGF0ZWQgY29sb3JEb21haW5cbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0gaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlKHtcbiAgICAgIHNjYWxlOiBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsLFxuICAgICAgZmllbGQ6IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSxcbiAgICAgIG9yZGluYWxEb21haW46IGxheWVyLmNvbmZpZ1tsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5kb21haW5dLFxuICAgICAgcmFuZ2U6IGxheWVyLmNvbmZpZy52aXNDb25maWdbdmlzdWFsQ2hhbm5lbC5yYW5nZV0sXG4gICAgICBjb2xvckJyZWFrczogbnVsbFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSBjb2xvclJhbmdlIHdpdGggbmV3IGN1c3RvbVBhbGV0dGVcbiAgICBsYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgc2hvd0NvbG9yQ2hhcnQ6IHRydWUsXG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHVwZGF0ZWRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3VmlzQ29uZmlnKTtcblxuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICAvLyBKZW5rcyBicmVha3MgZGVwZW5kIG9uIHRoZSBudW1iZXIgb2YgY29sb3JzLiBSZWNhbGN1bGF0ZSB0aGUgZG9tYWluIHdoZW5cbiAgLy8gdGhlIGNvbG9yIHJhbmdlIG9mIGEgSmVua3MgY2hhbm5lbCBjaGFuZ2VzLlxuICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgICBpZiAoZGF0YXNldCkge1xuICAgICAgT2JqZWN0LmtleXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbEtleSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYW5uZWwgPSBuZXdMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsS2V5XTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoYW5uZWw/LnNjYWxlICYmXG4gICAgICAgICAgbmV3TGF5ZXIuY29uZmlnW2NoYW5uZWwuc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5qZW5rcyAmJlxuICAgICAgICAgIGNoYW5uZWwucmFuZ2UgJiZcbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYWN0aW9uLm5ld1Zpc0NvbmZpZywgY2hhbm5lbC5yYW5nZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWxLZXkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgLy8gRXhjbHVzaXZlIGJpdG1hcCBlZGl0aW5nOiB3aGVuIGVkaXRCb3VuZHMgaXMgdHVybmVkIG9uIGZvciBvbmUgYml0bWFwIGxheWVyLFxuICAvLyB0dXJuIGl0IG9mZiBmb3IgYWxsIG90aGVyIGJpdG1hcCBsYXllcnNcbiAgaWYgKG5ld0xheWVyLnR5cGUgPT09ICdiaXRtYXAnICYmIGFjdGlvbi5uZXdWaXNDb25maWcuZWRpdEJvdW5kcyA9PT0gdHJ1ZSkge1xuICAgIG5leHRTdGF0ZSA9IHtcbiAgICAgIC4uLm5leHRTdGF0ZSxcbiAgICAgIGxheWVyczogbmV4dFN0YXRlLmxheWVycy5tYXAoKGwsIGkpID0+IHtcbiAgICAgICAgaWYgKGkgIT09IGlkeCAmJiBsLnR5cGUgPT09ICdiaXRtYXAnICYmIGwuY29uZmlnLnZpc0NvbmZpZy5lZGl0Qm91bmRzKSB7XG4gICAgICAgICAgcmV0dXJuIGwudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgdmlzQ29uZmlnOiB7Li4ubC5jb25maWcudmlzQ29uZmlnLCBlZGl0Qm91bmRzOiBmYWxzZX1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gbmV4dFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV4dFN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIGNvbnN0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbiAgICByZXR1cm4gbmV3TGF5ZXIudHlwZSA9PT0gJ3phcnInICYmIHByb3BzLnNvbWUocCA9PiBwID09PSAnemFyckF4aXMnIHx8IHAgPT09ICd6YXJyVmFyaWFibGUnKVxuICAgICAgPyB1cGRhdGVBbmltYXRpb25Eb21haW4odXBkYXRlZFN0YXRlKVxuICAgICAgOiB1cGRhdGVkU3RhdGU7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG8gYSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge3ZhbHVlfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFMgPT4ge1xuICBjb25zdCBjdXJyZW50VGltZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWVcbiAgICB9XG4gIH07XG4gIC8vIHVwZGF0ZSBhbmltYXRpb24gY29uZmlnIGZvciBlYWNoIGxheWVyXG4gIHJldHVybiBzdGF0ZS5sYXllcnMucmVkdWNlKChhY2N1LCBsKSA9PiB7XG4gICAgaWYgKGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmIGwudHlwZSAhPT0gJ3RyaXAnKSB7XG4gICAgICByZXR1cm4gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyKGFjY3UsIHtvbGRMYXllcjogbCwgcHJvcDogJ2N1cnJlbnRUaW1lJywgY3VycmVudFRpbWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3dcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7aWQsIGFuaW1hdGlvbldpbmRvd306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgcHJldmlvdXNXaW5kb3cgPSAoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuYW5pbWF0aW9uV2luZG93O1xuICBsZXQgbmV4dEZpbHRlciA9IHsuLi5maWx0ZXIsIGFuaW1hdGlvbldpbmRvd30gYXMgRmlsdGVyO1xuXG4gIC8vIEVudGVyaW5nIG9yIGxlYXZpbmcgaW50ZXJ2YWwgcGxheWJhY2sgc25hcHMgdGhlIHdpbmRvdyBvbnRvIGhpc3RvZ3JhbSBiaW5zLlxuICBpZiAoXG4gICAgKGZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlIHx8IGZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMucmFuZ2UpICYmXG4gICAgKHByZXZpb3VzV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsIHx8IGFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbClcbiAgKSB7XG4gICAgY29uc3QgYWRqdXN0ZWQgPSBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93KFxuICAgICAgc3RhdGUsXG4gICAgICBuZXh0RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlciB8IFJhbmdlRmlsdGVyLFxuICAgICAgZ2V0UGxvdEJhc2VJbmRleEJ5RGF0YUlkKHN0YXRlLmRhdGFzZXRzLCBuZXh0RmlsdGVyLCBzdGF0ZS5sYXllcnMpXG4gICAgKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhZGp1c3RlZC52YWx1ZSkgJiYgYWRqdXN0ZWQudmFsdWUuZXZlcnkodiA9PiBOdW1iZXIuaXNGaW5pdGUodikpKSB7XG4gICAgICBuZXh0RmlsdGVyID0gYWRqdXN0ZWQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMucmFuZ2UpIHtcbiAgICBjb25zdCBmaWx0ZXJJbmRleCA9IHN0YXRlLmZpbHRlcnMuaW5kZXhPZihmaWx0ZXIpO1xuICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKFxuICAgICAgc3RhdGUsXG4gICAgICBzZXRGaWx0ZXIoZmlsdGVySW5kZXgsIFsnYW5pbWF0aW9uV2luZG93JywgJ3ZhbHVlJ10sIFthbmltYXRpb25XaW5kb3csIG5leHRGaWx0ZXIudmFsdWVdKVxuICAgICk7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5leHRGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgaWYgKGZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3U3luY1RpbWVsaW5lTW9kZSA9IGdldFN5bmNBbmltYXRpb25Nb2RlKG5leHRGaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKTtcbiAgcmV0dXJuIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7aWQsIG1vZGU6IG5ld1N5bmNUaW1lbGluZU1vZGV9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZpbHRlcklkLCBuZXdGaWx0ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIHRoZSBmaWx0ZXJzIHRvIG9ubHkgY29tcGFyZSB0aGUgc2F2ZWQgcHJvcGVydGllc1xuICBjb25zdCBzZXJpYWxpemVkT2xkRmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG9sZEZpbHRlciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIobmV3RmlsdGVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdGaWx0ZXIgfHwgaXNFcXVhbChzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgZmlsdGVyLCBhcHBseSB0aGVtXG4gIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpO1xuICBkZWxldGUgY2hhbmdlZFsnaWQnXTsgLy8gaWQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkXG5cbiAgY29uc3QgZmlsdGVySW5kZXggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlckluZGV4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihcbiAgICBzdGF0ZSxcbiAgICBzZXRGaWx0ZXIoZmlsdGVySW5kZXgsIE9iamVjdC5rZXlzKGNoYW5nZWQpLCBPYmplY3QudmFsdWVzKGNoYW5nZWQpKVxuICApO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVGaWx0ZXJQbG90c0FmdGVyRmlsdGVyaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhZmZlY3RlZERhdGFzZXRJZHM6IHN0cmluZ1tdLFxuICB1cGRhdGVkRmlsdGVySW5kZXg/OiBudW1iZXJcbik6IFMge1xuICBjb25zdCBmaWx0ZXJzID0gc3RhdGUuZmlsdGVycy5tYXAoKGZpbHRlciwgZmlsdGVySW5kZXgpID0+IHtcbiAgICBpZiAoZmlsdGVySW5kZXggPT09IHVwZGF0ZWRGaWx0ZXJJbmRleCkge1xuICAgICAgcmV0dXJuIHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIGZpbHRlciwgdW5kZWZpbmVkLCBzdGF0ZS5sYXllcnMpO1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFJlZnJlc2hOdW1lcmljUGxvdCA9XG4gICAgICBmaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnJhbmdlICYmXG4gICAgICAoIWlzU2lkZUZpbHRlcihmaWx0ZXIpIHx8IGZpbHRlci5wbG90VHlwZT8udHlwZSA9PT0gUExPVF9UWVBFUy5saW5lQ2hhcnQpO1xuICAgIGlmIChmaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiAhc2hvdWxkUmVmcmVzaE51bWVyaWNQbG90KSB7XG4gICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cblxuICAgIGNvbnN0IHNoYXJlZERhdGFzZXRJZHMgPSBmaWx0ZXIuZGF0YUlkLmZpbHRlcihkYXRhSWQgPT4gYWZmZWN0ZWREYXRhc2V0SWRzLmluY2x1ZGVzKGRhdGFJZCkpO1xuICAgIGlmICghc2hhcmVkRGF0YXNldElkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuXG4gICAgY29uc3QgaW52YWxpZGF0ZWRGaWx0ZXIgPSBzaGFyZWREYXRhc2V0SWRzLnJlZHVjZShyZW1vdmVGaWx0ZXJQbG90LCBmaWx0ZXIpO1xuICAgIHJldHVybiB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBpbnZhbGlkYXRlZEZpbHRlciwgdW5kZWZpbmVkLCBzdGF0ZS5sYXllcnMpO1xuICB9KTtcblxuICByZXR1cm4gc2V0KFsnZmlsdGVycyddLCBmaWx0ZXJzLCBzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlclVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCB7aWR4LCB2YWx1ZUluZGV4ID0gMH0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKFxuICAgIEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApICYmXG4gICAgKCFBcnJheS5pc0FycmF5KGFjdGlvbi52YWx1ZSkgfHwgYWN0aW9uLnByb3AubGVuZ3RoICE9PSBhY3Rpb24udmFsdWUubGVuZ3RoKVxuICApIHtcbiAgICBDb25zb2xlLmVycm9yKCdFeHBlY3RpbmcgdmFsdWUgdG8gYmUgYW4gYXJyYXkgb2YgdGhlIHNhbWUgbGVuZ3RoLCBzaW5jZSBwcm9wIGlzIGFuIGFycmF5Jyk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGNvbnZlcnQgcHJvcCBhbmQgdmFsdWUgdG8gYXJyYXlcbiAgY29uc3QgcHJvcHMgPSB0b0FycmF5KGFjdGlvbi5wcm9wKTtcbiAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgPyB0b0FycmF5KGFjdGlvbi52YWx1ZSkgOiBbYWN0aW9uLnZhbHVlXTtcblxuICBsZXQgbmV3RmlsdGVyID0gb2xkRmlsdGVyO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcHJvcCA9IHByb3BzW2ldO1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuICAgIC8vIFdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBwYXNzaW5nIGluIG5hbWUgYXMgYW4gYXJyYXkgaW50byBfdXBkYXRlRmlsdGVyUHJvcCwgc28gd2UgY2FsbCBpdCBtdWx0aXBsZSB0aW1lcyB3aXRoIGVhY2ggbmFtZVxuICAgIC8vIFNlZSB0aGUgY29tbWVudCBpbiB0aGVyZSBhcyB0byB3aGF0IHNob3VsZCBiZSBhZGRyZXNzZWRcbiAgICBsZXQgcmVzO1xuICAgIGlmIChwcm9wID09PSAnbmFtZScgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIHJlcyA9IHZhbHVlLnJlZHVjZSgoYWNjdSwgdikgPT4ge1xuICAgICAgICByZXR1cm4gX3VwZGF0ZUZpbHRlclByb3AoYWNjdSwgbmV3RmlsdGVyLCBwcm9wLCB2LCB2YWx1ZUluZGV4KTtcbiAgICAgIH0sIG5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gX3VwZGF0ZUZpbHRlclByb3AobmV3U3RhdGUsIG5ld0ZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgpO1xuICAgIH1cbiAgICBuZXdGaWx0ZXIgPSByZXMuZmlsdGVyO1xuICAgIG5ld1N0YXRlID0gcmVzLnN0YXRlO1xuICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGRhdGFzZXRJZHNUb0ZpbHRlci5jb25jYXQocmVzLmRhdGFzZXRJZHNUb0ZpbHRlcik7XG4gIH1cblxuICBjb25zdCBlbmxhcmdlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYudmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQpO1xuXG4gIGlmIChlbmxhcmdlZEZpbHRlciAmJiBlbmxhcmdlZEZpbHRlci5pZCAhPT0gbmV3RmlsdGVyLmlkKSB7XG4gICAgLy8gdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGVubGFyZ2VkIGZpbHRlclxuICAgIG5ld0ZpbHRlci52aWV3ID0gRklMVEVSX1ZJRVdfVFlQRVMuc2lkZTtcbiAgfVxuXG4gIC8vIHNhdmUgbmV3IGZpbHRlcnMgdG8gbmV3U3RhdGVcbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgbmV3RmlsdGVyLCBuZXdTdGF0ZSk7XG5cbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgYWZmZWN0ZWREYXRhc2V0SWRzID0gdW5pcShkYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBhZmZlY3RlZERhdGFzZXRJZHMsXG4gICAgbmV3U3RhdGUuZGF0YXNldHMsXG4gICAgbmV3U3RhdGUuZmlsdGVycyxcbiAgICBuZXdTdGF0ZS5sYXllcnNcbiAgKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcblxuICAvLyBVcGRhdGUgcGxvdHMgYWZ0ZXIgZmlsdGVyaW5nIHNvIHRoZXkgdXNlIHRoZSBsYXRlc3QgZmlsdGVyZWQgaW5kZXhlcy5cbiAgLy8gT3RoZXIgdGltZSBmaWx0ZXJzIG5lZWQgdGhlaXIgY2FjaGVkIGJpbnMgaW52YWxpZGF0ZWQgZm9yIHNoYXJlZCBkYXRhc2V0cy5cbiAgbmV3U3RhdGUgPSB1cGRhdGVGaWx0ZXJQbG90c0FmdGVyRmlsdGVyaW5nKG5ld1N0YXRlLCBhZmZlY3RlZERhdGFzZXRJZHMsIGlkeCk7XG5cbiAgLy8gZGF0YUlkIGlzIGFuIGFycmF5XG4gIC8vIHBhc3Mgb25seSB0aGUgZGF0YXNldCB3ZSBuZWVkIHRvIHVwZGF0ZVxuICBuZXdTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YXNldElkc1RvRmlsdGVyLCBuZXdGaWx0ZXIpO1xuXG4gIC8vIElmIHRpbWUgcmFuZ2UgZmlsdGVyIHZhbHVlIHdhcyB1cGRhdGVkLCBhZGp1c3QgYW5pbWF0aW9uIGNvbmZpZ1xuICBpZiAobmV3RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgcHJvcHMuaW5jbHVkZXMoJ3ZhbHVlJykpIHtcbiAgICBuZXdTdGF0ZSA9IGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGFjdGlvbi5pZHgpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIGRhdGFzZXRzLCBmaWx0ZXJzKSB7XG4gIGNvbnN0IGN1cnJlbnREYXRhSWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICBpZiAoY3VycmVudERhdGFJZCAmJiB2YWx1ZSAmJiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCBmaWVsZE5hbWUgPSBmaWx0ZXIubmFtZVt2YWx1ZUluZGV4XTtcbiAgICBjb25zdCBlbmRGaWVsZE5hbWUgPSB0b0FycmF5KGZpbHRlci5lbmROYW1lKVt2YWx1ZUluZGV4XTtcbiAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gZmlsdGVyLnZhbHVlO1xuICAgIGNvbnN0IG5leHREYXRhSWRzID0gZmlsdGVyLmRhdGFJZC5zbGljZSgpO1xuICAgIG5leHREYXRhSWRzW3ZhbHVlSW5kZXhdID0gdmFsdWU7XG5cbiAgICBsZXQgbmV4dEZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBjdXJyZW50RGF0YUlkKTtcbiAgICBuZXh0RmlsdGVyID0gc2V0KFsnZGF0YUlkJ10sIG5leHREYXRhSWRzLCBuZXh0RmlsdGVyKTtcblxuICAgIGZvciAoY29uc3QgcHJvcCBvZiBbJ2dwdUNoYW5uZWwnLCAnZ3B1RW5kQ2hhbm5lbCddKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShuZXh0RmlsdGVyW3Byb3BdKSkge1xuICAgICAgICBjb25zdCBuZXh0Q2hhbm5lbHMgPSBuZXh0RmlsdGVyW3Byb3BdLnNsaWNlKCk7XG4gICAgICAgIG5leHRDaGFubmVsc1t2YWx1ZUluZGV4XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgbmV4dEZpbHRlciA9IHNldChbcHJvcF0sIG5leHRDaGFubmVscywgbmV4dEZpbHRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW3ZhbHVlXTtcbiAgICBjb25zdCBmaWVsZCA9IGRhdGFzZXQ/LmZpZWxkcy5maW5kKGNhbmRpZGF0ZSA9PiBjYW5kaWRhdGUubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgICBjb25zdCBjYW5SZWJpbmRGaWVsZCA9XG4gICAgICBmaWVsZCAmJiAoIWZpbHRlci5maWVsZFR5cGUgfHwgYXJlRmlsdGVyRmllbGRUeXBlc0NvbXBhdGlibGUoZmlsdGVyLmZpZWxkVHlwZSwgZmllbGQudHlwZSkpO1xuICAgIGNvbnN0IHtmaWx0ZXI6IHJlYm91bmRGaWx0ZXJ9ID0gY2FuUmViaW5kRmllbGRcbiAgICAgID8gYXBwbHlGaWx0ZXJGaWVsZE5hbWUobmV4dEZpbHRlciwgZGF0YXNldHMsIHZhbHVlLCBmaWVsZE5hbWUsIHZhbHVlSW5kZXgsIHtcbiAgICAgICAgICBtZXJnZURvbWFpbjogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgOiB7ZmlsdGVyOiBudWxsfTtcblxuICAgIGlmIChyZWJvdW5kRmlsdGVyKSB7XG4gICAgICBuZXh0RmlsdGVyID0gcmVib3VuZEZpbHRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV4dE5hbWVzID0gbmV4dEZpbHRlci5uYW1lLnNsaWNlKCk7XG4gICAgICBjb25zdCBuZXh0RmllbGRJZHggPSBuZXh0RmlsdGVyLmZpZWxkSWR4LnNsaWNlKCk7XG4gICAgICBuZXh0TmFtZXNbdmFsdWVJbmRleF0gPSAnJztcbiAgICAgIG5leHRGaWVsZElkeFt2YWx1ZUluZGV4XSA9IC0xO1xuICAgICAgbmV4dEZpbHRlciA9IHtcbiAgICAgICAgLi4ubmV4dEZpbHRlcixcbiAgICAgICAgbmFtZTogbmV4dE5hbWVzLFxuICAgICAgICBmaWVsZElkeDogbmV4dEZpZWxkSWR4LFxuICAgICAgICBncHU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChlbmRGaWVsZE5hbWUgJiYgbmV4dEZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgICBjb25zdCB7ZmlsdGVyOiByZWJvdW5kRW5kRmlsdGVyfSA9IGFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZShcbiAgICAgICAgbmV4dEZpbHRlcixcbiAgICAgICAgZGF0YXNldHMsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBlbmRGaWVsZE5hbWUsXG4gICAgICAgIHZhbHVlSW5kZXhcbiAgICAgICk7XG4gICAgICBpZiAocmVib3VuZEVuZEZpbHRlcikge1xuICAgICAgICBuZXh0RmlsdGVyID0gcmVib3VuZEVuZEZpbHRlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHtmaWx0ZXI6IGNsZWFyZWRFbmRGaWx0ZXJ9ID0gYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lKFxuICAgICAgICAgIG5leHRGaWx0ZXIsXG4gICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICB2YWx1ZUluZGV4XG4gICAgICAgICk7XG4gICAgICAgIG5leHRGaWx0ZXIgPSBjbGVhcmVkRW5kRmlsdGVyIHx8IG5leHRGaWx0ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZG9tYWluU3RlcHMgPSBtZXJnZUZpbHRlckRvbWFpbihuZXh0RmlsdGVyLCBkYXRhc2V0cyk7XG4gICAgbmV4dEZpbHRlciA9IHtcbiAgICAgIC4uLm5leHRGaWx0ZXIsXG4gICAgICAuLi4oZG9tYWluU3RlcHMgPyB7ZG9tYWluOiBkb21haW5TdGVwcy5kb21haW4sIHN0ZXA6IGRvbWFpblN0ZXBzLnN0ZXB9IDoge30pXG4gICAgfTtcblxuICAgIGlmIChuZXh0RmlsdGVyLmdwdSkge1xuICAgICAgbmV4dEZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoc2V0RmlsdGVyR3B1TW9kZShuZXh0RmlsdGVyLCBmaWx0ZXJzKSwgZmlsdGVycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5leHRGaWx0ZXIsXG4gICAgICB2YWx1ZTogYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihwcmV2aW91c1ZhbHVlLCBuZXh0RmlsdGVyKVxuICAgIH07XG4gIH1cblxuICBsZXQgbmV3RmlsdGVyID0gZmlsdGVyO1xuICBpZiAoY3VycmVudERhdGFJZCkge1xuICAgIC8vIGlmIGRhdGFJZCBhbHJlYWR5IGV4aXN0XG4gICAgbmV3RmlsdGVyID0gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKTtcbiAgfVxuICBpZiAodmFsdWUpIHtcbiAgICBjb25zdCBuZXh0VmFsdWUgPSBuZXdGaWx0ZXIuZGF0YUlkLnNsaWNlKCk7XG4gICAgbmV4dFZhbHVlW3ZhbHVlSW5kZXhdID0gdmFsdWU7XG4gICAgbmV3RmlsdGVyID0gc2V0KFsnZGF0YUlkJ10sIG5leHRWYWx1ZSwgbmV3RmlsdGVyKTtcbiAgfVxuICByZXR1cm4gbmV3RmlsdGVyO1xufVxuXG5mdW5jdGlvbiBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpIHtcbiAgY29uc3QgZGF0YUlkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcblxuICBpZiAoZmlsdGVyLmRhdGFJZC5sZW5ndGggPT09IDEgJiYgdmFsdWVJbmRleCA9PT0gMCkge1xuICAgIC8vIGlmIHJlbW92ZSB0aGUgb25seSBkYXRhSWQsIGNyZWF0ZSBhbiBlbXB0eSBmaWx0ZXIgaW5zdGVhZDtcbiAgICByZXR1cm4gZ2V0RGVmYXVsdEZpbHRlcih7aWQ6IGZpbHRlci5pZH0pO1xuICB9XG5cbiAgaWYgKGRhdGFJZCkge1xuICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhSWQpO1xuICB9XG5cbiAgZm9yIChjb25zdCBwcm9wIG9mIFtcbiAgICAnZGF0YUlkJyxcbiAgICAnbmFtZScsXG4gICAgJ2ZpZWxkSWR4JyxcbiAgICAnZ3B1Q2hhbm5lbCcsXG4gICAgJ2VuZE5hbWUnLFxuICAgICdlbmRGaWVsZElkeCcsXG4gICAgJ2VuZE1hcHBlZFZhbHVlJyxcbiAgICAnZ3B1RW5kQ2hhbm5lbCdcbiAgXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcltwcm9wXSkpIHtcbiAgICAgIGNvbnN0IG5leHRWYWwgPSBmaWx0ZXJbcHJvcF0uc2xpY2UoKTtcbiAgICAgIG5leHRWYWwuc3BsaWNlKHZhbHVlSW5kZXgsIDEpO1xuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgbmV4dFZhbCwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXJnZUZpZWxkRG9tYWluIGZvciB0aGUgcmVtYWluaW5nIGZpZWxkc1xuICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKGZpbHRlciwgZGF0YXNldHMpO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIC8vIHZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKGRvbWFpblN0ZXBzID8ge2RvbWFpbjogZG9tYWluU3RlcHM/LmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHM/LnN0ZXB9IDoge30pXG4gIH07XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXh0RmlsdGVyLnZhbHVlLCBuZXh0RmlsdGVyKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0RmlsdGVyLFxuICAgIHZhbHVlOiBuZXh0VmFsdWVcbiAgfTtcbn1cblxuLyoqICpcbiAqIFVwZGF0ZXMgYSBzaW5nbGUgcHJvcGVydHkgb2YgYSBmaWx0ZXJcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlclByb3Aoc3RhdGUsIGZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgsIGRhdGFzZXRJZHM/KSB7XG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIHN3aXRjaCAocHJvcCkge1xuICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGlmIHdlIHVwZGF0ZSBmaWx0ZXJEYXRhSWQsIHdlIG5lZWQgdG8gY29uc2lkZXIgdHdvIGNhc2VzOlxuICAgIC8vIDEuIGRhdGFJZCBpcyBlbXB0eTogY3JlYXRlIGEgZGVmYXVsdCBmaWx0ZXJcbiAgICAvLyAyLiBBZGQgYSBuZXcgZGF0YXNldCBpZFxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZGF0YUlkOiB7XG4gICAgICBjb25zdCBvbGREYXRhSWQgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBmaWx0ZXIgPSBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHZhbHVlSW5kZXgsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgc3RhdGUuZmlsdGVyc1xuICAgICAgKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVuaXEoWy4uLm9sZERhdGFJZCwgLi4uZmlsdGVyLmRhdGFJZF0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubmFtZToge1xuICAgICAgLy8gd2UgYXJlIHN1cHBvcnRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgZmlsdGVyIG5hbWUgd2lsbCBvbmx5IHVwZGF0ZSBmaWx0ZXIgbmFtZSBidXQgaXQgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHNcbiAgICAgIC8vIHdlIGFyZSBnb25uYSB1c2UgcGFpciBvZiBkYXRhc2V0cyBhbmQgZmllbGRJZHggdG8gdXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB7bWVyZ2VEb21haW46IGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMX1cbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBpZiAoZmlsdGVyLmdwdSkge1xuICAgICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgICBmaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgLy8gcmVtb3ZlIGZpbHRlciBQbG90IGF0IGRhdGFzZXRJZCwgc28gaXQgd2lsbCBiZSByZWNhbGN1bGF0ZWRcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG5cbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICAvLyBvbmx5IGZpbHRlciB0aGUgY3VycmVudCBkYXRhc2V0XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmVuZE5hbWU6IHtcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleFxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgZmlsdGVyID0gZmlsdGVyLmdwdVxuICAgICAgICAgID8gYXNzaWduR3B1Q2hhbm5lbChmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpXG4gICAgICAgICAgOiB7Li4uZmlsdGVyLCBncHVDaGFubmVsOiB1bmRlZmluZWQsIGdwdUVuZENoYW5uZWw6IHVuZGVmaW5lZH07XG4gICAgICAgIHN0YXRlID0gc2V0KFsnZGF0YXNldHMnLCBkYXRhc2V0SWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG4gICAgICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhc2V0SWQpO1xuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgJ2ludmVydGVkJzoge1xuICAgICAgY29uc3Qgc3VwcG9ydHNJbnZlcnNpb24gPSBmaWx0ZXIuZGF0YUlkLmV2ZXJ5KFxuICAgICAgICBkYXRhc2V0SWQgPT4gIXN0YXRlLmRhdGFzZXRzW2RhdGFzZXRJZF0/LmRpc2FibGVEYXRhT3BlcmF0aW9uXG4gICAgICApO1xuICAgICAgZmlsdGVyID0ge1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGludmVydGVkOiBzdXBwb3J0c0ludmVyc2lvbiAmJiBCb29sZWFuKHZhbHVlKVxuICAgICAgfTtcbiAgICAgIGlmIChmaWx0ZXIuaW52ZXJ0ZWQpIHtcbiAgICAgICAgLy8gR1BVIHJhbmdlIHRlc3RzIGNhbiBvbmx5IGtlZXAgdmFsdWVzIGluc2lkZSB0aGUgd2luZG93LlxuICAgICAgICBmaWx0ZXIgPSBkaXNhYmxlR3B1SWZJbnZlcnRlZChmaWx0ZXIpO1xuICAgICAgfSBlbHNlIGlmIChmaWx0ZXJUeXBlVXNlc0dwdShmaWx0ZXIudHlwZSkpIHtcbiAgICAgICAgZmlsdGVyID0gYXNzaWduR3B1Q2hhbm5lbChcbiAgICAgICAgICBzZXRGaWx0ZXJHcHVNb2RlKHsuLi5maWx0ZXIsIGdwdTogdHJ1ZX0sIHN0YXRlLmZpbHRlcnMpLFxuICAgICAgICAgIHN0YXRlLmZpbHRlcnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDoge1xuICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgb25seSBkYXRhc2V0SWQvcyBpZiB3ZSBoYXZlIGFkZGVkL3JlbW92ZWQgbGF5ZXJzXG4gICAgICAvLyAtIGNoZWNrIGZvciBsYXllcklkIGNoYW5nZXMgKFhPUiB3b3JrcyBiZWNhdXNlIG9mIHN0cmluZyB2YWx1ZXMpXG4gICAgICAvLyBpZiBubyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxheWVySWRzLCBkb24ndCBkbyBhbnkgZmlsdGVyaW5nXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBsYXllcklkRGlmZmVyZW5jZSA9IHhvcih2YWx1ZSwgZmlsdGVyLmxheWVySWQpO1xuXG4gICAgICBjb25zdCBsYXllckRhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIGxheWVySWREaWZmZXJlbmNlXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIGRhdGFzZXRzSWRzXG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/Lm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBsYXllcklkOiB2YWx1ZSxcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRzXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIHZhbHVlLCBmaWx0ZXIpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge2ZpbHRlciwgZGF0YXNldElkcywgZGF0YXNldElkc1RvRmlsdGVyLCBzdGF0ZX07XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyUGxvdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgbmV3UHJvcH06IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIXN0YXRlLmZpbHRlcnNbaWR4XSkge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnNbJHtpZHh9XSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgY29uc3QgcHJldmlvdXNOdW1lcmljSW50ZXJ2YWwgPSBuZXdGaWx0ZXIucGxvdFR5cGU/Lm51bWVyaWNJbnRlcnZhbDtcblxuICBmb3IgKGNvbnN0IHByb3AgaW4gbmV3UHJvcCkge1xuICAgIGlmIChwcm9wID09PSAncGxvdFR5cGUnKSB7XG4gICAgICBsZXQgcGxvdFR5cGVVcGRhdGUgPSBuZXdQcm9wLnBsb3RUeXBlO1xuICAgICAgaWYgKHBsb3RUeXBlVXBkYXRlICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwbG90VHlwZVVwZGF0ZSwgJ2dyb3VwQnknKSkge1xuICAgICAgICBwbG90VHlwZVVwZGF0ZSA9IHtcbiAgICAgICAgICAuLi5wbG90VHlwZVVwZGF0ZSxcbiAgICAgICAgICBncm91cEJ5OiBtZXJnZVBsb3RHcm91cEJ5KG5ld0ZpbHRlci5wbG90VHlwZT8uZ3JvdXBCeSwgcGxvdFR5cGVVcGRhdGUuZ3JvdXBCeSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyhwbG90VHlwZVVwZGF0ZSkpKG5ld0ZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChwcm9wID09PSAneUF4aXMnKSB7XG4gICAgICBjb25zdCBjaGFydFR5cGUgPSBuZXdQcm9wLnlBeGlzID8gUExPVF9UWVBFUy5saW5lQ2hhcnQgOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbTtcblxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHt0eXBlOiBjaGFydFR5cGV9KSkobWVyZ2VfKG5ld1Byb3ApKG5ld0ZpbHRlcikpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG51bWVyaWNJbnRlcnZhbENoYW5nZWQgPVxuICAgIG5ld0ZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMucmFuZ2UgJiZcbiAgICBuZXdGaWx0ZXIucGxvdFR5cGU/Lm51bWVyaWNJbnRlcnZhbCAhPT0gcHJldmlvdXNOdW1lcmljSW50ZXJ2YWw7XG4gIGlmIChudW1lcmljSW50ZXJ2YWxDaGFuZ2VkKSB7XG4gICAgbmV3RmlsdGVyID0gey4uLihuZXdGaWx0ZXIgYXMgUmFuZ2VGaWx0ZXIpLCBiaW5zOiB1bmRlZmluZWQsIGxpbmVDaGFydDogdW5kZWZpbmVkfTtcbiAgfVxuXG4gIG5ld0ZpbHRlciA9IHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlciwgdW5kZWZpbmVkLCBzdGF0ZS5sYXllcnMpO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gaWR4ID8gbmV3RmlsdGVyIDogZikpXG4gIH07XG5cbiAgaWYgKFxuICAgIG51bWVyaWNJbnRlcnZhbENoYW5nZWQgJiZcbiAgICBuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnJhbmdlICYmXG4gICAgbmV3RmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICApIHtcbiAgICBjb25zdCBhZGp1c3RlZCA9IGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3coXG4gICAgICBuZXdTdGF0ZSxcbiAgICAgIG5ld0ZpbHRlciBhcyBSYW5nZUZpbHRlcixcbiAgICAgIGdldFBsb3RCYXNlSW5kZXhCeURhdGFJZChuZXdTdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVyLCBuZXdTdGF0ZS5sYXllcnMpXG4gICAgKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhZGp1c3RlZC52YWx1ZSkgJiYgYWRqdXN0ZWQudmFsdWUuZXZlcnkoTnVtYmVyLmlzRmluaXRlKSkge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHgsIHByb3A6ICd2YWx1ZScsIHZhbHVlOiBhZGp1c3RlZC52YWx1ZX0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgIWFjdGlvbi5kYXRhSWRcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBpZDogYWN0aW9uLmlkfSldXG4gICAgICB9O1xuXG4vKipcbiAqIENyZWF0ZSBvciB1cGRhdGUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgZGF0YUlkLCBmaWVsZCwgdmFsdWV9ID0gYWN0aW9uO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbEluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBpZCk7XG4gIGxldCBmaWx0ZXJJbmRleCA9IG9yaWdpbmFsSW5kZXg7XG4gIGlmICghaWQgJiYgIWRhdGFJZCkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuICBpZiAob3JpZ2luYWxJbmRleCA8IDAgJiYgZGF0YUlkKSB7XG4gICAgbmV3U3RhdGUgPSBhZGRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkfSk7XG4gICAgaWYgKG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoICE9PSBzdGF0ZS5maWx0ZXJzLmxlbmd0aCArIDEpIHtcbiAgICAgIC8vIE5vIG5ldyBmaWx0ZXIgd2FzIGFkZGVkXG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIC8vIEhlcmUgd2UgYXJlIGFzc3VtaW5nIHRoYXQgdGhlIGZpbHRlciB3YXMgYWRkZWQgYXQgdGhlIGVuZFxuICAgIGZpbHRlckluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5sZW5ndGggLSAxO1xuICAgIG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdID0ge1xuICAgICAgLi4ubmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0sXG4gICAgICAuLi4oaWQgPyB7aWR9IDogbnVsbClcbiAgICB9O1xuICB9XG5cbiAgLy8gTm8gbmVlZCB0byB1cGRhdGUgdGhpcyBpZiBpdCdzIGEgbmV3bHkgY3JlYXRlZCBmaWx0ZXJcbiAgLy8gRmlyc3Qgd2UgbWFrZSBzdXJlIGFsbCB0aGUgZGF0YUlkcyB0aGF0IGZpZWxkcyByZWZlciB0byBhcmUgdXBkYXRlZFxuICBpZiAob3JpZ2luYWxJbmRleCA+PSAwICYmIGRhdGFJZCkge1xuICAgIC8vIElmIHRoZSBkYXRhSWQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggb25lIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShkYXRhSWQpID8gZGF0YUlkIDogW2RhdGFJZF0pLnJlZHVjZSgoYWNjdSwgZCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ2RhdGFJZCcsXG4gICAgICAgIHZhbHVlOiBkLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSBmaWVsZHNcbiAgaWYgKGZpZWxkKSB7XG4gICAgLy8gSWYgdGhlIGZpZWxkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIGZpZWxkIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShmaWVsZCkgPyBmaWVsZCA6IFtmaWVsZF0pLnJlZHVjZSgoYWNjdSwgZiwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ25hbWUnLFxuICAgICAgICB2YWx1ZTogZixcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgdmFsdWUgc2VwYXJhdGVseVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySW5kZXgsIHByb3A6ICd2YWx1ZScsIHZhbHVlfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBsYXllciBjb2xvciBwYWxldHRlIHVpIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b2xkTGF5ZXIsIHByb3AsIG5ld0NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9sZFZpeENvbmZpZyA9IG9sZExheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHByb3AsIG5ld0NvbmZpZyk7XG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGlmIChvbGRWaXhDb25maWcgIT09IG5ld1Zpc0NvbmZpZykge1xuICAgIHJldHVybiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3VmlzQ29uZmlnOiB7XG4gICAgICAgIFtwcm9wXTogbmV3VmlzQ29uZmlnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICB9O1xufTtcblxuLyoqXG4gKiBTdGFydCBhbmQgZW5kIGZpbHRlciBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgaXNBbmltYXRpbmc6ICFmLmlzQW5pbWF0aW5nfSA6IGYpKVxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWc6IEFuaW1hdGlvbkNvbmZpZyB8IEZpbHRlckFuaW1hdGlvbkNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gJ2RhdGFJZCcgaW4gY29uZmlnICYmICdhbmltYXRpb25XaW5kb3cnIGluIGNvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcbiAgaWYgKGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZykpIHtcbiAgICAvLyBGaW5kIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb25cbiAgICAvLyBBc3N1bWluZyB0aGVyZSdzIG9ubHkgb25lIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb24sIHNlZSBzZXRGaWx0ZXJWaWV3VXBkYXRlclxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+ICFpc1NpZGVGaWx0ZXIoZikpO1xuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IHsuLi5maWx0ZXIsIC4uLmNvbmZpZ307XG4gICAgcmV0dXJuIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihzdGF0ZSwgYXBwbHlGaWx0ZXJDb25maWcoZmlsdGVyLmlkLCBuZXdGaWx0ZXIpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBpc0FuaW1hdGluZzogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5pc0FuaW1hdGluZ1xuICB9XG59KTtcblxuLyoqXG4gKiBIaWRlIGFuZCBzaG93IGxheWVyIGFuaW1hdGlvbiBjb250cm9sXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGhpZGVDb250cm9sOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmhpZGVDb250cm9sXG4gIH1cbn0pO1xuXG4vKipcbiAqIENoYW5nZSBmaWx0ZXIgYW5pbWF0aW9uIHNwZWVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBzcGVlZDogYWN0aW9uLnNwZWVkfSA6IGYpKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGFuaW1hdGlvbiBzcGVlZCB3aXRoIHRoZSB2ZXJ0aWNhbCBzcGVlZCBzbGlkZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3NwZWVkfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBzcGVlZFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBsYXJnZXIgdGltZSBmaWx0ZXIgYXQgYm90dG9tIGZvciB0aW1lIHBsYXliYWNrIChhcHBseSB0byB0aW1lIGZpbHRlciBvbmx5KVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclZpZXdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclZpZXdVcGRhdGVyQWN0aW9uXG4pID0+IHtcbiAgY29uc3Qge3ZpZXcsIGlkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyA9IHZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkO1xuICBjb25zdCBmaWx0ZXJzID0gc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+XG4gICAgaSA9PT0gaWR4XG4gICAgICA/IHtcbiAgICAgICAgICAuLi5mLFxuICAgICAgICAgIHZpZXdcbiAgICAgICAgfVxuICAgICAgOiBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXdcbiAgICAgID8ge1xuICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICAgICAgICB9XG4gICAgICA6IGZcbiAgKTtcblxuICBjb25zdCBvcGVuZWRGaWx0ZXIgPSBmaWx0ZXJzW2lkeF07XG4gIGlmICh2aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCAmJiBvcGVuZWRGaWx0ZXI/LnR5cGUgPT09IEZJTFRFUl9UWVBFUy5yYW5nZSkge1xuICAgIGNvbnN0IGludmFsaWRhdGVkRmlsdGVyID0gdG9BcnJheShvcGVuZWRGaWx0ZXIuZGF0YUlkKS5yZWR1Y2UocmVtb3ZlRmlsdGVyUGxvdCwgb3BlbmVkRmlsdGVyKTtcbiAgICBmaWx0ZXJzW2lkeF0gPSB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBpbnZhbGlkYXRlZEZpbHRlciwgdW5kZWZpbmVkLCBzdGF0ZS5sYXllcnMpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzXG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZXMgZmlsdGVyIGZlYXR1cmUgdmlzaWJpbGl0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbYWN0aW9uLmlkeF07XG4gIGNvbnN0IGlzVmlzaWJsZSA9IGdldChmaWx0ZXIsIFsndmFsdWUnLCAncHJvcGVydGllcycsICdpc1Zpc2libGUnXSk7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAnZW5hYmxlZCcsXG4gICAgdmFsdWU6ICFpc1Zpc2libGVcbiAgfSk7XG5cbiAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZpbHRlci52YWx1ZSwgZmlsdGVyLmlkLCB7XG4gICAgICBpc1Zpc2libGU6ICFpc1Zpc2libGVcbiAgICB9KVxuICB9KTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZCwgaWR9ID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBbXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZSgwLCBpZHgpLFxuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoaWR4ICsgMSwgc3RhdGUuZmlsdGVycy5sZW5ndGgpXG4gIF07XG5cbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoZGF0YUlkLCBzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVycywgc3RhdGUubGF5ZXJzKTtcbiAgY29uc3QgbmV3RWRpdG9yID1cbiAgICBnZXRGaWx0ZXJJZEluRmVhdHVyZShzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlKSA9PT0gaWRcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZS5lZGl0b3I7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycyddLCBuZXdGaWx0ZXJzLCBzdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHVwZGF0ZUZpbHRlclBsb3RzQWZ0ZXJGaWx0ZXJpbmcobmV3U3RhdGUsIGRhdGFJZCk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZWRpdG9yJ10sIG5ld0VkaXRvciwgbmV3U3RhdGUpO1xuXG4gIHJldHVybiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFJZCwgdW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQgbmV3TGF5ZXI7XG4gIGxldCBuZXdMYXllckRhdGE7XG4gIGlmIChhY3Rpb24uY29uZmlnKSB7XG4gICAgbmV3TGF5ZXIgPSBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGUsIGFjdGlvbi5jb25maWcpO1xuICAgIGlmICghbmV3TGF5ZXIpIHtcbiAgICAgIENvbnNvbGUud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjcmVhdGUgbGF5ZXIgZnJvbSBjb25maWcsIGl0IHVzdWFsbHkgbWVhbnMgdGhlIGNvbmZpZyBpcyBub3QgYmUgaW4gY29ycmVjdCBmb3JtYXQnLFxuICAgICAgICBhY3Rpb24uY29uZmlnXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUpO1xuICAgIG5ld0xheWVyID0gcmVzdWx0LmxheWVyO1xuICAgIG5ld0xheWVyRGF0YSA9IHJlc3VsdC5sYXllckRhdGE7XG4gIH0gZWxzZSB7XG4gICAgLy8gY3JlYXRlIGFuIGVtcHR5IGxheWVyIHdpdGggYSBzcGVjaWZpYyBkYXRhc2V0IG9yIGEgZGVmYXVsdCBvbmVcbiAgICBjb25zdCBkZWZhdWx0RGF0YXNldCA9IGFjdGlvbi5kYXRhc2V0SWQgPz8gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpWzBdO1xuICAgIG5ld0xheWVyID0gbmV3IExheWVyKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlLFxuICAgICAgZGF0YUlkOiBkZWZhdWx0RGF0YXNldFxuICAgIH0pO1xuICAgIG5ld0xheWVyRGF0YSA9IHt9O1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgbmV3TGF5ZXJdLFxuICAgIGxheWVyRGF0YTogWy4uLnN0YXRlLmxheWVyRGF0YSwgbmV3TGF5ZXJEYXRhXSxcbiAgICAvLyBhZGQgbmV3IGxheWVyIGF0IHRoZSB0b3BcbiAgICBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWQsIC4uLnN0YXRlLmxheWVyT3JkZXJdLFxuICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVyKVxuICB9O1xuXG4gIGlmIChuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIHJlbW92ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyVXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgIC8vIGludmFsaWQgaW5kZXhcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGxheWVyIHdpdGggaW52YWxpZCBpZHxpZHggJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGNsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcbiAgY29uc3QgbGF5ZXJUb1JlbW92ZSA9IGxheWVyc1tpZHhdO1xuICBjb25zdCBpbnRlcmFjdGlvbkNvbmZpZyA9IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnXG4gICAgPyByZW1vdmVMYXllckZyb21ab29tT3BhY2l0eShzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZywgbGF5ZXJUb1JlbW92ZS5pZClcbiAgICA6IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnO1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IGZpbHRlck91dEJ5SWQobGF5ZXJUb1JlbW92ZS5pZCkobGF5ZXJzKSxcbiAgICBsYXllckRhdGE6IHJlbW92ZUVsZW1lbnRBdEluZGV4KGlkeCkobGF5ZXJEYXRhKSxcbiAgICBsYXllck9yZGVyOiByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobGF5ZXJPcmRlciwgbGF5ZXJUb1JlbW92ZS5pZCksXG4gICAgY2xpY2tlZDogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm8sXG4gICAgc3BsaXRNYXBzOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllclRvUmVtb3ZlKSxcbiAgICAvLyBPbmx5IHJlcGxhY2UgaW50ZXJhY3Rpb25Db25maWcgd2hlbiBhIGNvbnRyb2xsZXIgYWN0dWFsbHkgbGlzdGVkIHRoaXMgbGF5ZXIuXG4gICAgLy8gUGFydGlhbCB0ZXN0IHN0YXRlcyBvbWl0IGl0LCBhbmQgYWRkaW5nIHRoZSBrZXkgd291bGQgY2hhbmdlIHRoYXQgc2hhcGUuXG4gICAgLi4uKGludGVyYWN0aW9uQ29uZmlnICE9PSBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyA/IHtpbnRlcmFjdGlvbkNvbmZpZ30gOiB7fSlcbiAgICAvLyBUT0RPOiB1cGRhdGUgZmlsdGVycywgY3JlYXRlIGhlbHBlciB0byByZW1vdmUgbGF5ZXIgZm9ybSBmaWx0ZXIgKHJlbW92ZSBsYXllcmlkIGFuZCBkYXRhaWQpIGlmIG1hcHBlZFxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4oXG4gICAgcmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyhcbiAgICAgIG5ld1N0YXRlLFxuICAgICAgY2hhcnQgPT4gaXNMYXllckNoYXJ0Q29uZmlnKGNoYXJ0KSAmJiBjaGFydC5sYXllcklkID09PSBsYXllclRvUmVtb3ZlLmlkXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIFJlb3JkZXIgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJPcmRlcjogb3JkZXJcbn0pO1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXROZXdMYXllckdyb3VwKGFjdGlvbik7XG4gIGxldCBuZXdMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIGlmIChhY3Rpb24ubGF5ZXJPcmRlcikge1xuICAgIGFjdGlvbi5sYXllck9yZGVyLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgICBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld0xheWVyT3JkZXIsIGxheWVySWQgYXMgc3RyaW5nKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKG5ld0xheWVyT3JkZXIsIGxheWVyR3JvdXApXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGdyb3VwIGFuZCBhbGwgbGF5ZXJzIHdpdGhpbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXBUb1JlbW92ZSA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cFRvUmVtb3ZlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbGF5ZXJJZHNUb1JlbW92ZSA9IGdldEZsYXRMYXllck9yZGVyKGxheWVyR3JvdXBUb1JlbW92ZS5sYXllck9yZGVyKTtcbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBsYXllcklkc1RvUmVtb3ZlLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgbmV3U3RhdGUgPSByZW1vdmVMYXllclVwZGF0ZXIobmV3U3RhdGUsIHtpZDogbGF5ZXJJZH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwVG9SZW1vdmUpO1xuICByZXR1cm4ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGEgbGF5ZXIgZ3JvdXAgKGxhYmVsLCB2aXNpYmlsaXR5LCBsYXllciBtZW1iZXJzaGlwKVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgb3B0aW9uc30gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7Li4uc3RhdGV9O1xuXG4gIGlmIChvcHRpb25zLmxheWVyT3JkZXIpIHtcbiAgICBuZXdTdGF0ZS5sYXllck9yZGVyID0gWy4uLmxheWVyR3JvdXAubGF5ZXJPcmRlciwgLi4ubmV3U3RhdGUubGF5ZXJPcmRlcl07XG4gICAgb3B0aW9ucy5sYXllck9yZGVyLmZvckVhY2gobGF5ZXJJZCA9PiB7XG4gICAgICBuZXdTdGF0ZS5sYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGxheWVySWQgYXMgc3RyaW5nKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyR3JvdXAgPSB7XG4gICAgLi4ubGF5ZXJHcm91cCxcbiAgICAuLi5vcHRpb25zXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyR3JvdXAuaXNWaXNpYmxlICE9PSBsYXllckdyb3VwLmlzVmlzaWJsZSkge1xuICAgIGNvbnN0IGxheWVySWRzID0gZ2V0RmxhdExheWVyT3JkZXIobmV3TGF5ZXJHcm91cC5sYXllck9yZGVyKTtcbiAgICBuZXdTdGF0ZSA9IG5ld1N0YXRlLmxheWVycy5yZWR1Y2UoKGFjYywgbGF5ZXIpID0+IHtcbiAgICAgIGlmIChsYXllcklkcy5pbmNsdWRlcyhsYXllci5pZCkpIHtcbiAgICAgICAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihhY2MsIHtcbiAgICAgICAgICBvbGRMYXllcjogbGF5ZXIsXG4gICAgICAgICAgbmV3Q29uZmlnOiB7aXNWaXNpYmxlOiBuZXdMYXllckdyb3VwLmlzVmlzaWJsZX1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG5ld0xheWVyR3JvdXApO1xuICByZXR1cm4ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGF5ZXIgdG8gYSBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICBpZiAoIWxheWVyR3JvdXAgfHwgIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kKGVudHJ5ID0+IGVudHJ5ID09PSBsYXllcklkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihsYXllckdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICByZXR1cm4gdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZDogbGF5ZXJHcm91cElkLFxuICAgIG9wdGlvbnM6IHtsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJ9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBmcm9tIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7bGF5ZXJHcm91cElkLCBsYXllcklkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICBpZiAoIWxheWVyR3JvdXApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3TGF5ZXJHcm91cE9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogU3dhcCBsYXllciBvcmRlciBlbnRyaWVzIGJldHdlZW4gcm9vdCBhbmQgZ3JvdXBzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7b3JpZ2luTGF5ZXJJZCwgZGVzdGluYXRpb25MYXllcklkLCBvcmlnaW5MYXllckdyb3VwSWQsIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfSA9IGFjdGlvbjtcblxuICBpZiAoIW9yaWdpbkxheWVyR3JvdXBJZCAmJiAhZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBvcmlnaW5JbmRleCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICk7XG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCAmJiBvcmlnaW5JbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBkZXN0aW5hdGlvbkxheWVySWRcbiAgICAgICk7XG4gICAgICBpZiAoZGVzdGluYXRpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5TW92ZShzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdGluYXRpb25JbmRleCk7XG4gICAgICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgbGV0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25JbmRleCA9IG5ld0xheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZmFsc2VcbiAgICAgICk7XG4gICAgICBuZXdMYXllck9yZGVyLnNwbGljZShkZXN0aW5hdGlvbkluZGV4ID09PSAtMSA/IDAgOiBkZXN0aW5hdGlvbkluZGV4LCAwLCBvcmlnaW5MYXllcklkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IFsuLi5uZXdMYXllck9yZGVyLCBvcmlnaW5MYXllcklkXTtcbiAgICB9XG4gICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCA9PT0gZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJHcm91cElkKTtcbiAgICAgIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3Qgb3JpZ2luSW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBvcmlnaW5MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKG9yaWdpbkluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgICBjb25zdCBkZXN0SW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChkZXN0SW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGU7XG4gICAgICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5TW92ZShsYXllckdyb3VwLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0SW5kZXgpO1xuICAgICAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgLi4ubGF5ZXJHcm91cCxcbiAgICAgICAgICBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIC8vIENyb3NzLWdyb3VwIG1vdmU6IHJlbW92ZSBmcm9tIG9yaWdpbiwgdGhlbiBhZGQgdG8gZGVzdGluYXRpb25cbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGxldCBuZXdTdGF0ZSA9IGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlcihcbiAgICAgIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcn0sXG4gICAgICB7bGF5ZXJJZDogb3JpZ2luTGF5ZXJJZCwgbGF5ZXJHcm91cElkOiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH1cbiAgICApO1xuXG4gICAgaWYgKGRlc3RpbmF0aW9uTGF5ZXJJZCkge1xuICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCk7XG4gICAgICBjb25zdCBkZXN0SW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQpO1xuICAgICAgaWYgKG9yaWdpbkluZGV4ICE9PSAtMSAmJiBkZXN0SW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5TW92ZShsYXllckdyb3VwLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0SW5kZXgpO1xuICAgICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgICBsYXllck9yZGVyOiB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIHtcbiAgICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgICBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICBpZiAoIW9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGNvbnN0IGxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgcmV0dXJuIGFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlcihcbiAgICAgIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcn0sXG4gICAgICB7bGF5ZXJJZDogb3JpZ2luTGF5ZXJJZCwgbGF5ZXJHcm91cElkOiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH1cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcblxuLyoqXG4gKiBkdXBsaWNhdGUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgIXN0YXRlLmxheWVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllciAke2lkeH0gbm90IGZvdW5kIGluIGxheWVyT3JkZXJgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbCA9IGxheWVyc1tpZHhdO1xuXG4gIGNvbnN0IG9yaWdpbmFsTGF5ZXJPcmRlcklkeCA9IGdldEluZGV4RnJvbUxheWVyRW50cnlJZChzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5hbC5pZCk7XG4gIGxldCBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfWA7XG4gIGxldCBwb3N0Zml4ID0gMDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICB3aGlsZSAobGF5ZXJzLmZpbmQobCA9PiBsLmNvbmZpZy5sYWJlbCA9PT0gbmV3TGFiZWwpKSB7XG4gICAgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH0gJHsrK3Bvc3RmaXh9YDtcbiAgfVxuXG4gIC8vIGNvbGxlY3QgbGF5ZXIgY29uZmlnIGZyb20gb3JpZ2luYWxcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvcmlnaW5hbCwgc3RhdGUuc2NoZW1hKTtcblxuICAvLyBhc3NpZ24gbmV3IGlkIGFuZCBsYWJlbCB0byBjb3BpZWQgbGF5ZXJcbiAgaWYgKCFsb2FkZWRMYXllcj8uY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxvYWRlZExheWVyLmNvbmZpZy5sYWJlbCA9IG5ld0xhYmVsO1xuICBsb2FkZWRMYXllci5pZCA9IGdlbmVyYXRlSGFzaElkKExBWUVSX0lEX0xFTkdUSCk7XG5cbiAgLy8gYWRkIGxheWVyIHRvIHN0YXRlXG4gIGxldCBuZXh0U3RhdGUgPSBhZGRMYXllclVwZGF0ZXIoc3RhdGUsIHtjb25maWc6IGxvYWRlZExheWVyfSk7XG4gIC8vIHJldHJpZXZlIG5ld2x5IGNyZWF0ZWQgbGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSBuZXh0U3RhdGUubGF5ZXJzW25leHRTdGF0ZS5sYXllcnMubGVuZ3RoIC0gMV07XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIG9yaWdpbmFsIGxheWVyIGlzIGluc2lkZSBhIGdyb3VwXG4gIGNvbnN0IHBhcmVudEdyb3VwID0gZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuXG4gIGlmIChwYXJlbnRHcm91cCkge1xuICAgIC8vIExheWVyIGlzIGluc2lkZSBhIGdyb3VwIC0gcmVtb3ZlIHRoZSBwcmVwZW5kZWQgaWQgZnJvbSByb290IGFuZCBpbnNlcnQgaW50byB0aGUgZ3JvdXBcbiAgICBjb25zdCBsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCA9IG5leHRTdGF0ZS5sYXllck9yZGVyLnNsaWNlKDEpO1xuICAgIGNvbnN0IGlkeEluR3JvdXAgPSBwYXJlbnRHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlID0+IGUgPT09IG9yaWdpbmFsLmlkKTtcbiAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheUluc2VydChwYXJlbnRHcm91cC5sYXllck9yZGVyLCBpZHhJbkdyb3VwLCBuZXdMYXllci5pZCk7XG4gICAgY29uc3QgdXBkYXRlZEdyb3VwID0gey4uLnBhcmVudEdyb3VwLCBsYXllck9yZGVyOiBuZXdHcm91cExheWVyT3JkZXJ9O1xuICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkLCB1cGRhdGVkR3JvdXApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMYXllciBpcyBhdCByb290IGxldmVsIC0gdXNlIG9yaWdpbmFsIGluZGV4LWJhc2VkIGluc2VydGlvblxuICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheUluc2VydChcbiAgICAgIG5leHRTdGF0ZS5sYXllck9yZGVyLnNsaWNlKDEsIG5leHRTdGF0ZS5sYXllck9yZGVyLmxlbmd0aCksXG4gICAgICBvcmlnaW5hbExheWVyT3JkZXJJZHgsXG4gICAgICBuZXdMYXllci5pZFxuICAgICk7XG4gICAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSlcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKGBDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSAke0xJR0hUX0FORF9TSEFET1dfRUZGRUNULm5hbWV9IGVmZmVjdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgfHwgZWZmZWN0LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEUgfHwgZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdCA9IGNyZWF0ZUVmZmVjdChhY3Rpb24uY29uZmlnKTtcblxuICAvLyBjb2xsYXBzZSBjb25maWd1cmF0b3JzIGZvciBvdGhlciBlZmZlY3RzXG4gIHN0YXRlLmVmZmVjdHMuZm9yRWFjaChlZmZlY3QgPT4gZWZmZWN0LnNldFByb3BzKHtpc0NvbmZpZ0FjdGl2ZTogZmFsc2V9KSk7XG5cbiAgY29uc3QgZWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzLCBuZXdFZmZlY3RdO1xuICBjb25zdCBlZmZlY3RPcmRlciA9IGZpeEVmZmVjdE9yZGVyKGVmZmVjdHMsIFtuZXdFZmZlY3QuaWQsIC4uLnN0YXRlLmVmZmVjdE9yZGVyXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIHJlbW92ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7ZWZmZWN0cywgZWZmZWN0T3JkZXJ9ID0gc3RhdGU7XG4gIGNvbnN0IGVmZmVjdFRvUmVtb3ZlID0gZWZmZWN0c1tpZHhdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZml4ZWQgaW4gdHNcbiAgICBlZmZlY3RzOiBmaWx0ZXJPdXRCeUlkKGVmZmVjdFRvUmVtb3ZlLmlkKShlZmZlY3RzKSxcbiAgICBlZmZlY3RPcmRlcjogZWZmZWN0T3JkZXIuZmlsdGVyKGVmZmVjdElkID0+IGVmZmVjdElkICE9PSBlZmZlY3RUb1JlbW92ZS5pZClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVvcmRlciBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZmZlY3RPcmRlcjogZml4RWZmZWN0T3JkZXIoc3RhdGUuZWZmZWN0cywgWy4uLm9yZGVyXSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcHJvcHN9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGVmZmVjdE9yZGVyID0gc3RhdGUuZWZmZWN0T3JkZXI7XG4gIGlmIChwcm9wcy5pZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmlkICE9PSBpZCkge1xuICAgIGNvbnN0IGlkeDIgPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IHByb3BzLmlkKTtcbiAgICBpZiAoaWR4MiA+PSAwKSB7XG4gICAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGV4aXN0aW5nIGVmZmVjdCBpZCAke2lkfWApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGVmZmVjdE9yZGVyID0gZWZmZWN0T3JkZXIubWFwKGVmZmVjdE9yZGVySWQgPT5cbiAgICAgIGVmZmVjdE9yZGVySWQgPT09IGlkID8gKHByb3BzLmlkIGFzIHN0cmluZykgOiBlZmZlY3RPcmRlcklkXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGVmZmVjdCA9IHN0YXRlLmVmZmVjdHNbaWR4XTtcbiAgY29uc3QgbmV4dFBhcmFtcyA9IHByb3BzLnBhcmFtZXRlcnM7XG4gIC8vIEEgdGltZXN0YW1wLW9ubHkgbm8tb3Agc3RpbGwgdXNlZCB0byBhbGxvY2F0ZSBhIG5ldyB2aXNTdGF0ZSAoc2V0UHJvcHNcbiAgLy8gbXV0YXRlcyBpbiBwbGFjZSkuIFRoYXQgcmV0cmlnZ2VyZWQgbmVzdGVkIHJlYWN0LXJlZHV4IGNvbm5lY3Qgc3Vic2NyaWJlcnNcbiAgLy8gd2hpbGUgZHJhZ2dpbmcgdGhlIExpZ2h0ICYgU2hhZG93IGRheS10aW1lIHNsaWRlciB1bnRpbCBSZWFjdCB0aHJld1xuICAvLyBcIk1heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkXCIuXG4gIGlmIChcbiAgICBuZXh0UGFyYW1zICYmXG4gICAgT2JqZWN0LmtleXMocHJvcHMpLmxlbmd0aCA9PT0gMSAmJlxuICAgIE9iamVjdC5rZXlzKG5leHRQYXJhbXMpLmxlbmd0aCA9PT0gMSAmJlxuICAgIG5leHRQYXJhbXMudGltZXN0YW1wICE9IG51bGwgJiZcbiAgICBuZXh0UGFyYW1zLnRpbWVzdGFtcCA9PT0gZWZmZWN0LnBhcmFtZXRlcnMudGltZXN0YW1wXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0c107XG4gIG5ld0VmZmVjdHNbaWR4XS5zZXRQcm9wcyhwcm9wcyk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG5mdW5jdGlvbiBpc0xheWVyQ2hhcnRDb25maWcoY2hhcnQ6IENoYXJ0Q29uZmlnKTogY2hhcnQgaXMgTGF5ZXJDaGFydENvbmZpZyB7XG4gIHJldHVybiBjaGFydC50eXBlID09PSAnbGF5ZXJDaGFydCc7XG59XG5cbmZ1bmN0aW9uIG1lcmdlQ2hhcnRDb25maWcoY2hhcnQ6IENoYXJ0Q29uZmlnLCBwcm9wczogUGFydGlhbDxDaGFydENvbmZpZz4pOiBDaGFydENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgLi4uY2hhcnQsXG4gICAgLi4ucHJvcHMsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uY2hhcnQuZGlzcGxheSxcbiAgICAgIC4uLihwcm9wcy5kaXNwbGF5IHx8IHt9KVxuICAgIH0sXG4gICAgY2hhcnREaXNwbGF5OiB7XG4gICAgICAuLi5jaGFydC5jaGFydERpc3BsYXksXG4gICAgICAuLi4oKHByb3BzIGFzIENoYXJ0Q29uZmlnKS5jaGFydERpc3BsYXkgfHwge30pXG4gICAgfVxuICB9IGFzIENoYXJ0Q29uZmlnO1xufVxuXG5mdW5jdGlvbiBheGlzRmllbGRJZlByZXNlbnQ8VCBleHRlbmRzIHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbDsgdGl0bGU/OiBzdHJpbmcgfCBudWxsfT4oXG4gIGF4aXM6IFQgfCB1bmRlZmluZWQsXG4gIGZpZWxkTmFtZXM6IFNldDxzdHJpbmc+XG4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFheGlzPy5maWVsZD8ubmFtZSB8fCBmaWVsZE5hbWVzLmhhcyhheGlzLmZpZWxkLm5hbWUpKSB7XG4gICAgcmV0dXJuIGF4aXM7XG4gIH1cbiAgcmV0dXJuIHsuLi5heGlzLCBmaWVsZDogbnVsbCwgdGl0bGU6IG51bGx9O1xufVxuXG5mdW5jdGlvbiBkcm9wTWlzc2luZ0NoYXJ0RmllbGRzKFxuICBjaGFydDogQ2hhcnRDb25maWcsXG4gIGRhdGFzZXQ6IHtmaWVsZHM/OiB7bmFtZTogc3RyaW5nfVtdfSB8IHVuZGVmaW5lZFxuKTogQ2hhcnRDb25maWcge1xuICBjb25zdCBmaWVsZE5hbWVzID0gbmV3IFNldCgoZGF0YXNldD8uZmllbGRzIHx8IFtdKS5tYXAoZmllbGQgPT4gZmllbGQubmFtZSkpO1xuICBjb25zdCBuZXh0ID0gY2hhcnQgYXMgQ2hhcnRDb25maWcgJiB7XG4gICAgeEF4aXM/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIHlBeGlzPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgICBheGlzPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgICBncm91cEJ5Pzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgICB2YWx1ZT86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gIH07XG4gIHJldHVybiBtZXJnZUNoYXJ0Q29uZmlnKGNoYXJ0LCB7XG4gICAgeEF4aXM6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LnhBeGlzLCBmaWVsZE5hbWVzKSxcbiAgICB5QXhpczogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQueUF4aXMsIGZpZWxkTmFtZXMpLFxuICAgIGF4aXM6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LmF4aXMsIGZpZWxkTmFtZXMpLFxuICAgIGdyb3VwQnk6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0Lmdyb3VwQnksIGZpZWxkTmFtZXMpLFxuICAgIHZhbHVlOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC52YWx1ZSwgZmllbGROYW1lcylcbiAgfSBhcyBQYXJ0aWFsPENoYXJ0Q29uZmlnPik7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnM8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHNob3VsZFJlbW92ZTogKGNoYXJ0OiBDaGFydENvbmZpZykgPT4gYm9vbGVhblxuKTogVCB7XG4gIGNvbnN0IGNoYXJ0cyA9IHN0YXRlLmNoYXJ0cyB8fCBbXTtcbiAgY29uc3QgcmVtb3ZlZCA9IGNoYXJ0cy5maWx0ZXIoc2hvdWxkUmVtb3ZlKTtcbiAgaWYgKCFyZW1vdmVkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCByZW1vdmVkSWRzID0gbmV3IFNldChyZW1vdmVkLm1hcChjaGFydCA9PiBjaGFydC5pZCkpO1xuICBjb25zdCBmaWx0ZXJJZHMgPSBuZXcgU2V0KFxuICAgIHJlbW92ZWQuZmxhdE1hcChjaGFydCA9PiB7XG4gICAgICBjb25zdCBpZCA9IGNoYXJ0LmNyb3NzRmlsdGVyPy5maWx0ZXJJZDtcbiAgICAgIHJldHVybiBpZCA/IFtpZCwgYCR7aWR9LXhgLCBgJHtpZH0teWBdIDogW107XG4gICAgfSlcbiAgKTtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2hhcnRzOiBjaGFydHMuZmlsdGVyKGNoYXJ0ID0+ICFyZW1vdmVkSWRzLmhhcyhjaGFydC5pZCkpXG4gIH07XG4gIGlmIChmaWx0ZXJJZHMuc2l6ZSkge1xuICAgIG5leHRTdGF0ZSA9IG5leHRTdGF0ZS5maWx0ZXJzLnJlZHVjZVJpZ2h0KChhY2N1LCBmaWx0ZXIsIGlkeCkgPT4ge1xuICAgICAgcmV0dXJuIGZpbHRlcklkcy5oYXMoZmlsdGVyLmlkKSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIoYWNjdSwge2lkeH0pIDogYWNjdTtcbiAgICB9LCBuZXh0U3RhdGUpO1xuICB9XG4gIHJldHVybiBuZXh0U3RhdGUgYXMgVDtcbn1cblxuLyoqXG4gKiBBZGQgYSBjaGFydFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZENoYXJ0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y2hhcnR9OiBWaXNTdGF0ZUFjdGlvbnMuQWRkQ2hhcnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghY2hhcnQ/LmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICgoc3RhdGUuY2hhcnRzIHx8IFtdKS5zb21lKGV4aXN0aW5nID0+IGV4aXN0aW5nLmlkID09PSBjaGFydC5pZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjaGFydHM6IFtcbiAgICAgIC4uLihzdGF0ZS5jaGFydHMgfHwgW10pLm1hcChleGlzdGluZyA9PiAoe1xuICAgICAgICAuLi5leGlzdGluZyxcbiAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgIC4uLmV4aXN0aW5nLmRpc3BsYXksXG4gICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlLFxuICAgICAgICAgIGlzSnNvbkVkaXRvckFjdGl2ZTogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSkpLFxuICAgICAge1xuICAgICAgICAuLi5jaGFydCxcbiAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgIC4uLmNoYXJ0LmRpc3BsYXksXG4gICAgICAgICAgaXNDb25maWdBY3RpdmU6IGNoYXJ0LmRpc3BsYXk/LmlzQ29uZmlnQWN0aXZlID8/IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhIGNoYXJ0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlQ2hhcnRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcHJvcHN9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlQ2hhcnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IChzdGF0ZS5jaGFydHMgfHwgW10pLmZpbmRJbmRleChjaGFydCA9PiBjaGFydC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwcmV2ID0gc3RhdGUuY2hhcnRzW2lkeF07XG4gIGNvbnN0IGRhdGFJZENoYW5nZWQgPSB0eXBlb2YgcHJvcHMuZGF0YUlkID09PSAnc3RyaW5nJyAmJiBwcm9wcy5kYXRhSWQgIT09IHByZXYuZGF0YUlkO1xuICBjb25zdCBsYXllcklkQ2hhbmdlZCA9XG4gICAgaXNMYXllckNoYXJ0Q29uZmlnKHByZXYpICYmXG4gICAgdHlwZW9mIChwcm9wcyBhcyBMYXllckNoYXJ0Q29uZmlnKS5sYXllcklkID09PSAnc3RyaW5nJyAmJlxuICAgIChwcm9wcyBhcyBMYXllckNoYXJ0Q29uZmlnKS5sYXllcklkICE9PSBwcmV2LmxheWVySWQ7XG4gIGxldCBuZXh0ID0gbWVyZ2VDaGFydENvbmZpZyhwcmV2LCBwcm9wcyk7XG4gIGlmIChkYXRhSWRDaGFuZ2VkIHx8IGxheWVySWRDaGFuZ2VkKSB7XG4gICAgY29uc3QgZGF0YUlkID0gbmV4dC5kYXRhSWQgfHwgdW5kZWZpbmVkO1xuICAgIG5leHQgPSBkcm9wTWlzc2luZ0NoYXJ0RmllbGRzKG5leHQsIGRhdGFJZCA/IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0gOiB1bmRlZmluZWQpO1xuICAgIGlmIChuZXh0LmNyb3NzRmlsdGVyPy5lbmFibGVkKSB7XG4gICAgICBuZXh0ID0gbWVyZ2VDaGFydENvbmZpZyhuZXh0LCB7XG4gICAgICAgIGNyb3NzRmlsdGVyOiB7Li4ubmV4dC5jcm9zc0ZpbHRlciwgZW5hYmxlZDogZmFsc2UsIHZhbHVlOiB7fSwgZmllbGROYW1lczoge319XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY2hhcnRzID0gWy4uLnN0YXRlLmNoYXJ0c107XG4gIGNoYXJ0c1tpZHhdID0gbmV4dDtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2hhcnRzXG4gIH07XG4gIGNvbnN0IGZpbHRlcklkID0gbmV4dC5jcm9zc0ZpbHRlcj8uZmlsdGVySWQgfHwgcHJldi5jcm9zc0ZpbHRlcj8uZmlsdGVySWQ7XG4gIGlmIChwcmV2LmNyb3NzRmlsdGVyPy5lbmFibGVkICYmICFuZXh0LmNyb3NzRmlsdGVyPy5lbmFibGVkICYmIGZpbHRlcklkKSB7XG4gICAgY29uc3Qgb3duZWRGaWx0ZXJJZHMgPSBuZXcgU2V0KFtmaWx0ZXJJZCwgYCR7ZmlsdGVySWR9LXhgLCBgJHtmaWx0ZXJJZH0teWBdKTtcbiAgICBuZXh0U3RhdGUgPSBuZXh0U3RhdGUuZmlsdGVycy5yZWR1Y2VSaWdodCgoYWNjdSwgZmlsdGVyLCBpZHgpID0+IHtcbiAgICAgIHJldHVybiBvd25lZEZpbHRlcklkcy5oYXMoZmlsdGVyLmlkKSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIoYWNjdSwge2lkeH0pIDogYWNjdTtcbiAgICB9LCBuZXh0U3RhdGUpO1xuICB9XG4gIHJldHVybiBuZXh0U3RhdGU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGNoYXJ0IGFuZCBhbnkgY3Jvc3MtZmlsdGVyIGl0IG93bnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVDaGFydFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUNoYXJ0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gcmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyhzdGF0ZSwgY2hhcnQgPT4gY2hhcnQuaWQgPT09IGlkKTtcblxuLy8gQU5OT1RBVElPTiBVUERBVEVSU1xuXG5mdW5jdGlvbiBtYWtlTmV3QW5ub3RhdGlvbihjb25maWc/OiBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTogQW5ub3RhdGlvbiB7XG4gIGNvbnN0IGtpbmQgPSBjb25maWc/LmtpbmQgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQ7XG4gIGNvbnN0IHByb3ZpZGVkQW5nbGUgPSBOdW1iZXIuaXNGaW5pdGUoKGNvbmZpZyBhcyBhbnkpPy5hbmdsZSkgPyAoY29uZmlnIGFzIGFueSkuYW5nbGUgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGRlcml2ZWRGcm9tQW5nbGUgPVxuICAgIHByb3ZpZGVkQW5nbGUgIT0gbnVsbCA/IHRleHRQbGFjZW1lbnRGcm9tQW5nbGUocHJvdmlkZWRBbmdsZSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHRleHRTaWRlID1cbiAgICBjb25maWc/LnRleHRTaWRlID8/XG4gICAgZGVyaXZlZEZyb21BbmdsZT8uc2lkZSA/P1xuICAgIChraW5kID09PSBBbm5vdGF0aW9uS2luZC5URVhUIHx8IGtpbmQgPT09IEFubm90YXRpb25LaW5kLlJVTEVSXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9TSURFKTtcbiAgY29uc3QgdGV4dFZlcnRpY2FsUG9zaXRpb24gPVxuICAgIGNvbmZpZz8udGV4dFZlcnRpY2FsUG9zaXRpb24gPz9cbiAgICBkZXJpdmVkRnJvbUFuZ2xlPy52ZXJ0aWNhbCA/P1xuICAgIChraW5kID09PSBBbm5vdGF0aW9uS2luZC5URVhUIHx8IGtpbmQgPT09IEFubm90YXRpb25LaW5kLlJVTEVSXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTik7XG4gIGNvbnN0IGJhc2UgPSB7XG4gICAgaWQ6IGNvbmZpZz8uaWQgPz8gZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAga2luZCxcbiAgICBpc1Zpc2libGU6IGNvbmZpZz8uaXNWaXNpYmxlID8/IHRydWUsXG4gICAgYXV0b1NpemU6IGNvbmZpZz8uYXV0b1NpemUgPz8gdHJ1ZSxcbiAgICBhdXRvU2l6ZVk6IGNvbmZpZz8uYXV0b1NpemVZID8/IHRydWUsXG4gICAgYW5jaG9yUG9pbnQ6IGNvbmZpZz8uYW5jaG9yUG9pbnQgPz8gKFswLCAwXSBhcyBbbnVtYmVyLCBudW1iZXJdKSxcbiAgICBsYWJlbDogY29uZmlnPy5sYWJlbCA/PyAnTmV3IEFubm90YXRpb24nLFxuICAgIC4uLihjb25maWc/LmVkaXRvclN0YXRlID8ge2VkaXRvclN0YXRlOiBjb25maWcuZWRpdG9yU3RhdGV9IDoge30pLFxuICAgIGxpbmVDb2xvcjogY29uZmlnPy5saW5lQ29sb3IgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gICAgbGluZVdpZHRoOiBjb25maWc/LmxpbmVXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgICB0ZXh0V2lkdGg6IGNvbmZpZz8udGV4dFdpZHRoID8/IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRILFxuICAgIHRleHRIZWlnaHQ6IGNvbmZpZz8udGV4dEhlaWdodCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQsXG4gICAgdGV4dFZlcnRpY2FsQWxpZ246IGNvbmZpZz8udGV4dFZlcnRpY2FsQWxpZ24gPz8gKCdib3R0b20nIGFzIGNvbnN0KSxcbiAgICAuLi4odGV4dFNpZGUgPyB7dGV4dFNpZGV9IDoge30pLFxuICAgIC4uLih0ZXh0VmVydGljYWxQb3NpdGlvbiA/IHt0ZXh0VmVydGljYWxQb3NpdGlvbn0gOiB7fSksXG4gICAgbWFwSW5kZXg6IGNvbmZpZz8ubWFwSW5kZXhcbiAgfTtcblxuICBjb25zdCBkZWZhdWx0QW5nbGUgPVxuICAgIHRleHRTaWRlICYmIHRleHRWZXJ0aWNhbFBvc2l0aW9uXG4gICAgICA/IEFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UW2Ake3RleHRTaWRlfS0ke3RleHRWZXJ0aWNhbFBvc2l0aW9ufWBdXG4gICAgICA6IElOSVRJQUxfQU5OT1RBVElPTl9BTkdMRTtcblxuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlBPSU5UOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuUE9JTlQsXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiBwcm92aWRlZEFuZ2xlID8/IGRlZmF1bHRBbmdsZVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkFSUk9XOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQVJST1csXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiBwcm92aWRlZEFuZ2xlID8/IGRlZmF1bHRBbmdsZVxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLkNJUkNMRTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLkNJUkNMRSxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IHByb3ZpZGVkQW5nbGUgPz8gZGVmYXVsdEFuZ2xlLFxuICAgICAgICByYWRpdXNJbk1ldGVyczogKGNvbmZpZyBhcyBhbnkpPy5yYWRpdXNJbk1ldGVycyA/PyAxMDAwXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuUlVMRVI6IHtcbiAgICAgIGNvbnN0IGFuY2hvclBvaW50ID0gYmFzZS5hbmNob3JQb2ludDtcbiAgICAgIGNvbnN0IHNoaWZ0ZWQgPSBhZGRNZXRlcnNUb0xuZ0xhdChhbmNob3JQb2ludCwgW1xuICAgICAgICBJTklUSUFMX0FOTk9UQVRJT05fUlVMRVJfTEVOR1RIX01FVEVSUyxcbiAgICAgICAgMCxcbiAgICAgICAgMFxuICAgICAgXSk7XG4gICAgICBjb25zdCBhbHRpdHVkZSA9IGFuY2hvclBvaW50WzJdO1xuICAgICAgY29uc3QgZGVmYXVsdEVuZFBvaW50ID1cbiAgICAgICAgYWx0aXR1ZGUgIT09IHVuZGVmaW5lZCAmJiBOdW1iZXIuaXNGaW5pdGUoYWx0aXR1ZGUpXG4gICAgICAgICAgPyAoW3NoaWZ0ZWRbMF0sIHNoaWZ0ZWRbMV0sIGFsdGl0dWRlXSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pXG4gICAgICAgICAgOiAoW3NoaWZ0ZWRbMF0sIHNoaWZ0ZWRbMV1dIGFzIFtudW1iZXIsIG51bWJlcl0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuUlVMRVIsXG4gICAgICAgIGVuZFBvaW50OiAoY29uZmlnIGFzIGFueSk/LmVuZFBvaW50ID8/IGRlZmF1bHRFbmRQb2ludCxcbiAgICAgICAgc2hvd0N1c3RvbVRleHQ6IChjb25maWcgYXMgYW55KT8uc2hvd0N1c3RvbVRleHQgPz8gdHJ1ZSxcbiAgICAgICAgc2hvd0Rpc3RhbmNlOiAoY29uZmlnIGFzIGFueSk/LnNob3dEaXN0YW5jZSA/PyB0cnVlXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlRFWFQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLlRFWFRcbiAgICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG5ld0Fubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbihhY3Rpb24uY29uZmlnKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogdHJ1ZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBzdGF0ZS5hbm5vdGF0aW9ucy5maWx0ZXIoYSA9PiBhLmlkICE9PSBpZCksXG4gICAgaW50ZXJhY3Rpb25Db25maWc6IHJlbW92ZUxheWVyRnJvbVpvb21PcGFjaXR5KFxuICAgICAgc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICBnZXRab29tT3BhY2l0eUFubm90YXRpb25UYXJnZXRJZChpZClcbiAgICApLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBudWxsIDogc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6XG4gICAgICBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBmYWxzZSA6IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZEluZGV4KGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcHJldiA9IHN0YXRlLmFubm90YXRpb25zW2lkeF07XG4gIGxldCBuZXh0QW5ub3RhdGlvbjogQW5ub3RhdGlvbjtcblxuICBpZiAoY29uZmlnLmtpbmQgJiYgY29uZmlnLmtpbmQgIT09IHByZXYua2luZCkge1xuICAgIG5leHRBbm5vdGF0aW9uID0gbWFrZU5ld0Fubm90YXRpb24oey4uLnByZXYsIC4uLmNvbmZpZ30gYXMgQW5ub3RhdGlvblByb3BzUGFydGlhbCk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dEFubm90YXRpb24gPSB7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uO1xuICB9XG5cbiAgY29uc3QgbmV3QW5ub3RhdGlvbnMgPSBbLi4uc3RhdGUuYW5ub3RhdGlvbnNdO1xuICBuZXdBbm5vdGF0aW9uc1tpZHhdID0gbmV4dEFubm90YXRpb247XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IG5ld0Fubm90YXRpb25zXG4gIH07XG59O1xuXG4vKipcbiAqIER1cGxpY2F0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZChhID0+IGEuaWQgPT09IGlkKTtcbiAgaWYgKCFvcmlnaW5hbCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCBkdXBsaWNhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IHtcbiAgICAuLi5jbG9uZURlZXAob3JpZ2luYWwpLFxuICAgIGlkOiBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBsYWJlbDogYENvcHkgb2YgJHtvcmlnaW5hbC5sYWJlbH1gXG4gIH07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFtuZXdBbm5vdGF0aW9uLCAuLi5zdGF0ZS5hbm5vdGF0aW9uc10sXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG5ld0Fubm90YXRpb24uaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlXG4gIH07XG59O1xuXG4vKipcbiAqIFNldCBzZWxlY3RlZCBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGlzRWRpdGluZ1RleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgaWQgPT09IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkICYmXG4gICAgKGlzRWRpdGluZ1RleHQgPz8gZmFsc2UpID09PSBzdGF0ZS5pc0VkaXRpbmdBbm5vdGF0aW9uVGV4dFxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGlzRWRpdGluZ1RleHQgPz8gZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZGF0YXNldCBhbmQgYWxsIGxheWVycywgZmlsdGVycywgdG9vbHRpcCBjb25maWdzIHRoYXQgYmFzZWQgb24gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEYXRhc2V0VXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICBjb25zdCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBEZXJpdmVkIHRhYmxlcyBhcmUgc25hcHNob3RzOiBrZWVwIHRoZW0gd2hlbiBhIHNvdXJjZSBkYXRhc2V0IGlzIGRlbGV0ZWQuXG4gIC8vIE9ubHkgZHJvcCBpbi1wcm9ncmVzcyBncm91cC1ieSAvIGpvaW4gZHJhZnRzIHRoYXQgcmVmZXJlbmNlZCB0aGlzIGRhdGFzZXQuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlbW92ZU9wc0ZvckRhdGFzZXRzKHN0YXRlLCBbZGF0YXNldEtleV0pIGFzIFQ7XG4gIHJldHVybiByZW1vdmVTaW5nbGVEYXRhc2V0VXBkYXRlcihuZXh0U3RhdGUsIGRhdGFzZXRLZXkpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTaW5nbGVEYXRhc2V0VXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBULCBkYXRhc2V0S2V5OiBzdHJpbmcpOiBUIHtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBpZiAoIWRhdGFzZXRzW2RhdGFzZXRLZXldKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGxheWVycyxcbiAgICBkYXRhc2V0czoge1tkYXRhc2V0S2V5XTogX2RhdGFzZXQsIC4uLm5ld0RhdGFzZXRzfVxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmUgPSBsYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhc2V0S2V5KS5tYXAobCA9PiBsLmlkKTtcblxuICBsZXQgbmV3U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHNcbiAgfSk7XG5cbiAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgbmV3U3RhdGUuZmlsdGVycykge1xuICAgIGNvbnN0IHZhbHVlSW5kZXggPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YXNldEtleSk7XG4gICAgaWYgKHZhbHVlSW5kZXggPj0gMCAmJiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDEpIHtcbiAgICAgIGZpbHRlcnMucHVzaChfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlSW5kZXggPCAwKSB7XG4gICAgICBmaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBuZXdTdGF0ZSA9IHsuLi5uZXdTdGF0ZSwgZmlsdGVyc307XG5cbiAgcmV0dXJuIHJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMoXG4gICAgcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhuZXdTdGF0ZSwge2RhdGFJZDogZGF0YXNldEtleX0pLFxuICAgIGNoYXJ0ID0+IHtcbiAgICAgIGlmIChjaGFydC5kYXRhSWQgPT09IGRhdGFzZXRLZXkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNMYXllckNoYXJ0Q29uZmlnKGNoYXJ0KSkge1xuICAgICAgICByZXR1cm4gbGF5ZXJzVG9SZW1vdmUuaW5jbHVkZXMoY2hhcnQubGF5ZXJJZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICApO1xufVxuXG5mdW5jdGlvbiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKHN0YXRlLCB7ZGF0YUlkfSkge1xuICBsZXQge2ludGVyYWN0aW9uQ29uZmlnfSA9IHN0YXRlO1xuICBjb25zdCB7dG9vbHRpcH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgaWYgKHRvb2x0aXApIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRvb2x0aXA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHtbZGF0YUlkXTogZmllbGRzLCAuLi5maWVsZHNUb1Nob3d9ID0gY29uZmlnLmZpZWxkc1RvU2hvdztcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDogey4uLnRvb2x0aXAsIGNvbmZpZzogey4uLmNvbmZpZywgZmllbGRzVG9TaG93fX1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgaW50ZXJhY3Rpb25Db25maWd9O1xufVxuLyoqXG4gKiB1cGRhdGUgbGF5ZXIgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIHVwZGF0ZSBvdmVybGF5IGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBvdmVybGF5QmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiBEaXNwbGF5IGRhdGFzZXQgdGFibGUgaW4gYSBtb2RhbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNob3dEYXRhc2V0VGFibGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdGluZ0RhdGFzZXQ6IGFjdGlvbi5kYXRhSWRcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGN1c3RvbSBjb2xvciBmb3IgZGF0YXNldHMgYW5kIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRDb2xvclVwZGF0ZXJcbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7Y29sb3I6IGFjdGlvbi5uZXdDb2xvcn19KTtcbn07XG5cbi8qKlxuICogcmVzZXQgdmlzU3RhdGUgdG8gaW5pdGlhbCBTdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc2V0TWFwQ29uZmlnVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlLFxuICBpbml0aWFsU3RhdGU6IHN0YXRlLmluaXRpYWxTdGF0ZVxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXRDYW1lcmFCb29rbWFya3NVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogUmV0dXJuVHlwZTx0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLnNldENhbWVyYUJvb2ttYXJrcz5cbik6IFZpc1N0YXRlID0+ICh7Li4uc3RhdGUsIGNhbWVyYUJvb2ttYXJrczogbm9ybWFsaXplQ2FtZXJhQm9va21hcmtzKGFjdGlvbi5wYXlsb2FkKX0pO1xuXG5leHBvcnQgY29uc3Qgc2V0Q2FtZXJhVG91clVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBSZXR1cm5UeXBlPHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnMuc2V0Q2FtZXJhVG91cj5cbik6IFZpc1N0YXRlID0+ICh7Li4uc3RhdGUsIGNhbWVyYVRvdXI6IG5vcm1hbGl6ZUNhbWVyYVRvdXIoYWN0aW9uLnBheWxvYWQpfSk7XG5cbi8qKlxuICogUHJvcGFnYXRlIGB2aXNTdGF0ZWAgcmVkdWNlciB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgY29uZmlnIHdpbGwgYmUgb3ZlcnJpZGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtjb25maWcgPSB7fSwgb3B0aW9ucyA9IHt9fVxuICB9OiB7XG4gICAgdHlwZT86IHR5cGVvZiBBY3Rpb25UeXBlcy5SRUNFSVZFX01BUF9DT05GSUc7XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjb25maWcudmlzU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7a2VlcEV4aXN0aW5nQ29uZmlnfSA9IG9wdGlvbnM7XG5cbiAgLy8gcmVzZXQgY29uZmlnIGlmIGtlZXBFeGlzdGluZ0NvbmZpZyBpcyBmYWxzeVxuICBsZXQgbWVyZ2VkU3RhdGUgPSAha2VlcEV4aXN0aW5nQ29uZmlnXG4gICAgPyB7Li4ucmVzZXRNYXBDb25maWdVcGRhdGVyKHN0YXRlKSwgY2FtZXJhQm9va21hcmtzOiBbXSwgY2FtZXJhVG91cjogbnVsbH1cbiAgICA6IHN0YXRlO1xuICBmb3IgKGNvbnN0IG1lcmdlciBvZiBzdGF0ZS5tZXJnZXJzKSB7XG4gICAgaWYgKGlzVmFsaWRNZXJnZXIobWVyZ2VyKSAmJiBoYXNQcm9wc1RvTWVyZ2UoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCkpIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VyLm1lcmdlKFxuICAgICAgICBtZXJnZWRTdGF0ZSxcbiAgICAgICAgZ2V0UHJvcFZhbHVlVG9NZXJnZXIoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCwgbWVyZ2VyLnRvTWVyZ2VQcm9wKSxcbiAgICAgICAgLy8gZnJvbUNvbmZpZ1xuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBob3ZlciBldmVudCB3aXRoIGhvdmVyZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJIb3ZlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckhvdmVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGhvdmVySW5mbzoge1xuICAgIC8vIGRlY2suZ2wgaW5mbyBpcyBtdXRhYmxlXG4gICAgLi4uYWN0aW9uLmluZm8sXG4gICAgLi4uKE51bWJlci5pc0Zpbml0ZShhY3Rpb24ubWFwSW5kZXgpID8ge21hcEluZGV4OiBhY3Rpb24ubWFwSW5kZXh9IDoge30pXG4gIH1cbn0pO1xuXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogVXBkYXRlIGBpbnRlcmFjdGlvbkNvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgIC4uLntbY29uZmlnLmlkXTogY29uZmlnfVxuICB9O1xuXG4gIC8vIERvbid0IGVuYWJsZSB0b29sdGlwIGFuZCBicnVzaCBhdCB0aGUgc2FtZSB0aW1lXG4gIC8vIGJ1dCBjb29yZGluYXRlcyBjYW4gYmUgc2hvd24gYXQgYWxsIHRpbWVcbiAgY29uc3QgY29udHJhZGljdCA9IFsnYnJ1c2gnLCAndG9vbHRpcCddO1xuXG4gIGlmIChcbiAgICBjb250cmFkaWN0LmluY2x1ZGVzKGNvbmZpZy5pZCkgJiZcbiAgICBjb25maWcuZW5hYmxlZCAmJlxuICAgICFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1tjb25maWcuaWRdLmVuYWJsZWRcbiAgKSB7XG4gICAgLy8gb25seSBlbmFibGUgb25lIGludGVyYWN0aW9uIGF0IGEgdGltZVxuICAgIGNvbnRyYWRpY3QuZm9yRWFjaChrID0+IHtcbiAgICAgIGlmIChrICE9PSBjb25maWcuaWQpIHtcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdba10gPSB7Li4uaW50ZXJhY3Rpb25Db25maWdba10sIGVuYWJsZWQ6IGZhbHNlfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgaWYgKGNvbmZpZy5pZCA9PT0gJ2dlb2NvZGVyJyAmJiAhY29uZmlnLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gcmVtb3ZlRGF0YXNldFVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWQ6IEdFT0NPREVSX0RBVEFTRVRfTkFNRX0pO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5pZCA9PT0gJ2dlb2NvZGVyJykge1xuICAgIGNvbnN0IGdlb2NvZGVyTGF5ZXIgPSBuZXdTdGF0ZS5sYXllcnMuZmluZChsYXllciA9PiBsYXllci5pZCA9PT0gR0VPQ09ERVJfTEFZRVJfSUQpO1xuICAgIGlmIChnZW9jb2RlckxheWVyKSB7XG4gICAgICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICAgIG9sZExheWVyOiBnZW9jb2RlckxheWVyLFxuICAgICAgICBuZXdDb25maWc6IHtjb2xvcjogY29uZmlnLmNvbmZpZy5jb2xvciA/PyBHRU9DT0RFUl9JQ09OX0NPTE9SfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgY2xpY2sgZXZlbnQgd2l0aCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtb3VzZVBvczogc3RhdGUuaW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICBwaW5uZWQ6IHN0YXRlLm1vdXNlUG9zLnBpbm5lZCA/IG51bGwgOiBjbG9uZURlZXAoc3RhdGUubW91c2VQb3MpXG4gICAgICB9XG4gICAgOiBzdGF0ZS5tb3VzZVBvcyxcbiAgY2xpY2tlZDogYWN0aW9uLmluZm8gJiYgYWN0aW9uLmluZm8ucGlja2VkID8gYWN0aW9uLmluZm8gOiBudWxsXG59KTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBjbGljayBldmVudCwgdW5zZWxlY3QgY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Pbk1hcENsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG51bGxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgbW92ZSBldmVudFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1vdXNlTW92ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2V2dH06IFZpc1N0YXRlQWN0aW9ucy5Pbk1vdXNlTW92ZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKE9iamVjdC52YWx1ZXMoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcpLnNvbWUoY29uZmlnID0+IGNvbmZpZy5lbmFibGVkKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1vdXNlUG9zOiB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQucG9pbnQpID8ge21vdXNlUG9zaXRpb246IFsuLi5ldnQucG9pbnRdfSA6IHt9KSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LmxuZ0xhdCkgPyB7Y29vcmRpbmF0ZTogWy4uLmV2dC5sbmdMYXRdfSA6IHt9KVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGZvciBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gIHN0YXRlLnNwbGl0TWFwcyAmJiBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID09PSAwXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAvLyBtYXliZSB3ZSBzaG91bGQgdXNlIGFuIGFycmF5IHRvIHN0b3JlIHN0YXRlIGZvciBhIHNpbmdsZSBtYXAgYXMgd2VsbFxuICAgICAgICAvLyBpZiBjdXJyZW50IG1hcHMgbGVuZ3RoIGlzIGVxdWFsIHRvIDAgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc3BsaXQgdGhlIHZpZXdcbiAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMoc3RhdGUubGF5ZXJzLCB7ZHVwbGljYXRlOiBmYWxzZX0pXG4gICAgICB9XG4gICAgOiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleChzdGF0ZSwgYWN0aW9uKTtcblxuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGluIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttYXBJbmRleCwgbGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckZvck1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3NwbGl0TWFwc30gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogc3BsaXRNYXBzLm1hcCgoc20sIGkpID0+XG4gICAgICBpID09PSBtYXBJbmRleFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXSxcbiAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0ubGF5ZXJzLFxuICAgICAgICAgICAgICAvLyBpZiBsYXllcklkIG5vdCBpbiBsYXllcnMsIHNldCBpdCB0byB2aXNpYmxlXG4gICAgICAgICAgICAgIFtsYXllcklkXTogIXNwbGl0TWFwc1tpXS5sYXllcnNbbGF5ZXJJZF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc21cbiAgICApXG4gIH07XG59O1xuXG5mdW5jdGlvbiBoYXNUYWJ1bGFyRGF0YXNldERhdGEoZGF0YT86IFByb3RvRGF0YXNldFsnZGF0YSddIHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBkYXRhPy5yb3dzPy5sZW5ndGggfHwgZGF0YT8uY29scz8ubGVuZ3RoIHx8IChkYXRhIGFzIHthcnJvd1RhYmxlPzogdW5rbm93bn0pPy5hcnJvd1RhYmxlXG4gICk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldDogUHJvdG9EYXRhc2V0KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgZGF0YXNldC5pbmZvPy50eXBlID09PSBEYXRhc2V0VHlwZS5FWFRFUk5BTExZX0hPU1RFRCAmJlxuICAgIHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgPT09ICdzdHJpbmcnICYmXG4gICAgIWhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhc2V0LmRhdGEpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0KHtcbiAgYXJnOiBkYXRhc2V0LFxuICBvblByb2dyZXNzXG59OiB7XG4gIGFyZzogUHJvdG9EYXRhc2V0O1xuICBvblByb2dyZXNzOiAocHJvZ3Jlc3M6IHtsb2FkZWQ6IG51bWJlcjsgdG90YWw/OiBudW1iZXI7IHBlcmNlbnQ6IG51bWJlcn0pID0+IHZvaWQ7XG59KTogUHJvbWlzZTxQcm90b0RhdGFzZXQ+IHtcbiAgaWYgKCFuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQ7XG4gIH1cbiAgY29uc3QgbG9hZGVkID0gYXdhaXQgbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0KHtcbiAgICBzb3VyY2U6IGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSBhcyBzdHJpbmcsXG4gICAgZm9ybWF0OiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQoZGF0YXNldC5tZXRhZGF0YSksXG4gICAgc2l6ZTogdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNpemUgPT09ICdudW1iZXInID8gZGF0YXNldC5tZXRhZGF0YS5zaXplIDogdW5kZWZpbmVkLFxuICAgIGJ5cGFzc0NhY2hlOiBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMoZGF0YXNldC5tZXRhZGF0YSkgPiAwLFxuICAgIG9uUHJvZ3Jlc3NcbiAgfSk7XG4gIGlmICghbG9hZGVkLmRhdGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGRhdGEgbG9hZGVkIGZyb20gJHtkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2V9YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIGRhdGE6IGxvYWRlZC5kYXRhLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAuLi5kYXRhc2V0Lm1ldGFkYXRhLFxuICAgICAgZXRhZzogbG9hZGVkLmV0YWcsXG4gICAgICBsYXN0TW9kaWZpZWQ6IGxvYWRlZC5sYXN0TW9kaWZpZWQsXG4gICAgICAuLi4odHlwZW9mIGxvYWRlZC5zaXplID09PSAnbnVtYmVyJyA/IHtzaXplOiBsb2FkZWQuc2l6ZX0gOiB7fSksXG4gICAgICBsYXN0RmV0Y2hlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgcmVmcmVzaFN0YXR1czogJ2lkbGUnXG4gICAgfVxuICB9O1xufVxuXG5jb25zdCBIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MoXG4gIGh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0LFxuICAnSFlEUkFURV9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0snXG4pO1xuXG5jb25zdCBGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKGFzeW5jIChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufSwgJ0ZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSycpO1xuXG5mdW5jdGlvbiBnZXREYXRhc2V0UHJvZ3Jlc3NJZChkYXRhc2V0OiBQcm90b0RhdGFzZXQsIGluZGV4ID0gMCk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgZGF0YXNldC5pbmZvPy5pZCA9PT0gJ3N0cmluZycgJiYgZGF0YXNldC5pbmZvLmlkKSB7XG4gICAgcmV0dXJuIGRhdGFzZXQuaW5mby5pZDtcbiAgfVxuICBpZiAodHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSA9PT0gJ3N0cmluZycgJiYgZGF0YXNldC5tZXRhZGF0YS5zb3VyY2UpIHtcbiAgICByZXR1cm4gZGF0YXNldC5tZXRhZGF0YS5zb3VyY2U7XG4gIH1cbiAgcmV0dXJuIGBkYXRhc2V0LSR7aW5kZXh9YDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayhkYXRhc2V0OiBQcm90b0RhdGFzZXQsIGRhdGFzZXRzOiBEYXRhc2V0cykge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gY3JlYXRlTmV3RGF0YUVudHJ5KGRhdGFzZXQsIGRhdGFzZXRzKTtcbiAgfVxuICBjb25zdCBwcm9ncmVzc0lkID0gZ2V0RGF0YXNldFByb2dyZXNzSWQoZGF0YXNldCk7XG4gIHJldHVybiBIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyh7XG4gICAgYXJnOiBkYXRhc2V0LFxuICAgIG9uUHJvZ3Jlc3M6IHByb2dyZXNzID0+XG4gICAgICBzZXRMb2FkaW5nUHJvZ3Jlc3MoXG4gICAgICAgIHByb2dyZXNzSWQsXG4gICAgICAgIE1hdGgucm91bmQoKHByb2dyZXNzPy5wZXJjZW50ID8/IDApICogMTAwKSxcbiAgICAgICAgcHJvZ3Jlc3M/LnBoYXNlID09PSAncHJvY2Vzc2luZycgPyAncHJvY2Vzc2luZycgOiB1bmRlZmluZWRcbiAgICAgIClcbiAgfSkuY2hhaW4oaHlkcmF0ZWQgPT4ge1xuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnkoaHlkcmF0ZWQsIGRhdGFzZXRzKTtcbiAgICByZXR1cm4gKFxuICAgICAgdGFzayB8fFxuICAgICAgRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLKCdGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9ycycpXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyTG9hZGluZ1Byb2dyZXNzKHN0YXRlOiBWaXNTdGF0ZSwgaWRzPzogc3RyaW5nW10pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGN1cnJlbnQgPSBzdGF0ZS5sb2FkaW5nUHJvZ3Jlc3MgfHwge307XG4gIGNvbnN0IHByb2Nlc3NpbmcgPSBzdGF0ZS5sb2FkaW5nUHJvY2Vzc2luZyB8fCB7fTtcbiAgaWYgKCFPYmplY3Qua2V5cyhjdXJyZW50KS5sZW5ndGggJiYgIU9iamVjdC5rZXlzKHByb2Nlc3NpbmcpLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoKHN0YXRlLmxvYWRpbmdJbmRpY2F0b3JWYWx1ZSB8fCAwKSA8PSAwKSB7XG4gICAgcmV0dXJuIHsuLi5zdGF0ZSwgbG9hZGluZ1Byb2dyZXNzOiB7fSwgbG9hZGluZ1Byb2Nlc3Npbmc6IHt9fTtcbiAgfVxuICBpZiAoIWlkcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHQgPSB7Li4uY3VycmVudH07XG4gIGNvbnN0IG5leHRQcm9jZXNzaW5nID0gey4uLnByb2Nlc3Npbmd9O1xuICBpZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgZGVsZXRlIG5leHRbaWRdO1xuICAgIGRlbGV0ZSBuZXh0UHJvY2Vzc2luZ1tpZF07XG4gIH0pO1xuICByZXR1cm4gey4uLnN0YXRlLCBsb2FkaW5nUHJvZ3Jlc3M6IG5leHQsIGxvYWRpbmdQcm9jZXNzaW5nOiBuZXh0UHJvY2Vzc2luZ307XG59XG5cbmZ1bmN0aW9uIHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQ6IERhdGFzZXRzW3N0cmluZ10sIHBhdGNoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICByZXR1cm4gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtcbiAgICBtZXRhZGF0YToge1xuICAgICAgLi4uZGF0YXNldC5tZXRhZGF0YSxcbiAgICAgIC4uLnBhdGNoXG4gICAgfVxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSh7XG4gIGFyZzogbWV0YWRhdGEsXG4gIG9uUHJvZ3Jlc3Ncbn06IHtcbiAgYXJnOiB7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgZm9ybWF0Pzogc3RyaW5nO1xuICAgIHNpemU/OiBudW1iZXI7XG4gICAgZXRhZz86IHN0cmluZztcbiAgICBsYXN0TW9kaWZpZWQ/OiBzdHJpbmc7XG4gICAgY3N2SGVhZGVyPzogc3RyaW5nW107XG4gIH07XG4gIG9uUHJvZ3Jlc3M6IChwcm9ncmVzczoge2xvYWRlZDogbnVtYmVyOyB0b3RhbD86IG51bWJlcjsgcGVyY2VudDogbnVtYmVyfSkgPT4gdm9pZDtcbn0pIHtcbiAgLy8gRmV0Y2ggb25seS4gRG8gbm90IG11dGF0ZSB0aGUgUmVkdXggdGFibGUgaGVyZTogcHJvZ3Jlc3MgZXZlbnRzIGNvcHkgaXQsIGFuZFxuICAvLyB0aGUgc3VjY2VzcyB1cGRhdGVyIGFwcGxpZXMgdGhlIHNuYXBzaG90IHRvIHdoYXRldmVyIGluc3RhbmNlIGlzIGluIHRoZSBzdG9yZS5cbiAgcmV0dXJuIGxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCh7Li4ubWV0YWRhdGEsIG9uUHJvZ3Jlc3MsIGJ5cGFzc0NhY2hlOiB0cnVlfSk7XG59XG5cbmNvbnN0IFJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyhcbiAgcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSxcbiAgJ1JFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLJ1xuKTtcblxuLyoqXG4gKiBSZS1mZXRjaCBhbiBleHRlcm5hbGx5IGhvc3RlZCBkYXRhc2V0IGFuZCByZXBsYWNlIGl0cyB0YWJsZSBjb250ZW50cyBpbiBwbGFjZS5cbiAqIExheWVycyBhbmQgZmlsdGVycyBhcmUga2VwdCB3aGVuIGZpZWxkIG5hbWVzIG1hdGNoLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKFxuICAgICFkYXRhc2V0IHx8XG4gICAgZGF0YXNldC50eXBlICE9PSBEYXRhc2V0VHlwZS5FWFRFUk5BTExZX0hPU1RFRCB8fFxuICAgIHR5cGVvZiBkYXRhc2V0Lm1ldGFkYXRhPy5zb3VyY2UgIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFN0YXR1cyA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dERhdGFzZXQgPSBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7XG4gICAgcmVmcmVzaFN0YXR1czogJ2xvYWRpbmcnLFxuICAgIHJlZnJlc2hFcnJvcjogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogbmV4dERhdGFzZXRcbiAgICAgIH1cbiAgICB9LFxuICAgIFJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKHtcbiAgICAgIGFyZzoge1xuICAgICAgICBzb3VyY2U6IG5leHREYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZSBhcyBzdHJpbmcsXG4gICAgICAgIGZvcm1hdDogZ2V0UmVtb3RlU291cmNlRm9ybWF0KG5leHREYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICAgICAgY3N2SGVhZGVyOiBuZXh0RGF0YXNldC5maWVsZHMubWFwKGZpZWxkID0+IGZpZWxkLm5hbWUpLFxuICAgICAgICBzaXplOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuc2l6ZSA9PT0gJ251bWJlcicgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplIDogdW5kZWZpbmVkLFxuICAgICAgICBldGFnOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuZXRhZyA9PT0gJ3N0cmluZycgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnIDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6XG4gICAgICAgICAgdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLmxhc3RNb2RpZmllZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIG9uUHJvZ3Jlc3M6IHByb2dyZXNzID0+XG4gICAgICAgIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3MoZGF0YUlkLCBNYXRoLnJvdW5kKChwcm9ncmVzcz8ucGVyY2VudCA/PyAwKSAqIDEwMCkpXG4gICAgfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gcmVmcmVzaERhdGFzZXRTdWNjZXNzKGRhdGFJZCwgcmVzdWx0KSxcbiAgICAgIChlcnJvcjogRXJyb3IpID0+IHJlZnJlc2hEYXRhc2V0RXJyb3IoZGF0YUlkLCBlcnJvcilcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogUmVjb3JkIGRvd25sb2FkIHByb2dyZXNzIGZvciBhbiBpbi1mbGlnaHQgcmVtb3RlIGRhdGFzZXQgcmVmcmVzaC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBwZXJjZW50fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQgfHwgZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFN0YXR1cyAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHRQZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKHBlcmNlbnQpXG4gICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQocGVyY2VudCkpKVxuICAgIDogMDtcbiAgaWYgKGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hQcm9ncmVzcyA9PT0gbmV4dFBlcmNlbnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czoge1xuICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICBbZGF0YUlkXTogcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge3JlZnJlc2hQcm9ncmVzczogbmV4dFBlcmNlbnR9KVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZmllbGROYW1lc0VxdWFsKGN1cnJlbnQ6IHtuYW1lOiBzdHJpbmd9W10sIGluY29taW5nPzoge25hbWU6IHN0cmluZ31bXSB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKCFpbmNvbWluZz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGN1cnJlbnQubGVuZ3RoICE9PSBpbmNvbWluZy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnQuZXZlcnkoKGZpZWxkLCBpKSA9PiBmaWVsZC5uYW1lID09PSBpbmNvbWluZ1tpXS5uYW1lKTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgcmVtb3RlIHNuYXBzaG90IGNoYW5nZXMgY29sdW1uIG5hbWVzLCBvbGQgbGF5ZXIgZmllbGRJZHggLyBmaWx0ZXIgbmFtZXNcbiAqIGNhbiBwb2ludCBhdCB0aGUgd3JvbmcgY29sdW1uLiBSZS1iaW5kIGJ5IG5hbWUgYW5kIGRyb3AgY29uZmlncyB0aGF0IG5vIGxvbmdlciBmaXQuXG4gKi9cbmZ1bmN0aW9uIHJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZShcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBuZXh0TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IGRyb3BwZWRMYXllcnM6IExheWVyW10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgbmV4dExheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVib3VuZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3NlcywgbGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gICAgaWYgKHJlYm91bmQ/LmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgbmV4dExheWVycy5wdXNoKHJlYm91bmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkcm9wcGVkTGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5leHRMYXllck9yZGVyID0gc3RhdGUubGF5ZXJPcmRlcjtcbiAgbGV0IG5leHRTcGxpdE1hcHMgPSBzdGF0ZS5zcGxpdE1hcHM7XG4gIGRyb3BwZWRMYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbmV4dExheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV4dExheWVyT3JkZXIsIGxheWVyLmlkKTtcbiAgICBuZXh0U3BsaXRNYXBzID0gcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKG5leHRTcGxpdE1hcHMsIGxheWVyKTtcbiAgfSk7XG5cbiAgY29uc3QgbmV4dExheWVyRGF0YSA9IG5leHRMYXllcnMubWFwKGxheWVyID0+IHtcbiAgICBjb25zdCBvbGRJZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KG9sZExheWVyID0+IG9sZExheWVyLmlkID09PSBsYXllci5pZCk7XG4gICAgcmV0dXJuIG9sZElkeCA+PSAwID8gc3RhdGUubGF5ZXJEYXRhW29sZElkeF0gOiB7fTtcbiAgfSk7XG5cbiAgY29uc3QgZmlsdGVyc0ZvckRhdGFzZXQgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gdG9BcnJheShmaWx0ZXIuZGF0YUlkKS5pbmNsdWRlcyhkYXRhSWQpKTtcbiAgY29uc3Qgb3RoZXJGaWx0ZXJzID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+ICF0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuXG4gIGNvbnN0IHt2YWxpZGF0ZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhcbiAgICB7Li4uc3RhdGUsIGRhdGFzZXRzLCBsYXllcnM6IG5leHRMYXllcnN9LFxuICAgIGZpbHRlcnNGb3JEYXRhc2V0XG4gICk7XG5cbiAgY29uc3QgbmV4dEZpbHRlcnMgPSBbLi4ub3RoZXJGaWx0ZXJzLCAuLi52YWxpZGF0ZWRdO1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICB1cGRhdGVkRGF0YXNldHMsXG4gICAgbmV4dEZpbHRlcnMsXG4gICAgbmV4dExheWVyc1xuICApO1xuXG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzLFxuICAgIGxheWVyczogbmV4dExheWVycyxcbiAgICBsYXllckRhdGE6IG5leHRMYXllckRhdGEsXG4gICAgbGF5ZXJPcmRlcjogbmV4dExheWVyT3JkZXIsXG4gICAgc3BsaXRNYXBzOiBuZXh0U3BsaXRNYXBzLFxuICAgIGZpbHRlcnM6IG5leHRGaWx0ZXJzXG4gIH07XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIFtkYXRhSWRdLCB1bmRlZmluZWQpO1xuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59XG5cbi8qKlxuICogQXBwbHkgYSBmaW5pc2hlZCByZW1vdGUgcmVmcmVzaDoga2VlcCBsYXllcnMsIHJlLXJ1biBmaWx0ZXJzIGFuZCBsYXllciBkYXRhLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcmVzdWx0fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG1ldGFkYXRhUGF0Y2ggPSB7XG4gICAgcmVmcmVzaFN0YXR1czogJ2lkbGUnLFxuICAgIHJlZnJlc2hFcnJvcjogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkLFxuICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgLy8gQWx3YXlzIHdyaXRlIHZhbGlkYXRvcnMuIEEgMjAwIHRoYXQgb21pdHMgdGhlbSBtdXN0IG5vdCBrZWVwIHRoZSBwcmV2aW91c1xuICAgIC8vIEVUYWcgb3IgYSBsYXRlciAzMDQgY2FuIHNraXAgYSBib2R5IHdlIG5vIGxvbmdlciBoYXZlLlxuICAgIGV0YWc6IHJlc3VsdC5ldGFnLFxuICAgIGxhc3RNb2RpZmllZDogcmVzdWx0Lmxhc3RNb2RpZmllZCxcbiAgICAuLi4odHlwZW9mIHJlc3VsdC5zaXplID09PSAnbnVtYmVyJyA/IHtzaXplOiByZXN1bHQuc2l6ZX0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBzY2hlbWFVbmNoYW5nZWQgPSBmaWVsZE5hbWVzRXF1YWwoZGF0YXNldC5maWVsZHMsIHJlc3VsdC5kYXRhPy5maWVsZHMpO1xuXG4gIC8vIEFwcGx5IHRoZSBzbmFwc2hvdCB0byB0aGUgdGFibGUgY3VycmVudGx5IGluIHRoZSBzdG9yZS4gUHJvZ3Jlc3MgbWF5IGhhdmVcbiAgLy8gY29waWVkIGl0IG9mZiB0aGUgb2JqZWN0IHRoYXQgc3RhcnRlZCB0aGUgZmV0Y2g7IHRoZSB0YXNrIG5ldmVyIG11dGF0ZXMgaXQuXG4gIGlmICghcmVzdWx0Lm5vdE1vZGlmaWVkICYmIHJlc3VsdC5kYXRhKSB7XG4gICAgLy8gS2VwbGVyVGFibGUudXBkYXRlIGlzIGFzeW5jIHNvIER1Y2tEQiBjYW4gYXdhaXQgQXJyb3cgY29udmVyc2lvbi4gVGhlXG4gICAgLy8gQ1NWL0dlb0pTT04gcGF0aCAoYW5kIEtlcGxlclRhYmxlLmltcG9ydERhdGEpIHJ1biBzeW5jaHJvbm91c2x5IGJlZm9yZVxuICAgIC8vIHRoZSBmaXJzdCBhd2FpdCwgc28gdGhlIHN0b3JlIHRhYmxlIGlzIHVwZGF0ZWQgYmVmb3JlIHdlIGNvcHkgaXQgYmVsb3cuXG4gICAgdm9pZCBkYXRhc2V0LnVwZGF0ZShyZXN1bHQuZGF0YSk7XG4gIH1cblxuICBjb25zdCByZWZyZXNoZWQgPSBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCBtZXRhZGF0YVBhdGNoKTtcbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IHJlZnJlc2hlZFxuICB9O1xuXG4gIGlmIChyZXN1bHQubm90TW9kaWZpZWQgfHwgIXJlc3VsdC5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHNcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFzY2hlbWFVbmNoYW5nZWQpIHtcbiAgICByZXR1cm4gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKHN0YXRlLCBkYXRhSWQsIGRhdGFzZXRzKTtcbiAgfVxuXG4gIC8vIFJlYnVpbGQgZG9tYWlucyBmcm9tIGFsbCBkYXRhc2V0cyBpbiBhIHN5bmNlZCBmaWx0ZXIsIGtlZXBpbmcgaXRzIHNlbGVjdGlvblxuICAvLyBhbmQgc2V0dGluZ3MuIFJldmFsaWRhdGluZyBhIHNhdmVkIGZpbHRlciB3b3VsZCByZXNldCBpdHMgR1BVIG1vZGUuXG4gIGNvbnN0IGZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzLm1hcChmaWx0ZXIgPT4ge1xuICAgIGlmICghZmlsdGVyLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpIHx8IGZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbikge1xuICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG4gICAgY29uc3QgZG9tYWluU3RlcHMgPSBtZXJnZUZpbHRlckRvbWFpbihmaWx0ZXIsIGRhdGFzZXRzKTtcbiAgICByZXR1cm4gZG9tYWluU3RlcHMgPyB7Li4uZmlsdGVyLCBkb21haW46IGRvbWFpblN0ZXBzLmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHMuc3RlcH0gOiBmaWx0ZXI7XG4gIH0pO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzLCBmaWx0ZXJzfSwgZGF0YUlkKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0U3RhdGUsXG4gICAgZmlsdGVyczogbmV4dFN0YXRlLmZpbHRlcnMubWFwKGZpbHRlciA9PlxuICAgICAgZmlsdGVyLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpXG4gICAgICAgID8gdXBkYXRlRmlsdGVyUGxvdChcbiAgICAgICAgICAgIG5leHRTdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgICAgIGZpbHRlci5kYXRhSWQucmVkdWNlKHJlbW92ZUZpbHRlclBsb3QsIGZpbHRlciksXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBuZXh0U3RhdGUubGF5ZXJzXG4gICAgICAgICAgKVxuICAgICAgICA6IGZpbHRlclxuICAgIClcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoc3RhdGU6IFZpc1N0YXRlLCBkYXRhSWQ6IHN0cmluZyk6IFZpc1N0YXRlIHtcbiAgLy8gUG9seWdvbiBmaWx0ZXJzIHJlYWQgY2FjaGVkIGdlb21ldHJ5LiBSZWZyZXNoIGl0IGJlZm9yZSBmaWx0ZXJpbmcgc28gYVxuICAvLyBtb3ZlZCBmZWF0dXJlIGlzIHRlc3RlZCBhdCBpdHMgbmV3IHBvc2l0aW9uLCBpbmNsdWRpbmcgc2FtZS1sZW5ndGggdXBkYXRlcy5cbiAgY29uc3QgbmVlZHNHZW9tZXRyeSA9IHN0YXRlLmxheWVycy5zb21lKFxuICAgIGxheWVyID0+XG4gICAgICBsYXllci5jb25maWcuZGF0YUlkID09PSBkYXRhSWQgJiZcbiAgICAgIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXIpICYmXG4gICAgICBzdGF0ZS5maWx0ZXJzLnNvbWUoXG4gICAgICAgIGZpbHRlciA9PlxuICAgICAgICAgIGZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbiAmJlxuICAgICAgICAgIGZpbHRlci5lbmFibGVkICE9PSBmYWxzZSAmJlxuICAgICAgICAgIGZpbHRlci5sYXllcklkPy5pbmNsdWRlcyhsYXllci5pZClcbiAgICAgIClcbiAgKTtcbiAgaWYgKG5lZWRzR2VvbWV0cnkpIHtcbiAgICBzdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShzdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIH1cbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgW2RhdGFJZF0sXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUuZmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuZnVuY3Rpb24gaXNEYXRhc2V0Um93TGlzdChcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdXG4pOiByb3dzIGlzIFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocm93cykgfHwgIXJvd3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93cyk7XG4gIH1cbiAgLy8gQSBzaW5nbGUgY29sdW1uLW9yZGVyZWQgcm93IGlzIGFuIGFycmF5IG9mIHByaW1pdGl2ZXM7IGEgbGlzdCBvZiByb3dzIGlzXG4gIC8vIGFuIGFycmF5IG9mIGFycmF5cyBvciBhbiBhcnJheSBvZiBmaWVsZC1uYW1lIHJlY29yZHMuXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHJvd3NbMF0pIHx8IGlzUGxhaW5PYmplY3Qocm93c1swXSk7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXlSb3cocm93OiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdywgZmllbGRzOiBGaWVsZFtdKTogYW55W10gfCBudWxsIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocm93KSkge1xuICAgIHJldHVybiByb3cubGVuZ3RoID09PSBmaWVsZHMubGVuZ3RoID8gcm93IDogbnVsbDtcbiAgfVxuICBpZiAoaXNQbGFpbk9iamVjdChyb3cpKSB7XG4gICAgY29uc3QgcmVjb3JkID0gcm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJldHVybiBmaWVsZHMubWFwKGZpZWxkID0+XG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVjb3JkLCBmaWVsZC5uYW1lKSA/IHJlY29yZFtmaWVsZC5uYW1lXSA6IG51bGxcbiAgICApO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhc2V0Um93cyhcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdLFxuICBmaWVsZHM6IEZpZWxkW11cbik6IGFueVtdW10gfCBudWxsIHtcbiAgaWYgKCFmaWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbGlzdCA9IGlzRGF0YXNldFJvd0xpc3Qocm93cykgPyByb3dzIDogW3Jvd3NdO1xuICBpZiAoIWxpc3QubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZDogYW55W11bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcnJheVJvdyA9IHRvQXJyYXlSb3cobGlzdFtpXSwgZmllbGRzKTtcbiAgICBpZiAoIWFycmF5Um93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbm9ybWFsaXplZC5wdXNoKGFycmF5Um93KTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBBcHBlbmQgb3IgdXBzZXJ0IHJvd3Mgb24gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBvciBBcnJvdyBkYXRhc2V0LiBLZWVwcyBsYXllcnMgYW5kIHJlLXJ1bnMgZmlsdGVycy5cbiAqIER1Y2tEQiB0YWJsZXMgd2FybiBhbmQgYXJlIGxlZnQgdW5jaGFuZ2VkIChJTlNFUlQgbm90IGltcGxlbWVudGVkKS4gTmVzdGVkLCBiaW5hcnksIGFuZCBnZW9hcnJvdyBBcnJvdyBjb2x1bW5zIGFyZSByZWplY3RlZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb0RhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd3MsIG9wdGlvbnN9OiBWaXNTdGF0ZUFjdGlvbnMuQWRkVG9EYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZURhdGFzZXRSb3dzKHJvd3MsIGRhdGFzZXQuZmllbGRzKTtcbiAgaWYgKCFub3JtYWxpemVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgYXBwbGllZCA9IG9wdGlvbnM/LnVwc2VydEJ5XG4gICAgPyBkYXRhc2V0LnVwc2VydFJvd3Mobm9ybWFsaXplZCwgb3B0aW9ucy51cHNlcnRCeSlcbiAgICA6IGRhdGFzZXQuYXBwZW5kUm93cyhub3JtYWxpemVkKTtcbiAgaWYgKCFhcHBsaWVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIERlbGV0ZSByb3dzIGJ5IGluZGV4IG9yIGJ5IGZpZWxkIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIGluLW1lbW9yeSByb3cgb3IgQXJyb3cgZGF0YXNldC5cbiAqIEtlZXBzIGxheWVycy4gRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd0luZGV4ZXMsIGJ5RmllbGR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBpbmRleGVzID0gYnlGaWVsZFxuICAgID8gZGF0YXNldC5maW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMoYnlGaWVsZC5maWVsZCwgdG9BcnJheShieUZpZWxkLnZhbHVlcykpXG4gICAgOiB0b0FycmF5KHJvd0luZGV4ZXMgPz8gW10pO1xuICBpZiAoIWluZGV4ZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghZGF0YXNldC5yZW1vdmVSb3dzKGluZGV4ZXMpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIFJlY29yZCBhIGZhaWxlZCByZW1vdGUgZGF0YXNldCByZWZyZXNoIHdpdGhvdXQgZHJvcHBpbmcgZXhpc3Rpbmcgcm93cy5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBlcnJvcn06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7XG4gICAgICAgIHJlZnJlc2hTdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIHJlZnJlc2hFcnJvcjogZXJyb3I/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSxcbiAgICAgICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgICAgIH0pXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG50eXBlIFByb2dyZXNzaXZlTG9hZENvbnRpbnVhdGlvbiA9IFJldHVyblR5cGU8dHlwZW9mIGxvYWRGaWxlc1N1Y2Nlc3M+ICYge1xuICBwcm9ncmVzc2l2ZVN0ZXBzOiBGaWxlQ2FjaGVJdGVtW11bXTtcbn07XG5cbnR5cGUgUHJvZ3Jlc3NpdmVVcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvbiA9IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvbiAmIHtcbiAgb25GaW5pc2g/OiBQcm9ncmVzc2l2ZUxvYWRDb250aW51YXRpb247XG59O1xuXG50eXBlIFByb2dyZXNzaXZlQ3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkID0gQ3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkICYge1xuICBvbkZpbmlzaD86IFByb2dyZXNzaXZlTG9hZENvbnRpbnVhdGlvbjtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3QgdXBkYXRlVmlzRGF0YVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gZGF0YXNldHMgY2FuIGJlIGEgc2luZ2xlIGRhdGEgZW50cmllcyBvciBhbiBhcnJheSBvZiBtdWx0aXBsZSBkYXRhIGVudHJpZXNcbiAgY29uc3Qge2NvbmZpZywgb3B0aW9uc30gPSBhY3Rpb247XG5cbiAgLy8gYXBwbHkgY29uZmlnIGlmIHBhc3NlZCBmcm9tIGFjdGlvblxuICAvLyBUT0RPOiB3ZSBkb24ndCBoYW5kbGUgYXN5bmMgbWVyZ2VycyBoZXJlIHlldFxuICBsZXQgdXBkYXRlZFN0YXRlID0gY29uZmlnXG4gICAgPyByZWNlaXZlTWFwQ29uZmlnVXBkYXRlcihzdGF0ZSwge1xuICAgICAgICBwYXlsb2FkOiB7Y29uZmlnLCBvcHRpb25zfVxuICAgICAgfSlcbiAgICA6IHN0YXRlO1xuXG4gIGNvbnN0IGRhdGFzZXRzID0gdG9BcnJheShhY3Rpb24uZGF0YXNldHMpO1xuICBpZiAoIWRhdGFzZXRzLmxlbmd0aCkge1xuICAgIHJldHVybiB1cGRhdGVkU3RhdGU7XG4gIH1cblxuICBjb25zdCByZWFkeVRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG4gIGNvbnN0IHJlbW90ZVRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG4gIGNvbnN0IGh5ZHJhdGVQcm9ncmVzczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuXG4gIGRhdGFzZXRzLmZvckVhY2goKHtpbmZvID0ge30sIC4uLnJlc3R9LCBkYXRhc2V0SW5kZXgpID0+IHtcbiAgICBjb25zdCBwcm90byA9IHtpbmZvLCAuLi5yZXN0fTtcbiAgICBjb25zdCByZW1vdGUgPSBuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlKHByb3RvKTtcbiAgICBpZiAocmVtb3RlKSB7XG4gICAgICBoeWRyYXRlUHJvZ3Jlc3NbZ2V0RGF0YXNldFByb2dyZXNzSWQocHJvdG8sIGRhdGFzZXRJbmRleCldID0gMDtcbiAgICB9XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeVRhc2socHJvdG8sIHN0YXRlLmRhdGFzZXRzKTtcbiAgICBpZiAodGFzaykge1xuICAgICAgKHJlbW90ZSA/IHJlbW90ZVRhc2tzIDogcmVhZHlUYXNrcykucHVzaCh0YXNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldCBkdWUgdG8gZGF0YSB2ZXJpZmljYXRpb24gZXJyb3JzYCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWZhaWxlZC0ke2RhdGFzZXRJbmRleH1gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFBhcnNlZCBkYXRhc2V0cyBhcmUgY29tbWl0dGVkIG9uIHRoZWlyIG93bi4gQSByZW1vdGUgZG93bmxvYWQgaW4gdGhlIHNhbWVcbiAgLy8gYWRkIG11c3Qgbm90IGhvbGQgdGhlbSB1bnRpbCB0aGUgVVJMIGZpbmlzaGVzLlxuICBjb25zdCBwcm9ncmVzc0lkcyA9IE9iamVjdC5rZXlzKGh5ZHJhdGVQcm9ncmVzcyk7XG4gIGNvbnN0IGJhdGNoZXM6IEFycmF5PHt0YXNrczogVGFza0Rlc2NyaXB0b3JbXTsgcHJvZ3Jlc3NJZHM6IHN0cmluZ1tdfT4gPSBbXTtcbiAgaWYgKHJlYWR5VGFza3MubGVuZ3RoKSB7XG4gICAgYmF0Y2hlcy5wdXNoKHt0YXNrczogcmVhZHlUYXNrcywgcHJvZ3Jlc3NJZHM6IFtdfSk7XG4gIH1cbiAgaWYgKHJlbW90ZVRhc2tzLmxlbmd0aCkge1xuICAgIGJhdGNoZXMucHVzaCh7dGFza3M6IHJlbW90ZVRhc2tzLCBwcm9ncmVzc0lkc30pO1xuICB9XG5cbiAgaWYgKGJhdGNoZXMubGVuZ3RoKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIoXG4gICAgICB1cGRhdGVkU3RhdGUsXG4gICAgICBwYXlsb2FkXyh7Y2hhbmdlOiBiYXRjaGVzLmxlbmd0aCwgdHlwZTogJyd9KVxuICAgICk7XG4gICAgaWYgKHByb2dyZXNzSWRzLmxlbmd0aCkge1xuICAgICAgdXBkYXRlZFN0YXRlID0ge1xuICAgICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICAgIGxvYWRpbmdQcm9ncmVzczoge1xuICAgICAgICAgIC4uLnVwZGF0ZWRTdGF0ZS5sb2FkaW5nUHJvZ3Jlc3MsXG4gICAgICAgICAgLi4uaHlkcmF0ZVByb2dyZXNzXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgW1xuICAgIC4uLmJhdGNoZXMubWFwKChiYXRjaCwgYmF0Y2hJbmRleCkgPT5cbiAgICAgIFRhc2suYWxsU2V0dGxlZChiYXRjaC50YXNrcykubWFwKHJlc3VsdHMgPT4ge1xuICAgICAgICBjb25zdCBvbkZpbmlzaCA9IChhY3Rpb24gYXMgUHJvZ3Jlc3NpdmVVcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvbikub25GaW5pc2g7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFByb2dyZXNzaXZlQ3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkID0ge1xuICAgICAgICAgIHJlc3VsdHMsXG4gICAgICAgICAgYWRkVG9NYXBPcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHByb2dyZXNzSWRzOiBiYXRjaC5wcm9ncmVzc0lkcyxcbiAgICAgICAgICAuLi4ob25GaW5pc2ggJiYgYmF0Y2hJbmRleCA9PT0gYmF0Y2hlcy5sZW5ndGggLSAxID8ge29uRmluaXNofSA6IHt9KVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MocGF5bG9hZCk7XG4gICAgICB9KVxuICAgICksXG4gICAgLi4ubm90aWZpY2F0aW9uVGFza3NcbiAgXSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQ+XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnMsIHByb2dyZXNzSWRzLCBvbkZpbmlzaH0gPVxuICAgIGFjdGlvbi5wYXlsb2FkIGFzIFByb2dyZXNzaXZlQ3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkO1xuICBjb25zdCBub3RpZmljYXRpb25UYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gcmVzdWx0cy5yZWR1Y2UoKGFjY3UsIHJlc3VsdCwgaWR4KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gcmVzdWx0LnZhbHVlO1xuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBbZGF0YXNldC5pZF06IGRhdGFzZXR9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzaG93IGVycm9yIG5vdGlmaWNhdGlvbiBvbiBVSVxuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0soKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBEYXRhc2V0IGVycm9yOiBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQ6XG4gICAgICAgICAgICAgICR7cmVzdWx0LnJlYXNvbiB8fCAocmVzdWx0IGFzIGFueSkudmFsdWV9YCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWNyZWF0ZS1mYWlsZWQtJHtpZHh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG4gIH0sIHt9IGFzIERhdGFzZXRzKTtcbiAgLy8gc2F2ZSBuZXcgZGF0YXNldCBlbnRyeSB0byBzdGF0ZVxuICBjb25zdCBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGUsIG5ld0RhdGFFbnRyaWVzKVxuICB9O1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBsYXllck1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+IG0ud2FpdEZvckxheWVyRGF0YSk7XG4gIGNvbnN0IGRhdGFzZXRNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiAhbGF5ZXJNZXJnZXJzLmluY2x1ZGVzKG0pKTtcblxuICBjb25zdCBuZXdEYXRhSWRzID0gT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpO1xuICBjb25zdCBwb3N0TWVyZ2VyUGF5bG9hZCA9IHtcbiAgICBuZXdEYXRhSWRzLFxuICAgIG9wdGlvbnM6IGFkZFRvTWFwT3B0aW9ucyxcbiAgICBsYXllck1lcmdlcnNcbiAgfTtcblxuICBjb25zdCB1cGRhdGVkU3RhdGUgPSBhcHBseU1lcmdlcnNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7XG4gICAgbWVyZ2VyczogZGF0YXNldE1lcmdlcnMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIGNsZWFyTG9hZGluZ1Byb2dyZXNzKFxuICAgICAgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAtMX0pKSxcbiAgICAgIHByb2dyZXNzSWRzXG4gICAgKSxcbiAgICBbXG4gICAgICAuLi5ub3RpZmljYXRpb25UYXNrcyxcbiAgICAgIC8vIE1hdGNoIHRoZSBvcmlnaW5hbCBBcnJvdyBiYXRjaGluZyBjYWRlbmNlOiBjcm9zcyBhbiBldmVudC1sb29wIHR1cm4gc29cbiAgICAgIC8vIFJlYWN0L2RlY2suZ2wgY2FuIHBhaW50IHRoaXMgc25hcHNob3QgYmVmb3JlIHRoZSBuZXh0IHRhYmxlIHVwZGF0ZS5cbiAgICAgIC4uLihvbkZpbmlzaCA/IFtERUxBWV9UQVNLKDEwKS5tYXAoKCkgPT4gb25GaW5pc2gpXSA6IFtdKVxuICAgIF1cbiAgKTtcbn07XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1lcmdlcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG1lcmdlcnM6IE1lcmdlcjxhbnk+W107XG4gICAgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHttZXJnZXJzLCBwb3N0TWVyZ2VyUGF5bG9hZH0gPSBhY3Rpb247XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IG1lcmdlU3RhdGVSZXN1bHQgPSBtZXJnZVN0YXRlRnJvbU1lcmdlcnMoXG4gICAgc3RhdGUsXG4gICAge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICAuLi5zdGF0ZS5pbml0aWFsU3RhdGVcbiAgICB9LFxuICAgIG1lcmdlcnMsXG4gICAgLy8gbmV3RGF0YUlkcyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICApO1xuXG4gIC8vIGlmIGFsbCBtZXJnZWQsIGtpY2t1cCBwb3N0IG1lcmdlIHByb2Nlc3NcbiAgLy8gaWYgbm90IHdhaXRcbiAgcmV0dXJuIG1lcmdlU3RhdGVSZXN1bHQuYWxsTWVyZ2VkXG4gICAgPyBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkKVxuICAgIDogbWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZTtcbn1cblxuLyoqIFJlYWRzIGBvcHRpb25zLmxheWVyVmlzQ29uZmlnYCBmcm9tIGFkZC1kYXRhLXRvLW1hcCAoc2VlIGBBZGREYXRhVG9NYXBPcHRpb25zYCkuICovXG5mdW5jdGlvbiBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhcbiAgb3B0aW9uczogUG9zdE1lcmdlclBheWxvYWRbJ29wdGlvbnMnXSB8IHVuZGVmaW5lZFxuKTogUGFydGlhbDxMYXllclZpc0NvbmZpZz4gfCB1bmRlZmluZWQge1xuICBpZiAoIW9wdGlvbnMgfHwgISgnbGF5ZXJWaXNDb25maWcnIGluIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBwYXRjaCA9IChvcHRpb25zIGFzIHtsYXllclZpc0NvbmZpZz86IHVua25vd259KS5sYXllclZpc0NvbmZpZztcbiAgaWYgKHBhdGNoID09IG51bGwgfHwgdHlwZW9mIHBhdGNoICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhdGNoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHBhdGNoIGFzIFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+O1xufVxuXG4vKipcbiAqIFBvbHlnb24gZmlsdGVycyBmb3IgdGhlc2UgbGF5ZXJzIHVzZSBjZW50cm9pZHMgLyBkYXRhVG9GZWF0dXJlIGZyb21cbiAqIGNhbGN1bGF0ZUxheWVyRGF0YS4gT3RoZXIgdHlwZXMgKGxhdC9sbmcgcG9pbnRzLCBIMywgYXJjcykgY2FuIGZpbHRlclxuICogZnJvbSBjb2x1bW5zIG9uIHRoZSBmaXJzdCBwYXNzIGFuZCBtdXN0IG5vdCBiZSByZWNhbGN1bGF0ZWQgaGVyZS5cbiAqL1xuZnVuY3Rpb24gcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGxheWVyLnR5cGUgPT09IExBWUVSX1RZUEVTLmdlb2pzb24gfHwgbGF5ZXIuY29uZmlnPy5jb2x1bW5Nb2RlID09PSAnZ2VvanNvbic7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmZ1bmN0aW9uIHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VkU3RhdGU6IFZpc1N0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtuZXdEYXRhSWRzLCBvcHRpb25zLCBsYXllck1lcmdlcnN9ID0gcG9zdE1lcmdlclBheWxvYWQ7XG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBtZXJnZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihmID0+XG4gICAgZi5kYXRhSWQuZmluZChmRGF0YUlkID0+IG5ld0RhdGFJZHMuaW5jbHVkZXMoZkRhdGFJZCkpXG4gICk7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJlZDogc3RyaW5nW10gPSB1bmlxKFxuICAgIG5ld0ZpbHRlcnMucmVkdWNlKChhY2N1LCBmKSA9PiBbLi4uYWNjdSwgLi4uZi5kYXRhSWRdLCBbXSBhcyBzdHJpbmdbXSlcbiAgKTtcbiAgY29uc3QgZGF0YUVtcHR5ID0gbmV3RGF0YUlkcy5sZW5ndGggPCAxO1xuXG4gIGxldCBuZXdMYXllcnMgPSAhZGF0YUVtcHR5XG4gICAgPyBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gbmV3RGF0YUlkcy5yZWR1Y2UoXG4gICAgKGFjY3UsIGlkKSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtpZF06IG1lcmdlZFN0YXRlLmRhdGFzZXRzW2lkXVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbiAgaWYgKCFuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5hdXRvQ3JlYXRlTGF5ZXJzICE9PSBmYWxzZSkge1xuICAgIC8vIG5vIGxheWVyIG1lcmdlZCwgZmluZCBkZWZhdWx0c1xuICAgIGNvbnN0IHJlc3VsdCA9IGFkZERlZmF1bHRMYXllcnMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHJlc3VsdC5zdGF0ZTtcbiAgICBuZXdMYXllcnMgPSByZXN1bHQubmV3TGF5ZXJzO1xuICB9XG5cbiAgaWYgKG1lcmdlZFN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAvLyBpZiBtYXAgaXMgc3BsaXQsIGFkZCBuZXcgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICAgIG5ld0xheWVycyA9IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgICBsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZClcbiAgICApO1xuICAgIC8vIGEgbGF5ZXIgYWxyZWFkeSBpbiBhIHBhbmVsIHdhcyBtZXJnZWQgZnJvbSBzcGxpdCBtYXBzLCB3aGljaCBkZWNpZGUgdGhlIHBhbmVscyBzaG93aW5nIGl0XG4gICAgY29uc3QgbGF5ZXJzTm90SW5TcGxpdE1hcHMgPSBuZXdMYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PiAhbWVyZ2VkU3RhdGUuc3BsaXRNYXBzLnNvbWUoc20gPT4gbC5pZCBpbiBzbS5sYXllcnMpXG4gICAgKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHtcbiAgICAgIC4uLm1lcmdlZFN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKG1lcmdlZFN0YXRlLnNwbGl0TWFwcywgbGF5ZXJzTm90SW5TcGxpdE1hcHMpXG4gICAgfTtcbiAgfVxuXG4gIG1lcmdlZFN0YXRlID0gbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzKFxuICAgIG1lcmdlZFN0YXRlLFxuICAgIGxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zKG9wdGlvbnMpLFxuICAgIG5ld0RhdGFJZHNcbiAgKTtcblxuICAvLyBpZiBubyB0b29sdGlwcyBtZXJnZWQgYWRkIGRlZmF1bHQgdG9vbHRpcHNcbiAgbmV3RGF0YUlkcy5mb3JFYWNoKGRhdGFJZCA9PiB7XG4gICAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IG1lcmdlZFN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIC8vIGxvYWRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIGZhbHNlIGFuZCB3ZSBkb24ndCB3YW50IHRvIHJ1biBhZGREZWZhdWx0VG9vbHRpcHMgd2hlbiB0b29sdGlwRmllbGRzIGlzIGVtcHR5XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucz8uYXV0b0NyZWF0ZVRvb2x0aXBzICE9PSBmYWxzZSAmJlxuICAgICAgKCFBcnJheS5pc0FycmF5KHRvb2x0aXBGaWVsZHMpIHx8ICF0b29sdGlwRmllbGRzLmxlbmd0aClcbiAgICApIHtcbiAgICAgIC8vIGFkZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgdHJ1ZVxuICAgICAgbWVyZ2VkU3RhdGUgPSBhZGREZWZhdWx0VG9vbHRpcHMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzW2RhdGFJZF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdXBkYXRlZERhdGFzZXRzID0gZGF0YUVtcHR5XG4gICAgPyBPYmplY3Qua2V5cyhtZXJnZWRTdGF0ZS5kYXRhc2V0cylcbiAgICA6IHVuaXEoT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpLmNvbmNhdChkYXRhc2V0RmlsdGVyZWQpKTtcblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG1lcmdlZFN0YXRlLCB1cGRhdGVkRGF0YXNldHMsIHVuZGVmaW5lZCk7XG5cbiAgLy8gUG9seWdvbiBwZXItbGF5ZXIgaW5kZXhlcyBuZWVkIGNlbnRyb2lkcyAvIGRhdGFUb0ZlYXR1cmUsIHdoaWNoIGFyZSBvbmx5XG4gIC8vIHBvcHVsYXRlZCBieSB0aGUgbGF5ZXItZGF0YSBwYXNzIGFib3ZlLiBTa2lwIGRhdGFzZXRzIHdob3NlIHRhcmdldGVkIGxheWVyc1xuICAvLyBhbHJlYWR5IGZpbHRlcmVkIGZyb20gY29sdW1ucyAoZS5nLiBsYXQvbG5nIHBvaW50cykuXG4gIGNvbnN0IHBvbHlnb25GaWx0ZXJzID0gdXBkYXRlZFN0YXRlLmZpbHRlcnMuZmlsdGVyKFxuICAgIGYgPT4gZi50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbiAmJiBmLmVuYWJsZWQgIT09IGZhbHNlXG4gICk7XG4gIGNvbnN0IHBvbHlnb25NZXRhRGF0YUlkcyA9IHVuaXEoXG4gICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgbGF5ZXIgPT5cbiAgICAgICAgICBwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhKGxheWVyKSAmJlxuICAgICAgICAgIHBvbHlnb25GaWx0ZXJzLnNvbWUoZiA9PiBmLmxheWVySWQ/LmluY2x1ZGVzKGxheWVyLmlkKSlcbiAgICAgIClcbiAgICAgIC5tYXAobGF5ZXIgPT4gbGF5ZXIuY29uZmlnLmRhdGFJZClcbiAgICAgIC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpICYmIHVwZGF0ZWREYXRhc2V0cy5pbmNsdWRlcyhpZCkpXG4gICk7XG4gIGlmIChwb2x5Z29uTWV0YURhdGFJZHMubGVuZ3RoKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKFxuICAgICAge1xuICAgICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICAgIGRhdGFzZXRzOiBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgICAgICAgIHBvbHlnb25NZXRhRGF0YUlkcyxcbiAgICAgICAgICB1cGRhdGVkU3RhdGUuZGF0YXNldHMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmZpbHRlcnMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmxheWVyc1xuICAgICAgICApXG4gICAgICB9LFxuICAgICAgcG9seWdvbk1ldGFEYXRhSWRzXG4gICAgKTtcbiAgfVxuXG4gIC8vIHJlZ2lzdGVyIGxheWVyIGFuaW1hdGlvbiBkb21haW4sXG4gIC8vIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGxheWVyIGRhdGEgaXMgY2FsY3VsYXRlZFxuICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4odXBkYXRlZFN0YXRlKTtcblxuICAvLyB0cnkgdG8gcHJvY2VzcyBsYXllck1lcmdlcnMgYWZ0ZXIgZGF0YXNldCtkYXRhc2V0TWVyZ2Vyc1xuICB1cGRhdGVkU3RhdGUgPVxuICAgIGxheWVyTWVyZ2VycyAmJiBsYXllck1lcmdlcnMubGVuZ3RoID4gMFxuICAgICAgPyBhcHBseU1lcmdlcnNVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwge1xuICAgICAgICAgIG1lcmdlcnM6IGxheWVyTWVyZ2VycyxcbiAgICAgICAgICBwb3N0TWVyZ2VyUGF5bG9hZDogey4uLnBvc3RNZXJnZXJQYXlsb2FkLCBsYXllck1lcmdlcnM6IFtdfVxuICAgICAgICB9KVxuICAgICAgOiB1cGRhdGVkU3RhdGU7XG5cbiAgLy8gY2VudGVyIHRoZSBtYXAgb25jZSB0aGUgZGF0YXNldCBpcyBjcmVhdGVkXG4gIGlmIChuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5jZW50ZXJNYXApIHtcbiAgICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKG5ld0xheWVycyk7XG4gICAgaWYgKGJvdW5kcykge1xuICAgICAgY29uc3QgcGFkZGluZyA9IG9wdGlvbnM/LnBhZGRpbmc7XG4gICAgICBjb25zdCBmaXRCb3VuZHNUYXNrID0gQUNUSU9OX1RBU0tfRklUX0JPVU5EUygpLm1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBmaXRNYXBCb3VuZHMoYm91bmRzLCBwYWRkaW5nKTtcbiAgICAgIH0pO1xuICAgICAgdXBkYXRlZFN0YXRlID0gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBmaXRCb3VuZHNUYXNrKTtcbiAgICB9XG4gIH1cblxuICAvLyBuZWVkIHRvIGNlbnRlciBtYXAgaGVyZSBpZiB3ZSBoYXZlIG5ldyBsYXllcnNcbiAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbn1cblxuLyoqXG4gKiBSZW5hbWUgYW4gZXhpc3RpbmcgZGF0YXNldCBpbiBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRGF0YXNldFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVuYW1lRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7bGFiZWw6IGFjdGlvbi5sYWJlbH19KTtcbn1cblxuY29uc3QgQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyA9IFsnbGFiZWwnLCAnY29sb3InLCAnbWV0YWRhdGEnXTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgcHJvcGVydGllcyBiZWZvcmUgdXBkYXRpbmcgdGhlIGRhdGFzZXQuXG4gKiBNYWtlcyBzdXJlIGVhY2ggcHJvcGVydHkgaXMgaW4gdGhlIGFsbG93ZWQgbGlzdFxuICogTWFrZXMgc3VyZSBjb2xvciB2YWx1ZSBpcyBSR0JcbiAqIFBlcmZvcm1zIGRlZXAgbWVyZ2Ugd2hlbiB1cGRhdGluZyBtZXRhZGF0YVxuICovXG5jb25zdCB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyA9IChwcm9wcywgZGF0YXNldCkgPT4ge1xuICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IE9iamVjdC5lbnRyaWVzKHByb3BzKS5yZWR1Y2UoKGFjYywgZW50cnkpID0+IHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBlbnRyeTtcbiAgICAvLyBpcyBpdCBhbGxvd2VkID9cbiAgICBpZiAoIUFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBhcmUgYWRkaW5nIGEgY29sb3IgYnV0IGl0IGlzIG5vdCBSR0Igd2UgZG9uJ3QgYWNjZXB0IHRoZSB2YWx1ZVxuICAgIC8vIGluIHRoZSBmdXR1cmUgYXMgd2UgYWRkIG1vcmUgcHJvcHMgd2Ugc2hvdWxkIGNoYW5nZSB0aGlzIGlmIGludG8gYSBzd2l0Y2hcbiAgICBpZiAoa2V5ID09PSAnY29sb3InICYmICFpc1JnYkNvbG9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICAvLyBkbyB3ZSBuZWVkIGRlZXAgbWVyZ2UgP1xuICAgIHJldHVybiB7Li4uYWNjLCBba2V5XTogaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyBkZWVwbWVyZ2UoZGF0YXNldFtrZXldIHx8IHt9LCB2YWx1ZSkgOiB2YWx1ZX07XG4gIH0sIHt9KTtcblxuICByZXR1cm4gdmFsaWRhdGVkUHJvcHM7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBEYXRhc2V0IHByb3BzIChsYWJlbCwgY29sb3IsIG1ldGEpLiBEbyBub3QgdXNlIHRvIHVwZGF0ZSBkYXRhIG9yIGFueSByZWxhdGVkIHByb3BlcnRpZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2RhdGFJZCwgcHJvcHN9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG4gIGNvbnN0IGV4aXN0aW5nID0gZGF0YXNldHNbZGF0YUlkXTtcblxuICBpZiAoZXhpc3RpbmcpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWRQcm9wcyA9IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzKHByb3BzLCBleGlzdGluZyk7XG4gICAgLy8gIHZhbGlkYXRlIHByb3BzOiBqdXN0IGNvbG9yIGZvciBub3dcbiAgICAvLyAgd2Ugb25seSBhbGxvdyBsYWJlbCwgY29sb3IgYW5kIG1ldGEgdG8gYmUgdXBkYXRlZFxuICAgIC8vIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcyk7XG4gICAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpXG4gICAgICB9XG4gICAgfTtcbiAgICAvLyBBIHRpbGVzZXQgYWNjZXNzIHRva2VuIGlzIHJlYWQgd2hpbGUgZm9ybWF0dGluZyBsYXllciBkYXRhLiBSZWZyZXNoXG4gICAgLy8gb25seSB3aGVuIHRoYXQgZmllbGQgY2hhbmdlcyBzbyBvdGhlciBtZXRhZGF0YSBlZGl0cyAoZS5nLiByZWZyZXNoXG4gICAgLy8gaW50ZXJ2YWwpIGRvIG5vdCByZWJ1aWxkIGV2ZXJ5IGxheWVyIG9uIHRoZSBkYXRhc2V0LlxuICAgIGlmIChwcm9wcy5tZXRhZGF0YSAmJiAndGlsZTNkQWNjZXNzVG9rZW4nIGluIHByb3BzLm1ldGFkYXRhKSB7XG4gICAgICByZXR1cm4gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgZGF0YUlkKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBSZS12YWxpZGF0ZSBhIGxpdmUgbGF5ZXIgYWdhaW5zdCBhIHRhYmxlIHdob3NlIHNjaGVtYSBqdXN0IGNoYW5nZWQuXG4gKlxuICogVGhlIGxheWVyJ3MgY29sdW1ucyAvIHZpc3VhbC1jaGFubmVsIGZpZWxkcyAvIHRleHQtbGFiZWwgZmllbGRzIGFyZSBmaXJzdFxuICogcmVtYXBwZWQgdG8gdGhlaXIgbmV3IG5hbWVzICh2aWEgYHJlbmFtZXNgKSBzbyB0aGUgbGF5ZXIgZm9sbG93cyBhIHJlbmFtZVxuICogaW5zdGVhZCBvZiB0cmVhdGluZyB0aGUgb2xkIGNvbHVtbiBhcyByZW1vdmVkLCB0aGVuIHJlLXZhbGlkYXRlZCB3aXRoXG4gKiBgdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGFgIOKAlCB0aGUgc2FtZSBzZXJpYWxpemUgKyB2YWxpZGF0ZSBwYXRoIHVzZWRcbiAqIHdoZW4gYSBzYXZlZCBjb25maWcgaXMgbG9hZGVkIGFnYWluc3QgbmV3IGRhdGEuIFJldHVybnMgYG51bGxgIHdoZW4gYVxuICogcmVxdWlyZWQgY29sdW1uIGlzIGdvbmUgKHRoZSBsYXllciBjYW4gbm8gbG9uZ2VyIGJlIGJ1aWx0KS5cbiAqL1xuZnVuY3Rpb24gcmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hKFxuICBsYXllcjogTGF5ZXIsXG4gIHJlbmFtZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG5ld1RhYmxlOiBLZXBsZXJUYWJsZSxcbiAgc3RhdGU6IFZpc1N0YXRlXG4pOiBMYXllciB8IG51bGwge1xuICBjb25zdCBjb25maWdQYXRjaDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIC8vIGZvbGxvdyByZW5hbWVkIGNvbHVtbnNcbiAgY29uc3QgY29sdW1uc1BhdGNoOiBSZWNvcmQ8c3RyaW5nLCB7dmFsdWU6IHN0cmluZyB8IG51bGw7IGZpZWxkSWR4OiBudW1iZXJ9PiA9IHt9O1xuICBsZXQgY29sdW1uc0NoYW5nZWQgPSBmYWxzZTtcbiAgT2JqZWN0LmVudHJpZXMobGF5ZXIuY29uZmlnLmNvbHVtbnMgfHwge30pLmZvckVhY2goKFtja2V5LCBjb2xdKSA9PiB7XG4gICAgaWYgKGNvbD8udmFsdWUgJiYgcmVuYW1lc1tjb2wudmFsdWVdKSB7XG4gICAgICBjb2x1bW5zUGF0Y2hbY2tleV0gPSB7Li4uY29sLCB2YWx1ZTogcmVuYW1lc1tjb2wudmFsdWVdfTtcbiAgICAgIGNvbHVtbnNDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBpZiAoY29sdW1uc0NoYW5nZWQpIHtcbiAgICBjb25maWdQYXRjaC5jb2x1bW5zID0gey4uLmxheWVyLmNvbmZpZy5jb2x1bW5zLCAuLi5jb2x1bW5zUGF0Y2h9O1xuICB9XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgdmlzdWFsLWNoYW5uZWwgZmllbGRzIChjb2xvckZpZWxkLCBzaXplRmllbGQsIC4uLilcbiAgT2JqZWN0LnZhbHVlcyhsYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkfSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gbGF5ZXIuY29uZmlnW2ZpZWxkXTtcbiAgICBpZiAoZmllbGRDb25maWc/Lm5hbWUgJiYgcmVuYW1lc1tmaWVsZENvbmZpZy5uYW1lXSkge1xuICAgICAgY29uZmlnUGF0Y2hbZmllbGRdID0gey4uLmZpZWxkQ29uZmlnLCBuYW1lOiByZW5hbWVzW2ZpZWxkQ29uZmlnLm5hbWVdfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGZvbGxvdyByZW5hbWVkIG9yIHJlLXR5cGVkIHRleHQtbGFiZWwgZmllbGRzXG4gIGlmIChsYXllci5jb25maWcudGV4dExhYmVsPy5sZW5ndGgpIHtcbiAgICBjb25maWdQYXRjaC50ZXh0TGFiZWwgPSBsYXllci5jb25maWcudGV4dExhYmVsLm1hcCh0bCA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gdGwuZmllbGQ/Lm5hbWU7XG4gICAgICBjb25zdCBmaWVsZCA9XG4gICAgICAgIG5hbWUgJiYgbmV3VGFibGUuZmllbGRzLmZpbmQoY2FuZGlkYXRlID0+IGNhbmRpZGF0ZS5uYW1lID09PSAocmVuYW1lc1tuYW1lXSA/PyBuYW1lKSk7XG4gICAgICByZXR1cm4gZmllbGQgJiYgKGZpZWxkLm5hbWUgIT09IG5hbWUgfHwgZmllbGQudHlwZSAhPT0gdGwuZmllbGQ/LnR5cGUpID8gey4uLnRsLCBmaWVsZH0gOiB0bDtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHNoYWxsb3ctY29weSB0aGUgbGF5ZXIgc28gd2UgbmV2ZXIgbXV0YXRlIHJlZHV4IHN0YXRlOyB0aGUgY29weSBrZWVwcyB0aGVcbiAgLy8gcHJvdG90eXBlIG1ldGhvZHMgKGB2aXN1YWxDaGFubmVsc2AgZ2V0dGVyLCBgaXNWYWxpZFRvU2F2ZWApIHNvIGl0XG4gIC8vIHNlcmlhbGl6ZXMgZXhhY3RseSBsaWtlIGEgbGl2ZSBsYXllci5cbiAgY29uc3QgbGF5ZXJDb3B5ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihsYXllcikpLCBsYXllcik7XG4gIGlmIChPYmplY3Qua2V5cyhjb25maWdQYXRjaCkubGVuZ3RoKSB7XG4gICAgbGF5ZXJDb3B5LmNvbmZpZyA9IHsuLi5sYXllci5jb25maWcsIC4uLmNvbmZpZ1BhdGNofTtcbiAgfVxuXG4gIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgIG5ld1RhYmxlLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBsYXllckNvcHksXG4gICAgc3RhdGUuc2NoZW1hXG4gICk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZCAmJiB2YWxpZGF0ZWQuaGFzQWxsQ29sdW1ucygpID8gdmFsaWRhdGVkIDogbnVsbDtcbn1cblxuY29uc3QgRklMVEVSX1BMT1RfWV9BWElTX1RZUEVTID0gbmV3IFNldDxzdHJpbmc+KFtBTExfRklFTERfVFlQRVMuaW50ZWdlciwgQUxMX0ZJRUxEX1RZUEVTLnJlYWxdKTtcblxuZnVuY3Rpb24gY2xlYXJUaW1lbGluZUZpbHRlclN0YXRlKGZpbHRlcjogRmlsdGVyKTogRmlsdGVyIHtcbiAgY29uc3Qge1xuICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiBfc3luY2VkV2l0aExheWVyVGltZWxpbmUsXG4gICAgc3luY1RpbWVsaW5lTW9kZTogX3N5bmNUaW1lbGluZU1vZGUsXG4gICAgdGltZUJpbnM6IF90aW1lQmlucyxcbiAgICBsaW5lQ2hhcnQ6IF9saW5lQ2hhcnQsXG4gICAgdGltZXpvbmU6IF90aW1lem9uZSxcbiAgICBpbnZlcnRUcmVuZENvbG9yOiBfaW52ZXJ0VHJlbmRDb2xvcixcbiAgICBzaG93VGltZURpc3BsYXk6IF9zaG93VGltZURpc3BsYXksXG4gICAgLi4ucmVzdFxuICB9ID0gZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICByZXR1cm4ge1xuICAgIC4uLnJlc3QsXG4gICAgZml4ZWREb21haW46IGZhbHNlLFxuICAgIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgICBhbmltYXRpb25XaW5kb3c6IEFOSU1BVElPTl9XSU5ET1cuZnJlZSxcbiAgICB5QXhpczogbnVsbCxcbiAgICBwbG90VHlwZToge3R5cGU6IFBMT1RfVFlQRVMuaGlzdG9ncmFtfVxuICB9IGFzIEZpbHRlcjtcbn1cblxuZnVuY3Rpb24gcmVjb25jaWxlVGltZWxpbmVQbG90QWZ0ZXJQcmltYXJ5UmVtb3ZhbChcbiAgZmlsdGVyOiBGaWx0ZXIsXG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXVxuKTogRmlsdGVyIHtcbiAgaWYgKGZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIGNvbnN0IHByaW1hcnlEYXRhc2V0ID0gZGF0YXNldHNbZmlsdGVyLmRhdGFJZFswXV07XG4gIGNvbnN0IHlBeGlzID0gZmlsdGVyLnlBeGlzPy5uYW1lXG4gICAgPyBwcmltYXJ5RGF0YXNldD8uZmllbGRzLmZpbmQoXG4gICAgICAgIGZpZWxkID0+IGZpZWxkLm5hbWUgPT09IGZpbHRlci55QXhpcz8ubmFtZSAmJiBGSUxURVJfUExPVF9ZX0FYSVNfVFlQRVMuaGFzKGZpZWxkLnR5cGUpXG4gICAgICApID8/IG51bGxcbiAgICA6IG51bGw7XG4gIGNvbnN0IGdyb3VwQnlGaWVsZE5hbWUgPSBmaWx0ZXIucGxvdFR5cGU/Lmdyb3VwQnk/LmZpZWxkTmFtZTtcbiAgY29uc3QgaGFzR3JvdXBCeUZpZWxkID0gZ3JvdXBCeUZpZWxkTmFtZVxuICAgID8gcHJpbWFyeURhdGFzZXQ/LmZpZWxkcy5zb21lKGZpZWxkID0+IGZpZWxkLm5hbWUgPT09IGdyb3VwQnlGaWVsZE5hbWUpXG4gICAgOiB0cnVlO1xuICBjb25zdCBwbG90VHlwZSA9IHtcbiAgICAuLi5maWx0ZXIucGxvdFR5cGUsXG4gICAgLi4uKGZpbHRlci55QXhpcyAmJiAheUF4aXMgPyB7dHlwZTogUExPVF9UWVBFUy5oaXN0b2dyYW19IDoge30pLFxuICAgIC4uLighaGFzR3JvdXBCeUZpZWxkID8ge2dyb3VwQnk6IG51bGx9IDoge30pXG4gIH07XG5cbiAgcmV0dXJuIHsuLi5maWx0ZXIsIHlBeGlzLCBwbG90VHlwZSwgbGluZUNoYXJ0OiB1bmRlZmluZWR9O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhbiBleGlzdGluZyBkYXRhc2V0J3Mgc2NoZW1hIChjb2x1bW5zL2ZpZWxkcykgaW4gcGxhY2UgYW5kIHJlY29uY2lsZVxuICogZXZlcnl0aGluZyB0aGF0IHJlZmVyZW5jZWQgdGhlIG9sZCBjb2x1bW5zOiBmaWx0ZXJzLCBsYXllcnMsIHRvb2x0aXAgZmllbGRzLFxuICogcGlubmVkIGNvbHVtbnMgYW5kIHNvcnQgc3RhdGUuIFRoZSBkYXRhc2V0IGtlZXBzIGl0cyBpZC9sYWJlbC9jb2xvci9tZXRhZGF0YS5cbiAqXG4gKiBgYWN0aW9uLmRhdGFgIGlzIHRoZSBzYW1lIHNoYXBlIGBLZXBsZXJUYWJsZS5pbXBvcnREYXRhYCBhY2NlcHRzIChge2NvbHMsXG4gKiBmaWVsZHMsIGFycm93VGFibGV9YCB3aGVuIHJlcGxhY2luZyBjb2x1bW5zKS4gYGFjdGlvbi5yZW5hbWVzYCBpcyBhbiBvcHRpb25hbFxuICogb2xkIOKGkiBuZXcgY29sdW1uLW5hbWUgbWFwIHNvIGxheWVycy9maWx0ZXJzL3Rvb2x0aXBzIGZvbGxvdyBhIHJlbmFtZSBpbnN0ZWFkXG4gKiBvZiB0cmVhdGluZyB0aGUgb2xkIGNvbHVtbiBhcyByZW1vdmVkLlxuICpcbiAqIFJlY29uY2lsaWF0aW9uIGlzIG5hbWUtYmFzZWQg4oCUIHRoZSBzYW1lIHdheSBrZXBsZXIuZ2wgbG9hZHMgYSBzYXZlZCBjb25maWdcbiAqIGFnYWluc3QgY2hhbmdlZCBkYXRhLiBBIGxheWVyIHdob3NlIHJlcXVpcmVkIGNvbHVtbiBpcyBnb25lIGlzIHJlbW92ZWQ7IGFcbiAqIGZpbHRlciBvbiBhIGdvbmUgY29sdW1uIGlzIGRyb3BwZWQgKG9yIHRoZSBkYXRhc2V0IGlzIHNwbGljZWQgb3V0IG9mIGEgc3luY2VkXG4gKiBmaWx0ZXIpOyB0b29sdGlwIGZpZWxkcyBhcmUgcmVtYXBwZWQgLyBkcm9wcGVkLlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBkYXRhLCByZW5hbWVzID0ge319ID0gYWN0aW9uO1xuICBjb25zdCBleGlzdGluZyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZXhpc3RpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyAxLiByZWJ1aWxkIHRoZSB0YWJsZSBzY2hlbWEgaW4gcGxhY2UgKHNhbWUgaWQvbGFiZWwvY29sb3IvbWV0YWRhdGEpXG4gIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB7fSk7XG4gIGNvbnN0IFtzb3J0ZWRDb2x1bW4sIHNvcnRNb2RlXSA9IE9iamVjdC5lbnRyaWVzKGV4aXN0aW5nLnNvcnRDb2x1bW4gfHwge30pWzBdIHx8IFtdO1xuICBuZXdUYWJsZS51cGRhdGVTY2hlbWEoZGF0YSk7XG4gIG5ld1RhYmxlLmRhdGFSZXZpc2lvbiA9IGV4aXN0aW5nLmRhdGFSZXZpc2lvbiArIDE7XG5cbiAgLy8gVGhlIGRhdGEgY29udGFpbmVyIGlzIHJlYnVpbHQgdW5zb3J0ZWQgYW5kIHVuZmlsdGVyZWQ7IHJlc2V0IHRoZSB0YWJsZSdzXG4gIC8vIHZpZXcgc3RhdGUgdGhhdCBpbmRleGVzIGludG8gdGhlIG9sZCBjb250YWluZXIuXG4gIG5ld1RhYmxlLmZpbHRlcmVkSWR4Q1BVID0gbmV3VGFibGUuYWxsSW5kZXhlcztcbiAgbmV3VGFibGUuZmlsdGVyUmVjb3JkQ1BVID0gdW5kZWZpbmVkO1xuICBuZXdUYWJsZS5zb3J0Q29sdW1uID0gdW5kZWZpbmVkO1xuICBuZXdUYWJsZS5zb3J0T3JkZXIgPSBudWxsO1xuICBjb25zdCBuZXdGaWVsZHNCeU5hbWUgPSBuZXcgTWFwKG5ld1RhYmxlLmZpZWxkcy5tYXAoZmllbGQgPT4gW2ZpZWxkLm5hbWUsIGZpZWxkXSkpO1xuICBuZXdUYWJsZS5waW5uZWRDb2x1bW5zID0gKGV4aXN0aW5nLnBpbm5lZENvbHVtbnMgfHwgW10pXG4gICAgLm1hcChuYW1lID0+IHJlbmFtZXNbbmFtZV0gPz8gbmFtZSlcbiAgICAuZmlsdGVyKG5hbWUgPT4gbmV3RmllbGRzQnlOYW1lLmhhcyhuYW1lKSk7XG4gIG5ld1RhYmxlLmhpZGRlbkNvbHVtbnMgPSAoZXhpc3RpbmcuaGlkZGVuQ29sdW1ucyB8fCBbXSlcbiAgICAubWFwKG5hbWUgPT4gcmVuYW1lc1tuYW1lXSA/PyBuYW1lKVxuICAgIC5maWx0ZXIobmFtZSA9PiBuZXdGaWVsZHNCeU5hbWUuaGFzKG5hbWUpKTtcbiAgY29uc3QgbmV4dFNvcnRlZENvbHVtbiA9IHNvcnRlZENvbHVtbiA/IHJlbmFtZXNbc29ydGVkQ29sdW1uXSA/PyBzb3J0ZWRDb2x1bW4gOiBudWxsO1xuICBpZiAobmV4dFNvcnRlZENvbHVtbiAmJiBzb3J0TW9kZSAmJiBuZXdGaWVsZHNCeU5hbWUuaGFzKG5leHRTb3J0ZWRDb2x1bW4pKSB7XG4gICAgc29ydERhdGFzZXRCeUNvbHVtbihuZXdUYWJsZSwgbmV4dFNvcnRlZENvbHVtbiwgc29ydE1vZGUpO1xuICB9XG5cbiAgY29uc3QgbmV3RGF0YXNldHMgPSB7Li4uc3RhdGUuZGF0YXNldHMsIFtkYXRhSWRdOiBuZXdUYWJsZX07XG4gIGNvbnN0IGRhdGFzZXRJZHNUb1JlZmlsdGVyID0gbmV3IFNldDxzdHJpbmc+KFtkYXRhSWRdKTtcblxuICAvLyAyLiByZWNvbmNpbGUgZmlsdGVyc1xuICBsZXQgbmV3RmlsdGVycyA9IHN0YXRlLmZpbHRlcnNcbiAgICAubWFwKGZpbHRlciA9PiB7XG4gICAgICBjb25zdCB2aSA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhSWQpO1xuICAgICAgaWYgKHZpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBQb2x5Z29uIGZpbHRlcnMgdGFyZ2V0IGxheWVycyByYXRoZXIgdGhhbiBkYXRhc2V0IGZpZWxkcywgc28gYSBjb2x1bW5cbiAgICAgIC8vIHR5cGUgY2hhbmdlIHNob3VsZCBub3QgcmVjb25jaWxlIHRoZW0gYWdhaW5zdCB0aGUgZmllbGQgbGlzdC5cbiAgICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnBvbHlnb24pIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2xkTmFtZSA9IGZpbHRlci5uYW1lW3ZpXTtcbiAgICAgIGNvbnN0IG5ld05hbWUgPSByZW5hbWVzW29sZE5hbWVdID8/IG9sZE5hbWU7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IG5ld1RhYmxlLmdldENvbHVtbkZpZWxkSWR4KG5ld05hbWUpO1xuICAgICAgY29uc3QgbmV4dEZpbHRlclR5cGUgPSBmaWVsZElkeCA9PT0gLTEgPyBudWxsIDogbmV3VGFibGUuZ2V0Q29sdW1uRmlsdGVyUHJvcHMobmV3TmFtZSk/LnR5cGU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgZmllbGRJZHggPT09IC0xIHx8XG4gICAgICAgIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDEgJiYgbmV4dEZpbHRlclR5cGUgJiYgbmV4dEZpbHRlclR5cGUgIT09IGZpbHRlci50eXBlKVxuICAgICAgKSB7XG4gICAgICAgIC8vIERyb3AgYSBtaXNzaW5nIGZpZWxkIG9yIGRldGFjaCBhbiBpbmNvbXBhdGlibGUgc3luY2VkIG1lbWJlci5cbiAgICAgICAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZmlsdGVyLmRhdGFJZC5mb3JFYWNoKGlkID0+IGRhdGFzZXRJZHNUb1JlZmlsdGVyLmFkZChpZCkpO1xuICAgICAgICBjb25zdCBkZXRhY2hlZEZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2aSwgbmV3RGF0YXNldHMpO1xuICAgICAgICByZXR1cm4gdmkgPT09IDBcbiAgICAgICAgICA/IHJlY29uY2lsZVRpbWVsaW5lUGxvdEFmdGVyUHJpbWFyeVJlbW92YWwoZGV0YWNoZWRGaWx0ZXIsIG5ld0RhdGFzZXRzKVxuICAgICAgICAgIDogZGV0YWNoZWRGaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbHVtbiBwcmVzZW50IChwb3NzaWJseSByZW5hbWVkKTogcmUtcmVzb2x2ZSBuYW1lL2ZpZWxkSWR4L2RvbWFpblxuICAgICAgbGV0IHtmaWx0ZXI6IHVwZGF0ZWR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoZmlsdGVyLCBuZXdEYXRhc2V0cywgZGF0YUlkLCBuZXdOYW1lLCB2aSwge1xuICAgICAgICBtZXJnZURvbWFpbjogdmkgPiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghdXBkYXRlZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxlYXZpbmdUaW1lRmlsdGVyID1cbiAgICAgICAgZmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgdXBkYXRlZC50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlO1xuXG4gICAgICBjb25zdCBvbGRFbmROYW1lID0gdG9BcnJheSgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuZW5kTmFtZSlbdmldO1xuICAgICAgaWYgKHVwZGF0ZWQudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBvbGRFbmROYW1lKSB7XG4gICAgICAgIGNvbnN0IGVuZE5hbWUgPSByZW5hbWVzW29sZEVuZE5hbWVdID8/IG9sZEVuZE5hbWU7XG4gICAgICAgIHVwZGF0ZWQgPVxuICAgICAgICAgIGFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSh1cGRhdGVkLCBuZXdEYXRhc2V0cywgZGF0YUlkLCBlbmROYW1lLCB2aSkuZmlsdGVyID8/XG4gICAgICAgICAgYXBwbHlUaW1lRmlsdGVyRW5kRmllbGROYW1lKHVwZGF0ZWQsIG5ld0RhdGFzZXRzLCBkYXRhSWQsIG51bGwsIHZpKS5maWx0ZXIgPz9cbiAgICAgICAgICB1cGRhdGVkO1xuICAgICAgfVxuXG4gICAgICAvLyBUaW1lIHBsb3RzIG9ubHkgYWNjZXB0IG51bWVyaWMgeS1heGlzIGZpZWxkcy4gUmUtcmVzb2x2ZSB0aGUgY29tcGxldGVcbiAgICAgIC8vIGZpZWxkIHNvIHR5cGUgYW5kIGZpZWxkSWR4IGFsc28gZm9sbG93IGEgc2NoZW1hIGNoYW5nZS5cbiAgICAgIGxldCB5QXhpcyA9IHVwZGF0ZWQueUF4aXM7XG4gICAgICBpZiAodmkgPT09IDAgJiYgdXBkYXRlZC55QXhpcz8ubmFtZSkge1xuICAgICAgICBjb25zdCB5QXhpc05hbWUgPSByZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV0gPz8gdXBkYXRlZC55QXhpcy5uYW1lO1xuICAgICAgICBjb25zdCB5QXhpc0ZpZWxkID0gbmV3RmllbGRzQnlOYW1lLmdldCh5QXhpc05hbWUpO1xuICAgICAgICB5QXhpcyA9IHlBeGlzRmllbGQgJiYgRklMVEVSX1BMT1RfWV9BWElTX1RZUEVTLmhhcyh5QXhpc0ZpZWxkLnR5cGUpID8geUF4aXNGaWVsZCA6IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGxldCBuZXh0RmlsdGVyID0ge1xuICAgICAgICAuLi51cGRhdGVkLFxuICAgICAgICB5QXhpcyxcbiAgICAgICAgLi4uKHVwZGF0ZWQueUF4aXMgJiYgIXlBeGlzXG4gICAgICAgICAgPyB7cGxvdFR5cGU6IHsuLi51cGRhdGVkLnBsb3RUeXBlLCB0eXBlOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbX19XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC8vIGNsYW1wIHRoZSB1c2VyJ3MgcHJldmlvdXMgc2VsZWN0aW9uIGludG8gdGhlIG5ldyBkb21haW4gaW5zdGVhZCBvZlxuICAgICAgICAvLyByZXNldHRpbmcgaXQgdG8gdGhlIGZ1bGwgcmFuZ2VcbiAgICAgICAgdmFsdWU6IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oZmlsdGVyLnZhbHVlLCB1cGRhdGVkKVxuICAgICAgfTtcbiAgICAgIGlmIChsZWF2aW5nVGltZUZpbHRlcikge1xuICAgICAgICBuZXh0RmlsdGVyID0gY2xlYXJUaW1lbGluZUZpbHRlclN0YXRlKG5leHRGaWx0ZXIpO1xuICAgICAgfSBlbHNlIGlmICh2aSA9PT0gMCAmJiBuZXh0RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBCeSA9IG5leHRGaWx0ZXIucGxvdFR5cGUuZ3JvdXBCeTtcbiAgICAgICAgaWYgKGdyb3VwQnkgJiYgcmVuYW1lc1tncm91cEJ5LmZpZWxkTmFtZV0pIHtcbiAgICAgICAgICBuZXh0RmlsdGVyLnBsb3RUeXBlID0ge1xuICAgICAgICAgICAgLi4ubmV4dEZpbHRlci5wbG90VHlwZSxcbiAgICAgICAgICAgIGdyb3VwQnk6IHsuLi5ncm91cEJ5LCBmaWVsZE5hbWU6IHJlbmFtZXNbZ3JvdXBCeS5maWVsZE5hbWVdfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGltZWxpbmUgYmlucyBjYW4gcmVtYWluIGlkZW50aWNhbCB3aGlsZSB5LWF4aXMgb3IgZ3JvdXAtYnkgdmFsdWVzXG4gICAgICAgIC8vIGNoYW5nZSwgc28gZG8gbm90IHJldXNlIHRoZSBvbGQgc2VyaWVzIGNhY2hlIGFmdGVyIGEgZGF0YSByZWJ1aWxkLlxuICAgICAgICBuZXh0RmlsdGVyID0gey4uLm5leHRGaWx0ZXIsIGxpbmVDaGFydDogdW5kZWZpbmVkfTtcbiAgICAgIH1cbiAgICAgIC8vIEtlZXAgZXhpc3RpbmcgcGxvdHM7IHRpbWUgcGxvdHMgYXJlIHJlYnVpbHQgYWZ0ZXIgZmlsdGVyaW5nIGJlbG93LlxuICAgICAgcmV0dXJuIGZpbHRlci50eXBlID09PSBuZXh0RmlsdGVyLnR5cGUgfHwgbmV4dEZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlXG4gICAgICAgID8gbmV4dEZpbHRlclxuICAgICAgICA6IHVwZGF0ZUZpbHRlclBsb3QobmV3RGF0YXNldHMsIG5leHRGaWx0ZXIsIGRhdGFJZCwgc3RhdGUubGF5ZXJzKTtcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgRmlsdGVyW107XG5cbiAgLy8gMy4gcmVjb25jaWxlIGxheWVyc1xuICBjb25zdCBsYXllcnNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gc3RhdGUubGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH1cbiAgICBjb25zdCByZWNvbmNpbGVkID0gcmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hKGxheWVyLCByZW5hbWVzLCBuZXdUYWJsZSwgc3RhdGUpO1xuICAgIGlmIChyZWNvbmNpbGVkKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlZDtcbiAgICB9XG4gICAgbGF5ZXJzVG9SZW1vdmUucHVzaChsYXllci5pZCk7XG4gICAgcmV0dXJuIGxheWVyOyAvLyBwbGFjZWhvbGRlciwgZHJvcHBlZCB2aWEgcmVtb3ZlTGF5ZXJVcGRhdGVyIGJlbG93XG4gIH0pO1xuXG4gIC8vIFBvbHlnb24gZmlsdGVycyByZWZlcmVuY2UgbGF5ZXJzLCBub3QgZmllbGRzLiBQcmVzZXJ2ZSB0aGVtIGZvciBzY2hlbWFcbiAgLy8gZWRpdHMgdGhhdCBrZWVwIHRoZWlyIHRhcmdldCBsYXllcnMsIGJ1dCByZW1vdmUgaW52YWxpZCB0YXJnZXRzIGJlZm9yZVxuICAvLyByZWJ1aWxkaW5nIGZpbHRlciByZWNvcmRzIHdoZW4gYSByZXF1aXJlZCBsYXllciBjb2x1bW4gd2FzIGRlbGV0ZWQuXG4gIGNvbnN0IHJlbW92ZWRMYXllcklkcyA9IG5ldyBTZXQobGF5ZXJzVG9SZW1vdmUpO1xuICBpZiAocmVtb3ZlZExheWVySWRzLnNpemUpIHtcbiAgICBuZXdGaWx0ZXJzID0gbmV3RmlsdGVycy5mbGF0TWFwKGZpbHRlciA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMucG9seWdvbiB8fFxuICAgICAgICAhZmlsdGVyLmxheWVySWQ/LnNvbWUoaWQgPT4gcmVtb3ZlZExheWVySWRzLmhhcyhpZCkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIFtmaWx0ZXJdO1xuICAgICAgfVxuICAgICAgZmlsdGVyLmRhdGFJZC5mb3JFYWNoKGlkID0+IGRhdGFzZXRJZHNUb1JlZmlsdGVyLmFkZChpZCkpO1xuICAgICAgY29uc3QgbGF5ZXJJZCA9IGZpbHRlci5sYXllcklkLmZpbHRlcihpZCA9PiAhcmVtb3ZlZExheWVySWRzLmhhcyhpZCkpO1xuICAgICAgcmV0dXJuIGxheWVySWQubGVuZ3RoID8gW3suLi5maWx0ZXIsIGxheWVySWR9XSA6IFtdO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVhc3NpZ24gR1BVIGNoYW5uZWxzIG5vdyB0aGF0IHRoZSBmaWx0ZXIgbGlzdCBpcyBzZXR0bGVkLlxuICBuZXdGaWx0ZXJzID0gbmV3RmlsdGVycy5tYXAoZmlsdGVyID0+XG4gICAgZmlsdGVyLmdwdSA/IGFzc2lnbkdwdUNoYW5uZWwoc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIG5ld0ZpbHRlcnMpLCBuZXdGaWx0ZXJzKSA6IGZpbHRlclxuICApO1xuXG4gIC8vIDQuIHJlYnVpbGQgdGhlIHRhYmxlJ3MgZmlsdGVyIHN0YXRlIHVzaW5nIG9ubHkgbGF5ZXJzIHRoYXQgd2lsbCBzdXJ2aXZlXG4gIGNvbnN0IHN1cnZpdmluZ0xheWVycyA9IG5ld0xheWVycy5maWx0ZXIobGF5ZXIgPT4gIXJlbW92ZWRMYXllcklkcy5oYXMobGF5ZXIuaWQpKTtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgQXJyYXkuZnJvbShkYXRhc2V0SWRzVG9SZWZpbHRlciksXG4gICAgbmV3RGF0YXNldHMsXG4gICAgbmV3RmlsdGVycyxcbiAgICBzdXJ2aXZpbmdMYXllcnNcbiAgKTtcblxuICAvLyA1LiByZWNvbmNpbGUgdG9vbHRpcCBmaWVsZHNUb1Nob3dcbiAgbGV0IGludGVyYWN0aW9uQ29uZmlnID0gc3RhdGUuaW50ZXJhY3Rpb25Db25maWc7XG4gIGNvbnN0IHRvb2x0aXAgPSBpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcDtcbiAgY29uc3QgZmllbGRzVG9TaG93ID0gdG9vbHRpcD8uY29uZmlnPy5maWVsZHNUb1Nob3c/LltkYXRhSWRdO1xuICBpZiAoZmllbGRzVG9TaG93KSB7XG4gICAgY29uc3QgbmV4dEZpZWxkc1RvU2hvdyA9IGZpZWxkc1RvU2hvdy5mbGF0TWFwKGYgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IHJlbmFtZXNbZi5uYW1lXSA/PyBmLm5hbWU7XG4gICAgICByZXR1cm4gbmV3RmllbGRzQnlOYW1lLmhhcyhuYW1lKSA/IFt7Li4uZiwgbmFtZX1dIDogW107XG4gICAgfSk7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgLi4udG9vbHRpcCxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgLi4udG9vbHRpcC5jb25maWcsXG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7Li4udG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LCBbZGF0YUlkXTogbmV4dEZpZWxkc1RvU2hvd31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzLFxuICAgIGZpbHRlcnM6IG5ld0ZpbHRlcnMsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgY2hhcnRzOiByZW1hcENoYXJ0c0ZvckRhdGFzZXQoc3RhdGUuY2hhcnRzLCBkYXRhSWQsIHJlbmFtZXMsIG5ld0ZpZWxkc0J5TmFtZSlcbiAgfTtcblxuICAvLyA2LiBkcm9wIGxheWVycyB0aGF0IGxvc3QgdGhlaXIgcmVxdWlyZWQgY29sdW1uc1xuICBuZXh0U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIG5leHRTdGF0ZSk7XG5cbiAgLy8gRmlsdGVyaW5nIGFuZCBwb2x5Z29uLWxheWVyIHJlbW92YWwgY2FuIGNoYW5nZSB0aGUgcm93cyBiZWhpbmQgdGltZWxpbmVcbiAgLy8gcGxvdHMsIHNvIHJlYnVpbGQgdGhlaXIgY2FjaGVkIGJpbnMvc2VyaWVzIGZyb20gdGhlIHJlY29uY2lsZWQgc3RhdGUuXG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUZpbHRlclBsb3RzQWZ0ZXJGaWx0ZXJpbmcobmV4dFN0YXRlLCBBcnJheS5mcm9tKGRhdGFzZXRJZHNUb1JlZmlsdGVyKSk7XG5cbiAgLy8gNy4gcmVjb21wdXRlIGxheWVyIGRvbWFpbnMgKyBkYXRhIGZvciB0aGUgdXBkYXRlZCBkYXRhc2V0XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIGRhdGFJZCk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBSZW5hbWUgYSBjb2x1bW4ncyBzdG9yZWQgaWRlbnRpdHkgKGBmaWVsZC5uYW1lYCkgYW5kIGV2ZXJ5IGxheWVyLCBmaWx0ZXIsXG4gKiB0b29sdGlwLCBhbmQgY2hhcnQgcmVmZXJlbmNlIHRoYXQgdXNlZCB0aGUgb2xkIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVuYW1lVGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIGZpZWxkTmFtZSwgbmV3TmFtZX0gPSBhY3Rpb247XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQgfHwgIWNhbk11dGF0ZURhdGFzZXRTY2hlbWEoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcGF5bG9hZCA9IGJ1aWxkUmVuYW1lQ29sdW1uRGF0YShkYXRhc2V0LCBmaWVsZE5hbWUsIG5ld05hbWUpO1xuICBpZiAoIXBheWxvYWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRVcGRhdGVyKHN0YXRlLCB7XG4gICAgZGF0YUlkLFxuICAgIGRhdGE6IHBheWxvYWQuZGF0YSxcbiAgICByZW5hbWVzOiBwYXlsb2FkLnJlbmFtZXNcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhIGNvbXBsZXRlIGNvbHVtbiBiZWZvcmUgY29tbWl0dGluZyBpdHMgbmV3IHR5cGUuIEEgZmFpbGVkIHZhbHVlXG4gKiBsZWF2ZXMgdGhlIHRhYmxlIGFuZCBldmVyeSByZWZlcmVuY2UgdW5jaGFuZ2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlVGFibGVDb2x1bW5UeXBlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DaGFuZ2VUYWJsZUNvbHVtblR5cGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIGZpZWxkTmFtZSwgbmV3VHlwZX0gPSBhY3Rpb247XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQgfHwgIWNhbk11dGF0ZURhdGFzZXRTY2hlbWEoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gYnVpbGRDaGFuZ2VDb2x1bW5UeXBlRGF0YShkYXRhc2V0LCBmaWVsZE5hbWUsIG5ld1R5cGUpO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBpZDogYGNvbHVtbi10eXBlLSR7ZGF0YUlkfS0ke2ZpZWxkTmFtZX1gLFxuICAgICAgICAgICAgbWVzc2FnZTogYENhbm5vdCBjaGFuZ2Ug4oCcJHtmaWVsZE5hbWV94oCdIHRvICR7bmV3VHlwZX06ICR7Zm9ybWF0Q29sdW1uVHlwZUNvbnZlcnNpb25FcnJvcihcbiAgICAgICAgICAgICAgcmVzdWx0LmVycm9yXG4gICAgICAgICAgICApfS4gTm8gdmFsdWVzIHdlcmUgY2hhbmdlZC5gXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRVcGRhdGVyKHN0YXRlLCB7XG4gICAgZGF0YUlkLFxuICAgIGRhdGE6IHJlc3VsdC5wYXlsb2FkLmRhdGEsXG4gICAgcmVuYW1lczogcmVzdWx0LnBheWxvYWQucmVuYW1lc1xuICB9KTtcbn1cblxuLyoqXG4gKiBEcm9wIGEgY29sdW1uIGFuZCB0aGUgbGF5ZXJzLCBmaWx0ZXJzLCBhbmQgb3RoZXIgcmVmZXJlbmNlcyB0aGF0IHJlcXVpcmVkIGl0LlxuICogVGhlIGxhc3QgcmVtYWluaW5nIGNvbHVtbiBpcyBrZXB0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkRlbGV0ZVRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBmaWVsZE5hbWV9ID0gYWN0aW9uO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFjYW5NdXRhdGVEYXRhc2V0U2NoZW1hKGRhdGFzZXQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHBheWxvYWQgPSBidWlsZERlbGV0ZUNvbHVtbkRhdGEoZGF0YXNldCwgZmllbGROYW1lKTtcbiAgaWYgKCFwYXlsb2FkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0VXBkYXRlcihzdGF0ZSwge1xuICAgIGRhdGFJZCxcbiAgICBkYXRhOiBwYXlsb2FkLmRhdGEsXG4gICAgcmVuYW1lczogcGF5bG9hZC5yZW5hbWVzXG4gIH0pO1xufVxuXG4vKipcbiAqIFdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgc3BlY2lmaWMgbWFwIGNsb3NpbmcgaWNvblxuICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2xvc2UgdGhlIHNlbGVjdGVkIG1hcFxuICogYW5kIHdpbGwgbWVyZ2UgdGhlIHJlbWFpbmluZyBvbmUgd2l0aCB0aGUgZ2xvYmFsIHN0YXRlXG4gKiBUT0RPOiBpIHRoaW5rIGluIHRoZSBmdXR1cmUgdGhpcyBhY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBtZXJnZSBtYXAgbGF5ZXJzIHdpdGggZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgYHZpc1N0YXRlYFxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBhY3Rpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VTcGVjaWZpY01hcEF0SW5kZXg8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIC8vIHJldHJpZXZlIGxheWVycyBtZXRhIGRhdGEgZnJvbSB0aGUgcmVtYWluaW5nIG1hcCB0aGF0IHdlIG5lZWQgdG8ga2VlcFxuICBjb25zdCBpbmRleFRvUmV0cmlldmUgPSAxIC0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG1hcExheWVycyA9IHN0YXRlLnNwbGl0TWFwc1tpbmRleFRvUmV0cmlldmVdPy5sYXllcnM7XG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG5cbiAgLy8gdXBkYXRlIGxheWVyIHZpc2liaWxpdHlcbiAgY29uc3QgbmV3TGF5ZXJzID0gbGF5ZXJzLm1hcChsYXllciA9PlxuICAgIG1hcExheWVycyAmJiAhbWFwTGF5ZXJzW2xheWVyLmlkXSAmJiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBpdCBzaG91bGQgYmUgaW5WaXNpYmxlXG4gICAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgOiBsYXllclxuICApO1xuXG4gIC8vIGRlbGV0ZSBtYXBcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBzcGxpdE1hcHM6IFtdXG4gIH07XG59XG5cbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5sZXQgbmV4dEZpbGVMb2FkSWQgPSAxO1xuXG5mdW5jdGlvbiBjcmVhdGVGaWxlTG9hZElkKCk6IG51bWJlciB7XG4gIGNvbnN0IGxvYWRJZCA9IG5leHRGaWxlTG9hZElkO1xuICBuZXh0RmlsZUxvYWRJZCArPSAxO1xuICByZXR1cm4gbG9hZElkO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hGaWxlTG9hZChcbiAgb25GaW5pc2g6IChwYXlsb2FkOiBhbnksIG9wdGlvbnM/OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzT3B0aW9ucykgPT4gYW55LFxuICBmaWxlQ2FjaGU6IGFueVtdLFxuICBvcHRpb25zOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzT3B0aW9ucyB8IHVuZGVmaW5lZCxcbiAgbG9hZElkOiBudW1iZXJcbikge1xuICBjb25zdCBhY3Rpb24gPSBvcHRpb25zID8gb25GaW5pc2goZmlsZUNhY2hlLCBvcHRpb25zKSA6IG9uRmluaXNoKGZpbGVDYWNoZSk7XG4gIHJldHVybiB7Li4uYWN0aW9uLCBsb2FkSWR9O1xufVxuXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtmaWxlcywgb25GaW5pc2ggPSBsb2FkRmlsZXNTdWNjZXNzLCBvcHRpb25zfSA9IGFjdGlvbjtcbiAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBjb21wYW5pb25GaWxlcyA9IEFycmF5LmZyb20oZmlsZXMpO1xuICBjb25zdCBmaWxlc1RvTG9hZCA9IGdldEZpbGVzVG9QYXJzZShjb21wYW5pb25GaWxlcyk7XG5cbiAgLy8gQW5vdGhlciBkcm9wIHdoaWxlIGEgZGVmZXJyZWQgcGFyc2UgaXMgcnVubmluZyBtdXN0IGpvaW4gdGhhdCBsb2FkLlxuICAvLyBSZXBsYWNpbmcgYGZpbGVMb2FkaW5nYCBtYWtlcyB0aGUgaW4tZmxpZ2h0IGZpbGUgZmluaXNoIGFnYWluc3QgdGhlIG5ld1xuICAvLyBjYWNoZSBhbmQgZHJvcCB0aGUgZmlsZXMgdGhhdCB3ZXJlIGFscmVhZHkgYmVpbmcgcGFyc2VkLlxuICBpZiAoc3RhdGUuZmlsZUxvYWRpbmcgJiYgc3RhdGUuZmlsZUxvYWRpbmcub3B0aW9ucz8uZGVmZXJBZGRUb01hcCAmJiBvcHRpb25zPy5kZWZlckFkZFRvTWFwKSB7XG4gICAgcmV0dXJuIGFwcGVuZERlZmVycmVkRmlsZUxvYWQoc3RhdGUsIHtmaWxlc1RvTG9hZCwgY29tcGFuaW9uRmlsZXN9KTtcbiAgfVxuXG4gIGlmICghZmlsZXNUb0xvYWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQSBkZWZlcnJlZCBsb2FkIGlzIGFub3RoZXIgYmF0Y2ggZm9yIHRoZSBzYW1lIEFkZCBEYXRhIGNsaWNrLiBLZWVwIGZpbGVzXG4gIC8vIGFscmVhZHkgc3RhZ2VkLCBhbmQga2VlcCB0aGVpciBlcnJvciBjYXJkcywgaW5zdGVhZCBvZiBzdGFydGluZyBvdmVyLlxuICBjb25zdCBwcmV2aW91c0Vycm9ycyA9XG4gICAgb3B0aW9ucz8uZGVmZXJBZGRUb01hcCAmJiBzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzXG4gICAgICA/IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzKS5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWU/LmVycm9yKVxuICAgICAgICApXG4gICAgICA6IHt9O1xuXG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBmaWxlc1RvTG9hZC5yZWR1Y2UoXG4gICAgKGFjY3UsIGYsIGkpID0+IG1lcmdlXyhpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmLCBpKSkoYWNjdSksXG4gICAgcHJldmlvdXNFcnJvcnNcbiAgKTtcblxuICBjb25zdCBmaWxlTG9hZGluZyA9IHtcbiAgICBsb2FkSWQ6IGNyZWF0ZUZpbGVMb2FkSWQoKSxcbiAgICBmaWxlQ2FjaGU6IFtdLFxuICAgIGZpbGVzVG9Mb2FkLFxuICAgIGNvbXBhbmlvbkZpbGVzLFxuICAgIG9uRmluaXNoLFxuICAgIC4uLihvcHRpb25zID8ge29wdGlvbnN9IDoge30pXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gbWVyZ2VfKHtcbiAgICBmaWxlTG9hZGluZ1Byb2dyZXNzLFxuICAgIGZpbGVMb2FkaW5nLFxuICAgIC4uLihvcHRpb25zPy5kZWZlckFkZFRvTWFwID8ge30gOiB7c3RhZ2VkVG9BZGQ6IG51bGx9KVxuICB9KShzdGF0ZSk7XG5cbiAgcmV0dXJuIGxvYWROZXh0RmlsZVVwZGF0ZXIobmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgZHJvcCB0byB0aGUgZGVmZXJyZWQgbG9hZCB0aGF0IGlzIGFscmVhZHkgcGFyc2luZy5cbiAqIFRoZSBjdXJyZW50IGZpbGUga2VlcHMgaXRzIGNhY2hlOyB0aGUgbmV3IGZpbGVzIHJ1biBhZnRlciBpdC5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kRGVmZXJyZWRGaWxlTG9hZChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgZmlsZXNUb0xvYWQsXG4gICAgY29tcGFuaW9uRmlsZXNcbiAgfToge1xuICAgIGZpbGVzVG9Mb2FkOiBGaWxlW107XG4gICAgY29tcGFuaW9uRmlsZXM6IEZpbGVbXTtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCBsb2FkaW5nID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGlmICghbG9hZGluZyB8fCAoIWZpbGVzVG9Mb2FkLmxlbmd0aCAmJiAhY29tcGFuaW9uRmlsZXMubGVuZ3RoKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBmaWxlc1RvTG9hZC5yZWR1Y2UoXG4gICAgKGFjY3UsIGZpbGUsIGluZGV4KSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpKShhY2N1KSxcbiAgICBzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWxlTG9hZGluZ1Byb2dyZXNzLFxuICAgIGZpbGVMb2FkaW5nOiB7XG4gICAgICAuLi5sb2FkaW5nLFxuICAgICAgZmlsZXNUb0xvYWQ6IFsuLi5BcnJheS5mcm9tKGxvYWRpbmcuZmlsZXNUb0xvYWQpLCAuLi5maWxlc1RvTG9hZF0sXG4gICAgICBjb21wYW5pb25GaWxlczogWy4uLihsb2FkaW5nLmNvbXBhbmlvbkZpbGVzIHx8IFtdKSwgLi4uY29tcGFuaW9uRmlsZXNdXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFN1Y2Vzc2Z1bGx5IGxvYWRlZCBvbmUgZmlsZSwgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVOYW1lLCBmaWxlQ2FjaGV9ID0gYWN0aW9uO1xuICBjb25zdCBsb2FkSWQgPSBzdGF0ZS5maWxlTG9hZGluZy5sb2FkSWQ7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdEb25lJ31cbiAgfSk7XG5cbiAgLy8gc2F2ZSBwcm9jZXNzZWQgZmlsZSB0byBmaWxlQ2FjaGVcbiAgY29uc3Qgc3RhdGVXaXRoQ2FjaGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVDYWNoZX0pKShzdGF0ZVdpdGhQcm9ncmVzcyk7XG5cbiAgLy8gRGVjaWRlIGFmdGVyIHRoZSBwYXVzZSwgYW5kIG9ubHkgZm9yIHRoaXMgbG9hZC4gQSBkcm9wIGR1cmluZyB0aGVzZVxuICAvLyAyMDBtcyBqb2lucyB0aGUgcXVldWU7IGNhbmNlbCBvciBhIG5ld2VyIGxvYWQgbWFrZXMgdGhpcyBjb250aW51YXRpb24gc3RhbGUuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhDYWNoZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKCgpID0+IGxvYWROZXh0RmlsZShsb2FkSWQpKVxuICApO1xufVxuXG4vLyB3aXRoVGFzazxUPihzdGF0ZTogVCwgdGFzazogYW55KTogVFxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5leHRGaWxlVXBkYXRlcihzdGF0ZTogVmlzU3RhdGUsIGFjdGlvbj86IHtsb2FkSWQ/OiBudW1iZXJ9KTogVmlzU3RhdGUge1xuICBjb25zdCBsb2FkSWQgPSBhY3Rpb24/LmxvYWRJZDtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZyB8fCAobG9hZElkICE9IG51bGwgJiYgc3RhdGUuZmlsZUxvYWRpbmcubG9hZElkICE9PSBsb2FkSWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlc1RvTG9hZCwgb25GaW5pc2gsIGZpbGVDYWNoZSwgb3B0aW9ucywgbG9hZElkOiBjdXJyZW50TG9hZElkfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBpZiAoIWZpbGVzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIHN0YXRlLFxuICAgICAgQUNUSU9OX1RBU0soKS5tYXAoKCkgPT4gZmluaXNoRmlsZUxvYWQob25GaW5pc2gsIGZpbGVDYWNoZSwgb3B0aW9ucywgY3VycmVudExvYWRJZCkpXG4gICAgKTtcbiAgfVxuICBjb25zdCBbZmlsZSwgLi4ucmVtYWluaW5nRmlsZXNUb0xvYWRdID0gZmlsZXNUb0xvYWQ7XG5cbiAgLy8gc2F2ZSBmaWxlc1RvTG9hZCB0byBzdGF0ZVxuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVzVG9Mb2FkOiByZW1haW5pbmdGaWxlc1RvTG9hZH0pKShzdGF0ZSk7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMCwgbWVzc2FnZTogJ2xvYWRpbmcuLi4nfVxuICB9KTtcblxuICBjb25zdCB7bG9hZGVycywgbG9hZE9wdGlvbnN9ID0gc3RhdGU7XG4gIGlmIChpc1ppcEZpbGVOYW1lKGZpbGUubmFtZSkpIHtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICAgIEVYUEFORF9aSVBfVEFTSyh7ZmlsZSwgZXh0ZW5zaW9uczogZGF0YXNldEV4dGVuc2lvbnNGcm9tTG9hZGVycyhsb2FkZXJzKX0pLmJpbWFwKFxuICAgICAgICBleHBhbnNpb24gPT5cbiAgICAgICAgICBleHBhbmRaaXBBcmNoaXZlU3VjY2Vzcyh7XG4gICAgICAgICAgICBsb2FkSWQ6IGN1cnJlbnRMb2FkSWQsXG4gICAgICAgICAgICBhcmNoaXZlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgZXhwYW5zaW9uXG4gICAgICAgICAgfSksXG4gICAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZS5uYW1lLCBlcnIsIGN1cnJlbnRMb2FkSWQpXG4gICAgICApXG4gICAgKTtcbiAgfVxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgbWFrZUxvYWRGaWxlVGFzayhcbiAgICAgIGZpbGUsXG4gICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgJiYgbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmZpbGVDYWNoZSxcbiAgICAgIGxvYWRlcnMsXG4gICAgICBsb2FkT3B0aW9ucyxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyA/IG5leHRTdGF0ZS5maWxlTG9hZGluZy5jb21wYW5pb25GaWxlcyA6IHVuZGVmaW5lZCxcbiAgICAgIG9wdGlvbnNcbiAgICApXG4gICk7XG59XG5cbmZ1bmN0aW9uIGRhdGFzZXRFeHRlbnNpb25zRnJvbUxvYWRlcnMoXG4gIGxvYWRlcnM6IEFycmF5PHtleHRlbnNpb25zPzogcmVhZG9ubHkgc3RyaW5nW119PiA9IFtdXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGV4dGVuc2lvbnM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBsb2FkZXIgb2YgbG9hZGVycykge1xuICAgIGZvciAoY29uc3QgZXh0ZW5zaW9uIG9mIGxvYWRlcj8uZXh0ZW5zaW9ucyB8fCBbXSkge1xuICAgICAgY29uc3QgZXh0ID0gU3RyaW5nKGV4dGVuc2lvbikucmVwbGFjZSgvXlxcLi8sICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICghZXh0IHx8IGV4dCA9PT0gJ3ppcCcgfHwgc2Vlbi5oYXMoZXh0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHNlZW4uYWRkKGV4dCk7XG4gICAgICBleHRlbnNpb25zLnB1c2goZXh0KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV4dGVuc2lvbnM7XG59XG5cbmZ1bmN0aW9uIGNvbXBhbmlvbkZpbGVzRm9yQXJjaGl2ZShleHBhbnNpb246IFppcEFyY2hpdmVFeHBhbnNpb24sIGV4aXN0aW5nPzogRmlsZVtdKTogRmlsZVtdIHtcbiAgY29uc3QgZXh0cmFjdGVkID1cbiAgICBleHBhbnNpb24ua2luZCA9PT0gJ3NoYXBlZmlsZSdcbiAgICAgID8gW2V4cGFuc2lvbi5zaGFwZWZpbGUsIC4uLmV4cGFuc2lvbi5jb21wYW5pb25zXVxuICAgICAgOiBbLi4uZXhwYW5zaW9uLmRhdGFzZXRzLCAuLi5leHBhbnNpb24uY29tcGFuaW9uc107XG4gIHJldHVybiBbLi4uZXh0cmFjdGVkLCAuLi4oZXhpc3RpbmcgfHwgW10pXTtcbn1cblxuZnVuY3Rpb24gd2l0aG91dEZpbGVMb2FkaW5nUHJvZ3Jlc3NFbnRyeShcbiAgcHJvZ3Jlc3M6IFZpc1N0YXRlWydmaWxlTG9hZGluZ1Byb2dyZXNzJ10sXG4gIGZpbGVOYW1lOiBzdHJpbmdcbik6IFZpc1N0YXRlWydmaWxlTG9hZGluZ1Byb2dyZXNzJ10ge1xuICBpZiAoIXByb2dyZXNzIHx8ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvZ3Jlc3MsIGZpbGVOYW1lKSkge1xuICAgIHJldHVybiBwcm9ncmVzcztcbiAgfVxuICBjb25zdCBuZXh0ID0gey4uLnByb2dyZXNzfTtcbiAgZGVsZXRlIG5leHRbZmlsZU5hbWVdO1xuICByZXR1cm4gbmV4dDtcbn1cblxuLyoqXG4gKiBBcHBseSBhbiB1bnBhY2tlZCB6aXAuIE9uZSBzaGFwZWZpbGUga2VlcHMgdGhlIGFyY2hpdmUgbmFtZS4gQW55IG90aGVyXG4gKiBtaXggaXMgcXVldWVkIGFzIG9uZSBkYXRhc2V0IHBlciBzdXBwb3J0ZWQgbWVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkV4cGFuZFppcEFyY2hpdmVTdWNjZXNzQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGxvYWRpbmcgPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgaWYgKCFsb2FkaW5nIHx8IGxvYWRpbmcubG9hZElkICE9PSBhY3Rpb24ubG9hZElkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHthcmNoaXZlTmFtZSwgZXhwYW5zaW9ufSA9IGFjdGlvbjtcbiAgY29uc3QgY29tcGFuaW9uRmlsZXMgPSBjb21wYW5pb25GaWxlc0ZvckFyY2hpdmUoZXhwYW5zaW9uLCBsb2FkaW5nLmNvbXBhbmlvbkZpbGVzKTtcblxuICBpZiAoZXhwYW5zaW9uLmtpbmQgPT09ICdzaGFwZWZpbGUnKSB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtjb21wYW5pb25GaWxlc30pKShzdGF0ZSk7XG4gICAgY29uc3Qge2xvYWRlcnMsIGxvYWRPcHRpb25zfSA9IHN0YXRlO1xuICAgIHJldHVybiB3aXRoVGFzayhcbiAgICAgIG5leHRTdGF0ZSxcbiAgICAgIG1ha2VMb2FkRmlsZVRhc2soXG4gICAgICAgIGV4cGFuc2lvbi5zaGFwZWZpbGUsXG4gICAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyAmJiBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuZmlsZUNhY2hlLFxuICAgICAgICBsb2FkZXJzLFxuICAgICAgICBsb2FkT3B0aW9ucyxcbiAgICAgICAgY29tcGFuaW9uRmlsZXMsXG4gICAgICAgIGxvYWRpbmcub3B0aW9ucyxcbiAgICAgICAgYXJjaGl2ZU5hbWVcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSBleHBhbnNpb24uZGF0YXNldHM7XG4gIGNvbnN0IGZpbGVzVG9Mb2FkID0gWy4uLmRhdGFzZXRzLCAuLi5BcnJheS5mcm9tKGxvYWRpbmcuZmlsZXNUb0xvYWQpXTtcbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IGRhdGFzZXRzLnJlZHVjZShcbiAgICAoYWNjdSwgZmlsZSwgaW5kZXgpID0+IG1lcmdlXyhpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmaWxlLCBpbmRleCkpKGFjY3UpLFxuICAgIHdpdGhvdXRGaWxlTG9hZGluZ1Byb2dyZXNzRW50cnkoc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzcywgYXJjaGl2ZU5hbWUpXG4gICk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWxlTG9hZGluZ1Byb2dyZXNzLFxuICAgIGZpbGVMb2FkaW5nOiB7XG4gICAgICAuLi5sb2FkaW5nLFxuICAgICAgZmlsZXNUb0xvYWQsXG4gICAgICBjb21wYW5pb25GaWxlc1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxvYWROZXh0RmlsZVVwZGF0ZXIobmV4dFN0YXRlLCB7bG9hZElkOiBhY3Rpb24ubG9hZElkfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTG9hZEZpbGVUYXNrKFxuICBmaWxlLFxuICBmaWxlQ2FjaGUsXG4gIGxvYWRlcnM6IExvYWRlcltdID0gW10sXG4gIGxvYWRPcHRpb25zID0ge30sXG4gIGNvbXBhbmlvbkZpbGVzPzogRmlsZVtdLFxuICBhZGREYXRhT3B0aW9ucz86IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNPcHRpb25zLFxuICBmaWxlTmFtZT86IHN0cmluZ1xuKSB7XG4gIGNvbnN0IGRpc3BsYXlOYW1lID0gZmlsZU5hbWUgfHwgZmlsZS5uYW1lO1xuICByZXR1cm4gTE9BRF9GSUxFX1RBU0soe1xuICAgIGZpbGUsXG4gICAgZmlsZUNhY2hlLFxuICAgIGxvYWRlcnMsXG4gICAgbG9hZE9wdGlvbnMsXG4gICAgY29tcGFuaW9uRmlsZXMsXG4gICAgLi4uKGZpbGVOYW1lID8ge2ZpbGVOYW1lfSA6IHt9KVxuICB9KS5iaW1hcChcbiAgICAvLyBwcmV0dGllciBpZ25vcmVcbiAgICAvLyBzdWNjZXNzXG4gICAgZ2VuID0+XG4gICAgICBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBmaWxlTmFtZTogZGlzcGxheU5hbWUsXG4gICAgICAgIG9uRmluaXNoOiByZXN1bHQgPT5cbiAgICAgICAgICBwcm9jZXNzRmlsZUNvbnRlbnQoe1xuICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAgIC4uLihhZGREYXRhT3B0aW9ucz8uZGVmZXJBZGRUb01hcCAmJiBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLnVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nXG4gICAgICAgICAgICAgICAgPyB7cHJlcGFyZVByb2dyZXNzaXZlUmVwbGF5OiB0cnVlfVxuICAgICAgICAgICAgICAgIDoge30pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmlsZUNhY2hlXG4gICAgICAgICAgfSksXG4gICAgICAgIC4uLihhZGREYXRhT3B0aW9ucyA/IHtvcHRpb25zOiBhZGREYXRhT3B0aW9uc30gOiB7fSlcbiAgICAgIH0pLFxuXG4gICAgLy8gZXJyb3JcbiAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGRpc3BsYXlOYW1lLCBlcnIpXG4gICk7XG59XG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbnRlbnQsIGZpbGVDYWNoZX0gPSBhY3Rpb24ucGF5bG9hZDtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAncHJvY2Vzc2luZy4uLid9XG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudCwgZmlsZUNhY2hlfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gbG9hZEZpbGVTdGVwU3VjY2Vzcyh7ZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsIGZpbGVDYWNoZTogcmVzdWx0fSksXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGNvbnRlbnQuZmlsZU5hbWUsIGVycilcbiAgICApXG4gICk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVByb2dyZXNzKHByZXZQcm9ncmVzcyA9IHt9LCBwcm9ncmVzcykge1xuICAvLyBUaGlzIGhhcHBlbnMgd2hlbiByZWNlaXZpbmcgcXVlcnkgbWV0YWRhdGEgb3Igb3RoZXIgY2FzZXMgd2UgZG9uJ3RcbiAgLy8gaGF2ZSBhbiB1cGRhdGUgZm9yIHRoZSB1c2VyLlxuICBpZiAoIXByb2dyZXNzIHx8ICFwcm9ncmVzcy5wZXJjZW50KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwZXJjZW50OiBwcm9ncmVzcy5wZXJjZW50XG4gIH07XG59XG5cbi8qKlxuICogZ2V0cyBjYWxsZWQgd2l0aCBwYXlsb2FkID0gQXN5bmNHZW5lcmF0b3I8Pz8/PlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG5leHRGaWxlQmF0Y2hVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Z2VuLCBmaWxlTmFtZSwgcHJvZ3Jlc3MsIGFjY3VtdWxhdGVkLCBvbkZpbmlzaCwgb3B0aW9uc31cbiAgfTogVmlzU3RhdGVBY3Rpb25zLk5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczogcGFyc2VQcm9ncmVzcyhzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzW2ZpbGVOYW1lXSwgcHJvZ3Jlc3MpXG4gIH0pO1xuXG4gIGNvbnN0IGRlZmVyQWRkVG9NYXAgPSBCb29sZWFuKG9wdGlvbnM/LmRlZmVyQWRkVG9NYXApO1xuXG4gIHJldHVybiB3aXRoVGFzayhzdGF0ZVdpdGhQcm9ncmVzcywgW1xuICAgIC4uLihnZXRBcHBsaWNhdGlvbkNvbmZpZygpLnVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nICYmXG4gICAgIWRlZmVyQWRkVG9NYXAgJiZcbiAgICBmaWxlTmFtZS5lbmRzV2l0aCgnYXJyb3cnKSAmJlxuICAgIGFjY3VtdWxhdGVkPy5kYXRhPy5sZW5ndGggPiAwXG4gICAgICA/IFtcbiAgICAgICAgICAvLyBTa2lwIGNvbXBhY3Rpb24gd2hpbGUgYmF0Y2hlcyBhcmUgc3RpbGwgYXJyaXZpbmcuIFRoZSBjb21wbGV0ZWRcbiAgICAgICAgICAvLyBmaWxlIGlzIGNvbXBhY3RlZCBvbmNlIGluIHByb2Nlc3NGaWxlQ29udGVudC5cbiAgICAgICAgICBQUk9DRVNTX0ZJTEVfREFUQSh7XG4gICAgICAgICAgICBjb250ZW50OiB7Li4uYWNjdW11bGF0ZWQsIHNraXBBcnJvd0NvbXBhY3Q6IHRydWV9LFxuICAgICAgICAgICAgZmlsZUNhY2hlOiBbXVxuICAgICAgICAgIH0pLmJpbWFwKFxuICAgICAgICAgICAgcmVzdWx0ID0+IChvcHRpb25zID8gbG9hZEZpbGVzU3VjY2VzcyhyZXN1bHQsIG9wdGlvbnMpIDogbG9hZEZpbGVzU3VjY2VzcyhyZXN1bHQpKSxcbiAgICAgICAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgIDogW10pLFxuICAgIFVOV1JBUF9UQVNLKGdlbi5uZXh0KCkpLmJpbWFwKFxuICAgICAgKHt2YWx1ZSwgZG9uZX0pID0+IHtcbiAgICAgICAgcmV0dXJuIGRvbmVcbiAgICAgICAgICA/IG9uRmluaXNoKGFjY3VtdWxhdGVkKVxuICAgICAgICAgIDogbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgICAgICAgIGdlbixcbiAgICAgICAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgICAgICAgIHByb2dyZXNzOiB2YWx1ZS5wcm9ncmVzcyxcbiAgICAgICAgICAgICAgYWNjdW11bGF0ZWQ6IHZhbHVlLFxuICAgICAgICAgICAgICBvbkZpbmlzaCxcbiAgICAgICAgICAgICAgLi4uKG9wdGlvbnMgPyB7b3B0aW9uc30gOiB7fSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICApXG4gIF0pO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxvYWRpbmcgZmlsZSBlcnJvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLyoqXG4gKiBEcm9wIGZpbGVzIHdhaXRpbmcgb24gdGhlIEFkZCBEYXRhIGJ1dHRvbiBhbmQgYWJvcnQgYW4gaW4tcHJvZ3Jlc3MgbW9kYWwgbG9hZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjbGVhclN0YWdlZExvYWRlZEZpbGVzVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcbiAgc3RhZ2VkVG9BZGQ6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzRXJyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXJyb3IsIGZpbGVOYW1lLCBsb2FkSWQ6IGVycm9yTG9hZElkfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc0VyclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZyB8fCAoZXJyb3JMb2FkSWQgIT0gbnVsbCAmJiBzdGF0ZS5maWxlTG9hZGluZy5sb2FkSWQgIT09IGVycm9yTG9hZElkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyB1cGRhdGUgdWkgd2l0aCBlcnJvciBtZXNzYWdlXG4gIENvbnNvbGUud2FybihlcnJvcik7XG4gIGNvbnN0IGxvYWRJZCA9IHN0YXRlLmZpbGVMb2FkaW5nLmxvYWRJZDtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7ZXJyb3J9XG4gIH0pO1xuXG4gIC8vIFNhbWUgcGF1c2UgYXMgYSBzdWNjZXNzZnVsIGZpbGUuIFJlLWNoZWNrIHRoaXMgbG9hZCdzIHF1ZXVlIHdoZW4gaXQgZW5kcy5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIG5leHRTdGF0ZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKCgpID0+IGxvYWROZXh0RmlsZShsb2FkSWQpKVxuICApO1xufTtcblxuLyoqXG4gKiBXaGVuIHNlbGVjdCBkYXRhc2V0IGZvciBleHBvcnQsIGFwcGx5IGNwdSBmaWx0ZXIgdG8gc2VsZWN0ZWQgZGF0YXNldFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5Q1BVRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLkFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhcHBseSBjcHVGaWx0ZXJcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZGF0YUlkKTtcblxuICByZXR1cm4gZGF0YUlkcy5yZWR1Y2UoKGFjY3UsIGlkKSA9PiBmaWx0ZXJEYXRhc2V0Q1BVKGFjY3UsIGlkKSwgc3RhdGUpO1xufTtcblxuLyoqXG4gKiBVc2VyIGlucHV0IHRvIHVwZGF0ZSB0aGUgaW5mbyBvZiB0aGUgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwSW5mb1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbmV4dCA9IHsuLi5zdGF0ZS5tYXBJbmZvLCAuLi5hY3Rpb24uaW5mb307XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwSW5mbzoge1xuICAgICAgdGl0bGU6IG9wdGlvbmFsTWFwVGV4dChuZXh0LnRpdGxlKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25hbE1hcFRleHQobmV4dC5kZXNjcmlwdGlvbilcbiAgICB9XG4gIH07XG59O1xuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIEFsbCBsYXllciBkb21haW4gYW5kIGxheWVyIGRhdGEgb2Ygc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRMYXllcnMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgZGF0YXNldHM6IERhdGFzZXRzXG4pOiB7c3RhdGU6IFZpc1N0YXRlOyBuZXdMYXllcnM6IExheWVyW119IHtcbiAgY29uc3QgZW1wdHk6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZGVmYXVsdExheWVycyA9IE9iamVjdC52YWx1ZXMoZGF0YXNldHMpLnJlZHVjZSgoYWNjdTogTGF5ZXJbXSwgZGF0YXNldCkgPT4ge1xuICAgIGNvbnN0IGZvdW5kTGF5ZXJzID0gZmluZERlZmF1bHRMYXllcihkYXRhc2V0LCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICAgIHJldHVybiBmb3VuZExheWVycyAmJiBmb3VuZExheWVycy5sZW5ndGggPyBhY2N1LmNvbmNhdChmb3VuZExheWVycykgOiBhY2N1O1xuICB9LCBlbXB0eSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0ZToge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIC4uLmRlZmF1bHRMYXllcnNdLFxuICAgICAgbGF5ZXJPcmRlcjogW1xuICAgICAgICAvLyBwdXQgbmV3IGxheWVycyBvbiB0b3Agb2Ygb2xkIG9uZXMgaW4gcmV2ZXJzZVxuICAgICAgICAuLi5nZXRMYXllck9yZGVyRnJvbUxheWVycyhkZWZhdWx0TGF5ZXJzKSxcbiAgICAgICAgLi4uc3RhdGUubGF5ZXJPcmRlclxuICAgICAgXVxuICAgIH0sXG4gICAgbmV3TGF5ZXJzOiBkZWZhdWx0TGF5ZXJzXG4gIH07XG59XG5cbi8qKlxuICogaGVscGVyIGZ1bmN0aW9uIHRvIGZpbmQgZGVmYXVsdCB0b29sdGlwc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YXNldFxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0VG9vbHRpcHMoc3RhdGUsIGRhdGFzZXQpIHtcbiAgY29uc3QgdG9vbHRpcEZpZWxkcyA9IGZpbmRGaWVsZHNUb1Nob3coe1xuICAgIC4uLmRhdGFzZXQsXG4gICAgbWF4RGVmYXVsdFRvb2x0aXBzOiBzdGF0ZS5tYXhEZWZhdWx0VG9vbHRpcHNcbiAgfSk7XG4gIGNvbnN0IG1lcmdlZCA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3csXG4gICAgLi4udG9vbHRpcEZpZWxkc1xuICB9O1xuXG4gIHJldHVybiBzZXQoWydpbnRlcmFjdGlvbkNvbmZpZycsICd0b29sdGlwJywgJ2NvbmZpZycsICdmaWVsZHNUb1Nob3cnXSwgbWVyZ2VkLCBzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyhmaWxlLCBpbmRleCkge1xuICBjb25zdCBmaWxlTmFtZSA9IGZpbGUubmFtZSB8fCBgVW50aXRsZWQgRmlsZSAke2luZGV4fWA7XG4gIHJldHVybiB7XG4gICAgW2ZpbGVOYW1lXToge1xuICAgICAgLy8gcGVyY2VudCBvZiBjdXJyZW50IGZpbGVcbiAgICAgIHBlcmNlbnQ6IDAsXG4gICAgICBtZXNzYWdlOiAnJyxcbiAgICAgIGZpbGVOYW1lLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge2ZpbGVOYW1lLCBwcm9ncmVzc30pIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICByZXR1cm4gcGlja18oJ2ZpbGVMb2FkaW5nUHJvZ3Jlc3MnKShwaWNrXyhmaWxlTmFtZSkobWVyZ2VfKHByb2dyZXNzKSkpKHN0YXRlKTtcbn1cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBsYXllciBkb21haW5zIGZvciBhbiBhcnJheSBvZiBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBkYXRhSWQ6IHN0cmluZyB8IHN0cmluZ1tdLFxuICB1cGRhdGVkRmlsdGVyPzogRmlsdGVyXG4pOiBTIHtcbiAgY29uc3QgZGF0YUlkcyA9IHR5cGVvZiBkYXRhSWQgPT09ICdzdHJpbmcnID8gW2RhdGFJZF0gOiBkYXRhSWQ7XG4gIGNvbnN0IG5ld0xheWVyczogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBuZXdMYXllckRhdGE6IGFueVtdID0gW107XG5cbiAgc3RhdGUubGF5ZXJzLmZvckVhY2goKG9sZExheWVyLCBpKSA9PiB7XG4gICAgaWYgKG9sZExheWVyLmNvbmZpZy5kYXRhSWQgJiYgZGF0YUlkcy5pbmNsdWRlcyhvbGRMYXllci5jb25maWcuZGF0YUlkKSkge1xuICAgICAgLy8gTm8gbmVlZCB0byByZWNhbGN1bGF0ZSBsYXllciBkb21haW4gaWYgZmlsdGVyIGhhcyBmaXhlZCBkb21haW5cbiAgICAgIGNvbnN0IG5ld0xheWVyID1cbiAgICAgICAgdXBkYXRlZEZpbHRlciAmJiB1cGRhdGVkRmlsdGVyLmZpeGVkRG9tYWluXG4gICAgICAgICAgPyBvbGRMYXllclxuICAgICAgICAgIDogb2xkTGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMsIHVwZGF0ZWRGaWx0ZXIpO1xuXG4gICAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaV0pO1xuXG4gICAgICBuZXdMYXllcnMucHVzaChsYXllcik7XG4gICAgICBuZXdMYXllckRhdGEucHVzaChsYXllckRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllcnMucHVzaChvbGRMYXllcik7XG4gICAgICBuZXdMYXllckRhdGEucHVzaChzdGF0ZS5sYXllckRhdGFbaV0pO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJEYXRhOiBuZXdMYXllckRhdGFcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbmltYXRpb25Eb21haW48UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUyk6IFMge1xuICAvLyBtZXJnZSBhbGwgYW5pbWF0YWJsZSBsYXllciBkb21haW4gYW5kIHVwZGF0ZSBnbG9iYWwgY29uZmlnXG4gIGNvbnN0IGFuaW1hdGFibGVMYXllcnMgPSBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGlmICghYW5pbWF0YWJsZUxheWVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICBkb21haW46IG51bGwsXG4gICAgICAgIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgICAgICAgdGltZVN0ZXBzOiBudWxsLFxuICAgICAgICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjb25zdCBsYXllckRvbWFpbnMgPSBhbmltYXRhYmxlTGF5ZXJzLm1hcChsID0+IGwuY29uZmlnLmFuaW1hdGlvbi5kb21haW4gfHwgW10pO1xuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IG1lcmdlZERvbWFpbiA9IG1lcmdlVGltZURvbWFpbnMobGF5ZXJEb21haW5zKTtcbiAgY29uc3QgZGVmYXVsdFRpbWVGb3JtYXQgPSBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIobWVyZ2VkRG9tYWluKTtcblxuICAvLyBtZXJnZSB0aW1lU3RlcHNcbiAgbGV0IG1lcmdlZFRpbWVTdGVwczogbnVtYmVyW10gfCBudWxsID0gdW5pcTxudW1iZXI+KFxuICAgIGFuaW1hdGFibGVMYXllcnMucmVkdWNlKChhY2N1LCBsYXllcikgPT4ge1xuICAgICAgYWNjdS5wdXNoKC4uLihsYXllci5jb25maWcuYW5pbWF0aW9uLnRpbWVTdGVwcyB8fCBbXSkpO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfSwgW10pXG4gICkuc29ydCgpO1xuXG4gIG1lcmdlZFRpbWVTdGVwcyA9IG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggPyBtZXJnZWRUaW1lU3RlcHMgOiBudWxsO1xuXG4gIC8vIFRPRE86IGJldHRlciBoYW5kbGluZyBvZiBkdXJhdGlvbiBjYWxjdWxhdGlvblxuICBjb25zdCBkdXJhdGlvbiA9IG1lcmdlZFRpbWVTdGVwc1xuICAgID8gKEJBU0VfU1BFRUQgKiAoMTAwMCAvIEZQUykpIC8gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCAvIChzdGF0ZS5hbmltYXRpb25Db25maWcuc3BlZWQgfHwgMSlcbiAgICA6IG51bGw7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgZG9tYWluOiBtZXJnZWREb21haW4sXG4gICAgICBkZWZhdWx0VGltZUZvcm1hdCxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgdGltZVN0ZXBzOiBtZXJnZWRUaW1lU3RlcHNcbiAgICB9XG4gIH07XG5cbiAgLy8gcmVzZXQgY3VycmVudFRpbWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICBjb25zdCBzeW5jZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzPy5maW5kKGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSkgYXNcbiAgICB8IFRpbWVSYW5nZUZpbHRlclxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIC8vIGlmIHN5bmNlZCBmaWx0ZXIgZXhpc3Qgd2VlIG5lZWQgdG8gbWVyZ2UgYW5pbWF0aW9uQ29uZmlnIGFuZCBmaWx0ZXIgZG9tYWluc1xuICAvLyBhbmQgdmFsaWRhdGUgdGhlIGN1cnJlbnQgdGltZSBhZ2FpbnN0IHRoZSBuZXcgbWVyZ2VkIGRvbWFpblxuICBjb25zdCBuZXdBbmltYXRpb25Eb21haW4gPSBzeW5jZWRGaWx0ZXJcbiAgICA/IG1lcmdlVGltZURvbWFpbnMoW21lcmdlZERvbWFpbiwgc3luY2VkRmlsdGVyLmRvbWFpbl0pXG4gICAgOiBtZXJnZWREb21haW47XG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gaXNJblJhbmdlKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSwgbmV3QW5pbWF0aW9uRG9tYWluKVxuICAgID8gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lXG4gICAgOiBuZXdBbmltYXRpb25Eb21haW5bMF07XG5cbiAgaWYgKGN1cnJlbnRUaW1lICE9PSBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUpIHtcbiAgICAvLyBpZiBjdXJyZW50VGltZSBjaGFuZ2VkLCBuZWVkIHRvIGNhbGwgYW5pbWF0aW9uVGltZVVwZGF0ZXIgdG8gcmUgY2FsbCBmb3JtYXRMYXllckRhdGFcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihuZXh0U3RhdGUsIHt2YWx1ZTogY3VycmVudFRpbWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSBzdGF0dXMgb2YgdGhlIGVkaXRvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEVkaXRvck1vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNldEVkaXRvck1vZGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHNrZXRjaGVzRW5hYmxlZCA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXM7XG4gIGlmIChcbiAgICAhc2tldGNoZXNFbmFibGVkICYmXG4gICAgKG1vZGUgPT09IEVESVRPUl9NT0RFUy5EUkFXX1BPSU5UIHx8IG1vZGUgPT09IEVESVRPUl9NT0RFUy5EUkFXX0xJTkVTVFJJTkcpXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBtb2RlLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgfVxuICB9O1xufTtcblxuLy8gY29uc3QgZmVhdHVyZVRvRmlsdGVyVmFsdWUgPSAoZmVhdHVyZSkgPT4gKHsuLi5mZWF0dXJlLCBpZDogZmVhdHVyZS5pZH0pO1xuLyoqXG4gKiBVcGRhdGUgZWRpdG9yIGZlYXR1cmVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZXNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlcyA9IFtdfTogVmlzU3RhdGVBY3Rpb25zLlNldEZlYXR1cmVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBsYXN0RmVhdHVyZSA9IGZlYXR1cmVzLmxlbmd0aCAmJiBmZWF0dXJlc1tmZWF0dXJlcy5sZW5ndGggLSAxXTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIC8vIG9ubHkgc2F2ZSBub25lIGZpbHRlciBmZWF0dXJlcyB0byBlZGl0b3JcbiAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcy5maWx0ZXIoZiA9PiAhZ2V0RmlsdGVySWRJbkZlYXR1cmUoZikpLFxuICAgICAgbW9kZTpcbiAgICAgICAgbGFzdEZlYXR1cmUgJiYgbGFzdEZlYXR1cmUucHJvcGVydGllcz8uaXNDbG9zZWRcbiAgICAgICAgICA/IGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LnNoYXBlID09PSAnUmVjdGFuZ2xlJ1xuICAgICAgICAgICAgPyBzdGF0ZS5lZGl0b3IubW9kZVxuICAgICAgICAgICAgOiBFRElUT1JfTU9ERVMuRURJVFxuICAgICAgICAgIDogc3RhdGUuZWRpdG9yLm1vZGVcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgZXhpc3RpbmcgZmVhdHVyZVxuICBjb25zdCB7c2VsZWN0ZWRGZWF0dXJlfSA9IHN0YXRlLmVkaXRvcjtcblxuICAvLyBJZiBubyBmZWF0dXJlIGlzIHNlbGVjdGVkIHdlIGNhbiBzaW1wbHkgcmV0dXJuIHNpbmNlIG5vIG9wZXJhdGlvbnNcbiAgaWYgKCFzZWxlY3RlZEZlYXR1cmUpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICAvLyBUT0RPOiBjaGVjayBpZiB0aGUgZmVhdHVyZSBoYXMgY2hhbmdlZFxuICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXMuZmluZChmID0+IGYuaWQgPT09IHNlbGVjdGVkRmVhdHVyZS5pZCk7XG5cbiAgLy8gaWYgZmVhdHVyZSBpcyBwYXJ0IG9mIGEgZmlsdGVyXG4gIGNvbnN0IGZpbHRlcklkID0gZmVhdHVyZSAmJiBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkICYmIGZlYXR1cmUpIHtcbiAgICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gICAgaWYgKGZlYXR1cmUucHJvcGVydGllcykgZmVhdHVyZS5wcm9wZXJ0aWVzLmJib3ggPSBiYm94KGZlYXR1cmUgYXMgdW5rbm93biBhcyBBbGxHZW9KU09OKTtcbiAgICBjb25zdCBmZWF0dXJlVmFsdWUgPSBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmZWF0dXJlLCBmaWx0ZXJJZCk7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZmlsID0+IGZpbC5pZCA9PT0gZmlsdGVySWQpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IGZlYXR1cmVWYWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBmaW5kRWRpdG9yRmVhdHVyZShzdGF0ZTogVmlzU3RhdGUsIGZlYXR1cmU/OiBGZWF0dXJlIHwgbnVsbCk6IEZlYXR1cmUgfCBudWxsIHtcbiAgaWYgKCFmZWF0dXJlPy5pZCkge1xuICAgIHJldHVybiBmZWF0dXJlIHx8IG51bGw7XG4gIH1cbiAgaWYgKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU/LmlkID09PSBmZWF0dXJlLmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU7XG4gIH1cbiAgY29uc3QgZnJvbUVkaXRvciA9IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmVhdHVyZS5pZCk7XG4gIGlmIChmcm9tRWRpdG9yKSB7XG4gICAgcmV0dXJuIGZyb21FZGl0b3I7XG4gIH1cbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmlsdGVySWQpO1xuICAgIGlmIChmaWx0ZXI/LnZhbHVlKSB7XG4gICAgICByZXR1cm4gZmlsdGVyLnZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmVhdHVyZTtcbn1cblxuLyoqXG4gKiBTZXQgdXNlci1mYWNpbmcgR2VvSlNPTiBwcm9wZXJ0aWVzIG9uIGEgc2tldGNoIG9yIHBvbHlnb24tZmlsdGVyIGZlYXR1cmUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlLCBwcm9wZXJ0aWVzfTogVmlzU3RhdGVBY3Rpb25zLlNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBzb3VyY2UgPSBmaW5kRWRpdG9yRmVhdHVyZShzdGF0ZSwgZmVhdHVyZSk7XG4gIGlmICghc291cmNlPy5pZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5leHRGZWF0dXJlID0gbWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMoc291cmNlLCBwcm9wZXJ0aWVzKTtcbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShuZXh0RmVhdHVyZSk7XG4gIGNvbnN0IG5leHRFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBmaWx0ZXJJZFxuICAgICAgPyBzdGF0ZS5lZGl0b3IuZmVhdHVyZXNcbiAgICAgIDogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLm1hcChpdGVtID0+IChpdGVtLmlkID09PSBuZXh0RmVhdHVyZS5pZCA/IG5leHRGZWF0dXJlIDogaXRlbSkpLFxuICAgIHNlbGVjdGVkRmVhdHVyZTpcbiAgICAgIHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU/LmlkID09PSBuZXh0RmVhdHVyZS5pZFxuICAgICAgICA/IG5leHRGZWF0dXJlXG4gICAgICAgIDogc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZVxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5leHRFZGl0b3JcbiAgfTtcblxuICBpZiAoIWZpbHRlcklkKSB7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySWR4IDwgMCkge1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShuZXh0RmVhdHVyZSwgZmlsdGVySWQpXG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCBzZWxlY3RlZCBmZWF0dXJlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlLCBzZWxlY3Rpb25Db250ZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICBsZXQgc2VsZWN0ZWRGZWF0dXJlID0gZmVhdHVyZTtcbiAgaWYgKGZlYXR1cmU/LnByb3BlcnRpZXMpIHtcbiAgICBzZWxlY3RlZEZlYXR1cmUgPSB7XG4gICAgICAuLi5mZWF0dXJlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgIGJib3g6IGJib3goZmVhdHVyZSBhcyB1bmtub3duIGFzIEFsbEdlb0pTT04pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgc2VsZWN0aW9uQ29udGV4dFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogRGVsZXRlIGV4aXN0aW5nIGZlYXR1cmUgZnJvbSBmaWx0ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRmVhdHVyZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmV9OiBWaXNTdGF0ZUFjdGlvbnMuRGVsZXRlRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFmZWF0dXJlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG5cbiAgaWYgKGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKSB7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSk7XG5cbiAgICByZXR1cm4gZmlsdGVySWR4ID4gLTEgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KSA6IG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gbW9kaWZ5IGVkaXRvciBvYmplY3RcbiAgY29uc3QgbmV3RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXdFZGl0b3JcbiAgfTtcbn1cblxuLyoqXG4gKiBUb2dnbGUgZmVhdHVyZSBhcyBsYXllciBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBheWxvYWQ6IFZpc1N0YXRlQWN0aW9ucy5TZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllciwgZmVhdHVyZX0gPSBwYXlsb2FkO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuXG4gIC8vIGxldCBuZXdGaWx0ZXIgPSBudWxsO1xuICBsZXQgZmlsdGVySWR4O1xuICBsZXQgbmV3TGF5ZXJJZCA9IFtsYXllci5pZF07XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAvLyBJZiBwb2x5Z29uIGZpbHRlciBhbHJlYWR5IGV4aXN0cywgd2UgbmVlZCB0byBmaW5kIG91dCBpZiB0aGUgY3VycmVudCBsYXllciBpcyBhbHJlYWR5IGluY2x1ZGVkXG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuXG4gICAgaWYgKCFzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0pIHtcbiAgICAgIC8vIHdoYXQgaWYgZmlsdGVyIGRvZXNuJ3QgZXhpc3Q/Li4uIG5vdCBwb3NzaWJsZS5cbiAgICAgIC8vIGJlY2F1c2UgZmVhdHVyZXMgaW4gdGhlIGVkaXRvciBpcyBwYXNzZWQgaW4gZnJvbSBmaWx0ZXJzIGFuZCBlZGl0b3JzLlxuICAgICAgLy8gYnV0IHdlIHdpbGwgbW92ZSB0aGlzIGZlYXR1cmUgYmFjayB0byBlZGl0b3IganVzdCBpbiBjYXNlXG4gICAgICBjb25zdCBub25lRmlsdGVyRmVhdHVyZSA9IHtcbiAgICAgICAgLi4uZmVhdHVyZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICBmaWx0ZXJJZDogbnVsbFxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGUuZWRpdG9yLmZlYXR1cmVzLCBub25lRmlsdGVyRmVhdHVyZV0sXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBub25lRmlsdGVyRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gICAgY29uc3Qge2xheWVySWQgPSBbXX0gPSBmaWx0ZXI7XG4gICAgY29uc3QgaXNMYXllckluY2x1ZGVkID0gbGF5ZXJJZC5pbmNsdWRlcyhsYXllci5pZCk7XG5cbiAgICBuZXdMYXllcklkID0gaXNMYXllckluY2x1ZGVkXG4gICAgICA/IC8vIGlmIGxheWVyIGlzIGluY2x1ZGVkLCByZW1vdmUgaXRcbiAgICAgICAgbGF5ZXJJZC5maWx0ZXIobCA9PiBsICE9PSBsYXllci5pZClcbiAgICAgIDogWy4uLmxheWVySWQsIGxheWVyLmlkXTtcblxuICAgIC8vIExhc3QgbGF5ZXIgcmVtb3ZlZDogdHVybiB0aGUgZmlsdGVyIHBvbHlnb24gYmFjayBpbnRvIGEgc2tldGNoXG4gICAgaWYgKCFuZXdMYXllcklkLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2tldGNoRmVhdHVyZSA9IHRvU2tldGNoRmVhdHVyZShmZWF0dXJlKTtcbiAgICAgIGNvbnN0IHN0YXRlV2l0aG91dEZpbHRlciA9IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGVXaXRob3V0RmlsdGVyLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIuZWRpdG9yLFxuICAgICAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGVXaXRob3V0RmlsdGVyLmVkaXRvci5mZWF0dXJlcywgc2tldGNoRmVhdHVyZV0sXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBza2V0Y2hGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGlmIHdlIGhhdmVuJ3QgY3JlYXRlIHRoZSBwb2x5Z29uIGZpbHRlciwgY3JlYXRlIGl0XG4gICAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICAgIC8vIGFkZCBmZWF0dXJlLCByZW1vdmUgZmVhdHVyZSBmcm9tIGVpZHRvclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICAgIGVkaXRvcjoge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBuZXdMYXllcklkXG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGx5IHBvbHlnb24gZmlsdGVyIHRvIGFsbCB2aXNpYmxlIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBheWxvYWQ6IFZpc1N0YXRlQWN0aW9ucy5TZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZmVhdHVyZX0gPSBwYXlsb2FkO1xuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMubGVuZ3RoO1xuXG4gIGNvbnN0IG5ld1N0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZSxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHZpc2libGVMYXllcklkcyA9IGdldChwYXlsb2FkLCAndmlzaWJsZUxheWVySWRzJyk7XG4gIGNvbnN0IGFsbExheWVySWRzID0gQXJyYXkuaXNBcnJheSh2aXNpYmxlTGF5ZXJJZHMpXG4gICAgPyB2aXNpYmxlTGF5ZXJJZHNcbiAgICA6IHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5pc1Zpc2libGUpLm1hcChsID0+IGwuaWQpO1xuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBhbGxMYXllcklkc1xuICB9KTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydFRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW4sIG1vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU29ydFRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBzb3J0TW9kZSA9IG1vZGU7XG4gIGlmICghc29ydE1vZGUpIHtcbiAgICBjb25zdCBjdXJyZW50TW9kZSA9IGdldChkYXRhc2V0LCBbJ3NvcnRDb2x1bW4nLCBjb2x1bW5dKTtcbiAgICAvLyBAdHMtaWdub3JlIC0gc2hvdWxkIGJlIGZpeGFibGUgaW4gYSBUUyBmaWxlXG4gICAgc29ydE1vZGUgPSBjdXJyZW50TW9kZVxuICAgICAgPyBPYmplY3Qua2V5cyhTT1JUX09SREVSKS5maW5kKG0gPT4gbSAhPT0gY3VycmVudE1vZGUpXG4gICAgICA6IFNPUlRfT1JERVIuQVNDRU5ESU5HO1xuICB9XG5cbiAgY29uc3Qgc29ydGVkID0gc29ydERhdGFzZXRCeUNvbHVtbihkYXRhc2V0LCBjb2x1bW4sIHNvcnRNb2RlKTtcbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgc29ydGVkLCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuUGluVGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3RGF0YXNldCA9IHBpblRhYmxlQ29sdW1ucyhkYXRhc2V0LCBjb2x1bW4pO1xuXG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlVGFibGVDb2x1bW5IaWRkZW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVUYWJsZUNvbHVtbkhpZGRlblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCB0b2dnbGVIaWRkZW5UYWJsZUNvbHVtbihkYXRhc2V0LCBjb2x1bW4pLCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dBbGxUYWJsZUNvbHVtbnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuU2hvd0FsbFRhYmxlQ29sdW1uc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzaG93QWxsVGFibGVDb2x1bW5zKGRhdGFzZXQpLCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQ29weSBjb2x1bW4gY29udGVudCBhcyBzdHJpbmdzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuQ29weVRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHt0eXBlfSA9IGRhdGFzZXQuZmllbGRzW2ZpZWxkSWR4XTtcbiAgY29uc3QgdGV4dCA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAocm93ID0+IHBhcnNlRmllbGRWYWx1ZShyb3cudmFsdWVBdChmaWVsZElkeCksIHR5cGUpLCB0cnVlKVxuICAgIC5qb2luKCdcXG4nKTtcblxuICBjb3B5KHRleHQpO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgZGlzcGxheSBmb3JtYXQgZnJvbSBjb2x1bW5zIGZyb20gdXNlciBzZWxlY3Rpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmb3JtYXRzfTogVmlzU3RhdGVBY3Rpb25zLlNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzO1xuICBPYmplY3Qua2V5cyhmb3JtYXRzKS5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gICAgaWYgKGZpZWxkSWR4ID49IDApIHtcbiAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXQgPSBmb3JtYXRzW2NvbHVtbl07XG4gICAgICBjb25zdCBmaWVsZCA9IG5ld0ZpZWxkc1tmaWVsZElkeF07XG4gICAgICBuZXdGaWVsZHMgPSBzd2FwXyhtZXJnZV8oe2Rpc3BsYXlGb3JtYXR9KShmaWVsZCkgYXMge2lkOiBzdHJpbmd9KShcbiAgICAgICAgbmV3RmllbGRzIGFzIHtpZDogc3RyaW5nfVtdXG4gICAgICApIGFzIEZpZWxkW107XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkcyBhcyBGaWVsZFtdfSk7XG4gIGxldCBuZXdTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuICBjb25zdCB0ZXh0TGFiZWxMYXllckluZGV4ZXM6IG51bWJlcltdID0gW107XG5cbiAgLy8gTGF5ZXIgY29uZmlncyByZXRhaW4gdGhlaXIgb3duIGZpZWxkIG9iamVjdHMsIHNvIGtlZXAgdGhvc2UgY29waWVzIGluIHN5bmNcbiAgLy8gd2l0aCB0aGUgZGlzcGxheSBmb3JtYXQgc3RvcmVkIG9uIHRoZSBkYXRhc2V0IGZpZWxkLlxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllcnM6IG5ld1N0YXRlLmxheWVycy5tYXAoKGxheWVyLCBsYXllckluZGV4KSA9PiB7XG4gICAgICAvLyBDb2x1bW4gbmFtZXMgYXJlIG5vdCB1bmlxdWUgYWNyb3NzIGRhdGFzZXRzLiBPbmx5IHVwZGF0ZSBsYXllcnMgdGhhdFxuICAgICAgLy8gYmVsb25nIHRvIHRoZSBkYXRhc2V0IHRhcmdldGVkIGJ5IHRoaXMgYWN0aW9uLlxuICAgICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgICByZXR1cm4gbGF5ZXI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbG9yRmllbGQgPSBsYXllci5jb25maWc/LmNvbG9yRmllbGQ7XG4gICAgICBjb25zdCB1cGRhdGVkQ29sb3JGaWVsZCA9XG4gICAgICAgIGNvbG9yRmllbGQ/Lm5hbWUgJiYgY29sb3JGaWVsZC5uYW1lIGluIGZvcm1hdHNcbiAgICAgICAgICA/IHsuLi5jb2xvckZpZWxkLCBkaXNwbGF5Rm9ybWF0OiBmb3JtYXRzW2NvbG9yRmllbGQubmFtZV19XG4gICAgICAgICAgOiBudWxsO1xuICAgICAgLy8gVGV4dCBsYWJlbHMgYWxzbyBrZWVwIGZpZWxkIGNvcGllcyBpbnN0ZWFkIG9mIHJlYWRpbmcgZGF0YXNldC5maWVsZHMgYXQgcmVuZGVyIHRpbWUuXG4gICAgICBjb25zdCB0ZXh0TGFiZWwgPSBsYXllci5jb25maWcudGV4dExhYmVsLm1hcChsYWJlbCA9PiB7XG4gICAgICAgIGNvbnN0IHtmaWVsZH0gPSBsYWJlbDtcbiAgICAgICAgcmV0dXJuIGZpZWxkPy5uYW1lICYmIGZpZWxkLm5hbWUgaW4gZm9ybWF0c1xuICAgICAgICAgID8gey4uLmxhYmVsLCBmaWVsZDogey4uLmZpZWxkLCBkaXNwbGF5Rm9ybWF0OiBmb3JtYXRzW2ZpZWxkLm5hbWVdfX1cbiAgICAgICAgICA6IGxhYmVsO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB1cGRhdGVUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc29tZShcbiAgICAgICAgKGxhYmVsLCBpbmRleCkgPT4gbGFiZWwgIT09IGxheWVyLmNvbmZpZy50ZXh0TGFiZWxbaW5kZXhdXG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZVRleHRMYWJlbCkge1xuICAgICAgICB0ZXh0TGFiZWxMYXllckluZGV4ZXMucHVzaChsYXllckluZGV4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVwZGF0ZWRDb2xvckZpZWxkIHx8IHVwZGF0ZVRleHRMYWJlbFxuICAgICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIC4uLih1cGRhdGVkQ29sb3JGaWVsZCA/IHtjb2xvckZpZWxkOiB1cGRhdGVkQ29sb3JGaWVsZH0gOiB7fSksXG4gICAgICAgICAgICAuLi4odXBkYXRlVGV4dExhYmVsID8ge3RleHRMYWJlbH0gOiB7fSlcbiAgICAgICAgICB9KVxuICAgICAgICA6IGxheWVyO1xuICAgIH0pXG4gIH07XG5cbiAgaWYgKHRleHRMYWJlbExheWVySW5kZXhlcy5sZW5ndGgpIHtcbiAgICAvLyBMYWJlbCBhY2Nlc3NvcnMgYW5kIGNoYXJhY3RlciBzZXRzIGFyZSBjYWNoZWQgaW4gbGF5ZXJEYXRhLiBSZWJ1aWxkIHRoZW1cbiAgICAvLyBpbW1lZGlhdGVseSBzbyB0aGUgbmV3IGZvcm1hdCBhcHBlYXJzIHdpdGhvdXQgcmVtb3ZpbmcgYW5kIHJlLWFkZGluZyB0aGUgbGFiZWwgZmllbGQuXG4gICAgY29uc3QgbGF5ZXJzID0gbmV3U3RhdGUubGF5ZXJzLnNsaWNlKCk7XG4gICAgY29uc3QgbGF5ZXJEYXRhID0gbmV3U3RhdGUubGF5ZXJEYXRhLnNsaWNlKCk7XG4gICAgdGV4dExhYmVsTGF5ZXJJbmRleGVzLmZvckVhY2gobGF5ZXJJbmRleCA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobGF5ZXJzW2xheWVySW5kZXhdLCBuZXdTdGF0ZSwgbGF5ZXJEYXRhW2xheWVySW5kZXhdKTtcbiAgICAgIGxheWVyc1tsYXllckluZGV4XSA9IHJlc3VsdC5sYXllcjtcbiAgICAgIGxheWVyRGF0YVtsYXllckluZGV4XSA9IHJlc3VsdC5sYXllckRhdGE7XG4gICAgfSk7XG4gICAgbmV3U3RhdGUgPSB7Li4ubmV3U3RhdGUsIGxheWVycywgbGF5ZXJEYXRhfTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxudHlwZSBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCA9IHtcbiAgZGF0YXNldDogVmlzU3RhdGVbJ2RhdGFzZXRzJ11bc3RyaW5nXTtcbiAgZmllbGQ6IEZpZWxkO1xufTtcblxuZnVuY3Rpb24gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHM/OiBGaWx0ZXJQcm9wcyB8IG51bGwpOiB1bmtub3duW10gfCB1bmRlZmluZWQge1xuICBpZiAoZmlsdGVyUHJvcHMgJiYgJ21hcHBlZFZhbHVlJyBpbiBmaWx0ZXJQcm9wcyAmJiBBcnJheS5pc0FycmF5KGZpbHRlclByb3BzLm1hcHBlZFZhbHVlKSkge1xuICAgIHJldHVybiBmaWx0ZXJQcm9wcy5tYXBwZWRWYWx1ZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB5aWVsZEZvclBhaW50KCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCAwKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyh7ZGF0YXNldCwgZmllbGR9OiBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCkge1xuICAvLyBZaWVsZCBzbyB0aGUgZGF0YSB0YWJsZSBhbmQgcGVyLWNvbHVtbiBsb2FkaW5nIHNwaW5uZXJzIGNhbiBwYWludCBmaXJzdC5cbiAgYXdhaXQgeWllbGRGb3JQYWludCgpO1xuICBjb25zdCBmaWx0ZXJQcm9wcyA9IGZpZWxkLmZpbHRlclByb3BzIHx8IGRhdGFzZXQuZ2V0Q29sdW1uRmlsdGVyUHJvcHMoZmllbGQubmFtZSk7XG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHMpO1xuICBjb25zdCB2YWx1ZXMgPSBtYXBwZWRWYWx1ZSA/PyBjb2xsZWN0Q29sdW1uVmFsdWVzKGRhdGFzZXQuZGF0YUNvbnRhaW5lciwgZmllbGQuZmllbGRJZHgpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRDb2x1bW5TdGF0aXN0aWNzKHtcbiAgICB2YWx1ZXMsXG4gICAgZmllbGRUeXBlOiBmaWVsZC50eXBlXG4gIH0pO1xuXG4gIHJldHVybiB7cmVzdWx0LCBmaWx0ZXJQcm9wc307XG59XG5cbmNvbnN0IExPQURfQ09MVU1OX1NUQVRTX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKFxuICByZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MsXG4gICdMT0FEX0NPTFVNTl9TVEFUU19UQVNLJ1xuKTtcblxuLyoqXG4gKiBTdGFydCBsb2FkaW5nIGNvbHVtbiBzdGF0aXN0aWNzIGZvciBvbmUgb3IgbW9yZSBmaWVsZHMuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBmaWVsZE5hbWVzVG9Mb2FkID0gdG9BcnJheShmaWVsZE5hbWUpO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGRzVG9Mb2FkID0gZGF0YXNldD8uZmllbGRzLmZpbHRlcihmID0+IGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGRzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmaWVsZCA9PlxuICAgIGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZmllbGQubmFtZSkgPyB7Li4uZmllbGQsIGlzTG9hZGluZ1N0YXRzOiB0cnVlfSA6IGZpZWxkXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG5cbiAgY29uc3QgdGFza3MgPSBmaWVsZHNUb0xvYWQubWFwKGYgPT5cbiAgICBMT0FEX0NPTFVNTl9TVEFUU19UQVNLKHtkYXRhc2V0OiBuZXdEYXRhc2V0LCBmaWVsZDogZn0pLmJpbWFwKFxuICAgICAgKHtyZXN1bHQsIGZpbHRlclByb3BzfSkgPT5cbiAgICAgICAgbG9hZENvbHVtblN0YXRzU3VjY2VzcyhuZXdEYXRhc2V0LmlkLCBmLm5hbWUsIHJlc3VsdCwgZmlsdGVyUHJvcHMsIHtcbiAgICAgICAgICBmaWVsZFR5cGU6IGYudHlwZVxuICAgICAgICB9KSxcbiAgICAgIChlcnJvcjogRXJyb3IpID0+XG4gICAgICAgIGxvYWRDb2x1bW5TdGF0c0Vycm9yKG5ld0RhdGFzZXQuaWQsIGYubmFtZSwgZXJyb3IsIHtcbiAgICAgICAgICBmaWVsZFR5cGU6IGYudHlwZVxuICAgICAgICB9KVxuICAgIClcbiAgKTtcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKG5leHRTdGF0ZSwgdGFza3MpO1xufVxuXG4vKipcbiAqIFBlcnNpc3QgbG9hZGVkIGNvbHVtbiBzdGF0aXN0aWNzIG9uIHRoZSBmaWVsZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcmVzdWx0LFxuICAgIGZpbHRlclByb3BzLFxuICAgIGRhdGFJZCxcbiAgICBmaWVsZE5hbWUsXG4gICAgZmllbGRUeXBlXG4gIH06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGQgPSAoZGF0YXNldD8uZmllbGRzIHx8IFtdKS5maW5kKGYgPT4gZi5uYW1lID09PSBmaWVsZE5hbWUpO1xuICBpZiAoIWRhdGFzZXQgfHwgIWZpZWxkIHx8IChmaWVsZFR5cGUgIT09IHVuZGVmaW5lZCAmJiBmaWVsZC50eXBlICE9PSBmaWVsZFR5cGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyUHJvcHMgPSB7XG4gICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgY29sdW1uU3RhdHM6IHJlc3VsdFxuICB9O1xuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZiA9PlxuICAgIGYubmFtZSA9PT0gZmllbGROYW1lID8gey4uLmYsIGZpbHRlclByb3BzOiBuZXdGaWx0ZXJQcm9wcywgaXNMb2FkaW5nU3RhdHM6IGZhbHNlfSA6IGZcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcbiAgcmV0dXJuIHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIENsZWFyIGxvYWRpbmcgZmxhZyB3aGVuIGNvbHVtbiBzdGF0aXN0aWNzIGZhaWwuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZGF0YUlkLCBmaWVsZE5hbWUsIGZpZWxkVHlwZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkID0gKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZCB8fCAoZmllbGRUeXBlICE9PSB1bmRlZmluZWQgJiYgZmllbGQudHlwZSAhPT0gZmllbGRUeXBlKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBDb25zb2xlLmVycm9yKGVycm9yKTtcbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGYgPT5cbiAgICBmLm5hbWUgPT09IGZpZWxkTmFtZSA/IHsuLi5mLCBpc0xvYWRpbmdTdGF0czogZmFsc2V9IDogZlxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgdmlzaWJsZTogIXN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgZWRpdG9yIHNrZXRjaCBmZWF0dXJlcyBpbnRvIGEgR2VvSlNPTiBkYXRhc2V0L2xheWVyIGFuZCBjbGVhciB0aGUgc2tldGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF9hY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Db252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmZWF0dXJlcyA9IHN0YXRlLmVkaXRvci5mZWF0dXJlcztcbiAgaWYgKCFmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID0gcHJvY2Vzc0dlb2pzb24oZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uKGZlYXR1cmVzKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNvbnZlcnQgZHJhd24gZ2VvbWV0cnkgdG8gYSBsYXllcjogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2NvbnZlcnQtZWRpdG9yLWZlYXR1cmVzJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2xlYXJlZFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxhYmVsSWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5MCkgKyAxMDtcblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoY2xlYXJlZFN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBkcmF3bi1nZW9tZXRyeS0ke2dlbmVyYXRlSGFzaElkKDYpfWAsXG4gICAgICAgIGxhYmVsOiBgRHJhd24gR2VvbWV0cnkgJHtsYWJlbElkfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQ29weSBpbi1tZW1vcnkgcm93cyAob3IgbG9hZGVkIHZlY3Rvci10aWxlIGZlYXR1cmVzKSBpbnNpZGUgdGhlIHNlbGVjdGVkXG4gKiBEcmF3IG9uIE1hcCBwb2x5Z29uIGludG8gYSBuZXcgZGF0YXNldC4gUmFzdGVyIHRpbGVzIGRvd25sb2FkIGEgUE5HIGNsaXAgYW5kIGFcbiAqIEdlb0pTT04gc2lkZWNhciAoYmJveCByZWN0YW5nbGUgKyBzdGF0cykgaW5zdGVhZCBvZiBjcmVhdGluZyBhIGRhdGFzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5FeHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBmZWF0dXJlID0gc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICBjb25zdCBkYXRhSWQgPSBsYXllcj8uY29uZmlnLmRhdGFJZDtcbiAgbGV0IGRhdGFzZXQgPSBkYXRhSWQgPyBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIDogbnVsbDtcblxuICBpZiAoIWxheWVyIHx8ICFkYXRhc2V0IHx8ICFkYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBpc1RpbGVkRXh0cmFjdCA9IGlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcihsYXllcikgfHwgaXNSYXN0ZXJUaWxlRXh0cmFjdExheWVyKGxheWVyKTtcblxuICAvLyBHUFUgcmFuZ2UvdGltZSBmaWx0ZXJzIGFyZSBub3QgcmVmbGVjdGVkIGluIGZpbHRlcmVkSW5kZXg7IGV2YWx1YXRlIHRoZW0gb24gQ1BVXG4gIC8vIHRoZSBzYW1lIHdheSBleHBvcnQgZGF0YSBkb2VzLCB0aGVuIGNsaXAgdGhlIHJlc3VsdCB0byB0aGUgZHJhd2luZy5cbiAgaWYgKCFpc1RpbGVkRXh0cmFjdCkge1xuICAgIHN0YXRlID0gZmlsdGVyRGF0YXNldENQVShzdGF0ZSwgZGF0YUlkKTtcbiAgICBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgICBpZiAoIWRhdGFzZXQpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH1cblxuICBsZXQgZXh0cmFjdGVkO1xuICB0cnkge1xuICAgIGV4dHJhY3RlZCA9IGV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSh7bGF5ZXIsIGRhdGFzZXQsIGZlYXR1cmV9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gZXh0cmFjdCBkYXRhOiAke21lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1kYXRhLWZyb20tZmVhdHVyZSdcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGlmICghZXh0cmFjdGVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKCFleHRyYWN0ZWQucm93Q291bnQpIHtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGlzUmFzdGVyVGlsZUV4dHJhY3RMYXllcihsYXllcilcbiAgICAgICAgICAgICAgPyAnTm8gbG9hZGVkIHJhc3RlciBwaXhlbHMgZm91bmQgaW5zaWRlIHRoZSBzZWxlY3RlZCBkcmF3aW5nJ1xuICAgICAgICAgICAgICA6IGlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcihsYXllcilcbiAgICAgICAgICAgICAgPyAnTm8gbG9hZGVkIHZlY3RvciB0aWxlIGZlYXR1cmVzIGZvdW5kIGluc2lkZSB0aGUgc2VsZWN0ZWQgZHJhd2luZydcbiAgICAgICAgICAgICAgOiAnTm8gcm93cyBmb3VuZCBpbnNpZGUgdGhlIHNlbGVjdGVkIGRyYXdpbmcnLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlLWVtcHR5J1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgaWYgKGlzUmFzdGVyVGlsZUV4dHJhY3RMYXllcihsYXllcikpIHtcbiAgICBjb25zdCBwb2x5Z29uID0gZmVhdHVyZTtcbiAgICBjb25zdCBkb3dubG9hZCA9XG4gICAgICB0eXBlb2YgKGxheWVyIGFzIGFueSkuZG93bmxvYWRDbGlwID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKChsYXllciBhcyBhbnkpLmRvd25sb2FkQ2xpcChwb2x5Z29uKSlcbiAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoe3BuZzogZmFsc2UsIGpzb246IGZhbHNlfSk7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBVTldSQVBfVEFTSyhkb3dubG9hZCkuYmltYXAoXG4gICAgICAgIChyZXN1bHQ6IHtwbmc/OiBib29sZWFufSB8IG51bGwpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgcmVzdWx0Py5wbmdcbiAgICAgICAgICAgICAgPyBzdWNjZXNzTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdEb3dubG9hZGVkIHJhc3RlciBjbGlwIGltYWdlIGFuZCBzdGF0cyBmaWxlJyxcbiAgICAgICAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1yYXN0ZXItY2xpcCdcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdGYWlsZWQgdG8gZG93bmxvYWQgcmFzdGVyIGNsaXAgaW1hZ2UnLFxuICAgICAgICAgICAgICAgICAgaWQ6ICdleHRyYWN0LXJhc3Rlci1jbGlwJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSxcbiAgICAgICAgZXJyID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGRvd25sb2FkIHJhc3RlciBjbGlwOiAke1xuICAgICAgICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKVxuICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgaWQ6ICdleHRyYWN0LXJhc3Rlci1jbGlwJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGxldCBkYXRhO1xuICB0cnkge1xuICAgIGRhdGEgPVxuICAgICAgZXh0cmFjdGVkLmtpbmQgPT09ICdnZW9qc29uJ1xuICAgICAgICA/IHByb2Nlc3NHZW9qc29uKHtcbiAgICAgICAgICAgIHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgICAgICBmZWF0dXJlczogZXh0cmFjdGVkLmZlYXR1cmVzXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB7ZmllbGRzOiBleHRyYWN0ZWQuZmllbGRzLCByb3dzOiBleHRyYWN0ZWQucm93c307XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YTogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBkYXRhc2V0czoge1xuICAgICAgaW5mbzoge1xuICAgICAgICBpZDogYGV4dHJhY3QtJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLFxuICAgICAgICBsYWJlbDogYEV4dHJhY3RlZCAke2RhdGFzZXQubGFiZWx9YFxuICAgICAgfSxcbiAgICAgIGRhdGFcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgICAgIGNlbnRlck1hcDogZmFsc2UsXG4gICAgICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlXG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKG9sZEZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgQ29uc29sZS5lcnJvcihcbiAgICAgIGBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIGNhbiBvbmx5IGJlIGNhbGxlZCB0byB1cGRhdGUgYSB0aW1lIGZpbHRlci4gY2hlY2sgZmlsdGVyLnR5cGUgPT09ICd0aW1lUmFuZ2UnYFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcblxuICByZXR1cm4gcGlja18oJ2ZpbHRlcnMnKShzd2FwXyhtZXJnZV8odXBkYXRlcykob2xkRmlsdGVyKSkpKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpIHtcbiAgY29uc3QgYWxsb3dlZCA9IFsndGltZUZvcm1hdCcsICd0aW1lem9uZSddO1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKGFjY3UsIHByb3ApID0+IHtcbiAgICBpZiAoIWFsbG93ZWQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWcgdGFrZXMgdGltZUZvcm1hdCBhbmQvb3IgdGltZXpvbmUgYXMgb3B0aW9ucywgZm91bmQgJHtwcm9wfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHdlIGFyZSBOT1QgY2hlY2tpbmcgaWYgdGltZXpvbmUgb3IgdGltZUZvcm1hdCBpbnB1dCBpcyB2YWxpZFxuICAgIGFjY3VbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG4gIHJldHVybiBwaWNrXygnYW5pbWF0aW9uQ29uZmlnJykobWVyZ2VfKHVwZGF0ZXMpKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2V2ZW50LCBsYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IHtpZDogZGVja2dsTGF5ZXJJZCwgY291bnR9ID0gZXZlbnQ7XG4gIGlmICghbGF5ZXIpIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyRmlsdGVyZWRJdGVtcyBsYXllciBkb2VzbnQgZXhpc3RzYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllci5maWx0ZXJlZEl0ZW1Db3VudD8uW2RlY2tnbExheWVySWRdID09PSBjb3VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxheWVyLmZpbHRlcmVkSXRlbUNvdW50ID0ge1xuICAgIC4uLmxheWVyLmZpbHRlcmVkSXRlbUNvdW50LFxuICAgIFtkZWNrZ2xMYXllcklkXTogY291bnRcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3dhcF8obGF5ZXIpKHN0YXRlLmxheWVycylcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgV01TIGZlYXR1cmUgaW5mbyBhbmQgcGluIHRvb2x0aXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdtc0ZlYXR1cmVJbmZvVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuV01TRmVhdHVyZUluZm9BY3Rpb25cbik6IFMge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmVJbmZvLCBjb29yZGluYXRlfSA9IGFjdGlvbjtcbiAgaWYgKCFsYXllcikge1xuICAgIGNvbnNvbGUud2FybihgV01TIGZlYXR1cmUgaW5mbyBsYXllciBkb2Vzbid0IGV4aXN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgY2xpY2tlZCBvYmplY3Qgc2ltaWxhciB0byBsYXllckNsaWNrVXBkYXRlciB0byBwaW4gdGhlIHRvb2x0aXBcbiAgY29uc3QgY2xpY2tlZCA9IGZlYXR1cmVJbmZvXG4gICAgPyB7XG4gICAgICAgIHBpY2tlZDogdHJ1ZSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgd21zRmVhdHVyZUluZm86IGZlYXR1cmVJbmZvXG4gICAgICAgIH0sXG4gICAgICAgIGNvb3JkaW5hdGU6IGNvb3JkaW5hdGUgfHwgWzAsIDBdLFxuICAgICAgICBsYXllcjoge1xuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpZHg6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllci5pZCksXG4gICAgICAgICAgICBpZDogbGF5ZXIuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIG9mIHRoZSBsb2FkaW5nIGluZGljYXRvci5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgdmlzU3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXlsb2FkIHdpdGggY2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBhY3Rpb25zLlxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cGF5bG9hZDoge2NoYW5nZX19OiB7cGF5bG9hZDogU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWR9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCB7bG9hZGluZ0luZGljYXRvclZhbHVlfSA9IHN0YXRlO1xuICBpZiAoIWxvYWRpbmdJbmRpY2F0b3JWYWx1ZSkge1xuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSA9IDA7XG4gIH1cblxuICBjb25zdCBuZXh0VmFsdWUgPSBNYXRoLm1heChsb2FkaW5nSW5kaWNhdG9yVmFsdWUgKyBjaGFuZ2UsIDApO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogbmV4dFZhbHVlLFxuICAgIC4uLihuZXh0VmFsdWUgPT09IDAgJiZcbiAgICAoT2JqZWN0LmtleXMoc3RhdGUubG9hZGluZ1Byb2dyZXNzIHx8IHt9KS5sZW5ndGggfHxcbiAgICAgIE9iamVjdC5rZXlzKHN0YXRlLmxvYWRpbmdQcm9jZXNzaW5nIHx8IHt9KS5sZW5ndGgpXG4gICAgICA/IHtsb2FkaW5nUHJvZ3Jlc3M6IHt9LCBsb2FkaW5nUHJvY2Vzc2luZzoge319XG4gICAgICA6IHt9KVxuICB9O1xufTtcblxuLyoqXG4gKiBSZWNvcmQgZG93bmxvYWQgcHJvZ3Jlc3MgZm9yIGFuIGluLWZsaWdodCByZW1vdGUgZGF0YXNldCBoeWRyYXRlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwZXJjZW50LCBwaGFzZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICgoc3RhdGUubG9hZGluZ0luZGljYXRvclZhbHVlIHx8IDApIDw9IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dFBlcmNlbnQgPSBOdW1iZXIuaXNGaW5pdGUocGVyY2VudClcbiAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChwZXJjZW50KSkpXG4gICAgOiAwO1xuICBjb25zdCBwcm9jZXNzaW5nID0gcGhhc2UgPT09ICdwcm9jZXNzaW5nJztcbiAgaWYgKFxuICAgIHN0YXRlLmxvYWRpbmdQcm9ncmVzcz8uW2lkXSA9PT0gbmV4dFBlcmNlbnQgJiZcbiAgICBCb29sZWFuKHN0YXRlLmxvYWRpbmdQcm9jZXNzaW5nPy5baWRdKSA9PT0gcHJvY2Vzc2luZ1xuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nUHJvZ3Jlc3M6IHtcbiAgICAgIC4uLnN0YXRlLmxvYWRpbmdQcm9ncmVzcyxcbiAgICAgIFtpZF06IG5leHRQZXJjZW50XG4gICAgfSxcbiAgICAuLi4ocHJvY2Vzc2luZ1xuICAgICAgPyB7XG4gICAgICAgICAgbG9hZGluZ1Byb2Nlc3Npbmc6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLmxvYWRpbmdQcm9jZXNzaW5nLFxuICAgICAgICAgICAgW2lkXTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgOiB7fSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBmaWx0ZXJJZHg6IG51bWJlcik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gIGlmICgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICBjb25zdCB0aW1lbGluZVZhbHVlID0gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHNcbiAgICAgID8gc25hcFRvTWFya3ModGltZWxpbmVWYWx1ZSwgc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcylcbiAgICAgIDogdGltZWxpbmVWYWx1ZTtcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihzdGF0ZSwge3ZhbHVlfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpIHtcbiAgcmV0dXJuIGZpbHRlci52YWx1ZVtmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV07XG59XG5cbmZ1bmN0aW9uIGdldFN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKSB7XG4gIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmZyZWUpIHtcbiAgICByZXR1cm4gZmlsdGVyLnN5bmNUaW1lbGluZU1vZGUgPz8gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG4gIH1cblxuICByZXR1cm4gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIsIG5ld01vZGU6IG51bWJlcikge1xuICByZXR1cm4gIShcbiAgICBmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmZyZWUgJiYgbmV3TW9kZSA9PT0gU1lOQ19USU1FTElORV9NT0RFUy5zdGFydFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwoc3RhdGUsIGZpbHRlcikge1xuICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGxldCBpbnRlcnZhbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlmIChpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJbmRleCA9IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMucmVkdWNlKChjdXJyZW50SW5kZXgsIGwpID0+IHtcbiAgICAgIGlmIChsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRC5maW5kSW5kZXgoaSA9PiBpID09PSBsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKTtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4ID4gLTEgJiYgbmV3SW5kZXggPCBjdXJyZW50SW5kZXggPyBuZXdJbmRleCA6IGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9LCBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmxlbmd0aCAtIDEpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBsYXllclRpbWVJbnRlcnZhbCA9IFRJTUVfSU5URVJWQUxTX09SREVSRURbaW50ZXJ2YWxJbmRleF07XG4gICAgaW50ZXJ2YWwgPSBMYXllclRvRmlsdGVyVGltZUludGVydmFsW2xheWVyVGltZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IHBsb3RCYXNlSW5kZXhCeURhdGFJZCA9IGdldFBsb3RCYXNlSW5kZXhCeURhdGFJZChzdGF0ZS5kYXRhc2V0cywgZmlsdGVyLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdGaWx0ZXIgPSB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUoXG4gICAgZmlsdGVyLFxuICAgIHVwZGF0ZWRQbG90VHlwZSxcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICB1bmRlZmluZWQsXG4gICAgcGxvdEJhc2VJbmRleEJ5RGF0YUlkXG4gICk7XG4gIHJldHVybiBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93KHN0YXRlLCBuZXdGaWx0ZXIsIHBsb3RCYXNlSW5kZXhCeURhdGFJZCk7XG59XG5cbi8vIEZpbmQgZGF0YUlkIGZyb20gYSBzYXZlZCB2aXNTdGF0ZSBwcm9wZXJ0eTpcbi8vIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zLCBsYXllckJsZW5kaW5nLCBvdmVybGF5QmxlbmRpbmcsIHNwbGl0TWFwcywgYW5pbWF0aW9uQ29uZmlnLCBlZGl0b3Jcbi8vIHJlcGxhY2UgaXQgd2l0aCBhbm90aGVyIGRhdGFJZFxuZnVuY3Rpb24gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHZhbHVlOiBhbnksIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IHJlcGxhY2VkID0gdmFsdWVcbiAgICAgIC5tYXAodiA9PiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModiwgZGF0YUlkLCBkYXRhSWRUb1JlcGxhY2UpKVxuICAgICAgLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZS5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHZhbHVlLmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gb3RoZXJzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICB9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YUlkKSAmJiB2YWx1ZS5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgIC8vIGZpbHRlclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogdmFsdWUuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1JlcGxhY2UgOiBkKSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmNvbmZpZz8uZGF0YUlkICYmIHZhbHVlLmNvbmZpZz8uZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBsYXllclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi52YWx1ZS5jb25maWcsXG4gICAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBkYXRhSWQpKSB7XG4gICAgLy8gZm9yIHZhbHVlIHNhdmVkIGFzIHtbZGF0YUlkXTogey4uLn19XG4gICAgcmV0dXJuIHtbZGF0YUlkVG9SZXBsYWNlXTogdmFsdWVbZGF0YUlkXX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gRmluZCBkYXRhc2V0SWRzIGRlcml2ZWQgYSBzYXZlZCB2aXNTdGF0ZSBQcm9wZXJ0eTtcbmZ1bmN0aW9uIGZpbmRDaGlsZERhdGFzZXRJZHModmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgY29uc3QgY2hpbGREYXRhSWRzID0gdmFsdWUubWFwKGZpbmRDaGlsZERhdGFzZXRJZHMpLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiBjaGlsZERhdGFJZHMubGVuZ3RoID8gY2hpbGREYXRhSWRzIDogbnVsbDtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZT8ubmV3RGF0YXNldD8uaW5mby5pZCB8fCBudWxsO1xufVxuXG4vLyBtb3ZlZCB1bm1lcmdlZCBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9uc1xuZnVuY3Rpb24gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcHJvcFZhbHVlcywge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KSB7XG4gIC8vIHJlbW92ZSBwcm9wIHZhbHVlIGZyb20gc3RhdGVcbiAgLy8gVE9ETzogc2hvdWxkIHdlIGFkZCByZW1vdmUgdXBkYXRlciB0byBtZXJnZXIgYXMgd2VsbD9cbiAgaWYgKCFwcm9wVmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHN0YXRlUmVtb3ZlZCA9XG4gICAgcHJvcCA9PT0gJ2xheWVycydcbiAgICAgID8gcHJvcFZhbHVlcy5yZWR1Y2UoKGFjY3UsIHByb3BWYWx1ZSkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZDogcHJvcFZhbHVlLmlkfSksIHN0YXRlKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHN0YXRlW3Byb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgW3Byb3BdOiBzdGF0ZVtwcm9wXS5maWx0ZXIocCA9PiAhcHJvcFZhbHVlcy5maW5kKHByb3BWYWx1ZSA9PiBwLmlkID09PSBwcm9wVmFsdWUuaWQpKVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG5vdCBhcnJheSwgd2Ugd29uJ3QgcmVtb3ZlIGl0LCByZW1vdmUgZGF0YXNldCBzaG91bGQgaGFuZGxlIGl0XG4gICAgICAgIHN0YXRlO1xuXG4gIC8vIG1vdmUgdG8gc3RhdGVUb0JlTWVyZ2VkXG4gIGNvbnN0IHRvQmVNZXJnZWQgPSB7XG4gICAgW3RvTWVyZ2VQcm9wXTogc2F2ZVVubWVyZ2VkXG4gICAgICA/IC8vIGNhbGwgbWVyZ2Ugc2F2ZVVubWVyZ2VkIG1ldGhvZFxuICAgICAgICBzYXZlVW5tZXJnZWQoc3RhdGVSZW1vdmVkLCBwcm9wVmFsdWVzKVxuICAgICAgOiAvLyBpZiB0b01lcmdlUHJvcCBpcyBhcmFheSwgYXBwZW5kIHRvIGl0XG4gICAgICBBcnJheS5pc0FycmF5KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IFsuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLCAuLi5wcm9wVmFsdWVzXVxuICAgICAgOiAvLyBzYXZlIHByb3BWYWx1ZXMgdG8gdG9NZXJnZVxuICAgICAgaXNPYmplY3Qoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sXG4gICAgICAgICAgLi4ucHJvcFZhbHVlc1xuICAgICAgICB9XG4gICAgICA6IHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlUmVtb3ZlZCxcbiAgICAuLi50b0JlTWVyZ2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0QW5kRGVwczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHtkZWxldGVPcmlnaW5hbERhdGFzZXQ/OiBib29sZWFufSA9IHt9XG4pOiBUIHtcbiAgLy8gVGhlIHNhbWUgaWQgbWVhbnMgdGhlIG5ldyB0YWJsZSBvY2N1cGllcyB0aGUgb2xkIHNsb3QsIHNvIHRoZSBwcmV2aW91cyByb3dzIGhhdmUgdG8gZ28uXG4gIGNvbnN0IGRlbGV0ZU9yaWdpbmFsRGF0YXNldCA9IG9wdGlvbnMuZGVsZXRlT3JpZ2luYWxEYXRhc2V0ICE9PSBmYWxzZSB8fCBkYXRhSWQgPT09IGRhdGFJZFRvVXNlO1xuICByZXR1cm4gY29tcG9zZV88VD4oW1xuICAgIGFwcGx5XyhyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlLCB7ZGF0YUlkLCBkYXRhSWRUb1VzZX0pLFxuICAgIGlmXyhkZWxldGVPcmlnaW5hbERhdGFzZXQsIGFwcGx5XyhyZW1vdmVEYXRhc2V0VXBkYXRlciwge2RhdGFJZH0pKVxuICBdKShzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHtkZWxldGVPcmlnaW5hbERhdGFzZXQ/OiBib29sZWFufSA9IHt9XG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG4gIGNvbnN0IGRlbGV0ZU9yaWdpbmFsRGF0YXNldCA9IG9wdGlvbnMuZGVsZXRlT3JpZ2luYWxEYXRhc2V0ICE9PSBmYWxzZSB8fCBkYXRhSWQgPT09IGRhdGFJZFRvVXNlO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZXBsYWNlRGF0YXNldEFuZERlcHMoc3RhdGUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UsIHtkZWxldGVPcmlnaW5hbERhdGFzZXR9KTtcbiAgLy8gbWFrZSBhIGNvcHkgb2YgbGF5ZXJPcmRlciwgYmVjYXVzZSBsYXllciBpZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdCBieSBjYWxsaW5nIHJlbW92ZUxheWVyVXBkYXRlclxuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgLy8gV2hlbiB0aGUgb3JpZ2luYWwgdGFibGUgc3RheXMsIHRoZSByZXBsYWNlbWVudCB0YWtlcyBpdHMgcGxhY2UgYW5kIHRoZSBvcmlnaW5hbCBmb2xsb3dzIGl0LlxuICBuZXh0U3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIgPSBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cykuZmxhdE1hcChkID0+IHtcbiAgICBpZiAoZCAhPT0gZGF0YUlkKSB7XG4gICAgICByZXR1cm4gW2RdO1xuICAgIH1cbiAgICByZXR1cm4gZGVsZXRlT3JpZ2luYWxEYXRhc2V0ID8gW2RhdGFJZFRvVXNlXSA6IFtkYXRhSWRUb1VzZSwgZF07XG4gIH0pO1xuXG4gIC8vIHByZXNlcnZlTGF5ZXJPcmRlclxuICBpZiAobmV4dFN0YXRlLmxheWVyVG9CZU1lcmdlZD8ubGVuZ3RoKSB7XG4gICAgLy8gY29weSBzcGxpdCBtYXBzIHRvIGJlIG1lcmdlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc2V0IGluIHJlbW92ZSBsYXllci5cbiAgICAvLyBLZWVwIHRoZSBvbmVzIG9mIGEgZGF0YXNldCByZXBsYWNlZCBhIG1vbWVudCBlYXJsaWVyIGFuZCBub3QgbWVyZ2VkIGJhY2sgeWV0OlxuICAgIC8vIGl0cyBsYXllcnMgYXJlIG5vIGxvbmdlciBpbiB0aGUgY3VycmVudCBzcGxpdCBtYXBzLlxuICAgIG5leHRTdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkID0gY29tYmluZVNwbGl0TWFwc0J5SW5kZXgoXG4gICAgICBzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkLFxuICAgICAgc2VyaWFsaXplZFN0YXRlPy5zcGxpdE1hcHMgPz8gW11cbiAgICApO1xuICAgIG5leHRTdGF0ZS5sYXllck9yZGVyID0gWy4uLnByZXNlcnZlTGF5ZXJPcmRlcl07XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFRoZSBvcmRlciB0byBwcmVzZXJ2ZSBmb3IgdGhlIGl0ZW1zIHRoYXQgd2lsbCBiZSBtZXJnZWQgYmFjay5cbiAqXG4gKiBgaWRzYCBjb21lcyBmcm9tIHRoZSBzZXJpYWxpemVkIHN0YXRlLCBzbyBpdCBsaXN0cyBldmVyeXRoaW5nIGJ1dCB0aGUgaXRlbXNcbiAqIGFub3RoZXIgZGF0YXNldCdzIHJlcGxhY2VtZW50IHBhcmtlZCBhIG1vbWVudCBhZ286IGFuIGFwcCByZWZyZXNoaW5nIHNldmVyYWxcbiAqIGRhdGFzZXRzIGluIGEgcm93IHByZXBhcmVzIHRoZSBzZWNvbmQgcmVwbGFjZW1lbnQgYmVmb3JlIHRoZSBmaXJzdCBvbmUnc1xuICogaXRlbXMgaGF2ZSBtZXJnZWQgYmFjay4gV3JpdGluZyBgaWRzYCBhcyBpdCBpcyB3b3VsZCBkcm9wIHRob3NlLCBhbmRcbiAqIGBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyYCBwdXRzIGFuIGl0ZW0gaXQgY2Fubm90IHBsYWNlIGF0IHRoZSBmcm9udCDigJRcbiAqIHNvIHRoZXkgd291bGQgY29tZSBiYWNrIHJldmVyc2VkLiBXaGVyZSB0aGV5IGJlbG9uZyBpcyB3aGF0IHRoZSBvcmRlciB3cml0dGVuXG4gKiB3aGVuIHRoZXkgd2VyZSBwYXJrZWQgYWxyZWFkeSBzYXlzLCBzbyB0aGF0IG9yZGVyIGlzIGtlcHQgZm9yIHRoZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQoXG4gIHByZXZpb3VzT3JkZXI6IHN0cmluZ1tdID0gW10sXG4gIGlkczogc3RyaW5nW10sXG4gIHBhcmtlZDoge2lkPzogc3RyaW5nfVtdXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHBhcmtlZElkcyA9IHBhcmtlZFxuICAgIC5tYXAoaXRlbSA9PiBpdGVtPy5pZClcbiAgICAuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSAmJiAhaWRzLmluY2x1ZGVzKGlkIGFzIHN0cmluZykpO1xuXG4gIGlmICghcGFya2VkSWRzLmxlbmd0aCkge1xuICAgIHJldHVybiBpZHM7XG4gIH1cblxuICBjb25zdCBrbm93biA9IG5ldyBTZXQoWy4uLmlkcywgLi4ucGFya2VkSWRzXSk7XG4gIGNvbnN0IG9yZGVyZWQgPSAocHJldmlvdXNPcmRlciB8fCBbXSkuZmlsdGVyKGlkID0+IGtub3duLmhhcyhpZCkpO1xuICBjb25zdCByZXN0ID0gWy4uLmlkcywgLi4ucGFya2VkSWRzXS5maWx0ZXIoaWQgPT4gIW9yZGVyZWQuaW5jbHVkZXMoaWQpKTtcblxuICByZXR1cm4gWy4uLm9yZGVyZWQsIC4uLnJlc3RdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2RhdGFJZCwgZGF0YUlkVG9Vc2V9OiB7ZGF0YUlkOiBzdHJpbmc7IGRhdGFJZFRvVXNlOiBzdHJpbmd9XG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gc3RhdGUubWVyZ2Vycy5yZWR1Y2UoXG4gICAgKFxuICAgICAgYWNjdVN0YXRlLFxuICAgICAge3Byb3AsIHRvTWVyZ2VQcm9wLCByZXBsYWNlUGFyZW50RGF0YXNldElkcywgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWQsIHByZXNlcnZlT3JkZXJ9XG4gICAgKSA9PiB7XG4gICAgICAvLyBnZXQgZGF0YXNldCBpZHMgdGhhdCBhcmUgZGVwZW5kcyBvbiB0aGlzIGRhdGFzZXRcbiAgICAgIGNvbnN0IHByb3BzID0gdG9BcnJheShwcm9wKTtcbiAgICAgIGNvbnN0IHRvTWVyZ2VQcm9wcyA9IHRvQXJyYXkodG9NZXJnZVByb3ApO1xuICAgICAgY29uc3Qgc2F2ZWRQcm9wcyA9IHNlcmlhbGl6ZWRTdGF0ZSA/IHByb3BzLm1hcChwID0+IHNlcmlhbGl6ZWRTdGF0ZVtwXSkgOiBbXTtcblxuICAgICAgbGV0IHJlcGxhY2VkU3RhdGUgPSBhY2N1U3RhdGU7XG4gICAgICBzYXZlZFByb3BzLmZvckVhY2goKHByb3BWYWx1ZSwgaSkgPT4ge1xuICAgICAgICAvLyBDYW1lcmEgc25hcHNob3RzIG5ldmVyIHJlZmVyZW5jZSBkYXRhc2V0cywgZXZlbiB3aGVuIGEgZGF0YXNldCBJRCBpcyBcImlkXCIuXG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCB8fCBwcm9wc1tpXSA9PT0gJ2NhbWVyYUJvb2ttYXJrcycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVyZ2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICBwcm9wOiBwcm9wc1tpXSxcbiAgICAgICAgICB0b01lcmdlUHJvcDogdG9NZXJnZVByb3BzW2ldLFxuICAgICAgICAgIGdldENoaWxkRGF0YXNldElkcyxcbiAgICAgICAgICBzYXZlVW5tZXJnZWRcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBXaGF0IGFub3RoZXIgZGF0YXNldCdzIHJlcGxhY2VtZW50IHBhcmtlZCBhIG1vbWVudCBhZ28gYW5kIGhhcyBub3RcbiAgICAgICAgLy8gbWVyZ2VkIGJhY2sgeWV0LCByZWFkIGJlZm9yZSB0aGlzIG9uZSBwYXJrcyBhbnl0aGluZyBvZiBpdHMgb3duLlxuICAgICAgICBjb25zdCBwYXJrZWRFbHNld2hlcmUgPVxuICAgICAgICAgIG1lcmdlck9wdGlvbnMudG9NZXJnZVByb3AgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0b0FycmF5KHJlcGxhY2VkU3RhdGVbbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcF0gPz8gW10pXG4gICAgICAgICAgICA6IFtdO1xuXG4gICAgICAgIGNvbnN0IHJlcGxhY2VkSXRlbSA9XG4gICAgICAgICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM/Lihwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpIHx8XG4gICAgICAgICAgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gICAgICAgIHJlcGxhY2VkU3RhdGUgPSByZXBsYWNlZEl0ZW1cbiAgICAgICAgICA/IHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKHJlcGxhY2VkU3RhdGUsIHJlcGxhY2VkSXRlbSwgbWVyZ2VyT3B0aW9ucylcbiAgICAgICAgICA6IHJlcGxhY2VkU3RhdGU7XG5cbiAgICAgICAgLy8gT25seSB3aGVuIHRoaXMgZGF0YXNldCBoYWQgaXRlbXMgb2YgaXRzIG93biB0byBwYXJrLiBUaGUgdG9CZU1lcmdlZCBsaXN0XG4gICAgICAgIC8vIGNhbiBzdGlsbCBob2xkIGFub3RoZXIgZGF0YXNldCdzIGl0ZW1zLCByZXBsYWNlZCBhIG1vbWVudCBlYXJsaWVyIGFuZFxuICAgICAgICAvLyBub3QgbWVyZ2VkIGJhY2sgeWV0OyBvdmVyd3JpdGluZyB0aGUgb3JkZXIgdGhleSB3ZXJlIHBhcmtlZCB3aXRoIHdvdWxkXG4gICAgICAgIC8vIG1lcmdlIHRoZW0gYmFjayBpbiByZXZlcnNlLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgcmVwbGFjZWRJdGVtICYmXG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXT8ubGVuZ3RoICYmXG4gICAgICAgICAgcHJlc2VydmVPcmRlclxuICAgICAgICApIHtcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdID0gcHJlc2VydmVkT3JkZXJXaXRoUGFya2VkKFxuICAgICAgICAgICAgcmVwbGFjZWRTdGF0ZVtwcmVzZXJ2ZU9yZGVyXSxcbiAgICAgICAgICAgIHByb3BWYWx1ZS5tYXAoaXRlbSA9PiBpdGVtLmlkKSxcbiAgICAgICAgICAgIHBhcmtlZEVsc2V3aGVyZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVwbGFjZWRTdGF0ZTtcbiAgICB9LFxuICAgIHN0YXRlXG4gICk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUoXG4gIHN0YXRlLFxuICByZXBsYWNlZEl0ZW0sXG4gIHtwcm9wLCB0b01lcmdlUHJvcCwgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWR9XG4pIHtcbiAgLy8gcHJvcCBpcyBkZXBlbmRzIG9uIHRoZSBkYXRhc2V0IHRvIGJlIHJlcGxhY2VkXG4gIC8vIHJlbW92ZSBwcm9wIGZyb20gc3RhdGUsIGFuZCBtb3ZlIGl0IHRvIHRvQmVNZXJnZWRcbiAgbGV0IG5leHRTdGF0ZSA9IG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHJlcGxhY2VkSXRlbSwge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KTtcbiAgY29uc3QgY2hpbGREYXRhSWRzID0gZ2V0Q2hpbGREYXRhc2V0SWRzPy4ocmVwbGFjZWRJdGVtKSB8fCBmaW5kQ2hpbGREYXRhc2V0SWRzKHJlcGxhY2VkSXRlbSk7XG5cbiAgaWYgKGNoaWxkRGF0YUlkcykge1xuICAgIG5leHRTdGF0ZSA9IHRvQXJyYXkoY2hpbGREYXRhSWRzKS5yZWR1Y2UoKGFjY3UsIGNoaWxkRGF0YUlkKSA9PiB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgY2hpbGQgZGF0YXNldCBpZCxcbiAgICAgIC8vIGJ1dCBzdGlsbCBuZWVkIHRvIG1vdmUgb3V0IG9mIHN0YXRlIGFuZCBtZXJnZSBiYWNrIGluXG4gICAgICByZXR1cm4gcmVwbGFjZURhdGFzZXRBbmREZXBzKGFjY3UsIGNoaWxkRGF0YUlkLCBjaGlsZERhdGFJZCk7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5jb25zdCBEQVRBU0VUX09QX0FERF9PUFRJT05TID0ge1xuICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlLFxuICBjZW50ZXJNYXA6IGZhbHNlLFxuICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGFwcGx5RGVyaXZlZFByb3RvRGF0YXNldChzdGF0ZTogVmlzU3RhdGUsIHByb3RvOiBQcm90b0RhdGFzZXQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHJlc3VsdElkID0gcHJvdG8uaW5mby5pZDtcbiAgaWYgKCFyZXN1bHRJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoc3RhdGUuZGF0YXNldHNbcmVzdWx0SWRdKSB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRGF0YXNldFVwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IHJlc3VsdElkLCBkYXRhOiBwcm90by5kYXRhfSk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBuZXh0U3RhdGUuZGF0YXNldHNbcmVzdWx0SWRdO1xuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgfVxuICAgIGV4aXN0aW5nLm1ldGFkYXRhID0ge1xuICAgICAgLi4uZXhpc3RpbmcubWV0YWRhdGEsXG4gICAgICAuLi5wcm90by5tZXRhZGF0YVxuICAgIH07XG4gICAgZXhpc3RpbmcubGFiZWwgPSBwcm90by5pbmZvLmxhYmVsIHx8IGV4aXN0aW5nLmxhYmVsO1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZVZpc0RhdGFVcGRhdGVyKHN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHByb3RvLFxuICAgIG9wdGlvbnM6IERBVEFTRVRfT1BfQUREX09QVElPTlNcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5Hcm91cEJ5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SdW5Hcm91cEJ5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7c3RhdGU6IG5leHRTdGF0ZSwgcHJvdG99ID0gZXhlY3V0ZUdyb3VwQnkoc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBwcm90byA/IGFwcGx5RGVyaXZlZFByb3RvRGF0YXNldChuZXh0U3RhdGUsIHByb3RvKSA6IG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkpvaW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJ1bkpvaW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtzdGF0ZTogbmV4dFN0YXRlLCBwcm90b30gPSBleGVjdXRlSm9pbihzdGF0ZSwgYWN0aW9uKTtcbiAgcmV0dXJuIHByb3RvID8gYXBwbHlEZXJpdmVkUHJvdG9EYXRhc2V0KG5leHRTdGF0ZSwgcHJvdG8pIDogbmV4dFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuU3BhdGlhbEpvaW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJ1blNwYXRpYWxKb2luVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7c3RhdGU6IG5leHRTdGF0ZSwgcHJvdG99ID0gZXhlY3V0ZVNwYXRpYWxKb2luKHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gcHJvdG8gPyBhcHBseURlcml2ZWRQcm90b0RhdGFzZXQobmV4dFN0YXRlLCBwcm90bykgOiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5TdWl0YWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUnVuU3VpdGFiaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtzdGF0ZTogbmV4dFN0YXRlLCBwcm90b30gPSBleGVjdXRlU3VpdGFiaWxpdHkoc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBwcm90byA/IGFwcGx5RGVyaXZlZFByb3RvRGF0YXNldChuZXh0U3RhdGUsIHByb3RvKSA6IG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IHtcbiAgYWRkR3JvdXBCeVVwZGF0ZXIsXG4gIGFkZEpvaW5VcGRhdGVyLFxuICBhZGRTcGF0aWFsSm9pblVwZGF0ZXIsXG4gIGFkZFN1aXRhYmlsaXR5VXBkYXRlcixcbiAgcmVtb3ZlRGF0YXNldE9wVXBkYXRlcixcbiAgc2V0R3JvdXBCeUNvbmZpZ1VwZGF0ZXIsXG4gIHNldEpvaW5Db25maWdVcGRhdGVyLFxuICBzZXRTcGF0aWFsSm9pbkNvbmZpZ1VwZGF0ZXIsXG4gIHNldFN1aXRhYmlsaXR5Q29uZmlnVXBkYXRlclxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxnQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sSUFBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBTCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVEsS0FBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsS0FBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVUsSUFBQSxHQUFBUixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVcsTUFBQSxHQUFBQyx1QkFBQSxDQUFBWixPQUFBO0FBWUEsSUFBQWEsUUFBQSxHQUFBYixPQUFBO0FBa0NBLElBQUFjLE1BQUEsR0FBQWQsT0FB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