@kepler.gl/reducers 3.3.0-alpha.16 → 3.3.0-alpha.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/column-edit-reconcile.js +100 -0
- package/dist/cjs/column-edit-updaters.spec.js +840 -0
- package/dist/cjs/combined-updaters.js +28 -9
- package/dist/cjs/dataset-ops-updaters.js +101 -15
- package/dist/cjs/dataset-ops-updaters.spec.js +129 -4
- package/dist/cjs/export-utils.js +118 -46
- package/dist/cjs/interaction-utils.js +11 -3
- package/dist/cjs/layer-utils.js +3 -2
- package/dist/cjs/ui-state-updaters.js +70 -26
- package/dist/cjs/ui-state.js +2 -2
- package/dist/cjs/vis-state-merger-text-label.spec.js +75 -0
- package/dist/cjs/vis-state-merger.js +65 -22
- package/dist/cjs/vis-state-updaters.js +811 -298
- package/dist/cjs/vis-state.js +2 -2
- package/dist/column-edit-reconcile.d.ts +4 -0
- package/dist/column-edit-updaters.spec.d.ts +1 -0
- package/dist/combined-updaters.d.ts +14 -4
- package/dist/composers.d.ts +13 -2
- package/dist/dataset-ops-updaters.d.ts +3 -0
- package/dist/esm/column-edit-reconcile.js +95 -0
- package/dist/esm/column-edit-updaters.spec.js +839 -0
- package/dist/esm/combined-updaters.js +29 -10
- package/dist/esm/dataset-ops-updaters.js +99 -16
- package/dist/esm/dataset-ops-updaters.spec.js +129 -4
- package/dist/esm/export-utils.js +117 -45
- package/dist/esm/interaction-utils.js +10 -3
- package/dist/esm/layer-utils.js +3 -2
- package/dist/esm/ui-state-updaters.js +69 -25
- package/dist/esm/ui-state.js +2 -2
- package/dist/esm/vis-state-merger-text-label.spec.js +74 -0
- package/dist/esm/vis-state-merger.js +66 -24
- package/dist/esm/vis-state-updaters.js +801 -306
- package/dist/esm/vis-state.js +2 -2
- package/dist/export-utils.d.ts +2 -2
- package/dist/interaction-utils.d.ts +4 -1
- package/dist/layer-utils.d.ts +1 -0
- package/dist/ui-state-updaters.d.ts +10 -0
- package/dist/vis-state-merger-text-label.spec.d.ts +1 -0
- package/dist/vis-state-merger.d.ts +10 -2
- package/dist/vis-state-updaters.d.ts +31 -9
- package/dist/vis-state.d.ts +4 -0
- package/package.json +17 -17
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.VIS_STATE_MERGERS = void 0;
|
|
9
9
|
exports.createLayerFromConfig = createLayerFromConfig;
|
|
10
|
+
exports.fallbackTextLabelForLoadedLayer = fallbackTextLabelForLoadedLayer;
|
|
10
11
|
exports.insertLayerAtRightOrder = insertLayerAtRightOrder;
|
|
11
12
|
exports.isSavedLayerConfigV1 = isSavedLayerConfigV1;
|
|
12
13
|
exports.mergeAnimationConfig = mergeAnimationConfig;
|
|
@@ -188,13 +189,15 @@ function insertItemBasedOnPreservedOrder(currentItems, items) {
|
|
|
188
189
|
}
|
|
189
190
|
function createLayerFromConfig(state, layerConfig) {
|
|
190
191
|
// check if the layer config is parsed
|
|
191
|
-
var
|
|
192
|
+
var savedLayerConfig = isSavedLayerConfigV1(layerConfig);
|
|
193
|
+
var parsedLayerConfig = savedLayerConfig ? parseLayerConfig(state.schema, layerConfig) : layerConfig;
|
|
192
194
|
if (!parsedLayerConfig) {
|
|
193
195
|
return null;
|
|
194
196
|
}
|
|
195
197
|
// first validate config against dataset
|
|
196
198
|
var _validateLayersByData = validateLayersByDatasets(state.datasets, state.layerClasses, [parsedLayerConfig], {
|
|
197
|
-
allowEmptyColumn: true
|
|
199
|
+
allowEmptyColumn: true,
|
|
200
|
+
keepUnlabeledAggregationTextLabel: savedLayerConfig
|
|
198
201
|
}),
|
|
199
202
|
validated = _validateLayersByData.validated,
|
|
200
203
|
failed = _validateLayersByData.failed;
|
|
@@ -275,7 +278,9 @@ function mergeLayers(state) {
|
|
|
275
278
|
toMerge.push(l);
|
|
276
279
|
}
|
|
277
280
|
});
|
|
278
|
-
var _validateLayersByData2 = validateLayersByDatasets(state.datasets, state.layerClasses, toMerge
|
|
281
|
+
var _validateLayersByData2 = validateLayersByDatasets(state.datasets, state.layerClasses, toMerge, {
|
|
282
|
+
keepUnlabeledAggregationTextLabel: true
|
|
283
|
+
}),
|
|
279
284
|
mergedLayer = _validateLayersByData2.validated,
|
|
280
285
|
failed = _validateLayersByData2.failed;
|
|
281
286
|
unmerged.push.apply(unmerged, (0, _toConsumableArray2["default"])(failed));
|
|
@@ -491,14 +496,17 @@ function mergeInteractions(state, interactionToBeMerged) {
|
|
|
491
496
|
configSaved = (0, _objectWithoutProperties2["default"])(_ref2, _excluded);
|
|
492
497
|
var configToMerge = configSaved;
|
|
493
498
|
if (key === 'tooltip') {
|
|
494
|
-
var
|
|
499
|
+
var savedTooltipConfig = configSaved;
|
|
500
|
+
var _mergeInteractionTool = mergeInteractionTooltipConfig(state, savedTooltipConfig),
|
|
495
501
|
mergedTooltip = _mergeInteractionTool.mergedTooltip,
|
|
496
502
|
unmergedTooltip = _mergeInteractionTool.unmergedTooltip;
|
|
497
503
|
|
|
498
504
|
// merge new dataset tooltips with original dataset tooltips
|
|
499
|
-
configToMerge = {
|
|
505
|
+
configToMerge = _objectSpread({
|
|
500
506
|
fieldsToShow: _objectSpread(_objectSpread({}, currentConfig.fieldsToShow), mergedTooltip)
|
|
501
|
-
}
|
|
507
|
+
}, savedTooltipConfig.timezone !== undefined ? {
|
|
508
|
+
timezone: savedTooltipConfig.timezone
|
|
509
|
+
} : {});
|
|
502
510
|
if (Object.keys(unmergedTooltip).length) {
|
|
503
511
|
// @ts-expect-error
|
|
504
512
|
unmerged.tooltip = {
|
|
@@ -564,6 +572,14 @@ function combineInteractionConfigs(configs) {
|
|
|
564
572
|
combined[key].compareType = getValueWithHighestOccurrence(toBeCombinedProps.map(function (p) {
|
|
565
573
|
return p.compareType;
|
|
566
574
|
}));
|
|
575
|
+
var hasTimezone = toBeCombinedProps.some(function (p) {
|
|
576
|
+
return (p === null || p === void 0 ? void 0 : p.timezone) !== undefined;
|
|
577
|
+
});
|
|
578
|
+
if (hasTimezone) {
|
|
579
|
+
combined[key].timezone = getValueWithHighestOccurrence(toBeCombinedProps.map(function (p) {
|
|
580
|
+
return p === null || p === void 0 ? void 0 : p.timezone;
|
|
581
|
+
}));
|
|
582
|
+
}
|
|
567
583
|
|
|
568
584
|
// combine fieldsToShow among all dataset ids
|
|
569
585
|
combined[key].fieldsToShow = toBeCombinedProps.map(function (p) {
|
|
@@ -603,9 +619,16 @@ function combineInteractionConfigs(configs) {
|
|
|
603
619
|
})) !== null && _aggregate !== void 0 ? _aggregate : null;
|
|
604
620
|
}
|
|
605
621
|
if (key === 'geocoder') {
|
|
622
|
+
var _toBeCombinedProps$fi;
|
|
606
623
|
combined[key].limitSearch = toBeCombinedProps.some(function (p) {
|
|
607
624
|
return p === null || p === void 0 ? void 0 : p.limitSearch;
|
|
608
625
|
});
|
|
626
|
+
var color = (_toBeCombinedProps$fi = toBeCombinedProps.find(function (p) {
|
|
627
|
+
return p === null || p === void 0 ? void 0 : p.color;
|
|
628
|
+
})) === null || _toBeCombinedProps$fi === void 0 ? void 0 : _toBeCombinedProps$fi.color;
|
|
629
|
+
if (color) {
|
|
630
|
+
combined[key].color = color;
|
|
631
|
+
}
|
|
609
632
|
}
|
|
610
633
|
if (key === 'legend') {
|
|
611
634
|
combined[key].hideInvisibleLayers = toBeCombinedProps.some(function (p) {
|
|
@@ -1024,28 +1047,46 @@ function validateColumn(column, columns, allFields) {
|
|
|
1024
1047
|
* @param {Object} options
|
|
1025
1048
|
* @return {Object} - validated textlabel
|
|
1026
1049
|
*/
|
|
1027
|
-
function validateSavedTextLabel(fields,
|
|
1028
|
-
var _ref0 = (0, _slicedToArray2["default"])(_ref9, 1),
|
|
1029
|
-
layerTextLabel = _ref0[0];
|
|
1050
|
+
function validateSavedTextLabel(fields, layerTextLabels, savedTextLabel) {
|
|
1030
1051
|
var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
1052
|
+
var layerTextLabel = layerTextLabels[0];
|
|
1031
1053
|
var savedTextLabels = Array.isArray(savedTextLabel) ? savedTextLabel : [savedTextLabel];
|
|
1054
|
+
var countLabelLayer = Boolean(options.layerType && _layers.AGGREGATION_COUNT_LAYER_TYPES.has(options.layerType));
|
|
1032
1055
|
|
|
1033
1056
|
// validate field
|
|
1034
1057
|
return savedTextLabels.map(function (textLabel) {
|
|
1035
|
-
var field =
|
|
1036
|
-
|
|
1037
|
-
|
|
1058
|
+
var field = null;
|
|
1059
|
+
if (textLabel.field) {
|
|
1060
|
+
// Cluster, hexbin, and grid persist a synthetic point-count field that
|
|
1061
|
+
// is not one of the dataset columns.
|
|
1062
|
+
field = countLabelLayer && textLabel.field.name === _layers.POINT_COUNT_FIELD_NAME ? (0, _layers.createPointCountLabelField)() : fields.find(function (fd) {
|
|
1063
|
+
return Object.keys(textLabel.field).every(function (key) {
|
|
1064
|
+
return textLabel.field[key] === fd[key];
|
|
1065
|
+
});
|
|
1038
1066
|
});
|
|
1039
|
-
}
|
|
1067
|
+
}
|
|
1040
1068
|
if (field === undefined && options.throwOnError) {
|
|
1041
1069
|
throw new Error("Layer has invalid text label field: ".concat(JSON.stringify(textLabel.field)));
|
|
1042
1070
|
}
|
|
1043
1071
|
return Object.keys(layerTextLabel).reduce(function (accu, key) {
|
|
1044
|
-
|
|
1072
|
+
var _textLabel$key;
|
|
1073
|
+
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, key === 'field' ? field : (_textLabel$key = textLabel[key]) !== null && _textLabel$key !== void 0 ? _textLabel$key : layerTextLabel[key]));
|
|
1045
1074
|
}, {});
|
|
1046
1075
|
});
|
|
1047
1076
|
}
|
|
1048
1077
|
|
|
1078
|
+
/**
|
|
1079
|
+
* Maps saved before count labels omit `textLabel`. Those cluster, hexbin, and
|
|
1080
|
+
* grid layers stay unlabeled. New layers still get the point-count default
|
|
1081
|
+
* from `getDefaultLayerConfig`.
|
|
1082
|
+
*/
|
|
1083
|
+
function fallbackTextLabelForLoadedLayer(layerType, newLayerTextLabel) {
|
|
1084
|
+
if (layerType && _layers.AGGREGATION_COUNT_LAYER_TYPES.has(layerType)) {
|
|
1085
|
+
return [_objectSpread({}, _constants.DEFAULT_TEXT_LABEL)];
|
|
1086
|
+
}
|
|
1087
|
+
return newLayerTextLabel;
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1049
1090
|
/**
|
|
1050
1091
|
* Saved visual channel field/scale may live in any of:
|
|
1051
1092
|
* - `config[key]` after schema parse (VisualChannelSchemaV1 folds channels into config)
|
|
@@ -1073,10 +1114,10 @@ function getSavedVisualChannelValue(savedLayer, key) {
|
|
|
1073
1114
|
*/
|
|
1074
1115
|
function validateSavedVisualChannels(fields, newLayer, savedLayer) {
|
|
1075
1116
|
var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
1076
|
-
Object.values(newLayer.visualChannels).forEach(function (
|
|
1077
|
-
var field =
|
|
1078
|
-
scale =
|
|
1079
|
-
key =
|
|
1117
|
+
Object.values(newLayer.visualChannels).forEach(function (_ref9) {
|
|
1118
|
+
var field = _ref9.field,
|
|
1119
|
+
scale = _ref9.scale,
|
|
1120
|
+
key = _ref9.key;
|
|
1080
1121
|
var savedField = getSavedVisualChannelValue(savedLayer, field);
|
|
1081
1122
|
var savedScale = getSavedVisualChannelValue(savedLayer, scale);
|
|
1082
1123
|
var foundField;
|
|
@@ -1203,7 +1244,9 @@ function validateLayerWithData(dataset, savedLayer, layerClasses) {
|
|
|
1203
1244
|
return null;
|
|
1204
1245
|
}
|
|
1205
1246
|
}
|
|
1206
|
-
var textLabel = savedLayer.config.textLabel && newLayer.config.textLabel ? validateSavedTextLabel(fields, newLayer.config.textLabel, savedLayer.config.textLabel, options)
|
|
1247
|
+
var textLabel = savedLayer.config.textLabel && newLayer.config.textLabel ? validateSavedTextLabel(fields, newLayer.config.textLabel, savedLayer.config.textLabel, _objectSpread(_objectSpread({}, options), {}, {
|
|
1248
|
+
layerType: savedLayer.type
|
|
1249
|
+
})) : options.keepUnlabeledAggregationTextLabel ? fallbackTextLabelForLoadedLayer(savedLayer.type, newLayer.config.textLabel) : newLayer.config.textLabel;
|
|
1207
1250
|
|
|
1208
1251
|
// copy visConfig over to emptyLayer to make sure it has all the props
|
|
1209
1252
|
var savedVisConfig = savedLayer.type === '3D' ? (0, _layers.migrateLegacyScenegraphVisConfig)(savedLayer.config.visConfig) : savedLayer.config.visConfig;
|
|
@@ -1283,7 +1326,7 @@ function mergeDatasetsByOrder(state, newDataEntries) {
|
|
|
1283
1326
|
* It ignores `undefined` or `null` values, but returns `null` if no mode could be calculated.
|
|
1284
1327
|
*/
|
|
1285
1328
|
function getValueWithHighestOccurrence(arr) {
|
|
1286
|
-
var
|
|
1329
|
+
var _ref11;
|
|
1287
1330
|
var tallys = new Map();
|
|
1288
1331
|
arr.forEach(function (value) {
|
|
1289
1332
|
if ((0, _commonUtils.notNullorUndefined)(value)) {
|
|
@@ -1298,7 +1341,7 @@ function getValueWithHighestOccurrence(arr) {
|
|
|
1298
1341
|
if (tallys.size === 0) {
|
|
1299
1342
|
return null;
|
|
1300
1343
|
}
|
|
1301
|
-
return (
|
|
1344
|
+
return (_ref11 = (0, _toConsumableArray2["default"])(tallys.entries())) === null || _ref11 === void 0 ? void 0 : _ref11.reduce(function (acc, next) {
|
|
1302
1345
|
return next[1] > acc[1] ? next : acc;
|
|
1303
1346
|
})[0];
|
|
1304
1347
|
}
|
|
@@ -1356,4 +1399,4 @@ var VIS_STATE_MERGERS = exports.VIS_STATE_MERGERS = [{
|
|
|
1356
1399
|
prop: 'editor',
|
|
1357
1400
|
combineConfigs: combineEditorConfigs
|
|
1358
1401
|
}];
|
|
1359
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdW5pcSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BpY2siLCJfZmxhdHRlbkRlZXAiLCJfZGVlcG1lcmdlIiwiX3V0aWxzIiwiX2xheWVycyIsIl9lZmZlY3RzIiwiX2NvbW1vblV0aWxzIiwiX2NvbnN0YW50cyIsIl9zY2hlbWFzIiwiX3RhYmxlIiwiX2xheWVyVXRpbHMiLCJfaW50ZXJhY3Rpb25VdGlscyIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl90b1Byb3BlcnR5S2V5IiwiaSIsIl90b1ByaW1pdGl2ZSIsIl90eXBlb2YzIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwibWVyZ2VGaWx0ZXJzIiwic3RhdGUiLCJmaWx0ZXJzVG9NZXJnZSIsImZyb21Db25maWciLCJwcmVzZXJ2ZUZpbHRlck9yZGVyIiwibWFwIiwibCIsImlkIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJ2YWxpZGF0ZWQiLCJmYWlsZWQiLCJ1cGRhdGVkRGF0YXNldHMiLCJ1cGRhdGVkRmlsdGVycyIsImluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIiLCJmaWx0ZXJzIiwicmVzZXRGaWx0ZXJHcHVNb2RlIiwiYXNzaWduR3B1Q2hhbm5lbHMiLCJkYXRhc2V0c1RvRmlsdGVyIiwidW5pcSIsImZsYXR0ZW5EZWVwIiwiZGF0YUlkIiwiZmlsdGVyZWQiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwibGF5ZXJzIiwiZGF0YXNldHMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzIiwic2F2ZWRGaWx0ZXIiLCJkYXRhSWRUb1VzZSIsInJlcGxhY2VkIiwiaW5jbHVkZXMiLCJfZmlsdGVyJHBsb3RUeXBlIiwibmV3RGF0YUlkIiwiZCIsInBsb3RUeXBlIiwiY29sb3JzQnlEYXRhSWQiLCJfZmlsdGVyJHBsb3RUeXBlMiIsIl9yZWYiLCJjb2xvciIsInJlc3QiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiaXNTYXZlZExheWVyQ29uZmlnVjEiLCJsYXllckNvbmZpZyIsInZpc3VhbENoYW5uZWxzIiwicGFyc2VMYXllckNvbmZpZyIsInNjaGVtYSIsIl9zY2hlbWEkcGFyc2VTYXZlZENvbiIsInNhdmVkQ29uZmlnIiwidmVyc2lvbiIsIkNVUlJFTlRfVkVSU0lPTiIsImNvbmZpZyIsInZpc1N0YXRlIiwibGF5ZXJPcmRlciIsInBhcnNlU2F2ZWRDb25maWciLCJjdXJyZW50SXRlbXMiLCJpdGVtcyIsInByZXNlcnZlZE9yZGVyIiwidW5kZWZpbmVkIiwiZGVmYXVsdFN0YXJ0IiwibmV3SXRlbXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIml0ZW0iLCJleHBlY3RlZElkeCIsImluZGV4T2YiLCJpbnNlcnRBdCIsInByZWNlZWRJZHgiLCJfbG9vcCIsInByZWNlZWRJdGVtSWQiLCJmaW5kSW5kZXgiLCJhcnJheUluc2VydCIsImVyciIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsInBhcnNlZExheWVyQ29uZmlnIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhIiwidmFsaWRhdGVMYXllcnNCeURhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiYWxsb3dFbXB0eUNvbHVtbiIsIm5ld0xheWVyIiwidXBkYXRlTGF5ZXJEb21haW4iLCJzZXJpYWxpemVGaWx0ZXIiLCJuZXdGaWx0ZXIiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGYiLCJzZXJpYWxpemVkVmlzU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInNlcmlhbGl6ZUxheWVyIiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRsIiwic2VyaWFsaXplRWZmZWN0IiwibmV3RWZmZWN0IiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRlIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uMiIsInNhdmVkU3RhdGUiLCJnZXRDb25maWdUb1NhdmUiLCJtZXJnZUxheWVycyIsImxheWVyc1RvTWVyZ2UiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsInVubWVyZ2VkIiwidG9NZXJnZSIsIl9sJGNvbmZpZyIsImlzTWVyZ2luZ0RhdGFzZXRzIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhMiIsIm1lcmdlZExheWVyIiwiX2luc2VydExheWVyQXRSaWdodE9yIiwiaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIiLCJuZXdMYXllck9yZGVyIiwibmV3TGF5ZXJzIiwibWVyZ2VkU3RhdGUiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsInNhdmVkT3JkZXIiLCJtZXJnZUxheWVyT3JkZXIiLCJjdXJyZW50TGF5ZXJzIiwibGF5ZXJzVG9JbnNlcnQiLCJjdXJyZW50T3JkZXIiLCJjdXJyZW50TGF5ZXJRdWV1ZSIsImVudHJ5IiwiZmluZEJ5SWQiLCJsYXllciIsIkJvb2xlYW4iLCJuZXdMYXllck9yZGVyUXVldWUiLCJuZXdGbGF0TGF5ZXJPcmRlciIsImhhc0dyb3VwcyIsInNvbWUiLCJpc1BsYWluT2JqZWN0IiwiZXhpc3RpbmdGbGF0SWRzIiwiU2V0IiwibmV3SW5zZXJ0ZWRJZHMiLCJoYXMiLCJyZXN1bHQiLCJmbGF0UXVldWUiLCJmbGF0SWR4IiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInNhdmVkTGF5ZXJPcmRlciIsInZhbGlkTGF5ZXJJZHMiLCJmaWx0ZXJMYXllck9yZGVyIiwib3JkZXIiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiZ3JvdXAiLCJmaWx0ZXJlZEdyb3VwT3JkZXIiLCJyZXN0b3JlZExheWVyT3JkZXIiLCJsYXllcklkc0luUmVzdG9yZWQiLCJjb2xsZWN0SWRzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImFkZCIsIm1pc3NpbmdMYXllcnMiLCJtZXJnZUludGVyYWN0aW9ucyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsIm1lcmdlZCIsImtleSIsImludGVyYWN0aW9uQ29uZmlnIiwiY3VycmVudENvbmZpZyIsIl9yZWYyIiwiZW5hYmxlZCIsImNvbmZpZ1NhdmVkIiwiY29uZmlnVG9NZXJnZSIsIl9tZXJnZUludGVyYWN0aW9uVG9vbCIsIm1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnIiwibWVyZ2VkVG9vbHRpcCIsInVubWVyZ2VkVG9vbHRpcCIsImZpZWxkc1RvU2hvdyIsInRvb2x0aXAiLCJwaWNrIiwibmV4dFN0YXRlIiwic2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uIiwiY29tYmluZUludGVyYWN0aW9uQ29uZmlncyIsImNvbmZpZ3MiLCJjb21iaW5lZCIsImxlZ2VuZCIsIndpdGhMZWdlbmQiLCJmaW5kIiwiYyIsInpvb21PcGFjaXR5Iiwid2l0aFpvb21PcGFjaXR5IiwiX2xvb3AyIiwidG9CZUNvbWJpbmVkUHJvcHMiLCJwIiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsImdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlIiwicmVkdWNlIiwiYWNjIiwibmV4dEZpZWxkc1RvU2hvdyIsIl9sb29wMyIsIm5leHREYXRhSWRLZXkiLCJuZXh0VG9vbHRpcEZpZWxkcyIsIm5leHRURiIsIl9yZWYzIiwiX2FnZ3JlZ2F0ZSIsInNpemUiLCJhZ2dyZWdhdGUiLCJBR0dSRUdBVElPTl9UWVBFUyIsIm1heGltdW0iLCJsaW1pdFNlYXJjaCIsImhpZGVJbnZpc2libGVMYXllcnMiLCJjb250cm9sbGVycyIsImNvbWJpbmVab29tT3BhY2l0eUNvbnRyb2xsZXJzIiwiX3VubWVyZ2VkJHRvb2x0aXAiLCJfdW5tZXJnZWQkdG9vbHRpcDIiLCJfc3RhdGUkaW50ZXJhY3Rpb25Ub0IiLCJfdW5tZXJnZWQkdG9vbHRpcDMiLCJyZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwiX2ludGVyYWN0aW9uQ29uZmlnJHRvIiwiX2ludGVyYWN0aW9uQ29uZmlnJHRvMiIsIm1lcmdlU3BsaXRNYXBzIiwic3BsaXRNYXBzIiwibGF5ZXJFeGlzdHMiLCJjcmVhdGVQYW5lbHMiLCJzbSIsImlkcyIsImdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCIsImVudHJpZXMiLCJwYW5lbCIsImZyb21FbnRyaWVzIiwiX3JlZjQiLCJfcmVmNSIsIl9zbGljZWRUb0FycmF5MiIsIl9yZWY2IiwiX3JlZjciLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiY29tYmluZVNwbGl0TWFwc0J5SW5kZXgiLCJtZXJnZUNoYXJ0cyIsImNoYXJ0cyIsImluY29taW5nSWRzIiwiY2hhcnQiLCJleGlzdGluZ0lkcyIsIm5leHRDaGFydHMiLCJub3JtYWxpemVkIiwicGlubmVkIiwiZGlzcGxheSIsImlzQ29uZmlnQWN0aXZlIiwiaXNKc29uRWRpdG9yQWN0aXZlIiwiY2hhcnRzVG9CZU1lcmdlZCIsInJlcGxhY2VDaGFydERhdGFzZXRJZHMiLCJzYXZlZENoYXJ0cyIsIm1lcmdlRWZmZWN0cyIsIm5ld0VmZmVjdHMiLCJlZmZlY3QiLCJjcmVhdGVFZmZlY3QiLCJkZWVwbWVyZ2UiLCJhbGwiLCJpc1ZhbGlkVG9TYXZlIiwibWVyZ2VBbm5vdGF0aW9ucyIsImFubm90YXRpb25zIiwidmFsaWRBbm5vdGF0aW9ucyIsImlzQW5ub3RhdGlvbktpbmQiLCJraW5kIiwiYW5jaG9yUG9pbnQiLCJldmVyeSIsImlzRmluaXRlIiwiaXNWaXNpYmxlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJsYWJlbCIsImxpbmVDb2xvciIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwibGluZVdpZHRoIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJ0ZXh0V2lkdGgiLCJ0ZXh0SGVpZ2h0IiwidG9vbHRpcENvbmZpZyIsIl9sb29wNCIsImFsbEZpZWxkcyIsImZpZWxkcyIsImZvdW5kRmllbGRzVG9TaG93IiwiZmllbGQiLCJtZXJnZUxheWVyQmxlbmRpbmciLCJsYXllckJsZW5kaW5nIiwiTEFZRVJfQkxFTkRJTkdTIiwiY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzIiwibWVyZ2VPdmVybGF5QmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJPVkVSTEFZX0JMRU5ESU5HUyIsImNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzIiwibWVyZ2VBbmltYXRpb25Db25maWciLCJhbmltYXRpb24iLCJjdXJyZW50VGltZSIsImFuaW1hdGlvbkNvbmZpZyIsImRvbWFpbiIsImNvbWJpbmVBbmltYXRpb25Db25maWdzIiwiX2FnZ3JlZ2F0ZTIiLCJfYWdncmVnYXRlMyIsIm1pbmltdW0iLCJzcGVlZCIsInRpbWVGb3JtYXQiLCJ0aW1lem9uZSIsInZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMiLCJzYXZlZENvbHMiLCJlbXB0eUNvbHMiLCJvcHRpb25zIiwiY29sdW1ucyIsIl9sb29wNSIsIl9PYmplY3Qka2V5cyIsIl9pIiwic2F2ZWQiLCJmaWVsZElkeCIsIl9yZWY4IiwiYWxsQ29sRm91bmQiLCJ2YWxpZGF0ZUNvbHVtbiIsInJ2IiwidGhyb3dPbkVycm9yIiwicmVxdWlyZWRDb2x1bW5zIiwiayIsIm9wdGlvbmFsIiwibWlzc2luZ0NvbHVtbnMiLCJFcnJvciIsImpvaW4iLCJjb25maWdDb2x1bW5zIiwiaW52YWxpZENvbHVtbnMiLCJfY29sdW1ucyRrIiwiY29sdW1uIiwidmFsaWRhdG9yIiwidmFsaWRhdGVTYXZlZFRleHRMYWJlbCIsIl9yZWY5Iiwic2F2ZWRUZXh0TGFiZWwiLCJfcmVmMCIsImxheWVyVGV4dExhYmVsIiwic2F2ZWRUZXh0TGFiZWxzIiwidGV4dExhYmVsIiwiZmQiLCJKU09OIiwic3RyaW5naWZ5IiwiYWNjdSIsImdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlIiwic2F2ZWRMYXllciIsImNoYW5uZWxzIiwiX3R5cGVvZjIiLCJ2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMiLCJ2YWx1ZXMiLCJfcmVmMSIsInNjYWxlIiwic2F2ZWRGaWVsZCIsInNhdmVkU2NhbGUiLCJmb3VuZEZpZWxkIiwiZm91bmRDaGFubmVsIiwidXBkYXRlTGF5ZXJDb25maWciLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJfbmV3TGF5ZXIkY29uZmlnJGZpZWwiLCJmaWVsZE5hbWUiLCJfbGF5ZXIkY29uZmlnIiwidmFsaWRhdGVMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIl9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uIiwiY29sdW1uQ29uZmlnIiwiZ2V0TGF5ZXJDb2x1bW5zIiwiY29sTW9kZUNvbmZpZyIsImNvbHVtbk1vZGUiLCJzdXBwb3J0ZWRDb2x1bW5Nb2RlcyIsImNvbE1vZGUiLCJncm91cENvbHVtbnMiLCJjb2x1bW5Hcm91cHMiLCJmbGF0TWFwIiwicmVxdWlyZWRLZXlzIiwib3B0aW9uYWxDb2x1bW5zIiwiY29sIiwiX29wdGlvbmFsIiwicmVxdWlyZWRDb2wiLCJkYXRhc2V0IiwidHlwZSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiaGlkZGVuIiwiaXNJbmNsdWRlZEluTGVnZW5kIiwiaGlnaGxpZ2h0Q29sb3IiLCJzYXZlZFZpc0NvbmZpZyIsIm1pZ3JhdGVMZWdhY3lTY2VuZWdyYXBoVmlzQ29uZmlnIiwidmlzQ29uZmlnIiwiY29waWVkVmlzQ29uZmlnIiwiY29weUxheWVyQ29uZmlnIiwic2hhbGxvd0NvcHkiLCJ2YWxpZGF0ZVZpc0NvbmZpZyIsIm1lcmdlRWRpdG9yIiwic2F2ZWRFZGl0b3IiLCJfc2F2ZWRFZGl0b3IkdmlzaWJsZSIsImVkaXRvciIsImZlYXR1cmVzIiwidmlzaWJsZSIsImNvbWJpbmVFZGl0b3JDb25maWdzIiwibmV4dENvbmZpZyIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwibmV3RGF0YUVudHJpZXMiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIm5ld0RhdGFzZXRJZHMiLCJfc3RhdGUkcHJlc2VydmVEYXRhc2UiLCJhcnIiLCJfcmVmMTMiLCJ0YWxseXMiLCJNYXAiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJzZXQiLCJnZXQiLCJWSVNfU1RBVEVfTUVSR0VSUyIsImV4cG9ydHMiLCJtZXJnZSIsInByb3AiLCJ0b01lcmdlUHJvcCIsInByZXNlcnZlT3JkZXIiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsInNhdmVVbm1lcmdlZCIsImNvbWJpbmVDb25maWdzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpcy1zdGF0ZS1tZXJnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHVuaXEgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvdW5pcSc7XG5pbXBvcnQgcGljayBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9waWNrJztcbmltcG9ydCBmbGF0dGVuRGVlcCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9mbGF0dGVuRGVlcCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge1xuICBhcnJheUluc2VydCxcbiAgY29tYmluZVNwbGl0TWFwc0J5SW5kZXgsXG4gIGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMsXG4gIGZpbmRCeUlkLFxuICBhZ2dyZWdhdGUsXG4gIGlzUGxhaW5PYmplY3Rcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7TGF5ZXIsIG1pZ3JhdGVMZWdhY3lTY2VuZWdyYXBoVmlzQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5pbXBvcnQge1xuICBBR0dSRUdBVElPTl9UWVBFUyxcbiAgTEFZRVJfQkxFTkRJTkdTLFxuICBPVkVSTEFZX0JMRU5ESU5HUyxcbiAgaXNBbm5vdGF0aW9uS2luZCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Q1VSUkVOVF9WRVJTSU9OLCBWaXNTdGF0ZSwgVmlzU3RhdGVNZXJnZXJzLCBLZXBsZXJHTFNjaGVtYUNsYXNzfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge1xuICBQYXJzZWRMYXllcixcbiAgUGFyc2VkVmlzU3RhdGUsXG4gIFNhdmVkSW50ZXJhY3Rpb25Db25maWcsXG4gIFRvb2x0aXBJbmZvLFxuICBTYXZlZEVkaXRvcixcbiAgUGFyc2VkQ29uZmlnLFxuICBGaWx0ZXIsXG4gIEVmZmVjdCBhcyBFZmZlY3RUeXBlLFxuICBQYXJzZWRFZmZlY3QsXG4gIExheWVyQ29sdW1ucyxcbiAgTGF5ZXJDb2x1bW4sXG4gIFBhcnNlZEZpbHRlcixcbiAgTmVzdGVkUGFydGlhbCxcbiAgU2F2ZWRBbmltYXRpb25Db25maWcsXG4gIExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJHcm91cCxcbiAgQ2hhcnRDb25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0tlcGxlclRhYmxlLCBEYXRhc2V0cywgYXNzaWduR3B1Q2hhbm5lbHMsIHJlc2V0RmlsdGVyR3B1TW9kZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5cbmltcG9ydCB7Z2V0TGF5ZXJPcmRlckZyb21MYXllcnN9IGZyb20gJy4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtjb21iaW5lWm9vbU9wYWNpdHlDb250cm9sbGVyc30gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5cbi8qKlxuICogTWVyZ2UgbG9hZGVkIGZpbHRlcnMgd2l0aCBjdXJyZW50IHN0YXRlLCBpZiBubyBmaWVsZHMgb3IgZGF0YSBhcmUgbG9hZGVkXG4gKiBzYXZlIGl0IGZvciBsYXRlclxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRmlsdGVyczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZmlsdGVyc1RvTWVyZ2U6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2ZpbHRlcnMnXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBwcmVzZXJ2ZUZpbHRlck9yZGVyID0gZnJvbUNvbmZpZ1xuICAgID8gZmlsdGVyc1RvTWVyZ2U/Lm1hcChsID0+IGwuaWQpXG4gICAgOiBzdGF0ZS5wcmVzZXJ2ZUZpbHRlck9yZGVyO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXJzVG9NZXJnZSkgfHwgIWZpbHRlcnNUb01lcmdlLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHt2YWxpZGF0ZWQsIGZhaWxlZCwgdXBkYXRlZERhdGFzZXRzfSA9IHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzKHN0YXRlLCBmaWx0ZXJzVG9NZXJnZSk7XG4gIGxldCB1cGRhdGVkRmlsdGVycyA9IGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gICAgc3RhdGUuZmlsdGVycyxcbiAgICB2YWxpZGF0ZWQsXG4gICAgcHJlc2VydmVGaWx0ZXJPcmRlclxuICApO1xuXG4gIC8vIG1lcmdlIGZpbHRlciB3aXRoIGV4aXN0aW5nXG4gIHVwZGF0ZWRGaWx0ZXJzID0gcmVzZXRGaWx0ZXJHcHVNb2RlKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgdXBkYXRlZEZpbHRlcnMgPSBhc3NpZ25HcHVDaGFubmVscyh1cGRhdGVkRmlsdGVycyk7XG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGRhdGFzZXRzVG9GaWx0ZXIgPSB1bmlxKGZsYXR0ZW5EZWVwKHZhbGlkYXRlZC5tYXAoZiA9PiBmLmRhdGFJZCkpKTtcblxuICBjb25zdCBmaWx0ZXJlZCA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgZGF0YXNldHNUb0ZpbHRlcixcbiAgICB1cGRhdGVkRGF0YXNldHMsXG4gICAgdXBkYXRlZEZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiB1cGRhdGVkRmlsdGVycyxcbiAgICBkYXRhc2V0czogZmlsdGVyZWQsXG4gICAgcHJlc2VydmVGaWx0ZXJPcmRlcixcbiAgICBmaWx0ZXJUb0JlTWVyZ2VkOiBbLi4uc3RhdGUuZmlsdGVyVG9CZU1lcmdlZCwgLi4uZmFpbGVkXVxuICB9O1xufVxuXG4vLyByZXBsYWNlIGRhdGFJZCBpbiBzYXZlZCBGaWx0ZXJcbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRmlsdGVyRGF0YXNldElkcyhcbiAgc2F2ZWRGaWx0ZXI6IEZpbHRlcltdLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IHJlcGxhY2VkOiBGaWx0ZXJbXSA9IFtdO1xuICBzYXZlZEZpbHRlci5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgaWYgKGZpbHRlci5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgICAgY29uc3QgbmV3RGF0YUlkID0gZmlsdGVyLmRhdGFJZC5tYXAoZCA9PiAoZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkKSk7XG4gICAgICBsZXQgcGxvdFR5cGU7XG4gICAgICAvLyBUT0RPOiBtb3JlIGdlbmVyaWMgYXBwcm9hY2ggdG8gc2F2ZSBwbG90VHlwZS5jb2xvcnNCeURhdGFJZFxuICAgICAgaWYgKGZpbHRlci5wbG90VHlwZT8uY29sb3JzQnlEYXRhSWQ/LltkYXRhSWRdKSB7XG4gICAgICAgIC8vIHJlcGxhY2UgY29sb3JCeURhdGFJZCBpbiBmaWx0ZXIucGxvdFR5cGVcbiAgICAgICAgY29uc3Qge1tkYXRhSWRdOiBjb2xvciwgLi4ucmVzdH0gPSBmaWx0ZXIucGxvdFR5cGU/LmNvbG9yc0J5RGF0YUlkIHx8IHt9O1xuICAgICAgICBwbG90VHlwZSA9IHtcbiAgICAgICAgICAuLi5maWx0ZXIucGxvdFR5cGUsXG4gICAgICAgICAgY29sb3JzQnlEYXRhSWQ6IHtcbiAgICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgICAgICBbZGF0YUlkVG9Vc2VdOiBjb2xvclxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJlcGxhY2VkLnB1c2goe1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkLFxuICAgICAgICAuLi4ocGxvdFR5cGUgPyB7cGxvdFR5cGV9IDoge30pXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTYXZlZExheWVyQ29uZmlnVjEobGF5ZXJDb25maWc6IGFueSk6IGJvb2xlYW4ge1xuICAvLyBleHBvcnRlZCBsYXllciBjb25maWd1cmF0aW9uIGNvbnRhaW5zIHZpc3VhbENoYW5uZWxzIHByb3BlcnR5XG4gIHJldHVybiBsYXllckNvbmZpZz8udmlzdWFsQ2hhbm5lbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxheWVyQ29uZmlnKFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3MsXG4gIGxheWVyQ29uZmlnOiBhbnlcbik6IFBhcnNlZExheWVyIHwgdW5kZWZpbmVkIHtcbiAgLy8gYXNzdW1lIHRoZSBsYXllciBjb25maWcgaXMgY3VycmVudCB2ZXJzaW9uXG4gIGNvbnN0IHNhdmVkQ29uZmlnID0ge1xuICAgIHZlcnNpb246IENVUlJFTlRfVkVSU0lPTixcbiAgICBjb25maWc6IHtcbiAgICAgIHZpc1N0YXRlOiB7bGF5ZXJzOiBbbGF5ZXJDb25maWddLCBsYXllck9yZGVyOiBbbGF5ZXJDb25maWcuaWRdfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gc2NoZW1hLnBhcnNlU2F2ZWRDb25maWcoc2F2ZWRDb25maWcpPy52aXNTdGF0ZT8ubGF5ZXJzPy5bMF07XG59XG5cbmZ1bmN0aW9uIGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gIGN1cnJlbnRJdGVtczogRmlsdGVyW10sXG4gIGl0ZW1zOiBGaWx0ZXJbXSxcbiAgcHJlc2VydmVkT3JkZXI6IGFueVtdID0gW10sXG4gIGRlZmF1bHRTdGFydD86IGJvb2xlYW5cbikge1xuICBsZXQgbmV3SXRlbXMgPSBbLi4uY3VycmVudEl0ZW1zXTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBleHBlY3RlZElkeCA9IHByZXNlcnZlZE9yZGVyLmluZGV4T2YoaXRlbS5pZCk7XG4gICAgLy8gaW5zZXJ0QXQgdGhlIGVuZCBieSBkZWZhdWx0XG4gICAgbGV0IGluc2VydEF0ID0gZGVmYXVsdFN0YXJ0ID8gMCA6IG5ld0l0ZW1zLmxlbmd0aDtcbiAgICBpZiAoZXhwZWN0ZWRJZHggPiAwKSB7XG4gICAgICAvLyBsb29rIGZvciBsYXllciB0byBpbnNlcnQgYWZ0ZXJcbiAgICAgIGxldCBpID0gZXhwZWN0ZWRJZHggKyAxO1xuICAgICAgbGV0IHByZWNlZWRJZHggPSAtMTtcbiAgICAgIHdoaWxlIChpLS0gPiAwICYmIHByZWNlZWRJZHggPCAwKSB7XG4gICAgICAgIC8vIGtlZXAgbG9va2luZyBmb3IgcHJlY2VlZCBsYXllciB0aGF0IGlzIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIGNvbnN0IHByZWNlZWRJdGVtSWQgPSBwcmVzZXJ2ZWRPcmRlcltpIC0gMV07XG4gICAgICAgIHByZWNlZWRJZHggPSBuZXdJdGVtcy5maW5kSW5kZXgoZCA9PiBkLmlkID09PSBwcmVjZWVkSXRlbUlkKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVjZWVkSWR4ID4gLTEpIHtcbiAgICAgICAgLy8gaWYgZm91bmRcbiAgICAgICAgaW5zZXJ0QXQgPSBwcmVjZWVkSWR4ICsgMTtcbiAgICAgIH1cbiAgICB9XG4gICAgbmV3SXRlbXMgPSBhcnJheUluc2VydChuZXdJdGVtcywgaW5zZXJ0QXQsIGl0ZW0pO1xuICB9XG4gIHJldHVybiBuZXdJdGVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZTogVmlzU3RhdGUsIGxheWVyQ29uZmlnOiBhbnkpOiBMYXllciB8IG51bGwge1xuICAvLyBjaGVjayBpZiB0aGUgbGF5ZXIgY29uZmlnIGlzIHBhcnNlZFxuICBjb25zdCBwYXJzZWRMYXllckNvbmZpZyA9IGlzU2F2ZWRMYXllckNvbmZpZ1YxKGxheWVyQ29uZmlnKVxuICAgID8gcGFyc2VMYXllckNvbmZpZyhzdGF0ZS5zY2hlbWEsIGxheWVyQ29uZmlnKVxuICAgIDogbGF5ZXJDb25maWc7XG5cbiAgaWYgKCFwYXJzZWRMYXllckNvbmZpZykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIGZpcnN0IHZhbGlkYXRlIGNvbmZpZyBhZ2FpbnN0IGRhdGFzZXRcbiAgY29uc3Qge3ZhbGlkYXRlZCwgZmFpbGVkfSA9IHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgW3BhcnNlZExheWVyQ29uZmlnXSxcbiAgICB7YWxsb3dFbXB0eUNvbHVtbjogdHJ1ZX1cbiAgKTtcblxuICBpZiAoZmFpbGVkPy5sZW5ndGggfHwgIXZhbGlkYXRlZC5sZW5ndGgpIHtcbiAgICAvLyBmYWlsZWRcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVkWzBdO1xuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGZpbHRlciBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGaWx0ZXIoXG4gIG5ld0ZpbHRlcjogRmlsdGVyLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHtmaWx0ZXJzOiBbbmV3RmlsdGVyXX0sIHNjaGVtYSk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmZpbHRlcnM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGxheWVyIGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUxheWVyKFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkTGF5ZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShcbiAgICB7bGF5ZXJzOiBbbmV3TGF5ZXJdLCBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWRdfSxcbiAgICBzY2hlbWFcbiAgKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8ubGF5ZXJzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBlZmZlY3QgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRWZmZWN0KFxuICBuZXdFZmZlY3Q6IEVmZmVjdFR5cGUsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkRWZmZWN0IHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoXG4gICAge2VmZmVjdHM6IFtuZXdFZmZlY3RdLCBlZmZlY3RPcmRlcjogW25ld0VmZmVjdC5pZF19LFxuICAgIHNjaGVtYVxuICApO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5lZmZlY3RzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IHZpcyBzdGF0ZSBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVZpc1N0YXRlKFxuICB2aXNTdGF0ZTogUGFydGlhbDxWaXNTdGF0ZT4sXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkVmlzU3RhdGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBzYXZlZFN0YXRlID0gc2NoZW1hLmdldENvbmZpZ1RvU2F2ZSh7XG4gICAgdmlzU3RhdGVcbiAgfSk7XG4gIHJldHVybiBzYXZlZFN0YXRlID8gc2NoZW1hLnBhcnNlU2F2ZWRDb25maWcoc2F2ZWRTdGF0ZSk/LnZpc1N0YXRlIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBNZXJnZSBsYXllcnMgZnJvbSBkZS1zZXJpYWxpemVkIHN0YXRlLCBpZiBubyBmaWVsZHMgb3IgZGF0YSBhcmUgbG9hZGVkXG4gKiBzYXZlIGl0IGZvciBsYXRlclxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBsYXllcnNUb01lcmdlOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IGZyb21Db25maWdcbiAgICA/IGdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGxheWVyc1RvTWVyZ2UpXG4gICAgOiBzdGF0ZS5wcmVzZXJ2ZUxheWVyT3JkZXI7XG4gIGlmICghQXJyYXkuaXNBcnJheShsYXllcnNUb01lcmdlKSB8fCAhbGF5ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gZG9uJ3QgbWVyZ2UgbGF5ZXIgaWYgZGF0YXNldCBpcyBiZWluZyBtZXJnZWRcbiAgY29uc3QgdW5tZXJnZWQ6IFBhcnNlZExheWVyW10gPSBbXTtcbiAgY29uc3QgdG9NZXJnZTogUGFyc2VkTGF5ZXJbXSA9IFtdO1xuICBsYXllcnNUb01lcmdlLmZvckVhY2goKGw6IFBhcnNlZExheWVyKSA9PiB7XG4gICAgaWYgKGw/LmNvbmZpZz8uZGF0YUlkICYmIHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2wuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgIHVubWVyZ2VkLnB1c2gobCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvTWVyZ2UucHVzaChsKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHt2YWxpZGF0ZWQ6IG1lcmdlZExheWVyLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICB0b01lcmdlXG4gICk7XG4gIHVubWVyZ2VkLnB1c2goLi4uZmFpbGVkKTtcbiAgLy8gcHV0IG5ldyBsYXllcnMgaW4gZnJvbnQgb2YgY3VycmVudCBsYXllcnNcbiAgY29uc3Qge25ld0xheWVyT3JkZXIsIG5ld0xheWVyc30gPSBpbnNlcnRMYXllckF0UmlnaHRPcmRlcihcbiAgICBzdGF0ZS5sYXllcnMsXG4gICAgbWVyZ2VkTGF5ZXIsXG4gICAgc3RhdGUubGF5ZXJPcmRlcixcbiAgICBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgKTtcblxuICBsZXQgbWVyZ2VkU3RhdGU6IFMgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcixcbiAgICBwcmVzZXJ2ZUxheWVyT3JkZXIsXG4gICAgbGF5ZXJUb0JlTWVyZ2VkOiBbLi4uc3RhdGUubGF5ZXJUb0JlTWVyZ2VkLCAuLi51bm1lcmdlZF1cbiAgfTtcblxuICAvLyBBcHBseSBwZW5kaW5nIGxheWVyT3JkZXIgd2l0aCBncm91cHMgaWYgbGF5ZXJzIGFyZSBub3cgYXZhaWxhYmxlXG4gIGlmIChtZXJnZWRTdGF0ZS5sYXllck9yZGVyVG9CZU1lcmdlZCAmJiBtZXJnZWRTdGF0ZS5sYXllcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHNhdmVkT3JkZXIgPSBtZXJnZWRTdGF0ZS5sYXllck9yZGVyVG9CZU1lcmdlZDtcbiAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlTGF5ZXJPcmRlcihtZXJnZWRTdGF0ZSwgc2F2ZWRPcmRlcik7XG4gICAgLy8gS2VlcCBzYXZlZExheWVyT3JkZXIgYXZhaWxhYmxlIGZvciBmdXR1cmUgZGVmZXJyZWQgbGF5ZXJzXG4gICAgaWYgKG1lcmdlZFN0YXRlLmxheWVyVG9CZU1lcmdlZC5sZW5ndGggPiAwKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IHsuLi5tZXJnZWRTdGF0ZSwgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IHNhdmVkT3JkZXJ9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICBjdXJyZW50TGF5ZXJzLFxuICBsYXllcnNUb0luc2VydCxcbiAgY3VycmVudE9yZGVyLFxuICBwcmVzZXJ2ZWRPcmRlcjogc3RyaW5nW10gPSBbXVxuKSB7XG4gIGlmICghbGF5ZXJzVG9JbnNlcnQ/Lmxlbmd0aCkge1xuICAgIHJldHVybiB7bmV3TGF5ZXJzOiBjdXJyZW50TGF5ZXJzLCBuZXdMYXllck9yZGVyOiBjdXJyZW50T3JkZXJ9O1xuICB9XG5cbiAgY29uc3QgY3VycmVudExheWVyUXVldWUgPSBjdXJyZW50T3JkZXJcbiAgICAuZmlsdGVyKGVudHJ5ID0+IHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpXG4gICAgLm1hcChpZCA9PiBmaW5kQnlJZChpZCkoY3VycmVudExheWVycykpXG4gICAgLmZpbHRlcihsYXllciA9PiBCb29sZWFuKGxheWVyKSk7XG4gIGNvbnN0IG5ld0xheWVycyA9IGN1cnJlbnRMYXllcnMuY29uY2F0KGxheWVyc1RvSW5zZXJ0KTtcbiAgY29uc3QgbmV3TGF5ZXJPcmRlclF1ZXVlID0gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgICBjdXJyZW50TGF5ZXJRdWV1ZSxcbiAgICBsYXllcnNUb0luc2VydCxcbiAgICBwcmVzZXJ2ZWRPcmRlcixcbiAgICB0cnVlXG4gICk7XG5cbiAgY29uc3QgbmV3RmxhdExheWVyT3JkZXIgPSBnZXRMYXllck9yZGVyRnJvbUxheWVycyhuZXdMYXllck9yZGVyUXVldWUpO1xuXG4gIC8vIElmIG5vIGdyb3VwcyBleGlzdCBpbiBjdXJyZW50IG9yZGVyLCBqdXN0IHVzZSB0aGUgbmV3IGZsYXQgb3JkZXJcbiAgY29uc3QgaGFzR3JvdXBzID0gY3VycmVudE9yZGVyLnNvbWUoZW50cnkgPT4gaXNQbGFpbk9iamVjdChlbnRyeSkpO1xuICBpZiAoIWhhc0dyb3Vwcykge1xuICAgIHJldHVybiB7XG4gICAgICBuZXdMYXllck9yZGVyOiBuZXdGbGF0TGF5ZXJPcmRlcixcbiAgICAgIG5ld0xheWVyc1xuICAgIH07XG4gIH1cblxuICAvLyBSZWJ1aWxkIGxheWVyT3JkZXIgcHJlc2VydmluZyBncm91cHMgaW4gdGhlaXIgcmVsYXRpdmUgcG9zaXRpb25zLlxuICAvLyBSZXBsYWNlIGVhY2ggc3RyaW5nIGVudHJ5IHdpdGggaXRzIHVwZGF0ZWQgcG9zaXRpb24gZnJvbSBuZXdGbGF0TGF5ZXJPcmRlcixcbiAgLy8gYW5kIGtlZXAgZ3JvdXBzIGFzLWlzLlxuICBjb25zdCBleGlzdGluZ0ZsYXRJZHMgPSBuZXcgU2V0KFxuICAgIGN1cnJlbnRPcmRlci5maWx0ZXIoZW50cnkgPT4gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykgYXMgc3RyaW5nW11cbiAgKTtcbiAgY29uc3QgbmV3SW5zZXJ0ZWRJZHMgPSBuZXdGbGF0TGF5ZXJPcmRlci5maWx0ZXIoaWQgPT4gIWV4aXN0aW5nRmxhdElkcy5oYXMoaWQpKTtcblxuICAvLyBSZWJ1aWxkOiB3YWxrIHRocm91Z2ggY3VycmVudE9yZGVyLCByZXBsYWNlIHN0cmluZyBlbnRyaWVzIHdpdGggdGhlaXJcbiAgLy8gbmV3IHBvc2l0aW9uIGVxdWl2YWxlbnRzIGZyb20gbmV3RmxhdExheWVyT3JkZXIsIHRoZW4gYXBwZW5kIGFueSBuZXdseSBpbnNlcnRlZCBsYXllcnNcbiAgY29uc3QgcmVzdWx0OiBMYXllck9yZGVyID0gW107XG4gIGNvbnN0IGZsYXRRdWV1ZSA9IFsuLi5uZXdGbGF0TGF5ZXJPcmRlci5maWx0ZXIoaWQgPT4gZXhpc3RpbmdGbGF0SWRzLmhhcyhpZCkpXTtcbiAgbGV0IGZsYXRJZHggPSAwO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgY3VycmVudE9yZGVyKSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICByZXN1bHQucHVzaChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXBsYWNlIHdpdGggY29ycmVzcG9uZGluZyBlbnRyeSBmcm9tIHJlb3JkZXJlZCBmbGF0IGxpc3RcbiAgICAgIGlmIChmbGF0SWR4IDwgZmxhdFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQucHVzaChmbGF0UXVldWVbZmxhdElkeF0pO1xuICAgICAgICBmbGF0SWR4Kys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQXBwZW5kIGFueSBuZXdseSBpbnNlcnRlZCBsYXllcnMgYXQgdGhlIGZyb250ICh0aGV5IGFyZSBuZXcpXG4gIHJldHVybiB7XG4gICAgbmV3TGF5ZXJPcmRlcjogWy4uLm5ld0luc2VydGVkSWRzLCAuLi5yZXN1bHRdLFxuICAgIG5ld0xheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIHNhdmVkIGxheWVyT3JkZXIgd2l0aCBjdXJyZW50IHN0YXRlIHRvIHJlc3RvcmUgbGF5ZXIgZ3JvdXBzLlxuICogQ2FsbGVkIGFmdGVyIGxheWVycyBoYXZlIGJlZW4gbWVyZ2VkLiBJZiB0aGUgc2F2ZWQgY29uZmlnIGNvbnRhaW5zIGEgbGF5ZXJPcmRlclxuICogd2l0aCBncm91cHMsIHRoaXMgcmVwbGFjZXMgdGhlIGZsYXQgbGF5ZXJPcmRlciB3aXRoIHRoZSBzYXZlZCBoaWVyYXJjaGljYWwgb25lLFxuICogZmlsdGVyaW5nIG91dCBhbnkgbGF5ZXIgSURzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyT3JkZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHNhdmVkTGF5ZXJPcmRlcj86IGFueVtdLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGlmICghc2F2ZWRMYXllck9yZGVyIHx8ICFBcnJheS5pc0FycmF5KHNhdmVkTGF5ZXJPcmRlcikgfHwgc2F2ZWRMYXllck9yZGVyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBzYXZlZCBsYXllck9yZGVyIGNvbnRhaW5zIGFueSBncm91cHNcbiAgY29uc3QgaGFzR3JvdXBzID0gc2F2ZWRMYXllck9yZGVyLnNvbWUoZW50cnkgPT4gaXNQbGFpbk9iamVjdChlbnRyeSkpO1xuICBpZiAoIWhhc0dyb3Vwcykge1xuICAgIC8vIE5vIGdyb3VwcyAtIHRoZSBsYXllciBtZXJnZXIgYWxyZWFkeSBoYW5kbGVkIG9yZGVyaW5nIHZpYSBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiBsYXllcnMgaGF2ZW4ndCBiZWVuIG1lcmdlZCB5ZXQsIHN0b3JlIGZvciBsYXRlclxuICBpZiAoc3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBzYXZlZExheWVyT3JkZXJcbiAgICB9O1xuICB9XG5cbiAgLy8gQnVpbGQgYSBzZXQgb2YgdmFsaWQgbGF5ZXIgSURzIGZyb20gY3VycmVudCBzdGF0ZVxuICBjb25zdCB2YWxpZExheWVySWRzID0gbmV3IFNldChzdGF0ZS5sYXllcnMubWFwKGwgPT4gbC5pZCkpO1xuXG4gIC8vIFJlY3Vyc2l2ZWx5IGZpbHRlciB0aGUgc2F2ZWQgbGF5ZXJPcmRlciB0byBvbmx5IGluY2x1ZGUgdmFsaWQgbGF5ZXJzXG4gIGZ1bmN0aW9uIGZpbHRlckxheWVyT3JkZXIob3JkZXI6IGFueVtdKTogTGF5ZXJPcmRlciB7XG4gICAgY29uc3QgcmVzdWx0OiBMYXllck9yZGVyID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBvcmRlcikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEdyb3VwT3JkZXIgPSBmaWx0ZXJMYXllck9yZGVyKGdyb3VwLmxheWVyT3JkZXIpO1xuICAgICAgICAvLyBLZWVwIHRoZSBncm91cCBldmVuIGlmIGVtcHR5ICh1c2VyIG1heSB3YW50IHRoZSBlbXB0eSBncm91cClcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IGZpbHRlcmVkR3JvdXBPcmRlclxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyAmJiB2YWxpZExheWVySWRzLmhhcyhlbnRyeSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY29uc3QgcmVzdG9yZWRMYXllck9yZGVyID0gZmlsdGVyTGF5ZXJPcmRlcihzYXZlZExheWVyT3JkZXIpO1xuXG4gIC8vIEZpbmQgYW55IGxheWVycyBpbiB0aGUgY3VycmVudCBzdGF0ZSB0aGF0IGFyZW4ndCBpbiB0aGUgcmVzdG9yZWQgb3JkZXJcbiAgLy8gKGNvdWxkIGhhcHBlbiBpZiBsYXllcnMgd2VyZSBhZGRlZCBiZXR3ZWVuIHNhdmUgYW5kIGxvYWQpXG4gIGNvbnN0IGxheWVySWRzSW5SZXN0b3JlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmdW5jdGlvbiBjb2xsZWN0SWRzKG9yZGVyOiBhbnlbXSkge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2Ygb3JkZXIpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgICBjb2xsZWN0SWRzKChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmxheWVyT3JkZXIpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGxheWVySWRzSW5SZXN0b3JlZC5hZGQoZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb2xsZWN0SWRzKHJlc3RvcmVkTGF5ZXJPcmRlcik7XG5cbiAgLy8gQWRkIGFueSBtaXNzaW5nIGxheWVycyBhdCB0aGUgdG9wXG4gIGNvbnN0IG1pc3NpbmdMYXllcnMgPSBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gIWxheWVySWRzSW5SZXN0b3JlZC5oYXMobC5pZCkpLm1hcChsID0+IGwuaWQpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogWy4uLm1pc3NpbmdMYXllcnMsIC4uLnJlc3RvcmVkTGF5ZXJPcmRlcl0sXG4gICAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IG51bGxcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbnMgd2l0aCBzYXZlZCBjb25maWdcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+IHwgdW5kZWZpbmVkXG4pOiBTIHtcbiAgY29uc3QgbWVyZ2VkOiBOZXN0ZWRQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG4gIGNvbnN0IHVubWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG5cbiAgaWYgKGludGVyYWN0aW9uVG9CZU1lcmdlZCkge1xuICAgIChPYmplY3Qua2V5cyhpbnRlcmFjdGlvblRvQmVNZXJnZWQpIGFzIEFycmF5PGtleW9mIFNhdmVkSW50ZXJhY3Rpb25Db25maWc+KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50Q29uZmlnID1cbiAgICAgICAga2V5ID09PSAndG9vbHRpcCcgfHxcbiAgICAgICAga2V5ID09PSAnYnJ1c2gnIHx8XG4gICAgICAgIGtleSA9PT0gJ2dlb2NvZGVyJyB8fFxuICAgICAgICBrZXkgPT09ICdsZWdlbmQnIHx8XG4gICAgICAgIGtleSA9PT0gJ3pvb21PcGFjaXR5J1xuICAgICAgICAgID8gc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWdcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgIGNvbnN0IHtlbmFibGVkLCAuLi5jb25maWdTYXZlZH0gPSBpbnRlcmFjdGlvblRvQmVNZXJnZWRba2V5XSB8fCB7fTtcblxuICAgICAgbGV0IGNvbmZpZ1RvTWVyZ2UgPSBjb25maWdTYXZlZDtcblxuICAgICAgaWYgKGtleSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAgIGNvbnN0IHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9ID0gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29uZmlnU2F2ZWQgYXMgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZ1sndG9vbHRpcCddXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gbWVyZ2UgbmV3IGRhdGFzZXQgdG9vbHRpcHMgd2l0aCBvcmlnaW5hbCBkYXRhc2V0IHRvb2x0aXBzXG4gICAgICAgIGNvbmZpZ1RvTWVyZ2UgPSB7XG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgICAuLi4oY3VycmVudENvbmZpZyBhcyBUb29sdGlwSW5mb1snY29uZmlnJ10pLmZpZWxkc1RvU2hvdyxcbiAgICAgICAgICAgIC4uLm1lcmdlZFRvb2x0aXBcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHVubWVyZ2VkVG9vbHRpcCkubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIHVubWVyZ2VkLnRvb2x0aXAgPSB7ZmllbGRzVG9TaG93OiB1bm1lcmdlZFRvb2x0aXAsIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCl9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1lcmdlZFtrZXldID0ge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLFxuICAgICAgICBlbmFibGVkOiBCb29sZWFuKGVuYWJsZWQpLFxuICAgICAgICAuLi4oY3VycmVudENvbmZpZ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjb25maWc6IHBpY2soXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLi4uY3VycmVudENvbmZpZyxcbiAgICAgICAgICAgICAgICAgIC4uLmNvbmZpZ1RvTWVyZ2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25maWcpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAuLi5tZXJnZWRcbiAgICB9LFxuICAgIGludGVyYWN0aW9uVG9CZU1lcmdlZDogc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uKHN0YXRlLCB1bm1lcmdlZClcbiAgfTtcbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUludGVyYWN0aW9uQ29uZmlncyhjb25maWdzOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnW10pOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnIHtcbiAgY29uc3QgY29tYmluZWQgPSB7Li4uY29uZmlnc1swXX07XG4gIC8vIGBsZWdlbmRgIGlzIG9wdGlvbmFsIG9uIG9sZGVyIHNhdmVkIG1hcHM7IHNlZWQgaXQgc28gYSBsYXRlciBjb25maWcgaXMgbm90IGRyb3BwZWQuXG4gIGlmICghY29tYmluZWQubGVnZW5kKSB7XG4gICAgY29uc3Qgd2l0aExlZ2VuZCA9IGNvbmZpZ3MuZmluZChjID0+IGMubGVnZW5kKTtcbiAgICBpZiAod2l0aExlZ2VuZD8ubGVnZW5kKSB7XG4gICAgICBjb21iaW5lZC5sZWdlbmQgPSB3aXRoTGVnZW5kLmxlZ2VuZDtcbiAgICB9XG4gIH1cbiAgLy8gU2FtZSBmb3IgZmFkZS1vbi16b29tOiBhbiBvbGRlciBjb25maWcgaW4gZnJvbnQgbXVzdCBub3QgZHJvcCBjb250cm9sbGVycyBmcm9tIGEgbGF0ZXIgb25lLlxuICBpZiAoIWNvbWJpbmVkLnpvb21PcGFjaXR5KSB7XG4gICAgY29uc3Qgd2l0aFpvb21PcGFjaXR5ID0gY29uZmlncy5maW5kKGMgPT4gYy56b29tT3BhY2l0eSk7XG4gICAgaWYgKHdpdGhab29tT3BhY2l0eT8uem9vbU9wYWNpdHkpIHtcbiAgICAgIGNvbWJpbmVkLnpvb21PcGFjaXR5ID0gd2l0aFpvb21PcGFjaXR5Lnpvb21PcGFjaXR5O1xuICAgIH1cbiAgfVxuICAvLyBoYW5kbGUgZWFjaCBwcm9wZXJ0eSBrZXkgb2YgYW4gYEludGVyYWN0aW9uQ29uZmlnYCwgZS5nLiB0b29sdGlwLCBnZW9jb2RlciwgYnJ1c2gsIGNvb3JkaW5hdGVcbiAgLy8gYnkgY29tYmluaW5nIHZhbHVlcyBmb3IgZWFjaCBhbW9uZyBhbGwgcGFzc2VkIGluIGNvbmZpZ3NcblxuICBmb3IgKGNvbnN0IGtleSBpbiBjb21iaW5lZCkge1xuICAgIGNvbnN0IHRvQmVDb21iaW5lZFByb3BzID0gY29uZmlncy5tYXAoYyA9PiBjW2tleV0pO1xuXG4gICAgLy8gYWxsIG9mIHRoZXNlIGhhdmUgYW4gZW5hYmxlZCBib29sZWFuXG4gICAgY29tYmluZWRba2V5XSA9IHtcbiAgICAgIC8vIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIGVuYWJsZWQgdmFsdWVzIHRydWU/XG4gICAgICBlbmFibGVkOiB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uZW5hYmxlZClcbiAgICB9O1xuXG4gICAgaWYgKGtleSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAvLyBhcmUgYW55IG9mIHRoZSBjb25maWdzJyBjb21wYXJlTW9kZSB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGNvbWJpbmVkW2tleV0uY29tcGFyZU1vZGUgPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uY29tcGFyZU1vZGUpO1xuXG4gICAgICAvLyByZXR1cm4gdGhlIGNvbXBhcmUgdHlwZSBtb2RlLCBpdCB3aWxsIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZVxuICAgICAgY29tYmluZWRba2V5XS5jb21wYXJlVHlwZSA9IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKFxuICAgICAgICB0b0JlQ29tYmluZWRQcm9wcy5tYXAocCA9PiBwLmNvbXBhcmVUeXBlKVxuICAgICAgKTtcblxuICAgICAgLy8gY29tYmluZSBmaWVsZHNUb1Nob3cgYW1vbmcgYWxsIGRhdGFzZXQgaWRzXG4gICAgICBjb21iaW5lZFtrZXldLmZpZWxkc1RvU2hvdyA9IHRvQmVDb21iaW5lZFByb3BzXG4gICAgICAgIC5tYXAocCA9PiBwLmZpZWxkc1RvU2hvdylcbiAgICAgICAgLnJlZHVjZSgoYWNjLCBuZXh0RmllbGRzVG9TaG93KSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCBuZXh0RGF0YUlkS2V5IGluIG5leHRGaWVsZHNUb1Nob3cpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUb29sdGlwRmllbGRzID0gbmV4dEZpZWxkc1RvU2hvd1tuZXh0RGF0YUlkS2V5XTtcbiAgICAgICAgICAgIGlmICghYWNjW25leHREYXRhSWRLZXldKSB7XG4gICAgICAgICAgICAgIC8vIGlmIHRoZSBkYXRhc2V0IGlkIGlzIG5vdCBwcmVzZW50IGluIHRoZSBhY2N1bXVsYXRvclxuICAgICAgICAgICAgICAvLyB0aGVuIGFkZCBpdCB3aXRoIGl0cyB0b29sdGlwIGZpZWxkc1xuICAgICAgICAgICAgICBhY2NbbmV4dERhdGFJZEtleV0gPSBuZXh0VG9vbHRpcEZpZWxkcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB0aGUgZGF0YXNldCBpZCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICAgICAgICAgIC8vIHNvIG9ubHkgYWRkIHRoZSBuZXh0IHRvb2x0aXAgZmllbGRzIGZvciB0aGlzIGRhdGFzZXQncyBhcnJheSBpZiB0aGV5IGFyZSBub3QgYWxyZWFkeSBwcmVzZW50LFxuICAgICAgICAgICAgICAvLyB1c2luZyB0aGUgdG9vbHRpcEZpZWxkLm5hbWUgcHJvcGVydHkgZm9yIHVuaXF1ZW5lc3NcbiAgICAgICAgICAgICAgbmV4dFRvb2x0aXBGaWVsZHMuZm9yRWFjaChuZXh0VEYgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYWNjW25leHREYXRhSWRLZXldLmZpbmQoKHtuYW1lfSkgPT4gbmV4dFRGLm5hbWUgPT09IG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICBhY2NbbmV4dERhdGFJZEtleV0ucHVzaChuZXh0VEYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYnJ1c2gnKSB7XG4gICAgICAvLyBrZWVwIHRoZSBiaWdnZXN0IGJydXNoIHNpemVcbiAgICAgIGNvbWJpbmVkW2tleV0uc2l6ZSA9XG4gICAgICAgIGFnZ3JlZ2F0ZSh0b0JlQ29tYmluZWRQcm9wcywgQUdHUkVHQVRJT05fVFlQRVMubWF4aW11bSwgcCA9PiBwLnNpemUpID8/IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2dlb2NvZGVyJykge1xuICAgICAgY29tYmluZWRba2V5XS5saW1pdFNlYXJjaCA9IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5saW1pdFNlYXJjaCk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2xlZ2VuZCcpIHtcbiAgICAgIGNvbWJpbmVkW2tleV0uaGlkZUludmlzaWJsZUxheWVycyA9IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5oaWRlSW52aXNpYmxlTGF5ZXJzKTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnem9vbU9wYWNpdHknICYmIGNvbWJpbmVkLnpvb21PcGFjaXR5KSB7XG4gICAgICBjb21iaW5lZC56b29tT3BhY2l0eS5jb250cm9sbGVycyA9IGNvbWJpbmVab29tT3BhY2l0eUNvbnRyb2xsZXJzKHRvQmVDb21iaW5lZFByb3BzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29tYmluZWQ7XG59XG5cbmZ1bmN0aW9uIHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgdW5tZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz5cbikge1xuICBpZiAoIXVubWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3cpIHtcbiAgICByZXR1cm4gc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkO1xuICB9XG4gIHJldHVybiB7XG4gICAgdG9vbHRpcDoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkLnRvb2x0aXAsXG4gICAgICAuLi4odHlwZW9mIHVubWVyZ2VkPy50b29sdGlwPy5lbmFibGVkID09PSAnYm9vbGVhbidcbiAgICAgICAgPyB7ZW5hYmxlZDogdW5tZXJnZWQudG9vbHRpcC5lbmFibGVkfVxuICAgICAgICA6IHt9KSxcbiAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvdyxcbiAgICAgICAgLi4udW5tZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyhpbnRlcmFjdGlvbkNvbmZpZywgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcD8uZmllbGRzVG9TaG93W2RhdGFJZF0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAsXG4gICAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAgIFtkYXRhSWRUb1JlcGxhY2VdOiBpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcD8uZmllbGRzVG9TaG93W2RhdGFJZF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTWVyZ2Ugc3BsaXRNYXBzIGNvbmZpZyB3aXRoIGN1cnJlbnQgdmlzU3RldGUuXG4gKiBQYW5lbHMgYXJlIG1hdGNoZWQgYnkgaW5kZXg6IGluZGV4IGkgb2YgYHNwbGl0TWFwc2AsIGBzdGF0ZS5zcGxpdE1hcHNgIGFuZFxuICogYHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWRgIGlzIHRoZSBzYW1lIG1hcCBwYW5lbC5cbiAqIDEuIGlmIGN1cnJlbnQgbWFwIGlzIHNwbGl0LCBidXQgc3BsaXRNYXAgRE9FU05PVCBjb250YWluIG1hcHNcbiAqICAgIDogZG9uJ3QgbWVyZ2UgYW55dGhpbmdcbiAqIDIuIGlmIGN1cnJlbnQgbWFwIGlzIE5PVCBzcGxpdCwgYnV0IHNwbGl0TWFwcyBjb250YWluIG1hcHNcbiAqICAgIDogYWRkIHRvIHNwbGl0TWFwcywgYW5kIGFkZCBjdXJyZW50IGxheWVycyB0byBzcGxpdE1hcHMuXG4gKiAgICAgIFBhbmVscyBhcmUgY3JlYXRlZCBvbmNlIG9uZSBvZiB0aGVtIGNhbiBiZSBtZXJnZWQ6IGl0IGhhcyBubyBsYXllcnMsIG9yIG9uZSBvZiBpdHMgbGF5ZXJzIGV4aXN0c1xuICogMy4gbGF5ZXJzIHRoYXQgZG9uJ3QgZXhpc3QgeWV0XG4gKiAgICA6IHNhdmUgdG8gc3BsaXRNYXBzVG9CZU1lcmdlZCwgaW4gdGhlIHBhbmVsIGF0IHRoZSBzYW1lIGluZGV4XG4gKiBBIGxheWVyIGxpc3RlZCBpbiBzcGxpdE1hcHMgb25seSBzaG93cyBpbiB0aGUgcGFuZWxzIHRoYXQgbGlzdCBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlU3BsaXRNYXBzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBzcGxpdE1hcHM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ3NwbGl0TWFwcyddID0gW11cbik6IFMge1xuICBjb25zdCBsYXllckV4aXN0cyA9IChpZDogc3RyaW5nKSA9PiBzdGF0ZS5sYXllcnMuc29tZShsID0+IGwuaWQgPT09IGlkKTtcbiAgY29uc3QgY3JlYXRlUGFuZWxzID1cbiAgICBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID4gMCB8fFxuICAgIHNwbGl0TWFwcy5zb21lKHNtID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IE9iamVjdC5rZXlzKHNtLmxheWVycyk7XG4gICAgICByZXR1cm4gIWlkcy5sZW5ndGggfHwgaWRzLnNvbWUobGF5ZXJFeGlzdHMpO1xuICAgIH0pO1xuICBjb25zdCBjdXJyZW50TGF5ZXJzID0gZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwKFxuICAgIHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiAhc3BsaXRNYXBzLnNvbWUoc20gPT4gbC5pZCBpbiBzbS5sYXllcnMpKVxuICApO1xuXG4gIGNvbnN0IG1lcmdlZCA9IFsuLi5zdGF0ZS5zcGxpdE1hcHNdO1xuICBjb25zdCB1bm1lcmdlZDogdHlwZW9mIHNwbGl0TWFwcyA9IFtdO1xuICBzcGxpdE1hcHMuZm9yRWFjaCgoc20sIGkpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoc20ubGF5ZXJzKTtcbiAgICBpZiAoY3JlYXRlUGFuZWxzKSB7XG4gICAgICAvLyBjcmVhdGUgbWFwIHBhbmVsIGlmIGN1cnJlbnQgbWFwIGlzIG5vdCBzcGxpdCwga2VlcCBpZFxuICAgICAgY29uc3QgcGFuZWwgPSBtZXJnZWRbaV0gfHwgey4uLnNtLCBsYXllcnM6IGN1cnJlbnRMYXllcnN9O1xuICAgICAgbWVyZ2VkW2ldID0ge1xuICAgICAgICAuLi5wYW5lbCxcbiAgICAgICAgbGF5ZXJzOiB7Li4ucGFuZWwubGF5ZXJzLCAuLi5PYmplY3QuZnJvbUVudHJpZXMoZW50cmllcy5maWx0ZXIoKFtpZF0pID0+IGxheWVyRXhpc3RzKGlkKSkpfVxuICAgICAgfTtcbiAgICB9XG4gICAgdW5tZXJnZWRbaV0gPSB7Li4uc20sIGxheWVyczogT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMuZmlsdGVyKChbaWRdKSA9PiAhbGF5ZXJFeGlzdHMoaWQpKSl9O1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogbWVyZ2VkLFxuICAgIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IHVubWVyZ2VkLnNvbWUoc20gPT4gT2JqZWN0LmtleXMoc20ubGF5ZXJzKS5sZW5ndGgpXG4gICAgICA/IGNvbWJpbmVTcGxpdE1hcHNCeUluZGV4KHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQsIHVubWVyZ2VkKVxuICAgICAgOiBzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgY2hhcnRzIHdpdGggc2F2ZWQgY29uZmlnLiBDaGFydHMgd2hvc2UgZGF0YXNldCBpcyBub3QgbG9hZGVkIHlldCBhcmVcbiAqIHBhcmtlZCBvbiBgY2hhcnRzVG9CZU1lcmdlZGAgKHNhbWUgYXMgZmlsdGVycykgc28gZGF0YXNldCByZXBsYWNlIGNhbiByZW1hcFxuICogYGRhdGFJZGAgYW5kIHJlc3RvcmUgdGhlbSBhZnRlciB0aGUgbmV3IHRhYmxlIGxhbmRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDaGFydHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGNoYXJ0czogQ2hhcnRDb25maWdbXSB8IHVuZGVmaW5lZCxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY2hhcnRzKSB8fCAhY2hhcnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpbmNvbWluZ0lkcyA9IG5ldyBTZXQoXG4gICAgY2hhcnRzLm1hcChjaGFydCA9PiBjaGFydD8uaWQpLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkpXG4gICk7XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldCgoc3RhdGUuY2hhcnRzIHx8IFtdKS5tYXAoY2hhcnQgPT4gY2hhcnQuaWQpKTtcbiAgY29uc3QgbmV4dENoYXJ0czogQ2hhcnRDb25maWdbXSA9IFtdO1xuICBjb25zdCBmYWlsZWQ6IENoYXJ0Q29uZmlnW10gPSBbXTtcbiAgY2hhcnRzLmZvckVhY2goY2hhcnQgPT4ge1xuICAgIGlmICghY2hhcnQgfHwgIWNoYXJ0LmlkIHx8IGV4aXN0aW5nSWRzLmhhcyhjaGFydC5pZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZDogQ2hhcnRDb25maWcgPSBmcm9tQ29uZmlnXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5jaGFydCxcbiAgICAgICAgICAvLyBPbGRlciBjb25maWdzIG9taXQgYHBpbm5lZGA7IGtlZXAgY2hhcnRzIHZpc2libGUgbGlrZSB0aGUgbGVnZW5kLlxuICAgICAgICAgIHBpbm5lZDogY2hhcnQucGlubmVkICE9PSBmYWxzZSxcbiAgICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgICAuLi5jaGFydC5kaXNwbGF5LFxuICAgICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgaXNKc29uRWRpdG9yQWN0aXZlOiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgOiBjaGFydDtcbiAgICBpZiAoXG4gICAgICBub3JtYWxpemVkLmRhdGFJZCAmJlxuICAgICAgKCFzdGF0ZS5kYXRhc2V0c1tub3JtYWxpemVkLmRhdGFJZF0gfHwgc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbbm9ybWFsaXplZC5kYXRhSWRdKVxuICAgICkge1xuICAgICAgZmFpbGVkLnB1c2gobm9ybWFsaXplZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV4aXN0aW5nSWRzLmFkZChub3JtYWxpemVkLmlkKTtcbiAgICBuZXh0Q2hhcnRzLnB1c2gobm9ybWFsaXplZCk7XG4gIH0pO1xuICBpZiAoIW5leHRDaGFydHMubGVuZ3RoICYmICFmYWlsZWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2hhcnRzOiBuZXh0Q2hhcnRzLmxlbmd0aCA/IFsuLi4oc3RhdGUuY2hhcnRzIHx8IFtdKSwgLi4ubmV4dENoYXJ0c10gOiBzdGF0ZS5jaGFydHMsXG4gICAgY2hhcnRzVG9CZU1lcmdlZDogW1xuICAgICAgLi4uKHN0YXRlLmNoYXJ0c1RvQmVNZXJnZWQgfHwgW10pLmZpbHRlcihjaGFydCA9PiAhaW5jb21pbmdJZHMuaGFzKGNoYXJ0LmlkKSksXG4gICAgICAuLi5mYWlsZWRcbiAgICBdXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQ2hhcnREYXRhc2V0SWRzKFxuICBzYXZlZENoYXJ0czogQ2hhcnRDb25maWdbXSB8IHVuZGVmaW5lZCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IENoYXJ0Q29uZmlnW10gfCBudWxsIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHNhdmVkQ2hhcnRzKSB8fCAhc2F2ZWRDaGFydHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcmVwbGFjZWQgPSBzYXZlZENoYXJ0c1xuICAgIC5maWx0ZXIoY2hhcnQgPT4gY2hhcnQ/LmRhdGFJZCA9PT0gZGF0YUlkKVxuICAgIC5tYXAoY2hhcnQgPT4gKHsuLi5jaGFydCwgZGF0YUlkOiBkYXRhSWRUb1VzZX0pKTtcbiAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVmZmVjdHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGVmZmVjdHM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2VmZmVjdHMnXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBuZXdFZmZlY3RzID0gW1xuICAgIC4uLnN0YXRlLmVmZmVjdHMsXG4gICAgLi4uKGVmZmVjdHMgfHwgW10pXG4gICAgICAubWFwKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBmcm9tQ29uZmlnXG4gICAgICAgICAgPyBjcmVhdGVFZmZlY3QoXG4gICAgICAgICAgICAgIGRlZXBtZXJnZS5hbGwoW1xuICAgICAgICAgICAgICAgIGVmZmVjdCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAvLyBjb2xsYXBzZSBhbGwgcGFuZWxzIHdoZW4gbG9hZGluZyBlZmZlY3RzXG4gICAgICAgICAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiAoZWZmZWN0IGFzIEVmZmVjdFR5cGUpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoZWZmZWN0ID0+IHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZWZmZWN0ICYmIGVmZmVjdC5pc1ZhbGlkVG9TYXZlKCkpO1xuICAgICAgfSlcbiAgXTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyOiBuZXdFZmZlY3RzLm1hcChlZmZlY3QgPT4gZWZmZWN0LmlkKVxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGFubm90YXRpb25zIHdpdGggc2F2ZWQgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFubm90YXRpb25zPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGFubm90YXRpb25zOiBhbnlbXSk6IFMge1xuICBpZiAoIWFubm90YXRpb25zIHx8ICFhbm5vdGF0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0KHN0YXRlLmFubm90YXRpb25zLm1hcChhID0+IGEuaWQpKTtcbiAgY29uc3QgdmFsaWRBbm5vdGF0aW9ucyA9IGFubm90YXRpb25zXG4gICAgLmZpbHRlcihcbiAgICAgIGEgPT5cbiAgICAgICAgYSAmJlxuICAgICAgICBhLmlkICYmXG4gICAgICAgICFleGlzdGluZ0lkcy5oYXMoYS5pZCkgJiZcbiAgICAgICAgaXNBbm5vdGF0aW9uS2luZChhLmtpbmQpICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkoYS5hbmNob3JQb2ludCkgJiZcbiAgICAgICAgKGEuYW5jaG9yUG9pbnQubGVuZ3RoID09PSAyIHx8IGEuYW5jaG9yUG9pbnQubGVuZ3RoID09PSAzKSAmJlxuICAgICAgICBhLmFuY2hvclBvaW50LmV2ZXJ5KHZhbHVlID0+IE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpXG4gICAgKVxuICAgIC5tYXAoYSA9PiAoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgYXV0b1NpemU6IHRydWUsXG4gICAgICBhdXRvU2l6ZVk6IHRydWUsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBsaW5lQ29sb3I6IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICAgICAgbGluZVdpZHRoOiBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgICAgIHRleHRXaWR0aDogMCxcbiAgICAgIHRleHRIZWlnaHQ6IDAsXG4gICAgICAuLi5hXG4gICAgfSkpO1xuICBpZiAoIXZhbGlkQW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFsuLi5zdGF0ZS5hbm5vdGF0aW9ucywgLi4udmFsaWRBbm5vdGF0aW9uc11cbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwIHdpdGggc2F2ZWQgY29uZmlnLFxuICogdmFsaWRhdGUgZmllbGRzVG9TaG93XG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcGFyYW0gdG9vbHRpcENvbmZpZ1xuICogQHJldHVybiAtIHttZXJnZWRUb29sdGlwOiB7fSwgdW5tZXJnZWRUb29sdGlwOiB7fX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHRvb2x0aXBDb25maWc6IFBpY2s8VG9vbHRpcEluZm9bJ2NvbmZpZyddLCAnZmllbGRzVG9TaG93Jz4gfCBudWxsID0gbnVsbFxuKSB7XG4gIGNvbnN0IHVubWVyZ2VkVG9vbHRpcDogVG9vbHRpcEluZm9bJ2NvbmZpZyddWydmaWVsZHNUb1Nob3cnXSA9IHt9O1xuICBjb25zdCBtZXJnZWRUb29sdGlwOiBUb29sdGlwSW5mb1snY29uZmlnJ11bJ2ZpZWxkc1RvU2hvdyddID0ge307XG5cbiAgaWYgKFxuICAgICF0b29sdGlwQ29uZmlnIHx8XG4gICAgIXRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93IHx8XG4gICAgIU9iamVjdC5rZXlzKHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KS5sZW5ndGhcbiAgKSB7XG4gICAgcmV0dXJuIHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9O1xuICB9XG5cbiAgZm9yIChjb25zdCBkYXRhSWQgaW4gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cpIHtcbiAgICBpZiAoIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0gfHwgc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbZGF0YUlkXSkge1xuICAgICAgLy8gaXMgbm90IHlldCBsb2FkZWRcbiAgICAgIHVubWVyZ2VkVG9vbHRpcFtkYXRhSWRdID0gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgZGF0YXNldCBpcyBsb2FkZWRcbiAgICAgIGNvbnN0IGFsbEZpZWxkcyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0uZmllbGRzLm1hcChkID0+IGQubmFtZSk7XG4gICAgICBjb25zdCBmb3VuZEZpZWxkc1RvU2hvdyA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF0uZmlsdGVyKGZpZWxkID0+XG4gICAgICAgIGFsbEZpZWxkcy5pbmNsdWRlcyhmaWVsZC5uYW1lKVxuICAgICAgKTtcblxuICAgICAgbWVyZ2VkVG9vbHRpcFtkYXRhSWRdID0gZm91bmRGaWVsZHNUb1Nob3c7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9O1xufVxuLyoqXG4gKiBNZXJnZSBsYXllckJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyQmxlbmRpbmc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGxheWVyQmxlbmRpbmc6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVyQmxlbmRpbmcnXVxuKTogUyB7XG4gIGlmIChsYXllckJsZW5kaW5nICYmIExBWUVSX0JMRU5ESU5HU1tsYXllckJsZW5kaW5nXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyQmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIENvbWJpbmVzIG11bHRpcGxlIGxheWVyIGJsZW5kaW5nIGNvbmZpZ3MgaW50byBhIHNpbmdsZSBzdHJpbmdcbiAqIGJ5IHJldHVybmluZyB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3Qgb2NjdXJyZW5jZVxuICovXG5mdW5jdGlvbiBjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3MoY29uZmlnczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gcmV0dXJuIHRoZSBtb2RlIG9mIHRoZSBsYXllciBibGVuZGluZyB0eXBlXG4gIHJldHVybiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShjb25maWdzKTtcbn1cblxuLyoqXG4gKiBNZXJnZSBvdmVybGF5QmxlbmRpbmcgd2l0aCBzYXZlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VPdmVybGF5QmxlbmRpbmc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIG92ZXJsYXlCbGVuZGluZzogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnb3ZlcmxheUJsZW5kaW5nJ11cbik6IFMge1xuICBpZiAob3ZlcmxheUJsZW5kaW5nICYmIE9WRVJMQVlfQkxFTkRJTkdTW292ZXJsYXlCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBvdmVybGF5QmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIENvbWJpbmVzIG11bHRpcGxlIG92ZXJsYXkgYmxlbmRpbmcgY29uZmlncyBpbnRvIGEgc2luZ2xlIHN0cmluZ1xuICogYnkgcmV0dXJuaW5nIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdCBvY2N1cnJlbmNlXG4gKiovXG5mdW5jdGlvbiBjb21iaW5lT3ZlcmxheUJsZW5kaW5nQ29uZmlncyhjb25maWdzOiBzdHJpbmdbXSk6IHN0cmluZyB8IG51bGwge1xuICAvLyByZXR1cm4gdGhlIG1vZGUgb2YgdGhlIG92ZXJsYXkgYmxlbmRpbmcgdHlwZVxuICByZXR1cm4gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncyk7XG59XG5cbi8qKlxuICogTWVyZ2UgYW5pbWF0aW9uIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbmltYXRpb25Db25maWc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFuaW1hdGlvbjogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnYW5pbWF0aW9uQ29uZmlnJ11cbik6IFMge1xuICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi5jdXJyZW50VGltZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmFuaW1hdGlvbixcbiAgICAgICAgZG9tYWluOiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUFuaW1hdGlvbkNvbmZpZ3MoY29uZmlnczogU2F2ZWRBbmltYXRpb25Db25maWdbXSk6IFNhdmVkQW5pbWF0aW9uQ29uZmlnIHtcbiAgLy8gZ2V0IHRoZSBzbWFsbGVzdCB2YWx1ZXMgb2YgY3VycmVudFRpbWUgYW5kIHNwZWVkIGFtb25nIGFsbCBjb25maWdzXG4gIHJldHVybiB7XG4gICAgY3VycmVudFRpbWU6IGFnZ3JlZ2F0ZShjb25maWdzLCBBR0dSRUdBVElPTl9UWVBFUy5taW5pbXVtLCBjID0+IGMuY3VycmVudFRpbWUpID8/IG51bGwsXG4gICAgc3BlZWQ6IGFnZ3JlZ2F0ZShjb25maWdzLCBBR0dSRUdBVElPTl9UWVBFUy5taW5pbXVtLCBjID0+IGMuc3BlZWQpID8/IG51bGwsXG4gICAgLy8gYW5kIHRoZSBtb3N0IGNvbW1vbiB0aW1lIGZvcm1hdCBhbmQgdGltZXpvbmUgYW1vbmcgdGhlIGNvbmZpZ3MgdGhhdCBzZXQgb25lXG4gICAgdGltZUZvcm1hdDogZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncy5tYXAoYyA9PiBjLnRpbWVGb3JtYXQpKSxcbiAgICB0aW1lem9uZTogZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncy5tYXAoYyA9PiBjLnRpbWV6b25lKSlcbiAgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb2x1bW5zIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICpcbiAqIEBwYXJhbSBmaWVsZHNcbiAqIEBwYXJhbSBzYXZlZENvbHNcbiAqIEBwYXJhbSBlbXB0eUNvbHNcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJuIC0gdmFsaWRhdGVkIGNvbHVtbnMgb3IgbnVsbFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKFxuICBmaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXSxcbiAgc2F2ZWRDb2xzOiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICB9ID0ge30sXG4gIGVtcHR5Q29sczogTGF5ZXJDb2x1bW5zLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKSB7XG4gIC8vIFByZXBhcmUgY29sdW1ucyBmb3IgdGhlIHZhbGlkYXRvclxuICBjb25zdCBjb2x1bW5zOiB0eXBlb2YgZW1wdHlDb2xzID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGVtcHR5Q29scykpIHtcbiAgICBjb2x1bW5zW2tleV0gPSB7Li4uZW1wdHlDb2xzW2tleV19O1xuXG4gICAgY29uc3Qgc2F2ZWQgPSBzYXZlZENvbHNba2V5XTtcbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkSWR4ID0gZmllbGRzLmZpbmRJbmRleCgoe25hbWV9KSA9PiBuYW1lID09PSBzYXZlZCk7XG5cbiAgICAgIGlmIChmaWVsZElkeCA+IC0xKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBmb3VuZCBjb2x1bW5zXG4gICAgICAgIGNvbHVtbnNba2V5XS5maWVsZElkeCA9IGZpZWxkSWR4O1xuICAgICAgICBjb2x1bW5zW2tleV0udmFsdWUgPSBzYXZlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBmaW5kIGFjdHVhbCBjb2x1bW4gZmllbGRJZHgsIGluIGNhc2UgaXQgaGFzIGNoYW5nZWRcbiAgY29uc3QgYWxsQ29sRm91bmQgPSBPYmplY3Qua2V5cyhjb2x1bW5zKS5ldmVyeShrZXkgPT5cbiAgICB2YWxpZGF0ZUNvbHVtbihjb2x1bW5zW2tleV0sIGNvbHVtbnMsIGZpZWxkcylcbiAgKTtcblxuICBjb25zdCBydiA9IGFsbENvbEZvdW5kID8gY29sdW1ucyA6IG51bGw7XG4gIGlmIChvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgIGNvbnN0IHJlcXVpcmVkQ29sdW1ucyA9IE9iamVjdC5rZXlzKGVtcHR5Q29scykuZmlsdGVyKGsgPT4gIWVtcHR5Q29sc1trXS5vcHRpb25hbCk7XG4gICAgY29uc3QgbWlzc2luZ0NvbHVtbnMgPSByZXF1aXJlZENvbHVtbnMuZmlsdGVyKGsgPT4gIWNvbHVtbnM/LltrXS52YWx1ZSk7XG4gICAgaWYgKG1pc3NpbmdDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgbWlzc2luZyBvciBpbnZhbGlkIGNvbHVtbnM6ICR7bWlzc2luZ0NvbHVtbnMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnQ29sdW1ucyA9IE9iamVjdC5rZXlzKHNhdmVkQ29scyk7XG4gICAgY29uc3QgaW52YWxpZENvbHVtbnMgPSBjb25maWdDb2x1bW5zLmZpbHRlcihrID0+ICFjb2x1bW5zPy5ba10/LnZhbHVlKTtcbiAgICBpZiAoaW52YWxpZENvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIGNvbHVtbnM6ICR7aW52YWxpZENvbHVtbnMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcnY7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgbGF5ZXIgY29sdW1uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbHVtbihcbiAgY29sdW1uOiBMYXllckNvbHVtbiAmIHt2YWxpZGF0b3I/OiB0eXBlb2YgdmFsaWRhdGVDb2x1bW59LFxuICBjb2x1bW5zOiBMYXllckNvbHVtbnMsXG4gIGFsbEZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddXG4pOiBib29sZWFuIHtcbiAgaWYgKGNvbHVtbi5vcHRpb25hbCB8fCBjb2x1bW4udmFsdWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoY29sdW1uLnZhbGlkYXRvcikge1xuICAgIHJldHVybiBjb2x1bW4udmFsaWRhdG9yKGNvbHVtbiwgY29sdW1ucywgYWxsRmllbGRzKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgdGV4dCBsYWJlbCBjb25maWcgd2l0aCBuZXcgZGF0YVxuICogcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBUZXh0TGFiZWxTY2hlbWFWMVxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gZmllbGRzXG4gKiBAcGFyYW0ge09iamVjdH0gc2F2ZWRUZXh0TGFiZWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gdmFsaWRhdGVkIHRleHRsYWJlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZFRleHRMYWJlbChcbiAgZmllbGRzLFxuICBbbGF5ZXJUZXh0TGFiZWxdLFxuICBzYXZlZFRleHRMYWJlbCxcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbikge1xuICBjb25zdCBzYXZlZFRleHRMYWJlbHMgPSBBcnJheS5pc0FycmF5KHNhdmVkVGV4dExhYmVsKSA/IHNhdmVkVGV4dExhYmVsIDogW3NhdmVkVGV4dExhYmVsXTtcblxuICAvLyB2YWxpZGF0ZSBmaWVsZFxuICByZXR1cm4gc2F2ZWRUZXh0TGFiZWxzLm1hcCh0ZXh0TGFiZWwgPT4ge1xuICAgIGNvbnN0IGZpZWxkID0gdGV4dExhYmVsLmZpZWxkXG4gICAgICA/IGZpZWxkcy5maW5kKGZkID0+XG4gICAgICAgICAgT2JqZWN0LmtleXModGV4dExhYmVsLmZpZWxkKS5ldmVyeShrZXkgPT4gdGV4dExhYmVsLmZpZWxkW2tleV0gPT09IGZkW2tleV0pXG4gICAgICAgIClcbiAgICAgIDogbnVsbDtcblxuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkICYmIG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHRleHQgbGFiZWwgZmllbGQ6ICR7SlNPTi5zdHJpbmdpZnkodGV4dExhYmVsLmZpZWxkKX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGF5ZXJUZXh0TGFiZWwpLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiBrZXkgPT09ICdmaWVsZCcgPyBmaWVsZCA6IHRleHRMYWJlbFtrZXldIHx8IGxheWVyVGV4dExhYmVsW2tleV1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBTYXZlZCB2aXN1YWwgY2hhbm5lbCBmaWVsZC9zY2FsZSBtYXkgbGl2ZSBpbiBhbnkgb2Y6XG4gKiAtIGBjb25maWdba2V5XWAgYWZ0ZXIgc2NoZW1hIHBhcnNlIChWaXN1YWxDaGFubmVsU2NoZW1hVjEgZm9sZHMgY2hhbm5lbHMgaW50byBjb25maWcpXG4gKiAtIGB2aXN1YWxDaGFubmVsc1trZXldYCBhcyBhIHNpYmxpbmcgb2YgYGNvbmZpZ2AgKHVucGFyc2VkIGFkZERhdGFUb01hcCBwYXlsb2FkKVxuICogLSBgY29uZmlnLnZpc3VhbENoYW5uZWxzW2tleV1gIChjb21tb24gbWlzdGFrZSBvZiBuZXN0aW5nIHZpc3VhbENoYW5uZWxzIGluc2lkZSBjb25maWcpXG4gKlxuICogV2l0aG91dCB0aGlzIGxvb2t1cCwgcHJvZ3JhbW1hdGljIEdlb0pTT04gc3Ryb2tlQ29sb3JGaWVsZCBuZXZlciBiaW5kcyBhbmRcbiAqIHN0cm9rZUNvbG9yRG9tYWluIHN0YXlzIGF0IHRoZSBkZWZhdWx0IGBbMCwgMV1gIChrZXBsZXIuZ2wgIzMwNjEpLlxuICovXG5mdW5jdGlvbiBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyOiBQYXJzZWRMYXllciwga2V5OiBzdHJpbmcpOiBhbnkge1xuICBjb25zdCBjb25maWcgPSBzYXZlZExheWVyLmNvbmZpZyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkO1xuICBpZiAoY29uZmlnICYmIGNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY29uZmlnW2tleV07XG4gIH1cbiAgY29uc3QgY2hhbm5lbHMgPVxuICAgIChzYXZlZExheWVyIGFzIHt2aXN1YWxDaGFubmVscz86IFJlY29yZDxzdHJpbmcsIGFueT59KS52aXN1YWxDaGFubmVscyB8fFxuICAgIChjb25maWcgJiYgY29uZmlnLnZpc3VhbENoYW5uZWxzKTtcbiAgaWYgKGNoYW5uZWxzICYmIHR5cGVvZiBjaGFubmVscyA9PT0gJ29iamVjdCcgJiYgY2hhbm5lbHNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNoYW5uZWxzW2tleV07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCB2aXN1YWwgY2hhbm5lbHMgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzKFxuICBmaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXSxcbiAgbmV3TGF5ZXI6IExheWVyLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbik6IG51bGwgfCBMYXllciB7XG4gIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZCwgc2NhbGUsIGtleX0pID0+IHtcbiAgICBjb25zdCBzYXZlZEZpZWxkID0gZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUoc2F2ZWRMYXllciwgZmllbGQpO1xuICAgIGNvbnN0IHNhdmVkU2NhbGUgPSBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyLCBzY2FsZSk7XG4gICAgbGV0IGZvdW5kRmllbGQ7XG4gICAgaWYgKHNhdmVkRmllbGQ/Lm5hbWUpIHtcbiAgICAgIGZvdW5kRmllbGQgPSBmaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBzYXZlZEZpZWxkLm5hbWUpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvdW5kQ2hhbm5lbCA9IHtcbiAgICAgIC4uLihmb3VuZEZpZWxkID8ge1tmaWVsZF06IGZvdW5kRmllbGR9IDoge30pLFxuICAgICAgLi4uKHNhdmVkU2NhbGUgPyB7W3NjYWxlXTogc2F2ZWRTY2FsZX0gOiB7fSlcbiAgICB9O1xuICAgIGlmIChPYmplY3Qua2V5cyhmb3VuZENoYW5uZWwpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoZm91bmRDaGFubmVsKTtcbiAgICB9XG5cbiAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHNhdmVkRmllbGQ/Lm5hbWU7XG4gICAgICBpZiAoZmllbGROYW1lICYmIGZpZWxkTmFtZSAhPT0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkXT8ubmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHZpc3VhbCBjaGFubmVsIGZpZWxkOiAke2ZpZWxkfWApO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxudHlwZSBWYWxpZGF0ZUxheWVyT3B0aW9uID0ge1xuICBhbGxvd0VtcHR5Q29sdW1uPzogYm9vbGVhbjtcbiAgdGhyb3dPbkVycm9yPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gIGRhdGFzZXRzOiBEYXRhc2V0cyxcbiAgbGF5ZXJDbGFzc2VzOiBWaXNTdGF0ZVsnbGF5ZXJDbGFzc2VzJ10sXG4gIGxheWVyczogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXSxcbiAgb3B0aW9ucz86IFZhbGlkYXRlTGF5ZXJPcHRpb25cbikge1xuICBjb25zdCB2YWxpZGF0ZWQ6IExheWVyW10gPSBbXTtcbiAgY29uc3QgZmFpbGVkOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdO1xuXG4gIGxheWVycy5mb3JFYWNoKGxheWVyID0+IHtcbiAgICBsZXQgdmFsaWRhdGVMYXllcjogTGF5ZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChsYXllcj8uY29uZmlnPy5kYXRhSWQpIHtcbiAgICAgIGlmIChkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSkge1xuICAgICAgICAvLyBkYXRhc2V0cyBhcmUgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgdmFsaWRhdGVMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShcbiAgICAgICAgICBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSxcbiAgICAgICAgICBsYXllcixcbiAgICAgICAgICBsYXllckNsYXNzZXMsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZUxheWVyKSB7XG4gICAgICB2YWxpZGF0ZWQucHVzaCh2YWxpZGF0ZUxheWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGF0YXNldHMgbm90IHlldCBsb2FkZWRcbiAgICAgIGZhaWxlZC5wdXNoKGxheWVyKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7dmFsaWRhdGVkLCBmYWlsZWR9O1xufVxuXG4vKipcbiAqIEdldCByZXF1aXJlZCBjb2x1bW5zIGZvciB2YWxpZGF0aW9uIGJhc2VkIG9uIGNvbHVtbiBtb2RlXG4gKi9cbmZ1bmN0aW9uIF9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uKG5ld0xheWVyKSB7XG4gIC8vIGZpbmQgY29sdW1uIGZpZWxkSWR4XG4gIGxldCBjb2x1bW5Db25maWcgPSBuZXdMYXllci5nZXRMYXllckNvbHVtbnMoKTtcbiAgLy8gaWYgY29sdW1uTW9kZSBpcyBkZWZpbmVkLCBmaW5kIGNvbHVtbiBtb2RlIGNvbmZpZ1xuICBjb25zdCBjb2xNb2RlQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLmNvbHVtbk1vZGVcbiAgICA/IChuZXdMYXllci5zdXBwb3J0ZWRDb2x1bW5Nb2RlcyB8fCBbXSkuZmluZChcbiAgICAgICAgY29sTW9kZSA9PiBjb2xNb2RlLmtleSA9PT0gbmV3TGF5ZXIuY29uZmlnLmNvbHVtbk1vZGVcbiAgICAgIClcbiAgICA6IG51bGw7XG5cbiAgaWYgKGNvbE1vZGVDb25maWcpIHtcbiAgICAvLyBvbmx5IHZhbGlkYXRlIGNvbHVtbnMgaW4gY29sdW1uIG1vZGUgKGluY2x1ZGluZyB0YWJiZWQgY29sdW1uR3JvdXBzKVxuICAgIGNvbnN0IGdyb3VwQ29sdW1ucyA9IChjb2xNb2RlQ29uZmlnLmNvbHVtbkdyb3VwcyB8fCBbXSkuZmxhdE1hcChncm91cCA9PiBncm91cC5jb2x1bW5zIHx8IFtdKTtcbiAgICBjb25zdCByZXF1aXJlZEtleXMgPSBuZXcgU2V0KGNvbE1vZGVDb25maWcucmVxdWlyZWRDb2x1bW5zIHx8IFtdKTtcbiAgICBjb2x1bW5Db25maWcgPSBbXG4gICAgICAuLi4oY29sTW9kZUNvbmZpZy5yZXF1aXJlZENvbHVtbnMgfHwgW10pLFxuICAgICAgLi4uKGNvbE1vZGVDb25maWcub3B0aW9uYWxDb2x1bW5zIHx8IFtdKSxcbiAgICAgIC4uLmdyb3VwQ29sdW1uc1xuICAgIF0ucmVkdWNlKChhY2N1LCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IGNvbCA9IGNvbHVtbkNvbmZpZ1trZXldO1xuICAgICAgaWYgKCFjb2wpIHtcbiAgICAgICAgcmV0dXJuIGFjY3U7XG4gICAgICB9XG4gICAgICAvLyBPcHRpb25hbGl0eSBtdXN0IGZvbGxvdyB0aGUgYWN0aXZlIG1vZGU6IGEgZmllbGQgb3B0aW9uYWwgaW4gYW5vdGhlciBtb2RlXG4gICAgICAvLyAoZS5nLiBhbHRpdHVkZSBpbiBVVikgaXMgc3RpbGwgcmVxdWlyZWQgd2hlbiB0aGlzIG1vZGUgbGlzdHMgaXQgaW4gcmVxdWlyZWRDb2x1bW5zLlxuICAgICAgaWYgKHJlcXVpcmVkS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICBjb25zdCB7b3B0aW9uYWw6IF9vcHRpb25hbCwgLi4ucmVxdWlyZWRDb2x9ID0gY29sO1xuICAgICAgICByZXR1cm4gey4uLmFjY3UsIFtrZXldOiByZXF1aXJlZENvbH07XG4gICAgICB9XG4gICAgICByZXR1cm4gey4uLmFjY3UsIFtrZXldOiB7Li4uY29sLCBvcHRpb25hbDogdHJ1ZX19O1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHJldHVybiBjb2x1bW5Db25maWc7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShcbiAgZGF0YXNldDogS2VwbGVyVGFibGUsXG4gIHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLFxuICBsYXllckNsYXNzZXM6IFZpc1N0YXRlWydsYXllckNsYXNzZXMnXSxcbiAgb3B0aW9uczogVmFsaWRhdGVMYXllck9wdGlvbiA9IHt9XG4pOiBMYXllciB8IG51bGwge1xuICBjb25zdCB7ZmllbGRzLCBpZDogZGF0YUlkfSA9IGRhdGFzZXQ7XG4gIGNvbnN0IHt0eXBlfSA9IHNhdmVkTGF5ZXI7XG4gIGNvbnN0IHt0aHJvd09uRXJyb3J9ID0gb3B0aW9ucztcbiAgLy8gbGF5ZXIgZG9lc250IGhhdmUgYSB2YWxpZCB0eXBlXG4gIGlmICghdHlwZSB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxheWVyQ2xhc3NlcywgdHlwZSkgfHwgIXNhdmVkTGF5ZXIuY29uZmlnKSB7XG4gICAgaWYgKHRocm93T25FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB0eXBlIFwiJHt0eXBlfVwiIG9yIGNvbmZpZyBpcyBtaXNzaW5nYCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1t0eXBlXSh7XG4gICAgaWQ6IHNhdmVkTGF5ZXIuaWQsXG4gICAgZGF0YUlkLFxuICAgIGxhYmVsOiBzYXZlZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBjb2xvcjogc2F2ZWRMYXllci5jb25maWcuY29sb3IsXG4gICAgaXNWaXNpYmxlOiBzYXZlZExheWVyLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgaGlkZGVuOiBzYXZlZExheWVyLmNvbmZpZy5oaWRkZW4sXG4gICAgaXNJbmNsdWRlZEluTGVnZW5kOiBzYXZlZExheWVyLmNvbmZpZy5pc0luY2x1ZGVkSW5MZWdlbmQsXG4gICAgY29sdW1uTW9kZTogc2F2ZWRMYXllci5jb25maWcuY29sdW1uTW9kZSxcbiAgICBoaWdobGlnaHRDb2xvcjogc2F2ZWRMYXllci5jb25maWcuaGlnaGxpZ2h0Q29sb3JcbiAgfSk7XG5cbiAgY29uc3QgY29sdW1uQ29uZmlnID0gX2dldENvbHVtbkNvbmZpZ0ZvclZhbGlkYXRpb24obmV3TGF5ZXIpO1xuXG4gIGlmIChPYmplY3Qua2V5cyhjb2x1bW5Db25maWcpKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IHZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMoXG4gICAgICBmaWVsZHMsXG4gICAgICBzYXZlZExheWVyLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgY29sdW1uQ29uZmlnLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gICAgaWYgKGNvbHVtbnMpIHtcbiAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgY29sdW1uczoge1xuICAgICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgICAgIC4uLmNvbHVtbnNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghb3B0aW9ucy5hbGxvd0VtcHR5Q29sdW1uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0ZXh0TGFiZWwgPVxuICAgIHNhdmVkTGF5ZXIuY29uZmlnLnRleHRMYWJlbCAmJiBuZXdMYXllci5jb25maWcudGV4dExhYmVsXG4gICAgICA/IHZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwoXG4gICAgICAgICAgZmllbGRzLFxuICAgICAgICAgIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwsXG4gICAgICAgICAgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKVxuICAgICAgOiBuZXdMYXllci5jb25maWcudGV4dExhYmVsO1xuXG4gIC8vIGNvcHkgdmlzQ29uZmlnIG92ZXIgdG8gZW1wdHlMYXllciB0byBtYWtlIHN1cmUgaXQgaGFzIGFsbCB0aGUgcHJvcHNcbiAgY29uc3Qgc2F2ZWRWaXNDb25maWcgPVxuICAgIHNhdmVkTGF5ZXIudHlwZSA9PT0gJzNEJ1xuICAgICAgPyBtaWdyYXRlTGVnYWN5U2NlbmVncmFwaFZpc0NvbmZpZyhzYXZlZExheWVyLmNvbmZpZy52aXNDb25maWcpXG4gICAgICA6IHNhdmVkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZztcbiAgY29uc3QgY29waWVkVmlzQ29uZmlnID0gbmV3TGF5ZXIuY29weUxheWVyQ29uZmlnKFxuICAgIG5ld0xheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgc2F2ZWRWaXNDb25maWcgfHwge30sXG4gICAge1xuICAgICAgc2hhbGxvd0NvcHk6IFsnY29sb3JSYW5nZScsICdzdHJva2VDb2xvclJhbmdlJ11cbiAgICB9XG4gICk7XG5cbiAgLy8gY2FsbCBsYXllciBtZXRob2RzIHRvIHZhbGlkYXRlIHZpc0NvbmZpZyB3aGVuIHN3aXRjaGluZyBkYXRhc2V0XG4gIGNvbnN0IHZpc0NvbmZpZyA9IG5ld0xheWVyLnZhbGlkYXRlVmlzQ29uZmlnXG4gICAgPyBuZXdMYXllci52YWxpZGF0ZVZpc0NvbmZpZyhkYXRhc2V0LCBjb3BpZWRWaXNDb25maWcpXG4gICAgOiBjb3BpZWRWaXNDb25maWc7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIHZpc0NvbmZpZyxcbiAgICB0ZXh0TGFiZWxcbiAgfSk7XG5cbiAgLy8gdmlzdWFsIGNoYW5uZWwgZmllbGQgaXMgc2F2ZWQgdG8gYmUge25hbWUsIHR5cGV9XG4gIC8vIGZpbmQgdmlzdWFsIGNoYW5uZWwgZmllbGQgYnkgbWF0Y2hpbmcgYm90aCBuYW1lIGFuZCB0eXBlXG4gIC8vIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gIG5ld0xheWVyID0gdmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzKGZpZWxkcywgbmV3TGF5ZXIsIHNhdmVkTGF5ZXIsIG9wdGlvbnMpO1xuXG4gIGlmICh0aHJvd09uRXJyb3IpIHtcbiAgICBpZiAoIW5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBpcyBub3QgdmFsaWQgdG8gc2F2ZTogJHtuZXdMYXllci5pZH1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVkaXRvcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBzYXZlZEVkaXRvcjogU2F2ZWRFZGl0b3IpIHtcbiAgaWYgKCFzYXZlZEVkaXRvcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIC4uLihzYXZlZEVkaXRvci5mZWF0dXJlcyB8fCBbXSldLFxuICAgICAgLy8gaWYgc2F2ZWRFZGl0b3IudmlzaWJsZSBpcyB1bmRlZmluZWQga2VlcCBzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgICAgdmlzaWJsZTogc2F2ZWRFZGl0b3IudmlzaWJsZSA/PyBzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUVkaXRvckNvbmZpZ3MoY29uZmlnczogU2F2ZWRFZGl0b3JbXSk6IFNhdmVkRWRpdG9yIHtcbiAgcmV0dXJuIGNvbmZpZ3MucmVkdWNlKFxuICAgIChhY2MsIG5leHRDb25maWcpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFjYyxcbiAgICAgICAgZmVhdHVyZXM6IFsuLi5hY2MuZmVhdHVyZXMsIC4uLihuZXh0Q29uZmlnLmZlYXR1cmVzIHx8IFtdKV1cbiAgICAgIH07XG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBzdGFydCB3aXRoOlxuICAgICAgLy8gLSBlbXB0eSBhcnJheSBmb3IgZmVhdHVyZXMgYWNjdW11bGF0aW9uXG4gICAgICAvLyAtIGFuZCBhcmUgYW55IG9mIHRoZSBjb25maWdzJyB2aXNpYmxlIHZhbHVlcyB0cnVlP1xuICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgdmlzaWJsZTogY29uZmlncy5zb21lKGMgPT4gYz8udmlzaWJsZSlcbiAgICB9XG4gICk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGU6IFZpc1N0YXRlLCBuZXdEYXRhRW50cmllczogRGF0YXNldHMpOiBEYXRhc2V0cyB7XG4gIGNvbnN0IG1lcmdlZCA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAuLi5uZXdEYXRhRW50cmllc1xuICB9O1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyKSkge1xuICAgIC8vIHByZXNlcnZlRGF0YXNldE9yZGVyICBtaWdodCBub3QgaW5jbHVkZSB0aGUgIG5ldyBkYXRhc2V0c1xuICAgIGNvbnN0IG5ld0RhdGFzZXRJZHMgPSBPYmplY3Qua2V5cyhtZXJnZWQpLmZpbHRlcihcbiAgICAgIGlkID0+ICFzdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlcj8uaW5jbHVkZXMoaWQpXG4gICAgKTtcbiAgICByZXR1cm4gWy4uLnN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyLCAuLi5uZXdEYXRhc2V0SWRzXS5yZWR1Y2UoXG4gICAgICAoYWNjdSwgZGF0YUlkKSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICAuLi4obWVyZ2VkW2RhdGFJZF0gPyB7W2RhdGFJZF06IG1lcmdlZFtkYXRhSWRdfSA6IHt9KVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG4vKipcbiAqIFNpbWxpYXIgcHVycG9zZSB0byBhZ2dyZWdhdGlvbiB1dGlscyBgZ2V0TW9kZWAgZnVuY3Rpb24sXG4gKiBidXQgcmV0dXJucyB0aGUgbW9kZSBpbiB0aGUgc2FtZSB2YWx1ZSB0eXBlIHdpdGhvdXQgY29lcmNpbmcgdG8gYSBzdHJpbmcuXG4gKiBJdCBpZ25vcmVzIGB1bmRlZmluZWRgIG9yIGBudWxsYCB2YWx1ZXMsIGJ1dCByZXR1cm5zIGBudWxsYCBpZiBubyBtb2RlIGNvdWxkIGJlIGNhbGN1bGF0ZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlPFQ+KGFycjogVFtdKTogVCB8IG51bGwge1xuICBjb25zdCB0YWxseXMgPSBuZXcgTWFwKCk7XG4gIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICBpZiAobm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgaWYgKCF0YWxseXMuaGFzKHZhbHVlKSkge1xuICAgICAgICB0YWxseXMuc2V0KHZhbHVlLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhbGx5cy5zZXQodmFsdWUsIHRhbGx5cy5nZXQodmFsdWUpICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLy8gcmV0dXJuIHRoZSB2YWx1ZSB3aXRoIHRoZSBoaWdoZXN0IHRvdGFsIG9jY3VycmVuY2UgY291bnRcbiAgaWYgKHRhbGx5cy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIFsuLi50YWxseXMuZW50cmllcygpXT8ucmVkdWNlKChhY2MsIG5leHQpID0+IChuZXh0WzFdID4gYWNjWzFdID8gbmV4dCA6IGFjYykpWzBdO1xufVxuXG5leHBvcnQgY29uc3QgVklTX1NUQVRFX01FUkdFUlM6IFZpc1N0YXRlTWVyZ2Vyczxhbnk+ID0gW1xuICB7XG4gICAgbWVyZ2U6IG1lcmdlTGF5ZXJzLFxuICAgIHByb3A6ICdsYXllcnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnbGF5ZXJUb0JlTWVyZ2VkJyxcbiAgICBwcmVzZXJ2ZU9yZGVyOiAncHJlc2VydmVMYXllck9yZGVyJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlTGF5ZXJPcmRlcixcbiAgICBwcm9wOiAnbGF5ZXJPcmRlcidcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUZpbHRlcnMsXG4gICAgcHJvcDogJ2ZpbHRlcnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnZmlsdGVyVG9CZU1lcmdlZCcsXG4gICAgcHJlc2VydmVPcmRlcjogJ3ByZXNlcnZlRmlsdGVyT3JkZXInLFxuICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzOiByZXBsYWNlRmlsdGVyRGF0YXNldElkc1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlRWZmZWN0cyxcbiAgICBwcm9wOiAnZWZmZWN0cydcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUNoYXJ0cyxcbiAgICBwcm9wOiAnY2hhcnRzJyxcbiAgICB0b01lcmdlUHJvcDogJ2NoYXJ0c1RvQmVNZXJnZWQnLFxuICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzOiByZXBsYWNlQ2hhcnREYXRhc2V0SWRzXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VBbm5vdGF0aW9ucyxcbiAgICBwcm9wOiAnYW5ub3RhdGlvbnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnYW5ub3RhdGlvbnNUb0JlTWVyZ2VkJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlSW50ZXJhY3Rpb25zLFxuICAgIHByb3A6ICdpbnRlcmFjdGlvbkNvbmZpZycsXG4gICAgdG9NZXJnZVByb3A6ICdpbnRlcmFjdGlvblRvQmVNZXJnZWQnLFxuICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzOiByZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzLFxuICAgIHNhdmVVbm1lcmdlZDogc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uLFxuICAgIGNvbWJpbmVDb25maWdzOiBjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzXG4gIH0sXG4gIHttZXJnZTogbWVyZ2VMYXllckJsZW5kaW5nLCBwcm9wOiAnbGF5ZXJCbGVuZGluZycsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3N9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlT3ZlcmxheUJsZW5kaW5nLFxuICAgIHByb3A6ICdvdmVybGF5QmxlbmRpbmcnLFxuICAgIGNvbWJpbmVDb25maWdzOiBjb21iaW5lT3ZlcmxheUJsZW5kaW5nQ29uZmlnc1xuICB9LFxuICB7bWVyZ2U6IG1lcmdlU3BsaXRNYXBzLCBwcm9wOiAnc3BsaXRNYXBzJywgdG9NZXJnZVByb3A6ICdzcGxpdE1hcHNUb0JlTWVyZ2VkJ30sXG4gIHttZXJnZTogbWVyZ2VBbmltYXRpb25Db25maWcsIHByb3A6ICdhbmltYXRpb25Db25maWcnLCBjb21iaW5lQ29uZmlnczogY29tYmluZUFuaW1hdGlvbkNvbmZpZ3N9LFxuICB7bWVyZ2U6IG1lcmdlRWRpdG9yLCBwcm9wOiAnZWRpdG9yJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVFZGl0b3JDb25maWdzfVxuXTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFlBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQVdBLElBQUFLLE9BQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFlBQUEsR0FBQVAsT0FBQTtBQUNB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
|
|
1402
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdW5pcSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BpY2siLCJfZmxhdHRlbkRlZXAiLCJfZGVlcG1lcmdlIiwiX3V0aWxzIiwiX2xheWVycyIsIl9lZmZlY3RzIiwiX2NvbW1vblV0aWxzIiwiX2NvbnN0YW50cyIsIl9zY2hlbWFzIiwiX3RhYmxlIiwiX2xheWVyVXRpbHMiLCJfaW50ZXJhY3Rpb25VdGlscyIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl90b1Byb3BlcnR5S2V5IiwiaSIsIl90b1ByaW1pdGl2ZSIsIl90eXBlb2YzIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwibWVyZ2VGaWx0ZXJzIiwic3RhdGUiLCJmaWx0ZXJzVG9NZXJnZSIsImZyb21Db25maWciLCJwcmVzZXJ2ZUZpbHRlck9yZGVyIiwibWFwIiwibCIsImlkIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJ2YWxpZGF0ZWQiLCJmYWlsZWQiLCJ1cGRhdGVkRGF0YXNldHMiLCJ1cGRhdGVkRmlsdGVycyIsImluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIiLCJmaWx0ZXJzIiwicmVzZXRGaWx0ZXJHcHVNb2RlIiwiYXNzaWduR3B1Q2hhbm5lbHMiLCJkYXRhc2V0c1RvRmlsdGVyIiwidW5pcSIsImZsYXR0ZW5EZWVwIiwiZGF0YUlkIiwiZmlsdGVyZWQiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwibGF5ZXJzIiwiZGF0YXNldHMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzIiwic2F2ZWRGaWx0ZXIiLCJkYXRhSWRUb1VzZSIsInJlcGxhY2VkIiwiaW5jbHVkZXMiLCJfZmlsdGVyJHBsb3RUeXBlIiwibmV3RGF0YUlkIiwiZCIsInBsb3RUeXBlIiwiY29sb3JzQnlEYXRhSWQiLCJfZmlsdGVyJHBsb3RUeXBlMiIsIl9yZWYiLCJjb2xvciIsInJlc3QiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiaXNTYXZlZExheWVyQ29uZmlnVjEiLCJsYXllckNvbmZpZyIsInZpc3VhbENoYW5uZWxzIiwicGFyc2VMYXllckNvbmZpZyIsInNjaGVtYSIsIl9zY2hlbWEkcGFyc2VTYXZlZENvbiIsInNhdmVkQ29uZmlnIiwidmVyc2lvbiIsIkNVUlJFTlRfVkVSU0lPTiIsImNvbmZpZyIsInZpc1N0YXRlIiwibGF5ZXJPcmRlciIsInBhcnNlU2F2ZWRDb25maWciLCJjdXJyZW50SXRlbXMiLCJpdGVtcyIsInByZXNlcnZlZE9yZGVyIiwidW5kZWZpbmVkIiwiZGVmYXVsdFN0YXJ0IiwibmV3SXRlbXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIml0ZW0iLCJleHBlY3RlZElkeCIsImluZGV4T2YiLCJpbnNlcnRBdCIsInByZWNlZWRJZHgiLCJfbG9vcCIsInByZWNlZWRJdGVtSWQiLCJmaW5kSW5kZXgiLCJhcnJheUluc2VydCIsImVyciIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsInNhdmVkTGF5ZXJDb25maWciLCJwYXJzZWRMYXllckNvbmZpZyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YSIsInZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyIsImxheWVyQ2xhc3NlcyIsImFsbG93RW1wdHlDb2x1bW4iLCJrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWwiLCJuZXdMYXllciIsInVwZGF0ZUxheWVyRG9tYWluIiwic2VyaWFsaXplRmlsdGVyIiwibmV3RmlsdGVyIiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRmIiwic2VyaWFsaXplZFZpc1N0YXRlIiwic2VyaWFsaXplVmlzU3RhdGUiLCJzZXJpYWxpemVMYXllciIsIl9zZXJpYWxpemVkVmlzU3RhdGUkbCIsInNlcmlhbGl6ZUVmZmVjdCIsIm5ld0VmZmVjdCIsIl9zZXJpYWxpemVkVmlzU3RhdGUkZSIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsIl9zY2hlbWEkcGFyc2VTYXZlZENvbjIiLCJzYXZlZFN0YXRlIiwiZ2V0Q29uZmlnVG9TYXZlIiwibWVyZ2VMYXllcnMiLCJsYXllcnNUb01lcmdlIiwicHJlc2VydmVMYXllck9yZGVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJ1bm1lcmdlZCIsInRvTWVyZ2UiLCJfbCRjb25maWciLCJpc01lcmdpbmdEYXRhc2V0cyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YTIiLCJtZXJnZWRMYXllciIsIl9pbnNlcnRMYXllckF0UmlnaHRPciIsImluc2VydExheWVyQXRSaWdodE9yZGVyIiwibmV3TGF5ZXJPcmRlciIsIm5ld0xheWVycyIsIm1lcmdlZFN0YXRlIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlclRvQmVNZXJnZWQiLCJzYXZlZE9yZGVyIiwibWVyZ2VMYXllck9yZGVyIiwiY3VycmVudExheWVycyIsImxheWVyc1RvSW5zZXJ0IiwiY3VycmVudE9yZGVyIiwiY3VycmVudExheWVyUXVldWUiLCJlbnRyeSIsImZpbmRCeUlkIiwibGF5ZXIiLCJCb29sZWFuIiwibmV3TGF5ZXJPcmRlclF1ZXVlIiwibmV3RmxhdExheWVyT3JkZXIiLCJoYXNHcm91cHMiLCJzb21lIiwiaXNQbGFpbk9iamVjdCIsImV4aXN0aW5nRmxhdElkcyIsIlNldCIsIm5ld0luc2VydGVkSWRzIiwiaGFzIiwicmVzdWx0IiwiZmxhdFF1ZXVlIiwiZmxhdElkeCIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJzYXZlZExheWVyT3JkZXIiLCJ2YWxpZExheWVySWRzIiwiZmlsdGVyTGF5ZXJPcmRlciIsIm9yZGVyIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsImdyb3VwIiwiZmlsdGVyZWRHcm91cE9yZGVyIiwicmVzdG9yZWRMYXllck9yZGVyIiwibGF5ZXJJZHNJblJlc3RvcmVkIiwiY29sbGVjdElkcyIsIl9pdGVyYXRvcjQiLCJfc3RlcDQiLCJhZGQiLCJtaXNzaW5nTGF5ZXJzIiwibWVyZ2VJbnRlcmFjdGlvbnMiLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJtZXJnZWQiLCJrZXkiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImN1cnJlbnRDb25maWciLCJfcmVmMiIsImVuYWJsZWQiLCJjb25maWdTYXZlZCIsImNvbmZpZ1RvTWVyZ2UiLCJzYXZlZFRvb2x0aXBDb25maWciLCJfbWVyZ2VJbnRlcmFjdGlvblRvb2wiLCJtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyIsIm1lcmdlZFRvb2x0aXAiLCJ1bm1lcmdlZFRvb2x0aXAiLCJmaWVsZHNUb1Nob3ciLCJ0aW1lem9uZSIsInRvb2x0aXAiLCJwaWNrIiwibmV4dFN0YXRlIiwic2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uIiwiY29tYmluZUludGVyYWN0aW9uQ29uZmlncyIsImNvbmZpZ3MiLCJjb21iaW5lZCIsImxlZ2VuZCIsIndpdGhMZWdlbmQiLCJmaW5kIiwiYyIsInpvb21PcGFjaXR5Iiwid2l0aFpvb21PcGFjaXR5IiwiX2xvb3AyIiwidG9CZUNvbWJpbmVkUHJvcHMiLCJwIiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsImdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlIiwiaGFzVGltZXpvbmUiLCJyZWR1Y2UiLCJhY2MiLCJuZXh0RmllbGRzVG9TaG93IiwiX2xvb3AzIiwibmV4dERhdGFJZEtleSIsIm5leHRUb29sdGlwRmllbGRzIiwibmV4dFRGIiwiX3JlZjMiLCJfYWdncmVnYXRlIiwic2l6ZSIsImFnZ3JlZ2F0ZSIsIkFHR1JFR0FUSU9OX1RZUEVTIiwibWF4aW11bSIsIl90b0JlQ29tYmluZWRQcm9wcyRmaSIsImxpbWl0U2VhcmNoIiwiaGlkZUludmlzaWJsZUxheWVycyIsImNvbnRyb2xsZXJzIiwiY29tYmluZVpvb21PcGFjaXR5Q29udHJvbGxlcnMiLCJfdW5tZXJnZWQkdG9vbHRpcCIsIl91bm1lcmdlZCR0b29sdGlwMiIsIl9zdGF0ZSRpbnRlcmFjdGlvblRvQiIsIl91bm1lcmdlZCR0b29sdGlwMyIsInJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfaW50ZXJhY3Rpb25Db25maWckdG8iLCJfaW50ZXJhY3Rpb25Db25maWckdG8yIiwibWVyZ2VTcGxpdE1hcHMiLCJzcGxpdE1hcHMiLCJsYXllckV4aXN0cyIsImNyZWF0ZVBhbmVscyIsInNtIiwiaWRzIiwiZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwIiwiZW50cmllcyIsInBhbmVsIiwiZnJvbUVudHJpZXMiLCJfcmVmNCIsIl9yZWY1IiwiX3NsaWNlZFRvQXJyYXkyIiwiX3JlZjYiLCJfcmVmNyIsInNwbGl0TWFwc1RvQmVNZXJnZWQiLCJjb21iaW5lU3BsaXRNYXBzQnlJbmRleCIsIm1lcmdlQ2hhcnRzIiwiY2hhcnRzIiwiaW5jb21pbmdJZHMiLCJjaGFydCIsImV4aXN0aW5nSWRzIiwibmV4dENoYXJ0cyIsIm5vcm1hbGl6ZWQiLCJwaW5uZWQiLCJkaXNwbGF5IiwiaXNDb25maWdBY3RpdmUiLCJpc0pzb25FZGl0b3JBY3RpdmUiLCJjaGFydHNUb0JlTWVyZ2VkIiwicmVwbGFjZUNoYXJ0RGF0YXNldElkcyIsInNhdmVkQ2hhcnRzIiwibWVyZ2VFZmZlY3RzIiwibmV3RWZmZWN0cyIsImVmZmVjdCIsImNyZWF0ZUVmZmVjdCIsImRlZXBtZXJnZSIsImFsbCIsImlzVmFsaWRUb1NhdmUiLCJtZXJnZUFubm90YXRpb25zIiwiYW5ub3RhdGlvbnMiLCJ2YWxpZEFubm90YXRpb25zIiwiaXNBbm5vdGF0aW9uS2luZCIsImtpbmQiLCJhbmNob3JQb2ludCIsImV2ZXJ5IiwiaXNGaW5pdGUiLCJpc1Zpc2libGUiLCJhdXRvU2l6ZSIsImF1dG9TaXplWSIsImxhYmVsIiwibGluZUNvbG9yIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJsaW5lV2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCIsInRleHRXaWR0aCIsInRleHRIZWlnaHQiLCJ0b29sdGlwQ29uZmlnIiwiX2xvb3A0IiwiYWxsRmllbGRzIiwiZmllbGRzIiwiZm91bmRGaWVsZHNUb1Nob3ciLCJmaWVsZCIsIm1lcmdlTGF5ZXJCbGVuZGluZyIsImxheWVyQmxlbmRpbmciLCJMQVlFUl9CTEVORElOR1MiLCJjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3MiLCJtZXJnZU92ZXJsYXlCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwiY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3MiLCJtZXJnZUFuaW1hdGlvbkNvbmZpZyIsImFuaW1hdGlvbiIsImN1cnJlbnRUaW1lIiwiYW5pbWF0aW9uQ29uZmlnIiwiZG9tYWluIiwiY29tYmluZUFuaW1hdGlvbkNvbmZpZ3MiLCJfYWdncmVnYXRlMiIsIl9hZ2dyZWdhdGUzIiwibWluaW11bSIsInNwZWVkIiwidGltZUZvcm1hdCIsInZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMiLCJzYXZlZENvbHMiLCJlbXB0eUNvbHMiLCJvcHRpb25zIiwiY29sdW1ucyIsIl9sb29wNSIsIl9PYmplY3Qka2V5cyIsIl9pIiwic2F2ZWQiLCJmaWVsZElkeCIsIl9yZWY4IiwiYWxsQ29sRm91bmQiLCJ2YWxpZGF0ZUNvbHVtbiIsInJ2IiwidGhyb3dPbkVycm9yIiwicmVxdWlyZWRDb2x1bW5zIiwiayIsIm9wdGlvbmFsIiwibWlzc2luZ0NvbHVtbnMiLCJFcnJvciIsImpvaW4iLCJjb25maWdDb2x1bW5zIiwiaW52YWxpZENvbHVtbnMiLCJfY29sdW1ucyRrIiwiY29sdW1uIiwidmFsaWRhdG9yIiwidmFsaWRhdGVTYXZlZFRleHRMYWJlbCIsImxheWVyVGV4dExhYmVscyIsInNhdmVkVGV4dExhYmVsIiwibGF5ZXJUZXh0TGFiZWwiLCJzYXZlZFRleHRMYWJlbHMiLCJjb3VudExhYmVsTGF5ZXIiLCJsYXllclR5cGUiLCJBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUyIsInRleHRMYWJlbCIsIlBPSU5UX0NPVU5UX0ZJRUxEX05BTUUiLCJjcmVhdGVQb2ludENvdW50TGFiZWxGaWVsZCIsImZkIiwiSlNPTiIsInN0cmluZ2lmeSIsImFjY3UiLCJfdGV4dExhYmVsJGtleSIsImZhbGxiYWNrVGV4dExhYmVsRm9yTG9hZGVkTGF5ZXIiLCJuZXdMYXllclRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsImdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlIiwic2F2ZWRMYXllciIsImNoYW5uZWxzIiwiX3R5cGVvZjIiLCJ2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMiLCJ2YWx1ZXMiLCJfcmVmOSIsInNjYWxlIiwic2F2ZWRGaWVsZCIsInNhdmVkU2NhbGUiLCJmb3VuZEZpZWxkIiwiZm91bmRDaGFubmVsIiwidXBkYXRlTGF5ZXJDb25maWciLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJfbmV3TGF5ZXIkY29uZmlnJGZpZWwiLCJmaWVsZE5hbWUiLCJfbGF5ZXIkY29uZmlnIiwidmFsaWRhdGVMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIl9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uIiwiY29sdW1uQ29uZmlnIiwiZ2V0TGF5ZXJDb2x1bW5zIiwiY29sTW9kZUNvbmZpZyIsImNvbHVtbk1vZGUiLCJzdXBwb3J0ZWRDb2x1bW5Nb2RlcyIsImNvbE1vZGUiLCJncm91cENvbHVtbnMiLCJjb2x1bW5Hcm91cHMiLCJmbGF0TWFwIiwicmVxdWlyZWRLZXlzIiwib3B0aW9uYWxDb2x1bW5zIiwiY29sIiwiX29wdGlvbmFsIiwicmVxdWlyZWRDb2wiLCJkYXRhc2V0IiwidHlwZSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiaGlkZGVuIiwiaXNJbmNsdWRlZEluTGVnZW5kIiwiaGlnaGxpZ2h0Q29sb3IiLCJzYXZlZFZpc0NvbmZpZyIsIm1pZ3JhdGVMZWdhY3lTY2VuZWdyYXBoVmlzQ29uZmlnIiwidmlzQ29uZmlnIiwiY29waWVkVmlzQ29uZmlnIiwiY29weUxheWVyQ29uZmlnIiwic2hhbGxvd0NvcHkiLCJ2YWxpZGF0ZVZpc0NvbmZpZyIsIm1lcmdlRWRpdG9yIiwic2F2ZWRFZGl0b3IiLCJfc2F2ZWRFZGl0b3IkdmlzaWJsZSIsImVkaXRvciIsImZlYXR1cmVzIiwidmlzaWJsZSIsImNvbWJpbmVFZGl0b3JDb25maWdzIiwibmV4dENvbmZpZyIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwibmV3RGF0YUVudHJpZXMiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIm5ld0RhdGFzZXRJZHMiLCJfc3RhdGUkcHJlc2VydmVEYXRhc2UiLCJhcnIiLCJfcmVmMTEiLCJ0YWxseXMiLCJNYXAiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJzZXQiLCJnZXQiLCJWSVNfU1RBVEVfTUVSR0VSUyIsImV4cG9ydHMiLCJtZXJnZSIsInByb3AiLCJ0b01lcmdlUHJvcCIsInByZXNlcnZlT3JkZXIiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsInNhdmVVbm1lcmdlZCIsImNvbWJpbmVDb25maWdzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpcy1zdGF0ZS1tZXJnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHVuaXEgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvdW5pcSc7XG5pbXBvcnQgcGljayBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9waWNrJztcbmltcG9ydCBmbGF0dGVuRGVlcCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9mbGF0dGVuRGVlcCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge1xuICBhcnJheUluc2VydCxcbiAgY29tYmluZVNwbGl0TWFwc0J5SW5kZXgsXG4gIGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMsXG4gIGZpbmRCeUlkLFxuICBhZ2dyZWdhdGUsXG4gIGlzUGxhaW5PYmplY3Rcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX0NPVU5UX0xBWUVSX1RZUEVTLFxuICBMYXllcixcbiAgY3JlYXRlUG9pbnRDb3VudExhYmVsRmllbGQsXG4gIG1pZ3JhdGVMZWdhY3lTY2VuZWdyYXBoVmlzQ29uZmlnLFxuICBQT0lOVF9DT1VOVF9GSUVMRF9OQU1FXG59IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIExBWUVSX0JMRU5ESU5HUyxcbiAgT1ZFUkxBWV9CTEVORElOR1MsXG4gIGlzQW5ub3RhdGlvbktpbmQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0NVUlJFTlRfVkVSU0lPTiwgVmlzU3RhdGUsIFZpc1N0YXRlTWVyZ2VycywgS2VwbGVyR0xTY2hlbWFDbGFzc30gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IHtcbiAgUGFyc2VkTGF5ZXIsXG4gIFBhcnNlZFZpc1N0YXRlLFxuICBTYXZlZEludGVyYWN0aW9uQ29uZmlnLFxuICBUb29sdGlwSW5mbyxcbiAgU2F2ZWRFZGl0b3IsXG4gIFBhcnNlZENvbmZpZyxcbiAgRmlsdGVyLFxuICBFZmZlY3QgYXMgRWZmZWN0VHlwZSxcbiAgUGFyc2VkRWZmZWN0LFxuICBMYXllckNvbHVtbnMsXG4gIExheWVyQ29sdW1uLFxuICBQYXJzZWRGaWx0ZXIsXG4gIE5lc3RlZFBhcnRpYWwsXG4gIFNhdmVkQW5pbWF0aW9uQ29uZmlnLFxuICBMYXllck9yZGVyLFxuICBMYXllck9yZGVyR3JvdXAsXG4gIENoYXJ0Q29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZSwgRGF0YXNldHMsIGFzc2lnbkdwdUNoYW5uZWxzLCByZXNldEZpbHRlckdwdU1vZGV9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5pbXBvcnQge2dldExheWVyT3JkZXJGcm9tTGF5ZXJzfSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Y29tYmluZVpvb21PcGFjaXR5Q29udHJvbGxlcnN9IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuXG4vKipcbiAqIE1lcmdlIGxvYWRlZCBmaWx0ZXJzIHdpdGggY3VycmVudCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUZpbHRlcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGZpbHRlcnNUb01lcmdlOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydmaWx0ZXJzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVGaWx0ZXJPcmRlciA9IGZyb21Db25maWdcbiAgICA/IGZpbHRlcnNUb01lcmdlPy5tYXAobCA9PiBsLmlkKVxuICAgIDogc3RhdGUucHJlc2VydmVGaWx0ZXJPcmRlcjtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVyc1RvTWVyZ2UpIHx8ICFmaWx0ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhzdGF0ZSwgZmlsdGVyc1RvTWVyZ2UpO1xuICBsZXQgdXBkYXRlZEZpbHRlcnMgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIHN0YXRlLmZpbHRlcnMsXG4gICAgdmFsaWRhdGVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXJcbiAgKTtcblxuICAvLyBtZXJnZSBmaWx0ZXIgd2l0aCBleGlzdGluZ1xuICB1cGRhdGVkRmlsdGVycyA9IHJlc2V0RmlsdGVyR3B1TW9kZSh1cGRhdGVkRmlsdGVycyk7XG4gIHVwZGF0ZWRGaWx0ZXJzID0gYXNzaWduR3B1Q2hhbm5lbHModXBkYXRlZEZpbHRlcnMpO1xuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBkYXRhc2V0c1RvRmlsdGVyID0gdW5pcShmbGF0dGVuRGVlcCh2YWxpZGF0ZWQubWFwKGYgPT4gZi5kYXRhSWQpKSk7XG5cbiAgY29uc3QgZmlsdGVyZWQgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIGRhdGFzZXRzVG9GaWx0ZXIsXG4gICAgdXBkYXRlZERhdGFzZXRzLFxuICAgIHVwZGF0ZWRGaWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogdXBkYXRlZEZpbHRlcnMsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXIsXG4gICAgZmlsdGVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmZpbHRlclRvQmVNZXJnZWQsIC4uLmZhaWxlZF1cbiAgfTtcbn1cblxuLy8gcmVwbGFjZSBkYXRhSWQgaW4gc2F2ZWQgRmlsdGVyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUZpbHRlckRhdGFzZXRJZHMoXG4gIHNhdmVkRmlsdGVyOiBGaWx0ZXJbXSxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbikge1xuICBjb25zdCByZXBsYWNlZDogRmlsdGVyW10gPSBbXTtcbiAgc2F2ZWRGaWx0ZXIuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgIGlmIChmaWx0ZXIuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGFJZCA9IGZpbHRlci5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZCkpO1xuICAgICAgbGV0IHBsb3RUeXBlO1xuICAgICAgLy8gVE9ETzogbW9yZSBnZW5lcmljIGFwcHJvYWNoIHRvIHNhdmUgcGxvdFR5cGUuY29sb3JzQnlEYXRhSWRcbiAgICAgIGlmIChmaWx0ZXIucGxvdFR5cGU/LmNvbG9yc0J5RGF0YUlkPy5bZGF0YUlkXSkge1xuICAgICAgICAvLyByZXBsYWNlIGNvbG9yQnlEYXRhSWQgaW4gZmlsdGVyLnBsb3RUeXBlXG4gICAgICAgIGNvbnN0IHtbZGF0YUlkXTogY29sb3IsIC4uLnJlc3R9ID0gZmlsdGVyLnBsb3RUeXBlPy5jb2xvcnNCeURhdGFJZCB8fCB7fTtcbiAgICAgICAgcGxvdFR5cGUgPSB7XG4gICAgICAgICAgLi4uZmlsdGVyLnBsb3RUeXBlLFxuICAgICAgICAgIGNvbG9yc0J5RGF0YUlkOiB7XG4gICAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICAgICAgW2RhdGFJZFRvVXNlXTogY29sb3JcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXBsYWNlZC5wdXNoKHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZCxcbiAgICAgICAgLi4uKHBsb3RUeXBlID8ge3Bsb3RUeXBlfSA6IHt9KVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2F2ZWRMYXllckNvbmZpZ1YxKGxheWVyQ29uZmlnOiBhbnkpOiBib29sZWFuIHtcbiAgLy8gZXhwb3J0ZWQgbGF5ZXIgY29uZmlndXJhdGlvbiBjb250YWlucyB2aXN1YWxDaGFubmVscyBwcm9wZXJ0eVxuICByZXR1cm4gbGF5ZXJDb25maWc/LnZpc3VhbENoYW5uZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMYXllckNvbmZpZyhcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzLFxuICBsYXllckNvbmZpZzogYW55XG4pOiBQYXJzZWRMYXllciB8IHVuZGVmaW5lZCB7XG4gIC8vIGFzc3VtZSB0aGUgbGF5ZXIgY29uZmlnIGlzIGN1cnJlbnQgdmVyc2lvblxuICBjb25zdCBzYXZlZENvbmZpZyA9IHtcbiAgICB2ZXJzaW9uOiBDVVJSRU5UX1ZFUlNJT04sXG4gICAgY29uZmlnOiB7XG4gICAgICB2aXNTdGF0ZToge2xheWVyczogW2xheWVyQ29uZmlnXSwgbGF5ZXJPcmRlcjogW2xheWVyQ29uZmlnLmlkXX1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKHNhdmVkQ29uZmlnKT8udmlzU3RhdGU/LmxheWVycz8uWzBdO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICBjdXJyZW50SXRlbXM6IEZpbHRlcltdLFxuICBpdGVtczogRmlsdGVyW10sXG4gIHByZXNlcnZlZE9yZGVyOiBhbnlbXSA9IFtdLFxuICBkZWZhdWx0U3RhcnQ/OiBib29sZWFuXG4pIHtcbiAgbGV0IG5ld0l0ZW1zID0gWy4uLmN1cnJlbnRJdGVtc107XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRJZHggPSBwcmVzZXJ2ZWRPcmRlci5pbmRleE9mKGl0ZW0uaWQpO1xuICAgIC8vIGluc2VydEF0IHRoZSBlbmQgYnkgZGVmYXVsdFxuICAgIGxldCBpbnNlcnRBdCA9IGRlZmF1bHRTdGFydCA/IDAgOiBuZXdJdGVtcy5sZW5ndGg7XG4gICAgaWYgKGV4cGVjdGVkSWR4ID4gMCkge1xuICAgICAgLy8gbG9vayBmb3IgbGF5ZXIgdG8gaW5zZXJ0IGFmdGVyXG4gICAgICBsZXQgaSA9IGV4cGVjdGVkSWR4ICsgMTtcbiAgICAgIGxldCBwcmVjZWVkSWR4ID0gLTE7XG4gICAgICB3aGlsZSAoaS0tID4gMCAmJiBwcmVjZWVkSWR4IDwgMCkge1xuICAgICAgICAvLyBrZWVwIGxvb2tpbmcgZm9yIHByZWNlZWQgbGF5ZXIgdGhhdCBpcyBhbHJlYWR5IGxvYWRlZFxuICAgICAgICBjb25zdCBwcmVjZWVkSXRlbUlkID0gcHJlc2VydmVkT3JkZXJbaSAtIDFdO1xuICAgICAgICBwcmVjZWVkSWR4ID0gbmV3SXRlbXMuZmluZEluZGV4KGQgPT4gZC5pZCA9PT0gcHJlY2VlZEl0ZW1JZCk7XG4gICAgICB9XG4gICAgICBpZiAocHJlY2VlZElkeCA+IC0xKSB7XG4gICAgICAgIC8vIGlmIGZvdW5kXG4gICAgICAgIGluc2VydEF0ID0gcHJlY2VlZElkeCArIDE7XG4gICAgICB9XG4gICAgfVxuICAgIG5ld0l0ZW1zID0gYXJyYXlJbnNlcnQobmV3SXRlbXMsIGluc2VydEF0LCBpdGVtKTtcbiAgfVxuICByZXR1cm4gbmV3SXRlbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGU6IFZpc1N0YXRlLCBsYXllckNvbmZpZzogYW55KTogTGF5ZXIgfCBudWxsIHtcbiAgLy8gY2hlY2sgaWYgdGhlIGxheWVyIGNvbmZpZyBpcyBwYXJzZWRcbiAgY29uc3Qgc2F2ZWRMYXllckNvbmZpZyA9IGlzU2F2ZWRMYXllckNvbmZpZ1YxKGxheWVyQ29uZmlnKTtcbiAgY29uc3QgcGFyc2VkTGF5ZXJDb25maWcgPSBzYXZlZExheWVyQ29uZmlnXG4gICAgPyBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbGF5ZXJDb25maWcpXG4gICAgOiBsYXllckNvbmZpZztcblxuICBpZiAoIXBhcnNlZExheWVyQ29uZmlnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gZmlyc3QgdmFsaWRhdGUgY29uZmlnIGFnYWluc3QgZGF0YXNldFxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBbcGFyc2VkTGF5ZXJDb25maWddLFxuICAgIHthbGxvd0VtcHR5Q29sdW1uOiB0cnVlLCBrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWw6IHNhdmVkTGF5ZXJDb25maWd9XG4gICk7XG5cbiAgaWYgKGZhaWxlZD8ubGVuZ3RoIHx8ICF2YWxpZGF0ZWQubGVuZ3RoKSB7XG4gICAgLy8gZmFpbGVkXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlZFswXTtcbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBmaWx0ZXIgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRmlsdGVyKFxuICBuZXdGaWx0ZXI6IEZpbHRlcixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRGaWx0ZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZSh7ZmlsdGVyczogW25ld0ZpbHRlcl19LCBzY2hlbWEpO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5maWx0ZXJzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBsYXllciBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVMYXllcihcbiAgbmV3TGF5ZXI6IExheWVyLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZExheWVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoXG4gICAge2xheWVyczogW25ld0xheWVyXSwgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkXX0sXG4gICAgc2NoZW1hXG4gICk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmxheWVycz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgZWZmZWN0IGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUVmZmVjdChcbiAgbmV3RWZmZWN0OiBFZmZlY3RUeXBlLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZEVmZmVjdCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKFxuICAgIHtlZmZlY3RzOiBbbmV3RWZmZWN0XSwgZWZmZWN0T3JkZXI6IFtuZXdFZmZlY3QuaWRdfSxcbiAgICBzY2hlbWFcbiAgKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8uZWZmZWN0cz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCB2aXMgc3RhdGUgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVWaXNTdGF0ZShcbiAgdmlzU3RhdGU6IFBhcnRpYWw8VmlzU3RhdGU+LFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZFZpc1N0YXRlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2F2ZWRTdGF0ZSA9IHNjaGVtYS5nZXRDb25maWdUb1NhdmUoe1xuICAgIHZpc1N0YXRlXG4gIH0pO1xuICByZXR1cm4gc2F2ZWRTdGF0ZSA/IHNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKHNhdmVkU3RhdGUpPy52aXNTdGF0ZSA6IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJzIGZyb20gZGUtc2VyaWFsaXplZCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgbGF5ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBmcm9tQ29uZmlnXG4gICAgPyBnZXRMYXllck9yZGVyRnJvbUxheWVycyhsYXllcnNUb01lcmdlKVxuICAgIDogc3RhdGUucHJlc2VydmVMYXllck9yZGVyO1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGF5ZXJzVG9NZXJnZSkgfHwgIWxheWVyc1RvTWVyZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGRvbid0IG1lcmdlIGxheWVyIGlmIGRhdGFzZXQgaXMgYmVpbmcgbWVyZ2VkXG4gIGNvbnN0IHVubWVyZ2VkOiBQYXJzZWRMYXllcltdID0gW107XG4gIGNvbnN0IHRvTWVyZ2U6IFBhcnNlZExheWVyW10gPSBbXTtcbiAgbGF5ZXJzVG9NZXJnZS5mb3JFYWNoKChsOiBQYXJzZWRMYXllcikgPT4ge1xuICAgIGlmIChsPy5jb25maWc/LmRhdGFJZCAmJiBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tsLmNvbmZpZy5kYXRhSWRdKSB7XG4gICAgICB1bm1lcmdlZC5wdXNoKGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b01lcmdlLnB1c2gobCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7dmFsaWRhdGVkOiBtZXJnZWRMYXllciwgZmFpbGVkfSA9IHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgdG9NZXJnZSxcbiAgICB7a2VlcFVubGFiZWxlZEFnZ3JlZ2F0aW9uVGV4dExhYmVsOiB0cnVlfVxuICApO1xuICB1bm1lcmdlZC5wdXNoKC4uLmZhaWxlZCk7XG4gIC8vIHB1dCBuZXcgbGF5ZXJzIGluIGZyb250IG9mIGN1cnJlbnQgbGF5ZXJzXG4gIGNvbnN0IHtuZXdMYXllck9yZGVyLCBuZXdMYXllcnN9ID0gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gICAgc3RhdGUubGF5ZXJzLFxuICAgIG1lcmdlZExheWVyLFxuICAgIHN0YXRlLmxheWVyT3JkZXIsXG4gICAgcHJlc2VydmVMYXllck9yZGVyXG4gICk7XG5cbiAgbGV0IG1lcmdlZFN0YXRlOiBTID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXIsXG4gICAgcHJlc2VydmVMYXllck9yZGVyLFxuICAgIGxheWVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmxheWVyVG9CZU1lcmdlZCwgLi4udW5tZXJnZWRdXG4gIH07XG5cbiAgLy8gQXBwbHkgcGVuZGluZyBsYXllck9yZGVyIHdpdGggZ3JvdXBzIGlmIGxheWVycyBhcmUgbm93IGF2YWlsYWJsZVxuICBpZiAobWVyZ2VkU3RhdGUubGF5ZXJPcmRlclRvQmVNZXJnZWQgJiYgbWVyZ2VkU3RhdGUubGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBzYXZlZE9yZGVyID0gbWVyZ2VkU3RhdGUubGF5ZXJPcmRlclRvQmVNZXJnZWQ7XG4gICAgbWVyZ2VkU3RhdGUgPSBtZXJnZUxheWVyT3JkZXIobWVyZ2VkU3RhdGUsIHNhdmVkT3JkZXIpO1xuICAgIC8vIEtlZXAgc2F2ZWRMYXllck9yZGVyIGF2YWlsYWJsZSBmb3IgZnV0dXJlIGRlZmVycmVkIGxheWVyc1xuICAgIGlmIChtZXJnZWRTdGF0ZS5sYXllclRvQmVNZXJnZWQubGVuZ3RoID4gMCkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSB7Li4ubWVyZ2VkU3RhdGUsIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBzYXZlZE9yZGVyfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkU3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMYXllckF0UmlnaHRPcmRlcihcbiAgY3VycmVudExheWVycyxcbiAgbGF5ZXJzVG9JbnNlcnQsXG4gIGN1cnJlbnRPcmRlcixcbiAgcHJlc2VydmVkT3JkZXI6IHN0cmluZ1tdID0gW11cbikge1xuICBpZiAoIWxheWVyc1RvSW5zZXJ0Py5sZW5ndGgpIHtcbiAgICByZXR1cm4ge25ld0xheWVyczogY3VycmVudExheWVycywgbmV3TGF5ZXJPcmRlcjogY3VycmVudE9yZGVyfTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRMYXllclF1ZXVlID0gY3VycmVudE9yZGVyXG4gICAgLmZpbHRlcihlbnRyeSA9PiB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKVxuICAgIC5tYXAoaWQgPT4gZmluZEJ5SWQoaWQpKGN1cnJlbnRMYXllcnMpKVxuICAgIC5maWx0ZXIobGF5ZXIgPT4gQm9vbGVhbihsYXllcikpO1xuICBjb25zdCBuZXdMYXllcnMgPSBjdXJyZW50TGF5ZXJzLmNvbmNhdChsYXllcnNUb0luc2VydCk7XG4gIGNvbnN0IG5ld0xheWVyT3JkZXJRdWV1ZSA9IGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gICAgY3VycmVudExheWVyUXVldWUsXG4gICAgbGF5ZXJzVG9JbnNlcnQsXG4gICAgcHJlc2VydmVkT3JkZXIsXG4gICAgdHJ1ZVxuICApO1xuXG4gIGNvbnN0IG5ld0ZsYXRMYXllck9yZGVyID0gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMobmV3TGF5ZXJPcmRlclF1ZXVlKTtcblxuICAvLyBJZiBubyBncm91cHMgZXhpc3QgaW4gY3VycmVudCBvcmRlciwganVzdCB1c2UgdGhlIG5ldyBmbGF0IG9yZGVyXG4gIGNvbnN0IGhhc0dyb3VwcyA9IGN1cnJlbnRPcmRlci5zb21lKGVudHJ5ID0+IGlzUGxhaW5PYmplY3QoZW50cnkpKTtcbiAgaWYgKCFoYXNHcm91cHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmV3TGF5ZXJPcmRlcjogbmV3RmxhdExheWVyT3JkZXIsXG4gICAgICBuZXdMYXllcnNcbiAgICB9O1xuICB9XG5cbiAgLy8gUmVidWlsZCBsYXllck9yZGVyIHByZXNlcnZpbmcgZ3JvdXBzIGluIHRoZWlyIHJlbGF0aXZlIHBvc2l0aW9ucy5cbiAgLy8gUmVwbGFjZSBlYWNoIHN0cmluZyBlbnRyeSB3aXRoIGl0cyB1cGRhdGVkIHBvc2l0aW9uIGZyb20gbmV3RmxhdExheWVyT3JkZXIsXG4gIC8vIGFuZCBrZWVwIGdyb3VwcyBhcy1pcy5cbiAgY29uc3QgZXhpc3RpbmdGbGF0SWRzID0gbmV3IFNldChcbiAgICBjdXJyZW50T3JkZXIuZmlsdGVyKGVudHJ5ID0+IHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIGFzIHN0cmluZ1tdXG4gICk7XG4gIGNvbnN0IG5ld0luc2VydGVkSWRzID0gbmV3RmxhdExheWVyT3JkZXIuZmlsdGVyKGlkID0+ICFleGlzdGluZ0ZsYXRJZHMuaGFzKGlkKSk7XG5cbiAgLy8gUmVidWlsZDogd2FsayB0aHJvdWdoIGN1cnJlbnRPcmRlciwgcmVwbGFjZSBzdHJpbmcgZW50cmllcyB3aXRoIHRoZWlyXG4gIC8vIG5ldyBwb3NpdGlvbiBlcXVpdmFsZW50cyBmcm9tIG5ld0ZsYXRMYXllck9yZGVyLCB0aGVuIGFwcGVuZCBhbnkgbmV3bHkgaW5zZXJ0ZWQgbGF5ZXJzXG4gIGNvbnN0IHJlc3VsdDogTGF5ZXJPcmRlciA9IFtdO1xuICBjb25zdCBmbGF0UXVldWUgPSBbLi4ubmV3RmxhdExheWVyT3JkZXIuZmlsdGVyKGlkID0+IGV4aXN0aW5nRmxhdElkcy5oYXMoaWQpKV07XG4gIGxldCBmbGF0SWR4ID0gMDtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGN1cnJlbnRPcmRlcikge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgcmVzdWx0LnB1c2goZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVwbGFjZSB3aXRoIGNvcnJlc3BvbmRpbmcgZW50cnkgZnJvbSByZW9yZGVyZWQgZmxhdCBsaXN0XG4gICAgICBpZiAoZmxhdElkeCA8IGZsYXRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZmxhdFF1ZXVlW2ZsYXRJZHhdKTtcbiAgICAgICAgZmxhdElkeCsrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFwcGVuZCBhbnkgbmV3bHkgaW5zZXJ0ZWQgbGF5ZXJzIGF0IHRoZSBmcm9udCAodGhleSBhcmUgbmV3KVxuICByZXR1cm4ge1xuICAgIG5ld0xheWVyT3JkZXI6IFsuLi5uZXdJbnNlcnRlZElkcywgLi4ucmVzdWx0XSxcbiAgICBuZXdMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBzYXZlZCBsYXllck9yZGVyIHdpdGggY3VycmVudCBzdGF0ZSB0byByZXN0b3JlIGxheWVyIGdyb3Vwcy5cbiAqIENhbGxlZCBhZnRlciBsYXllcnMgaGF2ZSBiZWVuIG1lcmdlZC4gSWYgdGhlIHNhdmVkIGNvbmZpZyBjb250YWlucyBhIGxheWVyT3JkZXJcbiAqIHdpdGggZ3JvdXBzLCB0aGlzIHJlcGxhY2VzIHRoZSBmbGF0IGxheWVyT3JkZXIgd2l0aCB0aGUgc2F2ZWQgaGllcmFyY2hpY2FsIG9uZSxcbiAqIGZpbHRlcmluZyBvdXQgYW55IGxheWVyIElEcyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBjdXJyZW50IHN0YXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllck9yZGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBzYXZlZExheWVyT3JkZXI/OiBhbnlbXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBpZiAoIXNhdmVkTGF5ZXJPcmRlciB8fCAhQXJyYXkuaXNBcnJheShzYXZlZExheWVyT3JkZXIpIHx8IHNhdmVkTGF5ZXJPcmRlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgc2F2ZWQgbGF5ZXJPcmRlciBjb250YWlucyBhbnkgZ3JvdXBzXG4gIGNvbnN0IGhhc0dyb3VwcyA9IHNhdmVkTGF5ZXJPcmRlci5zb21lKGVudHJ5ID0+IGlzUGxhaW5PYmplY3QoZW50cnkpKTtcbiAgaWYgKCFoYXNHcm91cHMpIHtcbiAgICAvLyBObyBncm91cHMgLSB0aGUgbGF5ZXIgbWVyZ2VyIGFscmVhZHkgaGFuZGxlZCBvcmRlcmluZyB2aWEgcHJlc2VydmVMYXllck9yZGVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gSWYgbGF5ZXJzIGhhdmVuJ3QgYmVlbiBtZXJnZWQgeWV0LCBzdG9yZSBmb3IgbGF0ZXJcbiAgaWYgKHN0YXRlLmxheWVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllck9yZGVyVG9CZU1lcmdlZDogc2F2ZWRMYXllck9yZGVyXG4gICAgfTtcbiAgfVxuXG4gIC8vIEJ1aWxkIGEgc2V0IG9mIHZhbGlkIGxheWVyIElEcyBmcm9tIGN1cnJlbnQgc3RhdGVcbiAgY29uc3QgdmFsaWRMYXllcklkcyA9IG5ldyBTZXQoc3RhdGUubGF5ZXJzLm1hcChsID0+IGwuaWQpKTtcblxuICAvLyBSZWN1cnNpdmVseSBmaWx0ZXIgdGhlIHNhdmVkIGxheWVyT3JkZXIgdG8gb25seSBpbmNsdWRlIHZhbGlkIGxheWVyc1xuICBmdW5jdGlvbiBmaWx0ZXJMYXllck9yZGVyKG9yZGVyOiBhbnlbXSk6IExheWVyT3JkZXIge1xuICAgIGNvbnN0IHJlc3VsdDogTGF5ZXJPcmRlciA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2Ygb3JkZXIpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgICBjb25zdCBncm91cCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRHcm91cE9yZGVyID0gZmlsdGVyTGF5ZXJPcmRlcihncm91cC5sYXllck9yZGVyKTtcbiAgICAgICAgLy8gS2VlcCB0aGUgZ3JvdXAgZXZlbiBpZiBlbXB0eSAodXNlciBtYXkgd2FudCB0aGUgZW1wdHkgZ3JvdXApXG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICBsYXllck9yZGVyOiBmaWx0ZXJlZEdyb3VwT3JkZXJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgJiYgdmFsaWRMYXllcklkcy5oYXMoZW50cnkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGNvbnN0IHJlc3RvcmVkTGF5ZXJPcmRlciA9IGZpbHRlckxheWVyT3JkZXIoc2F2ZWRMYXllck9yZGVyKTtcblxuICAvLyBGaW5kIGFueSBsYXllcnMgaW4gdGhlIGN1cnJlbnQgc3RhdGUgdGhhdCBhcmVuJ3QgaW4gdGhlIHJlc3RvcmVkIG9yZGVyXG4gIC8vIChjb3VsZCBoYXBwZW4gaWYgbGF5ZXJzIHdlcmUgYWRkZWQgYmV0d2VlbiBzYXZlIGFuZCBsb2FkKVxuICBjb25zdCBsYXllcklkc0luUmVzdG9yZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZnVuY3Rpb24gY29sbGVjdElkcyhvcmRlcjogYW55W10pIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIG9yZGVyKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29sbGVjdElkcygoZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5sYXllck9yZGVyKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICBsYXllcklkc0luUmVzdG9yZWQuYWRkKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29sbGVjdElkcyhyZXN0b3JlZExheWVyT3JkZXIpO1xuXG4gIC8vIEFkZCBhbnkgbWlzc2luZyBsYXllcnMgYXQgdGhlIHRvcFxuICBjb25zdCBtaXNzaW5nTGF5ZXJzID0gc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+ICFsYXllcklkc0luUmVzdG9yZWQuaGFzKGwuaWQpKS5tYXAobCA9PiBsLmlkKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyT3JkZXI6IFsuLi5taXNzaW5nTGF5ZXJzLCAuLi5yZXN0b3JlZExheWVyT3JkZXJdLFxuICAgIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25zIHdpdGggc2F2ZWQgY29uZmlnXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvbnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiB8IHVuZGVmaW5lZFxuKTogUyB7XG4gIGNvbnN0IG1lcmdlZDogTmVzdGVkUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuICBjb25zdCB1bm1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuXG4gIGlmIChpbnRlcmFjdGlvblRvQmVNZXJnZWQpIHtcbiAgICAoT2JqZWN0LmtleXMoaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKSBhcyBBcnJheTxrZXlvZiBTYXZlZEludGVyYWN0aW9uQ29uZmlnPikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKCFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudENvbmZpZyA9XG4gICAgICAgIGtleSA9PT0gJ3Rvb2x0aXAnIHx8XG4gICAgICAgIGtleSA9PT0gJ2JydXNoJyB8fFxuICAgICAgICBrZXkgPT09ICdnZW9jb2RlcicgfHxcbiAgICAgICAga2V5ID09PSAnbGVnZW5kJyB8fFxuICAgICAgICBrZXkgPT09ICd6b29tT3BhY2l0eSdcbiAgICAgICAgICA/IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0uY29uZmlnXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICBjb25zdCB7ZW5hYmxlZCwgLi4uY29uZmlnU2F2ZWR9ID0gaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkW2tleV0gfHwge307XG5cbiAgICAgIGxldCBjb25maWdUb01lcmdlID0gY29uZmlnU2F2ZWQ7XG5cbiAgICAgIGlmIChrZXkgPT09ICd0b29sdGlwJykge1xuICAgICAgICBjb25zdCBzYXZlZFRvb2x0aXBDb25maWcgPSBjb25maWdTYXZlZCBhcyBTYXZlZEludGVyYWN0aW9uQ29uZmlnWyd0b29sdGlwJ107XG4gICAgICAgIGNvbnN0IHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9ID0gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgc2F2ZWRUb29sdGlwQ29uZmlnXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gbWVyZ2UgbmV3IGRhdGFzZXQgdG9vbHRpcHMgd2l0aCBvcmlnaW5hbCBkYXRhc2V0IHRvb2x0aXBzXG4gICAgICAgIGNvbmZpZ1RvTWVyZ2UgPSB7XG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgICAuLi4oY3VycmVudENvbmZpZyBhcyBUb29sdGlwSW5mb1snY29uZmlnJ10pLmZpZWxkc1RvU2hvdyxcbiAgICAgICAgICAgIC4uLm1lcmdlZFRvb2x0aXBcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLihzYXZlZFRvb2x0aXBDb25maWcudGltZXpvbmUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7dGltZXpvbmU6IHNhdmVkVG9vbHRpcENvbmZpZy50aW1lem9uZX1cbiAgICAgICAgICAgIDoge30pXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHVubWVyZ2VkVG9vbHRpcCkubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIHVubWVyZ2VkLnRvb2x0aXAgPSB7ZmllbGRzVG9TaG93OiB1bm1lcmdlZFRvb2x0aXAsIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCl9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1lcmdlZFtrZXldID0ge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLFxuICAgICAgICBlbmFibGVkOiBCb29sZWFuKGVuYWJsZWQpLFxuICAgICAgICAuLi4oY3VycmVudENvbmZpZ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjb25maWc6IHBpY2soXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLi4uY3VycmVudENvbmZpZyxcbiAgICAgICAgICAgICAgICAgIC4uLmNvbmZpZ1RvTWVyZ2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25maWcpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAuLi5tZXJnZWRcbiAgICB9LFxuICAgIGludGVyYWN0aW9uVG9CZU1lcmdlZDogc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uKHN0YXRlLCB1bm1lcmdlZClcbiAgfTtcbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUludGVyYWN0aW9uQ29uZmlncyhjb25maWdzOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnW10pOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnIHtcbiAgY29uc3QgY29tYmluZWQgPSB7Li4uY29uZmlnc1swXX07XG4gIC8vIGBsZWdlbmRgIGlzIG9wdGlvbmFsIG9uIG9sZGVyIHNhdmVkIG1hcHM7IHNlZWQgaXQgc28gYSBsYXRlciBjb25maWcgaXMgbm90IGRyb3BwZWQuXG4gIGlmICghY29tYmluZWQubGVnZW5kKSB7XG4gICAgY29uc3Qgd2l0aExlZ2VuZCA9IGNvbmZpZ3MuZmluZChjID0+IGMubGVnZW5kKTtcbiAgICBpZiAod2l0aExlZ2VuZD8ubGVnZW5kKSB7XG4gICAgICBjb21iaW5lZC5sZWdlbmQgPSB3aXRoTGVnZW5kLmxlZ2VuZDtcbiAgICB9XG4gIH1cbiAgLy8gU2FtZSBmb3IgZmFkZS1vbi16b29tOiBhbiBvbGRlciBjb25maWcgaW4gZnJvbnQgbXVzdCBub3QgZHJvcCBjb250cm9sbGVycyBmcm9tIGEgbGF0ZXIgb25lLlxuICBpZiAoIWNvbWJpbmVkLnpvb21PcGFjaXR5KSB7XG4gICAgY29uc3Qgd2l0aFpvb21PcGFjaXR5ID0gY29uZmlncy5maW5kKGMgPT4gYy56b29tT3BhY2l0eSk7XG4gICAgaWYgKHdpdGhab29tT3BhY2l0eT8uem9vbU9wYWNpdHkpIHtcbiAgICAgIGNvbWJpbmVkLnpvb21PcGFjaXR5ID0gd2l0aFpvb21PcGFjaXR5Lnpvb21PcGFjaXR5O1xuICAgIH1cbiAgfVxuICAvLyBoYW5kbGUgZWFjaCBwcm9wZXJ0eSBrZXkgb2YgYW4gYEludGVyYWN0aW9uQ29uZmlnYCwgZS5nLiB0b29sdGlwLCBnZW9jb2RlciwgYnJ1c2gsIGNvb3JkaW5hdGVcbiAgLy8gYnkgY29tYmluaW5nIHZhbHVlcyBmb3IgZWFjaCBhbW9uZyBhbGwgcGFzc2VkIGluIGNvbmZpZ3NcblxuICBmb3IgKGNvbnN0IGtleSBpbiBjb21iaW5lZCkge1xuICAgIGNvbnN0IHRvQmVDb21iaW5lZFByb3BzID0gY29uZmlncy5tYXAoYyA9PiBjW2tleV0pO1xuXG4gICAgLy8gYWxsIG9mIHRoZXNlIGhhdmUgYW4gZW5hYmxlZCBib29sZWFuXG4gICAgY29tYmluZWRba2V5XSA9IHtcbiAgICAgIC8vIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIGVuYWJsZWQgdmFsdWVzIHRydWU/XG4gICAgICBlbmFibGVkOiB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uZW5hYmxlZClcbiAgICB9O1xuXG4gICAgaWYgKGtleSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAvLyBhcmUgYW55IG9mIHRoZSBjb25maWdzJyBjb21wYXJlTW9kZSB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGNvbWJpbmVkW2tleV0uY29tcGFyZU1vZGUgPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uY29tcGFyZU1vZGUpO1xuXG4gICAgICAvLyByZXR1cm4gdGhlIGNvbXBhcmUgdHlwZSBtb2RlLCBpdCB3aWxsIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZVxuICAgICAgY29tYmluZWRba2V5XS5jb21wYXJlVHlwZSA9IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKFxuICAgICAgICB0b0JlQ29tYmluZWRQcm9wcy5tYXAocCA9PiBwLmNvbXBhcmVUeXBlKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgaGFzVGltZXpvbmUgPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8udGltZXpvbmUgIT09IHVuZGVmaW5lZCk7XG4gICAgICBpZiAoaGFzVGltZXpvbmUpIHtcbiAgICAgICAgY29tYmluZWRba2V5XS50aW1lem9uZSA9IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKFxuICAgICAgICAgIHRvQmVDb21iaW5lZFByb3BzLm1hcChwID0+IHA/LnRpbWV6b25lKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBjb21iaW5lIGZpZWxkc1RvU2hvdyBhbW9uZyBhbGwgZGF0YXNldCBpZHNcbiAgICAgIGNvbWJpbmVkW2tleV0uZmllbGRzVG9TaG93ID0gdG9CZUNvbWJpbmVkUHJvcHNcbiAgICAgICAgLm1hcChwID0+IHAuZmllbGRzVG9TaG93KVxuICAgICAgICAucmVkdWNlKChhY2MsIG5leHRGaWVsZHNUb1Nob3cpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG5leHREYXRhSWRLZXkgaW4gbmV4dEZpZWxkc1RvU2hvdykge1xuICAgICAgICAgICAgY29uc3QgbmV4dFRvb2x0aXBGaWVsZHMgPSBuZXh0RmllbGRzVG9TaG93W25leHREYXRhSWRLZXldO1xuICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0pIHtcbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGRhdGFzZXQgaWQgaXMgbm90IHByZXNlbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICAgICAgICAgIC8vIHRoZW4gYWRkIGl0IHdpdGggaXRzIHRvb2x0aXAgZmllbGRzXG4gICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XSA9IG5leHRUb29sdGlwRmllbGRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHRoZSBkYXRhc2V0IGlkIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgICAgICAgICAgLy8gc28gb25seSBhZGQgdGhlIG5leHQgdG9vbHRpcCBmaWVsZHMgZm9yIHRoaXMgZGF0YXNldCdzIGFycmF5IGlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5IHByZXNlbnQsXG4gICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSB0b29sdGlwRmllbGQubmFtZSBwcm9wZXJ0eSBmb3IgdW5pcXVlbmVzc1xuICAgICAgICAgICAgICBuZXh0VG9vbHRpcEZpZWxkcy5mb3JFYWNoKG5leHRURiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0uZmluZCgoe25hbWV9KSA9PiBuZXh0VEYubmFtZSA9PT0gbmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XS5wdXNoKG5leHRURik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdicnVzaCcpIHtcbiAgICAgIC8vIGtlZXAgdGhlIGJpZ2dlc3QgYnJ1c2ggc2l6ZVxuICAgICAgY29tYmluZWRba2V5XS5zaXplID1cbiAgICAgICAgYWdncmVnYXRlKHRvQmVDb21iaW5lZFByb3BzLCBBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtLCBwID0+IHAuc2l6ZSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnZ2VvY29kZXInKSB7XG4gICAgICBjb21iaW5lZFtrZXldLmxpbWl0U2VhcmNoID0gdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmxpbWl0U2VhcmNoKTtcbiAgICAgIGNvbnN0IGNvbG9yID0gdG9CZUNvbWJpbmVkUHJvcHMuZmluZChwID0+IHA/LmNvbG9yKT8uY29sb3I7XG4gICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgY29tYmluZWRba2V5XS5jb2xvciA9IGNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdsZWdlbmQnKSB7XG4gICAgICBjb21iaW5lZFtrZXldLmhpZGVJbnZpc2libGVMYXllcnMgPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uaGlkZUludmlzaWJsZUxheWVycyk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3pvb21PcGFjaXR5JyAmJiBjb21iaW5lZC56b29tT3BhY2l0eSkge1xuICAgICAgY29tYmluZWQuem9vbU9wYWNpdHkuY29udHJvbGxlcnMgPSBjb21iaW5lWm9vbU9wYWNpdHlDb250cm9sbGVycyh0b0JlQ29tYmluZWRQcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbWJpbmVkO1xufVxuXG5mdW5jdGlvbiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb248UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHVubWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+XG4pIHtcbiAgaWYgKCF1bm1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93KSB7XG4gICAgcmV0dXJuIHN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHRvb2x0aXA6IHtcbiAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZC50b29sdGlwLFxuICAgICAgLi4uKHR5cGVvZiB1bm1lcmdlZD8udG9vbHRpcD8uZW5hYmxlZCA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgID8ge2VuYWJsZWQ6IHVubWVyZ2VkLnRvb2x0aXAuZW5hYmxlZH1cbiAgICAgICAgOiB7fSksXG4gICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3csXG4gICAgICAgIC4uLnVubWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3dcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMoaW50ZXJhY3Rpb25Db25maWcsIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAoaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLFxuICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICBbZGF0YUlkVG9SZXBsYWNlXTogaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1tkYXRhSWRdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIE1lcmdlIHNwbGl0TWFwcyBjb25maWcgd2l0aCBjdXJyZW50IHZpc1N0ZXRlLlxuICogUGFuZWxzIGFyZSBtYXRjaGVkIGJ5IGluZGV4OiBpbmRleCBpIG9mIGBzcGxpdE1hcHNgLCBgc3RhdGUuc3BsaXRNYXBzYCBhbmRcbiAqIGBzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkYCBpcyB0aGUgc2FtZSBtYXAgcGFuZWwuXG4gKiAxLiBpZiBjdXJyZW50IG1hcCBpcyBzcGxpdCwgYnV0IHNwbGl0TWFwIERPRVNOT1QgY29udGFpbiBtYXBzXG4gKiAgICA6IGRvbid0IG1lcmdlIGFueXRoaW5nXG4gKiAyLiBpZiBjdXJyZW50IG1hcCBpcyBOT1Qgc3BsaXQsIGJ1dCBzcGxpdE1hcHMgY29udGFpbiBtYXBzXG4gKiAgICA6IGFkZCB0byBzcGxpdE1hcHMsIGFuZCBhZGQgY3VycmVudCBsYXllcnMgdG8gc3BsaXRNYXBzLlxuICogICAgICBQYW5lbHMgYXJlIGNyZWF0ZWQgb25jZSBvbmUgb2YgdGhlbSBjYW4gYmUgbWVyZ2VkOiBpdCBoYXMgbm8gbGF5ZXJzLCBvciBvbmUgb2YgaXRzIGxheWVycyBleGlzdHNcbiAqIDMuIGxheWVycyB0aGF0IGRvbid0IGV4aXN0IHlldFxuICogICAgOiBzYXZlIHRvIHNwbGl0TWFwc1RvQmVNZXJnZWQsIGluIHRoZSBwYW5lbCBhdCB0aGUgc2FtZSBpbmRleFxuICogQSBsYXllciBsaXN0ZWQgaW4gc3BsaXRNYXBzIG9ubHkgc2hvd3MgaW4gdGhlIHBhbmVscyB0aGF0IGxpc3QgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVNwbGl0TWFwczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgc3BsaXRNYXBzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydzcGxpdE1hcHMnXSA9IFtdXG4pOiBTIHtcbiAgY29uc3QgbGF5ZXJFeGlzdHMgPSAoaWQ6IHN0cmluZykgPT4gc3RhdGUubGF5ZXJzLnNvbWUobCA9PiBsLmlkID09PSBpZCk7XG4gIGNvbnN0IGNyZWF0ZVBhbmVscyA9XG4gICAgc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA+IDAgfHxcbiAgICBzcGxpdE1hcHMuc29tZShzbSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBPYmplY3Qua2V5cyhzbS5sYXllcnMpO1xuICAgICAgcmV0dXJuICFpZHMubGVuZ3RoIHx8IGlkcy5zb21lKGxheWVyRXhpc3RzKTtcbiAgICB9KTtcbiAgY29uc3QgY3VycmVudExheWVycyA9IGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcChcbiAgICBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gIXNwbGl0TWFwcy5zb21lKHNtID0+IGwuaWQgaW4gc20ubGF5ZXJzKSlcbiAgKTtcblxuICBjb25zdCBtZXJnZWQgPSBbLi4uc3RhdGUuc3BsaXRNYXBzXTtcbiAgY29uc3QgdW5tZXJnZWQ6IHR5cGVvZiBzcGxpdE1hcHMgPSBbXTtcbiAgc3BsaXRNYXBzLmZvckVhY2goKHNtLCBpKSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHNtLmxheWVycyk7XG4gICAgaWYgKGNyZWF0ZVBhbmVscykge1xuICAgICAgLy8gY3JlYXRlIG1hcCBwYW5lbCBpZiBjdXJyZW50IG1hcCBpcyBub3Qgc3BsaXQsIGtlZXAgaWRcbiAgICAgIGNvbnN0IHBhbmVsID0gbWVyZ2VkW2ldIHx8IHsuLi5zbSwgbGF5ZXJzOiBjdXJyZW50TGF5ZXJzfTtcbiAgICAgIG1lcmdlZFtpXSA9IHtcbiAgICAgICAgLi4ucGFuZWwsXG4gICAgICAgIGxheWVyczogey4uLnBhbmVsLmxheWVycywgLi4uT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMuZmlsdGVyKChbaWRdKSA9PiBsYXllckV4aXN0cyhpZCkpKX1cbiAgICAgIH07XG4gICAgfVxuICAgIHVubWVyZ2VkW2ldID0gey4uLnNtLCBsYXllcnM6IE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzLmZpbHRlcigoW2lkXSkgPT4gIWxheWVyRXhpc3RzKGlkKSkpfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IG1lcmdlZCxcbiAgICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiB1bm1lcmdlZC5zb21lKHNtID0+IE9iamVjdC5rZXlzKHNtLmxheWVycykubGVuZ3RoKVxuICAgICAgPyBjb21iaW5lU3BsaXRNYXBzQnlJbmRleChzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkLCB1bm1lcmdlZClcbiAgICAgIDogc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZFxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGNoYXJ0cyB3aXRoIHNhdmVkIGNvbmZpZy4gQ2hhcnRzIHdob3NlIGRhdGFzZXQgaXMgbm90IGxvYWRlZCB5ZXQgYXJlXG4gKiBwYXJrZWQgb24gYGNoYXJ0c1RvQmVNZXJnZWRgIChzYW1lIGFzIGZpbHRlcnMpIHNvIGRhdGFzZXQgcmVwbGFjZSBjYW4gcmVtYXBcbiAqIGBkYXRhSWRgIGFuZCByZXN0b3JlIHRoZW0gYWZ0ZXIgdGhlIG5ldyB0YWJsZSBsYW5kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQ2hhcnRzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBjaGFydHM6IENoYXJ0Q29uZmlnW10gfCB1bmRlZmluZWQsXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGNoYXJ0cykgfHwgIWNoYXJ0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgaW5jb21pbmdJZHMgPSBuZXcgU2V0KFxuICAgIGNoYXJ0cy5tYXAoY2hhcnQgPT4gY2hhcnQ/LmlkKS5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpKVxuICApO1xuICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQoKHN0YXRlLmNoYXJ0cyB8fCBbXSkubWFwKGNoYXJ0ID0+IGNoYXJ0LmlkKSk7XG4gIGNvbnN0IG5leHRDaGFydHM6IENoYXJ0Q29uZmlnW10gPSBbXTtcbiAgY29uc3QgZmFpbGVkOiBDaGFydENvbmZpZ1tdID0gW107XG4gIGNoYXJ0cy5mb3JFYWNoKGNoYXJ0ID0+IHtcbiAgICBpZiAoIWNoYXJ0IHx8ICFjaGFydC5pZCB8fCBleGlzdGluZ0lkcy5oYXMoY2hhcnQuaWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IENoYXJ0Q29uZmlnID0gZnJvbUNvbmZpZ1xuICAgICAgPyB7XG4gICAgICAgICAgLi4uY2hhcnQsXG4gICAgICAgICAgLy8gT2xkZXIgY29uZmlncyBvbWl0IGBwaW5uZWRgOyBrZWVwIGNoYXJ0cyB2aXNpYmxlIGxpa2UgdGhlIGxlZ2VuZC5cbiAgICAgICAgICBwaW5uZWQ6IGNoYXJ0LnBpbm5lZCAhPT0gZmFsc2UsXG4gICAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgICAgLi4uY2hhcnQuZGlzcGxheSxcbiAgICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgIGlzSnNvbkVkaXRvckFjdGl2ZTogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDogY2hhcnQ7XG4gICAgaWYgKFxuICAgICAgbm9ybWFsaXplZC5kYXRhSWQgJiZcbiAgICAgICghc3RhdGUuZGF0YXNldHNbbm9ybWFsaXplZC5kYXRhSWRdIHx8IHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW25vcm1hbGl6ZWQuZGF0YUlkXSlcbiAgICApIHtcbiAgICAgIGZhaWxlZC5wdXNoKG5vcm1hbGl6ZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBleGlzdGluZ0lkcy5hZGQobm9ybWFsaXplZC5pZCk7XG4gICAgbmV4dENoYXJ0cy5wdXNoKG5vcm1hbGl6ZWQpO1xuICB9KTtcbiAgaWYgKCFuZXh0Q2hhcnRzLmxlbmd0aCAmJiAhZmFpbGVkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0czogbmV4dENoYXJ0cy5sZW5ndGggPyBbLi4uKHN0YXRlLmNoYXJ0cyB8fCBbXSksIC4uLm5leHRDaGFydHNdIDogc3RhdGUuY2hhcnRzLFxuICAgIGNoYXJ0c1RvQmVNZXJnZWQ6IFtcbiAgICAgIC4uLihzdGF0ZS5jaGFydHNUb0JlTWVyZ2VkIHx8IFtdKS5maWx0ZXIoY2hhcnQgPT4gIWluY29taW5nSWRzLmhhcyhjaGFydC5pZCkpLFxuICAgICAgLi4uZmFpbGVkXG4gICAgXVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUNoYXJ0RGF0YXNldElkcyhcbiAgc2F2ZWRDaGFydHM6IENoYXJ0Q29uZmlnW10gfCB1bmRlZmluZWQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBDaGFydENvbmZpZ1tdIHwgbnVsbCB7XG4gIGlmICghQXJyYXkuaXNBcnJheShzYXZlZENoYXJ0cykgfHwgIXNhdmVkQ2hhcnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlcGxhY2VkID0gc2F2ZWRDaGFydHNcbiAgICAuZmlsdGVyKGNoYXJ0ID0+IGNoYXJ0Py5kYXRhSWQgPT09IGRhdGFJZClcbiAgICAubWFwKGNoYXJ0ID0+ICh7Li4uY2hhcnQsIGRhdGFJZDogZGF0YUlkVG9Vc2V9KSk7XG4gIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFZmZlY3RzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBlZmZlY3RzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydlZmZlY3RzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgbmV3RWZmZWN0cyA9IFtcbiAgICAuLi5zdGF0ZS5lZmZlY3RzLFxuICAgIC4uLihlZmZlY3RzIHx8IFtdKVxuICAgICAgLm1hcChlZmZlY3QgPT4ge1xuICAgICAgICByZXR1cm4gZnJvbUNvbmZpZ1xuICAgICAgICAgID8gY3JlYXRlRWZmZWN0KFxuICAgICAgICAgICAgICBkZWVwbWVyZ2UuYWxsKFtcbiAgICAgICAgICAgICAgICBlZmZlY3QsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLy8gY29sbGFwc2UgYWxsIHBhbmVscyB3aGVuIGxvYWRpbmcgZWZmZWN0c1xuICAgICAgICAgICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogKGVmZmVjdCBhcyBFZmZlY3RUeXBlKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKGVmZmVjdCAmJiBlZmZlY3QuaXNWYWxpZFRvU2F2ZSgpKTtcbiAgICAgIH0pXG4gIF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlcjogbmV3RWZmZWN0cy5tYXAoZWZmZWN0ID0+IGVmZmVjdC5pZClcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbm5vdGF0aW9ucyB3aXRoIHNhdmVkIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbm5vdGF0aW9uczxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhbm5vdGF0aW9uczogYW55W10pOiBTIHtcbiAgaWYgKCFhbm5vdGF0aW9ucyB8fCAhYW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChzdGF0ZS5hbm5vdGF0aW9ucy5tYXAoYSA9PiBhLmlkKSk7XG4gIGNvbnN0IHZhbGlkQW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uc1xuICAgIC5maWx0ZXIoXG4gICAgICBhID0+XG4gICAgICAgIGEgJiZcbiAgICAgICAgYS5pZCAmJlxuICAgICAgICAhZXhpc3RpbmdJZHMuaGFzKGEuaWQpICYmXG4gICAgICAgIGlzQW5ub3RhdGlvbktpbmQoYS5raW5kKSAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KGEuYW5jaG9yUG9pbnQpICYmXG4gICAgICAgIChhLmFuY2hvclBvaW50Lmxlbmd0aCA9PT0gMiB8fCBhLmFuY2hvclBvaW50Lmxlbmd0aCA9PT0gMykgJiZcbiAgICAgICAgYS5hbmNob3JQb2ludC5ldmVyeSh2YWx1ZSA9PiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKVxuICAgIClcbiAgICAubWFwKGEgPT4gKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGF1dG9TaXplOiB0cnVlLFxuICAgICAgYXV0b1NpemVZOiB0cnVlLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgbGluZUNvbG9yOiBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgICAgIGxpbmVXaWR0aDogSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gICAgICB0ZXh0V2lkdGg6IDAsXG4gICAgICB0ZXh0SGVpZ2h0OiAwLFxuICAgICAgLi4uYVxuICAgIH0pKTtcbiAgaWYgKCF2YWxpZEFubm90YXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbLi4uc3RhdGUuYW5ub3RhdGlvbnMsIC4uLnZhbGlkQW5ub3RhdGlvbnNdXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCB3aXRoIHNhdmVkIGNvbmZpZyxcbiAqIHZhbGlkYXRlIGZpZWxkc1RvU2hvd1xuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIHRvb2x0aXBDb25maWdcbiAqIEByZXR1cm4gLSB7bWVyZ2VkVG9vbHRpcDoge30sIHVubWVyZ2VkVG9vbHRpcDoge319XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB0b29sdGlwQ29uZmlnOiBQaWNrPFRvb2x0aXBJbmZvWydjb25maWcnXSwgJ2ZpZWxkc1RvU2hvdyc+IHwgbnVsbCA9IG51bGxcbikge1xuICBjb25zdCB1bm1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcbiAgY29uc3QgbWVyZ2VkVG9vbHRpcDogVG9vbHRpcEluZm9bJ2NvbmZpZyddWydmaWVsZHNUb1Nob3cnXSA9IHt9O1xuXG4gIGlmIChcbiAgICAhdG9vbHRpcENvbmZpZyB8fFxuICAgICF0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdyB8fFxuICAgICFPYmplY3Qua2V5cyh0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykubGVuZ3RoXG4gICkge1xuICAgIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZGF0YUlkIGluIHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KSB7XG4gICAgaWYgKCFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIHx8IHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICAgIC8vIGlzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICB1bm1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGRhdGFzZXQgaXMgbG9hZGVkXG4gICAgICBjb25zdCBhbGxGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcy5tYXAoZCA9PiBkLm5hbWUpO1xuICAgICAgY29uc3QgZm91bmRGaWVsZHNUb1Nob3cgPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdLmZpbHRlcihmaWVsZCA9PlxuICAgICAgICBhbGxGaWVsZHMuaW5jbHVkZXMoZmllbGQubmFtZSlcbiAgICAgICk7XG5cbiAgICAgIG1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IGZvdW5kRmllbGRzVG9TaG93O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJCbGVuZGluZyB3aXRoIHNhdmVkXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllckJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBsYXllckJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllckJsZW5kaW5nJ11cbik6IFMge1xuICBpZiAobGF5ZXJCbGVuZGluZyAmJiBMQVlFUl9CTEVORElOR1NbbGF5ZXJCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllckJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBsYXllciBibGVuZGluZyBjb25maWdzIGludG8gYSBzaW5nbGUgc3RyaW5nXG4gKiBieSByZXR1cm5pbmcgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IG9jY3VycmVuY2VcbiAqL1xuZnVuY3Rpb24gY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzKGNvbmZpZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgbGF5ZXIgYmxlbmRpbmcgdHlwZVxuICByZXR1cm4gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncyk7XG59XG5cbi8qKlxuICogTWVyZ2Ugb3ZlcmxheUJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlT3ZlcmxheUJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBvdmVybGF5QmxlbmRpbmc6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ292ZXJsYXlCbGVuZGluZyddXG4pOiBTIHtcbiAgaWYgKG92ZXJsYXlCbGVuZGluZyAmJiBPVkVSTEFZX0JMRU5ESU5HU1tvdmVybGF5QmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgb3ZlcmxheUJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBvdmVybGF5IGJsZW5kaW5nIGNvbmZpZ3MgaW50byBhIHNpbmdsZSBzdHJpbmdcbiAqIGJ5IHJldHVybmluZyB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3Qgb2NjdXJyZW5jZVxuICoqL1xuZnVuY3Rpb24gY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3MoY29uZmlnczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gcmV0dXJuIHRoZSBtb2RlIG9mIHRoZSBvdmVybGF5IGJsZW5kaW5nIHR5cGVcbiAgcmV0dXJuIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MpO1xufVxuXG4vKipcbiAqIE1lcmdlIGFuaW1hdGlvbiBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5pbWF0aW9uQ29uZmlnPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhbmltYXRpb246IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2FuaW1hdGlvbkNvbmZpZyddXG4pOiBTIHtcbiAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24uY3VycmVudFRpbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5hbmltYXRpb24sXG4gICAgICAgIGRvbWFpbjogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVBbmltYXRpb25Db25maWdzKGNvbmZpZ3M6IFNhdmVkQW5pbWF0aW9uQ29uZmlnW10pOiBTYXZlZEFuaW1hdGlvbkNvbmZpZyB7XG4gIC8vIGdldCB0aGUgc21hbGxlc3QgdmFsdWVzIG9mIGN1cnJlbnRUaW1lIGFuZCBzcGVlZCBhbW9uZyBhbGwgY29uZmlnc1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnRUaW1lOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLmN1cnJlbnRUaW1lKSA/PyBudWxsLFxuICAgIHNwZWVkOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLnNwZWVkKSA/PyBudWxsLFxuICAgIC8vIGFuZCB0aGUgbW9zdCBjb21tb24gdGltZSBmb3JtYXQgYW5kIHRpbWV6b25lIGFtb25nIHRoZSBjb25maWdzIHRoYXQgc2V0IG9uZVxuICAgIHRpbWVGb3JtYXQ6IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MubWFwKGMgPT4gYy50aW1lRm9ybWF0KSksXG4gICAgdGltZXpvbmU6IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MubWFwKGMgPT4gYy50aW1lem9uZSkpXG4gIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29sdW1ucyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqXG4gKiBAcGFyYW0gZmllbGRzXG4gKiBAcGFyYW0gc2F2ZWRDb2xzXG4gKiBAcGFyYW0gZW1wdHlDb2xzXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybiAtIHZhbGlkYXRlZCBjb2x1bW5zIG9yIG51bGxcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIHNhdmVkQ29sczoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgfSA9IHt9LFxuICBlbXB0eUNvbHM6IExheWVyQ29sdW1ucyxcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbikge1xuICAvLyBQcmVwYXJlIGNvbHVtbnMgZm9yIHRoZSB2YWxpZGF0b3JcbiAgY29uc3QgY29sdW1uczogdHlwZW9mIGVtcHR5Q29scyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhlbXB0eUNvbHMpKSB7XG4gICAgY29sdW1uc1trZXldID0gey4uLmVtcHR5Q29sc1trZXldfTtcblxuICAgIGNvbnN0IHNhdmVkID0gc2F2ZWRDb2xzW2tleV07XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IGZpZWxkcy5maW5kSW5kZXgoKHtuYW1lfSkgPT4gbmFtZSA9PT0gc2F2ZWQpO1xuXG4gICAgICBpZiAoZmllbGRJZHggPiAtMSkge1xuICAgICAgICAvLyB1cGRhdGUgZm91bmQgY29sdW1uc1xuICAgICAgICBjb2x1bW5zW2tleV0uZmllbGRJZHggPSBmaWVsZElkeDtcbiAgICAgICAgY29sdW1uc1trZXldLnZhbHVlID0gc2F2ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZmluZCBhY3R1YWwgY29sdW1uIGZpZWxkSWR4LCBpbiBjYXNlIGl0IGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGFsbENvbEZvdW5kID0gT2JqZWN0LmtleXMoY29sdW1ucykuZXZlcnkoa2V5ID0+XG4gICAgdmFsaWRhdGVDb2x1bW4oY29sdW1uc1trZXldLCBjb2x1bW5zLCBmaWVsZHMpXG4gICk7XG5cbiAgY29uc3QgcnYgPSBhbGxDb2xGb3VuZCA/IGNvbHVtbnMgOiBudWxsO1xuICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICBjb25zdCByZXF1aXJlZENvbHVtbnMgPSBPYmplY3Qua2V5cyhlbXB0eUNvbHMpLmZpbHRlcihrID0+ICFlbXB0eUNvbHNba10ub3B0aW9uYWwpO1xuICAgIGNvbnN0IG1pc3NpbmdDb2x1bW5zID0gcmVxdWlyZWRDb2x1bW5zLmZpbHRlcihrID0+ICFjb2x1bW5zPy5ba10udmFsdWUpO1xuICAgIGlmIChtaXNzaW5nQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIG1pc3Npbmcgb3IgaW52YWxpZCBjb2x1bW5zOiAke21pc3NpbmdDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ0NvbHVtbnMgPSBPYmplY3Qua2V5cyhzYXZlZENvbHMpO1xuICAgIGNvbnN0IGludmFsaWRDb2x1bW5zID0gY29uZmlnQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdPy52YWx1ZSk7XG4gICAgaWYgKGludmFsaWRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCBjb2x1bW5zOiAke2ludmFsaWRDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJ2O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGxheWVyIGNvbHVtblxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb2x1bW4oXG4gIGNvbHVtbjogTGF5ZXJDb2x1bW4gJiB7dmFsaWRhdG9yPzogdHlwZW9mIHZhbGlkYXRlQ29sdW1ufSxcbiAgY29sdW1uczogTGF5ZXJDb2x1bW5zLFxuICBhbGxGaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXVxuKTogYm9vbGVhbiB7XG4gIGlmIChjb2x1bW4ub3B0aW9uYWwgfHwgY29sdW1uLnZhbHVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGNvbHVtbi52YWxpZGF0b3IpIHtcbiAgICByZXR1cm4gY29sdW1uLnZhbGlkYXRvcihjb2x1bW4sIGNvbHVtbnMsIGFsbEZpZWxkcyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHRleHQgbGFiZWwgY29uZmlnIHdpdGggbmV3IGRhdGFcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVGV4dExhYmVsU2NoZW1hVjFcbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGZpZWxkc1xuICogQHBhcmFtIHtPYmplY3R9IHNhdmVkVGV4dExhYmVsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7T2JqZWN0fSAtIHZhbGlkYXRlZCB0ZXh0bGFiZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwoXG4gIGZpZWxkcyxcbiAgbGF5ZXJUZXh0TGFiZWxzOiBhbnlbXSxcbiAgc2F2ZWRUZXh0TGFiZWwsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFuOyBsYXllclR5cGU/OiBzdHJpbmcgfCBudWxsfSA9IHt9XG4pOiBhbnlbXSB7XG4gIGNvbnN0IGxheWVyVGV4dExhYmVsID0gbGF5ZXJUZXh0TGFiZWxzWzBdO1xuICBjb25zdCBzYXZlZFRleHRMYWJlbHMgPSBBcnJheS5pc0FycmF5KHNhdmVkVGV4dExhYmVsKSA/IHNhdmVkVGV4dExhYmVsIDogW3NhdmVkVGV4dExhYmVsXTtcbiAgY29uc3QgY291bnRMYWJlbExheWVyID0gQm9vbGVhbihcbiAgICBvcHRpb25zLmxheWVyVHlwZSAmJiBBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUy5oYXMob3B0aW9ucy5sYXllclR5cGUpXG4gICk7XG5cbiAgLy8gdmFsaWRhdGUgZmllbGRcbiAgcmV0dXJuIHNhdmVkVGV4dExhYmVscy5tYXAodGV4dExhYmVsID0+IHtcbiAgICBsZXQgZmllbGQgPSBudWxsO1xuICAgIGlmICh0ZXh0TGFiZWwuZmllbGQpIHtcbiAgICAgIC8vIENsdXN0ZXIsIGhleGJpbiwgYW5kIGdyaWQgcGVyc2lzdCBhIHN5bnRoZXRpYyBwb2ludC1jb3VudCBmaWVsZCB0aGF0XG4gICAgICAvLyBpcyBub3Qgb25lIG9mIHRoZSBkYXRhc2V0IGNvbHVtbnMuXG4gICAgICBmaWVsZCA9XG4gICAgICAgIGNvdW50TGFiZWxMYXllciAmJiB0ZXh0TGFiZWwuZmllbGQubmFtZSA9PT0gUE9JTlRfQ09VTlRfRklFTERfTkFNRVxuICAgICAgICAgID8gY3JlYXRlUG9pbnRDb3VudExhYmVsRmllbGQoKVxuICAgICAgICAgIDogZmllbGRzLmZpbmQoZmQgPT5cbiAgICAgICAgICAgICAgT2JqZWN0LmtleXModGV4dExhYmVsLmZpZWxkKS5ldmVyeShrZXkgPT4gdGV4dExhYmVsLmZpZWxkW2tleV0gPT09IGZkW2tleV0pXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkICYmIG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHRleHQgbGFiZWwgZmllbGQ6ICR7SlNPTi5zdHJpbmdpZnkodGV4dExhYmVsLmZpZWxkKX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGF5ZXJUZXh0TGFiZWwpLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIC8vIEtlZXAgZXhwbGljaXQgZmFsc2UgLyAwLiBgfHxgIHdvdWxkIHJlcGxhY2UgYSBzYXZlZCBjb2xsaXNpb25FbmFibGVkXG4gICAgICAgIC8vIG9mIGZhbHNlIHdpdGggdGhlIGFnZ3JlZ2F0aW9uIGRlZmF1bHQgb2YgdHJ1ZS5cbiAgICAgICAgW2tleV06IGtleSA9PT0gJ2ZpZWxkJyA/IGZpZWxkIDogdGV4dExhYmVsW2tleV0gPz8gbGF5ZXJUZXh0TGFiZWxba2V5XVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIE1hcHMgc2F2ZWQgYmVmb3JlIGNvdW50IGxhYmVscyBvbWl0IGB0ZXh0TGFiZWxgLiBUaG9zZSBjbHVzdGVyLCBoZXhiaW4sIGFuZFxuICogZ3JpZCBsYXllcnMgc3RheSB1bmxhYmVsZWQuIE5ldyBsYXllcnMgc3RpbGwgZ2V0IHRoZSBwb2ludC1jb3VudCBkZWZhdWx0XG4gKiBmcm9tIGBnZXREZWZhdWx0TGF5ZXJDb25maWdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmFsbGJhY2tUZXh0TGFiZWxGb3JMb2FkZWRMYXllcihcbiAgbGF5ZXJUeXBlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBuZXdMYXllclRleHRMYWJlbDogYW55W11cbik6IGFueVtdIHtcbiAgaWYgKGxheWVyVHlwZSAmJiBBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUy5oYXMobGF5ZXJUeXBlKSkge1xuICAgIHJldHVybiBbey4uLkRFRkFVTFRfVEVYVF9MQUJFTH1dO1xuICB9XG4gIHJldHVybiBuZXdMYXllclRleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBTYXZlZCB2aXN1YWwgY2hhbm5lbCBmaWVsZC9zY2FsZSBtYXkgbGl2ZSBpbiBhbnkgb2Y6XG4gKiAtIGBjb25maWdba2V5XWAgYWZ0ZXIgc2NoZW1hIHBhcnNlIChWaXN1YWxDaGFubmVsU2NoZW1hVjEgZm9sZHMgY2hhbm5lbHMgaW50byBjb25maWcpXG4gKiAtIGB2aXN1YWxDaGFubmVsc1trZXldYCBhcyBhIHNpYmxpbmcgb2YgYGNvbmZpZ2AgKHVucGFyc2VkIGFkZERhdGFUb01hcCBwYXlsb2FkKVxuICogLSBgY29uZmlnLnZpc3VhbENoYW5uZWxzW2tleV1gIChjb21tb24gbWlzdGFrZSBvZiBuZXN0aW5nIHZpc3VhbENoYW5uZWxzIGluc2lkZSBjb25maWcpXG4gKlxuICogV2l0aG91dCB0aGlzIGxvb2t1cCwgcHJvZ3JhbW1hdGljIEdlb0pTT04gc3Ryb2tlQ29sb3JGaWVsZCBuZXZlciBiaW5kcyBhbmRcbiAqIHN0cm9rZUNvbG9yRG9tYWluIHN0YXlzIGF0IHRoZSBkZWZhdWx0IGBbMCwgMV1gIChrZXBsZXIuZ2wgIzMwNjEpLlxuICovXG5mdW5jdGlvbiBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyOiBQYXJzZWRMYXllciwga2V5OiBzdHJpbmcpOiBhbnkge1xuICBjb25zdCBjb25maWcgPSBzYXZlZExheWVyLmNvbmZpZyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkO1xuICBpZiAoY29uZmlnICYmIGNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY29uZmlnW2tleV07XG4gIH1cbiAgY29uc3QgY2hhbm5lbHMgPVxuICAgIChzYXZlZExheWVyIGFzIHt2aXN1YWxDaGFubmVscz86IFJlY29yZDxzdHJpbmcsIGFueT59KS52aXN1YWxDaGFubmVscyB8fFxuICAgIChjb25maWcgJiYgY29uZmlnLnZpc3VhbENoYW5uZWxzKTtcbiAgaWYgKGNoYW5uZWxzICYmIHR5cGVvZiBjaGFubmVscyA9PT0gJ29iamVjdCcgJiYgY2hhbm5lbHNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNoYW5uZWxzW2tleV07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCB2aXN1YWwgY2hhbm5lbHMgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzKFxuICBmaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXSxcbiAgbmV3TGF5ZXI6IExheWVyLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbik6IG51bGwgfCBMYXllciB7XG4gIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZCwgc2NhbGUsIGtleX0pID0+IHtcbiAgICBjb25zdCBzYXZlZEZpZWxkID0gZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUoc2F2ZWRMYXllciwgZmllbGQpO1xuICAgIGNvbnN0IHNhdmVkU2NhbGUgPSBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyLCBzY2FsZSk7XG4gICAgbGV0IGZvdW5kRmllbGQ7XG4gICAgaWYgKHNhdmVkRmllbGQ/Lm5hbWUpIHtcbiAgICAgIGZvdW5kRmllbGQgPSBmaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBzYXZlZEZpZWxkLm5hbWUpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvdW5kQ2hhbm5lbCA9IHtcbiAgICAgIC4uLihmb3VuZEZpZWxkID8ge1tmaWVsZF06IGZvdW5kRmllbGR9IDoge30pLFxuICAgICAgLi4uKHNhdmVkU2NhbGUgPyB7W3NjYWxlXTogc2F2ZWRTY2FsZX0gOiB7fSlcbiAgICB9O1xuICAgIGlmIChPYmplY3Qua2V5cyhmb3VuZENoYW5uZWwpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoZm91bmRDaGFubmVsKTtcbiAgICB9XG5cbiAgICBuZXdMYXllci52YWxpZGF0ZVZpc3VhbENoYW5uZWwoa2V5KTtcbiAgICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHNhdmVkRmllbGQ/Lm5hbWU7XG4gICAgICBpZiAoZmllbGROYW1lICYmIGZpZWxkTmFtZSAhPT0gbmV3TGF5ZXIuY29uZmlnW2ZpZWxkXT8ubmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHZpc3VhbCBjaGFubmVsIGZpZWxkOiAke2ZpZWxkfWApO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxudHlwZSBWYWxpZGF0ZUxheWVyT3B0aW9uID0ge1xuICBhbGxvd0VtcHR5Q29sdW1uPzogYm9vbGVhbjtcbiAgdGhyb3dPbkVycm9yPzogYm9vbGVhbjtcbiAgLy8gU2F2ZWQgbWFwcyB0aGF0IG9taXQgdGV4dExhYmVsIHByZWRhdGUgY291bnQgbGFiZWxzIGFuZCBzdGF5IHVubGFiZWxlZC5cbiAgLy8gQSBuZXcgbGF5ZXIgY29uZmlnIG9taXRzIGl0IHRvbywgYW5kIHNob3VsZCBrZWVwIHRoZSBsYXllciBkZWZhdWx0LlxuICBrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWw/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgZGF0YXNldHM6IERhdGFzZXRzLFxuICBsYXllckNsYXNzZXM6IFZpc1N0YXRlWydsYXllckNsYXNzZXMnXSxcbiAgbGF5ZXJzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdLFxuICBvcHRpb25zPzogVmFsaWRhdGVMYXllck9wdGlvblxuKSB7XG4gIGNvbnN0IHZhbGlkYXRlZDogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBmYWlsZWQ6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW107XG5cbiAgbGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIGxldCB2YWxpZGF0ZUxheWVyOiBMYXllciB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKGxheWVyPy5jb25maWc/LmRhdGFJZCkge1xuICAgICAgaWYgKGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdKSB7XG4gICAgICAgIC8vIGRhdGFzZXRzIGFyZSBhbHJlYWR5IGxvYWRlZFxuICAgICAgICB2YWxpZGF0ZUxheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICAgICAgICAgIGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdLFxuICAgICAgICAgIGxheWVyLFxuICAgICAgICAgIGxheWVyQ2xhc3NlcyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlTGF5ZXIpIHtcbiAgICAgIHZhbGlkYXRlZC5wdXNoKHZhbGlkYXRlTGF5ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkYXRhc2V0cyBub3QgeWV0IGxvYWRlZFxuICAgICAgZmFpbGVkLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHt2YWxpZGF0ZWQsIGZhaWxlZH07XG59XG5cbi8qKlxuICogR2V0IHJlcXVpcmVkIGNvbHVtbnMgZm9yIHZhbGlkYXRpb24gYmFzZWQgb24gY29sdW1uIG1vZGVcbiAqL1xuZnVuY3Rpb24gX2dldENvbHVtbkNvbmZpZ0ZvclZhbGlkYXRpb24obmV3TGF5ZXIpIHtcbiAgLy8gZmluZCBjb2x1bW4gZmllbGRJZHhcbiAgbGV0IGNvbHVtbkNvbmZpZyA9IG5ld0xheWVyLmdldExheWVyQ29sdW1ucygpO1xuICAvLyBpZiBjb2x1bW5Nb2RlIGlzIGRlZmluZWQsIGZpbmQgY29sdW1uIG1vZGUgY29uZmlnXG4gIGNvbnN0IGNvbE1vZGVDb25maWcgPSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgID8gKG5ld0xheWVyLnN1cHBvcnRlZENvbHVtbk1vZGVzIHx8IFtdKS5maW5kKFxuICAgICAgICBjb2xNb2RlID0+IGNvbE1vZGUua2V5ID09PSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoY29sTW9kZUNvbmZpZykge1xuICAgIC8vIG9ubHkgdmFsaWRhdGUgY29sdW1ucyBpbiBjb2x1bW4gbW9kZSAoaW5jbHVkaW5nIHRhYmJlZCBjb2x1bW5Hcm91cHMpXG4gICAgY29uc3QgZ3JvdXBDb2x1bW5zID0gKGNvbE1vZGVDb25maWcuY29sdW1uR3JvdXBzIHx8IFtdKS5mbGF0TWFwKGdyb3VwID0+IGdyb3VwLmNvbHVtbnMgfHwgW10pO1xuICAgIGNvbnN0IHJlcXVpcmVkS2V5cyA9IG5ldyBTZXQoY29sTW9kZUNvbmZpZy5yZXF1aXJlZENvbHVtbnMgfHwgW10pO1xuICAgIGNvbHVtbkNvbmZpZyA9IFtcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLnJlcXVpcmVkQ29sdW1ucyB8fCBbXSksXG4gICAgICAuLi4oY29sTW9kZUNvbmZpZy5vcHRpb25hbENvbHVtbnMgfHwgW10pLFxuICAgICAgLi4uZ3JvdXBDb2x1bW5zXG4gICAgXS5yZWR1Y2UoKGFjY3UsIGtleSkgPT4ge1xuICAgICAgY29uc3QgY29sID0gY29sdW1uQ29uZmlnW2tleV07XG4gICAgICBpZiAoIWNvbCkge1xuICAgICAgICByZXR1cm4gYWNjdTtcbiAgICAgIH1cbiAgICAgIC8vIE9wdGlvbmFsaXR5IG11c3QgZm9sbG93IHRoZSBhY3RpdmUgbW9kZTogYSBmaWVsZCBvcHRpb25hbCBpbiBhbm90aGVyIG1vZGVcbiAgICAgIC8vIChlLmcuIGFsdGl0dWRlIGluIFVWKSBpcyBzdGlsbCByZXF1aXJlZCB3aGVuIHRoaXMgbW9kZSBsaXN0cyBpdCBpbiByZXF1aXJlZENvbHVtbnMuXG4gICAgICBpZiAocmVxdWlyZWRLZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnN0IHtvcHRpb25hbDogX29wdGlvbmFsLCAuLi5yZXF1aXJlZENvbH0gPSBjb2w7XG4gICAgICAgIHJldHVybiB7Li4uYWNjdSwgW2tleV06IHJlcXVpcmVkQ29sfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7Li4uYWNjdSwgW2tleV06IHsuLi5jb2wsIG9wdGlvbmFsOiB0cnVlfX07XG4gICAgfSwge30pO1xuICB9XG5cbiAgcmV0dXJuIGNvbHVtbkNvbmZpZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSxcbiAgc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBvcHRpb25zOiBWYWxpZGF0ZUxheWVyT3B0aW9uID0ge31cbik6IExheWVyIHwgbnVsbCB7XG4gIGNvbnN0IHtmaWVsZHMsIGlkOiBkYXRhSWR9ID0gZGF0YXNldDtcbiAgY29uc3Qge3R5cGV9ID0gc2F2ZWRMYXllcjtcbiAgY29uc3Qge3Rocm93T25FcnJvcn0gPSBvcHRpb25zO1xuICAvLyBsYXllciBkb2VzbnQgaGF2ZSBhIHZhbGlkIHR5cGVcbiAgaWYgKCF0eXBlIHx8ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGF5ZXJDbGFzc2VzLCB0eXBlKSB8fCAhc2F2ZWRMYXllci5jb25maWcpIHtcbiAgICBpZiAodGhyb3dPbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHR5cGUgXCIke3R5cGV9XCIgb3IgY29uZmlnIGlzIG1pc3NpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW3R5cGVdKHtcbiAgICBpZDogc2F2ZWRMYXllci5pZCxcbiAgICBkYXRhSWQsXG4gICAgbGFiZWw6IHNhdmVkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGNvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5jb2xvcixcbiAgICBpc1Zpc2libGU6IHNhdmVkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBoaWRkZW46IHNhdmVkTGF5ZXIuY29uZmlnLmhpZGRlbixcbiAgICBpc0luY2x1ZGVkSW5MZWdlbmQ6IHNhdmVkTGF5ZXIuY29uZmlnLmlzSW5jbHVkZWRJbkxlZ2VuZCxcbiAgICBjb2x1bW5Nb2RlOiBzYXZlZExheWVyLmNvbmZpZy5jb2x1bW5Nb2RlLFxuICAgIGhpZ2hsaWdodENvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5oaWdobGlnaHRDb2xvclxuICB9KTtcblxuICBjb25zdCBjb2x1bW5Db25maWcgPSBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcik7XG5cbiAgaWYgKE9iamVjdC5rZXlzKGNvbHVtbkNvbmZpZykpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgICAgIGZpZWxkcyxcbiAgICAgIHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICBjb2x1bW5Db25maWcsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgICBpZiAoY29sdW1ucykge1xuICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBjb2x1bW5zOiB7XG4gICAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICAgICAgLi4uY29sdW1uc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmFsbG93RW1wdHlDb2x1bW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRleHRMYWJlbCA9XG4gICAgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsICYmIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWxcbiAgICAgID8gdmFsaWRhdGVTYXZlZFRleHRMYWJlbChmaWVsZHMsIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwsIHNhdmVkTGF5ZXIuY29uZmlnLnRleHRMYWJlbCwge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgbGF5ZXJUeXBlOiBzYXZlZExheWVyLnR5cGVcbiAgICAgICAgfSlcbiAgICAgIDogb3B0aW9ucy5rZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWxcbiAgICAgID8gZmFsbGJhY2tUZXh0TGFiZWxGb3JMb2FkZWRMYXllcihzYXZlZExheWVyLnR5cGUsIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWwpXG4gICAgICA6IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWw7XG5cbiAgLy8gY29weSB2aXNDb25maWcgb3ZlciB0byBlbXB0eUxheWVyIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYWxsIHRoZSBwcm9wc1xuICBjb25zdCBzYXZlZFZpc0NvbmZpZyA9XG4gICAgc2F2ZWRMYXllci50eXBlID09PSAnM0QnXG4gICAgICA/IG1pZ3JhdGVMZWdhY3lTY2VuZWdyYXBoVmlzQ29uZmlnKHNhdmVkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZylcbiAgICAgIDogc2F2ZWRMYXllci5jb25maWcudmlzQ29uZmlnO1xuICBjb25zdCBjb3BpZWRWaXNDb25maWcgPSBuZXdMYXllci5jb3B5TGF5ZXJDb25maWcoXG4gICAgbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICBzYXZlZFZpc0NvbmZpZyB8fCB7fSxcbiAgICB7XG4gICAgICBzaGFsbG93Q29weTogWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXVxuICAgIH1cbiAgKTtcblxuICAvLyBjYWxsIGxheWVyIG1ldGhvZHMgdG8gdmFsaWRhdGUgdmlzQ29uZmlnIHdoZW4gc3dpdGNoaW5nIGRhdGFzZXRcbiAgY29uc3QgdmlzQ29uZmlnID0gbmV3TGF5ZXIudmFsaWRhdGVWaXNDb25maWdcbiAgICA/IG5ld0xheWVyLnZhbGlkYXRlVmlzQ29uZmlnKGRhdGFzZXQsIGNvcGllZFZpc0NvbmZpZylcbiAgICA6IGNvcGllZFZpc0NvbmZpZztcblxuICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgdmlzQ29uZmlnLFxuICAgIHRleHRMYWJlbFxuICB9KTtcblxuICAvLyB2aXN1YWwgY2hhbm5lbCBmaWVsZCBpcyBzYXZlZCB0byBiZSB7bmFtZSwgdHlwZX1cbiAgLy8gZmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZCBieSBtYXRjaGluZyBib3RoIG5hbWUgYW5kIHR5cGVcbiAgLy8gcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAgbmV3TGF5ZXIgPSB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoZmllbGRzLCBuZXdMYXllciwgc2F2ZWRMYXllciwgb3B0aW9ucyk7XG5cbiAgaWYgKHRocm93T25FcnJvcikge1xuICAgIGlmICghbmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlOiAke25ld0xheWVyLmlkfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWRpdG9yPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIHNhdmVkRWRpdG9yOiBTYXZlZEVkaXRvcikge1xuICBpZiAoIXNhdmVkRWRpdG9yKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgLi4uKHNhdmVkRWRpdG9yLmZlYXR1cmVzIHx8IFtdKV0sXG4gICAgICAvLyBpZiBzYXZlZEVkaXRvci52aXNpYmxlIGlzIHVuZGVmaW5lZCBrZWVwIHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgICB2aXNpYmxlOiBzYXZlZEVkaXRvci52aXNpYmxlID8/IHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21iaW5lRWRpdG9yQ29uZmlncyhjb25maWdzOiBTYXZlZEVkaXRvcltdKTogU2F2ZWRFZGl0b3Ige1xuICByZXR1cm4gY29uZmlncy5yZWR1Y2UoXG4gICAgKGFjYywgbmV4dENvbmZpZykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBmZWF0dXJlczogWy4uLmFjYy5mZWF0dXJlcywgLi4uKG5leHRDb25maWcuZmVhdHVyZXMgfHwgW10pXVxuICAgICAgfTtcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIHN0YXJ0IHdpdGg6XG4gICAgICAvLyAtIGVtcHR5IGFycmF5IGZvciBmZWF0dXJlcyBhY2N1bXVsYXRpb25cbiAgICAgIC8vIC0gYW5kIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIHZpc2libGUgdmFsdWVzIHRydWU/XG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICB2aXNpYmxlOiBjb25maWdzLnNvbWUoYyA9PiBjPy52aXNpYmxlKVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZTogVmlzU3RhdGUsIG5ld0RhdGFFbnRyaWVzOiBEYXRhc2V0cyk6IERhdGFzZXRzIHtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIC4uLm5ld0RhdGFFbnRyaWVzXG4gIH07XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIpKSB7XG4gICAgLy8gcHJlc2VydmVEYXRhc2V0T3JkZXIgIG1pZ2h0IG5vdCBpbmNsdWRlIHRoZSAgbmV3IGRhdGFzZXRzXG4gICAgY29uc3QgbmV3RGF0YXNldElkcyA9IE9iamVjdC5rZXlzKG1lcmdlZCkuZmlsdGVyKFxuICAgICAgaWQgPT4gIXN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyPy5pbmNsdWRlcyhpZClcbiAgICApO1xuICAgIHJldHVybiBbLi4uc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIsIC4uLm5ld0RhdGFzZXRJZHNdLnJlZHVjZShcbiAgICAgIChhY2N1LCBkYXRhSWQpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIC4uLihtZXJnZWRbZGF0YUlkXSA/IHtbZGF0YUlkXTogbWVyZ2VkW2RhdGFJZF19IDoge30pXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogU2ltbGlhciBwdXJwb3NlIHRvIGFnZ3JlZ2F0aW9uIHV0aWxzIGBnZXRNb2RlYCBmdW5jdGlvbixcbiAqIGJ1dCByZXR1cm5zIHRoZSBtb2RlIGluIHRoZSBzYW1lIHZhbHVlIHR5cGUgd2l0aG91dCBjb2VyY2luZyB0byBhIHN0cmluZy5cbiAqIEl0IGlnbm9yZXMgYHVuZGVmaW5lZGAgb3IgYG51bGxgIHZhbHVlcywgYnV0IHJldHVybnMgYG51bGxgIGlmIG5vIG1vZGUgY291bGQgYmUgY2FsY3VsYXRlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2U8VD4oYXJyOiBUW10pOiBUIHwgbnVsbCB7XG4gIGNvbnN0IHRhbGx5cyA9IG5ldyBNYXAoKTtcbiAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgIGlmIChub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICBpZiAoIXRhbGx5cy5oYXModmFsdWUpKSB7XG4gICAgICAgIHRhbGx5cy5zZXQodmFsdWUsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFsbHlzLnNldCh2YWx1ZSwgdGFsbHlzLmdldCh2YWx1ZSkgKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvLyByZXR1cm4gdGhlIHZhbHVlIHdpdGggdGhlIGhpZ2hlc3QgdG90YWwgb2NjdXJyZW5jZSBjb3VudFxuICBpZiAodGFsbHlzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gWy4uLnRhbGx5cy5lbnRyaWVzKCldPy5yZWR1Y2UoKGFjYywgbmV4dCkgPT4gKG5leHRbMV0gPiBhY2NbMV0gPyBuZXh0IDogYWNjKSlbMF07XG59XG5cbmV4cG9ydCBjb25zdCBWSVNfU1RBVEVfTUVSR0VSUzogVmlzU3RhdGVNZXJnZXJzPGFueT4gPSBbXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllcnMsXG4gICAgcHJvcDogJ2xheWVycycsXG4gICAgdG9NZXJnZVByb3A6ICdsYXllclRvQmVNZXJnZWQnLFxuICAgIHByZXNlcnZlT3JkZXI6ICdwcmVzZXJ2ZUxheWVyT3JkZXInXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllck9yZGVyLFxuICAgIHByb3A6ICdsYXllck9yZGVyJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlRmlsdGVycyxcbiAgICBwcm9wOiAnZmlsdGVycycsXG4gICAgdG9NZXJnZVByb3A6ICdmaWx0ZXJUb0JlTWVyZ2VkJyxcbiAgICBwcmVzZXJ2ZU9yZGVyOiAncHJlc2VydmVGaWx0ZXJPcmRlcicsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VFZmZlY3RzLFxuICAgIHByb3A6ICdlZmZlY3RzJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlQ2hhcnRzLFxuICAgIHByb3A6ICdjaGFydHMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnY2hhcnRzVG9CZU1lcmdlZCcsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VDaGFydERhdGFzZXRJZHNcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUFubm90YXRpb25zLFxuICAgIHByb3A6ICdhbm5vdGF0aW9ucycsXG4gICAgdG9NZXJnZVByb3A6ICdhbm5vdGF0aW9uc1RvQmVNZXJnZWQnXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VJbnRlcmFjdGlvbnMsXG4gICAgcHJvcDogJ2ludGVyYWN0aW9uQ29uZmlnJyxcbiAgICB0b01lcmdlUHJvcDogJ2ludGVyYWN0aW9uVG9CZU1lcmdlZCcsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMsXG4gICAgc2F2ZVVubWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24sXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVJbnRlcmFjdGlvbkNvbmZpZ3NcbiAgfSxcbiAge21lcmdlOiBtZXJnZUxheWVyQmxlbmRpbmcsIHByb3A6ICdsYXllckJsZW5kaW5nJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlnc30sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VPdmVybGF5QmxlbmRpbmcsXG4gICAgcHJvcDogJ292ZXJsYXlCbGVuZGluZycsXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzXG4gIH0sXG4gIHttZXJnZTogbWVyZ2VTcGxpdE1hcHMsIHByb3A6ICdzcGxpdE1hcHMnLCB0b01lcmdlUHJvcDogJ3NwbGl0TWFwc1RvQmVNZXJnZWQnfSxcbiAge21lcmdlOiBtZXJnZUFuaW1hdGlvbkNvbmZpZywgcHJvcDogJ2FuaW1hdGlvbkNvbmZpZycsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lQW5pbWF0aW9uQ29uZmlnc30sXG4gIHttZXJnZTogbWVyZ2VFZGl0b3IsIHByb3A6ICdlZGl0b3InLCBjb21iaW5lQ29uZmlnczogY29tYmluZUVkaXRvckNvbmZpZ3N9XG5dO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFlBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQVdBLElBQUFLLE9BQUEsR0FBQUwsT0FBQTtBQU9BLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFlBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLFVBQUEsR0FBQVIsT0FBQTtBQVNBLElBQUFTLFFBQUEsR0FBQVQsT0FBQTtBQXFCQSxJQUFBVSxNQUFBLEdBQUFWLE9BQUE7QUFFQSxJ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
|