@kepler.gl/reducers 3.1.3 → 3.1.5
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/map-state-updaters.js +3 -3
- package/dist/map-style-updaters.js +3 -3
- package/dist/map-style.js +2 -2
- package/dist/root.js +2 -1
- package/dist/vis-state-merger.js +6 -6
- package/dist/vis-state-updaters.d.ts +1 -0
- package/dist/vis-state-updaters.js +36 -27
- package/dist/vis-state.d.ts +4 -0
- package/package.json +18 -32
|
@@ -88,12 +88,12 @@ var _bbox = _interopRequireDefault(require("@turf/bbox"));
|
|
|
88
88
|
var _copyToClipboard = _interopRequireDefault(require("copy-to-clipboard"));
|
|
89
89
|
var _deepmerge = _interopRequireDefault(require("deepmerge"));
|
|
90
90
|
var _window = require("global/window");
|
|
91
|
-
var
|
|
92
|
-
var
|
|
93
|
-
var
|
|
94
|
-
var
|
|
95
|
-
var
|
|
96
|
-
var
|
|
91
|
+
var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
92
|
+
var _get = _interopRequireDefault(require("lodash/get"));
|
|
93
|
+
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
94
|
+
var _pick = _interopRequireDefault(require("lodash/pick"));
|
|
95
|
+
var _uniq = _interopRequireDefault(require("lodash/uniq"));
|
|
96
|
+
var _xor = _interopRequireDefault(require("lodash/xor"));
|
|
97
97
|
var _tasks = _interopRequireWildcard(require("react-palm/tasks"));
|
|
98
98
|
var _tasks2 = require("@kepler.gl/tasks");
|
|
99
99
|
var _actions = require("@kepler.gl/actions");
|
|
@@ -322,7 +322,7 @@ function pickChangedProps(prev, next) {
|
|
|
322
322
|
var changedProps = {};
|
|
323
323
|
var pickPropsOf = function pickPropsOf(obj) {
|
|
324
324
|
Object.keys(obj).forEach(function (key) {
|
|
325
|
-
if (!Object.prototype.hasOwnProperty.call(changedProps, key) && !(0,
|
|
325
|
+
if (!Object.prototype.hasOwnProperty.call(changedProps, key) && !(0, _isEqual["default"])(prev[key], next[key])) {
|
|
326
326
|
changedProps[key] = next[key];
|
|
327
327
|
}
|
|
328
328
|
});
|
|
@@ -394,7 +394,7 @@ function applyLayerConfigUpdater(state, action) {
|
|
|
394
394
|
if (!serializedNewLayer) {
|
|
395
395
|
return state;
|
|
396
396
|
}
|
|
397
|
-
if (!(0,
|
|
397
|
+
if (!(0, _isEqual["default"])(serializedOldLayer, serializedNewLayer)) {
|
|
398
398
|
var changed = pickChangedProps(serializedOldLayer.config, serializedNewLayer.config);
|
|
399
399
|
if ('visConfig' in changed) {
|
|
400
400
|
if (changed.visConfig) {
|
|
@@ -410,7 +410,7 @@ function applyLayerConfigUpdater(state, action) {
|
|
|
410
410
|
if (channelPropNames.some(function (prop) {
|
|
411
411
|
return prop in changed;
|
|
412
412
|
})) {
|
|
413
|
-
nextState = layerVisualChannelChangeUpdater(nextState, (0, _actions.layerVisualChannelConfigChange)(oldLayer, (0,
|
|
413
|
+
nextState = layerVisualChannelChangeUpdater(nextState, (0, _actions.layerVisualChannelConfigChange)(oldLayer, (0, _pick["default"])(newLayer.config, channelPropNames), channelName));
|
|
414
414
|
var _iterator = _createForOfIteratorHelper(channelPropNames),
|
|
415
415
|
_step;
|
|
416
416
|
try {
|
|
@@ -426,7 +426,7 @@ function applyLayerConfigUpdater(state, action) {
|
|
|
426
426
|
}
|
|
427
427
|
});
|
|
428
428
|
if (Object.keys(changed).length > 0) {
|
|
429
|
-
nextState = layerConfigChangeUpdater(nextState, (0, _actions.layerConfigChange)(oldLayer, (0,
|
|
429
|
+
nextState = layerConfigChangeUpdater(nextState, (0, _actions.layerConfigChange)(oldLayer, (0, _pick["default"])(newLayer.config, Object.keys(changed))));
|
|
430
430
|
}
|
|
431
431
|
}
|
|
432
432
|
return nextState;
|
|
@@ -1055,7 +1055,7 @@ function applyFilterConfigUpdater(state, action) {
|
|
|
1055
1055
|
config: {}
|
|
1056
1056
|
};
|
|
1057
1057
|
var serializedNewFilter = (0, _visStateMerger.serializeFilter)(newFilter, state.schema);
|
|
1058
|
-
if (!serializedNewFilter || (0,
|
|
1058
|
+
if (!serializedNewFilter || (0, _isEqual["default"])(serializedOldFilter, serializedNewFilter)) {
|
|
1059
1059
|
return state;
|
|
1060
1060
|
}
|
|
1061
1061
|
|
|
@@ -1129,7 +1129,7 @@ function setFilterUpdater(state, action) {
|
|
|
1129
1129
|
newState = (0, _utils.set)(['filters', idx], newFilter, newState);
|
|
1130
1130
|
|
|
1131
1131
|
// filter data
|
|
1132
|
-
var filteredDatasets = (0, _utils.applyFiltersToDatasets)((0,
|
|
1132
|
+
var filteredDatasets = (0, _utils.applyFiltersToDatasets)((0, _uniq["default"])(datasetIdsToFilter), newState.datasets, newState.filters, newState.layers);
|
|
1133
1133
|
newState = (0, _utils.set)(['datasets'], filteredDatasets, newState);
|
|
1134
1134
|
|
|
1135
1135
|
// need to update filterPlot after filter Dataset for plot to update on filtered result
|
|
@@ -1204,7 +1204,7 @@ function _updateFilterProp(state, filter, prop, value, valueIndex, datasetIds) {
|
|
|
1204
1204
|
{
|
|
1205
1205
|
var oldDataId = (0, _toConsumableArray2["default"])(filter.dataId);
|
|
1206
1206
|
filter = _updateFilterDataIdAtValueIndex(filter, valueIndex, value, state.datasets);
|
|
1207
|
-
datasetIdsToFilter = (0,
|
|
1207
|
+
datasetIdsToFilter = (0, _uniq["default"])([].concat((0, _toConsumableArray2["default"])(oldDataId), (0, _toConsumableArray2["default"])(filter.dataId)));
|
|
1208
1208
|
break;
|
|
1209
1209
|
}
|
|
1210
1210
|
case _utils.FILTER_UPDATER_PROPS.name:
|
|
@@ -1238,9 +1238,9 @@ function _updateFilterProp(state, filter, prop, value, valueIndex, datasetIds) {
|
|
|
1238
1238
|
// - check for layerId changes (XOR works because of string values)
|
|
1239
1239
|
// if no differences between layerIds, don't do any filtering
|
|
1240
1240
|
// @ts-ignore
|
|
1241
|
-
var layerIdDifference = (0,
|
|
1242
|
-
var layerDataIds = (0,
|
|
1243
|
-
return (0,
|
|
1241
|
+
var layerIdDifference = (0, _xor["default"])(value, filter.layerId);
|
|
1242
|
+
var layerDataIds = (0, _uniq["default"])(layerIdDifference.map(function (lid) {
|
|
1243
|
+
return (0, _get["default"])(state.layers.find(function (l) {
|
|
1244
1244
|
return l.id === lid;
|
|
1245
1245
|
}), ['config', 'dataId']);
|
|
1246
1246
|
}).filter(function (d) {
|
|
@@ -1251,8 +1251,8 @@ function _updateFilterProp(state, filter, prop, value, valueIndex, datasetIds) {
|
|
|
1251
1251
|
datasetIdsToFilter = layerDataIds;
|
|
1252
1252
|
|
|
1253
1253
|
// Update newFilter dataIds
|
|
1254
|
-
var newDataIds = (0,
|
|
1255
|
-
return (0,
|
|
1254
|
+
var newDataIds = (0, _uniq["default"])(value === null || value === void 0 ? void 0 : value.map(function (lid) {
|
|
1255
|
+
return (0, _get["default"])(state.layers.find(function (l) {
|
|
1256
1256
|
return l.id === lid;
|
|
1257
1257
|
}), ['config', 'dataId']);
|
|
1258
1258
|
}).filter(function (d) {
|
|
@@ -1534,7 +1534,7 @@ var setFilterViewUpdater = exports.setFilterViewUpdater = function setFilterView
|
|
|
1534
1534
|
*/
|
|
1535
1535
|
var toggleFilterFeatureUpdater = exports.toggleFilterFeatureUpdater = function toggleFilterFeatureUpdater(state, action) {
|
|
1536
1536
|
var filter = state.filters[action.idx];
|
|
1537
|
-
var isVisible = (0,
|
|
1537
|
+
var isVisible = (0, _get["default"])(filter, ['value', 'properties', 'isVisible']);
|
|
1538
1538
|
var newState = setFilterUpdater(state, {
|
|
1539
1539
|
idx: action.idx,
|
|
1540
1540
|
prop: 'enabled',
|
|
@@ -2053,7 +2053,7 @@ function interactionConfigChangeUpdater(state, action) {
|
|
|
2053
2053
|
var layerClickUpdater = exports.layerClickUpdater = function layerClickUpdater(state, action) {
|
|
2054
2054
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2055
2055
|
mousePos: state.interactionConfig.coordinate.enabled ? _objectSpread(_objectSpread({}, state.mousePos), {}, {
|
|
2056
|
-
pinned: state.mousePos.pinned ? null : (0,
|
|
2056
|
+
pinned: state.mousePos.pinned ? null : (0, _cloneDeep["default"])(state.mousePos)
|
|
2057
2057
|
}) : state.mousePos,
|
|
2058
2058
|
clicked: action.info && action.info.picked ? action.info : null
|
|
2059
2059
|
});
|
|
@@ -2146,6 +2146,15 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
|
|
|
2146
2146
|
if (!datasets.length) {
|
|
2147
2147
|
return updatedState;
|
|
2148
2148
|
}
|
|
2149
|
+
if (datasets.length) {
|
|
2150
|
+
// indicate that dataset setup / loading is in progress
|
|
2151
|
+
var setIsLoadingTask = (0, _tasks2.ACTION_TASK)().map(function () {
|
|
2152
|
+
return (0, _actions.setLoadingIndicator)({
|
|
2153
|
+
change: 1
|
|
2154
|
+
});
|
|
2155
|
+
});
|
|
2156
|
+
updatedState = (0, _tasks.withTask)(updatedState, setIsLoadingTask);
|
|
2157
|
+
}
|
|
2149
2158
|
var createDatasetTasks = [];
|
|
2150
2159
|
var notificationTasks = [];
|
|
2151
2160
|
datasets.forEach(function (_ref17, datasetIndex) {
|
|
@@ -2174,12 +2183,12 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
|
|
|
2174
2183
|
}) : null;
|
|
2175
2184
|
if (datasetsAllSettledTask) {
|
|
2176
2185
|
// indicate that something is in progress
|
|
2177
|
-
var
|
|
2186
|
+
var _setIsLoadingTask = (0, _tasks2.ACTION_TASK)().map(function () {
|
|
2178
2187
|
return (0, _actions.setLoadingIndicator)({
|
|
2179
2188
|
change: 1
|
|
2180
2189
|
});
|
|
2181
2190
|
});
|
|
2182
|
-
updatedState = (0, _tasks.withTask)(updatedState,
|
|
2191
|
+
updatedState = (0, _tasks.withTask)(updatedState, _setIsLoadingTask);
|
|
2183
2192
|
}
|
|
2184
2193
|
return (0, _tasks.withTask)(updatedState, [].concat((0, _toConsumableArray2["default"])(datasetsAllSettledTask ? [datasetsAllSettledTask] : []), notificationTasks));
|
|
2185
2194
|
};
|
|
@@ -2259,7 +2268,7 @@ function postMergeUpdater(mergedState, postMergerPayload) {
|
|
|
2259
2268
|
return newDataIds.includes(fDataId);
|
|
2260
2269
|
});
|
|
2261
2270
|
});
|
|
2262
|
-
var datasetFiltered = (0,
|
|
2271
|
+
var datasetFiltered = (0, _uniq["default"])(newFilters.reduce(function (accu, f) {
|
|
2263
2272
|
return [].concat((0, _toConsumableArray2["default"])(accu), (0, _toConsumableArray2["default"])(f.dataId));
|
|
2264
2273
|
}, []));
|
|
2265
2274
|
var dataEmpty = newDataIds.length < 1;
|
|
@@ -2294,7 +2303,7 @@ function postMergeUpdater(mergedState, postMergerPayload) {
|
|
|
2294
2303
|
mergedState = addDefaultTooltips(mergedState, newDataEntries[dataId]);
|
|
2295
2304
|
}
|
|
2296
2305
|
});
|
|
2297
|
-
var updatedDatasets = dataEmpty ? Object.keys(mergedState.datasets) : (0,
|
|
2306
|
+
var updatedDatasets = dataEmpty ? Object.keys(mergedState.datasets) : (0, _uniq["default"])(Object.keys(newDataEntries).concat(datasetFiltered));
|
|
2298
2307
|
var updatedState = updateAllLayerDomainData(mergedState, updatedDatasets, undefined);
|
|
2299
2308
|
|
|
2300
2309
|
// register layer animation domain,
|
|
@@ -2768,7 +2777,7 @@ function updateAnimationDomain(state) {
|
|
|
2768
2777
|
var defaultTimeFormat = (0, _utils.getTimeWidgetTitleFormatter)(mergedDomain);
|
|
2769
2778
|
|
|
2770
2779
|
// merge timeSteps
|
|
2771
|
-
var mergedTimeSteps = (0,
|
|
2780
|
+
var mergedTimeSteps = (0, _uniq["default"])(animatableLayers.reduce(function (accu, layer) {
|
|
2772
2781
|
accu.push.apply(accu, (0, _toConsumableArray2["default"])(layer.config.animation.timeSteps || []));
|
|
2773
2782
|
return accu;
|
|
2774
2783
|
}, [])).sort();
|
|
@@ -3001,7 +3010,7 @@ function sortTableColumnUpdater(state, _ref28) {
|
|
|
3001
3010
|
}
|
|
3002
3011
|
var sortMode = mode;
|
|
3003
3012
|
if (!sortMode) {
|
|
3004
|
-
var currentMode = (0,
|
|
3013
|
+
var currentMode = (0, _get["default"])(dataset, ['sortColumn', column]);
|
|
3005
3014
|
// @ts-ignore - should be fixable in a TS file
|
|
3006
3015
|
sortMode = currentMode ? Object.keys(_constants.SORT_ORDER).find(function (m) {
|
|
3007
3016
|
return m !== currentMode;
|
|
@@ -3527,4 +3536,4 @@ function replacePropValueInState(state, replacedItem, _ref38) {
|
|
|
3527
3536
|
}
|
|
3528
3537
|
return nextState;
|
|
3529
3538
|
}
|
|
3530
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvcHlUb0NsaXBib2FyZCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2xvZGFzaCIsIl9sb2Rhc2gyIiwiX2xvZGFzaDMiLCJfbG9kYXNoNCIsIl9sb2Rhc2g1IiwiX2xvZGFzaDYiLCJfdGFza3MiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl90YXNrczIiLCJfYWN0aW9ucyIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJzIiwiX2NvbXBvc2VySGVscGVycyIsIl9tZXJnZXJIYW5kbGVyIiwiX3Zpc1N0YXRlTWVyZ2VyIiwiX3NjaGVtYXMiLCJfdGFibGUiLCJfaW50ZXJhY3Rpb25VdGlscyIsIl9sYXllclV0aWxzIiwiX2VmZmVjdHMiLCJfZGF0YVV0aWxzIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl90b1Byb3BlcnR5S2V5IiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImYiLCJvIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkaXNhYmxlU3RhY2tDYXB0dXJpbmciLCJ2aXNTdGF0ZVVwZGF0ZXJzIiwiZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnIiwiZXhwb3J0cyIsInRvb2x0aXAiLCJpZCIsImxhYmVsIiwiZW5hYmxlZCIsImNvbmZpZyIsImZpZWxkc1RvU2hvdyIsImNvbXBhcmVNb2RlIiwiY29tcGFyZVR5cGUiLCJDT01QQVJFX1RZUEVTIiwiQUJTT0xVVEUiLCJnZW9jb2RlciIsInBvc2l0aW9uIiwiYnJ1c2giLCJzaXplIiwiY29vcmRpbmF0ZSIsIkRFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyIsImRvbWFpbiIsImN1cnJlbnRUaW1lIiwic3BlZWQiLCJpc0FuaW1hdGluZyIsInRpbWVTdGVwcyIsInRpbWVGb3JtYXQiLCJ0aW1lem9uZSIsImRlZmF1bHRUaW1lRm9ybWF0IiwiaGlkZUNvbnRyb2wiLCJkdXJhdGlvbiIsIkRFRkFVTFRfRURJVE9SIiwibW9kZSIsIkVESVRPUl9NT0RFUyIsIkRSQVdfUE9MWUdPTiIsImZlYXR1cmVzIiwic2VsZWN0ZWRGZWF0dXJlIiwidmlzaWJsZSIsIklOSVRJQUxfVklTX1NUQVRFIiwibWFwSW5mbyIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJsYXllcnMiLCJsYXllckRhdGEiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwidW5kZWZpbmVkIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiaW50ZXJhY3Rpb25Db25maWciLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiaG92ZXJJbmZvIiwiY2xpY2tlZCIsIm1vdXNlUG9zIiwibWF4RGVmYXVsdFRvb2x0aXBzIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJMYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwiVklTX1NUQVRFX01FUkdFUlMiLCJzY2hlbWEiLCJLZXBsZXJHTFNjaGVtYSIsInVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSIsInN0YXRlIiwiX3JlZiIsImxheWVyIiwiaWR4IiwibWFwIiwibHlyIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImlzVmlzaWJsZSIsImFkZE5ld0xheWVyc1RvU3BsaXRNYXAiLCJyZW1vdmVMYXllckZyb21TcGxpdE1hcHMiLCJhbmltYXRpb24iLCJ1cGRhdGVBbmltYXRpb25Eb21haW4iLCJwaWNrQ2hhbmdlZFByb3BzIiwicHJldiIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwia2V5IiwicHJvdG90eXBlIiwiaXNFcXVhbCIsIlZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMiLCJhcHBseUxheWVyQ29uZmlnVXBkYXRlciIsImFjdGlvbiIsIl9zZXJpYWxpemVMYXllciIsIm9sZExheWVySWQiLCJuZXdMYXllckNvbmZpZyIsImxheWVySW5kZXgiLCJuZXdQYXJzZWRMYXllciIsInBhcnNlTGF5ZXJDb25maWciLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibGF5ZXJUeXBlQ2hhbmdlIiwibmV3TGF5ZXJJZCIsImFwcGx5TGF5ZXJDb25maWciLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInBpY2siLCJfaXRlcmF0b3IiLCJfc3RlcCIsImVyciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsImlzTGF5ZXJBbmltYXRhYmxlIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJ0b2dnbGVMYXllckZvck1hcCIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIm5ld1RleHRMYWJlbCIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJhZiIsInVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZSIsInNwbGljZSIsImxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlciIsIl9vbGRMYXllciRnZXREZWZhdWx0TCIsIl9vbGRMYXllciRnZXREZWZhdWx0TDIiLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJ2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YSIsImxvYWRlZExheWVyIiwiYWxsb3dFbXB0eUNvbHVtbiIsImlzVmFsaWRUb1NhdmUiLCJ2YWxpZGF0ZWQiLCJvbGRMYXllclR5cGUiLCJpc0NvbmZpZ0FjdGl2ZSIsInVwZGF0ZUxheWVyRG9tYWluIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTMiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJyZXN1bHQiLCJmaW5kRGVmYXVsdExheWVyUHJvcHMiLCJuZXdUeXBlIiwib2xkSWQiLCJDb25zb2xlIiwiZXJyb3IiLCJkZWZhdWx0TGF5ZXJQcm9wcyIsImFzc2lnbkNvbmZpZ1RvTGF5ZXIiLCJ2aXNDb25maWdTZXR0aW5ncyIsImlzTGF5ZXJIb3ZlcmVkIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTQiLCJzZXR0aW5ncyIsIl9zZXR0aW5ncyRsYXllcnMiLCJvbGRMYXllck1hcCIsIm90aGVyTGF5ZXJzIiwibmV3VmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWwiLCJ1cGRhdGVkU3RhdGUiLCJ2aXN1YWxDaGFubmVsIiwiY2hhbm5lbFNjYWxlVHlwZSIsIkNIQU5ORUxfU0NBTEVTIiwiY29sb3IiLCJ1cGRhdGVMYXllckNvbG9yVUkiLCJyYW5nZSIsImNvbG9yUmFuZ2VDb25maWciLCJjb2xvclVJIiwiY3VzdG9tQnJlYWtzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTUiLCJzY2FsZSIsIlNDQUxFX1RZUEVTIiwiY3VzdG9tT3JkaW5hbCIsImN1c3RvbVBhbGV0dGUiLCJpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUiLCJvcmRpbmFsRG9tYWluIiwiY29sb3JCcmVha3MiLCJzaG93Q29sb3JDaGFydCIsIl9jYWxjdWxhdGVMYXllckRhdGE2Iiwic2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsIl9yZWYyIiwicmVkdWNlIiwiYWNjdSIsInNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyIiwic2V0RmlsdGVyVXBkYXRlciIsInNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIiLCJfcmVmMyIsImFuaW1hdGlvbldpbmRvdyIsIm5ld0ZpbHRlciIsInN3YXBfIiwibmV3U3luY1RpbWVsaW5lTW9kZSIsImdldFN5bmNBbmltYXRpb25Nb2RlIiwic2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIiLCJhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIiLCJfc2VyaWFsaXplRmlsdGVyIiwiZmlsdGVySWQiLCJvbGRGaWx0ZXIiLCJzZXJpYWxpemVkT2xkRmlsdGVyIiwic2VyaWFsaXplRmlsdGVyIiwic2VyaWFsaXplZE5ld0ZpbHRlciIsInNldEZpbHRlciIsInZhbHVlcyIsIl9hY3Rpb24kdmFsdWVJbmRleCIsInZhbHVlSW5kZXgiLCJ0b0FycmF5IiwiZGF0YXNldElkc1RvRmlsdGVyIiwiX2xvb3AiLCJyZXMiLCJ2IiwiX3VwZGF0ZUZpbHRlclByb3AiLCJlbmxhcmdlZEZpbHRlciIsInZpZXciLCJGSUxURVJfVklFV19UWVBFUyIsImVubGFyZ2VkIiwic2lkZSIsImZpbHRlcmVkRGF0YXNldHMiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwidW5pcSIsImZpbHRlcldpdGhQTG90IiwidXBkYXRlRmlsdGVyUGxvdCIsInVwZGF0ZUFsbExheWVyRG9tYWluRGF0YSIsIkZJTFRFUl9UWVBFUyIsInRpbWVSYW5nZSIsImFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIiLCJfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwiX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIm5leHRWYWx1ZSIsImdldERlZmF1bHRGaWx0ZXIiLCJyZW1vdmVGaWx0ZXJQbG90IiwiX2kiLCJfYXJyIiwibmV4dFZhbCIsImRvbWFpblN0ZXBzIiwibWVyZ2VGaWx0ZXJEb21haW4iLCJuZXh0RmlsdGVyIiwic3RlcCIsImFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4iLCJkYXRhc2V0SWRzIiwiRklMVEVSX1VQREFURVJfUFJPUFMiLCJvbGREYXRhSWQiLCJkYXRhc2V0SWQiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJhcHBseUZpbHRlckZpZWxkTmFtZSIsIm1lcmdlRG9tYWluIiwidXBkYXRlZEZpbHRlciIsIm5ld0RhdGFzZXQiLCJncHUiLCJzZXRGaWx0ZXJHcHVNb2RlIiwiYXNzaWduR3B1Q2hhbm5lbCIsImxheWVySWREaWZmZXJlbmNlIiwieG9yIiwibGF5ZXJEYXRhSWRzIiwibGlkIiwibmV3RGF0YUlkcyIsInNldEZpbHRlclBsb3RVcGRhdGVyIiwiX3JlZjQiLCJuZXdQcm9wIiwicGlja18iLCJtZXJnZV8iLCJwbG90VHlwZSIsImNoYXJ0VHlwZSIsInlBeGlzIiwiUExPVF9UWVBFUyIsImxpbmVDaGFydCIsImhpc3RvZ3JhbSIsImFkZEZpbHRlclVwZGF0ZXIiLCJjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIiLCJvcmlnaW5hbEluZGV4IiwiaW5kZXgiLCJsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyIiwiX3JlZjUiLCJvbGRWaXhDb25maWciLCJ0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyIiwiaXNGaWx0ZXJBbmltYXRpb25Db25maWciLCJzZXRBbmltYXRpb25Db25maWdVcGRhdGVyIiwiaXNTaWRlRmlsdGVyIiwiYXBwbHlGaWx0ZXJDb25maWciLCJ0b2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXIiLCJ0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJfcmVmNiIsInNldEZpbHRlclZpZXdVcGRhdGVyIiwic2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3IiwidG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIiLCJmZWF0dXJlVG9GaWx0ZXJWYWx1ZSIsInJlbW92ZUZpbHRlclVwZGF0ZXIiLCJfc3RhdGUkZmlsdGVycyRpZHgiLCJuZXdGaWx0ZXJzIiwibmV3RWRpdG9yIiwiZ2V0RmlsdGVySWRJbkZlYXR1cmUiLCJhZGRMYXllclVwZGF0ZXIiLCJuZXdMYXllckRhdGEiLCJjcmVhdGVMYXllckZyb21Db25maWciLCJ3YXJuIiwiX2FjdGlvbiRkYXRhc2V0SWQiLCJkZWZhdWx0RGF0YXNldCIsIkxheWVyIiwicmVtb3ZlTGF5ZXJVcGRhdGVyIiwiX3JlZjciLCJpc0Zpbml0ZSIsImxheWVyVG9SZW1vdmUiLCJmaWx0ZXJPdXRCeUlkIiwicmVtb3ZlRWxlbWVudEF0SW5kZXgiLCJyZW9yZGVyTGF5ZXJVcGRhdGVyIiwiX3JlZjgiLCJvcmRlciIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWY5Iiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJnZW5lcmF0ZUhhc2hJZCIsIkxBWUVSX0lEX0xFTkdUSCIsIm5ld0xheWVyT3JkZXIiLCJhcnJheUluc2VydCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiZWZmZWN0IiwibmV3RWZmZWN0IiwiY3JlYXRlRWZmZWN0Iiwic2V0UHJvcHMiLCJmaXhFZmZlY3RPcmRlciIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXdFZmZlY3RzIiwicmVtb3ZlRGF0YXNldFVwZGF0ZXIiLCJkYXRhc2V0S2V5IiwiX3N0YXRlJGRhdGFzZXRzIiwibmV3RGF0YXNldHMiLCJsYXllcnNUb1JlbW92ZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJpbmRleE9mIiwicmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyIsIl9yZWYxMyIsIl9pbnRlcmFjdGlvbkNvbmZpZyIsIl9jb25maWckZmllbGRzVG9TaG93IiwiZmllbGRzIiwidXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIiLCJ1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyIiwic2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIiLCJ1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciIsInVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIiLCJuZXdDb2xvciIsInJlc2V0TWFwQ29uZmlnVXBkYXRlciIsImluaXRpYWxTdGF0ZSIsInJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwiX3JlZjE0IiwiX3JlZjE0JHBheWxvYWQiLCJwYXlsb2FkIiwiX3JlZjE0JHBheWxvYWQkY29uZmlnIiwiX3JlZjE0JHBheWxvYWQkb3B0aW9uIiwib3B0aW9ucyIsInZpc1N0YXRlIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwibWVyZ2VkU3RhdGUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibWVyZ2VyIiwiaXNWYWxpZE1lcmdlciIsImhhc1Byb3BzVG9NZXJnZSIsIm1lcmdlIiwiZ2V0UHJvcFZhbHVlVG9NZXJnZXIiLCJ0b01lcmdlUHJvcCIsImxheWVySG92ZXJVcGRhdGVyIiwiaW5mbyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlciIsImNvbnRyYWRpY3QiLCJrIiwibGF5ZXJDbGlja1VwZGF0ZXIiLCJwaW5uZWQiLCJjbG9uZURlZXAiLCJwaWNrZWQiLCJtYXBDbGlja1VwZGF0ZXIiLCJtb3VzZU1vdmVVcGRhdGVyIiwiX3JlZjE1IiwiZXZ0IiwicG9pbnQiLCJtb3VzZVBvc2l0aW9uIiwibG5nTGF0IiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiY29tcHV0ZVNwbGl0TWFwTGF5ZXJzIiwiZHVwbGljYXRlIiwiY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgiLCJfcmVmMTYiLCJ1cGRhdGVWaXNEYXRhVXBkYXRlciIsImNyZWF0ZURhdGFzZXRUYXNrcyIsIm5vdGlmaWNhdGlvblRhc2tzIiwiX3JlZjE3IiwiZGF0YXNldEluZGV4IiwiX3JlZjE3JGluZm8iLCJyZXN0IiwidGFzayIsImNyZWF0ZU5ld0RhdGFFbnRyeSIsIkFDVElPTl9UQVNLIiwiYWRkTm90aWZpY2F0aW9uIiwiZXJyb3JOb3RpZmljYXRpb24iLCJtZXNzYWdlIiwiZGF0YXNldHNBbGxTZXR0bGVkVGFzayIsIlRhc2siLCJhbGxTZXR0bGVkIiwicmVzdWx0cyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwiYWRkVG9NYXBPcHRpb25zIiwic2V0SXNMb2FkaW5nVGFzayIsInNldExvYWRpbmdJbmRpY2F0b3IiLCJjaGFuZ2UiLCJ3aXRoVGFzayIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwiY29uc29sZSIsInJlYXNvbiIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwibGF5ZXJNZXJnZXJzIiwibSIsIndhaXRGb3JMYXllckRhdGEiLCJkYXRhc2V0TWVyZ2VycyIsInBvc3RNZXJnZXJQYXlsb2FkIiwiYXBwbHlNZXJnZXJzVXBkYXRlciIsIm1lcmdlU3RhdGVSZXN1bHQiLCJtZXJnZVN0YXRlRnJvbU1lcmdlcnMiLCJhbGxNZXJnZWQiLCJwb3N0TWVyZ2VVcGRhdGVyIiwiZkRhdGFJZCIsImRhdGFzZXRGaWx0ZXJlZCIsImRhdGFFbXB0eSIsIm5ld0xheWVycyIsImF1dG9DcmVhdGVMYXllcnMiLCJhZGREZWZhdWx0TGF5ZXJzIiwidG9vbHRpcEZpZWxkcyIsImF1dG9DcmVhdGVUb29sdGlwcyIsImFkZERlZmF1bHRUb29sdGlwcyIsInVwZGF0ZWREYXRhc2V0cyIsImNlbnRlck1hcCIsImJvdW5kcyIsImZpbmRNYXBCb3VuZHMiLCJmaXRCb3VuZHNUYXNrIiwiZml0TWFwQm91bmRzIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJhY2MiLCJlbnRyeSIsIl9lbnRyeSIsIl9zbGljZWRUb0FycmF5MiIsImlzUmdiQ29sb3IiLCJpc1BsYWluT2JqZWN0IiwiZGVlcG1lcmdlIiwiZXhpc3RpbmciLCJjb3B5VGFibGVBbmRVcGRhdGUiLCJfc3RhdGUkc3BsaXRNYXBzJGluZGUiLCJpbmRleFRvUmV0cmlldmUiLCJtYXBMYXllcnMiLCJsb2FkRmlsZXNVcGRhdGVyIiwiZmlsZXMiLCJfYWN0aW9uJG9uRmluaXNoIiwib25GaW5pc2giLCJsb2FkRmlsZXNTdWNjZXNzIiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJmaWxlQ2FjaGUiLCJmaWxlc1RvTG9hZCIsImxvYWROZXh0RmlsZVVwZGF0ZXIiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwiX3N0YXRlJGZpbGVMb2FkaW5nIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInByb2dyZXNzIiwicGVyY2VudCIsInN0YXRlV2l0aENhY2hlIiwiREVMQVlfVEFTSyIsImxvYWROZXh0RmlsZSIsIl9maWxlc1RvTG9hZCIsIl90b0FycmF5MiIsImZpbGUiLCJyZW1haW5pbmdGaWxlc1RvTG9hZCIsIm1ha2VMb2FkRmlsZVRhc2siLCJMT0FEX0ZJTEVfVEFTSyIsImJpbWFwIiwiZ2VuIiwibmV4dEZpbGVCYXRjaCIsInByb2Nlc3NGaWxlQ29udGVudCIsImNvbnRlbnQiLCJsb2FkRmlsZXNFcnIiLCJwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyIiwiX2FjdGlvbiRwYXlsb2FkMiIsIlBST0NFU1NfRklMRV9EQVRBIiwibG9hZEZpbGVTdGVwU3VjY2VzcyIsInBhcnNlUHJvZ3Jlc3MiLCJwcmV2UHJvZ3Jlc3MiLCJuZXh0RmlsZUJhdGNoVXBkYXRlciIsIl9yZWYxOCIsIl9hY2N1bXVsYXRlZCRkYXRhIiwiX3JlZjE4JHBheWxvYWQiLCJhY2N1bXVsYXRlZCIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwidXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmciLCJlbmRzV2l0aCIsImRhdGEiLCJVTldSQVBfVEFTSyIsIl9yZWYxOSIsImxvYWRGaWxlc0VyclVwZGF0ZXIiLCJfcmVmMjAiLCJfc3RhdGUkZmlsZUxvYWRpbmcyIiwiYXBwbHlDUFVGaWx0ZXJVcGRhdGVyIiwiX3JlZjIxIiwiZGF0YUlkcyIsImZpbHRlckRhdGFzZXRDUFUiLCJzZXRNYXBJbmZvVXBkYXRlciIsImVtcHR5IiwiZGVmYXVsdExheWVycyIsImZvdW5kTGF5ZXJzIiwiZmluZERlZmF1bHRMYXllciIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwiZmluZEZpZWxkc1RvU2hvdyIsIm1lcmdlZCIsIl9yZWYyMyIsImZpeGVkRG9tYWluIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTciLCJfc3RhdGUkZmlsdGVycyIsImFuaW1hdGFibGVMYXllcnMiLCJsYXllckRvbWFpbnMiLCJtZXJnZWREb21haW4iLCJtZXJnZVRpbWVEb21haW5zIiwiZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyIiwibWVyZ2VkVGltZVN0ZXBzIiwic29ydCIsIkJBU0VfU1BFRUQiLCJGUFMiLCJzeW5jZWRGaWx0ZXIiLCJuZXdBbmltYXRpb25Eb21haW4iLCJpc0luUmFuZ2UiLCJzZXRFZGl0b3JNb2RlVXBkYXRlciIsIl9yZWYyNCIsInNldEZlYXR1cmVzVXBkYXRlciIsIl9yZWYyNSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aSIsIl9yZWYyNSRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwiRURJVCIsImZlYXR1cmUiLCJiYm94IiwiZmVhdHVyZVZhbHVlIiwiZmlsdGVySWR4IiwiZmlsIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWYyNiIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWYyNyIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzTGF5ZXJJbmNsdWRlZCIsImdlbmVyYXRlUG9seWdvbkZpbHRlciIsInNvcnRUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmMjgiLCJjb2x1bW4iLCJzb3J0TW9kZSIsImN1cnJlbnRNb2RlIiwiU09SVF9PUkRFUiIsIkFTQ0VORElORyIsInNvcnRlZCIsInNvcnREYXRhc2V0QnlDb2x1bW4iLCJwaW5UYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmMjkiLCJwaW5UYWJsZUNvbHVtbnMiLCJjb3B5VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjMwIiwiZmllbGRJZHgiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInJvdyIsInBhcnNlRmllbGRWYWx1ZSIsInZhbHVlQXQiLCJqb2luIiwiY29weSIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjMxIiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnIiwiY29sb3JGaWVsZCIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmMzIiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjMzIiwibGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlciIsIl9sYXllciRmaWx0ZXJlZEl0ZW1DbyIsImV2ZW50IiwiZGVja2dsTGF5ZXJJZCIsImNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28yIiwiX2FjdGlvbiRlbmFibGUiLCJpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciIsIkJvb2xlYW4iLCJuZXdGaWx0ZXJEb21haW4iLCJBTklNQVRJT05fV0lORE9XIiwiaW50ZXJ2YWwiLCJhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwiLCJuZXdGaWx0ZXJWYWx1ZSIsInN5bmNUaW1lbGluZU1vZGUiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsInRpbWVsaW5lVmFsdWUiLCJnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlciIsInNuYXBUb01hcmtzIiwiZnJlZSIsIl9maWx0ZXIkc3luY1RpbWVsaW5lTSIsIm5ld01vZGUiLCJzdGFydCIsImludGVydmFsSW5kZXgiLCJjdXJyZW50SW5kZXgiLCJtZXRhIiwidGFyZ2V0VGltZUludGVydmFsIiwibmV3SW5kZXgiLCJUSU1FX0lOVEVSVkFMU19PUkRFUkVEIiwiaGV4VGlsZUludGVydmFsIiwiTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCIsImdldERlZmF1bHRUaW1lRm9ybWF0IiwidXBkYXRlZFBsb3RUeXBlIiwidXBkYXRlVGltZUZpbHRlclBsb3RUeXBlIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsImRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl92YWx1ZSRjb25maWciLCJfdmFsdWUkY29uZmlnMiIsInJlcGxhY2VkIiwiaXNPYmplY3QiLCJmaW5kQ2hpbGREYXRhc2V0SWRzIiwiX3ZhbHVlJG5ld0RhdGFzZXQiLCJjaGlsZERhdGFJZHMiLCJtb3ZlVmFsdWVUb0JlTWVyZ2VkIiwicHJvcFZhbHVlcyIsIl9yZWYzNSIsInNhdmVVbm1lcmdlZCIsInN0YXRlUmVtb3ZlZCIsInByb3BWYWx1ZSIsInAiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJjb21wb3NlXyIsImFwcGx5XyIsInJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSIsIl9uZXh0U3RhdGUkbGF5ZXJUb0JlTSIsInNlcmlhbGl6ZWRTdGF0ZSIsInNlcmlhbGl6ZVZpc1N0YXRlIiwicHJlc2VydmVMYXllck9yZGVyIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJfc2VyaWFsaXplZFN0YXRlJHNwbGkiLCJfcmVmMzYiLCJhY2N1U3RhdGUiLCJfcmVmMzciLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIm1lcmdlck9wdGlvbnMiLCJyZXBsYWNlZEl0ZW0iLCJyZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZSIsIml0ZW0iLCJfcmVmMzgiLCJjaGlsZERhdGFJZCJdLCJzb3VyY2VzIjpbIi4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IGJib3ggZnJvbSAnQHR1cmYvYmJveCc7XG5pbXBvcnQgY29weSBmcm9tICdjb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC5jbG9uZWRlZXAnO1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2guZ2V0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC5pc2VxdWFsJztcbmltcG9ydCBwaWNrIGZyb20gJ2xvZGFzaC5waWNrJztcbmltcG9ydCB1bmlxIGZyb20gJ2xvZGFzaC51bmlxJztcbmltcG9ydCB4b3IgZnJvbSAnbG9kYXNoLnhvcic7XG5pbXBvcnQgVGFzaywge2Rpc2FibGVTdGFja0NhcHR1cmluZywgd2l0aFRhc2t9IGZyb20gJ3JlYWN0LXBhbG0vdGFza3MnO1xuLy8gVGFza3NcbmltcG9ydCB7XG4gIERFTEFZX1RBU0ssXG4gIEFDVElPTl9UQVNLLFxuICBMT0FEX0ZJTEVfVEFTSyxcbiAgUFJPQ0VTU19GSUxFX0RBVEEsXG4gIFVOV1JBUF9UQVNLXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gQWN0aW9uc1xuaW1wb3J0IHtcbiAgYWRkTm90aWZpY2F0aW9uLFxuICBBY3Rpb25UeXBlcyxcbiAgQ3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkLFxuICBNYXBTdGF0ZUFjdGlvbnMsXG4gIFJlY2VpdmVNYXBDb25maWdQYXlsb2FkLFxuICBWaXNTdGF0ZUFjdGlvbnMsXG4gIGFwcGx5TGF5ZXJDb25maWcsXG4gIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzLFxuICBsYXllckNvbmZpZ0NoYW5nZSxcbiAgbGF5ZXJUeXBlQ2hhbmdlLFxuICBsYXllclZpc0NvbmZpZ0NoYW5nZSxcbiAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlLFxuICBsb2FkRmlsZVN0ZXBTdWNjZXNzLFxuICBsb2FkRmlsZXNFcnIsXG4gIGxvYWRGaWxlc1N1Y2Nlc3MsXG4gIGxvYWROZXh0RmlsZSxcbiAgbmV4dEZpbGVCYXRjaCxcbiAgc2V0RmlsdGVyLFxuICBwcm9jZXNzRmlsZUNvbnRlbnQsXG4gIGZpdEJvdW5kcyBhcyBmaXRNYXBCb3VuZHMsXG4gIHNldExvYWRpbmdJbmRpY2F0b3IsXG4gIHRvZ2dsZUxheWVyRm9yTWFwLFxuICBhcHBseUZpbHRlckNvbmZpZ1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgYXJyYXlJbnNlcnQsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbixcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXIsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgdG9BcnJheX0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuLy8gTWVyZ2Vyc1xuaW1wb3J0IHtcbiAgQU5JTUFUSU9OX1dJTkRPVyxcbiAgQkFTRV9TUEVFRCxcbiAgQ09NUEFSRV9UWVBFUyxcbiAgREVGQVVMVF9URVhUX0xBQkVMLFxuICBFRElUT1JfTU9ERVMsXG4gIEZJTFRFUl9UWVBFUyxcbiAgRklMVEVSX1ZJRVdfVFlQRVMsXG4gIEZQUyxcbiAgTElHSFRfQU5EX1NIQURPV19FRkZFQ1QsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBQTE9UX1RZUEVTLFxuICBTT1JUX09SREVSLFxuICBTWU5DX1RJTUVMSU5FX01PREVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgU0NBTEVfVFlQRVNcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtMQVlFUl9JRF9MRU5HVEgsIExheWVyLCBMYXllckNsYXNzZXN9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIGFwcGx5XyxcbiAgY29tcG9zZV8sXG4gIGZpbHRlck91dEJ5SWQsXG4gIG1lcmdlXyxcbiAgcGlja18sXG4gIHJlbW92ZUVsZW1lbnRBdEluZGV4LFxuICBzd2FwX1xufSBmcm9tICcuL2NvbXBvc2VyLWhlbHBlcnMnO1xuaW1wb3J0IHtpc1ZhbGlkTWVyZ2VyLCBtZXJnZVN0YXRlRnJvbU1lcmdlcnN9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHtcbiAgVklTX1NUQVRFX01FUkdFUlMsXG4gIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyxcbiAgcGFyc2VMYXllckNvbmZpZyxcbiAgc2VyaWFsaXplRmlsdGVyLFxuICBzZXJpYWxpemVMYXllcixcbiAgc2VyaWFsaXplVmlzU3RhdGUsXG4gIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YVxufSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuXG5pbXBvcnQgS2VwbGVyR0xTY2hlbWEsIHtNZXJnZXIsIFBvc3RNZXJnZXJQYXlsb2FkLCBWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IHtcbiAgRmlsdGVyLFxuICBJbnRlcmFjdGlvbkNvbmZpZyxcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBGaWx0ZXJBbmltYXRpb25Db25maWcsXG4gIEVkaXRvcixcbiAgRmllbGQsXG4gIFRpbWVSYW5nZUZpbHRlclxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgYXNzaWduR3B1Q2hhbm5lbCxcbiAgY29weVRhYmxlQW5kVXBkYXRlLFxuICBjcmVhdGVOZXdEYXRhRW50cnksXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc2V0RmlsdGVyR3B1TW9kZSxcbiAgc29ydERhdGFzZXRCeUNvbHVtblxufSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7ZmluZEZpZWxkc1RvU2hvd30gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5pbXBvcnQge2NhbGN1bGF0ZUxheWVyRGF0YSwgZmluZERlZmF1bHRMYXllciwgZ2V0TGF5ZXJPcmRlckZyb21MYXllcnN9IGZyb20gJy4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtnZXRQcm9wVmFsdWVUb01lcmdlciwgaGFzUHJvcHNUb01lcmdlfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7bWVyZ2VEYXRhc2V0c0J5T3JkZXJ9IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5pbXBvcnQge1xuICBmaXhFZmZlY3RPcmRlcixcbiAgZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMsXG4gIGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMsXG4gIG1lcmdlVGltZURvbWFpbnMsXG4gIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3csXG4gIHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSxcbiAgZ2V0RGVmYXVsdFRpbWVGb3JtYXQsXG4gIExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwsXG4gIFRJTUVfSU5URVJWQUxTX09SREVSRUQsXG4gIG1lcmdlRmlsdGVyRG9tYWluLFxuICBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGVcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7UGF5bG9hZEFjdGlvbn0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcblxuLy8gcmVhY3QtcGFsbVxuLy8gZGlzYWJsZSBjYXB0dXJlIGV4Y2VwdGlvbiBmb3IgcmVhY3QtcGFsbSBjYWxsIHRvIHdpdGhUYXNrXG5kaXNhYmxlU3RhY2tDYXB0dXJpbmcoKTtcblxuLyoqXG4gKiBVcGRhdGVycyBmb3IgYHZpc1N0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHt2aXNTdGF0ZVVwZGF0ZXJzfSBmcm9tICdrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIGNvbXBhcmVNb2RlOiBmYWxzZSxcbiAgICAgIGNvbXBhcmVUeXBlOiBDT01QQVJFX1RZUEVTLkFCU09MVVRFXG4gICAgfVxuICB9LFxuICBnZW9jb2Rlcjoge1xuICAgIGlkOiAnZ2VvY29kZXInLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmdlb2NvZGVyJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbFxuICB9LFxuICBicnVzaDoge1xuICAgIGlkOiAnYnJ1c2gnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmJydXNoJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBjb25maWc6IHtcbiAgICAgIC8vIHNpemUgaXMgaW4ga21cbiAgICAgIHNpemU6IDAuNVxuICAgIH1cbiAgfSxcbiAgY29vcmRpbmF0ZToge1xuICAgIGlkOiAnY29vcmRpbmF0ZScsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuY29vcmRpbmF0ZScsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGxcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRzogQW5pbWF0aW9uQ29uZmlnID0ge1xuICBkb21haW46IG51bGwsXG4gIGN1cnJlbnRUaW1lOiBudWxsLFxuICBzcGVlZDogMSxcbiAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICB0aW1lU3RlcHM6IG51bGwsXG4gIHRpbWVGb3JtYXQ6IG51bGwsXG4gIHRpbWV6b25lOiBudWxsLFxuICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbCxcbiAgaGlkZUNvbnRyb2w6IGZhbHNlLFxuICBkdXJhdGlvbjogbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRURJVE9SOiBFZGl0b3IgPSB7XG4gIG1vZGU6IEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04sXG4gIGZlYXR1cmVzOiBbXSxcbiAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICB2aXNpYmxlOiB0cnVlXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX1ZJU19TVEFURTogVmlzU3RhdGUgPSB7XG4gIC8vIG1hcCBpbmZvXG4gIG1hcEluZm86IHtcbiAgICB0aXRsZTogJycsXG4gICAgZGVzY3JpcHRpb246ICcnXG4gIH0sXG4gIC8vIGxheWVyc1xuICBsYXllcnM6IFtdLFxuICBsYXllckRhdGE6IFtdLFxuICBsYXllclRvQmVNZXJnZWQ6IFtdLFxuICBsYXllck9yZGVyOiBbXSxcblxuICAvLyBmaWx0ZXJzXG4gIGZpbHRlcnM6IFtdLFxuICBmaWx0ZXJUb0JlTWVyZ2VkOiBbXSxcblxuICAvLyBhIGNvbGxlY3Rpb24gb2YgbXVsdGlwbGUgZGF0YXNldFxuICBkYXRhc2V0czoge30sXG4gIGVkaXRpbmdEYXRhc2V0OiB1bmRlZmluZWQsXG5cbiAgLy8gZWZmZWN0c1xuICBlZmZlY3RzOiBbXSxcbiAgZWZmZWN0T3JkZXI6IFtdLFxuXG4gIGludGVyYWN0aW9uQ29uZmlnOiBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWcsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDoge30sXG5cbiAgbGF5ZXJCbGVuZGluZzogJ25vcm1hbCcsXG4gIG92ZXJsYXlCbGVuZGluZzogJ25vcm1hbCcsXG4gIGhvdmVySW5mbzogdW5kZWZpbmVkLFxuICBjbGlja2VkOiB1bmRlZmluZWQsXG4gIG1vdXNlUG9zOiB7fSxcbiAgbWF4RGVmYXVsdFRvb2x0aXBzOiBNQVhfREVGQVVMVF9UT09MVElQUyxcblxuICAvLyB0aGlzIGlzIHVzZWQgd2hlbiB1c2VyIHNwbGl0IG1hcHNcbiAgc3BsaXRNYXBzOiBbXG4gICAgLy8gdGhpcyB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIG9iamVjdHMgdG9cbiAgICAvLyBkZXNjcmliZSB0aGUgc3RhdGUgb2YgbGF5ZXIgYXZhaWxhYmlsaXR5IGFuZCB2aXNpYmlsaXR5IGZvciBlYWNoIG1hcFxuICAgIC8vIFtcbiAgICAvLyAgIHtcbiAgICAvLyAgICAgIGxheWVyczoge2xheWVyX2lkOiB0cnVlIHwgZmFsc2V9XG4gICAgLy8gICB9XG4gICAgLy8gXVxuICBdLFxuICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbXSxcbiAgaXNNZXJnaW5nRGF0YXNldHM6IHt9LFxuICAvLyBkZWZhdWx0cyBsYXllciBjbGFzc2VzXG4gIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzLFxuXG4gIC8vIGRlZmF1bHQgYW5pbWF0aW9uXG4gIC8vIHRpbWUgaW4gdW5peCB0aW1lc3RhbXAgKG1pbGxpc2Vjb25kcykgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgVW5peCBFcG9jaClcbiAgYW5pbWF0aW9uQ29uZmlnOiBERUZBVUxUX0FOSU1BVElPTl9DT05GSUcsXG5cbiAgZWRpdG9yOiBERUZBVUxUX0VESVRPUixcblxuICBmaWxlTG9hZGluZzogZmFsc2UsXG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuXG4gIGxvYWRlcnM6IFtdLFxuICBsb2FkT3B0aW9uczoge30sXG5cbiAgLy8gdmlzU3RhdGVNZXJnZXJzXG4gIG1lcmdlcnM6IFZJU19TVEFURV9NRVJHRVJTLFxuXG4gIC8vIGtlcGxlciBzY2hlbWFzXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFcbn07XG5cbnR5cGUgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZSA9IHtcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllckRhdGE6IGFueVtdO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgd2l0aCB1cGRhdGVkIGxheWVyIGFuZCBsYXllckRhdGFcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGE8UyBleHRlbmRzIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGU+KFxuICBzdGF0ZTogUyxcbiAge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH06IHtsYXllckRhdGE/OiBhbnk7IGxheWVyOiBMYXllcjsgaWR4OiBudW1iZXJ9XG4pOiBTIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAoKGx5ciwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyIDogbHlyKSksXG4gICAgbGF5ZXJEYXRhOiBsYXllckRhdGFcbiAgICAgID8gc3RhdGUubGF5ZXJEYXRhLm1hcCgoZCwgaSkgPT4gKGkgPT09IGlkeCA/IGxheWVyRGF0YSA6IGQpKVxuICAgICAgOiBzdGF0ZS5sYXllckRhdGFcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2U8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgbGF5ZXI6IExheWVyKTogUyB7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgICAgPyBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgICAgIDogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXIpXG4gICAgfTtcbiAgfVxuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIG9iamVjdHMgKG9yIGFycmF5cykgYW5kIHJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggb25seSB0aGVcbiAqIHByb3BlcnRpZXMgdGhhdCBoYXZlIGNoYW5nZWQgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIHBpY2tDaGFuZ2VkUHJvcHM8VD4ocHJldjogVCwgbmV4dDogVCk6IFBhcnRpYWw8VD4ge1xuICBjb25zdCBjaGFuZ2VkUHJvcHM6IFBhcnRpYWw8VD4gPSB7fTtcbiAgY29uc3QgcGlja1Byb3BzT2YgPSBvYmogPT4ge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZWRQcm9wcywga2V5KSAmJlxuICAgICAgICAhaXNFcXVhbChwcmV2W2tleV0sIG5leHRba2V5XSlcbiAgICAgICkge1xuICAgICAgICBjaGFuZ2VkUHJvcHNba2V5XSA9IG5leHRba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgcGlja1Byb3BzT2YocHJldik7XG4gIHBpY2tQcm9wc09mKG5leHQpO1xuICByZXR1cm4gY2hhbmdlZFByb3BzO1xufVxuXG5jb25zdCBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTID0gWydmaWVsZCcsICdzY2FsZScsICdkb21haW4nLCAnYWdncmVnYXRpb24nXTtcblxuLyoqXG4gKiBBcHBseSBsYXllciBjb25maWdcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHksIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlMYXllckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVySWQsIG5ld0xheWVyQ29uZmlnLCBsYXllckluZGV4fSA9IGFjdGlvbjtcbiAgY29uc3QgbmV3UGFyc2VkTGF5ZXIgPVxuICAgIC8vIHdpbGwgbW92ZSB2aXN1YWxDaGFubmVscyB0byB0aGUgY29uZmlnIHByb3BcbiAgICBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbmV3TGF5ZXJDb25maWcpO1xuICBjb25zdCBvbGRMYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gIGlmICghb2xkTGF5ZXIgfHwgIW5ld1BhcnNlZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllckluZGV4ICE9PSBudWxsICYmIGxheWVySW5kZXggIT09IHVuZGVmaW5lZCAmJiBzdGF0ZS5sYXllcnNbbGF5ZXJJbmRleF0gIT09IG9sZExheWVyKSB7XG4gICAgLy8gbGF5ZXJJbmRleCBpcyBwcm92aWRlZCwgYnV0IGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIG9sZExheWVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tuZXdQYXJzZWRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgdmFsaWQgYW5kIGNvbnZlcnQgaXQgdG8gTGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbmV3UGFyc2VkTGF5ZXIsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIGlmICghbmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgaWYgKG5ld0xheWVyLnR5cGUgJiYgbmV3TGF5ZXIudHlwZSAhPT0gb2xkTGF5ZXIudHlwZSkge1xuICAgIGNvbnN0IG9sZExheWVySW5kZXggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gICAgaWYgKG9sZExheWVySW5kZXggPj0gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihuZXh0U3RhdGUsIGxheWVyVHlwZUNoYW5nZShvbGRMYXllciwgbmV3TGF5ZXIudHlwZSkpO1xuICAgICAgLy8gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciBjaGFuZ2VzIHRoZSBpZCBvZiB0aGUgbGF5ZXIsIHNvIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBuZXcgaWRcbiAgICAgIC8vIGJ1dCBmaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgbGF5ZXIgd2FzIG5vdCByZW1vdmVkXG4gICAgICBpZiAobmV4dFN0YXRlLmxheWVycy5sZW5ndGggPT09IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJJZCA9IG5leHRTdGF0ZS5sYXllcnNbb2xkTGF5ZXJJbmRleF0uaWQ7XG4gICAgICAgIG5leHRTdGF0ZSA9IGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBhcHBseUxheWVyQ29uZmlnKG5ld0xheWVySWQsIHsuLi5uZXdMYXllckNvbmZpZywgaWQ6IG5ld0xheWVySWR9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgLy8gc2VyaWFsaXplTGF5ZXIoKSBtaWdodCByZXR1cm4gbnVsbCBpZiB0aGUgb2xkIGxheWVyIGlzIG5vdCB2YWxpZCxcbiAgLy8gd2Ugc2hvdWxkIHN0aWxsIGFwcGx5IHRoZSBjaGFuZ2VzIGluIHRoYXQgY2FzZVxuICBjb25zdCBzZXJpYWxpemVkT2xkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvbGRMYXllciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdMYXllciA9IHNlcmlhbGl6ZUxheWVyKG5ld0xheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWlzRXF1YWwoc2VyaWFsaXplZE9sZExheWVyLCBzZXJpYWxpemVkTmV3TGF5ZXIpKSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZExheWVyLmNvbmZpZywgc2VyaWFsaXplZE5ld0xheWVyLmNvbmZpZyk7XG5cbiAgICBpZiAoJ3Zpc0NvbmZpZycgaW4gY2hhbmdlZCkge1xuICAgICAgaWYgKGNoYW5nZWQudmlzQ29uZmlnKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXNDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIGNoYW5nZWQudmlzQ29uZmlnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVsZXRlIGNoYW5nZWQudmlzQ29uZmlnO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG9sZExheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxOYW1lID0+IHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsTmFtZV07XG4gICAgICBjb25zdCBjaGFubmVsUHJvcE5hbWVzID0gVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUy5tYXAocHJvcCA9PiBjaGFubmVsW3Byb3BdKTtcbiAgICAgIGlmIChjaGFubmVsUHJvcE5hbWVzLnNvbWUocHJvcCA9PiBwcm9wIGluIGNoYW5nZWQpKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZShcbiAgICAgICAgICAgIG9sZExheWVyLFxuICAgICAgICAgICAgcGljayhuZXdMYXllci5jb25maWcsIGNoYW5uZWxQcm9wTmFtZXMpLFxuICAgICAgICAgICAgY2hhbm5lbE5hbWVcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBjaGFubmVsUHJvcE5hbWVzKSB7XG4gICAgICAgICAgZGVsZXRlIGNoYW5nZWRbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhjaGFuZ2VkKS5sZW5ndGggPiAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBPYmplY3Qua2V5cyhjaGFuZ2VkKSkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZWxheWVyVmlzaWJpbHR5KHN0YXRlOiBWaXNTdGF0ZSwgbmV3TGF5ZXI6IExheWVyLCBpc1Zpc2libGU/OiBib29sZWFuKTogVmlzU3RhdGUge1xuICBsZXQgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlKHN0YXRlLCBuZXdMYXllcik7XG4gIGNvbnN0IGZpbHRlckluZGV4ID0gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlKTtcbiAgaWYgKGlzTGF5ZXJBbmltYXRhYmxlKG5ld0xheWVyKSAmJiBmaWx0ZXJJbmRleCAhPT0gLTEpIHtcbiAgICAvLyBpZiBsYXllciBpcyBnb2luZyB0byBiZSB2aXNpYmxlIHdlIHN5bmMgd2l0aCBmaWx0ZXIgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBvdGhlciBhbmltYXRhYmxlIGxheWVycyBleGlzdHMgYW5kIGFyZSB2aXNpYmxlXG4gICAgbmV3U3RhdGUgPSBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgIGVuYWJsZTogaXNWaXNpYmxlID8gaXNWaXNpYmxlIDogZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKS5sZW5ndGggPiAwXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld0NvbmZpZyk7XG4gIGlmIChcbiAgICB0eXBlb2YgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgPT09ICdzdHJpbmcnICYmXG4gICAgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgIT09IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgKSB7XG4gICAgY29uc3Qge2RhdGFJZCwgLi4ucmVzdENvbmZpZ30gPSBhY3Rpb24ubmV3Q29uZmlnO1xuICAgIGNvbnN0IHN0YXRlV2l0aERhdGFJZCA9IGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdDb25maWc6IHtkYXRhSWR9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dExheWVyID0gc3RhdGVXaXRoRGF0YUlkLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICAgIHJldHVybiBuZXh0TGF5ZXIgJiYgT2JqZWN0LmtleXMocmVzdENvbmZpZykubGVuZ3RoXG4gICAgICA/IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZVdpdGhEYXRhSWQsIHtvbGRMYXllcjogbmV4dExheWVyLCBuZXdDb25maWc6IHJlc3RDb25maWd9KVxuICAgICAgOiBzdGF0ZVdpdGhEYXRhSWQ7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhhY3Rpb24ubmV3Q29uZmlnKTtcblxuICBsZXQgbGF5ZXJEYXRhO1xuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gc3RhdGUubGF5ZXJEYXRhW2lkeF07XG5cbiAgICBjb25zdCB1cGRhdGVMYXllckRhdGFSZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIG5ld0xheWVyID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyO1xuICAgIGxheWVyRGF0YSA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllckRhdGE7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKCdpc1Zpc2libGUnIGluIGFjdGlvbi5uZXdDb25maWcpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgYWN0aW9uLm5ld0NvbmZpZy5pc1Zpc2libGUpO1xuICB9XG5cbiAgaWYgKCdjb2x1bW5zJyBpbiBhY3Rpb24ubmV3Q29uZmlnICYmIG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIC8vIFRPRE86IFNoYW4sIG1ha2UgdGhlIGFuaW1hdGlvbiBjb25maWcgZnVuY3Rpb24gbW9yZSByb2J1c3RcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBpZHhcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgYWN0aW9uKTogUyB7XG4gIGNvbnN0IHtvbGRMYXllciwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGFuaW1hdGlvbjoge1xuICAgICAgLi4ub2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbixcbiAgICAgIFtwcm9wXTogdmFsdWVcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpZHhdKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZFxuICogaGFuZGxlcyB0d28gY2FzZXM6XG4gKiAxKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgbG9jYWwgU3BsaXRNYXAgbGF5ZXIgKHZpc1N0YXRlLnNwbGl0TWFwLmxheWVycylcbiAqIDIpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBnbG9iYWwgbGF5ZXIgKHZpc1N0YXRlLmxheWVycylcblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGQgPT4gZC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgaWYgKCFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChzcGxpdE1hcElkKSB7XG4gICAgLy8gW2Nhc2UgMV06IHRvZ2dsZSBsb2NhbCBsYXllciB2aXNpYmlsaXR5IGZvciBlYWNoIFNwbGl0TWFwXG4gICAgY29uc3QgbWFwSW5kZXggPSBuZXdTdGF0ZS5zcGxpdE1hcHMuZmluZEluZGV4KHNtID0+IHNtLmlkID09PSBzcGxpdE1hcElkKTtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAvLyAxKSBpZiB0aGUgbGF5ZXIgaXMgaW52aXNpYmxlIGdsb2JhbGx5XG4gICAgICAvLyAtPiBzZXQgZ2xvYmFsIHZpc2liaWxpdHkgdG8gdHJ1ZVxuICAgICAgbmV3U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIobmV3U3RhdGUsIGxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCB7aXNWaXNpYmxlOiB0cnVlfSkpO1xuXG4gICAgICAvLyAtPiBzZXQgbG9jYWwgdmlzaWJpbGl0eSB0byB0cnVlIGFuZCB0aGUgbG9jYWwgdmlzaWJpbGl0aWVzIG9mIGFsbCBvdGhlciBTcGxpdE1hcHMgdG8gZmFsc2VcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc20gPT5cbiAgICAgICAgICBzbS5pZCAhPT0gc3BsaXRNYXBJZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyAyKSBlbHNlIHdoZW4gdGhlIGxheWVyIGlzIHZpc2libGUgZ2xvYmFsbHlcbiAgICByZXR1cm4gdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyKG5ld1N0YXRlLCB0b2dnbGVMYXllckZvck1hcChtYXBJbmRleCwgbGF5ZXJJZCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIFtjYXNlIDJdOiB0b2dnbGUgZ2xvYmFsIGxheWVyIHZpc2liaWxpdHlcbiAgICBjb25zdCBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtpc1Zpc2libGV9KTtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgaXNWaXNpYmxlKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgICBpZHhcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIGluZGV4IG9mIHRoZSBmaWx0ZXIgc3luY2VkIHRvIHRpbWVsaW5lIG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZTogVmlzU3RhdGUpOiBudW1iZXIge1xuICByZXR1cm4gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGlzVmFsaWQgZmxhZyBvZiBhIGxheWVyLlxuICogVXBkYXRlcyBpc1Zpc2libGUgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGlzVmFsaWQuXG4gKiBUcmlnZ2VycyB1cGRhdGUgb2YgZGF0YSBmb3IgdGhlIGxheWVyIGluIG9yZGVyIHRvIGdldCBlcnJvcnMgYWdhaW4gZHVyaW5nIG5leHQgdXBkYXRlIGl0ZXJhdGlvbi5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyU2V0SXNWYWxpZFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJTZXRJc1ZhbGlkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlzVmFsaWR9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IGxheWVyVG9VcGRhdGUgPSBzdGF0ZS5sYXllcnNbaWR4XTtcbiAgaWYgKGxheWVyVG9VcGRhdGUpIHtcbiAgICBsZXQgbmV3TGF5ZXI7XG4gICAgbGV0IG5ld0RhdGEgPSBudWxsO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIFRyaWdnZXIgZGF0YSB1cGRhdGUgaW4gb3JkZXIgdG8gc2hvdyBlcnJvcnMgYWdhaW4gaWYgcHJlc2VudC5cbiAgICAgIGNvbnN0IHtsYXllciwgbGF5ZXJEYXRhfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShsYXllclRvVXBkYXRlLCBzdGF0ZSwgdW5kZWZpbmVkKTtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXI7XG4gICAgICBuZXdEYXRhID0gbGF5ZXJEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IGxheWVyVG9VcGRhdGUudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIG5ld0xheWVyLmlzVmFsaWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7aWR4LCBsYXllcjogbmV3TGF5ZXIsIGxheWVyRGF0YTogbmV3RGF0YX0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBhZGRPclJlbW92ZVRleHRMYWJlbHMobmV3RmllbGRzLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwgPSBERUZBVUxUX1RFWFRfTEFCRUwpIHtcbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGNvbnN0IGN1cnJlbnRGaWVsZHMgPSB0ZXh0TGFiZWwubWFwKHRsID0+IHRsLmZpZWxkICYmIHRsLmZpZWxkLm5hbWUpLmZpbHRlcihkID0+IGQpO1xuXG4gIGNvbnN0IGFkZEZpZWxkcyA9IG5ld0ZpZWxkcy5maWx0ZXIoZiA9PiAhY3VycmVudEZpZWxkcy5pbmNsdWRlcyhmLm5hbWUpKTtcbiAgY29uc3QgZGVsZXRlRmllbGRzID0gY3VycmVudEZpZWxkcy5maWx0ZXIoZiA9PiAhbmV3RmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gZikpO1xuXG4gIC8vIGRlbGV0ZVxuICBuZXdUZXh0TGFiZWwgPSBuZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkICYmICFkZWxldGVGaWVsZHMuaW5jbHVkZXModGwuZmllbGQubmFtZSkpO1xuICBuZXdUZXh0TGFiZWwgPSAhbmV3VGV4dExhYmVsLmxlbmd0aCA/IFtkZWZhdWx0VGV4dExhYmVsXSA6IG5ld1RleHRMYWJlbDtcblxuICAvLyBhZGRcbiAgbmV3VGV4dExhYmVsID0gW1xuICAgIC4uLm5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQpLFxuICAgIC4uLmFkZEZpZWxkcy5tYXAoYWYgPT4gKHtcbiAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICBmaWVsZDogYWZcbiAgICB9KSlcbiAgXTtcblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgdGV4dExhYmVsKSB7XG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRleHRMYWJlbFtpZHhdLCBwcm9wKSkge1xuICAgIHJldHVybiB0ZXh0TGFiZWw7XG4gIH1cblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgaWYgKHByb3AgPT09ICdmaWVsZCcgJiYgdmFsdWUgPT09IG51bGwgJiYgdGV4dExhYmVsLmxlbmd0aCA+IDEpIHtcbiAgICAvLyByZW1vdmUgbGFiZWwgd2hlbiBmaWVsZCB2YWx1ZSBpcyBzZXQgdG8gbnVsbFxuICAgIG5ld1RleHRMYWJlbC5zcGxpY2UoaWR4LCAxKTtcbiAgfSBlbHNlIGlmIChwcm9wKSB7XG4gICAgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLm1hcCgodGwsIGkpID0+IChpID09PSBpZHggPyB7Li4udGwsIFtwcm9wXTogdmFsdWV9IDogdGwpKTtcbiAgfVxuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlkeCwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCB7dGV4dExhYmVsfSA9IG9sZExheWVyLmNvbmZpZztcblxuICAvLyB3aGVuIGFkZGluZyBhIG5ldyBlbXB0eSB0ZXh0IGxhYmVsLFxuICAvLyByZWx5IG9uIHRoZSBsYXllcidzIGRlZmF1bHQgY29uZmlnLCBvciB1c2UgdGhlIGNvbnN0YW50IERFRkFVTFRfVEVYVF9MQUJFTFxuICBjb25zdCBkZWZhdWx0VGV4dExhYmVsID1cbiAgICBvbGRMYXllci5nZXREZWZhdWx0TGF5ZXJDb25maWcoe2RhdGFJZDogJyd9KT8udGV4dExhYmVsPy5bMF0gPz8gREVGQVVMVF9URVhUX0xBQkVMO1xuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcbiAgaWYgKCF0ZXh0TGFiZWxbaWR4XSAmJiBpZHggPT09IHRleHRMYWJlbC5sZW5ndGgpIHtcbiAgICAvLyBpZiBpZHggaXMgc2V0IHRvIGxlbmd0aCwgYWRkIGVtcHR5IHRleHQgbGFiZWxcbiAgICBuZXdUZXh0TGFiZWwgPSBbLi4udGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsXTtcbiAgfVxuXG4gIGlmIChpZHggPT09ICdhbGwnICYmIHByb3AgPT09ICdmaWVsZHMnKSB7XG4gICAgbmV3VGV4dExhYmVsID0gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKHZhbHVlLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwpO1xuICB9IGVsc2Uge1xuICAgIG5ld1RleHRMYWJlbCA9IHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCBuZXdUZXh0TGFiZWwpO1xuICB9XG4gIC8vIHVwZGF0ZSB0ZXh0IGxhYmVsIHByb3AgYW5kIHZhbHVlXG4gIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBvbGRMYXllcixcbiAgICBuZXdDb25maWc6IHt0ZXh0TGFiZWw6IG5ld1RleHRMYWJlbH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxheWVyQ2xhc3NlcywgbGF5ZXIsIHNjaGVtYSkge1xuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKGxheWVyLCBzY2hlbWEpO1xuICByZXR1cm4gbG9hZGVkTGF5ZXJcbiAgICA/IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsb2FkZWRMYXllciwgbGF5ZXJDbGFzc2VzLCB7XG4gICAgICAgIGFsbG93RW1wdHlDb2x1bW46IHRydWVcbiAgICAgIH0pXG4gICAgOiBudWxsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBjb25maWcgZGF0YUlkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgb2xkTGF5ZXI6IExheWVyO1xuICAgIG5ld0NvbmZpZzoge1xuICAgICAgZGF0YUlkOiBzdHJpbmc7XG4gICAgfTtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld0NvbmZpZ30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWR9ID0gbmV3Q29uZmlnO1xuXG4gIGlmICghb2xkTGF5ZXIgfHwgIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkfSk7XG5cbiAgLy8gdGhpcyBtYXkgaGFwcGVuIHdoZW4gYSBsYXllciBpcyBuZXcgKHR5cGU6IG51bGwgYW5kIG5vIGNvbHVtbnMpIGJ1dCBpdCdzIG5vdCByZWFkeSB0byBiZSBzYXZlZFxuICBpZiAobmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgICBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLFxuICAgICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgICAgbmV3TGF5ZXIsXG4gICAgICBzdGF0ZS5zY2hlbWFcbiAgICApO1xuICAgIC8vIGlmIGNhbnQgdmFsaWRhdGUgaXQgd2l0aCBkYXRhIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICBpZiAoIXZhbGlkYXRlZCkge1xuICAgICAgY29uc3Qgb2xkTGF5ZXJUeXBlID0gb2xkTGF5ZXIudHlwZTtcbiAgICAgIGlmIChvbGRMYXllclR5cGUpIHtcbiAgICAgICAgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW29sZExheWVyVHlwZV0oe2RhdGFJZCwgaWQ6IG9sZExheWVyLmlkfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gdmFsaWRhdGVkO1xuICAgIH1cbiAgfVxuXG4gIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGlzVmlzaWJsZTogb2xkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZVxuICB9KTtcblxuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHVuZGVmaW5lZCk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5pdGlhbExheWVyQ29uZmlnKGxheWVyLCBkYXRhc2V0cywgbGF5ZXJDbGFzc2VzKTogTGF5ZXIge1xuICBsZXQgbmV3TGF5ZXIgPSBsYXllcjtcbiAgaWYgKCFPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoKSB7XG4gICAgLy8gbm8gZGF0YSBpcyBsb2FkZWRcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cbiAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgLy8gc2V0IGxheWVyIGRhdGFJZFxuICAgIG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZDogT2JqZWN0LmtleXMoZGF0YXNldHMpWzBdfSk7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvLyBmaW5kIGRlZmF1dCBsYXllciBwcm9wc1xuICBjb25zdCByZXN1bHQgPVxuICAgIHR5cGVvZiBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICA/IGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoZGF0YXNldCwgW10pXG4gICAgICA6IHtwcm9wczogW119O1xuXG4gIC8vIGFuIGFycmF5IG9mIHBvc3NpYmxlIHByb3BzLCB1c2UgMXN0IG9uZVxuICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcblxuICBpZiAocHJvcHMubGVuZ3RoKSB7XG4gICAgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW2xheWVyLnR5cGVdKHtcbiAgICAgIC4uLnByb3BzWzBdLFxuICAgICAgbGFiZWw6IG5ld0xheWVyLmNvbmZpZy5sYWJlbCxcbiAgICAgIGRhdGFJZDogbmV3TGF5ZXIuY29uZmlnLmRhdGFJZCxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBuZXdMYXllci5jb25maWcuaXNDb25maWdBY3RpdmVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpXG4gICAgOiBuZXdMYXllcjtcbn1cbi8qKlxuICogVXBkYXRlIGxheWVyIHR5cGUuIFByZXZpZXdzIGxheWVyIGNvbmZpZyB3aWxsIGJlIGNvcGllZCBpZiBhcHBsaWNhYmxlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld1R5cGV9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG9sZElkID0gb2xkTGF5ZXIuaWQ7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRJZCk7XG5cbiAgaWYgKCFzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0pIHtcbiAgICBDb25zb2xlLmVycm9yKGAke25ld1R5cGV9IGlzIG5vdCBhIHZhbGlkIGxheWVyIHR5cGVgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSh7XG4gICAgLy8ga2VlcCBvbGQgbGF5ZXIgbGFibGUgYW5kIGlzQ29uZmlnQWN0aXZlXG4gICAgbGFiZWw6IG9sZExheWVyLmNvbmZpZy5sYWJlbCxcbiAgICBpc0NvbmZpZ0FjdGl2ZTogb2xkTGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgIGRhdGFJZDogb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICB9KTtcblxuICBpZiAoIW9sZExheWVyLnR5cGUpIHtcbiAgICAvLyBpZiBzZXR0aW5nIGxheWVyIHR5cGUgb24gYW4gZW1wdHkgbGF5ZXJcbiAgICBuZXdMYXllciA9IHNldEluaXRpYWxMYXllckNvbmZpZyhuZXdMYXllciwgc3RhdGUuZGF0YXNldHMsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZ2V0IGEgbWludCBsYXllciwgd2l0aCBuZXcgaWQgYW5kIHR5cGVcbiAgICAvLyBiZWNhdXNlIGRlY2suZ2wgdXNlcyBpZCB0byBtYXRjaCBiZXR3ZWVuIG5ldyBhbmQgb2xkIGxheWVyLlxuICAgIC8vIElmIHR5cGUgaGFzIGNoYW5nZWQgYnV0IGlkIGlzIHRoZSBzYW1lLCBpdCB3aWxsIGJyZWFrXG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9XG4gICAgICB0eXBlb2Ygc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMoc3RhdGUuZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF0pXG4gICAgICAgIDogbnVsbDtcblxuICAgIG5ld0xheWVyLmFzc2lnbkNvbmZpZ1RvTGF5ZXIoXG4gICAgICBvbGRMYXllci5jb25maWcsXG4gICAgICBvbGRMYXllci52aXNDb25maWdTZXR0aW5ncyxcbiAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgZGVmYXVsdExheWVyUHJvcHNcbiAgICApO1xuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgfVxuXG4gIGNvbnN0IHtjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm9cbiAgfTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkIHx8IG9sZExheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzcGxpdE1hcCBsYXllciBpZFxuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4ge1xuICAgICAgICBjb25zdCB7W29sZElkXTogb2xkTGF5ZXJNYXAsIC4uLm90aGVyTGF5ZXJzfSA9IHNldHRpbmdzLmxheWVycztcbiAgICAgICAgcmV0dXJuIG9sZElkIGluIHNldHRpbmdzLmxheWVyc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3RoZXJMYXllcnMsXG4gICAgICAgICAgICAgICAgW2xheWVyLmlkXTogb2xkTGF5ZXJNYXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc2V0dGluZ3M7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICAvLyB1cGRhdGUgbGF5ZXJPcmRlciB3aXRoIG5ldyBpZFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdTdGF0ZS5sYXllck9yZGVyLm1hcChsYXllcklkID0+XG4gICAgICBsYXllcklkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyLmlkIDogbGF5ZXJJZFxuICAgIClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWcsIG5ld1Zpc0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpO1xuICBpZiAobmV3VmlzQ29uZmlnKSBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIC8vIGNhbGxpbmcgdXBkYXRlIGFuaW1hdGlvbiBkb21haW4gZmlyc3QgdG8gbWVyZ2UgYWxsIGxheWVyIGFuaW1hdGlvbiBkb21haW5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG5cbiAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICBpZiAodmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiYgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdKSB7XG4gICAgLy8gaWYgY29sb3IgZmllbGQgY2hhbmdlZCwgc2V0IGN1c3RvbUJyZWFrcyB0byBmYWxzZVxuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgIGxheWVyczogdXBkYXRlZFN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvbGRMYXllckRhdGEgPSB1cGRhdGVkU3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgdXBkYXRlZFN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIGlmIChcbiAgICB2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJlxuICAgIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsPy5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiZcbiAgICAhbmV3VmlzQ29uZmlnXG4gICkge1xuICAgIC8vIHdoZW4gc3dpdGNoaW5nIHRvIGN1c3RvbU9yZGluYWwgc2NhbGUsIGNyZWF0ZSBhIGN1c3RvbVBhbGV0dGUgaW4gY29sb3JVSSB3aXRoIHVwZGF0ZWQgY29sb3JEb21haW5cbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0gaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlKHtcbiAgICAgIHNjYWxlOiBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsLFxuICAgICAgZmllbGQ6IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSxcbiAgICAgIG9yZGluYWxEb21haW46IGxheWVyLmNvbmZpZ1tsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5kb21haW5dLFxuICAgICAgcmFuZ2U6IGxheWVyLmNvbmZpZy52aXNDb25maWdbdmlzdWFsQ2hhbm5lbC5yYW5nZV0sXG4gICAgICBjb2xvckJyZWFrczogbnVsbFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSBjb2xvclJhbmdlIHdpdGggbmV3IGN1c3RvbVBhbGV0dGVcbiAgICBsYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgc2hvd0NvbG9yQ2hhcnQ6IHRydWUsXG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHVwZGF0ZWRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3VmlzQ29uZmlnKTtcblxuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG8gYSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge3ZhbHVlfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFMgPT4ge1xuICBjb25zdCBjdXJyZW50VGltZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWVcbiAgICB9XG4gIH07XG4gIC8vIHVwZGF0ZSBhbmltYXRpb24gY29uZmlnIGZvciBlYWNoIGxheWVyXG4gIHJldHVybiBzdGF0ZS5sYXllcnMucmVkdWNlKChhY2N1LCBsKSA9PiB7XG4gICAgaWYgKGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmIGwudHlwZSAhPT0gJ3RyaXAnKSB7XG4gICAgICByZXR1cm4gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyKGFjY3UsIHtvbGRMYXllcjogbCwgcHJvcDogJ2N1cnJlbnRUaW1lJywgY3VycmVudFRpbWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3dcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7aWQsIGFuaW1hdGlvbldpbmRvd306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBhbmltYXRpb25XaW5kb3dcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICBjb25zdCBuZXdTeW5jVGltZWxpbmVNb2RlID0gZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcik7XG5cbiAgcmV0dXJuIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7aWQsIG1vZGU6IG5ld1N5bmNUaW1lbGluZU1vZGV9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZpbHRlcklkLCBuZXdGaWx0ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIHRoZSBmaWx0ZXJzIHRvIG9ubHkgY29tcGFyZSB0aGUgc2F2ZWQgcHJvcGVydGllc1xuICBjb25zdCBzZXJpYWxpemVkT2xkRmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG9sZEZpbHRlciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIobmV3RmlsdGVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdGaWx0ZXIgfHwgaXNFcXVhbChzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgZmlsdGVyLCBhcHBseSB0aGVtXG4gIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpO1xuICBkZWxldGUgY2hhbmdlZFsnaWQnXTsgLy8gaWQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkXG5cbiAgY29uc3QgZmlsdGVySW5kZXggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlckluZGV4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihcbiAgICBzdGF0ZSxcbiAgICBzZXRGaWx0ZXIoZmlsdGVySW5kZXgsIE9iamVjdC5rZXlzKGNoYW5nZWQpLCBPYmplY3QudmFsdWVzKGNoYW5nZWQpKVxuICApO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeCwgdmFsdWVJbmRleCA9IDB9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSAmJlxuICAgICghQXJyYXkuaXNBcnJheShhY3Rpb24udmFsdWUpIHx8IGFjdGlvbi5wcm9wLmxlbmd0aCAhPT0gYWN0aW9uLnZhbHVlLmxlbmd0aClcbiAgKSB7XG4gICAgQ29uc29sZS5lcnJvcignRXhwZWN0aW5nIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHRoZSBzYW1lIGxlbmd0aCwgc2luY2UgcHJvcCBpcyBhbiBhcnJheScpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBjb252ZXJ0IHByb3AgYW5kIHZhbHVlIHRvIGFycmF5XG4gIGNvbnN0IHByb3BzID0gdG9BcnJheShhY3Rpb24ucHJvcCk7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApID8gdG9BcnJheShhY3Rpb24udmFsdWUpIDogW2FjdGlvbi52YWx1ZV07XG5cbiAgbGV0IG5ld0ZpbHRlciA9IG9sZEZpbHRlcjtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgcGFzc2luZyBpbiBuYW1lIGFzIGFuIGFycmF5IGludG8gX3VwZGF0ZUZpbHRlclByb3AsIHNvIHdlIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMgd2l0aCBlYWNoIG5hbWVcbiAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlcmUgYXMgdG8gd2hhdCBzaG91bGQgYmUgYWRkcmVzc2VkXG4gICAgbGV0IHJlcztcbiAgICBpZiAocHJvcCA9PT0gJ25hbWUnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICByZXMgPSB2YWx1ZS5yZWR1Y2UoKGFjY3UsIHYpID0+IHtcbiAgICAgICAgcmV0dXJuIF91cGRhdGVGaWx0ZXJQcm9wKGFjY3UsIG5ld0ZpbHRlciwgcHJvcCwgdiwgdmFsdWVJbmRleCk7XG4gICAgICB9LCBuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IF91cGRhdGVGaWx0ZXJQcm9wKG5ld1N0YXRlLCBuZXdGaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gICAgbmV3RmlsdGVyID0gcmVzLmZpbHRlcjtcbiAgICBuZXdTdGF0ZSA9IHJlcy5zdGF0ZTtcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBkYXRhc2V0SWRzVG9GaWx0ZXIuY29uY2F0KHJlcy5kYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICB9XG5cbiAgY29uc3QgZW5sYXJnZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkKTtcblxuICBpZiAoZW5sYXJnZWRGaWx0ZXIgJiYgZW5sYXJnZWRGaWx0ZXIuaWQgIT09IG5ld0ZpbHRlci5pZCkge1xuICAgIC8vIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBlbmxhcmdlZCBmaWx0ZXJcbiAgICBuZXdGaWx0ZXIudmlldyA9IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGU7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIHVuaXEoZGF0YXNldElkc1RvRmlsdGVyKSxcbiAgICBuZXdTdGF0ZS5kYXRhc2V0cyxcbiAgICBuZXdTdGF0ZS5maWx0ZXJzLFxuICAgIG5ld1N0YXRlLmxheWVyc1xuICApO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuXG4gIC8vIG5lZWQgdG8gdXBkYXRlIGZpbHRlclBsb3QgYWZ0ZXIgZmlsdGVyIERhdGFzZXQgZm9yIHBsb3QgdG8gdXBkYXRlIG9uIGZpbHRlcmVkIHJlc3VsdFxuICBjb25zdCBmaWx0ZXJXaXRoUExvdCA9IHVwZGF0ZUZpbHRlclBsb3QobmV3U3RhdGUuZGF0YXNldHMsIG5ld1N0YXRlLmZpbHRlcnNbaWR4XSk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgZmlsdGVyV2l0aFBMb3QsIG5ld1N0YXRlKTtcblxuICAvLyBkYXRhSWQgaXMgYW4gYXJyYXlcbiAgLy8gcGFzcyBvbmx5IHRoZSBkYXRhc2V0IHdlIG5lZWQgdG8gdXBkYXRlXG4gIG5ld1N0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIG5ld0ZpbHRlcik7XG5cbiAgLy8gSWYgdGltZSByYW5nZSBmaWx0ZXIgdmFsdWUgd2FzIHVwZGF0ZWQsIGFkanVzdCBhbmltYXRpb24gY29uZmlnXG4gIGlmIChuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBwcm9wcy5pbmNsdWRlcygndmFsdWUnKSkge1xuICAgIG5ld1N0YXRlID0gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgYWN0aW9uLmlkeCk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgZGF0YXNldHMpIHtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcbiAgaWYgKGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF0pIHtcbiAgICAvLyBpZiBkYXRhSWQgYWxyZWFkeSBleGlzdFxuICAgIG5ld0ZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cyk7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbmV3RmlsdGVyLmRhdGFJZC5zbGljZSgpO1xuICAgIG5leHRWYWx1ZVt2YWx1ZUluZGV4XSA9IHZhbHVlO1xuICAgIG5ld0ZpbHRlciA9IHNldChbJ2RhdGFJZCddLCBuZXh0VmFsdWUsIG5ld0ZpbHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ld0ZpbHRlcjtcbn1cblxuZnVuY3Rpb24gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSB7XG4gIGNvbnN0IGRhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG5cbiAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxICYmIHZhbHVlSW5kZXggPT09IDApIHtcbiAgICAvLyBpZiByZW1vdmUgdGhlIG9ubHkgZGF0YUlkLCBjcmVhdGUgYW4gZW1wdHkgZmlsdGVyIGluc3RlYWQ7XG4gICAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2lkOiBmaWx0ZXIuaWR9KTtcbiAgfVxuXG4gIGlmIChkYXRhSWQpIHtcbiAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YUlkKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBbJ2RhdGFJZCcsICduYW1lJywgJ2ZpZWxkSWR4JywgJ2dwdUNoYW5uZWwnXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcltwcm9wXSkpIHtcbiAgICAgIGNvbnN0IG5leHRWYWwgPSBmaWx0ZXJbcHJvcF0uc2xpY2UoKTtcbiAgICAgIG5leHRWYWwuc3BsaWNlKHZhbHVlSW5kZXgsIDEpO1xuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgbmV4dFZhbCwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXJnZUZpZWxkRG9tYWluIGZvciB0aGUgcmVtYWluaW5nIGZpZWxkc1xuICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKGZpbHRlciwgZGF0YXNldHMpO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIC8vIHZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKGRvbWFpblN0ZXBzID8ge2RvbWFpbjogZG9tYWluU3RlcHM/LmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHM/LnN0ZXB9IDoge30pXG4gIH07XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXh0RmlsdGVyLnZhbHVlLCBuZXh0RmlsdGVyKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0RmlsdGVyLFxuICAgIHZhbHVlOiBuZXh0VmFsdWVcbiAgfTtcbn1cblxuLyoqICpcbiAqIFVwZGF0ZXMgYSBzaW5nbGUgcHJvcGVydHkgb2YgYSBmaWx0ZXJcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlclByb3Aoc3RhdGUsIGZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgsIGRhdGFzZXRJZHM/KSB7XG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIHN3aXRjaCAocHJvcCkge1xuICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGlmIHdlIHVwZGF0ZSBmaWx0ZXJEYXRhSWQsIHdlIG5lZWQgdG8gY29uc2lkZXIgdHdvIGNhc2VzOlxuICAgIC8vIDEuIGRhdGFJZCBpcyBlbXB0eTogY3JlYXRlIGEgZGVmYXVsdCBmaWx0ZXJcbiAgICAvLyAyLiBBZGQgYSBuZXcgZGF0YXNldCBpZFxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZGF0YUlkOiB7XG4gICAgICBjb25zdCBvbGREYXRhSWQgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBmaWx0ZXIgPSBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVuaXEoWy4uLm9sZERhdGFJZCwgLi4uZmlsdGVyLmRhdGFJZF0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubmFtZToge1xuICAgICAgLy8gd2UgYXJlIHN1cHBvcnRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgZmlsdGVyIG5hbWUgd2lsbCBvbmx5IHVwZGF0ZSBmaWx0ZXIgbmFtZSBidXQgaXQgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHNcbiAgICAgIC8vIHdlIGFyZSBnb25uYSB1c2UgcGFpciBvZiBkYXRhc2V0cyBhbmQgZmllbGRJZHggdG8gdXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB7bWVyZ2VEb21haW46IHZhbHVlSW5kZXggPiAwfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDoge1xuICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgb25seSBkYXRhc2V0SWQvcyBpZiB3ZSBoYXZlIGFkZGVkL3JlbW92ZWQgbGF5ZXJzXG4gICAgICAvLyAtIGNoZWNrIGZvciBsYXllcklkIGNoYW5nZXMgKFhPUiB3b3JrcyBiZWNhdXNlIG9mIHN0cmluZyB2YWx1ZXMpXG4gICAgICAvLyBpZiBubyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxheWVySWRzLCBkb24ndCBkbyBhbnkgZmlsdGVyaW5nXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBsYXllcklkRGlmZmVyZW5jZSA9IHhvcih2YWx1ZSwgZmlsdGVyLmxheWVySWQpO1xuXG4gICAgICBjb25zdCBsYXllckRhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIGxheWVySWREaWZmZXJlbmNlXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIGRhdGFzZXRzSWRzXG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/Lm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBsYXllcklkOiB2YWx1ZSxcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRzXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIHZhbHVlLCBmaWx0ZXIpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge2ZpbHRlciwgZGF0YXNldElkcywgZGF0YXNldElkc1RvRmlsdGVyLCBzdGF0ZX07XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyUGxvdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgbmV3UHJvcH06IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIXN0YXRlLmZpbHRlcnNbaWR4XSkge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnNbJHtpZHh9XSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBmb3IgKGNvbnN0IHByb3AgaW4gbmV3UHJvcCkge1xuICAgIGlmIChwcm9wID09PSAncGxvdFR5cGUnKSB7XG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8obmV3UHJvcC5wbG90VHlwZSkpKG5ld0ZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChwcm9wID09PSAneUF4aXMnKSB7XG4gICAgICBjb25zdCBjaGFydFR5cGUgPSBuZXdQcm9wLnlBeGlzID8gUExPVF9UWVBFUy5saW5lQ2hhcnQgOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbTtcblxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHt0eXBlOiBjaGFydFR5cGV9KSkobWVyZ2VfKG5ld1Byb3ApKG5ld0ZpbHRlcikpO1xuICAgIH1cbiAgfVxuXG4gIG5ld0ZpbHRlciA9IHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcik7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGlkeCA/IG5ld0ZpbHRlciA6IGYpKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBkYXRhSWQsIGZpZWxkLCB2YWx1ZX0gPSBhY3Rpb247XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGlkKTtcbiAgbGV0IGZpbHRlckluZGV4ID0gb3JpZ2luYWxJbmRleDtcbiAgaWYgKCFpZCAmJiAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChvcmlnaW5hbEluZGV4IDwgMCAmJiBkYXRhSWQpIHtcbiAgICBuZXdTdGF0ZSA9IGFkZEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWR9KTtcbiAgICBpZiAobmV3U3RhdGUuZmlsdGVycy5sZW5ndGggIT09IHN0YXRlLmZpbHRlcnMubGVuZ3RoICsgMSkge1xuICAgICAgLy8gTm8gbmV3IGZpbHRlciB3YXMgYWRkZWRcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgZmlsdGVyIHdhcyBhZGRlZCBhdCB0aGUgZW5kXG4gICAgZmlsdGVySW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAtIDE7XG4gICAgbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0gPSB7XG4gICAgICAuLi5uZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSxcbiAgICAgIC4uLihpZCA/IHtpZH0gOiBudWxsKVxuICAgIH07XG4gIH1cblxuICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGlzIGlmIGl0J3MgYSBuZXdseSBjcmVhdGVkIGZpbHRlclxuICAvLyBGaXJzdCB3ZSBtYWtlIHN1cmUgYWxsIHRoZSBkYXRhSWRzIHRoYXQgZmllbGRzIHJlZmVyIHRvIGFyZSB1cGRhdGVkXG4gIGlmIChvcmlnaW5hbEluZGV4ID49IDAgJiYgZGF0YUlkKSB7XG4gICAgLy8gSWYgdGhlIGRhdGFJZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBvbmUgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGRhdGFJZCkgPyBkYXRhSWQgOiBbZGF0YUlkXSkucmVkdWNlKChhY2N1LCBkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnZGF0YUlkJyxcbiAgICAgICAgdmFsdWU6IGQsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIGZpZWxkc1xuICBpZiAoZmllbGQpIHtcbiAgICAvLyBJZiB0aGUgZmllbGQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkIDogW2ZpZWxkXSkucmVkdWNlKChhY2N1LCBmLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSB2YWx1ZSBzZXBhcmF0ZWx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJbmRleCwgcHJvcDogJ3ZhbHVlJywgdmFsdWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAnZGF0YUlkJyBpbiBjb25maWcgJiYgJ2FuaW1hdGlvbldpbmRvdycgaW4gY29uZmlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuICBpZiAoaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnKSkge1xuICAgIC8vIEZpbmQgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvblxuICAgIC8vIEFzc3VtaW5nIHRoZXJlJ3Mgb25seSBvbmUgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvbiwgc2VlIHNldEZpbHRlclZpZXdVcGRhdGVyXG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gIWlzU2lkZUZpbHRlcihmKSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3RmlsdGVyID0gey4uLmZpbHRlciwgLi4uY29uZmlnfTtcbiAgICByZXR1cm4gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKHN0YXRlLCBhcHBseUZpbHRlckNvbmZpZyhmaWx0ZXIuaWQsIG5ld0ZpbHRlcikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGlzQW5pbWF0aW5nOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmlzQW5pbWF0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaGlkZUNvbnRyb2w6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaGlkZUNvbnRyb2xcbiAgfVxufSk7XG5cbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7c3BlZWR9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHNwZWVkXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGxhcmdlciB0aW1lIGZpbHRlciBhdCBib3R0b20gZm9yIHRpbWUgcGxheWJhY2sgKGFwcGx5IHRvIHRpbWUgZmlsdGVyIG9ubHkpXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyVmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICBjb25zdCB7dmlldywgaWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qgc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3ID0gdmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+XG4gICAgICBpID09PSBpZHhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlld1xuICAgICAgICAgIH1cbiAgICAgICAgOiBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBmXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGVzIGZpbHRlciBmZWF0dXJlIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2FjdGlvbi5pZHhdO1xuICBjb25zdCBpc1Zpc2libGUgPSBnZXQoZmlsdGVyLCBbJ3ZhbHVlJywgJ3Byb3BlcnRpZXMnLCAnaXNWaXNpYmxlJ10pO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ2VuYWJsZWQnLFxuICAgIHZhbHVlOiAhaXNWaXNpYmxlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUsIGZpbHRlci5pZCwge1xuICAgICAgaXNWaXNpYmxlOiAhaXNWaXNpYmxlXG4gICAgfSlcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWQsIGlkfSA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBjb25zdCBuZXdGaWx0ZXJzID0gW1xuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoMCwgaWR4KSxcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmZpbHRlcnMubGVuZ3RoKVxuICBdO1xuXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKGRhdGFJZCwgc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0VkaXRvciA9XG4gICAgZ2V0RmlsdGVySWRJbkZlYXR1cmUoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZSkgPT09IGlkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGUuZWRpdG9yO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnXSwgbmV3RmlsdGVycywgc3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydlZGl0b3InXSwgbmV3RWRpdG9yLCBuZXdTdGF0ZSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YUlkLCB1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCBuZXdMYXllcjtcbiAgbGV0IG5ld0xheWVyRGF0YTtcbiAgaWYgKGFjdGlvbi5jb25maWcpIHtcbiAgICBuZXdMYXllciA9IGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZSwgYWN0aW9uLmNvbmZpZyk7XG4gICAgaWYgKCFuZXdMYXllcikge1xuICAgICAgQ29uc29sZS53YXJuKFxuICAgICAgICAnRmFpbGVkIHRvIGNyZWF0ZSBsYXllciBmcm9tIGNvbmZpZywgaXQgdXN1YWxseSBtZWFucyB0aGUgY29uZmlnIGlzIG5vdCBiZSBpbiBjb3JyZWN0IGZvcm1hdCcsXG4gICAgICAgIGFjdGlvbi5jb25maWdcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSk7XG4gICAgbmV3TGF5ZXIgPSByZXN1bHQubGF5ZXI7XG4gICAgbmV3TGF5ZXJEYXRhID0gcmVzdWx0LmxheWVyRGF0YTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbGF5ZXIgd2l0aCBhIHNwZWNpZmljIGRhdGFzZXQgb3IgYSBkZWZhdWx0IG9uZVxuICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gYWN0aW9uLmRhdGFzZXRJZCA/PyBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cylbMF07XG4gICAgbmV3TGF5ZXIgPSBuZXcgTGF5ZXIoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHRydWUsXG4gICAgICBkYXRhSWQ6IGRlZmF1bHREYXRhc2V0XG4gICAgfSk7XG4gICAgbmV3TGF5ZXJEYXRhID0ge307XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCBuZXdMYXllcl0sXG4gICAgbGF5ZXJEYXRhOiBbLi4uc3RhdGUubGF5ZXJEYXRhLCBuZXdMYXllckRhdGFdLFxuICAgIC8vIGFkZCBuZXcgbGF5ZXIgYXQgdGhlIHRvcFxuICAgIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZCwgLi4uc3RhdGUubGF5ZXJPcmRlcl0sXG4gICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXIpXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGF5ZXJVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgLy8gaW52YWxpZCBpbmRleFxuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgbGF5ZXIgd2l0aCBpbnZhbGlkIGlkfGlkeCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnMsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgY2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuICBjb25zdCBsYXllclRvUmVtb3ZlID0gbGF5ZXJzW2lkeF07XG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogZmlsdGVyT3V0QnlJZChsYXllclRvUmVtb3ZlLmlkKShsYXllcnMpLFxuICAgIGxheWVyRGF0YTogcmVtb3ZlRWxlbWVudEF0SW5kZXgoaWR4KShsYXllckRhdGEpLFxuICAgIGxheWVyT3JkZXI6IGxheWVyT3JkZXIuZmlsdGVyKGxheWVySWQgPT4gbGF5ZXJJZCAhPT0gbGF5ZXJUb1JlbW92ZS5pZCksXG4gICAgY2xpY2tlZDogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm8sXG4gICAgc3BsaXRNYXBzOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllclRvUmVtb3ZlKVxuICAgIC8vIFRPRE86IHVwZGF0ZSBmaWx0ZXJzLCBjcmVhdGUgaGVscGVyIHRvIHJlbW92ZSBsYXllciBmb3JtIGZpbHRlciAocmVtb3ZlIGxheWVyaWQgYW5kIGRhdGFpZCkgaWYgbWFwcGVkXG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG59XG5cbi8qKlxuICogUmVvcmRlciBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllck9yZGVyOiBvcmRlclxufSk7XG5cbi8qKlxuICogZHVwbGljYXRlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8ICFzdGF0ZS5sYXllcnNbaWR4XSkge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXIgJHtpZHh9IG5vdCBmb3VuZCBpbiBsYXllck9yZGVyYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWwgPSBsYXllcnNbaWR4XTtcblxuICBjb25zdCBvcmlnaW5hbExheWVyT3JkZXJJZHggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChsaWQgPT4gbGlkID09PSBvcmlnaW5hbC5pZCk7XG4gIGxldCBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfWA7XG4gIGxldCBwb3N0Zml4ID0gMDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICB3aGlsZSAobGF5ZXJzLmZpbmQobCA9PiBsLmNvbmZpZy5sYWJlbCA9PT0gbmV3TGFiZWwpKSB7XG4gICAgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH0gJHsrK3Bvc3RmaXh9YDtcbiAgfVxuXG4gIC8vIGNvbGxlY3QgbGF5ZXIgY29uZmlnIGZyb20gb3JpZ2luYWxcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvcmlnaW5hbCwgc3RhdGUuc2NoZW1hKTtcblxuICAvLyBhc3NpZ24gbmV3IGlkIGFuZCBsYWJlbCB0byBjb3BpZWQgbGF5ZXJcbiAgaWYgKCFsb2FkZWRMYXllcj8uY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxvYWRlZExheWVyLmNvbmZpZy5sYWJlbCA9IG5ld0xhYmVsO1xuICBsb2FkZWRMYXllci5pZCA9IGdlbmVyYXRlSGFzaElkKExBWUVSX0lEX0xFTkdUSCk7XG5cbiAgLy8gYWRkIGxheWVyIHRvIHN0YXRlXG4gIGxldCBuZXh0U3RhdGUgPSBhZGRMYXllclVwZGF0ZXIoc3RhdGUsIHtjb25maWc6IGxvYWRlZExheWVyfSk7XG4gIC8vIHJldHJpZXZlIG5ld2x5IGNyZWF0ZWQgbGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSBuZXh0U3RhdGUubGF5ZXJzW25leHRTdGF0ZS5sYXllcnMubGVuZ3RoIC0gMV07XG4gIC8vIHVwZGF0ZSBsYXllciBvcmRlciB3aXRoIG5ld0x5YWVyLmlkXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheUluc2VydChcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxLCBuZXh0U3RhdGUubGF5ZXJPcmRlci5sZW5ndGgpLFxuICAgIG9yaWdpbmFsTGF5ZXJPcmRlcklkeCxcbiAgICBuZXdMYXllci5pZFxuICApO1xuXG4gIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oYENhbid0IGFkZCBtb3JlIHRoYW4gb25lICR7TElHSFRfQU5EX1NIQURPV19FRkZFQ1QubmFtZX0gZWZmZWN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0ID0gY3JlYXRlRWZmZWN0KGFjdGlvbi5jb25maWcpO1xuXG4gIC8vIGNvbGxhcHNlIGNvbmZpZ3VyYXRvcnMgZm9yIG90aGVyIGVmZmVjdHNcbiAgc3RhdGUuZWZmZWN0cy5mb3JFYWNoKGVmZmVjdCA9PiBlZmZlY3Quc2V0UHJvcHMoe2lzQ29uZmlnQWN0aXZlOiBmYWxzZX0pKTtcblxuICBjb25zdCBlZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHMsIG5ld0VmZmVjdF07XG4gIGNvbnN0IGVmZmVjdE9yZGVyID0gZml4RWZmZWN0T3JkZXIoZWZmZWN0cywgW25ld0VmZmVjdC5pZCwgLi4uc3RhdGUuZWZmZWN0T3JkZXJdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtlZmZlY3RzLCBlZmZlY3RPcmRlcn0gPSBzdGF0ZTtcbiAgY29uc3QgZWZmZWN0VG9SZW1vdmUgPSBlZmZlY3RzW2lkeF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBmaXhlZCBpbiB0c1xuICAgIGVmZmVjdHM6IGZpbHRlck91dEJ5SWQoZWZmZWN0VG9SZW1vdmUuaWQpKGVmZmVjdHMpLFxuICAgIGVmZmVjdE9yZGVyOiBlZmZlY3RPcmRlci5maWx0ZXIoZWZmZWN0SWQgPT4gZWZmZWN0SWQgIT09IGVmZmVjdFRvUmVtb3ZlLmlkKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW9yZGVyIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVmZmVjdE9yZGVyOiBmaXhFZmZlY3RPcmRlcihzdGF0ZS5lZmZlY3RzLCBbLi4ub3JkZXJdKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZWZmZWN0T3JkZXIgPSBzdGF0ZS5lZmZlY3RPcmRlcjtcbiAgaWYgKHByb3BzLmlkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuaWQgIT09IGlkKSB7XG4gICAgY29uc3QgaWR4MiA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gcHJvcHMuaWQpO1xuICAgIGlmIChpZHgyID49IDApIHtcbiAgICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggZXhpc3RpbmcgZWZmZWN0IGlkICR7aWR9YCk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgZWZmZWN0T3JkZXIgPSBlZmZlY3RPcmRlci5tYXAoZWZmZWN0T3JkZXJJZCA9PlxuICAgICAgZWZmZWN0T3JkZXJJZCA9PT0gaWQgPyAocHJvcHMuaWQgYXMgc3RyaW5nKSA6IGVmZmVjdE9yZGVySWRcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzXTtcbiAgbmV3RWZmZWN0c1tpZHhdLnNldFByb3BzKHByb3BzKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZGF0YXNldCBhbmQgYWxsIGxheWVycywgZmlsdGVycywgdG9vbHRpcCBjb25maWdzIHRoYXQgYmFzZWQgb24gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEYXRhc2V0VXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICAvLyBleHRyYWN0IGRhdGFzZXQga2V5XG4gIGNvbnN0IHtkYXRhSWQ6IGRhdGFzZXRLZXl9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG5cbiAgLy8gY2hlY2sgaWYgZGF0YXNldCBpcyBwcmVzZW50XG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGF5ZXJzLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkYXRhc2V0czoge1tkYXRhc2V0S2V5XTogZGF0YXNldCwgLi4ubmV3RGF0YXNldHN9XG4gIH0gPSBzdGF0ZTtcblxuICBjb25zdCBsYXllcnNUb1JlbW92ZSA9IGxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXRLZXkpLm1hcChsID0+IGwuaWQpO1xuXG4gIC8vIHJlbW92ZSBsYXllcnMgYW5kIGRhdGFzZXRzXG4gIGxldCBuZXdTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0c1xuICB9KTtcblxuICAvLyB1cGRhdGUgZmlsdGVyc1xuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBuZXdTdGF0ZS5maWx0ZXJzKSB7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhc2V0S2V5KTtcbiAgICBpZiAodmFsdWVJbmRleCA+PSAwICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgICAgLy8gb25seSByZW1vdmUgb25lIHN5bmNlZCBkYXRhc2V0IGZyb20gdGhlIGZpbHRlclxuICAgICAgZmlsdGVycy5wdXNoKF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykpO1xuICAgIH0gZWxzZSBpZiAodmFsdWVJbmRleCA8IDApIHtcbiAgICAgIC8vIGxlYXZlIHRoZSBmaWx0ZXIgYXMgaXNcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBmaWx0ZXJzfTtcblxuICByZXR1cm4gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhuZXdTdGF0ZSwge2RhdGFJZDogZGF0YXNldEtleX0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKHN0YXRlLCB7ZGF0YUlkfSkge1xuICBsZXQge2ludGVyYWN0aW9uQ29uZmlnfSA9IHN0YXRlO1xuICBjb25zdCB7dG9vbHRpcH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgaWYgKHRvb2x0aXApIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRvb2x0aXA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHtbZGF0YUlkXTogZmllbGRzLCAuLi5maWVsZHNUb1Nob3d9ID0gY29uZmlnLmZpZWxkc1RvU2hvdztcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDogey4uLnRvb2x0aXAsIGNvbmZpZzogey4uLmNvbmZpZywgZmllbGRzVG9TaG93fX1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgaW50ZXJhY3Rpb25Db25maWd9O1xufVxuLyoqXG4gKiB1cGRhdGUgbGF5ZXIgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIHVwZGF0ZSBvdmVybGF5IGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBvdmVybGF5QmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiBEaXNwbGF5IGRhdGFzZXQgdGFibGUgaW4gYSBtb2RhbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNob3dEYXRhc2V0VGFibGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdGluZ0RhdGFzZXQ6IGFjdGlvbi5kYXRhSWRcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGN1c3RvbSBjb2xvciBmb3IgZGF0YXNldHMgYW5kIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRDb2xvclVwZGF0ZXJcbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7Y29sb3I6IGFjdGlvbi5uZXdDb2xvcn19KTtcbn07XG5cbi8qKlxuICogcmVzZXQgdmlzU3RhdGUgdG8gaW5pdGlhbCBTdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc2V0TWFwQ29uZmlnVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlLFxuICBpbml0aWFsU3RhdGU6IHN0YXRlLmluaXRpYWxTdGF0ZVxufSk7XG5cbi8qKlxuICogUHJvcGFnYXRlIGB2aXNTdGF0ZWAgcmVkdWNlciB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgY29uZmlnIHdpbGwgYmUgb3ZlcnJpZGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtjb25maWcgPSB7fSwgb3B0aW9ucyA9IHt9fVxuICB9OiB7XG4gICAgdHlwZT86IHR5cGVvZiBBY3Rpb25UeXBlcy5SRUNFSVZFX01BUF9DT05GSUc7XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjb25maWcudmlzU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7a2VlcEV4aXN0aW5nQ29uZmlnfSA9IG9wdGlvbnM7XG5cbiAgLy8gcmVzZXQgY29uZmlnIGlmIGtlZXBFeGlzdGluZ0NvbmZpZyBpcyBmYWxzeVxuICBsZXQgbWVyZ2VkU3RhdGUgPSAha2VlcEV4aXN0aW5nQ29uZmlnID8gcmVzZXRNYXBDb25maWdVcGRhdGVyKHN0YXRlKSA6IHN0YXRlO1xuICBmb3IgKGNvbnN0IG1lcmdlciBvZiBzdGF0ZS5tZXJnZXJzKSB7XG4gICAgaWYgKGlzVmFsaWRNZXJnZXIobWVyZ2VyKSAmJiBoYXNQcm9wc1RvTWVyZ2UoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCkpIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VyLm1lcmdlKFxuICAgICAgICBtZXJnZWRTdGF0ZSxcbiAgICAgICAgZ2V0UHJvcFZhbHVlVG9NZXJnZXIoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCwgbWVyZ2VyLnRvTWVyZ2VQcm9wKSxcbiAgICAgICAgLy8gZnJvbUNvbmZpZ1xuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBob3ZlciBldmVudCB3aXRoIGhvdmVyZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJIb3ZlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckhvdmVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGhvdmVySW5mbzoge1xuICAgIC8vIGRlY2suZ2wgaW5mbyBpcyBtdXRhYmxlXG4gICAgLi4uYWN0aW9uLmluZm8sXG4gICAgLi4uKE51bWJlci5pc0Zpbml0ZShhY3Rpb24ubWFwSW5kZXgpID8ge21hcEluZGV4OiBhY3Rpb24ubWFwSW5kZXh9IDoge30pXG4gIH1cbn0pO1xuXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogVXBkYXRlIGBpbnRlcmFjdGlvbkNvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgIC4uLntbY29uZmlnLmlkXTogY29uZmlnfVxuICB9O1xuXG4gIC8vIERvbid0IGVuYWJsZSB0b29sdGlwIGFuZCBicnVzaCBhdCB0aGUgc2FtZSB0aW1lXG4gIC8vIGJ1dCBjb29yZGluYXRlcyBjYW4gYmUgc2hvd24gYXQgYWxsIHRpbWVcbiAgY29uc3QgY29udHJhZGljdCA9IFsnYnJ1c2gnLCAndG9vbHRpcCddO1xuXG4gIGlmIChcbiAgICBjb250cmFkaWN0LmluY2x1ZGVzKGNvbmZpZy5pZCkgJiZcbiAgICBjb25maWcuZW5hYmxlZCAmJlxuICAgICFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1tjb25maWcuaWRdLmVuYWJsZWRcbiAgKSB7XG4gICAgLy8gb25seSBlbmFibGUgb25lIGludGVyYWN0aW9uIGF0IGEgdGltZVxuICAgIGNvbnRyYWRpY3QuZm9yRWFjaChrID0+IHtcbiAgICAgIGlmIChrICE9PSBjb25maWcuaWQpIHtcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdba10gPSB7Li4uaW50ZXJhY3Rpb25Db25maWdba10sIGVuYWJsZWQ6IGZhbHNlfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgaWYgKGNvbmZpZy5pZCA9PT0gJ2dlb2NvZGVyJyAmJiAhY29uZmlnLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gcmVtb3ZlRGF0YXNldFVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWQ6ICdnZW9jb2Rlcl9kYXRhc2V0J30pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgY2xpY2sgZXZlbnQgd2l0aCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtb3VzZVBvczogc3RhdGUuaW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICBwaW5uZWQ6IHN0YXRlLm1vdXNlUG9zLnBpbm5lZCA/IG51bGwgOiBjbG9uZURlZXAoc3RhdGUubW91c2VQb3MpXG4gICAgICB9XG4gICAgOiBzdGF0ZS5tb3VzZVBvcyxcbiAgY2xpY2tlZDogYWN0aW9uLmluZm8gJiYgYWN0aW9uLmluZm8ucGlja2VkID8gYWN0aW9uLmluZm8gOiBudWxsXG59KTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBjbGljayBldmVudCwgdW5zZWxlY3QgY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Pbk1hcENsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG51bGxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgbW92ZSBldmVudFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1vdXNlTW92ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2V2dH06IFZpc1N0YXRlQWN0aW9ucy5Pbk1vdXNlTW92ZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKE9iamVjdC52YWx1ZXMoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcpLnNvbWUoY29uZmlnID0+IGNvbmZpZy5lbmFibGVkKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1vdXNlUG9zOiB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQucG9pbnQpID8ge21vdXNlUG9zaXRpb246IFsuLi5ldnQucG9pbnRdfSA6IHt9KSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LmxuZ0xhdCkgPyB7Y29vcmRpbmF0ZTogWy4uLmV2dC5sbmdMYXRdfSA6IHt9KVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGZvciBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gIHN0YXRlLnNwbGl0TWFwcyAmJiBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID09PSAwXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAvLyBtYXliZSB3ZSBzaG91bGQgdXNlIGFuIGFycmF5IHRvIHN0b3JlIHN0YXRlIGZvciBhIHNpbmdsZSBtYXAgYXMgd2VsbFxuICAgICAgICAvLyBpZiBjdXJyZW50IG1hcHMgbGVuZ3RoIGlzIGVxdWFsIHRvIDAgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc3BsaXQgdGhlIHZpZXdcbiAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMoc3RhdGUubGF5ZXJzLCB7ZHVwbGljYXRlOiBmYWxzZX0pXG4gICAgICB9XG4gICAgOiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleChzdGF0ZSwgYWN0aW9uKTtcblxuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGluIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttYXBJbmRleCwgbGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckZvck1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3NwbGl0TWFwc30gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogc3BsaXRNYXBzLm1hcCgoc20sIGkpID0+XG4gICAgICBpID09PSBtYXBJbmRleFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXSxcbiAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0ubGF5ZXJzLFxuICAgICAgICAgICAgICAvLyBpZiBsYXllcklkIG5vdCBpbiBsYXllcnMsIHNldCBpdCB0byB2aXNpYmxlXG4gICAgICAgICAgICAgIFtsYXllcklkXTogIXNwbGl0TWFwc1tpXS5sYXllcnNbbGF5ZXJJZF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc21cbiAgICApXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCB1cGRhdGVWaXNEYXRhVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBkYXRhc2V0cyBjYW4gYmUgYSBzaW5nbGUgZGF0YSBlbnRyaWVzIG9yIGFuIGFycmF5IG9mIG11bHRpcGxlIGRhdGEgZW50cmllc1xuICBjb25zdCB7Y29uZmlnLCBvcHRpb25zfSA9IGFjdGlvbjtcblxuICAvLyBhcHBseSBjb25maWcgaWYgcGFzc2VkIGZyb20gYWN0aW9uXG4gIC8vIFRPRE86IHdlIGRvbid0IGhhbmRsZSBhc3luYyBtZXJnZXJzIGhlcmUgeWV0XG4gIGxldCB1cGRhdGVkU3RhdGUgPSBjb25maWdcbiAgICA/IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIHBheWxvYWQ6IHtjb25maWcsIG9wdGlvbnN9XG4gICAgICB9KVxuICAgIDogc3RhdGU7XG5cbiAgY29uc3QgZGF0YXNldHMgPSB0b0FycmF5KGFjdGlvbi5kYXRhc2V0cyk7XG4gIGlmICghZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZURhdGFzZXRUYXNrczogVGFza1tdID0gW107XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrW10gPSBbXTtcblxuICBkYXRhc2V0cy5mb3JFYWNoKCh7aW5mbyA9IHt9LCAuLi5yZXN0fSwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeSh7aW5mbywgLi4ucmVzdH0sIHN0YXRlLmRhdGFzZXRzKTtcbiAgICBpZiAodGFzaykge1xuICAgICAgY3JlYXRlRGF0YXNldFRhc2tzLnB1c2godGFzayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnNgLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtZmFpbGVkLSR7ZGF0YXNldEluZGV4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgZGF0YXNldHNBbGxTZXR0bGVkVGFzayA9IGNyZWF0ZURhdGFzZXRUYXNrcy5sZW5ndGhcbiAgICA/IFRhc2suYWxsU2V0dGxlZChjcmVhdGVEYXRhc2V0VGFza3MpLm1hcChyZXN1bHRzID0+XG4gICAgICAgIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzKHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnM6IG9wdGlvbnN9KVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoZGF0YXNldHNBbGxTZXR0bGVkVGFzaykge1xuICAgIC8vIGluZGljYXRlIHRoYXQgc29tZXRoaW5nIGlzIGluIHByb2dyZXNzXG4gICAgY29uc3Qgc2V0SXNMb2FkaW5nVGFzayA9IEFDVElPTl9UQVNLKCkubWFwKCgpID0+IHtcbiAgICAgIHJldHVybiBzZXRMb2FkaW5nSW5kaWNhdG9yKHtjaGFuZ2U6IDF9KTtcbiAgICB9KTtcbiAgICB1cGRhdGVkU3RhdGUgPSB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIHNldElzTG9hZGluZ1Rhc2spO1xuICB9XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgW1xuICAgIC4uLihkYXRhc2V0c0FsbFNldHRsZWRUYXNrID8gW2RhdGFzZXRzQWxsU2V0dGxlZFRhc2tdIDogW10pLFxuICAgIC4uLm5vdGlmaWNhdGlvblRhc2tzXG4gIF0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFBheWxvYWRBY3Rpb248Q3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkPlxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBjb25zb2xlLmxvZygnY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyJywgYWN0aW9uLnBheWxvYWQpO1xuICBjb25zdCB7cmVzdWx0cywgYWRkVG9NYXBPcHRpb25zfSA9IGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IHJlc3VsdHMucmVkdWNlKChhY2N1LCByZXN1bHQpID0+IHtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXR1cm4gey4uLmFjY3UsIFtkYXRhc2V0LmlkXTogZGF0YXNldH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhhbmRsZSBjcmVhdGUgZGF0YXNldCBlcnJvclxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ2NyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlcjogZmFpbGVkJyxcbiAgICAgICAgcmVzdWx0LnJlYXNvbiB8fCAocmVzdWx0IGFzIGFueSkudmFsdWVcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG4gIH0sIHt9IGFzIERhdGFzZXRzKTtcbiAgLy8gc2F2ZSBuZXcgZGF0YXNldCBlbnRyeSB0byBzdGF0ZVxuICBjb25zdCBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGUsIG5ld0RhdGFFbnRyaWVzKVxuICB9O1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBsYXllck1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+IG0ud2FpdEZvckxheWVyRGF0YSk7XG4gIGNvbnN0IGRhdGFzZXRNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiAhbGF5ZXJNZXJnZXJzLmluY2x1ZGVzKG0pKTtcblxuICBjb25zdCBuZXdEYXRhSWRzID0gT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpO1xuICBjb25zdCBwb3N0TWVyZ2VyUGF5bG9hZCA9IHtcbiAgICBuZXdEYXRhSWRzLFxuICAgIG9wdGlvbnM6IGFkZFRvTWFwT3B0aW9ucyxcbiAgICBsYXllck1lcmdlcnNcbiAgfTtcblxuICBjb25zdCB1cGRhdGVkU3RhdGUgPSBhcHBseU1lcmdlcnNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7XG4gICAgbWVyZ2VyczogZGF0YXNldE1lcmdlcnMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgfSk7XG5cbiAgLy8gcmVzb2x2ZSBhY3RpdmUgbG9hZGluZyBpbml0aWF0ZWQgYnkgdXBkYXRlVmlzRGF0YVVwZGF0ZXJcbiAgY29uc3Qgc2V0SXNMb2FkaW5nVGFzayA9IEFDVElPTl9UQVNLKCkubWFwKCgpID0+IHtcbiAgICByZXR1cm4gc2V0TG9hZGluZ0luZGljYXRvcih7Y2hhbmdlOiAtMX0pO1xuICB9KTtcbiAgcmV0dXJuIHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgc2V0SXNMb2FkaW5nVGFzayk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmZ1bmN0aW9uIHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VkU3RhdGU6IFZpc1N0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtuZXdEYXRhSWRzLCBvcHRpb25zLCBsYXllck1lcmdlcnN9ID0gcG9zdE1lcmdlclBheWxvYWQ7XG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBtZXJnZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihmID0+XG4gICAgZi5kYXRhSWQuZmluZChmRGF0YUlkID0+IG5ld0RhdGFJZHMuaW5jbHVkZXMoZkRhdGFJZCkpXG4gICk7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJlZDogc3RyaW5nW10gPSB1bmlxKFxuICAgIG5ld0ZpbHRlcnMucmVkdWNlKChhY2N1LCBmKSA9PiBbLi4uYWNjdSwgLi4uZi5kYXRhSWRdLCBbXSBhcyBzdHJpbmdbXSlcbiAgKTtcbiAgY29uc3QgZGF0YUVtcHR5ID0gbmV3RGF0YUlkcy5sZW5ndGggPCAxO1xuXG4gIGxldCBuZXdMYXllcnMgPSAhZGF0YUVtcHR5XG4gICAgPyBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gbmV3RGF0YUlkcy5yZWR1Y2UoXG4gICAgKGFjY3UsIGlkKSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtpZF06IG1lcmdlZFN0YXRlLmRhdGFzZXRzW2lkXVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbiAgaWYgKCFuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5hdXRvQ3JlYXRlTGF5ZXJzICE9PSBmYWxzZSkge1xuICAgIC8vIG5vIGxheWVyIG1lcmdlZCwgZmluZCBkZWZhdWx0c1xuICAgIGNvbnN0IHJlc3VsdCA9IGFkZERlZmF1bHRMYXllcnMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHJlc3VsdC5zdGF0ZTtcbiAgICBuZXdMYXllcnMgPSByZXN1bHQubmV3TGF5ZXJzO1xuICB9XG5cbiAgaWYgKG1lcmdlZFN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAvLyBpZiBtYXAgaXMgc3BsaXQsIGFkZCBuZXcgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICAgIG5ld0xheWVycyA9IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgICBsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZClcbiAgICApO1xuICAgIG1lcmdlZFN0YXRlID0ge1xuICAgICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcnMpXG4gICAgfTtcbiAgfVxuXG4gIC8vIGlmIG5vIHRvb2x0aXBzIG1lcmdlZCBhZGQgZGVmYXVsdCB0b29sdGlwc1xuICBuZXdEYXRhSWRzLmZvckVhY2goZGF0YUlkID0+IHtcbiAgICBjb25zdCB0b29sdGlwRmllbGRzID0gbWVyZ2VkU3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgLy8gbG9hZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgZmFsc2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gcnVuIGFkZERlZmF1bHRUb29sdGlwcyB3aGVuIHRvb2x0aXBGaWVsZHMgaXMgZW1wdHlcbiAgICBpZiAoXG4gICAgICBvcHRpb25zPy5hdXRvQ3JlYXRlVG9vbHRpcHMgIT09IGZhbHNlICYmXG4gICAgICAoIUFycmF5LmlzQXJyYXkodG9vbHRpcEZpZWxkcykgfHwgIXRvb2x0aXBGaWVsZHMubGVuZ3RoKVxuICAgICkge1xuICAgICAgLy8gYWRkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyB0cnVlXG4gICAgICBtZXJnZWRTdGF0ZSA9IGFkZERlZmF1bHRUb29sdGlwcyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXNbZGF0YUlkXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1cGRhdGVkRGF0YXNldHMgPSBkYXRhRW1wdHlcbiAgICA/IE9iamVjdC5rZXlzKG1lcmdlZFN0YXRlLmRhdGFzZXRzKVxuICAgIDogdW5pcShPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcykuY29uY2F0KGRhdGFzZXRGaWx0ZXJlZCkpO1xuXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobWVyZ2VkU3RhdGUsIHVwZGF0ZWREYXRhc2V0cywgdW5kZWZpbmVkKTtcblxuICAvLyByZWdpc3RlciBsYXllciBhbmltYXRpb24gZG9tYWluLFxuICAvLyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlciBsYXllciBkYXRhIGlzIGNhbGN1bGF0ZWRcbiAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHVwZGF0ZWRTdGF0ZSk7XG5cbiAgLy8gdHJ5IHRvIHByb2Nlc3MgbGF5ZXJNZXJnZXJzIGFmdGVyIGRhdGFzZXQrZGF0YXNldE1lcmdlcnNcbiAgdXBkYXRlZFN0YXRlID1cbiAgICBsYXllck1lcmdlcnMgJiYgbGF5ZXJNZXJnZXJzLmxlbmd0aCA+IDBcbiAgICAgID8gYXBwbHlNZXJnZXJzVXBkYXRlcih1cGRhdGVkU3RhdGUsIHtcbiAgICAgICAgICBtZXJnZXJzOiBsYXllck1lcmdlcnMsXG4gICAgICAgICAgcG9zdE1lcmdlclBheWxvYWQ6IHsuLi5wb3N0TWVyZ2VyUGF5bG9hZCwgbGF5ZXJNZXJnZXJzOiBbXX1cbiAgICAgICAgfSlcbiAgICAgIDogdXBkYXRlZFN0YXRlO1xuXG4gIC8vIGNlbnRlciB0aGUgbWFwIG9uY2UgdGhlIGRhdGFzZXQgaXMgY3JlYXRlZFxuICBpZiAobmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuY2VudGVyTWFwKSB7XG4gICAgY29uc3QgYm91bmRzID0gZmluZE1hcEJvdW5kcyhuZXdMYXllcnMpO1xuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIGNvbnN0IGZpdEJvdW5kc1Rhc2sgPSBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBmaXRNYXBCb3VuZHMoYm91bmRzKTtcbiAgICAgIH0pO1xuICAgICAgdXBkYXRlZFN0YXRlID0gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBmaXRCb3VuZHNUYXNrKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXBkYXRlZFN0YXRlO1xufVxuXG4vKipcbiAqIFJlbmFtZSBhbiBleGlzdGluZyBkYXRhc2V0IGluIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW5hbWVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtsYWJlbDogYWN0aW9uLmxhYmVsfX0pO1xufVxuXG5jb25zdCBBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTID0gWydsYWJlbCcsICdjb2xvcicsICdtZXRhZGF0YSddO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBwcm9wZXJ0aWVzIGJlZm9yZSB1cGRhdGluZyB0aGUgZGF0YXNldC5cbiAqIE1ha2VzIHN1cmUgZWFjaCBwcm9wZXJ0eSBpcyBpbiB0aGUgYWxsb3dlZCBsaXN0XG4gKiBNYWtlcyBzdXJlIGNvbG9yIHZhbHVlIGlzIFJHQlxuICogUGVyZm9ybXMgZGVlcCBtZXJnZSB3aGVuIHVwZGF0aW5nIG1ldGFkYXRhXG4gKi9cbmNvbnN0IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzID0gKHByb3BzLCBkYXRhc2V0KSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gT2JqZWN0LmVudHJpZXMocHJvcHMpLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGVudHJ5O1xuICAgIC8vIGlzIGl0IGFsbG93ZWQgP1xuICAgIGlmICghQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGFyZSBhZGRpbmcgYSBjb2xvciBidXQgaXQgaXMgbm90IFJHQiB3ZSBkb24ndCBhY2NlcHQgdGhlIHZhbHVlXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSBhcyB3ZSBhZGQgbW9yZSBwcm9wcyB3ZSBzaG91bGQgY2hhbmdlIHRoaXMgaWYgaW50byBhIHN3aXRjaFxuICAgIGlmIChrZXkgPT09ICdjb2xvcicgJiYgIWlzUmdiQ29sb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGRvIHdlIG5lZWQgZGVlcCBtZXJnZSA/XG4gICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IGRlZXBtZXJnZShkYXRhc2V0W2tleV0gfHwge30sIHZhbHVlKSA6IHZhbHVlfTtcbiAgfSwge30pO1xuXG4gIHJldHVybiB2YWxpZGF0ZWRQcm9wcztcbn07XG5cbi8qKlxuICogVXBkYXRlIERhdGFzZXQgcHJvcHMgKGxhYmVsLCBjb2xvciwgbWV0YSkuIERvIG5vdCB1c2UgdG8gdXBkYXRlIGRhdGEgb3IgYW55IHJlbGF0ZWQgcHJvcGVydGllc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFByb3BzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBwcm9wc30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcbiAgY29uc3QgZXhpc3RpbmcgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMocHJvcHMsIGV4aXN0aW5nKTtcbiAgICAvLyAgdmFsaWRhdGUgcHJvcHM6IGp1c3QgY29sb3IgZm9yIG5vd1xuICAgIC8vICB3ZSBvbmx5IGFsbG93IGxhYmVsLCBjb2xvciBhbmQgbWV0YSB0byBiZSB1cGRhdGVkXG4gICAgLy8gY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIHNwZWNpZmljIG1hcCBjbG9zaW5nIGljb25cbiAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNsb3NlIHRoZSBzZWxlY3RlZCBtYXBcbiAqIGFuZCB3aWxsIG1lcmdlIHRoZSByZW1haW5pbmcgb25lIHdpdGggdGhlIGdsb2JhbCBzdGF0ZVxuICogVE9ETzogaSB0aGluayBpbiB0aGUgZnV0dXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbWVyZ2UgbWFwIGxheWVycyB3aXRoIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gYWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4PFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICAvLyByZXRyaWV2ZSBsYXllcnMgbWV0YSBkYXRhIGZyb20gdGhlIHJlbWFpbmluZyBtYXAgdGhhdCB3ZSBuZWVkIHRvIGtlZXBcbiAgY29uc3QgaW5kZXhUb1JldHJpZXZlID0gMSAtIGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBtYXBMYXllcnMgPSBzdGF0ZS5zcGxpdE1hcHNbaW5kZXhUb1JldHJpZXZlXT8ubGF5ZXJzO1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuXG4gIC8vIHVwZGF0ZSBsYXllciB2aXNpYmlsaXR5XG4gIGNvbnN0IG5ld0xheWVycyA9IGxheWVycy5tYXAobGF5ZXIgPT5cbiAgICBtYXBMYXllcnMgJiYgIW1hcExheWVyc1tsYXllci5pZF0gJiYgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgaXQgc2hvdWxkIGJlIGluVmlzaWJsZVxuICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogbGF5ZXJcbiAgKTtcblxuICAvLyBkZWxldGUgbWFwXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgc3BsaXRNYXBzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7ZmlsZXMsIG9uRmluaXNoID0gbG9hZEZpbGVzU3VjY2Vzc30gPSBhY3Rpb247XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IEFycmF5LmZyb20oZmlsZXMpLnJlZHVjZShcbiAgICAoYWNjdSwgZiwgaSkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGYsIGkpKShhY2N1KSxcbiAgICB7fVxuICApO1xuXG4gIGNvbnN0IGZpbGVMb2FkaW5nID0ge1xuICAgIGZpbGVDYWNoZTogW10sXG4gICAgZmlsZXNUb0xvYWQ6IGZpbGVzLFxuICAgIG9uRmluaXNoXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gbWVyZ2VfKHtmaWxlTG9hZGluZ1Byb2dyZXNzLCBmaWxlTG9hZGluZ30pKHN0YXRlKTtcblxuICByZXR1cm4gbG9hZE5leHRGaWxlVXBkYXRlcihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBTdWNlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlTmFtZSwgZmlsZUNhY2hlfSA9IGFjdGlvbjtcbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ0RvbmUnfVxuICB9KTtcblxuICAvLyBzYXZlIHByb2Nlc3NlZCBmaWxlIHRvIGZpbGVDYWNoZVxuICBjb25zdCBzdGF0ZVdpdGhDYWNoZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZUNhY2hlfSkpKHN0YXRlV2l0aFByb2dyZXNzKTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoQ2FjaGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufVxuXG4vLyB3aXRoVGFzazxUPihzdGF0ZTogVCwgdGFzazogYW55KTogVFxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5leHRGaWxlVXBkYXRlcihzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBbZmlsZSwgLi4ucmVtYWluaW5nRmlsZXNUb0xvYWRdID0gZmlsZXNUb0xvYWQ7XG5cbiAgLy8gc2F2ZSBmaWxlc1RvTG9hZCB0byBzdGF0ZVxuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVzVG9Mb2FkOiByZW1haW5pbmdGaWxlc1RvTG9hZH0pKShzdGF0ZSk7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMCwgbWVzc2FnZTogJ2xvYWRpbmcuLi4nfVxuICB9KTtcblxuICBjb25zdCB7bG9hZGVycywgbG9hZE9wdGlvbnN9ID0gc3RhdGU7XG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgZmlsZSxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyAmJiBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuZmlsZUNhY2hlLFxuICAgICAgbG9hZGVycyxcbiAgICAgIGxvYWRPcHRpb25zXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvYWRGaWxlVGFzayhmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnM6IExvYWRlcltdID0gW10sIGxvYWRPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIExPQURfRklMRV9UQVNLKHtmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnMsIGxvYWRPcHRpb25zfSkuYmltYXAoXG4gICAgLy8gcHJldHRpZXIgaWdub3JlXG4gICAgLy8gc3VjY2Vzc1xuICAgIGdlbiA9PlxuICAgICAgbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgIGdlbixcbiAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgb25GaW5pc2g6IHJlc3VsdCA9PlxuICAgICAgICAgIHByb2Nlc3NGaWxlQ29udGVudCh7XG4gICAgICAgICAgICBjb250ZW50OiByZXN1bHQsXG4gICAgICAgICAgICBmaWxlQ2FjaGVcbiAgICAgICAgICB9KVxuICAgICAgfSksXG5cbiAgICAvLyBlcnJvclxuICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZS5uYW1lLCBlcnIpXG4gICk7XG59XG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbnRlbnQsIGZpbGVDYWNoZX0gPSBhY3Rpb24ucGF5bG9hZDtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAncHJvY2Vzc2luZy4uLid9XG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudCwgZmlsZUNhY2hlfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gbG9hZEZpbGVTdGVwU3VjY2Vzcyh7ZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsIGZpbGVDYWNoZTogcmVzdWx0fSksXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGNvbnRlbnQuZmlsZU5hbWUsIGVycilcbiAgICApXG4gICk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVByb2dyZXNzKHByZXZQcm9ncmVzcyA9IHt9LCBwcm9ncmVzcykge1xuICAvLyBUaGlzIGhhcHBlbnMgd2hlbiByZWNlaXZpbmcgcXVlcnkgbWV0YWRhdGEgb3Igb3RoZXIgY2FzZXMgd2UgZG9uJ3RcbiAgLy8gaGF2ZSBhbiB1cGRhdGUgZm9yIHRoZSB1c2VyLlxuICBpZiAoIXByb2dyZXNzIHx8ICFwcm9ncmVzcy5wZXJjZW50KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwZXJjZW50OiBwcm9ncmVzcy5wZXJjZW50XG4gIH07XG59XG5cbi8qKlxuICogZ2V0cyBjYWxsZWQgd2l0aCBwYXlsb2FkID0gQXN5bmNHZW5lcmF0b3I8Pz8/PlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG5leHRGaWxlQmF0Y2hVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Z2VuLCBmaWxlTmFtZSwgcHJvZ3Jlc3MsIGFjY3VtdWxhdGVkLCBvbkZpbmlzaH1cbiAgfTogVmlzU3RhdGVBY3Rpb25zLk5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczogcGFyc2VQcm9ncmVzcyhzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzW2ZpbGVOYW1lXSwgcHJvZ3Jlc3MpXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhzdGF0ZVdpdGhQcm9ncmVzcywgW1xuICAgIC4uLihnZXRBcHBsaWNhdGlvbkNvbmZpZygpLnVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nICYmXG4gICAgZmlsZU5hbWUuZW5kc1dpdGgoJ2Fycm93JykgJiZcbiAgICBhY2N1bXVsYXRlZD8uZGF0YT8ubGVuZ3RoID4gMFxuICAgICAgPyBbXG4gICAgICAgICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQ6IGFjY3VtdWxhdGVkLCBmaWxlQ2FjaGU6IFtdfSkuYmltYXAoXG4gICAgICAgICAgICByZXN1bHQgPT4gbG9hZEZpbGVzU3VjY2VzcyhyZXN1bHQpLFxuICAgICAgICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgOiBbXSksXG4gICAgVU5XUkFQX1RBU0soZ2VuLm5leHQoKSkuYmltYXAoXG4gICAgICAoe3ZhbHVlLCBkb25lfSkgPT4ge1xuICAgICAgICByZXR1cm4gZG9uZVxuICAgICAgICAgID8gb25GaW5pc2goYWNjdW11bGF0ZWQpXG4gICAgICAgICAgOiBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgICAgICAgZ2VuLFxuICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHZhbHVlLnByb2dyZXNzLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlZDogdmFsdWUsXG4gICAgICAgICAgICAgIG9uRmluaXNoXG4gICAgICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICBdKTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsb2FkaW5nIGZpbGUgZXJyb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNFcnJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZmlsZU5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyB1cGRhdGUgdWkgd2l0aCBlcnJvciBtZXNzYWdlXG4gIENvbnNvbGUud2FybihlcnJvcik7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaCwgZmlsZUNhY2hlfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtlcnJvcn1cbiAgfSk7XG5cbiAgLy8ga2ljayBvZmYgbmV4dCBmaWxlIG9yIGZpbmlzaFxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgbmV4dFN0YXRlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn07XG5cbi8qKlxuICogV2hlbiBzZWxlY3QgZGF0YXNldCBmb3IgZXhwb3J0LCBhcHBseSBjcHUgZmlsdGVyIHRvIHNlbGVjdGVkIGRhdGFzZXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseUNQVUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5BcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYXBwbHkgY3B1RmlsdGVyXG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2N1LCBpZCkgPT4gZmlsdGVyRGF0YXNldENQVShhY2N1LCBpZCksIHN0YXRlKTtcbn07XG5cbi8qKlxuICogVXNlciBpbnB1dCB0byB1cGRhdGUgdGhlIGluZm8gb2YgdGhlIG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcEluZm9VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldE1hcEluZm9VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwSW5mbzoge1xuICAgIC4uLnN0YXRlLm1hcEluZm8sXG4gICAgLi4uYWN0aW9uLmluZm9cbiAgfVxufSk7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgQWxsIGxheWVyIGRvbWFpbiBhbmQgbGF5ZXIgZGF0YSBvZiBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdExheWVycyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhc2V0czogRGF0YXNldHNcbik6IHtzdGF0ZTogVmlzU3RhdGU7IG5ld0xheWVyczogTGF5ZXJbXX0ge1xuICBjb25zdCBlbXB0eTogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkZWZhdWx0TGF5ZXJzID0gT2JqZWN0LnZhbHVlcyhkYXRhc2V0cykucmVkdWNlKChhY2N1OiBMYXllcltdLCBkYXRhc2V0KSA9PiB7XG4gICAgY29uc3QgZm91bmRMYXllcnMgPSBmaW5kRGVmYXVsdExheWVyKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIGZvdW5kTGF5ZXJzICYmIGZvdW5kTGF5ZXJzLmxlbmd0aCA/IGFjY3UuY29uY2F0KGZvdW5kTGF5ZXJzKSA6IGFjY3U7XG4gIH0sIGVtcHR5KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgLi4uZGVmYXVsdExheWVyc10sXG4gICAgICBsYXllck9yZGVyOiBbXG4gICAgICAgIC8vIHB1dCBuZXcgbGF5ZXJzIG9uIHRvcCBvZiBvbGQgb25lcyBpbiByZXZlcnNlXG4gICAgICAgIC4uLmdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGRlZmF1bHRMYXllcnMpLFxuICAgICAgICAuLi5zdGF0ZS5sYXllck9yZGVyXG4gICAgICBdXG4gICAgfSxcbiAgICBuZXdMYXllcnM6IGRlZmF1bHRMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBoZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBkZWZhdWx0IHRvb2x0aXBzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRUb29sdGlwcyhzdGF0ZSwgZGF0YXNldCkge1xuICBjb25zdCB0b29sdGlwRmllbGRzID0gZmluZEZpZWxkc1RvU2hvdyh7XG4gICAgLi4uZGF0YXNldCxcbiAgICBtYXhEZWZhdWx0VG9vbHRpcHM6IHN0YXRlLm1heERlZmF1bHRUb29sdGlwc1xuICB9KTtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdyxcbiAgICAuLi50b29sdGlwRmllbGRzXG4gIH07XG5cbiAgcmV0dXJuIHNldChbJ2ludGVyYWN0aW9uQ29uZmlnJywgJ3Rvb2x0aXAnLCAnY29uZmlnJywgJ2ZpZWxkc1RvU2hvdyddLCBtZXJnZWQsIHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSB7XG4gIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5uYW1lIHx8IGBVbnRpdGxlZCBGaWxlICR7aW5kZXh9YDtcbiAgcmV0dXJuIHtcbiAgICBbZmlsZU5hbWVdOiB7XG4gICAgICAvLyBwZXJjZW50IG9mIGN1cnJlbnQgZmlsZVxuICAgICAgcGVyY2VudDogMCxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgZmlsZU5hbWUsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7ZmlsZU5hbWUsIHByb2dyZXNzfSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHJldHVybiBwaWNrXygnZmlsZUxvYWRpbmdQcm9ncmVzcycpKHBpY2tfKGZpbGVOYW1lKShtZXJnZV8ocHJvZ3Jlc3MpKSkoc3RhdGUpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIGxheWVyIGRvbWFpbnMgZm9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGE8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGRhdGFJZDogc3RyaW5nIHwgc3RyaW5nW10sXG4gIHVwZGF0ZWRGaWx0ZXI/OiBGaWx0ZXJcbik6IFMge1xuICBjb25zdCBkYXRhSWRzID0gdHlwZW9mIGRhdGFJZCA9PT0gJ3N0cmluZycgPyBbZGF0YUlkXSA6IGRhdGFJZDtcbiAgY29uc3QgbmV3TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IG5ld0xheWVyRGF0YTogYW55W10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaCgob2xkTGF5ZXIsIGkpID0+IHtcbiAgICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCAmJiBkYXRhSWRzLmluY2x1ZGVzKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAvLyBObyBuZWVkIHRvIHJlY2FsY3VsYXRlIGxheWVyIGRvbWFpbiBpZiBmaWx0ZXIgaGFzIGZpeGVkIGRvbWFpblxuICAgICAgY29uc3QgbmV3TGF5ZXIgPVxuICAgICAgICB1cGRhdGVkRmlsdGVyICYmIHVwZGF0ZWRGaWx0ZXIuZml4ZWREb21haW5cbiAgICAgICAgICA/IG9sZExheWVyXG4gICAgICAgICAgOiBvbGRMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cywgdXBkYXRlZEZpbHRlcik7XG5cbiAgICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpXSk7XG5cbiAgICAgIG5ld0xheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKGxheWVyRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVycy5wdXNoKG9sZExheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKHN0YXRlLmxheWVyRGF0YVtpXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllckRhdGE6IG5ld0xheWVyRGF0YVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTKTogUyB7XG4gIC8vIG1lcmdlIGFsbCBhbmltYXRhYmxlIGxheWVyIGRvbWFpbiBhbmQgdXBkYXRlIGdsb2JhbCBjb25maWdcbiAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIGRvbWFpbjogbnVsbCxcbiAgICAgICAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICAgICAgICB0aW1lU3RlcHM6IG51bGwsXG4gICAgICAgIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyRG9tYWlucyA9IGFuaW1hdGFibGVMYXllcnMubWFwKGwgPT4gbC5jb25maWcuYW5pbWF0aW9uLmRvbWFpbiB8fCBbXSk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbWVyZ2VkRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhsYXllckRvbWFpbnMpO1xuICBjb25zdCBkZWZhdWx0VGltZUZvcm1hdCA9IGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihtZXJnZWREb21haW4pO1xuXG4gIC8vIG1lcmdlIHRpbWVTdGVwc1xuICBsZXQgbWVyZ2VkVGltZVN0ZXBzOiBudW1iZXJbXSB8IG51bGwgPSB1bmlxPG51bWJlcj4oXG4gICAgYW5pbWF0YWJsZUxheWVycy5yZWR1Y2UoKGFjY3UsIGxheWVyKSA9PiB7XG4gICAgICBhY2N1LnB1c2goLi4uKGxheWVyLmNvbmZpZy5hbmltYXRpb24udGltZVN0ZXBzIHx8IFtdKSk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9LCBbXSlcbiAgKS5zb3J0KCk7XG5cbiAgbWVyZ2VkVGltZVN0ZXBzID0gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCA/IG1lcmdlZFRpbWVTdGVwcyA6IG51bGw7XG5cbiAgLy8gVE9ETzogYmV0dGVyIGhhbmRsaW5nIG9mIGR1cmF0aW9uIGNhbGN1bGF0aW9uXG4gIGNvbnN0IGR1cmF0aW9uID0gbWVyZ2VkVGltZVN0ZXBzXG4gICAgPyAoQkFTRV9TUEVFRCAqICgxMDAwIC8gRlBTKSkgLyBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoIC8gKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5zcGVlZCB8fCAxKVxuICAgIDogbnVsbDtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBkb21haW46IG1lcmdlZERvbWFpbixcbiAgICAgIGRlZmF1bHRUaW1lRm9ybWF0LFxuICAgICAgZHVyYXRpb24sXG4gICAgICB0aW1lU3RlcHM6IG1lcmdlZFRpbWVTdGVwc1xuICAgIH1cbiAgfTtcblxuICAvLyByZXNldCBjdXJyZW50VGltZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gIGNvbnN0IHN5bmNlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnM/LmZpbmQoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSBhc1xuICAgIHwgVGltZVJhbmdlRmlsdGVyXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgLy8gaWYgc3luY2VkIGZpbHRlciBleGlzdCB3ZWUgbmVlZCB0byBtZXJnZSBhbmltYXRpb25Db25maWcgYW5kIGZpbHRlciBkb21haW5zXG4gIC8vIGFuZCB2YWxpZGF0ZSB0aGUgY3VycmVudCB0aW1lIGFnYWluc3QgdGhlIG5ldyBtZXJnZWQgZG9tYWluXG4gIGNvbnN0IG5ld0FuaW1hdGlvbkRvbWFpbiA9IHN5bmNlZEZpbHRlclxuICAgID8gbWVyZ2VUaW1lRG9tYWlucyhbbWVyZ2VkRG9tYWluLCBzeW5jZWRGaWx0ZXIuZG9tYWluXSlcbiAgICA6IG1lcmdlZERvbWFpbjtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBpc0luUmFuZ2Uoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lLCBuZXdBbmltYXRpb25Eb21haW4pXG4gICAgPyBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWVcbiAgICA6IG5ld0FuaW1hdGlvbkRvbWFpblswXTtcblxuICBpZiAoY3VycmVudFRpbWUgIT09IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSkge1xuICAgIC8vIGlmIGN1cnJlbnRUaW1lIGNoYW5nZWQsIG5lZWQgdG8gY2FsbCBhbmltYXRpb25UaW1lVXBkYXRlciB0byByZSBjYWxsIGZvcm1hdExheWVyRGF0YVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5leHRTdGF0ZSwge3ZhbHVlOiBjdXJyZW50VGltZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIHN0YXR1cyBvZiB0aGUgZWRpdG9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0RWRpdG9yTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZGl0b3I6IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgbW9kZSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfVxufSk7XG5cbi8vIGNvbnN0IGZlYXR1cmVUb0ZpbHRlclZhbHVlID0gKGZlYXR1cmUpID0+ICh7Li4uZmVhdHVyZSwgaWQ6IGZlYXR1cmUuaWR9KTtcbi8qKlxuICogVXBkYXRlIGVkaXRvciBmZWF0dXJlc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZlYXR1cmVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZXMgPSBbXX06IFZpc1N0YXRlQWN0aW9ucy5TZXRGZWF0dXJlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbGFzdEZlYXR1cmUgPSBmZWF0dXJlcy5sZW5ndGggJiYgZmVhdHVyZXNbZmVhdHVyZXMubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAvLyBvbmx5IHNhdmUgbm9uZSBmaWx0ZXIgZmVhdHVyZXMgdG8gZWRpdG9yXG4gICAgICBmZWF0dXJlczogZmVhdHVyZXMuZmlsdGVyKGYgPT4gIWdldEZpbHRlcklkSW5GZWF0dXJlKGYpKSxcbiAgICAgIG1vZGU6IGxhc3RGZWF0dXJlICYmIGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LmlzQ2xvc2VkID8gRURJVE9SX01PREVTLkVESVQgOiBzdGF0ZS5lZGl0b3IubW9kZVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBleGlzdGluZyBmZWF0dXJlXG4gIGNvbnN0IHtzZWxlY3RlZEZlYXR1cmV9ID0gc3RhdGUuZWRpdG9yO1xuXG4gIC8vIElmIG5vIGZlYXR1cmUgaXMgc2VsZWN0ZWQgd2UgY2FuIHNpbXBseSByZXR1cm4gc2luY2Ugbm8gb3BlcmF0aW9uc1xuICBpZiAoIXNlbGVjdGVkRmVhdHVyZSkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGNoZWNrIGlmIHRoZSBmZWF0dXJlIGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlLmlkKTtcblxuICAvLyBpZiBmZWF0dXJlIGlzIHBhcnQgb2YgYSBmaWx0ZXJcbiAgY29uc3QgZmlsdGVySWQgPSBmZWF0dXJlICYmIGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQgJiYgZmVhdHVyZSkge1xuICAgIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgICBpZiAoZmVhdHVyZS5wcm9wZXJ0aWVzKSBmZWF0dXJlLnByb3BlcnRpZXMuYmJveCA9IGJib3goZmVhdHVyZSk7XG4gICAgY29uc3QgZmVhdHVyZVZhbHVlID0gZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVySWQpO1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGZpbCA9PiBmaWwuaWQgPT09IGZpbHRlcklkKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBmZWF0dXJlVmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmVhdHVyZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgc2VsZWN0aW9uQ29udGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgaWYgKGZlYXR1cmUgJiYgZmVhdHVyZS5wcm9wZXJ0aWVzKSBmZWF0dXJlLnByb3BlcnRpZXMuYmJveCA9IGJib3goZmVhdHVyZSk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IGZlYXR1cmUsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBEZWxldGUgZXhpc3RpbmcgZmVhdHVyZSBmcm9tIGZpbHRlcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZX06IFZpc1N0YXRlQWN0aW9ucy5EZWxldGVGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWZlYXR1cmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcblxuICBpZiAoZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpIHtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKTtcblxuICAgIHJldHVybiBmaWx0ZXJJZHggPiAtMSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pIDogbmV3U3RhdGU7XG4gIH1cblxuICAvLyBtb2RpZnkgZWRpdG9yIG9iamVjdFxuICBjb25zdCBuZXdFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5ld0VkaXRvclxuICB9O1xufVxuXG4vKipcbiAqIFRvZ2dsZSBmZWF0dXJlIGFzIGxheWVyIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlfSA9IHBheWxvYWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG5cbiAgLy8gbGV0IG5ld0ZpbHRlciA9IG51bGw7XG4gIGxldCBmaWx0ZXJJZHg7XG4gIGxldCBuZXdMYXllcklkID0gW2xheWVyLmlkXTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIC8vIElmIHBvbHlnb24gZmlsdGVyIGFscmVhZHkgZXhpc3RzLCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IGxheWVyIGlzIGFscmVhZHkgaW5jbHVkZWRcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG5cbiAgICBpZiAoIXN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSkge1xuICAgICAgLy8gd2hhdCBpZiBmaWx0ZXIgZG9lc24ndCBleGlzdD8uLi4gbm90IHBvc3NpYmxlLlxuICAgICAgLy8gYmVjYXVzZSBmZWF0dXJlcyBpbiB0aGUgZWRpdG9yIGlzIHBhc3NlZCBpbiBmcm9tIGZpbHRlcnMgYW5kIGVkaXRvcnMuXG4gICAgICAvLyBidXQgd2Ugd2lsbCBtb3ZlIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGVkaXRvciBqdXN0IGluIGNhc2VcbiAgICAgIGNvbnN0IG5vbmVGaWx0ZXJGZWF0dXJlID0ge1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGZpbHRlcklkOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIG5vbmVGaWx0ZXJGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5vbmVGaWx0ZXJGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgICBjb25zdCB7bGF5ZXJJZCA9IFtdfSA9IGZpbHRlcjtcbiAgICBjb25zdCBpc0xheWVySW5jbHVkZWQgPSBsYXllcklkLmluY2x1ZGVzKGxheWVyLmlkKTtcblxuICAgIG5ld0xheWVySWQgPSBpc0xheWVySW5jbHVkZWRcbiAgICAgID8gLy8gaWYgbGF5ZXIgaXMgaW5jbHVkZWQsIHJlbW92ZSBpdFxuICAgICAgICBsYXllcklkLmZpbHRlcihsID0+IGwgIT09IGxheWVyLmlkKVxuICAgICAgOiBbLi4ubGF5ZXJJZCwgbGF5ZXIuaWRdO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIHdlIGhhdmVuJ3QgY3JlYXRlIHRoZSBwb2x5Z29uIGZpbHRlciwgY3JlYXRlIGl0XG4gICAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICAgIC8vIGFkZCBmZWF0dXJlLCByZW1vdmUgZmVhdHVyZSBmcm9tIGVpZHRvclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICAgIGVkaXRvcjoge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBuZXdMYXllcklkXG4gIH0pO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbiwgbW9kZX06IFZpc1N0YXRlQWN0aW9ucy5Tb3J0VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IHNvcnRNb2RlID0gbW9kZTtcbiAgaWYgKCFzb3J0TW9kZSkge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0KGRhdGFzZXQsIFsnc29ydENvbHVtbicsIGNvbHVtbl0pO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzaG91bGQgYmUgZml4YWJsZSBpbiBhIFRTIGZpbGVcbiAgICBzb3J0TW9kZSA9IGN1cnJlbnRNb2RlXG4gICAgICA/IE9iamVjdC5rZXlzKFNPUlRfT1JERVIpLmZpbmQobSA9PiBtICE9PSBjdXJyZW50TW9kZSlcbiAgICAgIDogU09SVF9PUkRFUi5BU0NFTkRJTkc7XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSBzb3J0RGF0YXNldEJ5Q29sdW1uKGRhdGFzZXQsIGNvbHVtbiwgc29ydE1vZGUpO1xuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzb3J0ZWQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5QaW5UYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdEYXRhc2V0ID0gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQsIGNvbHVtbik7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvcHkgY29sdW1uIGNvbnRlbnQgYXMgc3RyaW5nc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLkNvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogU2V0IGRpc3BsYXkgZm9ybWF0IGZyb20gY29sdW1ucyBmcm9tIHVzZXIgc2VsZWN0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZm9ybWF0c306IFZpc1N0YXRlQWN0aW9ucy5TZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcztcbiAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICAgIGlmIChmaWVsZElkeCA+PSAwKSB7XG4gICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZm9ybWF0c1tjb2x1bW5dO1xuICAgICAgY29uc3QgZmllbGQgPSBuZXdGaWVsZHNbZmllbGRJZHhdO1xuICAgICAgbmV3RmllbGRzID0gc3dhcF8obWVyZ2VfKHtkaXNwbGF5Rm9ybWF0fSkoZmllbGQpIGFzIHtpZDogc3RyaW5nfSkoXG4gICAgICAgIG5ld0ZpZWxkcyBhcyB7aWQ6IHN0cmluZ31bXVxuICAgICAgKSBhcyBGaWVsZFtdO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHMgYXMgRmllbGRbXX0pO1xuICBsZXQgbmV3U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICAvLyB1cGRhdGUgY29sb3JGaWVsZCBkaXNwbGF5Rm9ybWF0XG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyczogbmV3U3RhdGUubGF5ZXJzLm1hcChsYXllciA9PlxuICAgICAgbGF5ZXIuY29uZmlnPy5jb2xvckZpZWxkPy5uYW1lICYmIGxheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWUgaW4gZm9ybWF0c1xuICAgICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIGNvbG9yRmllbGQ6IHtcbiAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yRmllbGQsXG4gICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ6IGZvcm1hdHNbbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IGxheWVyXG4gICAgKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICB2aXNpYmxlOiAhc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbmZ1bmN0aW9uIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgZmlsdGVySWR4OiBudW1iZXIpOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICBpZiAoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSB7XG4gICAgY29uc3QgdGltZWxpbmVWYWx1ZSA9IGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzXG4gICAgICA/IHNuYXBUb01hcmtzKHRpbWVsaW5lVmFsdWUsIHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMpXG4gICAgICA6IHRpbWVsaW5lVmFsdWU7XG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIHt2YWx1ZX0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKSB7XG4gIHJldHVybiBmaWx0ZXIudmFsdWVbZmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdO1xufVxuXG5mdW5jdGlvbiBnZXRTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlKSB7XG4gICAgcmV0dXJuIGZpbHRlci5zeW5jVGltZWxpbmVNb2RlID8/IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xuICB9XG5cbiAgcmV0dXJuIFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLCBuZXdNb2RlOiBudW1iZXIpIHtcbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlICYmIG5ld01vZGUgPT09IFNZTkNfVElNRUxJTkVfTU9ERVMuc3RhcnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VGltZUZpbHRlckludGVydmFsKHN0YXRlLCBmaWx0ZXIpIHtcbiAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBsZXQgaW50ZXJ2YWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSW5kZXggPSBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLnJlZHVjZSgoY3VycmVudEluZGV4LCBsKSA9PiB7XG4gICAgICBpZiAobC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IFRJTUVfSU5URVJWQUxTX09SREVSRUQuZmluZEluZGV4KGkgPT4gaSA9PT0gbC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCk7XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+IC0xICYmIG5ld0luZGV4IDwgY3VycmVudEluZGV4ID8gbmV3SW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSwgVElNRV9JTlRFUlZBTFNfT1JERVJFRC5sZW5ndGggLSAxKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaGV4VGlsZUludGVydmFsID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRFtpbnRlcnZhbEluZGV4XTtcbiAgICBpbnRlcnZhbCA9IExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWxbaGV4VGlsZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShmaWx0ZXIsIHVwZGF0ZWRQbG90VHlwZSwgc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyKTtcbn1cblxuLy8gRmluZCBkYXRhSWQgZnJvbSBhIHNhdmVkIHZpc1N0YXRlIHByb3BlcnR5OlxuLy8gbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnMsIGxheWVyQmxlbmRpbmcsIG92ZXJsYXlCbGVuZGluZywgc3BsaXRNYXBzLCBhbmltYXRpb25Db25maWcsIGVkaXRvclxuLy8gcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZGF0YUlkXG5mdW5jdGlvbiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModmFsdWU6IGFueSwgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IHJlcGxhY2VkID0gdmFsdWVcbiAgICAgIC5tYXAodiA9PiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModiwgZGF0YUlkLCBkYXRhSWRUb1JlcGxhY2UpKVxuICAgICAgLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZS5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHZhbHVlLmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gb3RoZXJzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICB9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YUlkKSAmJiB2YWx1ZS5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgIC8vIGZpbHRlclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogdmFsdWUuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1JlcGxhY2UgOiBkKSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmNvbmZpZz8uZGF0YUlkICYmIHZhbHVlLmNvbmZpZz8uZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBsYXllclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi52YWx1ZS5jb25maWcsXG4gICAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBkYXRhSWQpKSB7XG4gICAgLy8gZm9yIHZhbHVlIHNhdmVkIGFzIHtbZGF0YUlkXTogey4uLn19XG4gICAgcmV0dXJuIHtbZGF0YUlkVG9SZXBsYWNlXTogdmFsdWVbZGF0YUlkXX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gRmluZCBkYXRhc2V0SWRzIGRlcml2ZWQgYSBzYXZlZCB2aXNTdGF0ZSBQcm9wZXJ0eTtcbmZ1bmN0aW9uIGZpbmRDaGlsZERhdGFzZXRJZHModmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgY2hpbGREYXRhSWRzID0gdmFsdWUubWFwKGZpbmRDaGlsZERhdGFzZXRJZHMpLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiBjaGlsZERhdGFJZHMubGVuZ3RoID8gY2hpbGREYXRhSWRzIDogbnVsbDtcbiAgfVxuXG4gIC8vIGNoaWxkIGRhdGEgaWQgdXN1YWxseSBzdG9yZXMgaW4gdGhlIGRlcml2ZWQgZGF0YXNldCBpbmZvXG4gIHJldHVybiB2YWx1ZT8ubmV3RGF0YXNldD8uaW5mby5pZCB8fCBudWxsO1xufVxuXG4vLyBtb3ZlZCB1bm1lcmdlZCBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9uc1xuZnVuY3Rpb24gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcHJvcFZhbHVlcywge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KSB7XG4gIC8vIHJlbW92ZSBwcm9wIHZhbHVlIGZyb20gc3RhdGVcbiAgLy8gVE9ETzogc2hvdWxkIHdlIGFkZCByZW1vdmUgdXBkYXRlciB0byBtZXJnZXIgYXMgd2VsbD9cbiAgaWYgKCFwcm9wVmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHN0YXRlUmVtb3ZlZCA9XG4gICAgcHJvcCA9PT0gJ2xheWVycydcbiAgICAgID8gcHJvcFZhbHVlcy5yZWR1Y2UoKGFjY3UsIHByb3BWYWx1ZSkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZDogcHJvcFZhbHVlLmlkfSksIHN0YXRlKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHN0YXRlW3Byb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgW3Byb3BdOiBzdGF0ZVtwcm9wXS5maWx0ZXIocCA9PiAhcHJvcFZhbHVlcy5maW5kKHByb3BWYWx1ZSA9PiBwLmlkID09PSBwcm9wVmFsdWUuaWQpKVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG5vdCBhcnJheSwgd2Ugd29uJ3QgcmVtb3ZlIGl0LCByZW1vdmUgZGF0YXNldCBzaG91bGQgaGFuZGxlIGl0XG4gICAgICAgIHN0YXRlO1xuXG4gIC8vIG1vdmUgdG8gc3RhdGVUb0JlTWVyZ2VkXG4gIGNvbnN0IHRvQmVNZXJnZWQgPSB7XG4gICAgW3RvTWVyZ2VQcm9wXTogc2F2ZVVubWVyZ2VkXG4gICAgICA/IC8vIGNhbGwgbWVyZ2Ugc2F2ZVVubWVyZ2VkIG1ldGhvZFxuICAgICAgICBzYXZlVW5tZXJnZWQoc3RhdGVSZW1vdmVkLCBwcm9wVmFsdWVzKVxuICAgICAgOiAvLyBpZiB0b01lcmdlUHJvcCBpcyBhcmFheSwgYXBwZW5kIHRvIGl0XG4gICAgICBBcnJheS5pc0FycmF5KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IFsuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLCAuLi5wcm9wVmFsdWVzXVxuICAgICAgOiAvLyBzYXZlIHByb3BWYWx1ZXMgdG8gdG9NZXJnZVxuICAgICAgaXNPYmplY3Qoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sXG4gICAgICAgICAgLi4ucHJvcFZhbHVlc1xuICAgICAgICB9XG4gICAgICA6IHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlUmVtb3ZlZCxcbiAgICAuLi50b0JlTWVyZ2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0QW5kRGVwczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICByZXR1cm4gY29tcG9zZV88VD4oW1xuICAgIGFwcGx5XyhyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlLCB7ZGF0YUlkLCBkYXRhSWRUb1VzZX0pLFxuICAgIGFwcGx5XyhyZW1vdmVEYXRhc2V0VXBkYXRlciwge2RhdGFJZH0pXG4gIF0pKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZXBsYWNlRGF0YXNldEFuZERlcHMoc3RhdGUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAvLyBtYWtlIGEgY29weSBvZiBsYXllck9yZGVyLCBiZWNhdXNlIGxheWVyIGlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGJ5IGNhbGxpbmcgcmVtb3ZlTGF5ZXJVcGRhdGVyXG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICAvLyBwcmVzZXJ2ZSBkYXRhc2V0IG9yZGVyXG4gIG5leHRTdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKS5tYXAoZCA9PlxuICAgIGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZFxuICApO1xuXG4gIC8vIHByZXNlcnZlTGF5ZXJPcmRlclxuICBpZiAobmV4dFN0YXRlLmxheWVyVG9CZU1lcmdlZD8ubGVuZ3RoKSB7XG4gICAgLy8gY29weSBzcGxpdCBtYXBzIHRvIGJlIG1lcmdlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc2V0IGluIHJlbW92ZSBsYXllclxuICAgIG5leHRTdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkID0gc2VyaWFsaXplZFN0YXRlPy5zcGxpdE1hcHMgPz8gW107XG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIgPSBbLi4ucHJlc2VydmVMYXllck9yZGVyXTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRGF0YXNldERlcHNJblN0YXRlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7ZGF0YUlkLCBkYXRhSWRUb1VzZX06IHtkYXRhSWQ6IHN0cmluZzsgZGF0YUlkVG9Vc2U6IHN0cmluZ31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5tZXJnZXJzLnJlZHVjZShcbiAgICAoXG4gICAgICBhY2N1U3RhdGUsXG4gICAgICB7cHJvcCwgdG9NZXJnZVByb3AsIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZCwgcHJlc2VydmVPcmRlcn1cbiAgICApID0+IHtcbiAgICAgIC8vIGdldCBkYXRhc2V0IGlkcyB0aGF0IGFyZSBkZXBlbmRzIG9uIHRoaXMgZGF0YXNldFxuICAgICAgY29uc3QgcHJvcHMgPSB0b0FycmF5KHByb3ApO1xuICAgICAgY29uc3QgdG9NZXJnZVByb3BzID0gdG9BcnJheSh0b01lcmdlUHJvcCk7XG4gICAgICBjb25zdCBzYXZlZFByb3BzID0gc2VyaWFsaXplZFN0YXRlID8gcHJvcHMubWFwKHAgPT4gc2VyaWFsaXplZFN0YXRlW3BdKSA6IFtdO1xuXG4gICAgICBsZXQgcmVwbGFjZWRTdGF0ZSA9IGFjY3VTdGF0ZTtcbiAgICAgIHNhdmVkUHJvcHMuZm9yRWFjaCgocHJvcFZhbHVlLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lcmdlck9wdGlvbnMgPSB7XG4gICAgICAgICAgcHJvcDogcHJvcHNbaV0sXG4gICAgICAgICAgdG9NZXJnZVByb3A6IHRvTWVyZ2VQcm9wc1tpXSxcbiAgICAgICAgICBnZXRDaGlsZERhdGFzZXRJZHMsXG4gICAgICAgICAgc2F2ZVVubWVyZ2VkXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWRJdGVtID1cbiAgICAgICAgICByZXBsYWNlUGFyZW50RGF0YXNldElkcz8uKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSkgfHxcbiAgICAgICAgICBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgICAgICAgcmVwbGFjZWRTdGF0ZSA9IHJlcGxhY2VkSXRlbVxuICAgICAgICAgID8gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUocmVwbGFjZWRTdGF0ZSwgcmVwbGFjZWRJdGVtLCBtZXJnZXJPcHRpb25zKVxuICAgICAgICAgIDogcmVwbGFjZWRTdGF0ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXT8ubGVuZ3RoICYmXG4gICAgICAgICAgcHJlc2VydmVPcmRlclxuICAgICAgICApIHtcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdID0gcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlcGxhY2VkU3RhdGU7XG4gICAgfSxcbiAgICBzdGF0ZVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKFxuICBzdGF0ZSxcbiAgcmVwbGFjZWRJdGVtLFxuICB7cHJvcCwgdG9NZXJnZVByb3AsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkfVxuKSB7XG4gIC8vIHByb3AgaXMgZGVwZW5kcyBvbiB0aGUgZGF0YXNldCB0byBiZSByZXBsYWNlZFxuICAvLyByZW1vdmUgcHJvcCBmcm9tIHN0YXRlLCBhbmQgbW92ZSBpdCB0byB0b0JlTWVyZ2VkXG4gIGxldCBuZXh0U3RhdGUgPSBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCByZXBsYWNlZEl0ZW0sIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSk7XG4gIGNvbnN0IGNoaWxkRGF0YUlkcyA9IGdldENoaWxkRGF0YXNldElkcz8uKHJlcGxhY2VkSXRlbSkgfHwgZmluZENoaWxkRGF0YXNldElkcyhyZXBsYWNlZEl0ZW0pO1xuXG4gIGlmIChjaGlsZERhdGFJZHMpIHtcbiAgICBuZXh0U3RhdGUgPSB0b0FycmF5KGNoaWxkRGF0YUlkcykucmVkdWNlKChhY2N1LCBjaGlsZERhdGFJZCkgPT4ge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGNoaWxkIGRhdGFzZXQgaWQsXG4gICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBtb3ZlIG91dCBvZiBzdGF0ZSBhbmQgbWVyZ2UgYmFjayBpblxuICAgICAgcmV0dXJuIHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhhY2N1LCBjaGlsZERhdGFJZCwgY2hpbGREYXRhSWQpO1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7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
|
|
3539
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvcHlUb0NsaXBib2FyZCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfdGFza3MyIiwiX2FjdGlvbnMiLCJfdXRpbHMiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX2xheWVycyIsIl9jb21wb3NlckhlbHBlcnMiLCJfbWVyZ2VySGFuZGxlciIsIl92aXNTdGF0ZU1lcmdlciIsIl9zY2hlbWFzIiwiX3RhYmxlIiwiX2ludGVyYWN0aW9uVXRpbHMiLCJfbGF5ZXJVdGlscyIsIl9lZmZlY3RzIiwiX2RhdGFVdGlscyIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfdG9Qcm9wZXJ0eUtleSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJmIiwibyIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGlzYWJsZVN0YWNrQ2FwdHVyaW5nIiwidmlzU3RhdGVVcGRhdGVycyIsImRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyIsImV4cG9ydHMiLCJ0b29sdGlwIiwiaWQiLCJsYWJlbCIsImVuYWJsZWQiLCJjb25maWciLCJmaWVsZHNUb1Nob3ciLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiQ09NUEFSRV9UWVBFUyIsIkFCU09MVVRFIiwiZ2VvY29kZXIiLCJwb3NpdGlvbiIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsInVuZGVmaW5lZCIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwic3BsaXRNYXBzIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImlzTWVyZ2luZ0RhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiTGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwic2NoZW1hIiwiS2VwbGVyR0xTY2hlbWEiLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIm1hcCIsImx5ciIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJpc1Zpc2libGUiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwicmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzIiwiYW5pbWF0aW9uIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwicGlja0NoYW5nZWRQcm9wcyIsInByZXYiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsImtleSIsInByb3RvdHlwZSIsImlzRXF1YWwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJwYXJzZUxheWVyQ29uZmlnIiwib2xkTGF5ZXIiLCJmaW5kIiwibCIsImRhdGFzZXQiLCJkYXRhSWQiLCJuZXdMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIm5leHRTdGF0ZSIsInR5cGUiLCJvbGRMYXllckluZGV4IiwiZmluZEluZGV4IiwibGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciIsImxheWVyVHlwZUNoYW5nZSIsIm5ld0xheWVySWQiLCJhcHBseUxheWVyQ29uZmlnIiwic2VyaWFsaXplZE9sZExheWVyIiwic2VyaWFsaXplTGF5ZXIiLCJzZXJpYWxpemVkTmV3TGF5ZXIiLCJjaGFuZ2VkIiwidmlzQ29uZmlnIiwibGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyIiwibGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJ2aXN1YWxDaGFubmVscyIsImNoYW5uZWxOYW1lIiwiY2hhbm5lbCIsImNoYW5uZWxQcm9wTmFtZXMiLCJwcm9wIiwic29tZSIsImxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIiLCJsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UiLCJwaWNrIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJlcnIiLCJsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllckNvbmZpZ0NoYW5nZSIsInVwZGF0ZWxheWVyVmlzaWJpbHR5IiwiZmlsdGVySW5kZXgiLCJmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUiLCJpc0xheWVyQW5pbWF0YWJsZSIsInN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyIiwiZW5hYmxlIiwiZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMiLCJwcm9wcyIsIm5ld0NvbmZpZyIsIl9hY3Rpb24kbmV3Q29uZmlnIiwicmVzdENvbmZpZyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJzdGF0ZVdpdGhEYXRhSWQiLCJsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIiLCJuZXh0TGF5ZXIiLCJ1cGRhdGVMYXllckNvbmZpZyIsInNob3VsZENhbGN1bGF0ZUxheWVyRGF0YSIsIm9sZExheWVyRGF0YSIsInVwZGF0ZUxheWVyRGF0YVJlc3VsdCIsImNhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlciIsIl9jYWxjdWxhdGVMYXllckRhdGEiLCJsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyIiwibGF5ZXJJZCIsInNwbGl0TWFwSWQiLCJtYXBJbmRleCIsInNtIiwidG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSIsImxheWVyU2V0SXNWYWxpZFVwZGF0ZXIiLCJpc1ZhbGlkIiwibGF5ZXJUb1VwZGF0ZSIsIm5ld0RhdGEiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMiIsImFkZE9yUmVtb3ZlVGV4dExhYmVscyIsIm5ld0ZpZWxkcyIsInRleHRMYWJlbCIsImRlZmF1bHRUZXh0TGFiZWwiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJuZXdUZXh0TGFiZWwiLCJjdXJyZW50RmllbGRzIiwidGwiLCJmaWVsZCIsImFkZEZpZWxkcyIsImluY2x1ZGVzIiwiZGVsZXRlRmllbGRzIiwiZmQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiYWYiLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwyIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwiaXNDb25maWdBY3RpdmUiLCJ1cGRhdGVMYXllckRvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGEzIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwibmV3VHlwZSIsIm9sZElkIiwiQ29uc29sZSIsImVycm9yIiwiZGVmYXVsdExheWVyUHJvcHMiLCJhc3NpZ25Db25maWdUb0xheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJpc0xheWVySG92ZXJlZCIsIl9jYWxjdWxhdGVMYXllckRhdGE0Iiwic2V0dGluZ3MiLCJfc2V0dGluZ3MkbGF5ZXJzIiwib2xkTGF5ZXJNYXAiLCJvdGhlckxheWVycyIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsIiwidXBkYXRlZFN0YXRlIiwidmlzdWFsQ2hhbm5lbCIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNiIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJfcmVmMiIsInJlZHVjZSIsImFjY3UiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiX3JlZjMiLCJhbmltYXRpb25XaW5kb3ciLCJuZXdGaWx0ZXIiLCJzd2FwXyIsIm5ld1N5bmNUaW1lbGluZU1vZGUiLCJnZXRTeW5jQW5pbWF0aW9uTW9kZSIsInNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyIiwiYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyIiwiX3NlcmlhbGl6ZUZpbHRlciIsImZpbHRlcklkIiwib2xkRmlsdGVyIiwic2VyaWFsaXplZE9sZEZpbHRlciIsInNlcmlhbGl6ZUZpbHRlciIsInNlcmlhbGl6ZWROZXdGaWx0ZXIiLCJzZXRGaWx0ZXIiLCJ2YWx1ZXMiLCJfYWN0aW9uJHZhbHVlSW5kZXgiLCJ2YWx1ZUluZGV4IiwidG9BcnJheSIsImRhdGFzZXRJZHNUb0ZpbHRlciIsIl9sb29wIiwicmVzIiwidiIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJlbmxhcmdlZCIsInNpZGUiLCJmaWx0ZXJlZERhdGFzZXRzIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsInVuaXEiLCJmaWx0ZXJXaXRoUExvdCIsInVwZGF0ZUZpbHRlclBsb3QiLCJ1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEiLCJGSUxURVJfVFlQRVMiLCJ0aW1lUmFuZ2UiLCJhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyIiwiX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIl9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJuZXh0VmFsdWUiLCJnZXREZWZhdWx0RmlsdGVyIiwicmVtb3ZlRmlsdGVyUGxvdCIsIl9pIiwiX2FyciIsIm5leHRWYWwiLCJkb21haW5TdGVwcyIsIm1lcmdlRmlsdGVyRG9tYWluIiwibmV4dEZpbHRlciIsInN0ZXAiLCJhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluIiwiZGF0YXNldElkcyIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwib2xkRGF0YUlkIiwiZGF0YXNldElkIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwiYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJtZXJnZURvbWFpbiIsInVwZGF0ZWRGaWx0ZXIiLCJuZXdEYXRhc2V0IiwiZ3B1Iiwic2V0RmlsdGVyR3B1TW9kZSIsImFzc2lnbkdwdUNoYW5uZWwiLCJsYXllcklkRGlmZmVyZW5jZSIsInhvciIsImxheWVyRGF0YUlkcyIsImxpZCIsIm5ld0RhdGFJZHMiLCJzZXRGaWx0ZXJQbG90VXBkYXRlciIsIl9yZWY0IiwibmV3UHJvcCIsInBpY2tfIiwibWVyZ2VfIiwicGxvdFR5cGUiLCJjaGFydFR5cGUiLCJ5QXhpcyIsIlBMT1RfVFlQRVMiLCJsaW5lQ2hhcnQiLCJoaXN0b2dyYW0iLCJhZGRGaWx0ZXJVcGRhdGVyIiwiY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyIiwib3JpZ2luYWxJbmRleCIsImluZGV4IiwibGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciIsIl9yZWY1Iiwib2xkVml4Q29uZmlnIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciIsImlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnIiwic2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlciIsImlzU2lkZUZpbHRlciIsImFwcGx5RmlsdGVyQ29uZmlnIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciIsInVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwiX3JlZjYiLCJzZXRGaWx0ZXJWaWV3VXBkYXRlciIsInNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyIsInRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyIiwiZmVhdHVyZVRvRmlsdGVyVmFsdWUiLCJyZW1vdmVGaWx0ZXJVcGRhdGVyIiwiX3N0YXRlJGZpbHRlcnMkaWR4IiwibmV3RmlsdGVycyIsIm5ld0VkaXRvciIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiYWRkTGF5ZXJVcGRhdGVyIiwibmV3TGF5ZXJEYXRhIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwid2FybiIsIl9hY3Rpb24kZGF0YXNldElkIiwiZGVmYXVsdERhdGFzZXQiLCJMYXllciIsInJlbW92ZUxheWVyVXBkYXRlciIsIl9yZWY3IiwiaXNGaW5pdGUiLCJsYXllclRvUmVtb3ZlIiwiZmlsdGVyT3V0QnlJZCIsInJlbW92ZUVsZW1lbnRBdEluZGV4IiwicmVvcmRlckxheWVyVXBkYXRlciIsIl9yZWY4Iiwib3JkZXIiLCJkdXBsaWNhdGVMYXllclVwZGF0ZXIiLCJfcmVmOSIsIm9yaWdpbmFsIiwib3JpZ2luYWxMYXllck9yZGVySWR4IiwibmV3TGFiZWwiLCJwb3N0Zml4IiwiZ2VuZXJhdGVIYXNoSWQiLCJMQVlFUl9JRF9MRU5HVEgiLCJuZXdMYXllck9yZGVyIiwiYXJyYXlJbnNlcnQiLCJhZGRFZmZlY3RVcGRhdGVyIiwiX2FjdGlvbiRjb25maWciLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsImVmZmVjdCIsIm5ld0VmZmVjdCIsImNyZWF0ZUVmZmVjdCIsInNldFByb3BzIiwiZml4RWZmZWN0T3JkZXIiLCJyZW1vdmVFZmZlY3RVcGRhdGVyIiwiX3JlZjEwIiwiZWZmZWN0VG9SZW1vdmUiLCJlZmZlY3RJZCIsInJlb3JkZXJFZmZlY3RVcGRhdGVyIiwiX3JlZjExIiwidXBkYXRlRWZmZWN0VXBkYXRlciIsIl9yZWYxMiIsImlkeDIiLCJlZmZlY3RPcmRlcklkIiwibmV3RWZmZWN0cyIsInJlbW92ZURhdGFzZXRVcGRhdGVyIiwiZGF0YXNldEtleSIsIl9zdGF0ZSRkYXRhc2V0cyIsIm5ld0RhdGFzZXRzIiwibGF5ZXJzVG9SZW1vdmUiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiaW5kZXhPZiIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMTMiLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsImZpZWxkcyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYxNCIsIl9yZWYxNCRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYxNCRwYXlsb2FkJGNvbmZpZyIsIl9yZWYxNCRwYXlsb2FkJG9wdGlvbiIsIm9wdGlvbnMiLCJ2aXNTdGF0ZSIsImtlZXBFeGlzdGluZ0NvbmZpZyIsIm1lcmdlZFN0YXRlIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm1lcmdlciIsImlzVmFsaWRNZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZSIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwidG9NZXJnZVByb3AiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiayIsImxheWVyQ2xpY2tVcGRhdGVyIiwicGlubmVkIiwiY2xvbmVEZWVwIiwicGlja2VkIiwibWFwQ2xpY2tVcGRhdGVyIiwibW91c2VNb3ZlVXBkYXRlciIsIl9yZWYxNSIsImV2dCIsInBvaW50IiwibW91c2VQb3NpdGlvbiIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwiX3JlZjE2IiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJzZXRJc0xvYWRpbmdUYXNrIiwiQUNUSU9OX1RBU0siLCJzZXRMb2FkaW5nSW5kaWNhdG9yIiwiY2hhbmdlIiwid2l0aFRhc2siLCJjcmVhdGVEYXRhc2V0VGFza3MiLCJub3RpZmljYXRpb25UYXNrcyIsIl9yZWYxNyIsImRhdGFzZXRJbmRleCIsIl9yZWYxNyRpbmZvIiwicmVzdCIsInRhc2siLCJjcmVhdGVOZXdEYXRhRW50cnkiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsIm1lc3NhZ2UiLCJkYXRhc2V0c0FsbFNldHRsZWRUYXNrIiwiVGFzayIsImFsbFNldHRsZWQiLCJyZXN1bHRzIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MiLCJhZGRUb01hcE9wdGlvbnMiLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQiLCJuZXdEYXRhRW50cmllcyIsInN0YXR1cyIsImNvbnNvbGUiLCJyZWFzb24iLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJjZW50ZXJNYXAiLCJib3VuZHMiLCJmaW5kTWFwQm91bmRzIiwiZml0Qm91bmRzVGFzayIsImZpdE1hcEJvdW5kcyIsInJlbmFtZURhdGFzZXRVcGRhdGVyIiwiQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyIsInZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzIiwidmFsaWRhdGVkUHJvcHMiLCJlbnRyaWVzIiwiYWNjIiwiZW50cnkiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheTIiLCJpc1JnYkNvbG9yIiwiaXNQbGFpbk9iamVjdCIsImRlZXBtZXJnZSIsImV4aXN0aW5nIiwiY29weVRhYmxlQW5kVXBkYXRlIiwiX3N0YXRlJHNwbGl0TWFwcyRpbmRlIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibG9hZEZpbGVzVXBkYXRlciIsImZpbGVzIiwiX2FjdGlvbiRvbkZpbmlzaCIsIm9uRmluaXNoIiwibG9hZEZpbGVzU3VjY2VzcyIsImluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzIiwiZmlsZUNhY2hlIiwiZmlsZXNUb0xvYWQiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsIl9zdGF0ZSRmaWxlTG9hZGluZyIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJwcm9ncmVzcyIsInBlcmNlbnQiLCJzdGF0ZVdpdGhDYWNoZSIsIkRFTEFZX1RBU0siLCJsb2FkTmV4dEZpbGUiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheTIiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiTE9BRF9GSUxFX1RBU0siLCJiaW1hcCIsImdlbiIsIm5leHRGaWxlQmF0Y2giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJjb250ZW50IiwibG9hZEZpbGVzRXJyIiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZDIiLCJQUk9DRVNTX0ZJTEVfREFUQSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJwYXJzZVByb2dyZXNzIiwicHJldlByb2dyZXNzIiwibmV4dEZpbGVCYXRjaFVwZGF0ZXIiLCJfcmVmMTgiLCJfYWNjdW11bGF0ZWQkZGF0YSIsIl9yZWYxOCRwYXlsb2FkIiwiYWNjdW11bGF0ZWQiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nIiwiZW5kc1dpdGgiLCJkYXRhIiwiVU5XUkFQX1RBU0siLCJfcmVmMTkiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjIwIiwiX3N0YXRlJGZpbGVMb2FkaW5nMiIsImFwcGx5Q1BVRmlsdGVyVXBkYXRlciIsIl9yZWYyMSIsImRhdGFJZHMiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJlbXB0eSIsImRlZmF1bHRMYXllcnMiLCJmb3VuZExheWVycyIsImZpbmREZWZhdWx0TGF5ZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsImZpbmRGaWVsZHNUb1Nob3ciLCJtZXJnZWQiLCJfcmVmMjMiLCJmaXhlZERvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGE3IiwiX3N0YXRlJGZpbHRlcnMiLCJhbmltYXRhYmxlTGF5ZXJzIiwibGF5ZXJEb21haW5zIiwibWVyZ2VkRG9tYWluIiwibWVyZ2VUaW1lRG9tYWlucyIsImdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlciIsIm1lcmdlZFRpbWVTdGVwcyIsInNvcnQiLCJCQVNFX1NQRUVEIiwiRlBTIiwic3luY2VkRmlsdGVyIiwibmV3QW5pbWF0aW9uRG9tYWluIiwiaXNJblJhbmdlIiwic2V0RWRpdG9yTW9kZVVwZGF0ZXIiLCJfcmVmMjQiLCJzZXRGZWF0dXJlc1VwZGF0ZXIiLCJfcmVmMjUiLCJfbGFzdEZlYXR1cmUkcHJvcGVydGkiLCJfcmVmMjUkZmVhdHVyZXMiLCJsYXN0RmVhdHVyZSIsInByb3BlcnRpZXMiLCJpc0Nsb3NlZCIsIkVESVQiLCJmZWF0dXJlIiwiYmJveCIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsInNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIiLCJfcmVmMjYiLCJzZWxlY3Rpb25Db250ZXh0IiwiZGVsZXRlRmVhdHVyZVVwZGF0ZXIiLCJfcmVmMjciLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyIiwibm9uZUZpbHRlckZlYXR1cmUiLCJfZmlsdGVyJGxheWVySWQiLCJpc0xheWVySW5jbHVkZWQiLCJnZW5lcmF0ZVBvbHlnb25GaWx0ZXIiLCJzb3J0VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjI4IiwiY29sdW1uIiwic29ydE1vZGUiLCJjdXJyZW50TW9kZSIsIlNPUlRfT1JERVIiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjI5IiwicGluVGFibGVDb2x1bW5zIiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWYzMCIsImZpZWxkSWR4IiwidGV4dCIsImRhdGFDb250YWluZXIiLCJyb3ciLCJwYXJzZUZpZWxkVmFsdWUiLCJ2YWx1ZUF0Iiwiam9pbiIsImNvcHkiLCJzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlciIsIl9yZWYzMSIsImZvcm1hdHMiLCJkaXNwbGF5Rm9ybWF0IiwiX2xheWVyJGNvbmZpZyIsImNvbG9yRmllbGQiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlciIsInNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjMyIiwidXBkYXRlcyIsImNoZWNrVGltZUNvbmZpZ0FyZ3MiLCJhbGxvd2VkIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWYzMyIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXIiLCJfbGF5ZXIkZmlsdGVyZWRJdGVtQ28iLCJldmVudCIsImRlY2tnbExheWVySWQiLCJjb3VudCIsImZpbHRlcmVkSXRlbUNvdW50IiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvMiIsIl9hY3Rpb24kZW5hYmxlIiwiaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIiLCJCb29sZWFuIiwibmV3RmlsdGVyRG9tYWluIiwiQU5JTUFUSU9OX1dJTkRPVyIsImludGVydmFsIiwiYWRqdXN0VGltZUZpbHRlckludGVydmFsIiwibmV3RmlsdGVyVmFsdWUiLCJzeW5jVGltZWxpbmVNb2RlIiwiU1lOQ19USU1FTElORV9NT0RFUyIsImVuZCIsInZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUiLCJ0aW1lbGluZVZhbHVlIiwiZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIiLCJzbmFwVG9NYXJrcyIsImZyZWUiLCJfZmlsdGVyJHN5bmNUaW1lbGluZU0iLCJuZXdNb2RlIiwic3RhcnQiLCJpbnRlcnZhbEluZGV4IiwiY3VycmVudEluZGV4IiwibWV0YSIsInRhcmdldFRpbWVJbnRlcnZhbCIsIm5ld0luZGV4IiwiVElNRV9JTlRFUlZBTFNfT1JERVJFRCIsImhleFRpbGVJbnRlcnZhbCIsIkxheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwiLCJnZXREZWZhdWx0VGltZUZvcm1hdCIsInVwZGF0ZWRQbG90VHlwZSIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfdmFsdWUkY29uZmlnIiwiX3ZhbHVlJGNvbmZpZzIiLCJyZXBsYWNlZCIsImlzT2JqZWN0IiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmMzUiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwiY29tcG9zZV8iLCJhcHBseV8iLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwiX3NlcmlhbGl6ZWRTdGF0ZSRzcGxpIiwiX3JlZjM2IiwiYWNjdVN0YXRlIiwiX3JlZjM3IiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJnZXRDaGlsZERhdGFzZXRJZHMiLCJwcmVzZXJ2ZU9yZGVyIiwidG9NZXJnZVByb3BzIiwic2F2ZWRQcm9wcyIsInJlcGxhY2VkU3RhdGUiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIiLCJtZXJnZXJPcHRpb25zIiwicmVwbGFjZWRJdGVtIiwicmVwbGFjZVByb3BWYWx1ZUluU3RhdGUiLCJpdGVtIiwiX3JlZjM4IiwiY2hpbGREYXRhSWQiXSwic291cmNlcyI6WyIuLi9zcmMvdmlzLXN0YXRlLXVwZGF0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBiYm94IGZyb20gJ0B0dXJmL2Jib3gnO1xuaW1wb3J0IGNvcHkgZnJvbSAnY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgcGljayBmcm9tICdsb2Rhc2gvcGljayc7XG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gvdW5pcSc7XG5pbXBvcnQgeG9yIGZyb20gJ2xvZGFzaC94b3InO1xuaW1wb3J0IFRhc2ssIHtkaXNhYmxlU3RhY2tDYXB0dXJpbmcsIHdpdGhUYXNrfSBmcm9tICdyZWFjdC1wYWxtL3Rhc2tzJztcbi8vIFRhc2tzXG5pbXBvcnQge1xuICBERUxBWV9UQVNLLFxuICBBQ1RJT05fVEFTSyxcbiAgTE9BRF9GSUxFX1RBU0ssXG4gIFBST0NFU1NfRklMRV9EQVRBLFxuICBVTldSQVBfVEFTS1xufSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGFkZE5vdGlmaWNhdGlvbixcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIHNldEZpbHRlcixcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBmaXRCb3VuZHMgYXMgZml0TWFwQm91bmRzLFxuICBzZXRMb2FkaW5nSW5kaWNhdG9yLFxuICB0b2dnbGVMYXllckZvck1hcCxcbiAgYXBwbHlGaWx0ZXJDb25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuLy8gVXRpbHNcbmltcG9ydCB7XG4gIEZJTFRFUl9VUERBVEVSX1BST1BTLFxuICBhZGROZXdMYXllcnNUb1NwbGl0TWFwLFxuICBzbmFwVG9NYXJrcyxcbiAgYXBwbHlGaWx0ZXJGaWVsZE5hbWUsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIGFycmF5SW5zZXJ0LFxuICBjb21wdXRlU3BsaXRNYXBMYXllcnMsXG4gIGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4sXG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSxcbiAgZmlsdGVyRGF0YXNldENQVSxcbiAgZ2VuZXJhdGVQb2x5Z29uRmlsdGVyLFxuICBnZXREZWZhdWx0RmlsdGVyLFxuICBnZXRGaWx0ZXJJZEluRmVhdHVyZSxcbiAgZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyLFxuICBpc0luUmFuZ2UsXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1JnYkNvbG9yLFxuICBwYXJzZUZpZWxkVmFsdWUsXG4gIHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyxcbiAgc2V0LFxuICB1cGRhdGVGaWx0ZXJQbG90LFxuICByZW1vdmVGaWx0ZXJQbG90LFxuICBpc0xheWVyQW5pbWF0YWJsZSxcbiAgaXNTaWRlRmlsdGVyLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZ1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIHRvQXJyYXl9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbi8vIE1lcmdlcnNcbmltcG9ydCB7XG4gIEFOSU1BVElPTl9XSU5ET1csXG4gIEJBU0VfU1BFRUQsXG4gIENPTVBBUkVfVFlQRVMsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgRURJVE9SX01PREVTLFxuICBGSUxURVJfVFlQRVMsXG4gIEZJTFRFUl9WSUVXX1RZUEVTLFxuICBGUFMsXG4gIExJR0hUX0FORF9TSEFET1dfRUZGRUNULFxuICBNQVhfREVGQVVMVF9UT09MVElQUyxcbiAgUExPVF9UWVBFUyxcbiAgU09SVF9PUkRFUixcbiAgU1lOQ19USU1FTElORV9NT0RFUyxcbiAgQ0hBTk5FTF9TQ0FMRVMsXG4gIFNDQUxFX1RZUEVTXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TEFZRVJfSURfTEVOR1RILCBMYXllciwgTGF5ZXJDbGFzc2VzfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBhcHBseV8sXG4gIGNvbXBvc2VfLFxuICBmaWx0ZXJPdXRCeUlkLFxuICBtZXJnZV8sXG4gIHBpY2tfLFxuICByZW1vdmVFbGVtZW50QXRJbmRleCxcbiAgc3dhcF9cbn0gZnJvbSAnLi9jb21wb3Nlci1oZWxwZXJzJztcbmltcG9ydCB7aXNWYWxpZE1lcmdlciwgbWVyZ2VTdGF0ZUZyb21NZXJnZXJzfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7XG4gIFZJU19TVEFURV9NRVJHRVJTLFxuICBjcmVhdGVMYXllckZyb21Db25maWcsXG4gIHBhcnNlTGF5ZXJDb25maWcsXG4gIHNlcmlhbGl6ZUZpbHRlcixcbiAgc2VyaWFsaXplTGF5ZXIsXG4gIHNlcmlhbGl6ZVZpc1N0YXRlLFxuICB2YWxpZGF0ZUxheWVyV2l0aERhdGFcbn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcblxuaW1wb3J0IEtlcGxlckdMU2NoZW1hLCB7TWVyZ2VyLCBQb3N0TWVyZ2VyUGF5bG9hZCwgVmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5cbmltcG9ydCB7XG4gIEZpbHRlcixcbiAgSW50ZXJhY3Rpb25Db25maWcsXG4gIEFuaW1hdGlvbkNvbmZpZyxcbiAgRmlsdGVyQW5pbWF0aW9uQ29uZmlnLFxuICBFZGl0b3IsXG4gIEZpZWxkLFxuICBUaW1lUmFuZ2VGaWx0ZXJcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0xvYWRlcn0gZnJvbSAnQGxvYWRlcnMuZ2wvbG9hZGVyLXV0aWxzJztcblxuaW1wb3J0IHtcbiAgRGF0YXNldHMsXG4gIGFzc2lnbkdwdUNoYW5uZWwsXG4gIGNvcHlUYWJsZUFuZFVwZGF0ZSxcbiAgY3JlYXRlTmV3RGF0YUVudHJ5LFxuICBwaW5UYWJsZUNvbHVtbnMsXG4gIHNldEZpbHRlckdwdU1vZGUsXG4gIHNvcnREYXRhc2V0QnlDb2x1bW5cbn0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge2ZpbmRGaWVsZHNUb1Nob3d9IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuaW1wb3J0IHtjYWxjdWxhdGVMYXllckRhdGEsIGZpbmREZWZhdWx0TGF5ZXIsIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzfSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Z2V0UHJvcFZhbHVlVG9NZXJnZXIsIGhhc1Byb3BzVG9NZXJnZX0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtcbiAgZml4RWZmZWN0T3JkZXIsXG4gIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzLFxuICBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLFxuICBtZXJnZVRpbWVEb21haW5zLFxuICBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93LFxuICB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUsXG4gIGdldERlZmF1bHRUaW1lRm9ybWF0LFxuICBMYXllclRvRmlsdGVyVGltZUludGVydmFsLFxuICBUSU1FX0lOVEVSVkFMU19PUkRFUkVELFxuICBtZXJnZUZpbHRlckRvbWFpbixcbiAgaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge1BheWxvYWRBY3Rpb259IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG5pbXBvcnQge2ZpbmRNYXBCb3VuZHN9IGZyb20gJy4vZGF0YS11dGlscyc7XG5cbi8vIHJlYWN0LXBhbG1cbi8vIGRpc2FibGUgY2FwdHVyZSBleGNlcHRpb24gZm9yIHJlYWN0LXBhbG0gY2FsbCB0byB3aXRoVGFza1xuZGlzYWJsZVN0YWNrQ2FwdHVyaW5nKCk7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB2aXNTdGF0ZWAgcmVkdWNlci4gQ2FuIGJlIHVzZWQgaW4geW91ciByb290IHJlZHVjZXIgdG8gZGlyZWN0bHkgbW9kaWZ5IGtlcGxlci5nbCdzIHN0YXRlLlxuICogUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKlxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7dmlzU3RhdGVVcGRhdGVyc30gZnJvbSAna2VwbGVyLmdsL3JlZHVjZXJzJztcbiAqIC8vIFJvb3QgUmVkdWNlclxuICogY29uc3QgcmVkdWNlcnMgPSBjb21iaW5lUmVkdWNlcnMoe1xuICogIGtlcGxlckdsOiBrZXBsZXJHbFJlZHVjZXIsXG4gKiAgYXBwOiBhcHBSZWR1Y2VyXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBjb21wb3NlZFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICogIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAqICAgIGNhc2UgJ0NMSUNLX0JVVFRPTic6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgZm9vOiB7XG4gKiAgICAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbC5mb28sXG4gKiAgICAgICAgICAgICB2aXNTdGF0ZTogdmlzU3RhdGVVcGRhdGVycy5lbmxhcmdlRmlsdGVyVXBkYXRlcihcbiAqICAgICAgICAgICAgICAgc3RhdGUua2VwbGVyR2wuZm9vLnZpc1N0YXRlLFxuICogICAgICAgICAgICAgICB7aWR4OiAwfVxuICogICAgICAgICAgICAgKVxuICogICAgICAgICAgfVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVVcGRhdGVycyA9IG51bGw7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnOiBJbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgdG9vbHRpcDoge1xuICAgIGlkOiAndG9vbHRpcCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMudG9vbHRpcCcsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBjb25maWc6IHtcbiAgICAgIGZpZWxkc1RvU2hvdzoge30sXG4gICAgICBjb21wYXJlTW9kZTogZmFsc2UsXG4gICAgICBjb21wYXJlVHlwZTogQ09NUEFSRV9UWVBFUy5BQlNPTFVURVxuICAgIH1cbiAgfSxcbiAgZ2VvY29kZXI6IHtcbiAgICBpZDogJ2dlb2NvZGVyJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5nZW9jb2RlcicsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGxcbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAwLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZVN0ZXBzOiBudWxsLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJ1xuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG5cbiAgLy8gZmlsdGVyc1xuICBmaWx0ZXJzOiBbXSxcbiAgZmlsdGVyVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYSBjb2xsZWN0aW9uIG9mIG11bHRpcGxlIGRhdGFzZXRcbiAgZGF0YXNldHM6IHt9LFxuICBlZGl0aW5nRGF0YXNldDogdW5kZWZpbmVkLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICBpbnRlcmFjdGlvbkNvbmZpZzogZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IHt9LFxuXG4gIGxheWVyQmxlbmRpbmc6ICdub3JtYWwnLFxuICBvdmVybGF5QmxlbmRpbmc6ICdub3JtYWwnLFxuICBob3ZlckluZm86IHVuZGVmaW5lZCxcbiAgY2xpY2tlZDogdW5kZWZpbmVkLFxuICBtb3VzZVBvczoge30sXG4gIG1heERlZmF1bHRUb29sdGlwczogTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG5cbiAgLy8gdGhpcyBpcyB1c2VkIHdoZW4gdXNlciBzcGxpdCBtYXBzXG4gIHNwbGl0TWFwczogW1xuICAgIC8vIHRoaXMgd2lsbCBjb250YWluIGEgbGlzdCBvZiBvYmplY3RzIHRvXG4gICAgLy8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGxheWVyIGF2YWlsYWJpbGl0eSBhbmQgdmlzaWJpbGl0eSBmb3IgZWFjaCBtYXBcbiAgICAvLyBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgICBsYXllcnM6IHtsYXllcl9pZDogdHJ1ZSB8IGZhbHNlfVxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgXSxcbiAgc3BsaXRNYXBzVG9CZU1lcmdlZDogW10sXG4gIGlzTWVyZ2luZ0RhdGFzZXRzOiB7fSxcbiAgLy8gZGVmYXVsdHMgbGF5ZXIgY2xhc3Nlc1xuICBsYXllckNsYXNzZXM6IExheWVyQ2xhc3NlcyxcblxuICAvLyBkZWZhdWx0IGFuaW1hdGlvblxuICAvLyB0aW1lIGluIHVuaXggdGltZXN0YW1wIChtaWxsaXNlY29uZHMpICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVuaXggRXBvY2gpXG4gIGFuaW1hdGlvbkNvbmZpZzogREVGQVVMVF9BTklNQVRJT05fQ09ORklHLFxuXG4gIGVkaXRvcjogREVGQVVMVF9FRElUT1IsXG5cbiAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiB7fSxcblxuICBsb2FkZXJzOiBbXSxcbiAgbG9hZE9wdGlvbnM6IHt9LFxuXG4gIC8vIHZpc1N0YXRlTWVyZ2Vyc1xuICBtZXJnZXJzOiBWSVNfU1RBVEVfTUVSR0VSUyxcblxuICAvLyBrZXBsZXIgc2NoZW1hc1xuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hXG59O1xuXG50eXBlIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGUgPSB7XG4gIGxheWVyczogTGF5ZXJbXTtcbiAgbGF5ZXJEYXRhOiBhbnlbXTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIHdpdGggdXBkYXRlZCBsYXllciBhbmQgbGF5ZXJEYXRhXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhPFMgZXh0ZW5kcyBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlPihcbiAgc3RhdGU6IFMsXG4gIHtsYXllckRhdGEsIGxheWVyLCBpZHh9OiB7bGF5ZXJEYXRhPzogYW55OyBsYXllcjogTGF5ZXI7IGlkeDogbnVtYmVyfVxuKTogUyB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKChseXIsIGkpID0+IChpID09PSBpZHggPyBsYXllciA6IGx5cikpLFxuICAgIGxheWVyRGF0YTogbGF5ZXJEYXRhXG4gICAgICA/IHN0YXRlLmxheWVyRGF0YS5tYXAoKGQsIGkpID0+IChpID09PSBpZHggPyBsYXllckRhdGEgOiBkKSlcbiAgICAgIDogc3RhdGUubGF5ZXJEYXRhXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGxheWVyOiBMYXllcik6IFMge1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICAgID8gYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgICAgICA6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgIH07XG4gIH1cblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBvYmplY3RzIChvciBhcnJheXMpIGFuZCByZXR1cm5zIGEgbmV3IG9iamVjdCB3aXRoIG9ubHkgdGhlXG4gKiBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBjaGFuZ2VkIGJldHdlZW4gdGhlIHR3byBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBwaWNrQ2hhbmdlZFByb3BzPFQ+KHByZXY6IFQsIG5leHQ6IFQpOiBQYXJ0aWFsPFQ+IHtcbiAgY29uc3QgY2hhbmdlZFByb3BzOiBQYXJ0aWFsPFQ+ID0ge307XG4gIGNvbnN0IHBpY2tQcm9wc09mID0gb2JqID0+IHtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VkUHJvcHMsIGtleSkgJiZcbiAgICAgICAgIWlzRXF1YWwocHJldltrZXldLCBuZXh0W2tleV0pXG4gICAgICApIHtcbiAgICAgICAgY2hhbmdlZFByb3BzW2tleV0gPSBuZXh0W2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHBpY2tQcm9wc09mKHByZXYpO1xuICBwaWNrUHJvcHNPZihuZXh0KTtcbiAgcmV0dXJuIGNoYW5nZWRQcm9wcztcbn1cblxuY29uc3QgVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUyA9IFsnZmllbGQnLCAnc2NhbGUnLCAnZG9tYWluJywgJ2FnZ3JlZ2F0aW9uJ107XG5cbi8qKlxuICogQXBwbHkgbGF5ZXIgY29uZmlnXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5LCBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5TGF5ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcklkLCBuZXdMYXllckNvbmZpZywgbGF5ZXJJbmRleH0gPSBhY3Rpb247XG4gIGNvbnN0IG5ld1BhcnNlZExheWVyID1cbiAgICAvLyB3aWxsIG1vdmUgdmlzdWFsQ2hhbm5lbHMgdG8gdGhlIGNvbmZpZyBwcm9wXG4gICAgcGFyc2VMYXllckNvbmZpZyhzdGF0ZS5zY2hlbWEsIG5ld0xheWVyQ29uZmlnKTtcbiAgY29uc3Qgb2xkTGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICBpZiAoIW9sZExheWVyIHx8ICFuZXdQYXJzZWRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXJJbmRleCAhPT0gbnVsbCAmJiBsYXllckluZGV4ICE9PSB1bmRlZmluZWQgJiYgc3RhdGUubGF5ZXJzW2xheWVySW5kZXhdICE9PSBvbGRMYXllcikge1xuICAgIC8vIGxheWVySW5kZXggaXMgcHJvdmlkZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdGNoIHRoZSBvbGRMYXllclxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbbmV3UGFyc2VkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGlzIHZhbGlkIGFuZCBjb252ZXJ0IGl0IHRvIExheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIG5ld1BhcnNlZExheWVyLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICBpZiAoIW5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChuZXdMYXllci50eXBlICYmIG5ld0xheWVyLnR5cGUgIT09IG9sZExheWVyLnR5cGUpIHtcbiAgICBjb25zdCBvbGRMYXllckluZGV4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICAgIGlmIChvbGRMYXllckluZGV4ID49IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIobmV4dFN0YXRlLCBsYXllclR5cGVDaGFuZ2Uob2xkTGF5ZXIsIG5ld0xheWVyLnR5cGUpKTtcbiAgICAgIC8vIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIgY2hhbmdlcyB0aGUgaWQgb2YgdGhlIGxheWVyLCBzbyB3ZSBuZWVkIHRvIG9idGFpbiB0aGUgbmV3IGlkXG4gICAgICAvLyBidXQgZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIGxheWVyIHdhcyBub3QgcmVtb3ZlZFxuICAgICAgaWYgKG5leHRTdGF0ZS5sYXllcnMubGVuZ3RoID09PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVySWQgPSBuZXh0U3RhdGUubGF5ZXJzW29sZExheWVySW5kZXhdLmlkO1xuICAgICAgICBuZXh0U3RhdGUgPSBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgYXBwbHlMYXllckNvbmZpZyhuZXdMYXllcklkLCB7Li4ubmV3TGF5ZXJDb25maWcsIGlkOiBuZXdMYXllcklkfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIC8vIHNlcmlhbGl6ZUxheWVyKCkgbWlnaHQgcmV0dXJuIG51bGwgaWYgdGhlIG9sZCBsYXllciBpcyBub3QgdmFsaWQsXG4gIC8vIHdlIHNob3VsZCBzdGlsbCBhcHBseSB0aGUgY2hhbmdlcyBpbiB0aGF0IGNhc2VcbiAgY29uc3Qgc2VyaWFsaXplZE9sZExheWVyID0gc2VyaWFsaXplTGF5ZXIob2xkTGF5ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3TGF5ZXIgPSBzZXJpYWxpemVMYXllcihuZXdMYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHNlcmlhbGl6ZWRPbGRMYXllciwgc2VyaWFsaXplZE5ld0xheWVyKSkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRMYXllci5jb25maWcsIHNlcmlhbGl6ZWROZXdMYXllci5jb25maWcpO1xuXG4gICAgaWYgKCd2aXNDb25maWcnIGluIGNoYW5nZWQpIHtcbiAgICAgIGlmIChjaGFuZ2VkLnZpc0NvbmZpZykge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBjaGFuZ2VkLnZpc0NvbmZpZylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjaGFuZ2VkLnZpc0NvbmZpZztcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhvbGRMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsTmFtZSA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbE5hbWVdO1xuICAgICAgY29uc3QgY2hhbm5lbFByb3BOYW1lcyA9IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMubWFwKHByb3AgPT4gY2hhbm5lbFtwcm9wXSk7XG4gICAgICBpZiAoY2hhbm5lbFByb3BOYW1lcy5zb21lKHByb3AgPT4gcHJvcCBpbiBjaGFuZ2VkKSkge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UoXG4gICAgICAgICAgICBvbGRMYXllcixcbiAgICAgICAgICAgIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBjaGFubmVsUHJvcE5hbWVzKSxcbiAgICAgICAgICAgIGNoYW5uZWxOYW1lXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgY2hhbm5lbFByb3BOYW1lcykge1xuICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VkW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoY2hhbmdlZCkubGVuZ3RoID4gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBwaWNrKG5ld0xheWVyLmNvbmZpZywgT2JqZWN0LmtleXMoY2hhbmdlZCkpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVsYXllclZpc2liaWx0eShzdGF0ZTogVmlzU3RhdGUsIG5ld0xheWVyOiBMYXllciwgaXNWaXNpYmxlPzogYm9vbGVhbik6IFZpc1N0YXRlIHtcbiAgbGV0IG5ld1N0YXRlID0gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZShzdGF0ZSwgbmV3TGF5ZXIpO1xuICBjb25zdCBmaWx0ZXJJbmRleCA9IGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZSk7XG4gIGlmIChpc0xheWVyQW5pbWF0YWJsZShuZXdMYXllcikgJiYgZmlsdGVySW5kZXggIT09IC0xKSB7XG4gICAgLy8gaWYgbGF5ZXIgaXMgZ29pbmcgdG8gYmUgdmlzaWJsZSB3ZSBzeW5jIHdpdGggZmlsdGVyIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgb3RoZXIgYW5pbWF0YWJsZSBsYXllcnMgZXhpc3RzIGFuZCBhcmUgdmlzaWJsZVxuICAgIG5ld1N0YXRlID0gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICBlbmFibGU6IGlzVmlzaWJsZSA/IGlzVmlzaWJsZSA6IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycykubGVuZ3RoID4gMFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdDb25maWcpO1xuICBpZiAoXG4gICAgdHlwZW9mIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkID09PSAnc3RyaW5nJyAmJlxuICAgIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkICE9PSBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gICkge1xuICAgIGNvbnN0IHtkYXRhSWQsIC4uLnJlc3RDb25maWd9ID0gYWN0aW9uLm5ld0NvbmZpZztcbiAgICBjb25zdCBzdGF0ZVdpdGhEYXRhSWQgPSBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3Q29uZmlnOiB7ZGF0YUlkfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRMYXllciA9IHN0YXRlV2l0aERhdGFJZC5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgICByZXR1cm4gbmV4dExheWVyICYmIE9iamVjdC5rZXlzKHJlc3RDb25maWcpLmxlbmd0aFxuICAgICAgPyBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGVXaXRoRGF0YUlkLCB7b2xkTGF5ZXI6IG5leHRMYXllciwgbmV3Q29uZmlnOiByZXN0Q29uZmlnfSlcbiAgICAgIDogc3RhdGVXaXRoRGF0YUlkO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoYWN0aW9uLm5ld0NvbmZpZyk7XG5cbiAgbGV0IGxheWVyRGF0YTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuXG4gICAgY29uc3QgdXBkYXRlTGF5ZXJEYXRhUmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICBuZXdMYXllciA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllcjtcbiAgICBsYXllckRhdGEgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXJEYXRhO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmICgnaXNWaXNpYmxlJyBpbiBhY3Rpb24ubmV3Q29uZmlnKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGFjdGlvbi5uZXdDb25maWcuaXNWaXNpYmxlKTtcbiAgfVxuXG4gIGlmICgnY29sdW1ucycgaW4gYWN0aW9uLm5ld0NvbmZpZyAmJiBuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICAvLyBUT0RPOiBTaGFuLCBtYWtlIHRoZSBhbmltYXRpb24gY29uZmlnIGZ1bmN0aW9uIG1vcmUgcm9idXN0XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgIGxheWVyOiBuZXdMYXllcixcbiAgICBsYXllckRhdGEsXG4gICAgaWR4XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGFjdGlvbik6IFMge1xuICBjb25zdCB7b2xkTGF5ZXIsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBhbmltYXRpb246IHtcbiAgICAgIC4uLm9sZExheWVyLmNvbmZpZy5hbmltYXRpb24sXG4gICAgICBbcHJvcF06IHZhbHVlXG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaWR4XSk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWRcbiAqIGhhbmRsZXMgdHdvIGNhc2VzOlxuICogMSkgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGxvY2FsIFNwbGl0TWFwIGxheWVyICh2aXNTdGF0ZS5zcGxpdE1hcC5sYXllcnMpXG4gKiAyKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgZ2xvYmFsIGxheWVyICh2aXNTdGF0ZS5sYXllcnMpXG5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChkID0+IGQuaWQgPT09IGxheWVySWQpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAoc3BsaXRNYXBJZCkge1xuICAgIC8vIFtjYXNlIDFdOiB0b2dnbGUgbG9jYWwgbGF5ZXIgdmlzaWJpbGl0eSBmb3IgZWFjaCBTcGxpdE1hcFxuICAgIGNvbnN0IG1hcEluZGV4ID0gbmV3U3RhdGUuc3BsaXRNYXBzLmZpbmRJbmRleChzbSA9PiBzbS5pZCA9PT0gc3BsaXRNYXBJZCk7XG4gICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgLy8gMSkgaWYgdGhlIGxheWVyIGlzIGludmlzaWJsZSBnbG9iYWxseVxuICAgICAgLy8gLT4gc2V0IGdsb2JhbCB2aXNpYmlsaXR5IHRvIHRydWVcbiAgICAgIG5ld1N0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKG5ld1N0YXRlLCBsYXllckNvbmZpZ0NoYW5nZShsYXllciwge2lzVmlzaWJsZTogdHJ1ZX0pKTtcblxuICAgICAgLy8gLT4gc2V0IGxvY2FsIHZpc2liaWxpdHkgdG8gdHJ1ZSBhbmQgdGhlIGxvY2FsIHZpc2liaWxpdGllcyBvZiBhbGwgb3RoZXIgU3BsaXRNYXBzIHRvIGZhbHNlXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNtID0+XG4gICAgICAgICAgc20uaWQgIT09IHNwbGl0TWFwSWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gMikgZWxzZSB3aGVuIHRoZSBsYXllciBpcyB2aXNpYmxlIGdsb2JhbGx5XG4gICAgcmV0dXJuIHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlcihuZXdTdGF0ZSwgdG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBbY2FzZSAyXTogdG9nZ2xlIGdsb2JhbCBsYXllciB2aXNpYmlsaXR5XG4gICAgY29uc3QgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7aXNWaXNpYmxlfSk7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuXG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGlzVmlzaWJsZSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgICAgaWR4XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBpbmRleCBvZiB0aGUgZmlsdGVyIHN5bmNlZCB0byB0aW1lbGluZSBvciAtMVxuICovXG5mdW5jdGlvbiBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGU6IFZpc1N0YXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyBpc1ZhbGlkIGZsYWcgb2YgYSBsYXllci5cbiAqIFVwZGF0ZXMgaXNWaXNpYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBpc1ZhbGlkLlxuICogVHJpZ2dlcnMgdXBkYXRlIG9mIGRhdGEgZm9yIHRoZSBsYXllciBpbiBvcmRlciB0byBnZXQgZXJyb3JzIGFnYWluIGR1cmluZyBuZXh0IHVwZGF0ZSBpdGVyYXRpb24uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclNldElzVmFsaWRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyU2V0SXNWYWxpZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpc1ZhbGlkfSA9IGFjdGlvbjtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBsYXllclRvVXBkYXRlID0gc3RhdGUubGF5ZXJzW2lkeF07XG4gIGlmIChsYXllclRvVXBkYXRlKSB7XG4gICAgbGV0IG5ld0xheWVyO1xuICAgIGxldCBuZXdEYXRhID0gbnVsbDtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBUcmlnZ2VyIGRhdGEgdXBkYXRlIGluIG9yZGVyIHRvIHNob3cgZXJyb3JzIGFnYWluIGlmIHByZXNlbnQuXG4gICAgICBjb25zdCB7bGF5ZXIsIGxheWVyRGF0YX0gPSBjYWxjdWxhdGVMYXllckRhdGEobGF5ZXJUb1VwZGF0ZSwgc3RhdGUsIHVuZGVmaW5lZCk7XG4gICAgICBuZXdMYXllciA9IGxheWVyO1xuICAgICAgbmV3RGF0YSA9IGxheWVyRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSBsYXllclRvVXBkYXRlLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBuZXdMYXllci5pc1ZhbGlkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2lkeCwgbGF5ZXI6IG5ld0xheWVyLCBsYXllckRhdGE6IG5ld0RhdGF9KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKG5ld0ZpZWxkcywgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsID0gREVGQVVMVF9URVhUX0xBQkVMKSB7XG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBjb25zdCBjdXJyZW50RmllbGRzID0gdGV4dExhYmVsLm1hcCh0bCA9PiB0bC5maWVsZCAmJiB0bC5maWVsZC5uYW1lKS5maWx0ZXIoZCA9PiBkKTtcblxuICBjb25zdCBhZGRGaWVsZHMgPSBuZXdGaWVsZHMuZmlsdGVyKGYgPT4gIWN1cnJlbnRGaWVsZHMuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGNvbnN0IGRlbGV0ZUZpZWxkcyA9IGN1cnJlbnRGaWVsZHMuZmlsdGVyKGYgPT4gIW5ld0ZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGYpKTtcblxuICAvLyBkZWxldGVcbiAgbmV3VGV4dExhYmVsID0gbmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCAmJiAhZGVsZXRlRmllbGRzLmluY2x1ZGVzKHRsLmZpZWxkLm5hbWUpKTtcbiAgbmV3VGV4dExhYmVsID0gIW5ld1RleHRMYWJlbC5sZW5ndGggPyBbZGVmYXVsdFRleHRMYWJlbF0gOiBuZXdUZXh0TGFiZWw7XG5cbiAgLy8gYWRkXG4gIG5ld1RleHRMYWJlbCA9IFtcbiAgICAuLi5uZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkKSxcbiAgICAuLi5hZGRGaWVsZHMubWFwKGFmID0+ICh7XG4gICAgICAuLi5kZWZhdWx0VGV4dExhYmVsLFxuICAgICAgZmllbGQ6IGFmXG4gICAgfSkpXG4gIF07XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIHRleHRMYWJlbCkge1xuICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZXh0TGFiZWxbaWR4XSwgcHJvcCkpIHtcbiAgICByZXR1cm4gdGV4dExhYmVsO1xuICB9XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGlmIChwcm9wID09PSAnZmllbGQnICYmIHZhbHVlID09PSBudWxsICYmIHRleHRMYWJlbC5sZW5ndGggPiAxKSB7XG4gICAgLy8gcmVtb3ZlIGxhYmVsIHdoZW4gZmllbGQgdmFsdWUgaXMgc2V0IHRvIG51bGxcbiAgICBuZXdUZXh0TGFiZWwuc3BsaWNlKGlkeCwgMSk7XG4gIH0gZWxzZSBpZiAocHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAoKHRsLCBpKSA9PiAoaSA9PT0gaWR4ID8gey4uLnRsLCBbcHJvcF06IHZhbHVlfSA6IHRsKSk7XG4gIH1cblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpZHgsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3Qge3RleHRMYWJlbH0gPSBvbGRMYXllci5jb25maWc7XG5cbiAgLy8gd2hlbiBhZGRpbmcgYSBuZXcgZW1wdHkgdGV4dCBsYWJlbCxcbiAgLy8gcmVseSBvbiB0aGUgbGF5ZXIncyBkZWZhdWx0IGNvbmZpZywgb3IgdXNlIHRoZSBjb25zdGFudCBERUZBVUxUX1RFWFRfTEFCRUxcbiAgY29uc3QgZGVmYXVsdFRleHRMYWJlbCA9XG4gICAgb2xkTGF5ZXIuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHtkYXRhSWQ6ICcnfSk/LnRleHRMYWJlbD8uWzBdID8/IERFRkFVTFRfVEVYVF9MQUJFTDtcblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG4gIGlmICghdGV4dExhYmVsW2lkeF0gJiYgaWR4ID09PSB0ZXh0TGFiZWwubGVuZ3RoKSB7XG4gICAgLy8gaWYgaWR4IGlzIHNldCB0byBsZW5ndGgsIGFkZCBlbXB0eSB0ZXh0IGxhYmVsXG4gICAgbmV3VGV4dExhYmVsID0gWy4uLnRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbF07XG4gIH1cblxuICBpZiAoaWR4ID09PSAnYWxsJyAmJiBwcm9wID09PSAnZmllbGRzJykge1xuICAgIG5ld1RleHRMYWJlbCA9IGFkZE9yUmVtb3ZlVGV4dExhYmVscyh2YWx1ZSwgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgbmV3VGV4dExhYmVsKTtcbiAgfVxuICAvLyB1cGRhdGUgdGV4dCBsYWJlbCBwcm9wIGFuZCB2YWx1ZVxuICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnOiB7dGV4dExhYmVsOiBuZXdUZXh0TGFiZWx9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsYXllckNsYXNzZXMsIGxheWVyLCBzY2hlbWEpIHtcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihsYXllciwgc2NoZW1hKTtcbiAgcmV0dXJuIGxvYWRlZExheWVyXG4gICAgPyB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbG9hZGVkTGF5ZXIsIGxheWVyQ2xhc3Nlcywge1xuICAgICAgICBhbGxvd0VtcHR5Q29sdW1uOiB0cnVlXG4gICAgICB9KVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgY29uZmlnIGRhdGFJZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG9sZExheWVyOiBMYXllcjtcbiAgICBuZXdDb25maWc6IHtcbiAgICAgIGRhdGFJZDogc3RyaW5nO1xuICAgIH07XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWd9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkfSA9IG5ld0NvbmZpZztcblxuICBpZiAoIW9sZExheWVyIHx8ICFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZH0pO1xuXG4gIC8vIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgbGF5ZXIgaXMgbmV3ICh0eXBlOiBudWxsIGFuZCBubyBjb2x1bW5zKSBidXQgaXQncyBub3QgcmVhZHkgdG8gYmUgc2F2ZWRcbiAgaWYgKG5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YUlkXSxcbiAgICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICAgIG5ld0xheWVyLFxuICAgICAgc3RhdGUuc2NoZW1hXG4gICAgKTtcbiAgICAvLyBpZiBjYW50IHZhbGlkYXRlIGl0IHdpdGggZGF0YSBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIGNvbnN0IG9sZExheWVyVHlwZSA9IG9sZExheWVyLnR5cGU7XG4gICAgICBpZiAob2xkTGF5ZXJUeXBlKSB7XG4gICAgICAgIG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tvbGRMYXllclR5cGVdKHtkYXRhSWQsIGlkOiBvbGRMYXllci5pZH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IHZhbGlkYXRlZDtcbiAgICB9XG4gIH1cblxuICBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBpc1Zpc2libGU6IG9sZExheWVyLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgaXNDb25maWdBY3RpdmU6IHRydWVcbiAgfSk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCB1bmRlZmluZWQpO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEluaXRpYWxMYXllckNvbmZpZyhsYXllciwgZGF0YXNldHMsIGxheWVyQ2xhc3Nlcyk6IExheWVyIHtcbiAgbGV0IG5ld0xheWVyID0gbGF5ZXI7XG4gIGlmICghT2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aCkge1xuICAgIC8vIG5vIGRhdGEgaXMgbG9hZGVkXG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG4gIGlmICghbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIC8vIHNldCBsYXllciBkYXRhSWRcbiAgICBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWQ6IE9iamVjdC5rZXlzKGRhdGFzZXRzKVswXX0pO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG5cbiAgLy8gZmluZCBkZWZhdXQgbGF5ZXIgcHJvcHNcbiAgY29uc3QgcmVzdWx0ID1cbiAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIFtdKVxuICAgICAgOiB7cHJvcHM6IFtdfTtcblxuICAvLyBhbiBhcnJheSBvZiBwb3NzaWJsZSBwcm9wcywgdXNlIDFzdCBvbmVcbiAgY29uc3QgcHJvcHMgPSBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQgOiByZXN1bHQucHJvcHMgfHwgW107XG5cbiAgaWYgKHByb3BzLmxlbmd0aCkge1xuICAgIG5ld0xheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1tsYXllci50eXBlXSh7XG4gICAgICAuLi5wcm9wc1swXSxcbiAgICAgIGxhYmVsOiBuZXdMYXllci5jb25maWcubGFiZWwsXG4gICAgICBkYXRhSWQ6IG5ld0xheWVyLmNvbmZpZy5kYXRhSWQsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogbmV3TGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcgPT09ICdmdW5jdGlvbidcbiAgICA/IG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyhkYXRhc2V0KVxuICAgIDogbmV3TGF5ZXI7XG59XG4vKipcbiAqIFVwZGF0ZSBsYXllciB0eXBlLiBQcmV2aWV3cyBsYXllciBjb25maWcgd2lsbCBiZSBjb3BpZWQgaWYgYXBwbGljYWJsZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdUeXBlfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBvbGRJZCA9IG9sZExheWVyLmlkO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkSWQpO1xuXG4gIGlmICghc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgJHtuZXdUeXBlfSBpcyBub3QgYSB2YWxpZCBsYXllciB0eXBlYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0oe1xuICAgIC8vIGtlZXAgb2xkIGxheWVyIGxhYmxlIGFuZCBpc0NvbmZpZ0FjdGl2ZVxuICAgIGxhYmVsOiBvbGRMYXllci5jb25maWcubGFiZWwsXG4gICAgaXNDb25maWdBY3RpdmU6IG9sZExheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICBkYXRhSWQ6IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgfSk7XG5cbiAgaWYgKCFvbGRMYXllci50eXBlKSB7XG4gICAgLy8gaWYgc2V0dGluZyBsYXllciB0eXBlIG9uIGFuIGVtcHR5IGxheWVyXG4gICAgbmV3TGF5ZXIgPSBzZXRJbml0aWFsTGF5ZXJDb25maWcobmV3TGF5ZXIsIHN0YXRlLmRhdGFzZXRzLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIGdldCBhIG1pbnQgbGF5ZXIsIHdpdGggbmV3IGlkIGFuZCB0eXBlXG4gICAgLy8gYmVjYXVzZSBkZWNrLmdsIHVzZXMgaWQgdG8gbWF0Y2ggYmV0d2VlbiBuZXcgYW5kIG9sZCBsYXllci5cbiAgICAvLyBJZiB0eXBlIGhhcyBjaGFuZ2VkIGJ1dCBpZCBpcyB0aGUgc2FtZSwgaXQgd2lsbCBicmVha1xuXG4gICAgY29uc3QgZGVmYXVsdExheWVyUHJvcHMgPVxuICAgICAgdHlwZW9mIHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzKHN0YXRlLmRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdKVxuICAgICAgICA6IG51bGw7XG5cbiAgICBuZXdMYXllci5hc3NpZ25Db25maWdUb0xheWVyKFxuICAgICAgb2xkTGF5ZXIuY29uZmlnLFxuICAgICAgb2xkTGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MsXG4gICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgIGRlZmF1bHRMYXllclByb3BzXG4gICAgKTtcbiAgICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIH1cblxuICBjb25zdCB7Y2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvXG4gIH07XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCB8fCBvbGRMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICAvLyB1cGRhdGUgc3BsaXRNYXAgbGF5ZXIgaWRcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNldHRpbmdzID0+IHtcbiAgICAgICAgY29uc3Qge1tvbGRJZF06IG9sZExheWVyTWFwLCAuLi5vdGhlckxheWVyc30gPSBzZXR0aW5ncy5sYXllcnM7XG4gICAgICAgIHJldHVybiBvbGRJZCBpbiBzZXR0aW5ncy5sYXllcnNcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgIC4uLm90aGVyTGF5ZXJzLFxuICAgICAgICAgICAgICAgIFtsYXllci5pZF06IG9sZExheWVyTWFwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHNldHRpbmdzO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgLy8gdXBkYXRlIGxheWVyT3JkZXIgd2l0aCBuZXcgaWRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3U3RhdGUubGF5ZXJPcmRlci5tYXAobGF5ZXJJZCA9PlxuICAgICAgbGF5ZXJJZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllci5pZCA6IGxheWVySWRcbiAgICApXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB2aXN1YWwgY2hhbm5lbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnLCBuZXdWaXNDb25maWcsIGNoYW5uZWx9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcobmV3Q29uZmlnKTtcbiAgaWYgKG5ld1Zpc0NvbmZpZykgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllclZpc0NvbmZpZyhuZXdWaXNDb25maWcpO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsKTtcblxuICAvLyBjYWxsaW5nIHVwZGF0ZSBhbmltYXRpb24gZG9tYWluIGZpcnN0IHRvIG1lcmdlIGFsbCBsYXllciBhbmltYXRpb24gZG9tYWluXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4oc3RhdGUpO1xuXG4gIGNvbnN0IHZpc3VhbENoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgaWYgKHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSkge1xuICAgIC8vIGlmIGNvbG9yIGZpZWxkIGNoYW5nZWQsIHNldCBjdXN0b21CcmVha3MgdG8gZmFsc2VcbiAgICBuZXdMYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICBsYXllcnM6IHVwZGF0ZWRTdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gdXBkYXRlZFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHVwZGF0ZWRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcblxuICBpZiAoXG4gICAgdmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiZcbiAgICBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbD8uc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsICYmXG4gICAgIW5ld1Zpc0NvbmZpZ1xuICApIHtcbiAgICAvLyB3aGVuIHN3aXRjaGluZyB0byBjdXN0b21PcmRpbmFsIHNjYWxlLCBjcmVhdGUgYSBjdXN0b21QYWxldHRlIGluIGNvbG9yVUkgd2l0aCB1cGRhdGVkIGNvbG9yRG9tYWluXG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSh7XG4gICAgICBzY2FsZTogU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCxcbiAgICAgIGZpZWxkOiBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0sXG4gICAgICBvcmRpbmFsRG9tYWluOiBsYXllci5jb25maWdbbGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF0uZG9tYWluXSxcbiAgICAgIHJhbmdlOiBsYXllci5jb25maWcudmlzQ29uZmlnW3Zpc3VhbENoYW5uZWwucmFuZ2VdLFxuICAgICAgY29sb3JCcmVha3M6IG51bGxcbiAgICB9KTtcbiAgICAvLyB1cGRhdGUgY29sb3JSYW5nZSB3aXRoIG5ldyBjdXN0b21QYWxldHRlXG4gICAgbGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIHNob3dDb2xvckNoYXJ0OiB0cnVlLFxuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IHRydWVcbiAgICAgIH0sXG4gICAgICBjdXN0b21QYWxldHRlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSh1cGRhdGVkU3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld1Zpc0NvbmZpZyk7XG5cbiAgY29uc3QgbmV3VmlzQ29uZmlnID0ge1xuICAgIC4uLm9sZExheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgLi4uYWN0aW9uLm5ld1Zpc0NvbmZpZ1xuICB9O1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe3Zpc0NvbmZpZzogbmV3VmlzQ29uZmlnfSk7XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBzdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllcjogbmV3TGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvIGEgc3BlY2lmaWVkIHZhbHVlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIgPSA8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHt2YWx1ZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBTID0+IHtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWU7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGN1cnJlbnRUaW1lXG4gICAgfVxuICB9O1xuICAvLyB1cGRhdGUgYW5pbWF0aW9uIGNvbmZpZyBmb3IgZWFjaCBsYXllclxuICByZXR1cm4gc3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjdSwgbCkgPT4ge1xuICAgIGlmIChsLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCAmJiBsLnR5cGUgIT09ICd0cmlwJykge1xuICAgICAgcmV0dXJuIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcihhY2N1LCB7b2xkTGF5ZXI6IGwsIHByb3A6ICdjdXJyZW50VGltZScsIGN1cnJlbnRUaW1lfSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1O1xuICB9LCBuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIGFjdGlvbik7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBhbmltYXRpb24gd2luZG93XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge2lkLCBhbmltYXRpb25XaW5kb3d9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGlkKTtcblxuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgYW5pbWF0aW9uV2luZG93XG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgY29uc3QgbmV3U3luY1RpbWVsaW5lTW9kZSA9IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpO1xuXG4gIHJldHVybiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge2lkLCBtb2RlOiBuZXdTeW5jVGltZWxpbmVNb2RlfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmaWx0ZXJJZCwgbmV3RmlsdGVyfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIFNlcmlhbGl6ZSB0aGUgZmlsdGVycyB0byBvbmx5IGNvbXBhcmUgdGhlIHNhdmVkIHByb3BlcnRpZXNcbiAgY29uc3Qgc2VyaWFsaXplZE9sZEZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihvbGRGaWx0ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3RmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG5ld0ZpbHRlciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3RmlsdGVyIHx8IGlzRXF1YWwoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcikpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgYW55IGNoYW5nZXMgdG8gdGhlIGZpbHRlciwgYXBwbHkgdGhlbVxuICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKTtcbiAgZGVsZXRlIGNoYW5nZWRbJ2lkJ107IC8vIGlkIHNob3VsZCBub3QgYmUgY2hhbmdlZFxuXG4gIGNvbnN0IGZpbHRlckluZGV4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJbmRleCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoXG4gICAgc3RhdGUsXG4gICAgc2V0RmlsdGVyKGZpbHRlckluZGV4LCBPYmplY3Qua2V5cyhjaGFuZ2VkKSwgT2JqZWN0LnZhbHVlcyhjaGFuZ2VkKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHgsIHZhbHVlSW5kZXggPSAwfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgJiZcbiAgICAoIUFycmF5LmlzQXJyYXkoYWN0aW9uLnZhbHVlKSB8fCBhY3Rpb24ucHJvcC5sZW5ndGggIT09IGFjdGlvbi52YWx1ZS5sZW5ndGgpXG4gICkge1xuICAgIENvbnNvbGUuZXJyb3IoJ0V4cGVjdGluZyB2YWx1ZSB0byBiZSBhbiBhcnJheSBvZiB0aGUgc2FtZSBsZW5ndGgsIHNpbmNlIHByb3AgaXMgYW4gYXJyYXknKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gY29udmVydCBwcm9wIGFuZCB2YWx1ZSB0byBhcnJheVxuICBjb25zdCBwcm9wcyA9IHRvQXJyYXkoYWN0aW9uLnByb3ApO1xuICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSA/IHRvQXJyYXkoYWN0aW9uLnZhbHVlKSA6IFthY3Rpb24udmFsdWVdO1xuXG4gIGxldCBuZXdGaWx0ZXIgPSBvbGRGaWx0ZXI7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwcm9wID0gcHJvcHNbaV07XG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IHBhc3NpbmcgaW4gbmFtZSBhcyBhbiBhcnJheSBpbnRvIF91cGRhdGVGaWx0ZXJQcm9wLCBzbyB3ZSBjYWxsIGl0IG11bHRpcGxlIHRpbWVzIHdpdGggZWFjaCBuYW1lXG4gICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZXJlIGFzIHRvIHdoYXQgc2hvdWxkIGJlIGFkZHJlc3NlZFxuICAgIGxldCByZXM7XG4gICAgaWYgKHByb3AgPT09ICduYW1lJyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgcmVzID0gdmFsdWUucmVkdWNlKChhY2N1LCB2KSA9PiB7XG4gICAgICAgIHJldHVybiBfdXBkYXRlRmlsdGVyUHJvcChhY2N1LCBuZXdGaWx0ZXIsIHByb3AsIHYsIHZhbHVlSW5kZXgpO1xuICAgICAgfSwgbmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBfdXBkYXRlRmlsdGVyUHJvcChuZXdTdGF0ZSwgbmV3RmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgfVxuICAgIG5ld0ZpbHRlciA9IHJlcy5maWx0ZXI7XG4gICAgbmV3U3RhdGUgPSByZXMuc3RhdGU7XG4gICAgZGF0YXNldElkc1RvRmlsdGVyID0gZGF0YXNldElkc1RvRmlsdGVyLmNvbmNhdChyZXMuZGF0YXNldElkc1RvRmlsdGVyKTtcbiAgfVxuXG4gIGNvbnN0IGVubGFyZ2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCk7XG5cbiAgaWYgKGVubGFyZ2VkRmlsdGVyICYmIGVubGFyZ2VkRmlsdGVyLmlkICE9PSBuZXdGaWx0ZXIuaWQpIHtcbiAgICAvLyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgZW5sYXJnZWQgZmlsdGVyXG4gICAgbmV3RmlsdGVyLnZpZXcgPSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xuICB9XG5cbiAgLy8gc2F2ZSBuZXcgZmlsdGVycyB0byBuZXdTdGF0ZVxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBuZXdGaWx0ZXIsIG5ld1N0YXRlKTtcblxuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICB1bmlxKGRhdGFzZXRJZHNUb0ZpbHRlciksXG4gICAgbmV3U3RhdGUuZGF0YXNldHMsXG4gICAgbmV3U3RhdGUuZmlsdGVycyxcbiAgICBuZXdTdGF0ZS5sYXllcnNcbiAgKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcblxuICAvLyBuZWVkIHRvIHVwZGF0ZSBmaWx0ZXJQbG90IGFmdGVyIGZpbHRlciBEYXRhc2V0IGZvciBwbG90IHRvIHVwZGF0ZSBvbiBmaWx0ZXJlZCByZXN1bHRcbiAgY29uc3QgZmlsdGVyV2l0aFBMb3QgPSB1cGRhdGVGaWx0ZXJQbG90KG5ld1N0YXRlLmRhdGFzZXRzLCBuZXdTdGF0ZS5maWx0ZXJzW2lkeF0pO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIGZpbHRlcldpdGhQTG90LCBuZXdTdGF0ZSk7XG5cbiAgLy8gZGF0YUlkIGlzIGFuIGFycmF5XG4gIC8vIHBhc3Mgb25seSB0aGUgZGF0YXNldCB3ZSBuZWVkIHRvIHVwZGF0ZVxuICBuZXdTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YXNldElkc1RvRmlsdGVyLCBuZXdGaWx0ZXIpO1xuXG4gIC8vIElmIHRpbWUgcmFuZ2UgZmlsdGVyIHZhbHVlIHdhcyB1cGRhdGVkLCBhZGp1c3QgYW5pbWF0aW9uIGNvbmZpZ1xuICBpZiAobmV3RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgcHJvcHMuaW5jbHVkZXMoJ3ZhbHVlJykpIHtcbiAgICBuZXdTdGF0ZSA9IGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGFjdGlvbi5pZHgpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIGRhdGFzZXRzKSB7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG4gIGlmIChmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdKSB7XG4gICAgLy8gaWYgZGF0YUlkIGFscmVhZHkgZXhpc3RcbiAgICBuZXdGaWx0ZXIgPSBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpO1xuICB9XG4gIGlmICh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IG5ld0ZpbHRlci5kYXRhSWQuc2xpY2UoKTtcbiAgICBuZXh0VmFsdWVbdmFsdWVJbmRleF0gPSB2YWx1ZTtcbiAgICBuZXdGaWx0ZXIgPSBzZXQoWydkYXRhSWQnXSwgbmV4dFZhbHVlLCBuZXdGaWx0ZXIpO1xuICB9XG4gIHJldHVybiBuZXdGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykge1xuICBjb25zdCBkYXRhSWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuXG4gIGlmIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZUluZGV4ID09PSAwKSB7XG4gICAgLy8gaWYgcmVtb3ZlIHRoZSBvbmx5IGRhdGFJZCwgY3JlYXRlIGFuIGVtcHR5IGZpbHRlciBpbnN0ZWFkO1xuICAgIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtpZDogZmlsdGVyLmlkfSk7XG4gIH1cblxuICBpZiAoZGF0YUlkKSB7XG4gICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFJZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgWydkYXRhSWQnLCAnbmFtZScsICdmaWVsZElkeCcsICdncHVDaGFubmVsJ10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbcHJvcF0pKSB7XG4gICAgICBjb25zdCBuZXh0VmFsID0gZmlsdGVyW3Byb3BdLnNsaWNlKCk7XG4gICAgICBuZXh0VmFsLnNwbGljZSh2YWx1ZUluZGV4LCAxKTtcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIG5leHRWYWwsIGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2VGaWVsZERvbWFpbiBmb3IgdGhlIHJlbWFpbmluZyBmaWVsZHNcbiAgY29uc3QgZG9tYWluU3RlcHMgPSBtZXJnZUZpbHRlckRvbWFpbihmaWx0ZXIsIGRhdGFzZXRzKTtcblxuICBjb25zdCBuZXh0RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICAvLyB2YWx1ZTogbmV4dFZhbHVlLFxuICAgIC4uLihkb21haW5TdGVwcyA/IHtkb21haW46IGRvbWFpblN0ZXBzPy5kb21haW4sIHN0ZXA6IGRvbWFpblN0ZXBzPy5zdGVwfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV4dEZpbHRlci52YWx1ZSwgbmV4dEZpbHRlcik7XG4gIHJldHVybiB7XG4gICAgLi4ubmV4dEZpbHRlcixcbiAgICB2YWx1ZTogbmV4dFZhbHVlXG4gIH07XG59XG5cbi8qKiAqXG4gKiBVcGRhdGVzIGEgc2luZ2xlIHByb3BlcnR5IG9mIGEgZmlsdGVyXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJQcm9wKHN0YXRlLCBmaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4LCBkYXRhc2V0SWRzPykge1xuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBzd2l0Y2ggKHByb3ApIHtcbiAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBpZiB3ZSB1cGRhdGUgZmlsdGVyRGF0YUlkLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHR3byBjYXNlczpcbiAgICAvLyAxLiBkYXRhSWQgaXMgZW1wdHk6IGNyZWF0ZSBhIGRlZmF1bHQgZmlsdGVyXG4gICAgLy8gMi4gQWRkIGEgbmV3IGRhdGFzZXQgaWRcbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmRhdGFJZDoge1xuICAgICAgY29uc3Qgb2xkRGF0YUlkID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgZmlsdGVyID0gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1bmlxKFsuLi5vbGREYXRhSWQsIC4uLmZpbHRlci5kYXRhSWRdKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWU6IHtcbiAgICAgIC8vIHdlIGFyZSBzdXBwb3J0aW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uYWxpdHlcbiAgICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGZpbHRlciBuYW1lIHdpbGwgb25seSB1cGRhdGUgZmlsdGVyIG5hbWUgYnV0IGl0IHdvbid0IGhhdmUgc2lkZSBlZmZlY3RzXG4gICAgICAvLyB3ZSBhcmUgZ29ubmEgdXNlIHBhaXIgb2YgZGF0YXNldHMgYW5kIGZpZWxkSWR4IHRvIHVwZGF0ZSB0aGUgZmlsdGVyXG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleCxcbiAgICAgICAge21lcmdlRG9tYWluOiB2YWx1ZUluZGV4ID4gMH1cbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBpZiAoZmlsdGVyLmdwdSkge1xuICAgICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgICBmaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgLy8gcmVtb3ZlIGZpbHRlciBQbG90IGF0IGRhdGFzZXRJZCwgc28gaXQgd2lsbCBiZSByZWNhbGN1bGF0ZWRcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG5cbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICAvLyBvbmx5IGZpbHRlciB0aGUgY3VycmVudCBkYXRhc2V0XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmxheWVySWQ6IHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIG9ubHkgZGF0YXNldElkL3MgaWYgd2UgaGF2ZSBhZGRlZC9yZW1vdmVkIGxheWVyc1xuICAgICAgLy8gLSBjaGVjayBmb3IgbGF5ZXJJZCBjaGFuZ2VzIChYT1Igd29ya3MgYmVjYXVzZSBvZiBzdHJpbmcgdmFsdWVzKVxuICAgICAgLy8gaWYgbm8gZGlmZmVyZW5jZXMgYmV0d2VlbiBsYXllcklkcywgZG9uJ3QgZG8gYW55IGZpbHRlcmluZ1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgbGF5ZXJJZERpZmZlcmVuY2UgPSB4b3IodmFsdWUsIGZpbHRlci5sYXllcklkKTtcblxuICAgICAgY29uc3QgbGF5ZXJEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICBsYXllcklkRGlmZmVyZW5jZVxuICAgICAgICAgIC5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICAvLyBvbmx5IGZpbHRlciBkYXRhc2V0c0lkc1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gbGF5ZXJEYXRhSWRzO1xuXG4gICAgICAvLyBVcGRhdGUgbmV3RmlsdGVyIGRhdGFJZHNcbiAgICAgIGNvbnN0IG5ld0RhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIHZhbHVlXG4gICAgICAgICAgPy5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICBmaWx0ZXIgPSB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgbGF5ZXJJZDogdmFsdWUsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkc1xuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCB2YWx1ZSwgZmlsdGVyKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHtmaWx0ZXIsIGRhdGFzZXRJZHMsIGRhdGFzZXRJZHNUb0ZpbHRlciwgc3RhdGV9O1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclBsb3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIG5ld1Byb3B9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5maWx0ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzWyR7aWR4fV0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgZm9yIChjb25zdCBwcm9wIGluIG5ld1Byb3ApIHtcbiAgICBpZiAocHJvcCA9PT0gJ3Bsb3RUeXBlJykge1xuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKG5ld1Byb3AucGxvdFR5cGUpKShuZXdGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ3lBeGlzJykge1xuICAgICAgY29uc3QgY2hhcnRUeXBlID0gbmV3UHJvcC55QXhpcyA/IFBMT1RfVFlQRVMubGluZUNoYXJ0IDogUExPVF9UWVBFUy5oaXN0b2dyYW07XG5cbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyh7dHlwZTogY2hhcnRUeXBlfSkpKG1lcmdlXyhuZXdQcm9wKShuZXdGaWx0ZXIpKTtcbiAgICB9XG4gIH1cblxuICBuZXdGaWx0ZXIgPSB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXIpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBpZHggPyBuZXdGaWx0ZXIgOiBmKSlcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgIWFjdGlvbi5kYXRhSWRcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBpZDogYWN0aW9uLmlkfSldXG4gICAgICB9O1xuXG4vKipcbiAqIENyZWF0ZSBvciB1cGRhdGUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgZGF0YUlkLCBmaWVsZCwgdmFsdWV9ID0gYWN0aW9uO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbEluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBpZCk7XG4gIGxldCBmaWx0ZXJJbmRleCA9IG9yaWdpbmFsSW5kZXg7XG4gIGlmICghaWQgJiYgIWRhdGFJZCkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuICBpZiAob3JpZ2luYWxJbmRleCA8IDAgJiYgZGF0YUlkKSB7XG4gICAgbmV3U3RhdGUgPSBhZGRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkfSk7XG4gICAgaWYgKG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoICE9PSBzdGF0ZS5maWx0ZXJzLmxlbmd0aCArIDEpIHtcbiAgICAgIC8vIE5vIG5ldyBmaWx0ZXIgd2FzIGFkZGVkXG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIC8vIEhlcmUgd2UgYXJlIGFzc3VtaW5nIHRoYXQgdGhlIGZpbHRlciB3YXMgYWRkZWQgYXQgdGhlIGVuZFxuICAgIGZpbHRlckluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5sZW5ndGggLSAxO1xuICAgIG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdID0ge1xuICAgICAgLi4ubmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0sXG4gICAgICAuLi4oaWQgPyB7aWR9IDogbnVsbClcbiAgICB9O1xuICB9XG5cbiAgLy8gTm8gbmVlZCB0byB1cGRhdGUgdGhpcyBpZiBpdCdzIGEgbmV3bHkgY3JlYXRlZCBmaWx0ZXJcbiAgLy8gRmlyc3Qgd2UgbWFrZSBzdXJlIGFsbCB0aGUgZGF0YUlkcyB0aGF0IGZpZWxkcyByZWZlciB0byBhcmUgdXBkYXRlZFxuICBpZiAob3JpZ2luYWxJbmRleCA+PSAwICYmIGRhdGFJZCkge1xuICAgIC8vIElmIHRoZSBkYXRhSWQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggb25lIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShkYXRhSWQpID8gZGF0YUlkIDogW2RhdGFJZF0pLnJlZHVjZSgoYWNjdSwgZCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ2RhdGFJZCcsXG4gICAgICAgIHZhbHVlOiBkLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSBmaWVsZHNcbiAgaWYgKGZpZWxkKSB7XG4gICAgLy8gSWYgdGhlIGZpZWxkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIGZpZWxkIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShmaWVsZCkgPyBmaWVsZCA6IFtmaWVsZF0pLnJlZHVjZSgoYWNjdSwgZiwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ25hbWUnLFxuICAgICAgICB2YWx1ZTogZixcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgdmFsdWUgc2VwYXJhdGVseVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySW5kZXgsIHByb3A6ICd2YWx1ZScsIHZhbHVlfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBsYXllciBjb2xvciBwYWxldHRlIHVpIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b2xkTGF5ZXIsIHByb3AsIG5ld0NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9sZFZpeENvbmZpZyA9IG9sZExheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHByb3AsIG5ld0NvbmZpZyk7XG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGlmIChvbGRWaXhDb25maWcgIT09IG5ld1Zpc0NvbmZpZykge1xuICAgIHJldHVybiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3VmlzQ29uZmlnOiB7XG4gICAgICAgIFtwcm9wXTogbmV3VmlzQ29uZmlnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICB9O1xufTtcblxuLyoqXG4gKiBTdGFydCBhbmQgZW5kIGZpbHRlciBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgaXNBbmltYXRpbmc6ICFmLmlzQW5pbWF0aW5nfSA6IGYpKVxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWc6IEFuaW1hdGlvbkNvbmZpZyB8IEZpbHRlckFuaW1hdGlvbkNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gJ2RhdGFJZCcgaW4gY29uZmlnICYmICdhbmltYXRpb25XaW5kb3cnIGluIGNvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcbiAgaWYgKGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZykpIHtcbiAgICAvLyBGaW5kIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb25cbiAgICAvLyBBc3N1bWluZyB0aGVyZSdzIG9ubHkgb25lIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb24sIHNlZSBzZXRGaWx0ZXJWaWV3VXBkYXRlclxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+ICFpc1NpZGVGaWx0ZXIoZikpO1xuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IHsuLi5maWx0ZXIsIC4uLmNvbmZpZ307XG4gICAgcmV0dXJuIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihzdGF0ZSwgYXBwbHlGaWx0ZXJDb25maWcoZmlsdGVyLmlkLCBuZXdGaWx0ZXIpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBpc0FuaW1hdGluZzogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5pc0FuaW1hdGluZ1xuICB9XG59KTtcblxuLyoqXG4gKiBIaWRlIGFuZCBzaG93IGxheWVyIGFuaW1hdGlvbiBjb250cm9sXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGhpZGVDb250cm9sOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmhpZGVDb250cm9sXG4gIH1cbn0pO1xuXG4vKipcbiAqIENoYW5nZSBmaWx0ZXIgYW5pbWF0aW9uIHNwZWVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBzcGVlZDogYWN0aW9uLnNwZWVkfSA6IGYpKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGFuaW1hdGlvbiBzcGVlZCB3aXRoIHRoZSB2ZXJ0aWNhbCBzcGVlZCBzbGlkZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3NwZWVkfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBzcGVlZFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBsYXJnZXIgdGltZSBmaWx0ZXIgYXQgYm90dG9tIGZvciB0aW1lIHBsYXliYWNrIChhcHBseSB0byB0aW1lIGZpbHRlciBvbmx5KVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclZpZXdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclZpZXdVcGRhdGVyQWN0aW9uXG4pID0+IHtcbiAgY29uc3Qge3ZpZXcsIGlkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyA9IHZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PlxuICAgICAgaSA9PT0gaWR4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIDogc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGVcbiAgICAgICAgICB9XG4gICAgICAgIDogZlxuICAgIClcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBmaWx0ZXIgZmVhdHVyZSB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1thY3Rpb24uaWR4XTtcbiAgY29uc3QgaXNWaXNpYmxlID0gZ2V0KGZpbHRlciwgWyd2YWx1ZScsICdwcm9wZXJ0aWVzJywgJ2lzVmlzaWJsZSddKTtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICdlbmFibGVkJyxcbiAgICB2YWx1ZTogIWlzVmlzaWJsZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuaWQsIHtcbiAgICAgIGlzVmlzaWJsZTogIWlzVmlzaWJsZVxuICAgIH0pXG4gIH0pO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZHh9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkLCBpZH0gPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgY29uc3QgbmV3RmlsdGVycyA9IFtcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKDAsIGlkeCksXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZShpZHggKyAxLCBzdGF0ZS5maWx0ZXJzLmxlbmd0aClcbiAgXTtcblxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhkYXRhSWQsIHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXJzLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdFZGl0b3IgPVxuICAgIGdldEZpbHRlcklkSW5GZWF0dXJlKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmUpID09PSBpZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgICAgICB9XG4gICAgICA6IHN0YXRlLmVkaXRvcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJ10sIG5ld0ZpbHRlcnMsIHN0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZWRpdG9yJ10sIG5ld0VkaXRvciwgbmV3U3RhdGUpO1xuXG4gIHJldHVybiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFJZCwgdW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQgbmV3TGF5ZXI7XG4gIGxldCBuZXdMYXllckRhdGE7XG4gIGlmIChhY3Rpb24uY29uZmlnKSB7XG4gICAgbmV3TGF5ZXIgPSBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGUsIGFjdGlvbi5jb25maWcpO1xuICAgIGlmICghbmV3TGF5ZXIpIHtcbiAgICAgIENvbnNvbGUud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjcmVhdGUgbGF5ZXIgZnJvbSBjb25maWcsIGl0IHVzdWFsbHkgbWVhbnMgdGhlIGNvbmZpZyBpcyBub3QgYmUgaW4gY29ycmVjdCBmb3JtYXQnLFxuICAgICAgICBhY3Rpb24uY29uZmlnXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUpO1xuICAgIG5ld0xheWVyID0gcmVzdWx0LmxheWVyO1xuICAgIG5ld0xheWVyRGF0YSA9IHJlc3VsdC5sYXllckRhdGE7XG4gIH0gZWxzZSB7XG4gICAgLy8gY3JlYXRlIGFuIGVtcHR5IGxheWVyIHdpdGggYSBzcGVjaWZpYyBkYXRhc2V0IG9yIGEgZGVmYXVsdCBvbmVcbiAgICBjb25zdCBkZWZhdWx0RGF0YXNldCA9IGFjdGlvbi5kYXRhc2V0SWQgPz8gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpWzBdO1xuICAgIG5ld0xheWVyID0gbmV3IExheWVyKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlLFxuICAgICAgZGF0YUlkOiBkZWZhdWx0RGF0YXNldFxuICAgIH0pO1xuICAgIG5ld0xheWVyRGF0YSA9IHt9O1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgbmV3TGF5ZXJdLFxuICAgIGxheWVyRGF0YTogWy4uLnN0YXRlLmxheWVyRGF0YSwgbmV3TGF5ZXJEYXRhXSxcbiAgICAvLyBhZGQgbmV3IGxheWVyIGF0IHRoZSB0b3BcbiAgICBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWQsIC4uLnN0YXRlLmxheWVyT3JkZXJdLFxuICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVyKVxuICB9O1xuXG4gIGlmIChuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIHJlbW92ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyVXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgIC8vIGludmFsaWQgaW5kZXhcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGxheWVyIHdpdGggaW52YWxpZCBpZHxpZHggJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGNsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcbiAgY29uc3QgbGF5ZXJUb1JlbW92ZSA9IGxheWVyc1tpZHhdO1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IGZpbHRlck91dEJ5SWQobGF5ZXJUb1JlbW92ZS5pZCkobGF5ZXJzKSxcbiAgICBsYXllckRhdGE6IHJlbW92ZUVsZW1lbnRBdEluZGV4KGlkeCkobGF5ZXJEYXRhKSxcbiAgICBsYXllck9yZGVyOiBsYXllck9yZGVyLmZpbHRlcihsYXllcklkID0+IGxheWVySWQgIT09IGxheWVyVG9SZW1vdmUuaWQpLFxuICAgIGNsaWNrZWQ6IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvLFxuICAgIHNwbGl0TWFwczogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXJUb1JlbW92ZSlcbiAgICAvLyBUT0RPOiB1cGRhdGUgZmlsdGVycywgY3JlYXRlIGhlbHBlciB0byByZW1vdmUgbGF5ZXIgZm9ybSBmaWx0ZXIgKHJlbW92ZSBsYXllcmlkIGFuZCBkYXRhaWQpIGlmIG1hcHBlZFxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xufVxuXG4vKipcbiAqIFJlb3JkZXIgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJPcmRlcjogb3JkZXJcbn0pO1xuXG4vKipcbiAqIGR1cGxpY2F0ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCAhc3RhdGUubGF5ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyICR7aWR4fSBub3QgZm91bmQgaW4gbGF5ZXJPcmRlcmApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsID0gbGF5ZXJzW2lkeF07XG5cbiAgY29uc3Qgb3JpZ2luYWxMYXllck9yZGVySWR4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgobGlkID0+IGxpZCA9PT0gb3JpZ2luYWwuaWQpO1xuICBsZXQgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH1gO1xuICBsZXQgcG9zdGZpeCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgd2hpbGUgKGxheWVycy5maW5kKGwgPT4gbC5jb25maWcubGFiZWwgPT09IG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9ICR7Kytwb3N0Zml4fWA7XG4gIH1cblxuICAvLyBjb2xsZWN0IGxheWVyIGNvbmZpZyBmcm9tIG9yaWdpbmFsXG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIob3JpZ2luYWwsIHN0YXRlLnNjaGVtYSk7XG5cbiAgLy8gYXNzaWduIG5ldyBpZCBhbmQgbGFiZWwgdG8gY29waWVkIGxheWVyXG4gIGlmICghbG9hZGVkTGF5ZXI/LmNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsb2FkZWRMYXllci5jb25maWcubGFiZWwgPSBuZXdMYWJlbDtcbiAgbG9hZGVkTGF5ZXIuaWQgPSBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gIC8vIGFkZCBsYXllciB0byBzdGF0ZVxuICBsZXQgbmV4dFN0YXRlID0gYWRkTGF5ZXJVcGRhdGVyKHN0YXRlLCB7Y29uZmlnOiBsb2FkZWRMYXllcn0pO1xuICAvLyByZXRyaWV2ZSBuZXdseSBjcmVhdGVkIGxheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gbmV4dFN0YXRlLmxheWVyc1tuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCAtIDFdO1xuICAvLyB1cGRhdGUgbGF5ZXIgb3JkZXIgd2l0aCBuZXdMeWFlci5pZFxuICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlJbnNlcnQoXG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSwgbmV4dFN0YXRlLmxheWVyT3JkZXIubGVuZ3RoKSxcbiAgICBvcmlnaW5hbExheWVyT3JkZXJJZHgsXG4gICAgbmV3TGF5ZXIuaWRcbiAgKTtcblxuICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSlcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKGBDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSAke0xJR0hUX0FORF9TSEFET1dfRUZGRUNULm5hbWV9IGVmZmVjdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdCA9IGNyZWF0ZUVmZmVjdChhY3Rpb24uY29uZmlnKTtcblxuICAvLyBjb2xsYXBzZSBjb25maWd1cmF0b3JzIGZvciBvdGhlciBlZmZlY3RzXG4gIHN0YXRlLmVmZmVjdHMuZm9yRWFjaChlZmZlY3QgPT4gZWZmZWN0LnNldFByb3BzKHtpc0NvbmZpZ0FjdGl2ZTogZmFsc2V9KSk7XG5cbiAgY29uc3QgZWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzLCBuZXdFZmZlY3RdO1xuICBjb25zdCBlZmZlY3RPcmRlciA9IGZpeEVmZmVjdE9yZGVyKGVmZmVjdHMsIFtuZXdFZmZlY3QuaWQsIC4uLnN0YXRlLmVmZmVjdE9yZGVyXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIHJlbW92ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7ZWZmZWN0cywgZWZmZWN0T3JkZXJ9ID0gc3RhdGU7XG4gIGNvbnN0IGVmZmVjdFRvUmVtb3ZlID0gZWZmZWN0c1tpZHhdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZml4ZWQgaW4gdHNcbiAgICBlZmZlY3RzOiBmaWx0ZXJPdXRCeUlkKGVmZmVjdFRvUmVtb3ZlLmlkKShlZmZlY3RzKSxcbiAgICBlZmZlY3RPcmRlcjogZWZmZWN0T3JkZXIuZmlsdGVyKGVmZmVjdElkID0+IGVmZmVjdElkICE9PSBlZmZlY3RUb1JlbW92ZS5pZClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVvcmRlciBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZmZlY3RPcmRlcjogZml4RWZmZWN0T3JkZXIoc3RhdGUuZWZmZWN0cywgWy4uLm9yZGVyXSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcHJvcHN9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGVmZmVjdE9yZGVyID0gc3RhdGUuZWZmZWN0T3JkZXI7XG4gIGlmIChwcm9wcy5pZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmlkICE9PSBpZCkge1xuICAgIGNvbnN0IGlkeDIgPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IHByb3BzLmlkKTtcbiAgICBpZiAoaWR4MiA+PSAwKSB7XG4gICAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGV4aXN0aW5nIGVmZmVjdCBpZCAke2lkfWApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGVmZmVjdE9yZGVyID0gZWZmZWN0T3JkZXIubWFwKGVmZmVjdE9yZGVySWQgPT5cbiAgICAgIGVmZmVjdE9yZGVySWQgPT09IGlkID8gKHByb3BzLmlkIGFzIHN0cmluZykgOiBlZmZlY3RPcmRlcklkXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0c107XG4gIG5ld0VmZmVjdHNbaWR4XS5zZXRQcm9wcyhwcm9wcyk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGRhdGFzZXQgYW5kIGFsbCBsYXllcnMsIGZpbHRlcnMsIHRvb2x0aXAgY29uZmlncyB0aGF0IGJhc2VkIG9uIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRGF0YXNldFVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgLy8gZXh0cmFjdCBkYXRhc2V0IGtleVxuICBjb25zdCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIC8vIGNoZWNrIGlmIGRhdGFzZXQgaXMgcHJlc2VudFxuICBpZiAoIWRhdGFzZXRzW2RhdGFzZXRLZXldKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGxheWVycyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGF0YXNldHM6IHtbZGF0YXNldEtleV06IGRhdGFzZXQsIC4uLm5ld0RhdGFzZXRzfVxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmUgPSBsYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhc2V0S2V5KS5tYXAobCA9PiBsLmlkKTtcblxuICAvLyByZW1vdmUgbGF5ZXJzIGFuZCBkYXRhc2V0c1xuICBsZXQgbmV3U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHNcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGZpbHRlcnNcbiAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgbmV3U3RhdGUuZmlsdGVycykge1xuICAgIGNvbnN0IHZhbHVlSW5kZXggPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YXNldEtleSk7XG4gICAgaWYgKHZhbHVlSW5kZXggPj0gMCAmJiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIG9ubHkgcmVtb3ZlIG9uZSBzeW5jZWQgZGF0YXNldCBmcm9tIHRoZSBmaWx0ZXJcbiAgICAgIGZpbHRlcnMucHVzaChfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlSW5kZXggPCAwKSB7XG4gICAgICAvLyBsZWF2ZSB0aGUgZmlsdGVyIGFzIGlzXG4gICAgICBmaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBuZXdTdGF0ZSA9IHsuLi5uZXdTdGF0ZSwgZmlsdGVyc307XG5cbiAgcmV0dXJuIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcobmV3U3RhdGUsIHtkYXRhSWQ6IGRhdGFzZXRLZXl9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhzdGF0ZSwge2RhdGFJZH0pIHtcbiAgbGV0IHtpbnRlcmFjdGlvbkNvbmZpZ30gPSBzdGF0ZTtcbiAgY29uc3Qge3Rvb2x0aXB9ID0gaW50ZXJhY3Rpb25Db25maWc7XG4gIGlmICh0b29sdGlwKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0b29sdGlwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7W2RhdGFJZF06IGZpZWxkcywgLi4uZmllbGRzVG9TaG93fSA9IGNvbmZpZy5maWVsZHNUb1Nob3c7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHsuLi50b29sdGlwLCBjb25maWc6IHsuLi5jb25maWcsIGZpZWxkc1RvU2hvd319XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7Li4uc3RhdGUsIGludGVyYWN0aW9uQ29uZmlnfTtcbn1cbi8qKlxuICogdXBkYXRlIGxheWVyIGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyQmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiB1cGRhdGUgb3ZlcmxheSBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgb3ZlcmxheUJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93RGF0YXNldFRhYmxlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRpbmdEYXRhc2V0OiBhY3Rpb24uZGF0YUlkXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBjdXN0b20gY29sb3IgZm9yIGRhdGFzZXRzIGFuZCBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2NvbG9yOiBhY3Rpb24ubmV3Q29sb3J9fSk7XG59O1xuXG4vKipcbiAqIHJlc2V0IHZpc1N0YXRlIHRvIGluaXRpYWwgU3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZXNldE1hcENvbmZpZ1VwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gIC4uLnN0YXRlLmluaXRpYWxTdGF0ZSxcbiAgaW5pdGlhbFN0YXRlOiBzdGF0ZS5pbml0aWFsU3RhdGVcbn0pO1xuXG4vKipcbiAqIFByb3BhZ2F0ZSBgdmlzU3RhdGVgIHJlZHVjZXIgd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uLiBDdXJyZW50IGNvbmZpZyB3aWxsIGJlIG92ZXJyaWRlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Y29uZmlnID0ge30sIG9wdGlvbnMgPSB7fX1cbiAgfToge1xuICAgIHR5cGU/OiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVDRUlWRV9NQVBfQ09ORklHO1xuICAgIHBheWxvYWQ6IFJlY2VpdmVNYXBDb25maWdQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghY29uZmlnLnZpc1N0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2tlZXBFeGlzdGluZ0NvbmZpZ30gPSBvcHRpb25zO1xuXG4gIC8vIHJlc2V0IGNvbmZpZyBpZiBrZWVwRXhpc3RpbmdDb25maWcgaXMgZmFsc3lcbiAgbGV0IG1lcmdlZFN0YXRlID0gIWtlZXBFeGlzdGluZ0NvbmZpZyA/IHJlc2V0TWFwQ29uZmlnVXBkYXRlcihzdGF0ZSkgOiBzdGF0ZTtcbiAgZm9yIChjb25zdCBtZXJnZXIgb2Ygc3RhdGUubWVyZ2Vycykge1xuICAgIGlmIChpc1ZhbGlkTWVyZ2VyKG1lcmdlcikgJiYgaGFzUHJvcHNUb01lcmdlKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3ApKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlci5tZXJnZShcbiAgICAgICAgbWVyZ2VkU3RhdGUsXG4gICAgICAgIGdldFByb3BWYWx1ZVRvTWVyZ2VyKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3AsIG1lcmdlci50b01lcmdlUHJvcCksXG4gICAgICAgIC8vIGZyb21Db25maWdcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkU3RhdGU7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVySG92ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBob3ZlckluZm86IHtcbiAgICAvLyBkZWNrLmdsIGluZm8gaXMgbXV0YWJsZVxuICAgIC4uLmFjdGlvbi5pbmZvLFxuICAgIC4uLihOdW1iZXIuaXNGaW5pdGUoYWN0aW9uLm1hcEluZGV4KSA/IHttYXBJbmRleDogYWN0aW9uLm1hcEluZGV4fSA6IHt9KVxuICB9XG59KTtcblxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcblxuICBjb25zdCBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAuLi57W2NvbmZpZy5pZF06IGNvbmZpZ31cbiAgfTtcblxuICAvLyBEb24ndCBlbmFibGUgdG9vbHRpcCBhbmQgYnJ1c2ggYXQgdGhlIHNhbWUgdGltZVxuICAvLyBidXQgY29vcmRpbmF0ZXMgY2FuIGJlIHNob3duIGF0IGFsbCB0aW1lXG4gIGNvbnN0IGNvbnRyYWRpY3QgPSBbJ2JydXNoJywgJ3Rvb2x0aXAnXTtcblxuICBpZiAoXG4gICAgY29udHJhZGljdC5pbmNsdWRlcyhjb25maWcuaWQpICYmXG4gICAgY29uZmlnLmVuYWJsZWQgJiZcbiAgICAhc3RhdGUuaW50ZXJhY3Rpb25Db25maWdbY29uZmlnLmlkXS5lbmFibGVkXG4gICkge1xuICAgIC8vIG9ubHkgZW5hYmxlIG9uZSBpbnRlcmFjdGlvbiBhdCBhIHRpbWVcbiAgICBjb250cmFkaWN0LmZvckVhY2goayA9PiB7XG4gICAgICBpZiAoayAhPT0gY29uZmlnLmlkKSB7XG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnW2tdID0gey4uLmludGVyYWN0aW9uQ29uZmlnW2tdLCBlbmFibGVkOiBmYWxzZX07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICB9O1xuXG4gIGlmIChjb25maWcuaWQgPT09ICdnZW9jb2RlcicgJiYgIWNvbmZpZy5lbmFibGVkKSB7XG4gICAgcmV0dXJuIHJlbW92ZURhdGFzZXRVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkOiAnZ2VvY29kZXJfZGF0YXNldCd9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGNsaWNrIGV2ZW50IHdpdGggY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbW91c2VQb3M6IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgcGlubmVkOiBzdGF0ZS5tb3VzZVBvcy5waW5uZWQgPyBudWxsIDogY2xvbmVEZWVwKHN0YXRlLm1vdXNlUG9zKVxuICAgICAgfVxuICAgIDogc3RhdGUubW91c2VQb3MsXG4gIGNsaWNrZWQ6IGFjdGlvbi5pbmZvICYmIGFjdGlvbi5pbmZvLnBpY2tlZCA/IGFjdGlvbi5pbmZvIDogbnVsbFxufSk7XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgY2xpY2sgZXZlbnQsIHVuc2VsZWN0IGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbWFwQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25NYXBDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBudWxsXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIG1vdmUgZXZlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtb3VzZU1vdmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtldnR9OiBWaXNTdGF0ZUFjdGlvbnMuT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChPYmplY3QudmFsdWVzKHN0YXRlLmludGVyYWN0aW9uQ29uZmlnKS5zb21lKGNvbmZpZyA9PiBjb25maWcuZW5hYmxlZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBtb3VzZVBvczoge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LnBvaW50KSA/IHttb3VzZVBvc2l0aW9uOiBbLi4uZXZ0LnBvaW50XX0gOiB7fSksXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5sbmdMYXQpID8ge2Nvb3JkaW5hdGU6IFsuLi5ldnQubG5nTGF0XX0gOiB7fSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBmb3IgYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICBzdGF0ZS5zcGxpdE1hcHMgJiYgc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA9PT0gMFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgLy8gbWF5YmUgd2Ugc2hvdWxkIHVzZSBhbiBhcnJheSB0byBzdG9yZSBzdGF0ZSBmb3IgYSBzaW5nbGUgbWFwIGFzIHdlbGxcbiAgICAgICAgLy8gaWYgY3VycmVudCBtYXBzIGxlbmd0aCBpcyBlcXVhbCB0byAwIGl0IG1lYW5zIHRoYXQgd2UgYXJlIGFib3V0IHRvIHNwbGl0IHRoZSB2aWV3XG4gICAgICAgIHNwbGl0TWFwczogY29tcHV0ZVNwbGl0TWFwTGF5ZXJzKHN0YXRlLmxheWVycywge2R1cGxpY2F0ZTogZmFsc2V9KVxuICAgICAgfVxuICAgIDogY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgoc3RhdGUsIGFjdGlvbik7XG5cbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bWFwSW5kZXgsIGxheWVySWR9OiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtzcGxpdE1hcHN9ID0gc3RhdGU7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IHNwbGl0TWFwcy5tYXAoKHNtLCBpKSA9PlxuICAgICAgaSA9PT0gbWFwSW5kZXhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0sXG4gICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLmxheWVycyxcbiAgICAgICAgICAgICAgLy8gaWYgbGF5ZXJJZCBub3QgaW4gbGF5ZXJzLCBzZXQgaXQgdG8gdmlzaWJsZVxuICAgICAgICAgICAgICBbbGF5ZXJJZF06ICFzcGxpdE1hcHNbaV0ubGF5ZXJzW2xheWVySWRdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNtXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3QgdXBkYXRlVmlzRGF0YVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gZGF0YXNldHMgY2FuIGJlIGEgc2luZ2xlIGRhdGEgZW50cmllcyBvciBhbiBhcnJheSBvZiBtdWx0aXBsZSBkYXRhIGVudHJpZXNcbiAgY29uc3Qge2NvbmZpZywgb3B0aW9uc30gPSBhY3Rpb247XG5cbiAgLy8gYXBwbHkgY29uZmlnIGlmIHBhc3NlZCBmcm9tIGFjdGlvblxuICAvLyBUT0RPOiB3ZSBkb24ndCBoYW5kbGUgYXN5bmMgbWVyZ2VycyBoZXJlIHlldFxuICBsZXQgdXBkYXRlZFN0YXRlID0gY29uZmlnXG4gICAgPyByZWNlaXZlTWFwQ29uZmlnVXBkYXRlcihzdGF0ZSwge1xuICAgICAgICBwYXlsb2FkOiB7Y29uZmlnLCBvcHRpb25zfVxuICAgICAgfSlcbiAgICA6IHN0YXRlO1xuXG4gIGNvbnN0IGRhdGFzZXRzID0gdG9BcnJheShhY3Rpb24uZGF0YXNldHMpO1xuICBpZiAoIWRhdGFzZXRzLmxlbmd0aCkge1xuICAgIHJldHVybiB1cGRhdGVkU3RhdGU7XG4gIH1cblxuICBpZiAoZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgLy8gaW5kaWNhdGUgdGhhdCBkYXRhc2V0IHNldHVwIC8gbG9hZGluZyBpcyBpbiBwcm9ncmVzc1xuICAgIGNvbnN0IHNldElzTG9hZGluZ1Rhc2sgPSBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gc2V0TG9hZGluZ0luZGljYXRvcih7Y2hhbmdlOiAxfSk7XG4gICAgfSk7XG4gICAgdXBkYXRlZFN0YXRlID0gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBzZXRJc0xvYWRpbmdUYXNrKTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZURhdGFzZXRUYXNrczogVGFza1tdID0gW107XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrW10gPSBbXTtcblxuICBkYXRhc2V0cy5mb3JFYWNoKCh7aW5mbyA9IHt9LCAuLi5yZXN0fSwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeSh7aW5mbywgLi4ucmVzdH0sIHN0YXRlLmRhdGFzZXRzKTtcbiAgICBpZiAodGFzaykge1xuICAgICAgY3JlYXRlRGF0YXNldFRhc2tzLnB1c2godGFzayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnNgLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtZmFpbGVkLSR7ZGF0YXNldEluZGV4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgZGF0YXNldHNBbGxTZXR0bGVkVGFzayA9IGNyZWF0ZURhdGFzZXRUYXNrcy5sZW5ndGhcbiAgICA/IFRhc2suYWxsU2V0dGxlZChjcmVhdGVEYXRhc2V0VGFza3MpLm1hcChyZXN1bHRzID0+XG4gICAgICAgIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzKHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnM6IG9wdGlvbnN9KVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoZGF0YXNldHNBbGxTZXR0bGVkVGFzaykge1xuICAgIC8vIGluZGljYXRlIHRoYXQgc29tZXRoaW5nIGlzIGluIHByb2dyZXNzXG4gICAgY29uc3Qgc2V0SXNMb2FkaW5nVGFzayA9IEFDVElPTl9UQVNLKCkubWFwKCgpID0+IHtcbiAgICAgIHJldHVybiBzZXRMb2FkaW5nSW5kaWNhdG9yKHtjaGFuZ2U6IDF9KTtcbiAgICB9KTtcbiAgICB1cGRhdGVkU3RhdGUgPSB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIHNldElzTG9hZGluZ1Rhc2spO1xuICB9XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgW1xuICAgIC4uLihkYXRhc2V0c0FsbFNldHRsZWRUYXNrID8gW2RhdGFzZXRzQWxsU2V0dGxlZFRhc2tdIDogW10pLFxuICAgIC4uLm5vdGlmaWNhdGlvblRhc2tzXG4gIF0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFBheWxvYWRBY3Rpb248Q3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkPlxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBjb25zb2xlLmxvZygnY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyJywgYWN0aW9uLnBheWxvYWQpO1xuICBjb25zdCB7cmVzdWx0cywgYWRkVG9NYXBPcHRpb25zfSA9IGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IHJlc3VsdHMucmVkdWNlKChhY2N1LCByZXN1bHQpID0+IHtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXR1cm4gey4uLmFjY3UsIFtkYXRhc2V0LmlkXTogZGF0YXNldH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhhbmRsZSBjcmVhdGUgZGF0YXNldCBlcnJvclxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ2NyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlcjogZmFpbGVkJyxcbiAgICAgICAgcmVzdWx0LnJlYXNvbiB8fCAocmVzdWx0IGFzIGFueSkudmFsdWVcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG4gIH0sIHt9IGFzIERhdGFzZXRzKTtcbiAgLy8gc2F2ZSBuZXcgZGF0YXNldCBlbnRyeSB0byBzdGF0ZVxuICBjb25zdCBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGUsIG5ld0RhdGFFbnRyaWVzKVxuICB9O1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBsYXllck1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+IG0ud2FpdEZvckxheWVyRGF0YSk7XG4gIGNvbnN0IGRhdGFzZXRNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiAhbGF5ZXJNZXJnZXJzLmluY2x1ZGVzKG0pKTtcblxuICBjb25zdCBuZXdEYXRhSWRzID0gT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpO1xuICBjb25zdCBwb3N0TWVyZ2VyUGF5bG9hZCA9IHtcbiAgICBuZXdEYXRhSWRzLFxuICAgIG9wdGlvbnM6IGFkZFRvTWFwT3B0aW9ucyxcbiAgICBsYXllck1lcmdlcnNcbiAgfTtcblxuICBjb25zdCB1cGRhdGVkU3RhdGUgPSBhcHBseU1lcmdlcnNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7XG4gICAgbWVyZ2VyczogZGF0YXNldE1lcmdlcnMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgfSk7XG5cbiAgLy8gcmVzb2x2ZSBhY3RpdmUgbG9hZGluZyBpbml0aWF0ZWQgYnkgdXBkYXRlVmlzRGF0YVVwZGF0ZXJcbiAgY29uc3Qgc2V0SXNMb2FkaW5nVGFzayA9IEFDVElPTl9UQVNLKCkubWFwKCgpID0+IHtcbiAgICByZXR1cm4gc2V0TG9hZGluZ0luZGljYXRvcih7Y2hhbmdlOiAtMX0pO1xuICB9KTtcbiAgcmV0dXJuIHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgc2V0SXNMb2FkaW5nVGFzayk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmZ1bmN0aW9uIHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VkU3RhdGU6IFZpc1N0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtuZXdEYXRhSWRzLCBvcHRpb25zLCBsYXllck1lcmdlcnN9ID0gcG9zdE1lcmdlclBheWxvYWQ7XG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBtZXJnZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihmID0+XG4gICAgZi5kYXRhSWQuZmluZChmRGF0YUlkID0+IG5ld0RhdGFJZHMuaW5jbHVkZXMoZkRhdGFJZCkpXG4gICk7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJlZDogc3RyaW5nW10gPSB1bmlxKFxuICAgIG5ld0ZpbHRlcnMucmVkdWNlKChhY2N1LCBmKSA9PiBbLi4uYWNjdSwgLi4uZi5kYXRhSWRdLCBbXSBhcyBzdHJpbmdbXSlcbiAgKTtcbiAgY29uc3QgZGF0YUVtcHR5ID0gbmV3RGF0YUlkcy5sZW5ndGggPCAxO1xuXG4gIGxldCBuZXdMYXllcnMgPSAhZGF0YUVtcHR5XG4gICAgPyBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gbmV3RGF0YUlkcy5yZWR1Y2UoXG4gICAgKGFjY3UsIGlkKSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtpZF06IG1lcmdlZFN0YXRlLmRhdGFzZXRzW2lkXVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbiAgaWYgKCFuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5hdXRvQ3JlYXRlTGF5ZXJzICE9PSBmYWxzZSkge1xuICAgIC8vIG5vIGxheWVyIG1lcmdlZCwgZmluZCBkZWZhdWx0c1xuICAgIGNvbnN0IHJlc3VsdCA9IGFkZERlZmF1bHRMYXllcnMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHJlc3VsdC5zdGF0ZTtcbiAgICBuZXdMYXllcnMgPSByZXN1bHQubmV3TGF5ZXJzO1xuICB9XG5cbiAgaWYgKG1lcmdlZFN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAvLyBpZiBtYXAgaXMgc3BsaXQsIGFkZCBuZXcgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICAgIG5ld0xheWVycyA9IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgICBsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZClcbiAgICApO1xuICAgIG1lcmdlZFN0YXRlID0ge1xuICAgICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcnMpXG4gICAgfTtcbiAgfVxuXG4gIC8vIGlmIG5vIHRvb2x0aXBzIG1lcmdlZCBhZGQgZGVmYXVsdCB0b29sdGlwc1xuICBuZXdEYXRhSWRzLmZvckVhY2goZGF0YUlkID0+IHtcbiAgICBjb25zdCB0b29sdGlwRmllbGRzID0gbWVyZ2VkU3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgLy8gbG9hZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgZmFsc2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gcnVuIGFkZERlZmF1bHRUb29sdGlwcyB3aGVuIHRvb2x0aXBGaWVsZHMgaXMgZW1wdHlcbiAgICBpZiAoXG4gICAgICBvcHRpb25zPy5hdXRvQ3JlYXRlVG9vbHRpcHMgIT09IGZhbHNlICYmXG4gICAgICAoIUFycmF5LmlzQXJyYXkodG9vbHRpcEZpZWxkcykgfHwgIXRvb2x0aXBGaWVsZHMubGVuZ3RoKVxuICAgICkge1xuICAgICAgLy8gYWRkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyB0cnVlXG4gICAgICBtZXJnZWRTdGF0ZSA9IGFkZERlZmF1bHRUb29sdGlwcyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXNbZGF0YUlkXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1cGRhdGVkRGF0YXNldHMgPSBkYXRhRW1wdHlcbiAgICA/IE9iamVjdC5rZXlzKG1lcmdlZFN0YXRlLmRhdGFzZXRzKVxuICAgIDogdW5pcShPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcykuY29uY2F0KGRhdGFzZXRGaWx0ZXJlZCkpO1xuXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobWVyZ2VkU3RhdGUsIHVwZGF0ZWREYXRhc2V0cywgdW5kZWZpbmVkKTtcblxuICAvLyByZWdpc3RlciBsYXllciBhbmltYXRpb24gZG9tYWluLFxuICAvLyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlciBsYXllciBkYXRhIGlzIGNhbGN1bGF0ZWRcbiAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHVwZGF0ZWRTdGF0ZSk7XG5cbiAgLy8gdHJ5IHRvIHByb2Nlc3MgbGF5ZXJNZXJnZXJzIGFmdGVyIGRhdGFzZXQrZGF0YXNldE1lcmdlcnNcbiAgdXBkYXRlZFN0YXRlID1cbiAgICBsYXllck1lcmdlcnMgJiYgbGF5ZXJNZXJnZXJzLmxlbmd0aCA+IDBcbiAgICAgID8gYXBwbHlNZXJnZXJzVXBkYXRlcih1cGRhdGVkU3RhdGUsIHtcbiAgICAgICAgICBtZXJnZXJzOiBsYXllck1lcmdlcnMsXG4gICAgICAgICAgcG9zdE1lcmdlclBheWxvYWQ6IHsuLi5wb3N0TWVyZ2VyUGF5bG9hZCwgbGF5ZXJNZXJnZXJzOiBbXX1cbiAgICAgICAgfSlcbiAgICAgIDogdXBkYXRlZFN0YXRlO1xuXG4gIC8vIGNlbnRlciB0aGUgbWFwIG9uY2UgdGhlIGRhdGFzZXQgaXMgY3JlYXRlZFxuICBpZiAobmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuY2VudGVyTWFwKSB7XG4gICAgY29uc3QgYm91bmRzID0gZmluZE1hcEJvdW5kcyhuZXdMYXllcnMpO1xuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIGNvbnN0IGZpdEJvdW5kc1Rhc2sgPSBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBmaXRNYXBCb3VuZHMoYm91bmRzKTtcbiAgICAgIH0pO1xuICAgICAgdXBkYXRlZFN0YXRlID0gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBmaXRCb3VuZHNUYXNrKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXBkYXRlZFN0YXRlO1xufVxuXG4vKipcbiAqIFJlbmFtZSBhbiBleGlzdGluZyBkYXRhc2V0IGluIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW5hbWVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtsYWJlbDogYWN0aW9uLmxhYmVsfX0pO1xufVxuXG5jb25zdCBBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTID0gWydsYWJlbCcsICdjb2xvcicsICdtZXRhZGF0YSddO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBwcm9wZXJ0aWVzIGJlZm9yZSB1cGRhdGluZyB0aGUgZGF0YXNldC5cbiAqIE1ha2VzIHN1cmUgZWFjaCBwcm9wZXJ0eSBpcyBpbiB0aGUgYWxsb3dlZCBsaXN0XG4gKiBNYWtlcyBzdXJlIGNvbG9yIHZhbHVlIGlzIFJHQlxuICogUGVyZm9ybXMgZGVlcCBtZXJnZSB3aGVuIHVwZGF0aW5nIG1ldGFkYXRhXG4gKi9cbmNvbnN0IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzID0gKHByb3BzLCBkYXRhc2V0KSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gT2JqZWN0LmVudHJpZXMocHJvcHMpLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGVudHJ5O1xuICAgIC8vIGlzIGl0IGFsbG93ZWQgP1xuICAgIGlmICghQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGFyZSBhZGRpbmcgYSBjb2xvciBidXQgaXQgaXMgbm90IFJHQiB3ZSBkb24ndCBhY2NlcHQgdGhlIHZhbHVlXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSBhcyB3ZSBhZGQgbW9yZSBwcm9wcyB3ZSBzaG91bGQgY2hhbmdlIHRoaXMgaWYgaW50byBhIHN3aXRjaFxuICAgIGlmIChrZXkgPT09ICdjb2xvcicgJiYgIWlzUmdiQ29sb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGRvIHdlIG5lZWQgZGVlcCBtZXJnZSA/XG4gICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IGRlZXBtZXJnZShkYXRhc2V0W2tleV0gfHwge30sIHZhbHVlKSA6IHZhbHVlfTtcbiAgfSwge30pO1xuXG4gIHJldHVybiB2YWxpZGF0ZWRQcm9wcztcbn07XG5cbi8qKlxuICogVXBkYXRlIERhdGFzZXQgcHJvcHMgKGxhYmVsLCBjb2xvciwgbWV0YSkuIERvIG5vdCB1c2UgdG8gdXBkYXRlIGRhdGEgb3IgYW55IHJlbGF0ZWQgcHJvcGVydGllc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFByb3BzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBwcm9wc30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcbiAgY29uc3QgZXhpc3RpbmcgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMocHJvcHMsIGV4aXN0aW5nKTtcbiAgICAvLyAgdmFsaWRhdGUgcHJvcHM6IGp1c3QgY29sb3IgZm9yIG5vd1xuICAgIC8vICB3ZSBvbmx5IGFsbG93IGxhYmVsLCBjb2xvciBhbmQgbWV0YSB0byBiZSB1cGRhdGVkXG4gICAgLy8gY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIHNwZWNpZmljIG1hcCBjbG9zaW5nIGljb25cbiAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNsb3NlIHRoZSBzZWxlY3RlZCBtYXBcbiAqIGFuZCB3aWxsIG1lcmdlIHRoZSByZW1haW5pbmcgb25lIHdpdGggdGhlIGdsb2JhbCBzdGF0ZVxuICogVE9ETzogaSB0aGluayBpbiB0aGUgZnV0dXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbWVyZ2UgbWFwIGxheWVycyB3aXRoIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gYWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4PFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICAvLyByZXRyaWV2ZSBsYXllcnMgbWV0YSBkYXRhIGZyb20gdGhlIHJlbWFpbmluZyBtYXAgdGhhdCB3ZSBuZWVkIHRvIGtlZXBcbiAgY29uc3QgaW5kZXhUb1JldHJpZXZlID0gMSAtIGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBtYXBMYXllcnMgPSBzdGF0ZS5zcGxpdE1hcHNbaW5kZXhUb1JldHJpZXZlXT8ubGF5ZXJzO1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuXG4gIC8vIHVwZGF0ZSBsYXllciB2aXNpYmlsaXR5XG4gIGNvbnN0IG5ld0xheWVycyA9IGxheWVycy5tYXAobGF5ZXIgPT5cbiAgICBtYXBMYXllcnMgJiYgIW1hcExheWVyc1tsYXllci5pZF0gJiYgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgaXQgc2hvdWxkIGJlIGluVmlzaWJsZVxuICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogbGF5ZXJcbiAgKTtcblxuICAvLyBkZWxldGUgbWFwXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgc3BsaXRNYXBzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7ZmlsZXMsIG9uRmluaXNoID0gbG9hZEZpbGVzU3VjY2Vzc30gPSBhY3Rpb247XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IEFycmF5LmZyb20oZmlsZXMpLnJlZHVjZShcbiAgICAoYWNjdSwgZiwgaSkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGYsIGkpKShhY2N1KSxcbiAgICB7fVxuICApO1xuXG4gIGNvbnN0IGZpbGVMb2FkaW5nID0ge1xuICAgIGZpbGVDYWNoZTogW10sXG4gICAgZmlsZXNUb0xvYWQ6IGZpbGVzLFxuICAgIG9uRmluaXNoXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gbWVyZ2VfKHtmaWxlTG9hZGluZ1Byb2dyZXNzLCBmaWxlTG9hZGluZ30pKHN0YXRlKTtcblxuICByZXR1cm4gbG9hZE5leHRGaWxlVXBkYXRlcihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBTdWNlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlTmFtZSwgZmlsZUNhY2hlfSA9IGFjdGlvbjtcbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ0RvbmUnfVxuICB9KTtcblxuICAvLyBzYXZlIHByb2Nlc3NlZCBmaWxlIHRvIGZpbGVDYWNoZVxuICBjb25zdCBzdGF0ZVdpdGhDYWNoZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZUNhY2hlfSkpKHN0YXRlV2l0aFByb2dyZXNzKTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoQ2FjaGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufVxuXG4vLyB3aXRoVGFzazxUPihzdGF0ZTogVCwgdGFzazogYW55KTogVFxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5leHRGaWxlVXBkYXRlcihzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBbZmlsZSwgLi4ucmVtYWluaW5nRmlsZXNUb0xvYWRdID0gZmlsZXNUb0xvYWQ7XG5cbiAgLy8gc2F2ZSBmaWxlc1RvTG9hZCB0byBzdGF0ZVxuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVzVG9Mb2FkOiByZW1haW5pbmdGaWxlc1RvTG9hZH0pKShzdGF0ZSk7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMCwgbWVzc2FnZTogJ2xvYWRpbmcuLi4nfVxuICB9KTtcblxuICBjb25zdCB7bG9hZGVycywgbG9hZE9wdGlvbnN9ID0gc3RhdGU7XG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgZmlsZSxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyAmJiBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuZmlsZUNhY2hlLFxuICAgICAgbG9hZGVycyxcbiAgICAgIGxvYWRPcHRpb25zXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvYWRGaWxlVGFzayhmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnM6IExvYWRlcltdID0gW10sIGxvYWRPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIExPQURfRklMRV9UQVNLKHtmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnMsIGxvYWRPcHRpb25zfSkuYmltYXAoXG4gICAgLy8gcHJldHRpZXIgaWdub3JlXG4gICAgLy8gc3VjY2Vzc1xuICAgIGdlbiA9PlxuICAgICAgbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgIGdlbixcbiAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgb25GaW5pc2g6IHJlc3VsdCA9PlxuICAgICAgICAgIHByb2Nlc3NGaWxlQ29udGVudCh7XG4gICAgICAgICAgICBjb250ZW50OiByZXN1bHQsXG4gICAgICAgICAgICBmaWxlQ2FjaGVcbiAgICAgICAgICB9KVxuICAgICAgfSksXG5cbiAgICAvLyBlcnJvclxuICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZS5uYW1lLCBlcnIpXG4gICk7XG59XG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbnRlbnQsIGZpbGVDYWNoZX0gPSBhY3Rpb24ucGF5bG9hZDtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAncHJvY2Vzc2luZy4uLid9XG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudCwgZmlsZUNhY2hlfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gbG9hZEZpbGVTdGVwU3VjY2Vzcyh7ZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsIGZpbGVDYWNoZTogcmVzdWx0fSksXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGNvbnRlbnQuZmlsZU5hbWUsIGVycilcbiAgICApXG4gICk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVByb2dyZXNzKHByZXZQcm9ncmVzcyA9IHt9LCBwcm9ncmVzcykge1xuICAvLyBUaGlzIGhhcHBlbnMgd2hlbiByZWNlaXZpbmcgcXVlcnkgbWV0YWRhdGEgb3Igb3RoZXIgY2FzZXMgd2UgZG9uJ3RcbiAgLy8gaGF2ZSBhbiB1cGRhdGUgZm9yIHRoZSB1c2VyLlxuICBpZiAoIXByb2dyZXNzIHx8ICFwcm9ncmVzcy5wZXJjZW50KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwZXJjZW50OiBwcm9ncmVzcy5wZXJjZW50XG4gIH07XG59XG5cbi8qKlxuICogZ2V0cyBjYWxsZWQgd2l0aCBwYXlsb2FkID0gQXN5bmNHZW5lcmF0b3I8Pz8/PlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG5leHRGaWxlQmF0Y2hVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Z2VuLCBmaWxlTmFtZSwgcHJvZ3Jlc3MsIGFjY3VtdWxhdGVkLCBvbkZpbmlzaH1cbiAgfTogVmlzU3RhdGVBY3Rpb25zLk5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczogcGFyc2VQcm9ncmVzcyhzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzW2ZpbGVOYW1lXSwgcHJvZ3Jlc3MpXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhzdGF0ZVdpdGhQcm9ncmVzcywgW1xuICAgIC4uLihnZXRBcHBsaWNhdGlvbkNvbmZpZygpLnVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nICYmXG4gICAgZmlsZU5hbWUuZW5kc1dpdGgoJ2Fycm93JykgJiZcbiAgICBhY2N1bXVsYXRlZD8uZGF0YT8ubGVuZ3RoID4gMFxuICAgICAgPyBbXG4gICAgICAgICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQ6IGFjY3VtdWxhdGVkLCBmaWxlQ2FjaGU6IFtdfSkuYmltYXAoXG4gICAgICAgICAgICByZXN1bHQgPT4gbG9hZEZpbGVzU3VjY2VzcyhyZXN1bHQpLFxuICAgICAgICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgOiBbXSksXG4gICAgVU5XUkFQX1RBU0soZ2VuLm5leHQoKSkuYmltYXAoXG4gICAgICAoe3ZhbHVlLCBkb25lfSkgPT4ge1xuICAgICAgICByZXR1cm4gZG9uZVxuICAgICAgICAgID8gb25GaW5pc2goYWNjdW11bGF0ZWQpXG4gICAgICAgICAgOiBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgICAgICAgZ2VuLFxuICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHZhbHVlLnByb2dyZXNzLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlZDogdmFsdWUsXG4gICAgICAgICAgICAgIG9uRmluaXNoXG4gICAgICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICBdKTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsb2FkaW5nIGZpbGUgZXJyb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNFcnJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZmlsZU5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyB1cGRhdGUgdWkgd2l0aCBlcnJvciBtZXNzYWdlXG4gIENvbnNvbGUud2FybihlcnJvcik7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaCwgZmlsZUNhY2hlfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtlcnJvcn1cbiAgfSk7XG5cbiAgLy8ga2ljayBvZmYgbmV4dCBmaWxlIG9yIGZpbmlzaFxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgbmV4dFN0YXRlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn07XG5cbi8qKlxuICogV2hlbiBzZWxlY3QgZGF0YXNldCBmb3IgZXhwb3J0LCBhcHBseSBjcHUgZmlsdGVyIHRvIHNlbGVjdGVkIGRhdGFzZXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseUNQVUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5BcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYXBwbHkgY3B1RmlsdGVyXG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2N1LCBpZCkgPT4gZmlsdGVyRGF0YXNldENQVShhY2N1LCBpZCksIHN0YXRlKTtcbn07XG5cbi8qKlxuICogVXNlciBpbnB1dCB0byB1cGRhdGUgdGhlIGluZm8gb2YgdGhlIG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcEluZm9VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldE1hcEluZm9VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwSW5mbzoge1xuICAgIC4uLnN0YXRlLm1hcEluZm8sXG4gICAgLi4uYWN0aW9uLmluZm9cbiAgfVxufSk7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgQWxsIGxheWVyIGRvbWFpbiBhbmQgbGF5ZXIgZGF0YSBvZiBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdExheWVycyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhc2V0czogRGF0YXNldHNcbik6IHtzdGF0ZTogVmlzU3RhdGU7IG5ld0xheWVyczogTGF5ZXJbXX0ge1xuICBjb25zdCBlbXB0eTogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkZWZhdWx0TGF5ZXJzID0gT2JqZWN0LnZhbHVlcyhkYXRhc2V0cykucmVkdWNlKChhY2N1OiBMYXllcltdLCBkYXRhc2V0KSA9PiB7XG4gICAgY29uc3QgZm91bmRMYXllcnMgPSBmaW5kRGVmYXVsdExheWVyKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIGZvdW5kTGF5ZXJzICYmIGZvdW5kTGF5ZXJzLmxlbmd0aCA/IGFjY3UuY29uY2F0KGZvdW5kTGF5ZXJzKSA6IGFjY3U7XG4gIH0sIGVtcHR5KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgLi4uZGVmYXVsdExheWVyc10sXG4gICAgICBsYXllck9yZGVyOiBbXG4gICAgICAgIC8vIHB1dCBuZXcgbGF5ZXJzIG9uIHRvcCBvZiBvbGQgb25lcyBpbiByZXZlcnNlXG4gICAgICAgIC4uLmdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGRlZmF1bHRMYXllcnMpLFxuICAgICAgICAuLi5zdGF0ZS5sYXllck9yZGVyXG4gICAgICBdXG4gICAgfSxcbiAgICBuZXdMYXllcnM6IGRlZmF1bHRMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBoZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBkZWZhdWx0IHRvb2x0aXBzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRUb29sdGlwcyhzdGF0ZSwgZGF0YXNldCkge1xuICBjb25zdCB0b29sdGlwRmllbGRzID0gZmluZEZpZWxkc1RvU2hvdyh7XG4gICAgLi4uZGF0YXNldCxcbiAgICBtYXhEZWZhdWx0VG9vbHRpcHM6IHN0YXRlLm1heERlZmF1bHRUb29sdGlwc1xuICB9KTtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdyxcbiAgICAuLi50b29sdGlwRmllbGRzXG4gIH07XG5cbiAgcmV0dXJuIHNldChbJ2ludGVyYWN0aW9uQ29uZmlnJywgJ3Rvb2x0aXAnLCAnY29uZmlnJywgJ2ZpZWxkc1RvU2hvdyddLCBtZXJnZWQsIHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSB7XG4gIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5uYW1lIHx8IGBVbnRpdGxlZCBGaWxlICR7aW5kZXh9YDtcbiAgcmV0dXJuIHtcbiAgICBbZmlsZU5hbWVdOiB7XG4gICAgICAvLyBwZXJjZW50IG9mIGN1cnJlbnQgZmlsZVxuICAgICAgcGVyY2VudDogMCxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgZmlsZU5hbWUsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7ZmlsZU5hbWUsIHByb2dyZXNzfSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHJldHVybiBwaWNrXygnZmlsZUxvYWRpbmdQcm9ncmVzcycpKHBpY2tfKGZpbGVOYW1lKShtZXJnZV8ocHJvZ3Jlc3MpKSkoc3RhdGUpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIGxheWVyIGRvbWFpbnMgZm9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGE8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGRhdGFJZDogc3RyaW5nIHwgc3RyaW5nW10sXG4gIHVwZGF0ZWRGaWx0ZXI/OiBGaWx0ZXJcbik6IFMge1xuICBjb25zdCBkYXRhSWRzID0gdHlwZW9mIGRhdGFJZCA9PT0gJ3N0cmluZycgPyBbZGF0YUlkXSA6IGRhdGFJZDtcbiAgY29uc3QgbmV3TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IG5ld0xheWVyRGF0YTogYW55W10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaCgob2xkTGF5ZXIsIGkpID0+IHtcbiAgICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCAmJiBkYXRhSWRzLmluY2x1ZGVzKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAvLyBObyBuZWVkIHRvIHJlY2FsY3VsYXRlIGxheWVyIGRvbWFpbiBpZiBmaWx0ZXIgaGFzIGZpeGVkIGRvbWFpblxuICAgICAgY29uc3QgbmV3TGF5ZXIgPVxuICAgICAgICB1cGRhdGVkRmlsdGVyICYmIHVwZGF0ZWRGaWx0ZXIuZml4ZWREb21haW5cbiAgICAgICAgICA/IG9sZExheWVyXG4gICAgICAgICAgOiBvbGRMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cywgdXBkYXRlZEZpbHRlcik7XG5cbiAgICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpXSk7XG5cbiAgICAgIG5ld0xheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKGxheWVyRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVycy5wdXNoKG9sZExheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKHN0YXRlLmxheWVyRGF0YVtpXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllckRhdGE6IG5ld0xheWVyRGF0YVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTKTogUyB7XG4gIC8vIG1lcmdlIGFsbCBhbmltYXRhYmxlIGxheWVyIGRvbWFpbiBhbmQgdXBkYXRlIGdsb2JhbCBjb25maWdcbiAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIGRvbWFpbjogbnVsbCxcbiAgICAgICAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICAgICAgICB0aW1lU3RlcHM6IG51bGwsXG4gICAgICAgIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyRG9tYWlucyA9IGFuaW1hdGFibGVMYXllcnMubWFwKGwgPT4gbC5jb25maWcuYW5pbWF0aW9uLmRvbWFpbiB8fCBbXSk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbWVyZ2VkRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhsYXllckRvbWFpbnMpO1xuICBjb25zdCBkZWZhdWx0VGltZUZvcm1hdCA9IGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihtZXJnZWREb21haW4pO1xuXG4gIC8vIG1lcmdlIHRpbWVTdGVwc1xuICBsZXQgbWVyZ2VkVGltZVN0ZXBzOiBudW1iZXJbXSB8IG51bGwgPSB1bmlxPG51bWJlcj4oXG4gICAgYW5pbWF0YWJsZUxheWVycy5yZWR1Y2UoKGFjY3UsIGxheWVyKSA9PiB7XG4gICAgICBhY2N1LnB1c2goLi4uKGxheWVyLmNvbmZpZy5hbmltYXRpb24udGltZVN0ZXBzIHx8IFtdKSk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9LCBbXSlcbiAgKS5zb3J0KCk7XG5cbiAgbWVyZ2VkVGltZVN0ZXBzID0gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCA/IG1lcmdlZFRpbWVTdGVwcyA6IG51bGw7XG5cbiAgLy8gVE9ETzogYmV0dGVyIGhhbmRsaW5nIG9mIGR1cmF0aW9uIGNhbGN1bGF0aW9uXG4gIGNvbnN0IGR1cmF0aW9uID0gbWVyZ2VkVGltZVN0ZXBzXG4gICAgPyAoQkFTRV9TUEVFRCAqICgxMDAwIC8gRlBTKSkgLyBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoIC8gKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5zcGVlZCB8fCAxKVxuICAgIDogbnVsbDtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBkb21haW46IG1lcmdlZERvbWFpbixcbiAgICAgIGRlZmF1bHRUaW1lRm9ybWF0LFxuICAgICAgZHVyYXRpb24sXG4gICAgICB0aW1lU3RlcHM6IG1lcmdlZFRpbWVTdGVwc1xuICAgIH1cbiAgfTtcblxuICAvLyByZXNldCBjdXJyZW50VGltZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gIGNvbnN0IHN5bmNlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnM/LmZpbmQoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSBhc1xuICAgIHwgVGltZVJhbmdlRmlsdGVyXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgLy8gaWYgc3luY2VkIGZpbHRlciBleGlzdCB3ZWUgbmVlZCB0byBtZXJnZSBhbmltYXRpb25Db25maWcgYW5kIGZpbHRlciBkb21haW5zXG4gIC8vIGFuZCB2YWxpZGF0ZSB0aGUgY3VycmVudCB0aW1lIGFnYWluc3QgdGhlIG5ldyBtZXJnZWQgZG9tYWluXG4gIGNvbnN0IG5ld0FuaW1hdGlvbkRvbWFpbiA9IHN5bmNlZEZpbHRlclxuICAgID8gbWVyZ2VUaW1lRG9tYWlucyhbbWVyZ2VkRG9tYWluLCBzeW5jZWRGaWx0ZXIuZG9tYWluXSlcbiAgICA6IG1lcmdlZERvbWFpbjtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBpc0luUmFuZ2Uoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lLCBuZXdBbmltYXRpb25Eb21haW4pXG4gICAgPyBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWVcbiAgICA6IG5ld0FuaW1hdGlvbkRvbWFpblswXTtcblxuICBpZiAoY3VycmVudFRpbWUgIT09IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSkge1xuICAgIC8vIGlmIGN1cnJlbnRUaW1lIGNoYW5nZWQsIG5lZWQgdG8gY2FsbCBhbmltYXRpb25UaW1lVXBkYXRlciB0byByZSBjYWxsIGZvcm1hdExheWVyRGF0YVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5leHRTdGF0ZSwge3ZhbHVlOiBjdXJyZW50VGltZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIHN0YXR1cyBvZiB0aGUgZWRpdG9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0RWRpdG9yTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZGl0b3I6IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgbW9kZSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfVxufSk7XG5cbi8vIGNvbnN0IGZlYXR1cmVUb0ZpbHRlclZhbHVlID0gKGZlYXR1cmUpID0+ICh7Li4uZmVhdHVyZSwgaWQ6IGZlYXR1cmUuaWR9KTtcbi8qKlxuICogVXBkYXRlIGVkaXRvciBmZWF0dXJlc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZlYXR1cmVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZXMgPSBbXX06IFZpc1N0YXRlQWN0aW9ucy5TZXRGZWF0dXJlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbGFzdEZlYXR1cmUgPSBmZWF0dXJlcy5sZW5ndGggJiYgZmVhdHVyZXNbZmVhdHVyZXMubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAvLyBvbmx5IHNhdmUgbm9uZSBmaWx0ZXIgZmVhdHVyZXMgdG8gZWRpdG9yXG4gICAgICBmZWF0dXJlczogZmVhdHVyZXMuZmlsdGVyKGYgPT4gIWdldEZpbHRlcklkSW5GZWF0dXJlKGYpKSxcbiAgICAgIG1vZGU6IGxhc3RGZWF0dXJlICYmIGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LmlzQ2xvc2VkID8gRURJVE9SX01PREVTLkVESVQgOiBzdGF0ZS5lZGl0b3IubW9kZVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBleGlzdGluZyBmZWF0dXJlXG4gIGNvbnN0IHtzZWxlY3RlZEZlYXR1cmV9ID0gc3RhdGUuZWRpdG9yO1xuXG4gIC8vIElmIG5vIGZlYXR1cmUgaXMgc2VsZWN0ZWQgd2UgY2FuIHNpbXBseSByZXR1cm4gc2luY2Ugbm8gb3BlcmF0aW9uc1xuICBpZiAoIXNlbGVjdGVkRmVhdHVyZSkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGNoZWNrIGlmIHRoZSBmZWF0dXJlIGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlLmlkKTtcblxuICAvLyBpZiBmZWF0dXJlIGlzIHBhcnQgb2YgYSBmaWx0ZXJcbiAgY29uc3QgZmlsdGVySWQgPSBmZWF0dXJlICYmIGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQgJiYgZmVhdHVyZSkge1xuICAgIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgICBpZiAoZmVhdHVyZS5wcm9wZXJ0aWVzKSBmZWF0dXJlLnByb3BlcnRpZXMuYmJveCA9IGJib3goZmVhdHVyZSk7XG4gICAgY29uc3QgZmVhdHVyZVZhbHVlID0gZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVySWQpO1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGZpbCA9PiBmaWwuaWQgPT09IGZpbHRlcklkKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBmZWF0dXJlVmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmVhdHVyZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgc2VsZWN0aW9uQ29udGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgaWYgKGZlYXR1cmUgJiYgZmVhdHVyZS5wcm9wZXJ0aWVzKSBmZWF0dXJlLnByb3BlcnRpZXMuYmJveCA9IGJib3goZmVhdHVyZSk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IGZlYXR1cmUsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBEZWxldGUgZXhpc3RpbmcgZmVhdHVyZSBmcm9tIGZpbHRlcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZX06IFZpc1N0YXRlQWN0aW9ucy5EZWxldGVGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWZlYXR1cmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcblxuICBpZiAoZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpIHtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKTtcblxuICAgIHJldHVybiBmaWx0ZXJJZHggPiAtMSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pIDogbmV3U3RhdGU7XG4gIH1cblxuICAvLyBtb2RpZnkgZWRpdG9yIG9iamVjdFxuICBjb25zdCBuZXdFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5ld0VkaXRvclxuICB9O1xufVxuXG4vKipcbiAqIFRvZ2dsZSBmZWF0dXJlIGFzIGxheWVyIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlfSA9IHBheWxvYWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG5cbiAgLy8gbGV0IG5ld0ZpbHRlciA9IG51bGw7XG4gIGxldCBmaWx0ZXJJZHg7XG4gIGxldCBuZXdMYXllcklkID0gW2xheWVyLmlkXTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIC8vIElmIHBvbHlnb24gZmlsdGVyIGFscmVhZHkgZXhpc3RzLCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IGxheWVyIGlzIGFscmVhZHkgaW5jbHVkZWRcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG5cbiAgICBpZiAoIXN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSkge1xuICAgICAgLy8gd2hhdCBpZiBmaWx0ZXIgZG9lc24ndCBleGlzdD8uLi4gbm90IHBvc3NpYmxlLlxuICAgICAgLy8gYmVjYXVzZSBmZWF0dXJlcyBpbiB0aGUgZWRpdG9yIGlzIHBhc3NlZCBpbiBmcm9tIGZpbHRlcnMgYW5kIGVkaXRvcnMuXG4gICAgICAvLyBidXQgd2Ugd2lsbCBtb3ZlIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGVkaXRvciBqdXN0IGluIGNhc2VcbiAgICAgIGNvbnN0IG5vbmVGaWx0ZXJGZWF0dXJlID0ge1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGZpbHRlcklkOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIG5vbmVGaWx0ZXJGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5vbmVGaWx0ZXJGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgICBjb25zdCB7bGF5ZXJJZCA9IFtdfSA9IGZpbHRlcjtcbiAgICBjb25zdCBpc0xheWVySW5jbHVkZWQgPSBsYXllcklkLmluY2x1ZGVzKGxheWVyLmlkKTtcblxuICAgIG5ld0xheWVySWQgPSBpc0xheWVySW5jbHVkZWRcbiAgICAgID8gLy8gaWYgbGF5ZXIgaXMgaW5jbHVkZWQsIHJlbW92ZSBpdFxuICAgICAgICBsYXllcklkLmZpbHRlcihsID0+IGwgIT09IGxheWVyLmlkKVxuICAgICAgOiBbLi4ubGF5ZXJJZCwgbGF5ZXIuaWRdO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIHdlIGhhdmVuJ3QgY3JlYXRlIHRoZSBwb2x5Z29uIGZpbHRlciwgY3JlYXRlIGl0XG4gICAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICAgIC8vIGFkZCBmZWF0dXJlLCByZW1vdmUgZmVhdHVyZSBmcm9tIGVpZHRvclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICAgIGVkaXRvcjoge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBuZXdMYXllcklkXG4gIH0pO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbiwgbW9kZX06IFZpc1N0YXRlQWN0aW9ucy5Tb3J0VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IHNvcnRNb2RlID0gbW9kZTtcbiAgaWYgKCFzb3J0TW9kZSkge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0KGRhdGFzZXQsIFsnc29ydENvbHVtbicsIGNvbHVtbl0pO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzaG91bGQgYmUgZml4YWJsZSBpbiBhIFRTIGZpbGVcbiAgICBzb3J0TW9kZSA9IGN1cnJlbnRNb2RlXG4gICAgICA/IE9iamVjdC5rZXlzKFNPUlRfT1JERVIpLmZpbmQobSA9PiBtICE9PSBjdXJyZW50TW9kZSlcbiAgICAgIDogU09SVF9PUkRFUi5BU0NFTkRJTkc7XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSBzb3J0RGF0YXNldEJ5Q29sdW1uKGRhdGFzZXQsIGNvbHVtbiwgc29ydE1vZGUpO1xuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzb3J0ZWQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5QaW5UYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdEYXRhc2V0ID0gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQsIGNvbHVtbik7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvcHkgY29sdW1uIGNvbnRlbnQgYXMgc3RyaW5nc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLkNvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogU2V0IGRpc3BsYXkgZm9ybWF0IGZyb20gY29sdW1ucyBmcm9tIHVzZXIgc2VsZWN0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZm9ybWF0c306IFZpc1N0YXRlQWN0aW9ucy5TZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcztcbiAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICAgIGlmIChmaWVsZElkeCA+PSAwKSB7XG4gICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZm9ybWF0c1tjb2x1bW5dO1xuICAgICAgY29uc3QgZmllbGQgPSBuZXdGaWVsZHNbZmllbGRJZHhdO1xuICAgICAgbmV3RmllbGRzID0gc3dhcF8obWVyZ2VfKHtkaXNwbGF5Rm9ybWF0fSkoZmllbGQpIGFzIHtpZDogc3RyaW5nfSkoXG4gICAgICAgIG5ld0ZpZWxkcyBhcyB7aWQ6IHN0cmluZ31bXVxuICAgICAgKSBhcyBGaWVsZFtdO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHMgYXMgRmllbGRbXX0pO1xuICBsZXQgbmV3U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICAvLyB1cGRhdGUgY29sb3JGaWVsZCBkaXNwbGF5Rm9ybWF0XG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyczogbmV3U3RhdGUubGF5ZXJzLm1hcChsYXllciA9PlxuICAgICAgbGF5ZXIuY29uZmlnPy5jb2xvckZpZWxkPy5uYW1lICYmIGxheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWUgaW4gZm9ybWF0c1xuICAgICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIGNvbG9yRmllbGQ6IHtcbiAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yRmllbGQsXG4gICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ6IGZvcm1hdHNbbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IGxheWVyXG4gICAgKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICB2aXNpYmxlOiAhc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbmZ1bmN0aW9uIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgZmlsdGVySWR4OiBudW1iZXIpOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICBpZiAoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSB7XG4gICAgY29uc3QgdGltZWxpbmVWYWx1ZSA9IGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzXG4gICAgICA/IHNuYXBUb01hcmtzKHRpbWVsaW5lVmFsdWUsIHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMpXG4gICAgICA6IHRpbWVsaW5lVmFsdWU7XG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIHt2YWx1ZX0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKSB7XG4gIHJldHVybiBmaWx0ZXIudmFsdWVbZmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdO1xufVxuXG5mdW5jdGlvbiBnZXRTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlKSB7XG4gICAgcmV0dXJuIGZpbHRlci5zeW5jVGltZWxpbmVNb2RlID8/IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xuICB9XG5cbiAgcmV0dXJuIFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLCBuZXdNb2RlOiBudW1iZXIpIHtcbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlICYmIG5ld01vZGUgPT09IFNZTkNfVElNRUxJTkVfTU9ERVMuc3RhcnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VGltZUZpbHRlckludGVydmFsKHN0YXRlLCBmaWx0ZXIpIHtcbiAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBsZXQgaW50ZXJ2YWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSW5kZXggPSBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLnJlZHVjZSgoY3VycmVudEluZGV4LCBsKSA9PiB7XG4gICAgICBpZiAobC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IFRJTUVfSU5URVJWQUxTX09SREVSRUQuZmluZEluZGV4KGkgPT4gaSA9PT0gbC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCk7XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+IC0xICYmIG5ld0luZGV4IDwgY3VycmVudEluZGV4ID8gbmV3SW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSwgVElNRV9JTlRFUlZBTFNfT1JERVJFRC5sZW5ndGggLSAxKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaGV4VGlsZUludGVydmFsID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRFtpbnRlcnZhbEluZGV4XTtcbiAgICBpbnRlcnZhbCA9IExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWxbaGV4VGlsZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShmaWx0ZXIsIHVwZGF0ZWRQbG90VHlwZSwgc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyKTtcbn1cblxuLy8gRmluZCBkYXRhSWQgZnJvbSBhIHNhdmVkIHZpc1N0YXRlIHByb3BlcnR5OlxuLy8gbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnMsIGxheWVyQmxlbmRpbmcsIG92ZXJsYXlCbGVuZGluZywgc3BsaXRNYXBzLCBhbmltYXRpb25Db25maWcsIGVkaXRvclxuLy8gcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZGF0YUlkXG5mdW5jdGlvbiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModmFsdWU6IGFueSwgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IHJlcGxhY2VkID0gdmFsdWVcbiAgICAgIC5tYXAodiA9PiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModiwgZGF0YUlkLCBkYXRhSWRUb1JlcGxhY2UpKVxuICAgICAgLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZS5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHZhbHVlLmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gb3RoZXJzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICB9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YUlkKSAmJiB2YWx1ZS5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgIC8vIGZpbHRlclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogdmFsdWUuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1JlcGxhY2UgOiBkKSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmNvbmZpZz8uZGF0YUlkICYmIHZhbHVlLmNvbmZpZz8uZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBsYXllclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi52YWx1ZS5jb25maWcsXG4gICAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBkYXRhSWQpKSB7XG4gICAgLy8gZm9yIHZhbHVlIHNhdmVkIGFzIHtbZGF0YUlkXTogey4uLn19XG4gICAgcmV0dXJuIHtbZGF0YUlkVG9SZXBsYWNlXTogdmFsdWVbZGF0YUlkXX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gRmluZCBkYXRhc2V0SWRzIGRlcml2ZWQgYSBzYXZlZCB2aXNTdGF0ZSBQcm9wZXJ0eTtcbmZ1bmN0aW9uIGZpbmRDaGlsZERhdGFzZXRJZHModmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgY2hpbGREYXRhSWRzID0gdmFsdWUubWFwKGZpbmRDaGlsZERhdGFzZXRJZHMpLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiBjaGlsZERhdGFJZHMubGVuZ3RoID8gY2hpbGREYXRhSWRzIDogbnVsbDtcbiAgfVxuXG4gIC8vIGNoaWxkIGRhdGEgaWQgdXN1YWxseSBzdG9yZXMgaW4gdGhlIGRlcml2ZWQgZGF0YXNldCBpbmZvXG4gIHJldHVybiB2YWx1ZT8ubmV3RGF0YXNldD8uaW5mby5pZCB8fCBudWxsO1xufVxuXG4vLyBtb3ZlZCB1bm1lcmdlZCBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9uc1xuZnVuY3Rpb24gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcHJvcFZhbHVlcywge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KSB7XG4gIC8vIHJlbW92ZSBwcm9wIHZhbHVlIGZyb20gc3RhdGVcbiAgLy8gVE9ETzogc2hvdWxkIHdlIGFkZCByZW1vdmUgdXBkYXRlciB0byBtZXJnZXIgYXMgd2VsbD9cbiAgaWYgKCFwcm9wVmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHN0YXRlUmVtb3ZlZCA9XG4gICAgcHJvcCA9PT0gJ2xheWVycydcbiAgICAgID8gcHJvcFZhbHVlcy5yZWR1Y2UoKGFjY3UsIHByb3BWYWx1ZSkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZDogcHJvcFZhbHVlLmlkfSksIHN0YXRlKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHN0YXRlW3Byb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgW3Byb3BdOiBzdGF0ZVtwcm9wXS5maWx0ZXIocCA9PiAhcHJvcFZhbHVlcy5maW5kKHByb3BWYWx1ZSA9PiBwLmlkID09PSBwcm9wVmFsdWUuaWQpKVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG5vdCBhcnJheSwgd2Ugd29uJ3QgcmVtb3ZlIGl0LCByZW1vdmUgZGF0YXNldCBzaG91bGQgaGFuZGxlIGl0XG4gICAgICAgIHN0YXRlO1xuXG4gIC8vIG1vdmUgdG8gc3RhdGVUb0JlTWVyZ2VkXG4gIGNvbnN0IHRvQmVNZXJnZWQgPSB7XG4gICAgW3RvTWVyZ2VQcm9wXTogc2F2ZVVubWVyZ2VkXG4gICAgICA/IC8vIGNhbGwgbWVyZ2Ugc2F2ZVVubWVyZ2VkIG1ldGhvZFxuICAgICAgICBzYXZlVW5tZXJnZWQoc3RhdGVSZW1vdmVkLCBwcm9wVmFsdWVzKVxuICAgICAgOiAvLyBpZiB0b01lcmdlUHJvcCBpcyBhcmFheSwgYXBwZW5kIHRvIGl0XG4gICAgICBBcnJheS5pc0FycmF5KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IFsuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLCAuLi5wcm9wVmFsdWVzXVxuICAgICAgOiAvLyBzYXZlIHByb3BWYWx1ZXMgdG8gdG9NZXJnZVxuICAgICAgaXNPYmplY3Qoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sXG4gICAgICAgICAgLi4ucHJvcFZhbHVlc1xuICAgICAgICB9XG4gICAgICA6IHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlUmVtb3ZlZCxcbiAgICAuLi50b0JlTWVyZ2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0QW5kRGVwczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICByZXR1cm4gY29tcG9zZV88VD4oW1xuICAgIGFwcGx5XyhyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlLCB7ZGF0YUlkLCBkYXRhSWRUb1VzZX0pLFxuICAgIGFwcGx5XyhyZW1vdmVEYXRhc2V0VXBkYXRlciwge2RhdGFJZH0pXG4gIF0pKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZXBsYWNlRGF0YXNldEFuZERlcHMoc3RhdGUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAvLyBtYWtlIGEgY29weSBvZiBsYXllck9yZGVyLCBiZWNhdXNlIGxheWVyIGlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGJ5IGNhbGxpbmcgcmVtb3ZlTGF5ZXJVcGRhdGVyXG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICAvLyBwcmVzZXJ2ZSBkYXRhc2V0IG9yZGVyXG4gIG5leHRTdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKS5tYXAoZCA9PlxuICAgIGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZFxuICApO1xuXG4gIC8vIHByZXNlcnZlTGF5ZXJPcmRlclxuICBpZiAobmV4dFN0YXRlLmxheWVyVG9CZU1lcmdlZD8ubGVuZ3RoKSB7XG4gICAgLy8gY29weSBzcGxpdCBtYXBzIHRvIGJlIG1lcmdlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc2V0IGluIHJlbW92ZSBsYXllclxuICAgIG5leHRTdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkID0gc2VyaWFsaXplZFN0YXRlPy5zcGxpdE1hcHMgPz8gW107XG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIgPSBbLi4ucHJlc2VydmVMYXllck9yZGVyXTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRGF0YXNldERlcHNJblN0YXRlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7ZGF0YUlkLCBkYXRhSWRUb1VzZX06IHtkYXRhSWQ6IHN0cmluZzsgZGF0YUlkVG9Vc2U6IHN0cmluZ31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5tZXJnZXJzLnJlZHVjZShcbiAgICAoXG4gICAgICBhY2N1U3RhdGUsXG4gICAgICB7cHJvcCwgdG9NZXJnZVByb3AsIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZCwgcHJlc2VydmVPcmRlcn1cbiAgICApID0+IHtcbiAgICAgIC8vIGdldCBkYXRhc2V0IGlkcyB0aGF0IGFyZSBkZXBlbmRzIG9uIHRoaXMgZGF0YXNldFxuICAgICAgY29uc3QgcHJvcHMgPSB0b0FycmF5KHByb3ApO1xuICAgICAgY29uc3QgdG9NZXJnZVByb3BzID0gdG9BcnJheSh0b01lcmdlUHJvcCk7XG4gICAgICBjb25zdCBzYXZlZFByb3BzID0gc2VyaWFsaXplZFN0YXRlID8gcHJvcHMubWFwKHAgPT4gc2VyaWFsaXplZFN0YXRlW3BdKSA6IFtdO1xuXG4gICAgICBsZXQgcmVwbGFjZWRTdGF0ZSA9IGFjY3VTdGF0ZTtcbiAgICAgIHNhdmVkUHJvcHMuZm9yRWFjaCgocHJvcFZhbHVlLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lcmdlck9wdGlvbnMgPSB7XG4gICAgICAgICAgcHJvcDogcHJvcHNbaV0sXG4gICAgICAgICAgdG9NZXJnZVByb3A6IHRvTWVyZ2VQcm9wc1tpXSxcbiAgICAgICAgICBnZXRDaGlsZERhdGFzZXRJZHMsXG4gICAgICAgICAgc2F2ZVVubWVyZ2VkXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWRJdGVtID1cbiAgICAgICAgICByZXBsYWNlUGFyZW50RGF0YXNldElkcz8uKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSkgfHxcbiAgICAgICAgICBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgICAgICAgcmVwbGFjZWRTdGF0ZSA9IHJlcGxhY2VkSXRlbVxuICAgICAgICAgID8gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUocmVwbGFjZWRTdGF0ZSwgcmVwbGFjZWRJdGVtLCBtZXJnZXJPcHRpb25zKVxuICAgICAgICAgIDogcmVwbGFjZWRTdGF0ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXT8ubGVuZ3RoICYmXG4gICAgICAgICAgcHJlc2VydmVPcmRlclxuICAgICAgICApIHtcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdID0gcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlcGxhY2VkU3RhdGU7XG4gICAgfSxcbiAgICBzdGF0ZVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKFxuICBzdGF0ZSxcbiAgcmVwbGFjZWRJdGVtLFxuICB7cHJvcCwgdG9NZXJnZVByb3AsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkfVxuKSB7XG4gIC8vIHByb3AgaXMgZGVwZW5kcyBvbiB0aGUgZGF0YXNldCB0byBiZSByZXBsYWNlZFxuICAvLyByZW1vdmUgcHJvcCBmcm9tIHN0YXRlLCBhbmQgbW92ZSBpdCB0byB0b0JlTWVyZ2VkXG4gIGxldCBuZXh0U3RhdGUgPSBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCByZXBsYWNlZEl0ZW0sIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSk7XG4gIGNvbnN0IGNoaWxkRGF0YUlkcyA9IGdldENoaWxkRGF0YXNldElkcz8uKHJlcGxhY2VkSXRlbSkgfHwgZmluZENoaWxkRGF0YXNldElkcyhyZXBsYWNlZEl0ZW0pO1xuXG4gIGlmIChjaGlsZERhdGFJZHMpIHtcbiAgICBuZXh0U3RhdGUgPSB0b0FycmF5KGNoaWxkRGF0YUlkcykucmVkdWNlKChhY2N1LCBjaGlsZERhdGFJZCkgPT4ge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGNoaWxkIGRhdGFzZXQgaWQsXG4gICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBtb3ZlIG91dCBvZiBzdGF0ZSBhbmQgbWVyZ2UgYmFjayBpblxuICAgICAgcmV0dXJuIHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhhY2N1LCBjaGlsZERhdGFJZCwgY2hpbGREYXRhSWQpO1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxnQkFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssSUFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sUUFBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sS0FBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsS0FBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVMsSUFBQSxHQUFBVixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVUsTUFBQSxHQUFBQyx1QkFBQSxDQUFBWCxPQUFBO0FBRUEsSUFBQVksT0FBQSxHQUFBWixPQUFBO0FBUUEsSUFBQWEsUUFBQSxHQUFBYixPQUFBO0FBMkJBLElBQUFjLE1BQUEsR0FBQWQsT0FBQTtBQTZCQSxJQUFBZSxZQUFBLEdBQUFmLE9BQUE7QUFFQSxJQUFBZ0IsVUFBQSxHQUFBaEIsT0FBQTtBQWlCQSxJQUFB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
|