@kepler.gl/reducers 3.3.0-alpha.11 → 3.3.0-alpha.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/layer-utils.js +15 -7
- package/dist/cjs/vis-state-merger.js +79 -37
- package/dist/cjs/vis-state-selectors.js +7 -6
- package/dist/cjs/vis-state-updaters.js +172 -39
- package/dist/cjs/vis-state.js +2 -2
- package/dist/esm/layer-utils.js +15 -7
- package/dist/esm/vis-state-merger.js +80 -38
- package/dist/esm/vis-state-selectors.js +7 -6
- package/dist/esm/vis-state-updaters.js +173 -41
- package/dist/esm/vis-state.js +2 -2
- package/dist/layer-utils.d.ts +1 -0
- package/dist/vis-state-merger.d.ts +7 -1
- package/dist/vis-state-updaters.d.ts +6 -1
- package/package.json +16 -16
|
@@ -3,7 +3,8 @@ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
|
3
3
|
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
4
4
|
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
5
5
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
6
|
-
var _excluded = ["enabled"]
|
|
6
|
+
var _excluded = ["enabled"],
|
|
7
|
+
_excluded2 = ["optional"];
|
|
7
8
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
8
9
|
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
9
10
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
@@ -18,7 +19,7 @@ import uniq from 'es-toolkit/compat/uniq';
|
|
|
18
19
|
import pick from 'es-toolkit/compat/pick';
|
|
19
20
|
import flattenDeep from 'es-toolkit/compat/flattenDeep';
|
|
20
21
|
import deepmerge from 'deepmerge';
|
|
21
|
-
import { arrayInsert, getInitialMapLayersForSplitMap, applyFiltersToDatasets, validateFiltersUpdateDatasets, findById, aggregate, isPlainObject } from '@kepler.gl/utils';
|
|
22
|
+
import { arrayInsert, combineSplitMapsByIndex, getInitialMapLayersForSplitMap, applyFiltersToDatasets, validateFiltersUpdateDatasets, findById, aggregate, isPlainObject } from '@kepler.gl/utils';
|
|
22
23
|
import { createEffect } from '@kepler.gl/effects';
|
|
23
24
|
import { notNullorUndefined } from '@kepler.gl/common-utils';
|
|
24
25
|
import { AGGREGATION_TYPES, LAYER_BLENDINGS, OVERLAY_BLENDINGS, isAnnotationKind, INITIAL_ANNOTATION_LINE_COLOR, INITIAL_ANNOTATION_LINE_WIDTH } from '@kepler.gl/constants';
|
|
@@ -585,41 +586,63 @@ function replaceInteractionDatasetIds(interactionConfig, dataId, dataIdToReplace
|
|
|
585
586
|
|
|
586
587
|
/**
|
|
587
588
|
* Merge splitMaps config with current visStete.
|
|
589
|
+
* Panels are matched by index: index i of `splitMaps`, `state.splitMaps` and
|
|
590
|
+
* `state.splitMapsToBeMerged` is the same map panel.
|
|
588
591
|
* 1. if current map is split, but splitMap DOESNOT contain maps
|
|
589
592
|
* : don't merge anything
|
|
590
593
|
* 2. if current map is NOT split, but splitMaps contain maps
|
|
591
|
-
* : add to splitMaps, and add current layers to splitMaps
|
|
594
|
+
* : add to splitMaps, and add current layers to splitMaps.
|
|
595
|
+
* Panels are created once one of them can be merged: it has no layers, or one of its layers exists
|
|
596
|
+
* 3. layers that don't exist yet
|
|
597
|
+
* : save to splitMapsToBeMerged, in the panel at the same index
|
|
598
|
+
* A layer listed in splitMaps only shows in the panels that list it.
|
|
592
599
|
*/
|
|
593
600
|
export function mergeSplitMaps(state) {
|
|
594
601
|
var splitMaps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
602
|
+
var layerExists = function layerExists(id) {
|
|
603
|
+
return state.layers.some(function (l) {
|
|
604
|
+
return l.id === id;
|
|
605
|
+
});
|
|
606
|
+
};
|
|
607
|
+
var createPanels = state.splitMaps.length > 0 || splitMaps.some(function (sm) {
|
|
608
|
+
var ids = Object.keys(sm.layers);
|
|
609
|
+
return !ids.length || ids.some(layerExists);
|
|
610
|
+
});
|
|
611
|
+
var currentLayers = getInitialMapLayersForSplitMap(state.layers.filter(function (l) {
|
|
612
|
+
return !splitMaps.some(function (sm) {
|
|
613
|
+
return l.id in sm.layers;
|
|
614
|
+
});
|
|
615
|
+
}));
|
|
595
616
|
var merged = _toConsumableArray(state.splitMaps);
|
|
596
617
|
var unmerged = [];
|
|
597
618
|
splitMaps.forEach(function (sm, i) {
|
|
598
619
|
var entries = Object.entries(sm.layers);
|
|
599
|
-
if (
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
pushTo[i] = pushTo[i] || _objectSpread(_objectSpread({}, sm), {}, {
|
|
611
|
-
layers: pushTo === merged ? getInitialMapLayersForSplitMap(state.layers) : []
|
|
612
|
-
});
|
|
613
|
-
pushTo[i].layers = _objectSpread(_objectSpread({}, pushTo[i].layers), {}, _defineProperty({}, id, value));
|
|
620
|
+
if (createPanels) {
|
|
621
|
+
// create map panel if current map is not split, keep id
|
|
622
|
+
var panel = merged[i] || _objectSpread(_objectSpread({}, sm), {}, {
|
|
623
|
+
layers: currentLayers
|
|
624
|
+
});
|
|
625
|
+
merged[i] = _objectSpread(_objectSpread({}, panel), {}, {
|
|
626
|
+
layers: _objectSpread(_objectSpread({}, panel.layers), Object.fromEntries(entries.filter(function (_ref4) {
|
|
627
|
+
var _ref5 = _slicedToArray(_ref4, 1),
|
|
628
|
+
id = _ref5[0];
|
|
629
|
+
return layerExists(id);
|
|
630
|
+
})))
|
|
614
631
|
});
|
|
615
|
-
} else {
|
|
616
|
-
// We are merging if there are no layers in both split map
|
|
617
|
-
merged.push(sm);
|
|
618
632
|
}
|
|
633
|
+
unmerged[i] = _objectSpread(_objectSpread({}, sm), {}, {
|
|
634
|
+
layers: Object.fromEntries(entries.filter(function (_ref6) {
|
|
635
|
+
var _ref7 = _slicedToArray(_ref6, 1),
|
|
636
|
+
id = _ref7[0];
|
|
637
|
+
return !layerExists(id);
|
|
638
|
+
}))
|
|
639
|
+
});
|
|
619
640
|
});
|
|
620
641
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
621
642
|
splitMaps: merged,
|
|
622
|
-
splitMapsToBeMerged:
|
|
643
|
+
splitMapsToBeMerged: unmerged.some(function (sm) {
|
|
644
|
+
return Object.keys(sm.layers).length;
|
|
645
|
+
}) ? combineSplitMapsByIndex(state.splitMapsToBeMerged, unmerged) : state.splitMapsToBeMerged
|
|
623
646
|
});
|
|
624
647
|
}
|
|
625
648
|
|
|
@@ -654,7 +677,9 @@ export function mergeAnnotations(state, annotations) {
|
|
|
654
677
|
return a.id;
|
|
655
678
|
}));
|
|
656
679
|
var validAnnotations = annotations.filter(function (a) {
|
|
657
|
-
return a && a.id && !existingIds.has(a.id) && isAnnotationKind(a.kind) && Array.isArray(a.anchorPoint) && a.anchorPoint.length === 2
|
|
680
|
+
return a && a.id && !existingIds.has(a.id) && isAnnotationKind(a.kind) && Array.isArray(a.anchorPoint) && (a.anchorPoint.length === 2 || a.anchorPoint.length === 3) && a.anchorPoint.every(function (value) {
|
|
681
|
+
return Number.isFinite(value);
|
|
682
|
+
});
|
|
658
683
|
}).map(function (a) {
|
|
659
684
|
return _objectSpread({
|
|
660
685
|
isVisible: true,
|
|
@@ -807,8 +832,8 @@ export function validateSavedLayerColumns(fields) {
|
|
|
807
832
|
columns[key] = _objectSpread({}, emptyCols[key]);
|
|
808
833
|
var saved = savedCols[key];
|
|
809
834
|
if (saved) {
|
|
810
|
-
var fieldIdx = fields.findIndex(function (
|
|
811
|
-
var name =
|
|
835
|
+
var fieldIdx = fields.findIndex(function (_ref8) {
|
|
836
|
+
var name = _ref8.name;
|
|
812
837
|
return name === saved;
|
|
813
838
|
});
|
|
814
839
|
if (fieldIdx > -1) {
|
|
@@ -871,9 +896,9 @@ export function validateColumn(column, columns, allFields) {
|
|
|
871
896
|
* @param {Object} options
|
|
872
897
|
* @return {Object} - validated textlabel
|
|
873
898
|
*/
|
|
874
|
-
export function validateSavedTextLabel(fields,
|
|
875
|
-
var
|
|
876
|
-
layerTextLabel =
|
|
899
|
+
export function validateSavedTextLabel(fields, _ref9, savedTextLabel) {
|
|
900
|
+
var _ref0 = _slicedToArray(_ref9, 1),
|
|
901
|
+
layerTextLabel = _ref0[0];
|
|
877
902
|
var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
878
903
|
var savedTextLabels = Array.isArray(savedTextLabel) ? savedTextLabel : [savedTextLabel];
|
|
879
904
|
|
|
@@ -920,10 +945,10 @@ function getSavedVisualChannelValue(savedLayer, key) {
|
|
|
920
945
|
*/
|
|
921
946
|
export function validateSavedVisualChannels(fields, newLayer, savedLayer) {
|
|
922
947
|
var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
923
|
-
Object.values(newLayer.visualChannels).forEach(function (
|
|
924
|
-
var field =
|
|
925
|
-
scale =
|
|
926
|
-
key =
|
|
948
|
+
Object.values(newLayer.visualChannels).forEach(function (_ref1) {
|
|
949
|
+
var field = _ref1.field,
|
|
950
|
+
scale = _ref1.scale,
|
|
951
|
+
key = _ref1.key;
|
|
927
952
|
var savedField = getSavedVisualChannelValue(savedLayer, field);
|
|
928
953
|
var savedScale = getSavedVisualChannelValue(savedLayer, scale);
|
|
929
954
|
var foundField;
|
|
@@ -985,9 +1010,26 @@ function _getColumnConfigForValidation(newLayer) {
|
|
|
985
1010
|
return colMode.key === newLayer.config.columnMode;
|
|
986
1011
|
}) : null;
|
|
987
1012
|
if (colModeConfig) {
|
|
988
|
-
// only validate columns in column mode
|
|
989
|
-
|
|
990
|
-
return
|
|
1013
|
+
// only validate columns in column mode (including tabbed columnGroups)
|
|
1014
|
+
var groupColumns = (colModeConfig.columnGroups || []).flatMap(function (group) {
|
|
1015
|
+
return group.columns || [];
|
|
1016
|
+
});
|
|
1017
|
+
var requiredKeys = new Set(colModeConfig.requiredColumns || []);
|
|
1018
|
+
columnConfig = [].concat(_toConsumableArray(colModeConfig.requiredColumns || []), _toConsumableArray(colModeConfig.optionalColumns || []), _toConsumableArray(groupColumns)).reduce(function (accu, key) {
|
|
1019
|
+
var col = columnConfig[key];
|
|
1020
|
+
if (!col) {
|
|
1021
|
+
return accu;
|
|
1022
|
+
}
|
|
1023
|
+
// Optionality must follow the active mode: a field optional in another mode
|
|
1024
|
+
// (e.g. altitude in UV) is still required when this mode lists it in requiredColumns.
|
|
1025
|
+
if (requiredKeys.has(key)) {
|
|
1026
|
+
var _optional = col.optional,
|
|
1027
|
+
requiredCol = _objectWithoutProperties(col, _excluded2);
|
|
1028
|
+
return _objectSpread(_objectSpread({}, accu), {}, _defineProperty({}, key, requiredCol));
|
|
1029
|
+
}
|
|
1030
|
+
return _objectSpread(_objectSpread({}, accu), {}, _defineProperty({}, key, _objectSpread(_objectSpread({}, col), {}, {
|
|
1031
|
+
optional: true
|
|
1032
|
+
})));
|
|
991
1033
|
}, {});
|
|
992
1034
|
}
|
|
993
1035
|
return columnConfig;
|
|
@@ -1111,7 +1153,7 @@ export function mergeDatasetsByOrder(state, newDataEntries) {
|
|
|
1111
1153
|
* It ignores `undefined` or `null` values, but returns `null` if no mode could be calculated.
|
|
1112
1154
|
*/
|
|
1113
1155
|
function getValueWithHighestOccurrence(arr) {
|
|
1114
|
-
var
|
|
1156
|
+
var _ref13;
|
|
1115
1157
|
var tallys = new Map();
|
|
1116
1158
|
arr.forEach(function (value) {
|
|
1117
1159
|
if (notNullorUndefined(value)) {
|
|
@@ -1126,7 +1168,7 @@ function getValueWithHighestOccurrence(arr) {
|
|
|
1126
1168
|
if (tallys.size === 0) {
|
|
1127
1169
|
return null;
|
|
1128
1170
|
}
|
|
1129
|
-
return (
|
|
1171
|
+
return (_ref13 = _toConsumableArray(tallys.entries())) === null || _ref13 === void 0 ? void 0 : _ref13.reduce(function (acc, next) {
|
|
1130
1172
|
return next[1] > acc[1] ? next : acc;
|
|
1131
1173
|
})[0];
|
|
1132
1174
|
}
|
|
@@ -1179,4 +1221,4 @@ export var VIS_STATE_MERGERS = [{
|
|
|
1179
1221
|
prop: 'editor',
|
|
1180
1222
|
combineConfigs: combineEditorConfigs
|
|
1181
1223
|
}];
|
|
1182
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1bmlxIiwicGljayIsImZsYXR0ZW5EZWVwIiwiZGVlcG1lcmdlIiwiYXJyYXlJbnNlcnQiLCJnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJmaW5kQnlJZCIsImFnZ3JlZ2F0ZSIsImlzUGxhaW5PYmplY3QiLCJjcmVhdGVFZmZlY3QiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJBR0dSRUdBVElPTl9UWVBFUyIsIkxBWUVSX0JMRU5ESU5HUyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwiaXNBbm5vdGF0aW9uS2luZCIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJDVVJSRU5UX1ZFUlNJT04iLCJhc3NpZ25HcHVDaGFubmVscyIsInJlc2V0RmlsdGVyR3B1TW9kZSIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwibWVyZ2VGaWx0ZXJzIiwic3RhdGUiLCJmaWx0ZXJzVG9NZXJnZSIsImZyb21Db25maWciLCJwcmVzZXJ2ZUZpbHRlck9yZGVyIiwibWFwIiwibCIsImlkIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVkIiwiZmFpbGVkIiwidXBkYXRlZERhdGFzZXRzIiwidXBkYXRlZEZpbHRlcnMiLCJpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyIiwiZmlsdGVycyIsImRhdGFzZXRzVG9GaWx0ZXIiLCJmIiwiZGF0YUlkIiwiZmlsdGVyZWQiLCJsYXllcnMiLCJfb2JqZWN0U3ByZWFkIiwiZGF0YXNldHMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwicmVwbGFjZUZpbHRlckRhdGFzZXRJZHMiLCJzYXZlZEZpbHRlciIsImRhdGFJZFRvVXNlIiwicmVwbGFjZWQiLCJmb3JFYWNoIiwiZmlsdGVyIiwiaW5jbHVkZXMiLCJfZmlsdGVyJHBsb3RUeXBlIiwibmV3RGF0YUlkIiwiZCIsInBsb3RUeXBlIiwiY29sb3JzQnlEYXRhSWQiLCJfZmlsdGVyJHBsb3RUeXBlMiIsIl9yZWYiLCJjb2xvciIsInJlc3QiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsIl9kZWZpbmVQcm9wZXJ0eSIsInB1c2giLCJpc1NhdmVkTGF5ZXJDb25maWdWMSIsImxheWVyQ29uZmlnIiwidmlzdWFsQ2hhbm5lbHMiLCJwYXJzZUxheWVyQ29uZmlnIiwic2NoZW1hIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uIiwic2F2ZWRDb25maWciLCJ2ZXJzaW9uIiwiY29uZmlnIiwidmlzU3RhdGUiLCJsYXllck9yZGVyIiwicGFyc2VTYXZlZENvbmZpZyIsImN1cnJlbnRJdGVtcyIsIml0ZW1zIiwicHJlc2VydmVkT3JkZXIiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJkZWZhdWx0U3RhcnQiLCJuZXdJdGVtcyIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJpdGVtIiwidmFsdWUiLCJleHBlY3RlZElkeCIsImluZGV4T2YiLCJpbnNlcnRBdCIsImkiLCJwcmVjZWVkSWR4IiwiX2xvb3AiLCJwcmVjZWVkSXRlbUlkIiwiZmluZEluZGV4IiwiZXJyIiwiZSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsInBhcnNlZExheWVyQ29uZmlnIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhIiwidmFsaWRhdGVMYXllcnNCeURhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiYWxsb3dFbXB0eUNvbHVtbiIsIm5ld0xheWVyIiwidXBkYXRlTGF5ZXJEb21haW4iLCJzZXJpYWxpemVGaWx0ZXIiLCJuZXdGaWx0ZXIiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGYiLCJzZXJpYWxpemVkVmlzU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInNlcmlhbGl6ZUxheWVyIiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRsIiwic2VyaWFsaXplRWZmZWN0IiwibmV3RWZmZWN0IiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRlIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uMiIsInNhdmVkU3RhdGUiLCJnZXRDb25maWdUb1NhdmUiLCJtZXJnZUxheWVycyIsImxheWVyc1RvTWVyZ2UiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJ1bm1lcmdlZCIsInRvTWVyZ2UiLCJfbCRjb25maWciLCJpc01lcmdpbmdEYXRhc2V0cyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YTIiLCJtZXJnZWRMYXllciIsImFwcGx5IiwiX2luc2VydExheWVyQXRSaWdodE9yIiwiaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIiLCJuZXdMYXllck9yZGVyIiwibmV3TGF5ZXJzIiwibWVyZ2VkU3RhdGUiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsInNhdmVkT3JkZXIiLCJtZXJnZUxheWVyT3JkZXIiLCJjdXJyZW50TGF5ZXJzIiwibGF5ZXJzVG9JbnNlcnQiLCJjdXJyZW50T3JkZXIiLCJjdXJyZW50TGF5ZXJRdWV1ZSIsImVudHJ5IiwibGF5ZXIiLCJCb29sZWFuIiwibmV3TGF5ZXJPcmRlclF1ZXVlIiwibmV3RmxhdExheWVyT3JkZXIiLCJoYXNHcm91cHMiLCJzb21lIiwiZXhpc3RpbmdGbGF0SWRzIiwiU2V0IiwibmV3SW5zZXJ0ZWRJZHMiLCJoYXMiLCJyZXN1bHQiLCJmbGF0UXVldWUiLCJmbGF0SWR4IiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInNhdmVkTGF5ZXJPcmRlciIsInZhbGlkTGF5ZXJJZHMiLCJmaWx0ZXJMYXllck9yZGVyIiwib3JkZXIiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiZ3JvdXAiLCJmaWx0ZXJlZEdyb3VwT3JkZXIiLCJyZXN0b3JlZExheWVyT3JkZXIiLCJsYXllcklkc0luUmVzdG9yZWQiLCJjb2xsZWN0SWRzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImFkZCIsIm1pc3NpbmdMYXllcnMiLCJtZXJnZUludGVyYWN0aW9ucyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsIm1lcmdlZCIsIk9iamVjdCIsImtleXMiLCJrZXkiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImN1cnJlbnRDb25maWciLCJfcmVmMiIsImVuYWJsZWQiLCJjb25maWdTYXZlZCIsIl9leGNsdWRlZCIsImNvbmZpZ1RvTWVyZ2UiLCJfbWVyZ2VJbnRlcmFjdGlvblRvb2wiLCJtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyIsIm1lcmdlZFRvb2x0aXAiLCJ1bm1lcmdlZFRvb2x0aXAiLCJmaWVsZHNUb1Nob3ciLCJ0b29sdGlwIiwibmV4dFN0YXRlIiwic2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uIiwiY29tYmluZUludGVyYWN0aW9uQ29uZmlncyIsImNvbmZpZ3MiLCJjb21iaW5lZCIsIl9sb29wMiIsInRvQmVDb21iaW5lZFByb3BzIiwiYyIsInAiLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UiLCJyZWR1Y2UiLCJhY2MiLCJuZXh0RmllbGRzVG9TaG93IiwiX2xvb3AzIiwibmV4dERhdGFJZEtleSIsIm5leHRUb29sdGlwRmllbGRzIiwibmV4dFRGIiwiZmluZCIsIl9yZWYzIiwibmFtZSIsIl9hZ2dyZWdhdGUiLCJzaXplIiwibWF4aW11bSIsImxpbWl0U2VhcmNoIiwiX3VubWVyZ2VkJHRvb2x0aXAiLCJfdW5tZXJnZWQkdG9vbHRpcDIiLCJfc3RhdGUkaW50ZXJhY3Rpb25Ub0IiLCJfdW5tZXJnZWQkdG9vbHRpcDMiLCJyZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwiX2ludGVyYWN0aW9uQ29uZmlnJHRvIiwiX2ludGVyYWN0aW9uQ29uZmlnJHRvMiIsIm1lcmdlU3BsaXRNYXBzIiwic3BsaXRNYXBzIiwic20iLCJlbnRyaWVzIiwiX3JlZjQiLCJfcmVmNSIsIl9zbGljZWRUb0FycmF5IiwicHVzaFRvIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsIm1lcmdlRWZmZWN0cyIsIm5ld0VmZmVjdHMiLCJlZmZlY3QiLCJhbGwiLCJpc0NvbmZpZ0FjdGl2ZSIsImlzVmFsaWRUb1NhdmUiLCJtZXJnZUFubm90YXRpb25zIiwiYW5ub3RhdGlvbnMiLCJleGlzdGluZ0lkcyIsImEiLCJ2YWxpZEFubm90YXRpb25zIiwia2luZCIsImFuY2hvclBvaW50IiwiaXNWaXNpYmxlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJsYWJlbCIsImxpbmVDb2xvciIsImxpbmVXaWR0aCIsInRleHRXaWR0aCIsInRleHRIZWlnaHQiLCJ0b29sdGlwQ29uZmlnIiwiX2xvb3A0IiwiYWxsRmllbGRzIiwiZmllbGRzIiwiZm91bmRGaWVsZHNUb1Nob3ciLCJmaWVsZCIsIm1lcmdlTGF5ZXJCbGVuZGluZyIsImxheWVyQmxlbmRpbmciLCJjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3MiLCJtZXJnZU92ZXJsYXlCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzIiwibWVyZ2VBbmltYXRpb25Db25maWciLCJhbmltYXRpb24iLCJjdXJyZW50VGltZSIsImFuaW1hdGlvbkNvbmZpZyIsImRvbWFpbiIsImNvbWJpbmVBbmltYXRpb25Db25maWdzIiwiX2FnZ3JlZ2F0ZTIiLCJfYWdncmVnYXRlMyIsIm1pbmltdW0iLCJzcGVlZCIsInZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMiLCJzYXZlZENvbHMiLCJlbXB0eUNvbHMiLCJvcHRpb25zIiwiY29sdW1ucyIsIl9sb29wNSIsIl9PYmplY3Qka2V5cyIsIl9pIiwic2F2ZWQiLCJmaWVsZElkeCIsIl9yZWY2IiwiYWxsQ29sRm91bmQiLCJldmVyeSIsInZhbGlkYXRlQ29sdW1uIiwicnYiLCJ0aHJvd09uRXJyb3IiLCJyZXF1aXJlZENvbHVtbnMiLCJrIiwib3B0aW9uYWwiLCJtaXNzaW5nQ29sdW1ucyIsIkVycm9yIiwiam9pbiIsImNvbmZpZ0NvbHVtbnMiLCJpbnZhbGlkQ29sdW1ucyIsIl9jb2x1bW5zJGsiLCJjb2x1bW4iLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZVNhdmVkVGV4dExhYmVsIiwiX3JlZjciLCJzYXZlZFRleHRMYWJlbCIsIl9yZWY4IiwibGF5ZXJUZXh0TGFiZWwiLCJzYXZlZFRleHRMYWJlbHMiLCJ0ZXh0TGFiZWwiLCJmZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJhY2N1IiwiZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUiLCJzYXZlZExheWVyIiwiY2hhbm5lbHMiLCJfdHlwZW9mIiwidmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzIiwidmFsdWVzIiwiX3JlZjkiLCJzY2FsZSIsInNhdmVkRmllbGQiLCJzYXZlZFNjYWxlIiwiZm91bmRGaWVsZCIsImZvdW5kQ2hhbm5lbCIsInVwZGF0ZUxheWVyQ29uZmlnIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiX25ld0xheWVyJGNvbmZpZyRmaWVsIiwiZmllbGROYW1lIiwiX2xheWVyJGNvbmZpZyIsInZhbGlkYXRlTGF5ZXIiLCJ2YWxpZGF0ZUxheWVyV2l0aERhdGEiLCJfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbiIsImNvbHVtbkNvbmZpZyIsImdldExheWVyQ29sdW1ucyIsImNvbE1vZGVDb25maWciLCJjb2x1bW5Nb2RlIiwic3VwcG9ydGVkQ29sdW1uTW9kZXMiLCJjb2xNb2RlIiwib3B0aW9uYWxDb2x1bW5zIiwiZGF0YXNldCIsInR5cGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJoaWRkZW4iLCJoaWdobGlnaHRDb2xvciIsImNvcGllZFZpc0NvbmZpZyIsImNvcHlMYXllckNvbmZpZyIsInZpc0NvbmZpZyIsInNoYWxsb3dDb3B5IiwidmFsaWRhdGVWaXNDb25maWciLCJtZXJnZUVkaXRvciIsInNhdmVkRWRpdG9yIiwiX3NhdmVkRWRpdG9yJHZpc2libGUiLCJlZGl0b3IiLCJmZWF0dXJlcyIsInZpc2libGUiLCJjb21iaW5lRWRpdG9yQ29uZmlncyIsIm5leHRDb25maWciLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsIm5ld0RhdGFFbnRyaWVzIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJuZXdEYXRhc2V0SWRzIiwiX3N0YXRlJHByZXNlcnZlRGF0YXNlIiwiYXJyIiwiX3JlZjExIiwidGFsbHlzIiwiTWFwIiwic2V0IiwiZ2V0IiwibmV4dCIsIlZJU19TVEFURV9NRVJHRVJTIiwibWVyZ2UiLCJwcm9wIiwidG9NZXJnZVByb3AiLCJwcmVzZXJ2ZU9yZGVyIiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJzYXZlVW5tZXJnZWQiLCJjb21iaW5lQ29uZmlncyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92aXMtc3RhdGUtbWVyZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB1bmlxIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3VuaXEnO1xuaW1wb3J0IHBpY2sgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvcGljayc7XG5pbXBvcnQgZmxhdHRlbkRlZXAgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvZmxhdHRlbkRlZXAnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtcbiAgYXJyYXlJbnNlcnQsXG4gIGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMsXG4gIGZpbmRCeUlkLFxuICBhZ2dyZWdhdGUsXG4gIGlzUGxhaW5PYmplY3Rcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7TGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX1RZUEVTLFxuICBMQVlFUl9CTEVORElOR1MsXG4gIE9WRVJMQVlfQkxFTkRJTkdTLFxuICBpc0Fubm90YXRpb25LaW5kLFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEhcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtDVVJSRU5UX1ZFUlNJT04sIFZpc1N0YXRlLCBWaXNTdGF0ZU1lcmdlcnMsIEtlcGxlckdMU2NoZW1hQ2xhc3N9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5cbmltcG9ydCB7XG4gIFBhcnNlZExheWVyLFxuICBQYXJzZWRWaXNTdGF0ZSxcbiAgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgVG9vbHRpcEluZm8sXG4gIFNhdmVkRWRpdG9yLFxuICBQYXJzZWRDb25maWcsXG4gIEZpbHRlcixcbiAgRWZmZWN0IGFzIEVmZmVjdFR5cGUsXG4gIFBhcnNlZEVmZmVjdCxcbiAgTGF5ZXJDb2x1bW5zLFxuICBMYXllckNvbHVtbixcbiAgUGFyc2VkRmlsdGVyLFxuICBOZXN0ZWRQYXJ0aWFsLFxuICBTYXZlZEFuaW1hdGlvbkNvbmZpZyxcbiAgTGF5ZXJPcmRlcixcbiAgTGF5ZXJPcmRlckdyb3VwXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZSwgRGF0YXNldHMsIGFzc2lnbkdwdUNoYW5uZWxzLCByZXNldEZpbHRlckdwdU1vZGV9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5pbXBvcnQge2dldExheWVyT3JkZXJGcm9tTGF5ZXJzfSBmcm9tICcuL2xheWVyLXV0aWxzJztcblxuLyoqXG4gKiBNZXJnZSBsb2FkZWQgZmlsdGVycyB3aXRoIGN1cnJlbnQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGaWx0ZXJzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBmaWx0ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnZmlsdGVycyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IHByZXNlcnZlRmlsdGVyT3JkZXIgPSBmcm9tQ29uZmlnXG4gICAgPyBmaWx0ZXJzVG9NZXJnZT8ubWFwKGwgPT4gbC5pZClcbiAgICA6IHN0YXRlLnByZXNlcnZlRmlsdGVyT3JkZXI7XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcnNUb01lcmdlKSB8fCAhZmlsdGVyc1RvTWVyZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge3ZhbGlkYXRlZCwgZmFpbGVkLCB1cGRhdGVkRGF0YXNldHN9ID0gdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMoc3RhdGUsIGZpbHRlcnNUb01lcmdlKTtcbiAgbGV0IHVwZGF0ZWRGaWx0ZXJzID0gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgICBzdGF0ZS5maWx0ZXJzLFxuICAgIHZhbGlkYXRlZCxcbiAgICBwcmVzZXJ2ZUZpbHRlck9yZGVyXG4gICk7XG5cbiAgLy8gbWVyZ2UgZmlsdGVyIHdpdGggZXhpc3RpbmdcbiAgdXBkYXRlZEZpbHRlcnMgPSByZXNldEZpbHRlckdwdU1vZGUodXBkYXRlZEZpbHRlcnMpO1xuICB1cGRhdGVkRmlsdGVycyA9IGFzc2lnbkdwdUNoYW5uZWxzKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZGF0YXNldHNUb0ZpbHRlciA9IHVuaXEoZmxhdHRlbkRlZXAodmFsaWRhdGVkLm1hcChmID0+IGYuZGF0YUlkKSkpO1xuXG4gIGNvbnN0IGZpbHRlcmVkID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBkYXRhc2V0c1RvRmlsdGVyLFxuICAgIHVwZGF0ZWREYXRhc2V0cyxcbiAgICB1cGRhdGVkRmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHVwZGF0ZWRGaWx0ZXJzLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZCxcbiAgICBwcmVzZXJ2ZUZpbHRlck9yZGVyLFxuICAgIGZpbHRlclRvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5maWx0ZXJUb0JlTWVyZ2VkLCAuLi5mYWlsZWRdXG4gIH07XG59XG5cbi8vIHJlcGxhY2UgZGF0YUlkIGluIHNhdmVkIEZpbHRlclxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzKFxuICBzYXZlZEZpbHRlcjogRmlsdGVyW10sXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pIHtcbiAgY29uc3QgcmVwbGFjZWQ6IEZpbHRlcltdID0gW107XG4gIHNhdmVkRmlsdGVyLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICBpZiAoZmlsdGVyLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgICBjb25zdCBuZXdEYXRhSWQgPSBmaWx0ZXIuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1VzZSA6IGQpKTtcbiAgICAgIGxldCBwbG90VHlwZTtcbiAgICAgIC8vIFRPRE86IG1vcmUgZ2VuZXJpYyBhcHByb2FjaCB0byBzYXZlIHBsb3RUeXBlLmNvbG9yc0J5RGF0YUlkXG4gICAgICBpZiAoZmlsdGVyLnBsb3RUeXBlPy5jb2xvcnNCeURhdGFJZD8uW2RhdGFJZF0pIHtcbiAgICAgICAgLy8gcmVwbGFjZSBjb2xvckJ5RGF0YUlkIGluIGZpbHRlci5wbG90VHlwZVxuICAgICAgICBjb25zdCB7W2RhdGFJZF06IGNvbG9yLCAuLi5yZXN0fSA9IGZpbHRlci5wbG90VHlwZT8uY29sb3JzQnlEYXRhSWQgfHwge307XG4gICAgICAgIHBsb3RUeXBlID0ge1xuICAgICAgICAgIC4uLmZpbHRlci5wbG90VHlwZSxcbiAgICAgICAgICBjb2xvcnNCeURhdGFJZDoge1xuICAgICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgICAgIFtkYXRhSWRUb1VzZV06IGNvbG9yXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmVwbGFjZWQucHVzaCh7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWQsXG4gICAgICAgIC4uLihwbG90VHlwZSA/IHtwbG90VHlwZX0gOiB7fSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NhdmVkTGF5ZXJDb25maWdWMShsYXllckNvbmZpZzogYW55KTogYm9vbGVhbiB7XG4gIC8vIGV4cG9ydGVkIGxheWVyIGNvbmZpZ3VyYXRpb24gY29udGFpbnMgdmlzdWFsQ2hhbm5lbHMgcHJvcGVydHlcbiAgcmV0dXJuIGxheWVyQ29uZmlnPy52aXN1YWxDaGFubmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTGF5ZXJDb25maWcoXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzcyxcbiAgbGF5ZXJDb25maWc6IGFueVxuKTogUGFyc2VkTGF5ZXIgfCB1bmRlZmluZWQge1xuICAvLyBhc3N1bWUgdGhlIGxheWVyIGNvbmZpZyBpcyBjdXJyZW50IHZlcnNpb25cbiAgY29uc3Qgc2F2ZWRDb25maWcgPSB7XG4gICAgdmVyc2lvbjogQ1VSUkVOVF9WRVJTSU9OLFxuICAgIGNvbmZpZzoge1xuICAgICAgdmlzU3RhdGU6IHtsYXllcnM6IFtsYXllckNvbmZpZ10sIGxheWVyT3JkZXI6IFtsYXllckNvbmZpZy5pZF19XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBzY2hlbWEucGFyc2VTYXZlZENvbmZpZyhzYXZlZENvbmZpZyk/LnZpc1N0YXRlPy5sYXllcnM/LlswXTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgY3VycmVudEl0ZW1zOiBGaWx0ZXJbXSxcbiAgaXRlbXM6IEZpbHRlcltdLFxuICBwcmVzZXJ2ZWRPcmRlcjogYW55W10gPSBbXSxcbiAgZGVmYXVsdFN0YXJ0PzogYm9vbGVhblxuKSB7XG4gIGxldCBuZXdJdGVtcyA9IFsuLi5jdXJyZW50SXRlbXNdO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IGV4cGVjdGVkSWR4ID0gcHJlc2VydmVkT3JkZXIuaW5kZXhPZihpdGVtLmlkKTtcbiAgICAvLyBpbnNlcnRBdCB0aGUgZW5kIGJ5IGRlZmF1bHRcbiAgICBsZXQgaW5zZXJ0QXQgPSBkZWZhdWx0U3RhcnQgPyAwIDogbmV3SXRlbXMubGVuZ3RoO1xuICAgIGlmIChleHBlY3RlZElkeCA+IDApIHtcbiAgICAgIC8vIGxvb2sgZm9yIGxheWVyIHRvIGluc2VydCBhZnRlclxuICAgICAgbGV0IGkgPSBleHBlY3RlZElkeCArIDE7XG4gICAgICBsZXQgcHJlY2VlZElkeCA9IC0xO1xuICAgICAgd2hpbGUgKGktLSA+IDAgJiYgcHJlY2VlZElkeCA8IDApIHtcbiAgICAgICAgLy8ga2VlcCBsb29raW5nIGZvciBwcmVjZWVkIGxheWVyIHRoYXQgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgY29uc3QgcHJlY2VlZEl0ZW1JZCA9IHByZXNlcnZlZE9yZGVyW2kgLSAxXTtcbiAgICAgICAgcHJlY2VlZElkeCA9IG5ld0l0ZW1zLmZpbmRJbmRleChkID0+IGQuaWQgPT09IHByZWNlZWRJdGVtSWQpO1xuICAgICAgfVxuICAgICAgaWYgKHByZWNlZWRJZHggPiAtMSkge1xuICAgICAgICAvLyBpZiBmb3VuZFxuICAgICAgICBpbnNlcnRBdCA9IHByZWNlZWRJZHggKyAxO1xuICAgICAgfVxuICAgIH1cbiAgICBuZXdJdGVtcyA9IGFycmF5SW5zZXJ0KG5ld0l0ZW1zLCBpbnNlcnRBdCwgaXRlbSk7XG4gIH1cbiAgcmV0dXJuIG5ld0l0ZW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlOiBWaXNTdGF0ZSwgbGF5ZXJDb25maWc6IGFueSk6IExheWVyIHwgbnVsbCB7XG4gIC8vIGNoZWNrIGlmIHRoZSBsYXllciBjb25maWcgaXMgcGFyc2VkXG4gIGNvbnN0IHBhcnNlZExheWVyQ29uZmlnID0gaXNTYXZlZExheWVyQ29uZmlnVjEobGF5ZXJDb25maWcpXG4gICAgPyBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbGF5ZXJDb25maWcpXG4gICAgOiBsYXllckNvbmZpZztcblxuICBpZiAoIXBhcnNlZExheWVyQ29uZmlnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gZmlyc3QgdmFsaWRhdGUgY29uZmlnIGFnYWluc3QgZGF0YXNldFxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBbcGFyc2VkTGF5ZXJDb25maWddLFxuICAgIHthbGxvd0VtcHR5Q29sdW1uOiB0cnVlfVxuICApO1xuXG4gIGlmIChmYWlsZWQ/Lmxlbmd0aCB8fCAhdmFsaWRhdGVkLmxlbmd0aCkge1xuICAgIC8vIGZhaWxlZFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZWRbMF07XG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgZmlsdGVyIGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUZpbHRlcihcbiAgbmV3RmlsdGVyOiBGaWx0ZXIsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkRmlsdGVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoe2ZpbHRlcnM6IFtuZXdGaWx0ZXJdfSwgc2NoZW1hKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8uZmlsdGVycz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgbGF5ZXIgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTGF5ZXIoXG4gIG5ld0xheWVyOiBMYXllcixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRMYXllciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKFxuICAgIHtsYXllcnM6IFtuZXdMYXllcl0sIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZF19LFxuICAgIHNjaGVtYVxuICApO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5sYXllcnM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGVmZmVjdCBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVFZmZlY3QoXG4gIG5ld0VmZmVjdDogRWZmZWN0VHlwZSxcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRFZmZlY3QgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShcbiAgICB7ZWZmZWN0czogW25ld0VmZmVjdF0sIGVmZmVjdE9yZGVyOiBbbmV3RWZmZWN0LmlkXX0sXG4gICAgc2NoZW1hXG4gICk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmVmZmVjdHM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgdmlzIHN0YXRlIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplVmlzU3RhdGUoXG4gIHZpc1N0YXRlOiBQYXJ0aWFsPFZpc1N0YXRlPixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRWaXNTdGF0ZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNhdmVkU3RhdGUgPSBzY2hlbWEuZ2V0Q29uZmlnVG9TYXZlKHtcbiAgICB2aXNTdGF0ZVxuICB9KTtcbiAgcmV0dXJuIHNhdmVkU3RhdGUgPyBzY2hlbWEucGFyc2VTYXZlZENvbmZpZyhzYXZlZFN0YXRlKT8udmlzU3RhdGUgOiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIE1lcmdlIGxheWVycyBmcm9tIGRlLXNlcmlhbGl6ZWQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGxheWVyc1RvTWVyZ2U6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gZnJvbUNvbmZpZ1xuICAgID8gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMobGF5ZXJzVG9NZXJnZSlcbiAgICA6IHN0YXRlLnByZXNlcnZlTGF5ZXJPcmRlcjtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGxheWVyc1RvTWVyZ2UpIHx8ICFsYXllcnNUb01lcmdlLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBkb24ndCBtZXJnZSBsYXllciBpZiBkYXRhc2V0IGlzIGJlaW5nIG1lcmdlZFxuICBjb25zdCB1bm1lcmdlZDogUGFyc2VkTGF5ZXJbXSA9IFtdO1xuICBjb25zdCB0b01lcmdlOiBQYXJzZWRMYXllcltdID0gW107XG4gIGxheWVyc1RvTWVyZ2UuZm9yRWFjaCgobDogUGFyc2VkTGF5ZXIpID0+IHtcbiAgICBpZiAobD8uY29uZmlnPy5kYXRhSWQgJiYgc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbbC5jb25maWcuZGF0YUlkXSkge1xuICAgICAgdW5tZXJnZWQucHVzaChsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9NZXJnZS5wdXNoKGwpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge3ZhbGlkYXRlZDogbWVyZ2VkTGF5ZXIsIGZhaWxlZH0gPSB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIHRvTWVyZ2VcbiAgKTtcbiAgdW5tZXJnZWQucHVzaCguLi5mYWlsZWQpO1xuICAvLyBwdXQgbmV3IGxheWVycyBpbiBmcm9udCBvZiBjdXJyZW50IGxheWVyc1xuICBjb25zdCB7bmV3TGF5ZXJPcmRlciwgbmV3TGF5ZXJzfSA9IGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICAgIHN0YXRlLmxheWVycyxcbiAgICBtZXJnZWRMYXllcixcbiAgICBzdGF0ZS5sYXllck9yZGVyLFxuICAgIHByZXNlcnZlTGF5ZXJPcmRlclxuICApO1xuXG4gIGxldCBtZXJnZWRTdGF0ZTogUyA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyLFxuICAgIHByZXNlcnZlTGF5ZXJPcmRlcixcbiAgICBsYXllclRvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5sYXllclRvQmVNZXJnZWQsIC4uLnVubWVyZ2VkXVxuICB9O1xuXG4gIC8vIEFwcGx5IHBlbmRpbmcgbGF5ZXJPcmRlciB3aXRoIGdyb3VwcyBpZiBsYXllcnMgYXJlIG5vdyBhdmFpbGFibGVcbiAgaWYgKG1lcmdlZFN0YXRlLmxheWVyT3JkZXJUb0JlTWVyZ2VkICYmIG1lcmdlZFN0YXRlLmxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgc2F2ZWRPcmRlciA9IG1lcmdlZFN0YXRlLmxheWVyT3JkZXJUb0JlTWVyZ2VkO1xuICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VMYXllck9yZGVyKG1lcmdlZFN0YXRlLCBzYXZlZE9yZGVyKTtcbiAgICAvLyBLZWVwIHNhdmVkTGF5ZXJPcmRlciBhdmFpbGFibGUgZm9yIGZ1dHVyZSBkZWZlcnJlZCBsYXllcnNcbiAgICBpZiAobWVyZ2VkU3RhdGUubGF5ZXJUb0JlTWVyZ2VkLmxlbmd0aCA+IDApIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gey4uLm1lcmdlZFN0YXRlLCBsYXllck9yZGVyVG9CZU1lcmdlZDogc2F2ZWRPcmRlcn07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gIGN1cnJlbnRMYXllcnMsXG4gIGxheWVyc1RvSW5zZXJ0LFxuICBjdXJyZW50T3JkZXIsXG4gIHByZXNlcnZlZE9yZGVyOiBzdHJpbmdbXSA9IFtdXG4pIHtcbiAgaWYgKCFsYXllcnNUb0luc2VydD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtuZXdMYXllcnM6IGN1cnJlbnRMYXllcnMsIG5ld0xheWVyT3JkZXI6IGN1cnJlbnRPcmRlcn07XG4gIH1cblxuICBjb25zdCBjdXJyZW50TGF5ZXJRdWV1ZSA9IGN1cnJlbnRPcmRlclxuICAgIC5maWx0ZXIoZW50cnkgPT4gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJylcbiAgICAubWFwKGlkID0+IGZpbmRCeUlkKGlkKShjdXJyZW50TGF5ZXJzKSlcbiAgICAuZmlsdGVyKGxheWVyID0+IEJvb2xlYW4obGF5ZXIpKTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gY3VycmVudExheWVycy5jb25jYXQobGF5ZXJzVG9JbnNlcnQpO1xuICBjb25zdCBuZXdMYXllck9yZGVyUXVldWUgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIGN1cnJlbnRMYXllclF1ZXVlLFxuICAgIGxheWVyc1RvSW5zZXJ0LFxuICAgIHByZXNlcnZlZE9yZGVyLFxuICAgIHRydWVcbiAgKTtcblxuICBjb25zdCBuZXdGbGF0TGF5ZXJPcmRlciA9IGdldExheWVyT3JkZXJGcm9tTGF5ZXJzKG5ld0xheWVyT3JkZXJRdWV1ZSk7XG5cbiAgLy8gSWYgbm8gZ3JvdXBzIGV4aXN0IGluIGN1cnJlbnQgb3JkZXIsIGp1c3QgdXNlIHRoZSBuZXcgZmxhdCBvcmRlclxuICBjb25zdCBoYXNHcm91cHMgPSBjdXJyZW50T3JkZXIuc29tZShlbnRyeSA9PiBpc1BsYWluT2JqZWN0KGVudHJ5KSk7XG4gIGlmICghaGFzR3JvdXBzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5ld0xheWVyT3JkZXI6IG5ld0ZsYXRMYXllck9yZGVyLFxuICAgICAgbmV3TGF5ZXJzXG4gICAgfTtcbiAgfVxuXG4gIC8vIFJlYnVpbGQgbGF5ZXJPcmRlciBwcmVzZXJ2aW5nIGdyb3VwcyBpbiB0aGVpciByZWxhdGl2ZSBwb3NpdGlvbnMuXG4gIC8vIFJlcGxhY2UgZWFjaCBzdHJpbmcgZW50cnkgd2l0aCBpdHMgdXBkYXRlZCBwb3NpdGlvbiBmcm9tIG5ld0ZsYXRMYXllck9yZGVyLFxuICAvLyBhbmQga2VlcCBncm91cHMgYXMtaXMuXG4gIGNvbnN0IGV4aXN0aW5nRmxhdElkcyA9IG5ldyBTZXQoXG4gICAgY3VycmVudE9yZGVyLmZpbHRlcihlbnRyeSA9PiB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSBhcyBzdHJpbmdbXVxuICApO1xuICBjb25zdCBuZXdJbnNlcnRlZElkcyA9IG5ld0ZsYXRMYXllck9yZGVyLmZpbHRlcihpZCA9PiAhZXhpc3RpbmdGbGF0SWRzLmhhcyhpZCkpO1xuXG4gIC8vIFJlYnVpbGQ6IHdhbGsgdGhyb3VnaCBjdXJyZW50T3JkZXIsIHJlcGxhY2Ugc3RyaW5nIGVudHJpZXMgd2l0aCB0aGVpclxuICAvLyBuZXcgcG9zaXRpb24gZXF1aXZhbGVudHMgZnJvbSBuZXdGbGF0TGF5ZXJPcmRlciwgdGhlbiBhcHBlbmQgYW55IG5ld2x5IGluc2VydGVkIGxheWVyc1xuICBjb25zdCByZXN1bHQ6IExheWVyT3JkZXIgPSBbXTtcbiAgY29uc3QgZmxhdFF1ZXVlID0gWy4uLm5ld0ZsYXRMYXllck9yZGVyLmZpbHRlcihpZCA9PiBleGlzdGluZ0ZsYXRJZHMuaGFzKGlkKSldO1xuICBsZXQgZmxhdElkeCA9IDA7XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBjdXJyZW50T3JkZXIpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlcGxhY2Ugd2l0aCBjb3JyZXNwb25kaW5nIGVudHJ5IGZyb20gcmVvcmRlcmVkIGZsYXQgbGlzdFxuICAgICAgaWYgKGZsYXRJZHggPCBmbGF0UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGZsYXRRdWV1ZVtmbGF0SWR4XSk7XG4gICAgICAgIGZsYXRJZHgrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBcHBlbmQgYW55IG5ld2x5IGluc2VydGVkIGxheWVycyBhdCB0aGUgZnJvbnQgKHRoZXkgYXJlIG5ldylcbiAgcmV0dXJuIHtcbiAgICBuZXdMYXllck9yZGVyOiBbLi4ubmV3SW5zZXJ0ZWRJZHMsIC4uLnJlc3VsdF0sXG4gICAgbmV3TGF5ZXJzXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2Ugc2F2ZWQgbGF5ZXJPcmRlciB3aXRoIGN1cnJlbnQgc3RhdGUgdG8gcmVzdG9yZSBsYXllciBncm91cHMuXG4gKiBDYWxsZWQgYWZ0ZXIgbGF5ZXJzIGhhdmUgYmVlbiBtZXJnZWQuIElmIHRoZSBzYXZlZCBjb25maWcgY29udGFpbnMgYSBsYXllck9yZGVyXG4gKiB3aXRoIGdyb3VwcywgdGhpcyByZXBsYWNlcyB0aGUgZmxhdCBsYXllck9yZGVyIHdpdGggdGhlIHNhdmVkIGhpZXJhcmNoaWNhbCBvbmUsXG4gKiBmaWx0ZXJpbmcgb3V0IGFueSBsYXllciBJRHMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgY3VycmVudCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJPcmRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgc2F2ZWRMYXllck9yZGVyPzogYW55W10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgaWYgKCFzYXZlZExheWVyT3JkZXIgfHwgIUFycmF5LmlzQXJyYXkoc2F2ZWRMYXllck9yZGVyKSB8fCBzYXZlZExheWVyT3JkZXIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHNhdmVkIGxheWVyT3JkZXIgY29udGFpbnMgYW55IGdyb3Vwc1xuICBjb25zdCBoYXNHcm91cHMgPSBzYXZlZExheWVyT3JkZXIuc29tZShlbnRyeSA9PiBpc1BsYWluT2JqZWN0KGVudHJ5KSk7XG4gIGlmICghaGFzR3JvdXBzKSB7XG4gICAgLy8gTm8gZ3JvdXBzIC0gdGhlIGxheWVyIG1lcmdlciBhbHJlYWR5IGhhbmRsZWQgb3JkZXJpbmcgdmlhIHByZXNlcnZlTGF5ZXJPcmRlclxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIGxheWVycyBoYXZlbid0IGJlZW4gbWVyZ2VkIHlldCwgc3RvcmUgZm9yIGxhdGVyXG4gIGlmIChzdGF0ZS5sYXllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IHNhdmVkTGF5ZXJPcmRlclxuICAgIH07XG4gIH1cblxuICAvLyBCdWlsZCBhIHNldCBvZiB2YWxpZCBsYXllciBJRHMgZnJvbSBjdXJyZW50IHN0YXRlXG4gIGNvbnN0IHZhbGlkTGF5ZXJJZHMgPSBuZXcgU2V0KHN0YXRlLmxheWVycy5tYXAobCA9PiBsLmlkKSk7XG5cbiAgLy8gUmVjdXJzaXZlbHkgZmlsdGVyIHRoZSBzYXZlZCBsYXllck9yZGVyIHRvIG9ubHkgaW5jbHVkZSB2YWxpZCBsYXllcnNcbiAgZnVuY3Rpb24gZmlsdGVyTGF5ZXJPcmRlcihvcmRlcjogYW55W10pOiBMYXllck9yZGVyIHtcbiAgICBjb25zdCByZXN1bHQ6IExheWVyT3JkZXIgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIG9yZGVyKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkR3JvdXBPcmRlciA9IGZpbHRlckxheWVyT3JkZXIoZ3JvdXAubGF5ZXJPcmRlcik7XG4gICAgICAgIC8vIEtlZXAgdGhlIGdyb3VwIGV2ZW4gaWYgZW1wdHkgKHVzZXIgbWF5IHdhbnQgdGhlIGVtcHR5IGdyb3VwKVxuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogZmlsdGVyZWRHcm91cE9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnICYmIHZhbGlkTGF5ZXJJZHMuaGFzKGVudHJ5KSkge1xuICAgICAgICByZXN1bHQucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBjb25zdCByZXN0b3JlZExheWVyT3JkZXIgPSBmaWx0ZXJMYXllck9yZGVyKHNhdmVkTGF5ZXJPcmRlcik7XG5cbiAgLy8gRmluZCBhbnkgbGF5ZXJzIGluIHRoZSBjdXJyZW50IHN0YXRlIHRoYXQgYXJlbid0IGluIHRoZSByZXN0b3JlZCBvcmRlclxuICAvLyAoY291bGQgaGFwcGVuIGlmIGxheWVycyB3ZXJlIGFkZGVkIGJldHdlZW4gc2F2ZSBhbmQgbG9hZClcbiAgY29uc3QgbGF5ZXJJZHNJblJlc3RvcmVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZ1bmN0aW9uIGNvbGxlY3RJZHMob3JkZXI6IGFueVtdKSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBvcmRlcikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICAgIGNvbGxlY3RJZHMoKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCkubGF5ZXJPcmRlcik7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbGF5ZXJJZHNJblJlc3RvcmVkLmFkZChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbGxlY3RJZHMocmVzdG9yZWRMYXllck9yZGVyKTtcblxuICAvLyBBZGQgYW55IG1pc3NpbmcgbGF5ZXJzIGF0IHRoZSB0b3BcbiAgY29uc3QgbWlzc2luZ0xheWVycyA9IHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiAhbGF5ZXJJZHNJblJlc3RvcmVkLmhhcyhsLmlkKSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllck9yZGVyOiBbLi4ubWlzc2luZ0xheWVycywgLi4ucmVzdG9yZWRMYXllck9yZGVyXSxcbiAgICBsYXllck9yZGVyVG9CZU1lcmdlZDogbnVsbFxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGludGVyYWN0aW9ucyB3aXRoIHNhdmVkIGNvbmZpZ1xuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSW50ZXJhY3Rpb25zPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gfCB1bmRlZmluZWRcbik6IFMge1xuICBjb25zdCBtZXJnZWQ6IE5lc3RlZFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gPSB7fTtcbiAgY29uc3QgdW5tZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gPSB7fTtcblxuICBpZiAoaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKSB7XG4gICAgKE9iamVjdC5rZXlzKGludGVyYWN0aW9uVG9CZU1lcmdlZCkgYXMgQXJyYXk8a2V5b2YgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICghc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPVxuICAgICAgICBrZXkgPT09ICd0b29sdGlwJyB8fCBrZXkgPT09ICdicnVzaCcgfHwga2V5ID09PSAnZ2VvY29kZXInXG4gICAgICAgICAgPyBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLmNvbmZpZ1xuICAgICAgICAgIDogbnVsbDtcblxuICAgICAgY29uc3Qge2VuYWJsZWQsIC4uLmNvbmZpZ1NhdmVkfSA9IGludGVyYWN0aW9uVG9CZU1lcmdlZFtrZXldIHx8IHt9O1xuXG4gICAgICBsZXQgY29uZmlnVG9NZXJnZSA9IGNvbmZpZ1NhdmVkO1xuXG4gICAgICBpZiAoa2V5ID09PSAndG9vbHRpcCcpIHtcbiAgICAgICAgY29uc3Qge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH0gPSBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb25maWdTYXZlZCBhcyBTYXZlZEludGVyYWN0aW9uQ29uZmlnWyd0b29sdGlwJ11cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBtZXJnZSBuZXcgZGF0YXNldCB0b29sdGlwcyB3aXRoIG9yaWdpbmFsIGRhdGFzZXQgdG9vbHRpcHNcbiAgICAgICAgY29uZmlnVG9NZXJnZSA9IHtcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICAgIC4uLihjdXJyZW50Q29uZmlnIGFzIFRvb2x0aXBJbmZvWydjb25maWcnXSkuZmllbGRzVG9TaG93LFxuICAgICAgICAgICAgLi4ubWVyZ2VkVG9vbHRpcFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModW5tZXJnZWRUb29sdGlwKS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgdW5tZXJnZWQudG9vbHRpcCA9IHtmaWVsZHNUb1Nob3c6IHVubWVyZ2VkVG9vbHRpcCwgZW5hYmxlZDogQm9vbGVhbihlbmFibGVkKX07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWVyZ2VkW2tleV0gPSB7XG4gICAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0sXG4gICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCksXG4gICAgICAgIC4uLihjdXJyZW50Q29uZmlnXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmZpZzogcGljayhcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAuLi5jdXJyZW50Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgLi4uY29uZmlnVG9NZXJnZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudENvbmZpZylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIC4uLm1lcmdlZFxuICAgIH0sXG4gICAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24oc3RhdGUsIHVubWVyZ2VkKVxuICB9O1xuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzKGNvbmZpZ3M6IFNhdmVkSW50ZXJhY3Rpb25Db25maWdbXSk6IFNhdmVkSW50ZXJhY3Rpb25Db25maWcge1xuICBjb25zdCBjb21iaW5lZCA9IHsuLi5jb25maWdzWzBdfTtcbiAgLy8gaGFuZGxlIGVhY2ggcHJvcGVydHkga2V5IG9mIGFuIGBJbnRlcmFjdGlvbkNvbmZpZ2AsIGUuZy4gdG9vbHRpcCwgZ2VvY29kZXIsIGJydXNoLCBjb29yZGluYXRlXG4gIC8vIGJ5IGNvbWJpbmluZyB2YWx1ZXMgZm9yIGVhY2ggYW1vbmcgYWxsIHBhc3NlZCBpbiBjb25maWdzXG5cbiAgZm9yIChjb25zdCBrZXkgaW4gY29tYmluZWQpIHtcbiAgICBjb25zdCB0b0JlQ29tYmluZWRQcm9wcyA9IGNvbmZpZ3MubWFwKGMgPT4gY1trZXldKTtcblxuICAgIC8vIGFsbCBvZiB0aGVzZSBoYXZlIGFuIGVuYWJsZWQgYm9vbGVhblxuICAgIGNvbWJpbmVkW2tleV0gPSB7XG4gICAgICAvLyBhcmUgYW55IG9mIHRoZSBjb25maWdzJyBlbmFibGVkIHZhbHVlcyB0cnVlP1xuICAgICAgZW5hYmxlZDogdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmVuYWJsZWQpXG4gICAgfTtcblxuICAgIGlmIChrZXkgPT09ICd0b29sdGlwJykge1xuICAgICAgLy8gYXJlIGFueSBvZiB0aGUgY29uZmlncycgY29tcGFyZU1vZGUgdmFsdWVzIHRydWU/XG4gICAgICBjb21iaW5lZFtrZXldLmNvbXBhcmVNb2RlID0gdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmNvbXBhcmVNb2RlKTtcblxuICAgICAgLy8gcmV0dXJuIHRoZSBjb21wYXJlIHR5cGUgbW9kZSwgaXQgd2lsbCBiZSBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmVcbiAgICAgIGNvbWJpbmVkW2tleV0uY29tcGFyZVR5cGUgPSBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShcbiAgICAgICAgdG9CZUNvbWJpbmVkUHJvcHMubWFwKHAgPT4gcC5jb21wYXJlVHlwZSlcbiAgICAgICk7XG5cbiAgICAgIC8vIGNvbWJpbmUgZmllbGRzVG9TaG93IGFtb25nIGFsbCBkYXRhc2V0IGlkc1xuICAgICAgY29tYmluZWRba2V5XS5maWVsZHNUb1Nob3cgPSB0b0JlQ29tYmluZWRQcm9wc1xuICAgICAgICAubWFwKHAgPT4gcC5maWVsZHNUb1Nob3cpXG4gICAgICAgIC5yZWR1Y2UoKGFjYywgbmV4dEZpZWxkc1RvU2hvdykgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgbmV4dERhdGFJZEtleSBpbiBuZXh0RmllbGRzVG9TaG93KSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0VG9vbHRpcEZpZWxkcyA9IG5leHRGaWVsZHNUb1Nob3dbbmV4dERhdGFJZEtleV07XG4gICAgICAgICAgICBpZiAoIWFjY1tuZXh0RGF0YUlkS2V5XSkge1xuICAgICAgICAgICAgICAvLyBpZiB0aGUgZGF0YXNldCBpZCBpcyBub3QgcHJlc2VudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgICAgICAgICAgLy8gdGhlbiBhZGQgaXQgd2l0aCBpdHMgdG9vbHRpcCBmaWVsZHNcbiAgICAgICAgICAgICAgYWNjW25leHREYXRhSWRLZXldID0gbmV4dFRvb2x0aXBGaWVsZHM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhlIGRhdGFzZXQgaWQgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBhY2N1bXVsYXRvclxuICAgICAgICAgICAgICAvLyBzbyBvbmx5IGFkZCB0aGUgbmV4dCB0b29sdGlwIGZpZWxkcyBmb3IgdGhpcyBkYXRhc2V0J3MgYXJyYXkgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgcHJlc2VudCxcbiAgICAgICAgICAgICAgLy8gdXNpbmcgdGhlIHRvb2x0aXBGaWVsZC5uYW1lIHByb3BlcnR5IGZvciB1bmlxdWVuZXNzXG4gICAgICAgICAgICAgIG5leHRUb29sdGlwRmllbGRzLmZvckVhY2gobmV4dFRGID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWFjY1tuZXh0RGF0YUlkS2V5XS5maW5kKCh7bmFtZX0pID0+IG5leHRURi5uYW1lID09PSBuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgYWNjW25leHREYXRhSWRLZXldLnB1c2gobmV4dFRGKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JydXNoJykge1xuICAgICAgLy8ga2VlcCB0aGUgYmlnZ2VzdCBicnVzaCBzaXplXG4gICAgICBjb21iaW5lZFtrZXldLnNpemUgPVxuICAgICAgICBhZ2dyZWdhdGUodG9CZUNvbWJpbmVkUHJvcHMsIEFHR1JFR0FUSU9OX1RZUEVTLm1heGltdW0sIHAgPT4gcC5zaXplKSA/PyBudWxsO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdnZW9jb2RlcicpIHtcbiAgICAgIGNvbWJpbmVkW2tleV0ubGltaXRTZWFyY2ggPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8ubGltaXRTZWFyY2gpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZDtcbn1cblxuZnVuY3Rpb24gc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB1bm1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPlxuKSB7XG4gIGlmICghdW5tZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvdykge1xuICAgIHJldHVybiBzdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0b29sdGlwOiB7XG4gICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQudG9vbHRpcCxcbiAgICAgIC4uLih0eXBlb2YgdW5tZXJnZWQ/LnRvb2x0aXA/LmVuYWJsZWQgPT09ICdib29sZWFuJ1xuICAgICAgICA/IHtlbmFibGVkOiB1bm1lcmdlZC50b29sdGlwLmVuYWJsZWR9XG4gICAgICAgIDoge30pLFxuICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93LFxuICAgICAgICAuLi51bm1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzKGludGVyYWN0aW9uQ29uZmlnLCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwPy5maWVsZHNUb1Nob3dbZGF0YUlkXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCxcbiAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgW2RhdGFJZFRvUmVwbGFjZV06IGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwPy5maWVsZHNUb1Nob3dbZGF0YUlkXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBNZXJnZSBzcGxpdE1hcHMgY29uZmlnIHdpdGggY3VycmVudCB2aXNTdGV0ZS5cbiAqIDEuIGlmIGN1cnJlbnQgbWFwIGlzIHNwbGl0LCBidXQgc3BsaXRNYXAgRE9FU05PVCBjb250YWluIG1hcHNcbiAqICAgIDogZG9uJ3QgbWVyZ2UgYW55dGhpbmdcbiAqIDIuIGlmIGN1cnJlbnQgbWFwIGlzIE5PVCBzcGxpdCwgYnV0IHNwbGl0TWFwcyBjb250YWluIG1hcHNcbiAqICAgIDogYWRkIHRvIHNwbGl0TWFwcywgYW5kIGFkZCBjdXJyZW50IGxheWVycyB0byBzcGxpdE1hcHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlU3BsaXRNYXBzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBzcGxpdE1hcHM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ3NwbGl0TWFwcyddID0gW11cbik6IFMge1xuICBjb25zdCBtZXJnZWQgPSBbLi4uc3RhdGUuc3BsaXRNYXBzXTtcbiAgY29uc3QgdW5tZXJnZWQgPSBbXTtcbiAgc3BsaXRNYXBzLmZvckVhY2goKHNtLCBpKSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHNtLmxheWVycyk7XG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgZW50cmllcy5mb3JFYWNoKChbaWQsIHZhbHVlXSkgPT4ge1xuICAgICAgICAvLyBjaGVjayBpZiBsYXllciBleGlzdHNcbiAgICAgICAgY29uc3QgcHVzaFRvID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBpZCkgPyBtZXJnZWQgOiB1bm1lcmdlZDtcblxuICAgICAgICAvLyBjcmVhdGUgbWFwIHBhbmVsIGlmIGN1cnJlbnQgbWFwIGlzIG5vdCBzcGxpdFxuICAgICAgICBwdXNoVG9baV0gPSBwdXNoVG9baV0gfHwge1xuICAgICAgICAgIC8vIGtlZXAgaWRcbiAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICBsYXllcnM6IHB1c2hUbyA9PT0gbWVyZ2VkID8gZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwKHN0YXRlLmxheWVycykgOiBbXVxuICAgICAgICB9O1xuICAgICAgICBwdXNoVG9baV0ubGF5ZXJzID0ge1xuICAgICAgICAgIC4uLnB1c2hUb1tpXS5sYXllcnMsXG4gICAgICAgICAgW2lkXTogdmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSBhcmUgbWVyZ2luZyBpZiB0aGVyZSBhcmUgbm8gbGF5ZXJzIGluIGJvdGggc3BsaXQgbWFwXG4gICAgICBtZXJnZWQucHVzaChzbSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogbWVyZ2VkLFxuICAgIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkLCAuLi51bm1lcmdlZF1cbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBlZmZlY3RzIHdpdGggc2F2ZWQgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVmZmVjdHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGVmZmVjdHM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2VmZmVjdHMnXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBuZXdFZmZlY3RzID0gW1xuICAgIC4uLnN0YXRlLmVmZmVjdHMsXG4gICAgLi4uKGVmZmVjdHMgfHwgW10pXG4gICAgICAubWFwKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBmcm9tQ29uZmlnXG4gICAgICAgICAgPyBjcmVhdGVFZmZlY3QoXG4gICAgICAgICAgICAgIGRlZXBtZXJnZS5hbGwoW1xuICAgICAgICAgICAgICAgIGVmZmVjdCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAvLyBjb2xsYXBzZSBhbGwgcGFuZWxzIHdoZW4gbG9hZGluZyBlZmZlY3RzXG4gICAgICAgICAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiAoZWZmZWN0IGFzIEVmZmVjdFR5cGUpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoZWZmZWN0ID0+IHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZWZmZWN0ICYmIGVmZmVjdC5pc1ZhbGlkVG9TYXZlKCkpO1xuICAgICAgfSlcbiAgXTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyOiBuZXdFZmZlY3RzLm1hcChlZmZlY3QgPT4gZWZmZWN0LmlkKVxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGFubm90YXRpb25zIHdpdGggc2F2ZWQgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFubm90YXRpb25zPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGFubm90YXRpb25zOiBhbnlbXSk6IFMge1xuICBpZiAoIWFubm90YXRpb25zIHx8ICFhbm5vdGF0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0KHN0YXRlLmFubm90YXRpb25zLm1hcChhID0+IGEuaWQpKTtcbiAgY29uc3QgdmFsaWRBbm5vdGF0aW9ucyA9IGFubm90YXRpb25zXG4gICAgLmZpbHRlcihcbiAgICAgIGEgPT5cbiAgICAgICAgYSAmJlxuICAgICAgICBhLmlkICYmXG4gICAgICAgICFleGlzdGluZ0lkcy5oYXMoYS5pZCkgJiZcbiAgICAgICAgaXNBbm5vdGF0aW9uS2luZChhLmtpbmQpICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkoYS5hbmNob3JQb2ludCkgJiZcbiAgICAgICAgYS5hbmNob3JQb2ludC5sZW5ndGggPT09IDJcbiAgICApXG4gICAgLm1hcChhID0+ICh7XG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBhdXRvU2l6ZTogdHJ1ZSxcbiAgICAgIGF1dG9TaXplWTogdHJ1ZSxcbiAgICAgIGxhYmVsOiAnJyxcbiAgICAgIGxpbmVDb2xvcjogSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gICAgICBsaW5lV2lkdGg6IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICAgICAgdGV4dFdpZHRoOiAwLFxuICAgICAgdGV4dEhlaWdodDogMCxcbiAgICAgIC4uLmFcbiAgICB9KSk7XG4gIGlmICghdmFsaWRBbm5vdGF0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogWy4uLnN0YXRlLmFubm90YXRpb25zLCAuLi52YWxpZEFubm90YXRpb25zXVxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAgd2l0aCBzYXZlZCBjb25maWcsXG4gKiB2YWxpZGF0ZSBmaWVsZHNUb1Nob3dcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEBwYXJhbSB0b29sdGlwQ29uZmlnXG4gKiBAcmV0dXJuIC0ge21lcmdlZFRvb2x0aXA6IHt9LCB1bm1lcmdlZFRvb2x0aXA6IHt9fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgdG9vbHRpcENvbmZpZzogUGljazxUb29sdGlwSW5mb1snY29uZmlnJ10sICdmaWVsZHNUb1Nob3cnPiB8IG51bGwgPSBudWxsXG4pIHtcbiAgY29uc3QgdW5tZXJnZWRUb29sdGlwOiBUb29sdGlwSW5mb1snY29uZmlnJ11bJ2ZpZWxkc1RvU2hvdyddID0ge307XG4gIGNvbnN0IG1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcblxuICBpZiAoXG4gICAgIXRvb2x0aXBDb25maWcgfHxcbiAgICAhdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cgfHxcbiAgICAhT2JqZWN0LmtleXModG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cpLmxlbmd0aFxuICApIHtcbiAgICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG4gIH1cblxuICBmb3IgKGNvbnN0IGRhdGFJZCBpbiB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykge1xuICAgIGlmICghc3RhdGUuZGF0YXNldHNbZGF0YUlkXSB8fCBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgICAvLyBpcyBub3QgeWV0IGxvYWRlZFxuICAgICAgdW5tZXJnZWRUb29sdGlwW2RhdGFJZF0gPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBkYXRhc2V0IGlzIGxvYWRlZFxuICAgICAgY29uc3QgYWxsRmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHMubWFwKGQgPT4gZC5uYW1lKTtcbiAgICAgIGNvbnN0IGZvdW5kRmllbGRzVG9TaG93ID0gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXS5maWx0ZXIoZmllbGQgPT5cbiAgICAgICAgYWxsRmllbGRzLmluY2x1ZGVzKGZpZWxkLm5hbWUpXG4gICAgICApO1xuXG4gICAgICBtZXJnZWRUb29sdGlwW2RhdGFJZF0gPSBmb3VuZEZpZWxkc1RvU2hvdztcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG59XG4vKipcbiAqIE1lcmdlIGxheWVyQmxlbmRpbmcgd2l0aCBzYXZlZFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJCbGVuZGluZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgbGF5ZXJCbGVuZGluZzogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJCbGVuZGluZyddXG4pOiBTIHtcbiAgaWYgKGxheWVyQmxlbmRpbmcgJiYgTEFZRVJfQkxFTkRJTkdTW2xheWVyQmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJCbGVuZGluZ1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogQ29tYmluZXMgbXVsdGlwbGUgbGF5ZXIgYmxlbmRpbmcgY29uZmlncyBpbnRvIGEgc2luZ2xlIHN0cmluZ1xuICogYnkgcmV0dXJuaW5nIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdCBvY2N1cnJlbmNlXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlncyhjb25maWdzOiBzdHJpbmdbXSk6IHN0cmluZyB8IG51bGwge1xuICAvLyByZXR1cm4gdGhlIG1vZGUgb2YgdGhlIGxheWVyIGJsZW5kaW5nIHR5cGVcbiAgcmV0dXJuIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MpO1xufVxuXG4vKipcbiAqIE1lcmdlIG92ZXJsYXlCbGVuZGluZyB3aXRoIHNhdmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU92ZXJsYXlCbGVuZGluZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgb3ZlcmxheUJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydvdmVybGF5QmxlbmRpbmcnXVxuKTogUyB7XG4gIGlmIChvdmVybGF5QmxlbmRpbmcgJiYgT1ZFUkxBWV9CTEVORElOR1Nbb3ZlcmxheUJsZW5kaW5nXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG92ZXJsYXlCbGVuZGluZ1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogQ29tYmluZXMgbXVsdGlwbGUgb3ZlcmxheSBibGVuZGluZyBjb25maWdzIGludG8gYSBzaW5nbGUgc3RyaW5nXG4gKiBieSByZXR1cm5pbmcgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IG9jY3VycmVuY2VcbiAqKi9cbmZ1bmN0aW9uIGNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzKGNvbmZpZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgb3ZlcmxheSBibGVuZGluZyB0eXBlXG4gIHJldHVybiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShjb25maWdzKTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbmltYXRpb24gY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFuaW1hdGlvbkNvbmZpZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYW5pbWF0aW9uOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydhbmltYXRpb25Db25maWcnXVxuKTogUyB7XG4gIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLmN1cnJlbnRUaW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgLi4uYW5pbWF0aW9uLFxuICAgICAgICBkb21haW46IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lQW5pbWF0aW9uQ29uZmlncyhjb25maWdzOiBTYXZlZEFuaW1hdGlvbkNvbmZpZ1tdKTogU2F2ZWRBbmltYXRpb25Db25maWcge1xuICAvLyBnZXQgdGhlIHNtYWxsZXN0IHZhbHVlcyBvZiBjdXJyZW50VGltZSBhbmQgc3BlZWQgYW1vbmcgYWxsIGNvbmZpZ3NcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VGltZTogYWdncmVnYXRlKGNvbmZpZ3MsIEFHR1JFR0FUSU9OX1RZUEVTLm1pbmltdW0sIGMgPT4gYy5jdXJyZW50VGltZSkgPz8gbnVsbCxcbiAgICBzcGVlZDogYWdncmVnYXRlKGNvbmZpZ3MsIEFHR1JFR0FUSU9OX1RZUEVTLm1pbmltdW0sIGMgPT4gYy5zcGVlZCkgPz8gbnVsbFxuICB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbHVtbnMgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKlxuICogQHBhcmFtIGZpZWxkc1xuICogQHBhcmFtIHNhdmVkQ29sc1xuICogQHBhcmFtIGVtcHR5Q29sc1xuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm4gLSB2YWxpZGF0ZWQgY29sdW1ucyBvciBudWxsXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBzYXZlZENvbHM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH0gPSB7fSxcbiAgZW1wdHlDb2xzOiBMYXllckNvbHVtbnMsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pIHtcbiAgLy8gUHJlcGFyZSBjb2x1bW5zIGZvciB0aGUgdmFsaWRhdG9yXG4gIGNvbnN0IGNvbHVtbnM6IHR5cGVvZiBlbXB0eUNvbHMgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZW1wdHlDb2xzKSkge1xuICAgIGNvbHVtbnNba2V5XSA9IHsuLi5lbXB0eUNvbHNba2V5XX07XG5cbiAgICBjb25zdCBzYXZlZCA9IHNhdmVkQ29sc1trZXldO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgY29uc3QgZmllbGRJZHggPSBmaWVsZHMuZmluZEluZGV4KCh7bmFtZX0pID0+IG5hbWUgPT09IHNhdmVkKTtcblxuICAgICAgaWYgKGZpZWxkSWR4ID4gLTEpIHtcbiAgICAgICAgLy8gdXBkYXRlIGZvdW5kIGNvbHVtbnNcbiAgICAgICAgY29sdW1uc1trZXldLmZpZWxkSWR4ID0gZmllbGRJZHg7XG4gICAgICAgIGNvbHVtbnNba2V5XS52YWx1ZSA9IHNhdmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGZpbmQgYWN0dWFsIGNvbHVtbiBmaWVsZElkeCwgaW4gY2FzZSBpdCBoYXMgY2hhbmdlZFxuICBjb25zdCBhbGxDb2xGb3VuZCA9IE9iamVjdC5rZXlzKGNvbHVtbnMpLmV2ZXJ5KGtleSA9PlxuICAgIHZhbGlkYXRlQ29sdW1uKGNvbHVtbnNba2V5XSwgY29sdW1ucywgZmllbGRzKVxuICApO1xuXG4gIGNvbnN0IHJ2ID0gYWxsQ29sRm91bmQgPyBjb2x1bW5zIDogbnVsbDtcbiAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgY29uc3QgcmVxdWlyZWRDb2x1bW5zID0gT2JqZWN0LmtleXMoZW1wdHlDb2xzKS5maWx0ZXIoayA9PiAhZW1wdHlDb2xzW2tdLm9wdGlvbmFsKTtcbiAgICBjb25zdCBtaXNzaW5nQ29sdW1ucyA9IHJlcXVpcmVkQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdLnZhbHVlKTtcbiAgICBpZiAobWlzc2luZ0NvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBtaXNzaW5nIG9yIGludmFsaWQgY29sdW1uczogJHttaXNzaW5nQ29sdW1ucy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBjb25zdCBjb25maWdDb2x1bW5zID0gT2JqZWN0LmtleXMoc2F2ZWRDb2xzKTtcbiAgICBjb25zdCBpbnZhbGlkQ29sdW1ucyA9IGNvbmZpZ0NvbHVtbnMuZmlsdGVyKGsgPT4gIWNvbHVtbnM/LltrXT8udmFsdWUpO1xuICAgIGlmIChpbnZhbGlkQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgY29sdW1uczogJHtpbnZhbGlkQ29sdW1ucy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBydjtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBsYXllciBjb2x1bW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ29sdW1uKFxuICBjb2x1bW46IExheWVyQ29sdW1uICYge3ZhbGlkYXRvcj86IHR5cGVvZiB2YWxpZGF0ZUNvbHVtbn0sXG4gIGNvbHVtbnM6IExheWVyQ29sdW1ucyxcbiAgYWxsRmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ11cbik6IGJvb2xlYW4ge1xuICBpZiAoY29sdW1uLm9wdGlvbmFsIHx8IGNvbHVtbi52YWx1ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChjb2x1bW4udmFsaWRhdG9yKSB7XG4gICAgcmV0dXJuIGNvbHVtbi52YWxpZGF0b3IoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCB0ZXh0IGxhYmVsIGNvbmZpZyB3aXRoIG5ldyBkYXRhXG4gKiByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFRleHRMYWJlbFNjaGVtYVYxXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBmaWVsZHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzYXZlZFRleHRMYWJlbFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdH0gLSB2YWxpZGF0ZWQgdGV4dGxhYmVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKFxuICBmaWVsZHMsXG4gIFtsYXllclRleHRMYWJlbF0sXG4gIHNhdmVkVGV4dExhYmVsLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKSB7XG4gIGNvbnN0IHNhdmVkVGV4dExhYmVscyA9IEFycmF5LmlzQXJyYXkoc2F2ZWRUZXh0TGFiZWwpID8gc2F2ZWRUZXh0TGFiZWwgOiBbc2F2ZWRUZXh0TGFiZWxdO1xuXG4gIC8vIHZhbGlkYXRlIGZpZWxkXG4gIHJldHVybiBzYXZlZFRleHRMYWJlbHMubWFwKHRleHRMYWJlbCA9PiB7XG4gICAgY29uc3QgZmllbGQgPSB0ZXh0TGFiZWwuZmllbGRcbiAgICAgID8gZmllbGRzLmZpbmQoZmQgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyh0ZXh0TGFiZWwuZmllbGQpLmV2ZXJ5KGtleSA9PiB0ZXh0TGFiZWwuZmllbGRba2V5XSA9PT0gZmRba2V5XSlcbiAgICAgICAgKVxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdGV4dCBsYWJlbCBmaWVsZDogJHtKU09OLnN0cmluZ2lmeSh0ZXh0TGFiZWwuZmllbGQpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYXllclRleHRMYWJlbCkucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGtleSA9PT0gJ2ZpZWxkJyA/IGZpZWxkIDogdGV4dExhYmVsW2tleV0gfHwgbGF5ZXJUZXh0TGFiZWxba2V5XVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFNhdmVkIHZpc3VhbCBjaGFubmVsIGZpZWxkL3NjYWxlIG1heSBsaXZlIGluIGFueSBvZjpcbiAqIC0gYGNvbmZpZ1trZXldYCBhZnRlciBzY2hlbWEgcGFyc2UgKFZpc3VhbENoYW5uZWxTY2hlbWFWMSBmb2xkcyBjaGFubmVscyBpbnRvIGNvbmZpZylcbiAqIC0gYHZpc3VhbENoYW5uZWxzW2tleV1gIGFzIGEgc2libGluZyBvZiBgY29uZmlnYCAodW5wYXJzZWQgYWRkRGF0YVRvTWFwIHBheWxvYWQpXG4gKiAtIGBjb25maWcudmlzdWFsQ2hhbm5lbHNba2V5XWAgKGNvbW1vbiBtaXN0YWtlIG9mIG5lc3RpbmcgdmlzdWFsQ2hhbm5lbHMgaW5zaWRlIGNvbmZpZylcbiAqXG4gKiBXaXRob3V0IHRoaXMgbG9va3VwLCBwcm9ncmFtbWF0aWMgR2VvSlNPTiBzdHJva2VDb2xvckZpZWxkIG5ldmVyIGJpbmRzIGFuZFxuICogc3Ryb2tlQ29sb3JEb21haW4gc3RheXMgYXQgdGhlIGRlZmF1bHQgYFswLCAxXWAgKGtlcGxlci5nbCAjMzA2MSkuXG4gKi9cbmZ1bmN0aW9uIGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLCBrZXk6IHN0cmluZyk6IGFueSB7XG4gIGNvbnN0IGNvbmZpZyA9IHNhdmVkTGF5ZXIuY29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQ7XG4gIGlmIChjb25maWcgJiYgY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjb25maWdba2V5XTtcbiAgfVxuICBjb25zdCBjaGFubmVscyA9XG4gICAgKHNhdmVkTGF5ZXIgYXMge3Zpc3VhbENoYW5uZWxzPzogUmVjb3JkPHN0cmluZywgYW55Pn0pLnZpc3VhbENoYW5uZWxzIHx8XG4gICAgKGNvbmZpZyAmJiBjb25maWcudmlzdWFsQ2hhbm5lbHMpO1xuICBpZiAoY2hhbm5lbHMgJiYgdHlwZW9mIGNoYW5uZWxzID09PSAnb2JqZWN0JyAmJiBjaGFubmVsc1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2hhbm5lbHNba2V5XTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHZpc3VhbCBjaGFubmVscyBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKTogbnVsbCB8IExheWVyIHtcbiAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkLCBzY2FsZSwga2V5fSkgPT4ge1xuICAgIGNvbnN0IHNhdmVkRmllbGQgPSBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyLCBmaWVsZCk7XG4gICAgY29uc3Qgc2F2ZWRTY2FsZSA9IGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXIsIHNjYWxlKTtcbiAgICBsZXQgZm91bmRGaWVsZDtcbiAgICBpZiAoc2F2ZWRGaWVsZD8ubmFtZSkge1xuICAgICAgZm91bmRGaWVsZCA9IGZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IHNhdmVkRmllbGQubmFtZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZm91bmRDaGFubmVsID0ge1xuICAgICAgLi4uKGZvdW5kRmllbGQgPyB7W2ZpZWxkXTogZm91bmRGaWVsZH0gOiB7fSksXG4gICAgICAuLi4oc2F2ZWRTY2FsZSA/IHtbc2NhbGVdOiBzYXZlZFNjYWxlfSA6IHt9KVxuICAgIH07XG4gICAgaWYgKE9iamVjdC5rZXlzKGZvdW5kQ2hhbm5lbCkubGVuZ3RoKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhmb3VuZENoYW5uZWwpO1xuICAgIH1cblxuICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIGlmIChvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gc2F2ZWRGaWVsZD8ubmFtZTtcbiAgICAgIGlmIChmaWVsZE5hbWUgJiYgZmllbGROYW1lICE9PSBuZXdMYXllci5jb25maWdbZmllbGRdPy5uYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdmlzdWFsIGNoYW5uZWwgZmllbGQ6ICR7ZmllbGR9YCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG50eXBlIFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7XG4gIGFsbG93RW1wdHlDb2x1bW4/OiBib29sZWFuO1xuICB0aHJvd09uRXJyb3I/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgZGF0YXNldHM6IERhdGFzZXRzLFxuICBsYXllckNsYXNzZXM6IFZpc1N0YXRlWydsYXllckNsYXNzZXMnXSxcbiAgbGF5ZXJzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdLFxuICBvcHRpb25zPzogVmFsaWRhdGVMYXllck9wdGlvblxuKSB7XG4gIGNvbnN0IHZhbGlkYXRlZDogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBmYWlsZWQ6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW107XG5cbiAgbGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIGxldCB2YWxpZGF0ZUxheWVyOiBMYXllciB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKGxheWVyPy5jb25maWc/LmRhdGFJZCkge1xuICAgICAgaWYgKGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdKSB7XG4gICAgICAgIC8vIGRhdGFzZXRzIGFyZSBhbHJlYWR5IGxvYWRlZFxuICAgICAgICB2YWxpZGF0ZUxheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICAgICAgICAgIGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdLFxuICAgICAgICAgIGxheWVyLFxuICAgICAgICAgIGxheWVyQ2xhc3NlcyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlTGF5ZXIpIHtcbiAgICAgIHZhbGlkYXRlZC5wdXNoKHZhbGlkYXRlTGF5ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkYXRhc2V0cyBub3QgeWV0IGxvYWRlZFxuICAgICAgZmFpbGVkLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHt2YWxpZGF0ZWQsIGZhaWxlZH07XG59XG5cbi8qKlxuICogR2V0IHJlcXVpcmVkIGNvbHVtbnMgZm9yIHZhbGlkYXRpb24gYmFzZWQgb24gY29sdW1uIG1vZGVcbiAqL1xuZnVuY3Rpb24gX2dldENvbHVtbkNvbmZpZ0ZvclZhbGlkYXRpb24obmV3TGF5ZXIpIHtcbiAgLy8gZmluZCBjb2x1bW4gZmllbGRJZHhcbiAgbGV0IGNvbHVtbkNvbmZpZyA9IG5ld0xheWVyLmdldExheWVyQ29sdW1ucygpO1xuICAvLyBpZiBjb2x1bW5Nb2RlIGlzIGRlZmluZWQsIGZpbmQgY29sdW1uIG1vZGUgY29uZmlnXG4gIGNvbnN0IGNvbE1vZGVDb25maWcgPSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgID8gKG5ld0xheWVyLnN1cHBvcnRlZENvbHVtbk1vZGVzIHx8IFtdKS5maW5kKFxuICAgICAgICBjb2xNb2RlID0+IGNvbE1vZGUua2V5ID09PSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoY29sTW9kZUNvbmZpZykge1xuICAgIC8vIG9ubHkgdmFsaWRhdGUgY29sdW1ucyBpbiBjb2x1bW4gbW9kZVxuICAgIGNvbHVtbkNvbmZpZyA9IFtcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLnJlcXVpcmVkQ29sdW1ucyB8fCBbXSksXG4gICAgICAuLi4oY29sTW9kZUNvbmZpZy5vcHRpb25hbENvbHVtbnMgfHwgW10pXG4gICAgXS5yZWR1Y2UoXG4gICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogY29sdW1uQ29uZmlnW2tleV1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNvbHVtbkNvbmZpZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSxcbiAgc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBvcHRpb25zOiBWYWxpZGF0ZUxheWVyT3B0aW9uID0ge31cbik6IExheWVyIHwgbnVsbCB7XG4gIGNvbnN0IHtmaWVsZHMsIGlkOiBkYXRhSWR9ID0gZGF0YXNldDtcbiAgY29uc3Qge3R5cGV9ID0gc2F2ZWRMYXllcjtcbiAgY29uc3Qge3Rocm93T25FcnJvcn0gPSBvcHRpb25zO1xuICAvLyBsYXllciBkb2VzbnQgaGF2ZSBhIHZhbGlkIHR5cGVcbiAgaWYgKCF0eXBlIHx8ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGF5ZXJDbGFzc2VzLCB0eXBlKSB8fCAhc2F2ZWRMYXllci5jb25maWcpIHtcbiAgICBpZiAodGhyb3dPbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHR5cGUgXCIke3R5cGV9XCIgb3IgY29uZmlnIGlzIG1pc3NpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW3R5cGVdKHtcbiAgICBpZDogc2F2ZWRMYXllci5pZCxcbiAgICBkYXRhSWQsXG4gICAgbGFiZWw6IHNhdmVkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGNvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5jb2xvcixcbiAgICBpc1Zpc2libGU6IHNhdmVkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBoaWRkZW46IHNhdmVkTGF5ZXIuY29uZmlnLmhpZGRlbixcbiAgICBjb2x1bW5Nb2RlOiBzYXZlZExheWVyLmNvbmZpZy5jb2x1bW5Nb2RlLFxuICAgIGhpZ2hsaWdodENvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5oaWdobGlnaHRDb2xvclxuICB9KTtcblxuICBjb25zdCBjb2x1bW5Db25maWcgPSBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcik7XG5cbiAgaWYgKE9iamVjdC5rZXlzKGNvbHVtbkNvbmZpZykpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgICAgIGZpZWxkcyxcbiAgICAgIHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICBjb2x1bW5Db25maWcsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgICBpZiAoY29sdW1ucykge1xuICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBjb2x1bW5zOiB7XG4gICAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICAgICAgLi4uY29sdW1uc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmFsbG93RW1wdHlDb2x1bW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRleHRMYWJlbCA9XG4gICAgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsICYmIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWxcbiAgICAgID8gdmFsaWRhdGVTYXZlZFRleHRMYWJlbChcbiAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbCxcbiAgICAgICAgICBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApXG4gICAgICA6IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWw7XG5cbiAgLy8gY29weSB2aXNDb25maWcgb3ZlciB0byBlbXB0eUxheWVyIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYWxsIHRoZSBwcm9wc1xuICBjb25zdCBjb3BpZWRWaXNDb25maWcgPSBuZXdMYXllci5jb3B5TGF5ZXJDb25maWcoXG4gICAgbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICBzYXZlZExheWVyLmNvbmZpZy52aXNDb25maWcgfHwge30sXG4gICAge1xuICAgICAgc2hhbGxvd0NvcHk6IFsnY29sb3JSYW5nZScsICdzdHJva2VDb2xvclJhbmdlJ11cbiAgICB9XG4gICk7XG5cbiAgLy8gY2FsbCBsYXllciBtZXRob2RzIHRvIHZhbGlkYXRlIHZpc0NvbmZpZyB3aGVuIHN3aXRjaGluZyBkYXRhc2V0XG4gIGNvbnN0IHZpc0NvbmZpZyA9IG5ld0xheWVyLnZhbGlkYXRlVmlzQ29uZmlnXG4gICAgPyBuZXdMYXllci52YWxpZGF0ZVZpc0NvbmZpZyhkYXRhc2V0LCBjb3BpZWRWaXNDb25maWcpXG4gICAgOiBjb3BpZWRWaXNDb25maWc7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIHZpc0NvbmZpZyxcbiAgICB0ZXh0TGFiZWxcbiAgfSk7XG5cbiAgLy8gdmlzdWFsIGNoYW5uZWwgZmllbGQgaXMgc2F2ZWQgdG8gYmUge25hbWUsIHR5cGV9XG4gIC8vIGZpbmQgdmlzdWFsIGNoYW5uZWwgZmllbGQgYnkgbWF0Y2hpbmcgYm90aCBuYW1lIGFuZCB0eXBlXG4gIC8vIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gIG5ld0xheWVyID0gdmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzKGZpZWxkcywgbmV3TGF5ZXIsIHNhdmVkTGF5ZXIsIG9wdGlvbnMpO1xuXG4gIGlmICh0aHJvd09uRXJyb3IpIHtcbiAgICBpZiAoIW5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBpcyBub3QgdmFsaWQgdG8gc2F2ZTogJHtuZXdMYXllci5pZH1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVkaXRvcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBzYXZlZEVkaXRvcjogU2F2ZWRFZGl0b3IpIHtcbiAgaWYgKCFzYXZlZEVkaXRvcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIC4uLihzYXZlZEVkaXRvci5mZWF0dXJlcyB8fCBbXSldLFxuICAgICAgLy8gaWYgc2F2ZWRFZGl0b3IudmlzaWJsZSBpcyB1bmRlZmluZWQga2VlcCBzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgICAgdmlzaWJsZTogc2F2ZWRFZGl0b3IudmlzaWJsZSA/PyBzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUVkaXRvckNvbmZpZ3MoY29uZmlnczogU2F2ZWRFZGl0b3JbXSk6IFNhdmVkRWRpdG9yIHtcbiAgcmV0dXJuIGNvbmZpZ3MucmVkdWNlKFxuICAgIChhY2MsIG5leHRDb25maWcpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFjYyxcbiAgICAgICAgZmVhdHVyZXM6IFsuLi5hY2MuZmVhdHVyZXMsIC4uLihuZXh0Q29uZmlnLmZlYXR1cmVzIHx8IFtdKV1cbiAgICAgIH07XG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBzdGFydCB3aXRoOlxuICAgICAgLy8gLSBlbXB0eSBhcnJheSBmb3IgZmVhdHVyZXMgYWNjdW11bGF0aW9uXG4gICAgICAvLyAtIGFuZCBhcmUgYW55IG9mIHRoZSBjb25maWdzJyB2aXNpYmxlIHZhbHVlcyB0cnVlP1xuICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgdmlzaWJsZTogY29uZmlncy5zb21lKGMgPT4gYz8udmlzaWJsZSlcbiAgICB9XG4gICk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGU6IFZpc1N0YXRlLCBuZXdEYXRhRW50cmllczogRGF0YXNldHMpOiBEYXRhc2V0cyB7XG4gIGNvbnN0IG1lcmdlZCA9IHtcbiAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAuLi5uZXdEYXRhRW50cmllc1xuICB9O1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyKSkge1xuICAgIC8vIHByZXNlcnZlRGF0YXNldE9yZGVyICBtaWdodCBub3QgaW5jbHVkZSB0aGUgIG5ldyBkYXRhc2V0c1xuICAgIGNvbnN0IG5ld0RhdGFzZXRJZHMgPSBPYmplY3Qua2V5cyhtZXJnZWQpLmZpbHRlcihcbiAgICAgIGlkID0+ICFzdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlcj8uaW5jbHVkZXMoaWQpXG4gICAgKTtcbiAgICByZXR1cm4gWy4uLnN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyLCAuLi5uZXdEYXRhc2V0SWRzXS5yZWR1Y2UoXG4gICAgICAoYWNjdSwgZGF0YUlkKSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICAuLi4obWVyZ2VkW2RhdGFJZF0gPyB7W2RhdGFJZF06IG1lcmdlZFtkYXRhSWRdfSA6IHt9KVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG4vKipcbiAqIFNpbWxpYXIgcHVycG9zZSB0byBhZ2dyZWdhdGlvbiB1dGlscyBgZ2V0TW9kZWAgZnVuY3Rpb24sXG4gKiBidXQgcmV0dXJucyB0aGUgbW9kZSBpbiB0aGUgc2FtZSB2YWx1ZSB0eXBlIHdpdGhvdXQgY29lcmNpbmcgdG8gYSBzdHJpbmcuXG4gKiBJdCBpZ25vcmVzIGB1bmRlZmluZWRgIG9yIGBudWxsYCB2YWx1ZXMsIGJ1dCByZXR1cm5zIGBudWxsYCBpZiBubyBtb2RlIGNvdWxkIGJlIGNhbGN1bGF0ZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlPFQ+KGFycjogVFtdKTogVCB8IG51bGwge1xuICBjb25zdCB0YWxseXMgPSBuZXcgTWFwKCk7XG4gIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICBpZiAobm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgaWYgKCF0YWxseXMuaGFzKHZhbHVlKSkge1xuICAgICAgICB0YWxseXMuc2V0KHZhbHVlLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhbGx5cy5zZXQodmFsdWUsIHRhbGx5cy5nZXQodmFsdWUpICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLy8gcmV0dXJuIHRoZSB2YWx1ZSB3aXRoIHRoZSBoaWdoZXN0IHRvdGFsIG9jY3VycmVuY2UgY291bnRcbiAgaWYgKHRhbGx5cy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIFsuLi50YWxseXMuZW50cmllcygpXT8ucmVkdWNlKChhY2MsIG5leHQpID0+IChuZXh0WzFdID4gYWNjWzFdID8gbmV4dCA6IGFjYykpWzBdO1xufVxuXG5leHBvcnQgY29uc3QgVklTX1NUQVRFX01FUkdFUlM6IFZpc1N0YXRlTWVyZ2Vyczxhbnk+ID0gW1xuICB7XG4gICAgbWVyZ2U6IG1lcmdlTGF5ZXJzLFxuICAgIHByb3A6ICdsYXllcnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnbGF5ZXJUb0JlTWVyZ2VkJyxcbiAgICBwcmVzZXJ2ZU9yZGVyOiAncHJlc2VydmVMYXllck9yZGVyJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlTGF5ZXJPcmRlcixcbiAgICBwcm9wOiAnbGF5ZXJPcmRlcidcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUZpbHRlcnMsXG4gICAgcHJvcDogJ2ZpbHRlcnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnZmlsdGVyVG9CZU1lcmdlZCcsXG4gICAgcHJlc2VydmVPcmRlcjogJ3ByZXNlcnZlRmlsdGVyT3JkZXInLFxuICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzOiByZXBsYWNlRmlsdGVyRGF0YXNldElkc1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlRWZmZWN0cyxcbiAgICBwcm9wOiAnZWZmZWN0cydcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUFubm90YXRpb25zLFxuICAgIHByb3A6ICdhbm5vdGF0aW9ucycsXG4gICAgdG9NZXJnZVByb3A6ICdhbm5vdGF0aW9uc1RvQmVNZXJnZWQnXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VJbnRlcmFjdGlvbnMsXG4gICAgcHJvcDogJ2ludGVyYWN0aW9uQ29uZmlnJyxcbiAgICB0b01lcmdlUHJvcDogJ2ludGVyYWN0aW9uVG9CZU1lcmdlZCcsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMsXG4gICAgc2F2ZVVubWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24sXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVJbnRlcmFjdGlvbkNvbmZpZ3NcbiAgfSxcbiAge21lcmdlOiBtZXJnZUxheWVyQmxlbmRpbmcsIHByb3A6ICdsYXllckJsZW5kaW5nJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlnc30sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VPdmVybGF5QmxlbmRpbmcsXG4gICAgcHJvcDogJ292ZXJsYXlCbGVuZGluZycsXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzXG4gIH0sXG4gIHttZXJnZTogbWVyZ2VTcGxpdE1hcHMsIHByb3A6ICdzcGxpdE1hcHMnLCB0b01lcmdlUHJvcDogJ3NwbGl0TWFwc1RvQmVNZXJnZWQnfSxcbiAge21lcmdlOiBtZXJnZUFuaW1hdGlvbkNvbmZpZywgcHJvcDogJ2FuaW1hdGlvbkNvbmZpZycsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lQW5pbWF0aW9uQ29uZmlnc30sXG4gIHttZXJnZTogbWVyZ2VFZGl0b3IsIHByb3A6ICdlZGl0b3InLCBjb21iaW5lQ29uZmlnczogY29tYmluZUVkaXRvckNvbmZpZ3N9XG5dO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQSxPQUFPQSxJQUFJLE1BQU0sd0JBQXdCO0FBQ3pDLE9BQU9DLElBQUksTUFBTSx3QkFBd0I7QUFDekMsT0FBT0MsV0FBVyxNQUFNLCtCQUErQjtBQUN2RCxPQUFPQyxTQUFTLE1BQU0sV0FBVztBQUNqQyxTQUNFQyxXQUFXLEVBQ1hDLDhCQUE4QixFQUM5QkMsc0JBQXNCLEVBQ3RCQyw2QkFBNkIsRUFDN0JDLFFBQVEsRUFDUkMsU0FBUyxFQUNUQyxhQUFhLFFBQ1Isa0JBQWtCO0FBR3pCLFNBQVFDLFlBQVksUUFBTyxvQkFBb0I7QUFDL0MsU0FBUUMsa0JBQWtCLFFBQU8seUJBQXlCO0FBQzFELFNBQ0VDLGlCQUFpQixFQUNqQkMsZUFBZSxFQUNmQyxpQkFBaUIsRUFDakJDLGdCQUFnQixFQUNoQkMsNkJBQTZCLEVBQzdCQyw2QkFBNkIsUUFDeEIsc0JBQXNCO0FBQzdCLFNBQVFDLGVBQWUsUUFBdUQsb0JBQW9CO0FBb0JsRyxTQUErQkMsaUJBQWlC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
|
|
1224
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1bmlxIiwicGljayIsImZsYXR0ZW5EZWVwIiwiZGVlcG1lcmdlIiwiYXJyYXlJbnNlcnQiLCJjb21iaW5lU3BsaXRNYXBzQnlJbmRleCIsImdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsImZpbmRCeUlkIiwiYWdncmVnYXRlIiwiaXNQbGFpbk9iamVjdCIsImNyZWF0ZUVmZmVjdCIsIm5vdE51bGxvclVuZGVmaW5lZCIsIkFHR1JFR0FUSU9OX1RZUEVTIiwiTEFZRVJfQkxFTkRJTkdTIiwiT1ZFUkxBWV9CTEVORElOR1MiLCJpc0Fubm90YXRpb25LaW5kIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCIsIkNVUlJFTlRfVkVSU0lPTiIsImFzc2lnbkdwdUNoYW5uZWxzIiwicmVzZXRGaWx0ZXJHcHVNb2RlIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJtZXJnZUZpbHRlcnMiLCJzdGF0ZSIsImZpbHRlcnNUb01lcmdlIiwiZnJvbUNvbmZpZyIsInByZXNlcnZlRmlsdGVyT3JkZXIiLCJtYXAiLCJsIiwiaWQiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJfdmFsaWRhdGVGaWx0ZXJzVXBkYXQiLCJ2YWxpZGF0ZWQiLCJmYWlsZWQiLCJ1cGRhdGVkRGF0YXNldHMiLCJ1cGRhdGVkRmlsdGVycyIsImluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIiLCJmaWx0ZXJzIiwiZGF0YXNldHNUb0ZpbHRlciIsImYiLCJkYXRhSWQiLCJmaWx0ZXJlZCIsImxheWVycyIsIl9vYmplY3RTcHJlYWQiLCJkYXRhc2V0cyIsImZpbHRlclRvQmVNZXJnZWQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJyZXBsYWNlRmlsdGVyRGF0YXNldElkcyIsInNhdmVkRmlsdGVyIiwiZGF0YUlkVG9Vc2UiLCJyZXBsYWNlZCIsImZvckVhY2giLCJmaWx0ZXIiLCJpbmNsdWRlcyIsIl9maWx0ZXIkcGxvdFR5cGUiLCJuZXdEYXRhSWQiLCJkIiwicGxvdFR5cGUiLCJjb2xvcnNCeURhdGFJZCIsIl9maWx0ZXIkcGxvdFR5cGUyIiwiX3JlZiIsImNvbG9yIiwicmVzdCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5IiwiX2RlZmluZVByb3BlcnR5IiwicHVzaCIsImlzU2F2ZWRMYXllckNvbmZpZ1YxIiwibGF5ZXJDb25maWciLCJ2aXN1YWxDaGFubmVscyIsInBhcnNlTGF5ZXJDb25maWciLCJzY2hlbWEiLCJfc2NoZW1hJHBhcnNlU2F2ZWRDb24iLCJzYXZlZENvbmZpZyIsInZlcnNpb24iLCJjb25maWciLCJ2aXNTdGF0ZSIsImxheWVyT3JkZXIiLCJwYXJzZVNhdmVkQ29uZmlnIiwiY3VycmVudEl0ZW1zIiwiaXRlbXMiLCJwcmVzZXJ2ZWRPcmRlciIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImRlZmF1bHRTdGFydCIsIm5ld0l0ZW1zIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsIml0ZW0iLCJ2YWx1ZSIsImV4cGVjdGVkSWR4IiwiaW5kZXhPZiIsImluc2VydEF0IiwiaSIsInByZWNlZWRJZHgiLCJfbG9vcCIsInByZWNlZWRJdGVtSWQiLCJmaW5kSW5kZXgiLCJlcnIiLCJlIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwicGFyc2VkTGF5ZXJDb25maWciLCJfdmFsaWRhdGVMYXllcnNCeURhdGEiLCJ2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJhbGxvd0VtcHR5Q29sdW1uIiwibmV3TGF5ZXIiLCJ1cGRhdGVMYXllckRvbWFpbiIsInNlcmlhbGl6ZUZpbHRlciIsIm5ld0ZpbHRlciIsIl9zZXJpYWxpemVkVmlzU3RhdGUkZiIsInNlcmlhbGl6ZWRWaXNTdGF0ZSIsInNlcmlhbGl6ZVZpc1N0YXRlIiwic2VyaWFsaXplTGF5ZXIiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGwiLCJzZXJpYWxpemVFZmZlY3QiLCJuZXdFZmZlY3QiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGUiLCJlZmZlY3RzIiwiZWZmZWN0T3JkZXIiLCJfc2NoZW1hJHBhcnNlU2F2ZWRDb24yIiwic2F2ZWRTdGF0ZSIsImdldENvbmZpZ1RvU2F2ZSIsIm1lcmdlTGF5ZXJzIiwibGF5ZXJzVG9NZXJnZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInVubWVyZ2VkIiwidG9NZXJnZSIsIl9sJGNvbmZpZyIsImlzTWVyZ2luZ0RhdGFzZXRzIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhMiIsIm1lcmdlZExheWVyIiwiYXBwbHkiLCJfaW5zZXJ0TGF5ZXJBdFJpZ2h0T3IiLCJpbnNlcnRMYXllckF0UmlnaHRPcmRlciIsIm5ld0xheWVyT3JkZXIiLCJuZXdMYXllcnMiLCJtZXJnZWRTdGF0ZSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXJUb0JlTWVyZ2VkIiwic2F2ZWRPcmRlciIsIm1lcmdlTGF5ZXJPcmRlciIsImN1cnJlbnRMYXllcnMiLCJsYXllcnNUb0luc2VydCIsImN1cnJlbnRPcmRlciIsImN1cnJlbnRMYXllclF1ZXVlIiwiZW50cnkiLCJsYXllciIsIkJvb2xlYW4iLCJuZXdMYXllck9yZGVyUXVldWUiLCJuZXdGbGF0TGF5ZXJPcmRlciIsImhhc0dyb3VwcyIsInNvbWUiLCJleGlzdGluZ0ZsYXRJZHMiLCJTZXQiLCJuZXdJbnNlcnRlZElkcyIsImhhcyIsInJlc3VsdCIsImZsYXRRdWV1ZSIsImZsYXRJZHgiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwic2F2ZWRMYXllck9yZGVyIiwidmFsaWRMYXllcklkcyIsImZpbHRlckxheWVyT3JkZXIiLCJvcmRlciIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJncm91cCIsImZpbHRlcmVkR3JvdXBPcmRlciIsInJlc3RvcmVkTGF5ZXJPcmRlciIsImxheWVySWRzSW5SZXN0b3JlZCIsImNvbGxlY3RJZHMiLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwiYWRkIiwibWlzc2luZ0xheWVycyIsIm1lcmdlSW50ZXJhY3Rpb25zIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibWVyZ2VkIiwiT2JqZWN0Iiwia2V5cyIsImtleSIsImludGVyYWN0aW9uQ29uZmlnIiwiY3VycmVudENvbmZpZyIsIl9yZWYyIiwiZW5hYmxlZCIsImNvbmZpZ1NhdmVkIiwiX2V4Y2x1ZGVkIiwiY29uZmlnVG9NZXJnZSIsIl9tZXJnZUludGVyYWN0aW9uVG9vbCIsIm1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnIiwibWVyZ2VkVG9vbHRpcCIsInVubWVyZ2VkVG9vbHRpcCIsImZpZWxkc1RvU2hvdyIsInRvb2x0aXAiLCJuZXh0U3RhdGUiLCJzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24iLCJjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzIiwiY29uZmlncyIsImNvbWJpbmVkIiwiX2xvb3AyIiwidG9CZUNvbWJpbmVkUHJvcHMiLCJjIiwicCIsImNvbXBhcmVNb2RlIiwiY29tcGFyZVR5cGUiLCJnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZSIsInJlZHVjZSIsImFjYyIsIm5leHRGaWVsZHNUb1Nob3ciLCJfbG9vcDMiLCJuZXh0RGF0YUlkS2V5IiwibmV4dFRvb2x0aXBGaWVsZHMiLCJuZXh0VEYiLCJmaW5kIiwiX3JlZjMiLCJuYW1lIiwiX2FnZ3JlZ2F0ZSIsInNpemUiLCJtYXhpbXVtIiwibGltaXRTZWFyY2giLCJfdW5tZXJnZWQkdG9vbHRpcCIsIl91bm1lcmdlZCR0b29sdGlwMiIsIl9zdGF0ZSRpbnRlcmFjdGlvblRvQiIsIl91bm1lcmdlZCR0b29sdGlwMyIsInJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfaW50ZXJhY3Rpb25Db25maWckdG8iLCJfaW50ZXJhY3Rpb25Db25maWckdG8yIiwibWVyZ2VTcGxpdE1hcHMiLCJzcGxpdE1hcHMiLCJsYXllckV4aXN0cyIsImNyZWF0ZVBhbmVscyIsInNtIiwiaWRzIiwiZW50cmllcyIsInBhbmVsIiwiZnJvbUVudHJpZXMiLCJfcmVmNCIsIl9yZWY1IiwiX3NsaWNlZFRvQXJyYXkiLCJfcmVmNiIsIl9yZWY3Iiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsIm1lcmdlRWZmZWN0cyIsIm5ld0VmZmVjdHMiLCJlZmZlY3QiLCJhbGwiLCJpc0NvbmZpZ0FjdGl2ZSIsImlzVmFsaWRUb1NhdmUiLCJtZXJnZUFubm90YXRpb25zIiwiYW5ub3RhdGlvbnMiLCJleGlzdGluZ0lkcyIsImEiLCJ2YWxpZEFubm90YXRpb25zIiwia2luZCIsImFuY2hvclBvaW50IiwiZXZlcnkiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImlzVmlzaWJsZSIsImF1dG9TaXplIiwiYXV0b1NpemVZIiwibGFiZWwiLCJsaW5lQ29sb3IiLCJsaW5lV2lkdGgiLCJ0ZXh0V2lkdGgiLCJ0ZXh0SGVpZ2h0IiwidG9vbHRpcENvbmZpZyIsIl9sb29wNCIsImFsbEZpZWxkcyIsImZpZWxkcyIsImZvdW5kRmllbGRzVG9TaG93IiwiZmllbGQiLCJtZXJnZUxheWVyQmxlbmRpbmciLCJsYXllckJsZW5kaW5nIiwiY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzIiwibWVyZ2VPdmVybGF5QmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJjb21iaW5lT3ZlcmxheUJsZW5kaW5nQ29uZmlncyIsIm1lcmdlQW5pbWF0aW9uQ29uZmlnIiwiYW5pbWF0aW9uIiwiY3VycmVudFRpbWUiLCJhbmltYXRpb25Db25maWciLCJkb21haW4iLCJjb21iaW5lQW5pbWF0aW9uQ29uZmlncyIsIl9hZ2dyZWdhdGUyIiwiX2FnZ3JlZ2F0ZTMiLCJtaW5pbXVtIiwic3BlZWQiLCJ2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zIiwic2F2ZWRDb2xzIiwiZW1wdHlDb2xzIiwib3B0aW9ucyIsImNvbHVtbnMiLCJfbG9vcDUiLCJfT2JqZWN0JGtleXMiLCJfaSIsInNhdmVkIiwiZmllbGRJZHgiLCJfcmVmOCIsImFsbENvbEZvdW5kIiwidmFsaWRhdGVDb2x1bW4iLCJydiIsInRocm93T25FcnJvciIsInJlcXVpcmVkQ29sdW1ucyIsImsiLCJvcHRpb25hbCIsIm1pc3NpbmdDb2x1bW5zIiwiRXJyb3IiLCJqb2luIiwiY29uZmlnQ29sdW1ucyIsImludmFsaWRDb2x1bW5zIiwiX2NvbHVtbnMkayIsImNvbHVtbiIsInZhbGlkYXRvciIsInZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwiLCJfcmVmOSIsInNhdmVkVGV4dExhYmVsIiwiX3JlZjAiLCJsYXllclRleHRMYWJlbCIsInNhdmVkVGV4dExhYmVscyIsInRleHRMYWJlbCIsImZkIiwiSlNPTiIsInN0cmluZ2lmeSIsImFjY3UiLCJnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZSIsInNhdmVkTGF5ZXIiLCJjaGFubmVscyIsIl90eXBlb2YiLCJ2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMiLCJ2YWx1ZXMiLCJfcmVmMSIsInNjYWxlIiwic2F2ZWRGaWVsZCIsInNhdmVkU2NhbGUiLCJmb3VuZEZpZWxkIiwiZm91bmRDaGFubmVsIiwidXBkYXRlTGF5ZXJDb25maWciLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJfbmV3TGF5ZXIkY29uZmlnJGZpZWwiLCJmaWVsZE5hbWUiLCJfbGF5ZXIkY29uZmlnIiwidmFsaWRhdGVMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIl9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uIiwiY29sdW1uQ29uZmlnIiwiZ2V0TGF5ZXJDb2x1bW5zIiwiY29sTW9kZUNvbmZpZyIsImNvbHVtbk1vZGUiLCJzdXBwb3J0ZWRDb2x1bW5Nb2RlcyIsImNvbE1vZGUiLCJncm91cENvbHVtbnMiLCJjb2x1bW5Hcm91cHMiLCJmbGF0TWFwIiwicmVxdWlyZWRLZXlzIiwib3B0aW9uYWxDb2x1bW5zIiwiY29sIiwiX29wdGlvbmFsIiwicmVxdWlyZWRDb2wiLCJfZXhjbHVkZWQyIiwiZGF0YXNldCIsInR5cGUiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJoaWRkZW4iLCJoaWdobGlnaHRDb2xvciIsImNvcGllZFZpc0NvbmZpZyIsImNvcHlMYXllckNvbmZpZyIsInZpc0NvbmZpZyIsInNoYWxsb3dDb3B5IiwidmFsaWRhdGVWaXNDb25maWciLCJtZXJnZUVkaXRvciIsInNhdmVkRWRpdG9yIiwiX3NhdmVkRWRpdG9yJHZpc2libGUiLCJlZGl0b3IiLCJmZWF0dXJlcyIsInZpc2libGUiLCJjb21iaW5lRWRpdG9yQ29uZmlncyIsIm5leHRDb25maWciLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsIm5ld0RhdGFFbnRyaWVzIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJuZXdEYXRhc2V0SWRzIiwiX3N0YXRlJHByZXNlcnZlRGF0YXNlIiwiYXJyIiwiX3JlZjEzIiwidGFsbHlzIiwiTWFwIiwic2V0IiwiZ2V0IiwibmV4dCIsIlZJU19TVEFURV9NRVJHRVJTIiwibWVyZ2UiLCJwcm9wIiwidG9NZXJnZVByb3AiLCJwcmVzZXJ2ZU9yZGVyIiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJzYXZlVW5tZXJnZWQiLCJjb21iaW5lQ29uZmlncyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92aXMtc3RhdGUtbWVyZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB1bmlxIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3VuaXEnO1xuaW1wb3J0IHBpY2sgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvcGljayc7XG5pbXBvcnQgZmxhdHRlbkRlZXAgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvZmxhdHRlbkRlZXAnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtcbiAgYXJyYXlJbnNlcnQsXG4gIGNvbWJpbmVTcGxpdE1hcHNCeUluZGV4LFxuICBnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzLFxuICBmaW5kQnlJZCxcbiAgYWdncmVnYXRlLFxuICBpc1BsYWluT2JqZWN0XG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge0xheWVyfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5pbXBvcnQge1xuICBBR0dSRUdBVElPTl9UWVBFUyxcbiAgTEFZRVJfQkxFTkRJTkdTLFxuICBPVkVSTEFZX0JMRU5ESU5HUyxcbiAgaXNBbm5vdGF0aW9uS2luZCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Q1VSUkVOVF9WRVJTSU9OLCBWaXNTdGF0ZSwgVmlzU3RhdGVNZXJnZXJzLCBLZXBsZXJHTFNjaGVtYUNsYXNzfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge1xuICBQYXJzZWRMYXllcixcbiAgUGFyc2VkVmlzU3RhdGUsXG4gIFNhdmVkSW50ZXJhY3Rpb25Db25maWcsXG4gIFRvb2x0aXBJbmZvLFxuICBTYXZlZEVkaXRvcixcbiAgUGFyc2VkQ29uZmlnLFxuICBGaWx0ZXIsXG4gIEVmZmVjdCBhcyBFZmZlY3RUeXBlLFxuICBQYXJzZWRFZmZlY3QsXG4gIExheWVyQ29sdW1ucyxcbiAgTGF5ZXJDb2x1bW4sXG4gIFBhcnNlZEZpbHRlcixcbiAgTmVzdGVkUGFydGlhbCxcbiAgU2F2ZWRBbmltYXRpb25Db25maWcsXG4gIExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJHcm91cFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7S2VwbGVyVGFibGUsIERhdGFzZXRzLCBhc3NpZ25HcHVDaGFubmVscywgcmVzZXRGaWx0ZXJHcHVNb2RlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcblxuaW1wb3J0IHtnZXRMYXllck9yZGVyRnJvbUxheWVyc30gZnJvbSAnLi9sYXllci11dGlscyc7XG5cbi8qKlxuICogTWVyZ2UgbG9hZGVkIGZpbHRlcnMgd2l0aCBjdXJyZW50IHN0YXRlLCBpZiBubyBmaWVsZHMgb3IgZGF0YSBhcmUgbG9hZGVkXG4gKiBzYXZlIGl0IGZvciBsYXRlclxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRmlsdGVyczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZmlsdGVyc1RvTWVyZ2U6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2ZpbHRlcnMnXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBwcmVzZXJ2ZUZpbHRlck9yZGVyID0gZnJvbUNvbmZpZ1xuICAgID8gZmlsdGVyc1RvTWVyZ2U/Lm1hcChsID0+IGwuaWQpXG4gICAgOiBzdGF0ZS5wcmVzZXJ2ZUZpbHRlck9yZGVyO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXJzVG9NZXJnZSkgfHwgIWZpbHRlcnNUb01lcmdlLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHt2YWxpZGF0ZWQsIGZhaWxlZCwgdXBkYXRlZERhdGFzZXRzfSA9IHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzKHN0YXRlLCBmaWx0ZXJzVG9NZXJnZSk7XG4gIGxldCB1cGRhdGVkRmlsdGVycyA9IGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gICAgc3RhdGUuZmlsdGVycyxcbiAgICB2YWxpZGF0ZWQsXG4gICAgcHJlc2VydmVGaWx0ZXJPcmRlclxuICApO1xuXG4gIC8vIG1lcmdlIGZpbHRlciB3aXRoIGV4aXN0aW5nXG4gIHVwZGF0ZWRGaWx0ZXJzID0gcmVzZXRGaWx0ZXJHcHVNb2RlKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgdXBkYXRlZEZpbHRlcnMgPSBhc3NpZ25HcHVDaGFubmVscyh1cGRhdGVkRmlsdGVycyk7XG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGRhdGFzZXRzVG9GaWx0ZXIgPSB1bmlxKGZsYXR0ZW5EZWVwKHZhbGlkYXRlZC5tYXAoZiA9PiBmLmRhdGFJZCkpKTtcblxuICBjb25zdCBmaWx0ZXJlZCA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgZGF0YXNldHNUb0ZpbHRlcixcbiAgICB1cGRhdGVkRGF0YXNldHMsXG4gICAgdXBkYXRlZEZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiB1cGRhdGVkRmlsdGVycyxcbiAgICBkYXRhc2V0czogZmlsdGVyZWQsXG4gICAgcHJlc2VydmVGaWx0ZXJPcmRlcixcbiAgICBmaWx0ZXJUb0JlTWVyZ2VkOiBbLi4uc3RhdGUuZmlsdGVyVG9CZU1lcmdlZCwgLi4uZmFpbGVkXVxuICB9O1xufVxuXG4vLyByZXBsYWNlIGRhdGFJZCBpbiBzYXZlZCBGaWx0ZXJcbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRmlsdGVyRGF0YXNldElkcyhcbiAgc2F2ZWRGaWx0ZXI6IEZpbHRlcltdLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IHJlcGxhY2VkOiBGaWx0ZXJbXSA9IFtdO1xuICBzYXZlZEZpbHRlci5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgaWYgKGZpbHRlci5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgICAgY29uc3QgbmV3RGF0YUlkID0gZmlsdGVyLmRhdGFJZC5tYXAoZCA9PiAoZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkKSk7XG4gICAgICBsZXQgcGxvdFR5cGU7XG4gICAgICAvLyBUT0RPOiBtb3JlIGdlbmVyaWMgYXBwcm9hY2ggdG8gc2F2ZSBwbG90VHlwZS5jb2xvcnNCeURhdGFJZFxuICAgICAgaWYgKGZpbHRlci5wbG90VHlwZT8uY29sb3JzQnlEYXRhSWQ/LltkYXRhSWRdKSB7XG4gICAgICAgIC8vIHJlcGxhY2UgY29sb3JCeURhdGFJZCBpbiBmaWx0ZXIucGxvdFR5cGVcbiAgICAgICAgY29uc3Qge1tkYXRhSWRdOiBjb2xvciwgLi4ucmVzdH0gPSBmaWx0ZXIucGxvdFR5cGU/LmNvbG9yc0J5RGF0YUlkIHx8IHt9O1xuICAgICAgICBwbG90VHlwZSA9IHtcbiAgICAgICAgICAuLi5maWx0ZXIucGxvdFR5cGUsXG4gICAgICAgICAgY29sb3JzQnlEYXRhSWQ6IHtcbiAgICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgICAgICBbZGF0YUlkVG9Vc2VdOiBjb2xvclxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJlcGxhY2VkLnB1c2goe1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkLFxuICAgICAgICAuLi4ocGxvdFR5cGUgPyB7cGxvdFR5cGV9IDoge30pXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTYXZlZExheWVyQ29uZmlnVjEobGF5ZXJDb25maWc6IGFueSk6IGJvb2xlYW4ge1xuICAvLyBleHBvcnRlZCBsYXllciBjb25maWd1cmF0aW9uIGNvbnRhaW5zIHZpc3VhbENoYW5uZWxzIHByb3BlcnR5XG4gIHJldHVybiBsYXllckNvbmZpZz8udmlzdWFsQ2hhbm5lbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxheWVyQ29uZmlnKFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3MsXG4gIGxheWVyQ29uZmlnOiBhbnlcbik6IFBhcnNlZExheWVyIHwgdW5kZWZpbmVkIHtcbiAgLy8gYXNzdW1lIHRoZSBsYXllciBjb25maWcgaXMgY3VycmVudCB2ZXJzaW9uXG4gIGNvbnN0IHNhdmVkQ29uZmlnID0ge1xuICAgIHZlcnNpb246IENVUlJFTlRfVkVSU0lPTixcbiAgICBjb25maWc6IHtcbiAgICAgIHZpc1N0YXRlOiB7bGF5ZXJzOiBbbGF5ZXJDb25maWddLCBsYXllck9yZGVyOiBbbGF5ZXJDb25maWcuaWRdfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gc2NoZW1hLnBhcnNlU2F2ZWRDb25maWcoc2F2ZWRDb25maWcpPy52aXNTdGF0ZT8ubGF5ZXJzPy5bMF07XG59XG5cbmZ1bmN0aW9uIGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gIGN1cnJlbnRJdGVtczogRmlsdGVyW10sXG4gIGl0ZW1zOiBGaWx0ZXJbXSxcbiAgcHJlc2VydmVkT3JkZXI6IGFueVtdID0gW10sXG4gIGRlZmF1bHRTdGFydD86IGJvb2xlYW5cbikge1xuICBsZXQgbmV3SXRlbXMgPSBbLi4uY3VycmVudEl0ZW1zXTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBleHBlY3RlZElkeCA9IHByZXNlcnZlZE9yZGVyLmluZGV4T2YoaXRlbS5pZCk7XG4gICAgLy8gaW5zZXJ0QXQgdGhlIGVuZCBieSBkZWZhdWx0XG4gICAgbGV0IGluc2VydEF0ID0gZGVmYXVsdFN0YXJ0ID8gMCA6IG5ld0l0ZW1zLmxlbmd0aDtcbiAgICBpZiAoZXhwZWN0ZWRJZHggPiAwKSB7XG4gICAgICAvLyBsb29rIGZvciBsYXllciB0byBpbnNlcnQgYWZ0ZXJcbiAgICAgIGxldCBpID0gZXhwZWN0ZWRJZHggKyAxO1xuICAgICAgbGV0IHByZWNlZWRJZHggPSAtMTtcbiAgICAgIHdoaWxlIChpLS0gPiAwICYmIHByZWNlZWRJZHggPCAwKSB7XG4gICAgICAgIC8vIGtlZXAgbG9va2luZyBmb3IgcHJlY2VlZCBsYXllciB0aGF0IGlzIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIGNvbnN0IHByZWNlZWRJdGVtSWQgPSBwcmVzZXJ2ZWRPcmRlcltpIC0gMV07XG4gICAgICAgIHByZWNlZWRJZHggPSBuZXdJdGVtcy5maW5kSW5kZXgoZCA9PiBkLmlkID09PSBwcmVjZWVkSXRlbUlkKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVjZWVkSWR4ID4gLTEpIHtcbiAgICAgICAgLy8gaWYgZm91bmRcbiAgICAgICAgaW5zZXJ0QXQgPSBwcmVjZWVkSWR4ICsgMTtcbiAgICAgIH1cbiAgICB9XG4gICAgbmV3SXRlbXMgPSBhcnJheUluc2VydChuZXdJdGVtcywgaW5zZXJ0QXQsIGl0ZW0pO1xuICB9XG4gIHJldHVybiBuZXdJdGVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZTogVmlzU3RhdGUsIGxheWVyQ29uZmlnOiBhbnkpOiBMYXllciB8IG51bGwge1xuICAvLyBjaGVjayBpZiB0aGUgbGF5ZXIgY29uZmlnIGlzIHBhcnNlZFxuICBjb25zdCBwYXJzZWRMYXllckNvbmZpZyA9IGlzU2F2ZWRMYXllckNvbmZpZ1YxKGxheWVyQ29uZmlnKVxuICAgID8gcGFyc2VMYXllckNvbmZpZyhzdGF0ZS5zY2hlbWEsIGxheWVyQ29uZmlnKVxuICAgIDogbGF5ZXJDb25maWc7XG5cbiAgaWYgKCFwYXJzZWRMYXllckNvbmZpZykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIGZpcnN0IHZhbGlkYXRlIGNvbmZpZyBhZ2FpbnN0IGRhdGFzZXRcbiAgY29uc3Qge3ZhbGlkYXRlZCwgZmFpbGVkfSA9IHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgW3BhcnNlZExheWVyQ29uZmlnXSxcbiAgICB7YWxsb3dFbXB0eUNvbHVtbjogdHJ1ZX1cbiAgKTtcblxuICBpZiAoZmFpbGVkPy5sZW5ndGggfHwgIXZhbGlkYXRlZC5sZW5ndGgpIHtcbiAgICAvLyBmYWlsZWRcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVkWzBdO1xuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGZpbHRlciBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGaWx0ZXIoXG4gIG5ld0ZpbHRlcjogRmlsdGVyLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHtmaWx0ZXJzOiBbbmV3RmlsdGVyXX0sIHNjaGVtYSk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmZpbHRlcnM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGxheWVyIGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUxheWVyKFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkTGF5ZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShcbiAgICB7bGF5ZXJzOiBbbmV3TGF5ZXJdLCBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWRdfSxcbiAgICBzY2hlbWFcbiAgKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8ubGF5ZXJzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBlZmZlY3QgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRWZmZWN0KFxuICBuZXdFZmZlY3Q6IEVmZmVjdFR5cGUsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkRWZmZWN0IHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoXG4gICAge2VmZmVjdHM6IFtuZXdFZmZlY3RdLCBlZmZlY3RPcmRlcjogW25ld0VmZmVjdC5pZF19LFxuICAgIHNjaGVtYVxuICApO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5lZmZlY3RzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IHZpcyBzdGF0ZSBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVZpc1N0YXRlKFxuICB2aXNTdGF0ZTogUGFydGlhbDxWaXNTdGF0ZT4sXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkVmlzU3RhdGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBzYXZlZFN0YXRlID0gc2NoZW1hLmdldENvbmZpZ1RvU2F2ZSh7XG4gICAgdmlzU3RhdGVcbiAgfSk7XG4gIHJldHVybiBzYXZlZFN0YXRlID8gc2NoZW1hLnBhcnNlU2F2ZWRDb25maWcoc2F2ZWRTdGF0ZSk/LnZpc1N0YXRlIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBNZXJnZSBsYXllcnMgZnJvbSBkZS1zZXJpYWxpemVkIHN0YXRlLCBpZiBubyBmaWVsZHMgb3IgZGF0YSBhcmUgbG9hZGVkXG4gKiBzYXZlIGl0IGZvciBsYXRlclxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBsYXllcnNUb01lcmdlOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IGZyb21Db25maWdcbiAgICA/IGdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGxheWVyc1RvTWVyZ2UpXG4gICAgOiBzdGF0ZS5wcmVzZXJ2ZUxheWVyT3JkZXI7XG4gIGlmICghQXJyYXkuaXNBcnJheShsYXllcnNUb01lcmdlKSB8fCAhbGF5ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gZG9uJ3QgbWVyZ2UgbGF5ZXIgaWYgZGF0YXNldCBpcyBiZWluZyBtZXJnZWRcbiAgY29uc3QgdW5tZXJnZWQ6IFBhcnNlZExheWVyW10gPSBbXTtcbiAgY29uc3QgdG9NZXJnZTogUGFyc2VkTGF5ZXJbXSA9IFtdO1xuICBsYXllcnNUb01lcmdlLmZvckVhY2goKGw6IFBhcnNlZExheWVyKSA9PiB7XG4gICAgaWYgKGw/LmNvbmZpZz8uZGF0YUlkICYmIHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2wuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgIHVubWVyZ2VkLnB1c2gobCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvTWVyZ2UucHVzaChsKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHt2YWxpZGF0ZWQ6IG1lcmdlZExheWVyLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICB0b01lcmdlXG4gICk7XG4gIHVubWVyZ2VkLnB1c2goLi4uZmFpbGVkKTtcbiAgLy8gcHV0IG5ldyBsYXllcnMgaW4gZnJvbnQgb2YgY3VycmVudCBsYXllcnNcbiAgY29uc3Qge25ld0xheWVyT3JkZXIsIG5ld0xheWVyc30gPSBpbnNlcnRMYXllckF0UmlnaHRPcmRlcihcbiAgICBzdGF0ZS5sYXllcnMsXG4gICAgbWVyZ2VkTGF5ZXIsXG4gICAgc3RhdGUubGF5ZXJPcmRlcixcbiAgICBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgKTtcblxuICBsZXQgbWVyZ2VkU3RhdGU6IFMgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcixcbiAgICBwcmVzZXJ2ZUxheWVyT3JkZXIsXG4gICAgbGF5ZXJUb0JlTWVyZ2VkOiBbLi4uc3RhdGUubGF5ZXJUb0JlTWVyZ2VkLCAuLi51bm1lcmdlZF1cbiAgfTtcblxuICAvLyBBcHBseSBwZW5kaW5nIGxheWVyT3JkZXIgd2l0aCBncm91cHMgaWYgbGF5ZXJzIGFyZSBub3cgYXZhaWxhYmxlXG4gIGlmIChtZXJnZWRTdGF0ZS5sYXllck9yZGVyVG9CZU1lcmdlZCAmJiBtZXJnZWRTdGF0ZS5sYXllcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHNhdmVkT3JkZXIgPSBtZXJnZWRTdGF0ZS5sYXllck9yZGVyVG9CZU1lcmdlZDtcbiAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlTGF5ZXJPcmRlcihtZXJnZWRTdGF0ZSwgc2F2ZWRPcmRlcik7XG4gICAgLy8gS2VlcCBzYXZlZExheWVyT3JkZXIgYXZhaWxhYmxlIGZvciBmdXR1cmUgZGVmZXJyZWQgbGF5ZXJzXG4gICAgaWYgKG1lcmdlZFN0YXRlLmxheWVyVG9CZU1lcmdlZC5sZW5ndGggPiAwKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IHsuLi5tZXJnZWRTdGF0ZSwgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IHNhdmVkT3JkZXJ9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICBjdXJyZW50TGF5ZXJzLFxuICBsYXllcnNUb0luc2VydCxcbiAgY3VycmVudE9yZGVyLFxuICBwcmVzZXJ2ZWRPcmRlcjogc3RyaW5nW10gPSBbXVxuKSB7XG4gIGlmICghbGF5ZXJzVG9JbnNlcnQ/Lmxlbmd0aCkge1xuICAgIHJldHVybiB7bmV3TGF5ZXJzOiBjdXJyZW50TGF5ZXJzLCBuZXdMYXllck9yZGVyOiBjdXJyZW50T3JkZXJ9O1xuICB9XG5cbiAgY29uc3QgY3VycmVudExheWVyUXVldWUgPSBjdXJyZW50T3JkZXJcbiAgICAuZmlsdGVyKGVudHJ5ID0+IHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpXG4gICAgLm1hcChpZCA9PiBmaW5kQnlJZChpZCkoY3VycmVudExheWVycykpXG4gICAgLmZpbHRlcihsYXllciA9PiBCb29sZWFuKGxheWVyKSk7XG4gIGNvbnN0IG5ld0xheWVycyA9IGN1cnJlbnRMYXllcnMuY29uY2F0KGxheWVyc1RvSW5zZXJ0KTtcbiAgY29uc3QgbmV3TGF5ZXJPcmRlclF1ZXVlID0gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgICBjdXJyZW50TGF5ZXJRdWV1ZSxcbiAgICBsYXllcnNUb0luc2VydCxcbiAgICBwcmVzZXJ2ZWRPcmRlcixcbiAgICB0cnVlXG4gICk7XG5cbiAgY29uc3QgbmV3RmxhdExheWVyT3JkZXIgPSBnZXRMYXllck9yZGVyRnJvbUxheWVycyhuZXdMYXllck9yZGVyUXVldWUpO1xuXG4gIC8vIElmIG5vIGdyb3VwcyBleGlzdCBpbiBjdXJyZW50IG9yZGVyLCBqdXN0IHVzZSB0aGUgbmV3IGZsYXQgb3JkZXJcbiAgY29uc3QgaGFzR3JvdXBzID0gY3VycmVudE9yZGVyLnNvbWUoZW50cnkgPT4gaXNQbGFpbk9iamVjdChlbnRyeSkpO1xuICBpZiAoIWhhc0dyb3Vwcykge1xuICAgIHJldHVybiB7XG4gICAgICBuZXdMYXllck9yZGVyOiBuZXdGbGF0TGF5ZXJPcmRlcixcbiAgICAgIG5ld0xheWVyc1xuICAgIH07XG4gIH1cblxuICAvLyBSZWJ1aWxkIGxheWVyT3JkZXIgcHJlc2VydmluZyBncm91cHMgaW4gdGhlaXIgcmVsYXRpdmUgcG9zaXRpb25zLlxuICAvLyBSZXBsYWNlIGVhY2ggc3RyaW5nIGVudHJ5IHdpdGggaXRzIHVwZGF0ZWQgcG9zaXRpb24gZnJvbSBuZXdGbGF0TGF5ZXJPcmRlcixcbiAgLy8gYW5kIGtlZXAgZ3JvdXBzIGFzLWlzLlxuICBjb25zdCBleGlzdGluZ0ZsYXRJZHMgPSBuZXcgU2V0KFxuICAgIGN1cnJlbnRPcmRlci5maWx0ZXIoZW50cnkgPT4gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykgYXMgc3RyaW5nW11cbiAgKTtcbiAgY29uc3QgbmV3SW5zZXJ0ZWRJZHMgPSBuZXdGbGF0TGF5ZXJPcmRlci5maWx0ZXIoaWQgPT4gIWV4aXN0aW5nRmxhdElkcy5oYXMoaWQpKTtcblxuICAvLyBSZWJ1aWxkOiB3YWxrIHRocm91Z2ggY3VycmVudE9yZGVyLCByZXBsYWNlIHN0cmluZyBlbnRyaWVzIHdpdGggdGhlaXJcbiAgLy8gbmV3IHBvc2l0aW9uIGVxdWl2YWxlbnRzIGZyb20gbmV3RmxhdExheWVyT3JkZXIsIHRoZW4gYXBwZW5kIGFueSBuZXdseSBpbnNlcnRlZCBsYXllcnNcbiAgY29uc3QgcmVzdWx0OiBMYXllck9yZGVyID0gW107XG4gIGNvbnN0IGZsYXRRdWV1ZSA9IFsuLi5uZXdGbGF0TGF5ZXJPcmRlci5maWx0ZXIoaWQgPT4gZXhpc3RpbmdGbGF0SWRzLmhhcyhpZCkpXTtcbiAgbGV0IGZsYXRJZHggPSAwO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgY3VycmVudE9yZGVyKSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICByZXN1bHQucHVzaChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXBsYWNlIHdpdGggY29ycmVzcG9uZGluZyBlbnRyeSBmcm9tIHJlb3JkZXJlZCBmbGF0IGxpc3RcbiAgICAgIGlmIChmbGF0SWR4IDwgZmxhdFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQucHVzaChmbGF0UXVldWVbZmxhdElkeF0pO1xuICAgICAgICBmbGF0SWR4Kys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQXBwZW5kIGFueSBuZXdseSBpbnNlcnRlZCBsYXllcnMgYXQgdGhlIGZyb250ICh0aGV5IGFyZSBuZXcpXG4gIHJldHVybiB7XG4gICAgbmV3TGF5ZXJPcmRlcjogWy4uLm5ld0luc2VydGVkSWRzLCAuLi5yZXN1bHRdLFxuICAgIG5ld0xheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIHNhdmVkIGxheWVyT3JkZXIgd2l0aCBjdXJyZW50IHN0YXRlIHRvIHJlc3RvcmUgbGF5ZXIgZ3JvdXBzLlxuICogQ2FsbGVkIGFmdGVyIGxheWVycyBoYXZlIGJlZW4gbWVyZ2VkLiBJZiB0aGUgc2F2ZWQgY29uZmlnIGNvbnRhaW5zIGEgbGF5ZXJPcmRlclxuICogd2l0aCBncm91cHMsIHRoaXMgcmVwbGFjZXMgdGhlIGZsYXQgbGF5ZXJPcmRlciB3aXRoIHRoZSBzYXZlZCBoaWVyYXJjaGljYWwgb25lLFxuICogZmlsdGVyaW5nIG91dCBhbnkgbGF5ZXIgSURzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyT3JkZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHNhdmVkTGF5ZXJPcmRlcj86IGFueVtdLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGlmICghc2F2ZWRMYXllck9yZGVyIHx8ICFBcnJheS5pc0FycmF5KHNhdmVkTGF5ZXJPcmRlcikgfHwgc2F2ZWRMYXllck9yZGVyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBzYXZlZCBsYXllck9yZGVyIGNvbnRhaW5zIGFueSBncm91cHNcbiAgY29uc3QgaGFzR3JvdXBzID0gc2F2ZWRMYXllck9yZGVyLnNvbWUoZW50cnkgPT4gaXNQbGFpbk9iamVjdChlbnRyeSkpO1xuICBpZiAoIWhhc0dyb3Vwcykge1xuICAgIC8vIE5vIGdyb3VwcyAtIHRoZSBsYXllciBtZXJnZXIgYWxyZWFkeSBoYW5kbGVkIG9yZGVyaW5nIHZpYSBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiBsYXllcnMgaGF2ZW4ndCBiZWVuIG1lcmdlZCB5ZXQsIHN0b3JlIGZvciBsYXRlclxuICBpZiAoc3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBzYXZlZExheWVyT3JkZXJcbiAgICB9O1xuICB9XG5cbiAgLy8gQnVpbGQgYSBzZXQgb2YgdmFsaWQgbGF5ZXIgSURzIGZyb20gY3VycmVudCBzdGF0ZVxuICBjb25zdCB2YWxpZExheWVySWRzID0gbmV3IFNldChzdGF0ZS5sYXllcnMubWFwKGwgPT4gbC5pZCkpO1xuXG4gIC8vIFJlY3Vyc2l2ZWx5IGZpbHRlciB0aGUgc2F2ZWQgbGF5ZXJPcmRlciB0byBvbmx5IGluY2x1ZGUgdmFsaWQgbGF5ZXJzXG4gIGZ1bmN0aW9uIGZpbHRlckxheWVyT3JkZXIob3JkZXI6IGFueVtdKTogTGF5ZXJPcmRlciB7XG4gICAgY29uc3QgcmVzdWx0OiBMYXllck9yZGVyID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBvcmRlcikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEdyb3VwT3JkZXIgPSBmaWx0ZXJMYXllck9yZGVyKGdyb3VwLmxheWVyT3JkZXIpO1xuICAgICAgICAvLyBLZWVwIHRoZSBncm91cCBldmVuIGlmIGVtcHR5ICh1c2VyIG1heSB3YW50IHRoZSBlbXB0eSBncm91cClcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IGZpbHRlcmVkR3JvdXBPcmRlclxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyAmJiB2YWxpZExheWVySWRzLmhhcyhlbnRyeSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY29uc3QgcmVzdG9yZWRMYXllck9yZGVyID0gZmlsdGVyTGF5ZXJPcmRlcihzYXZlZExheWVyT3JkZXIpO1xuXG4gIC8vIEZpbmQgYW55IGxheWVycyBpbiB0aGUgY3VycmVudCBzdGF0ZSB0aGF0IGFyZW4ndCBpbiB0aGUgcmVzdG9yZWQgb3JkZXJcbiAgLy8gKGNvdWxkIGhhcHBlbiBpZiBsYXllcnMgd2VyZSBhZGRlZCBiZXR3ZWVuIHNhdmUgYW5kIGxvYWQpXG4gIGNvbnN0IGxheWVySWRzSW5SZXN0b3JlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmdW5jdGlvbiBjb2xsZWN0SWRzKG9yZGVyOiBhbnlbXSkge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2Ygb3JkZXIpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgICBjb2xsZWN0SWRzKChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmxheWVyT3JkZXIpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGxheWVySWRzSW5SZXN0b3JlZC5hZGQoZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb2xsZWN0SWRzKHJlc3RvcmVkTGF5ZXJPcmRlcik7XG5cbiAgLy8gQWRkIGFueSBtaXNzaW5nIGxheWVycyBhdCB0aGUgdG9wXG4gIGNvbnN0IG1pc3NpbmdMYXllcnMgPSBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gIWxheWVySWRzSW5SZXN0b3JlZC5oYXMobC5pZCkpLm1hcChsID0+IGwuaWQpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogWy4uLm1pc3NpbmdMYXllcnMsIC4uLnJlc3RvcmVkTGF5ZXJPcmRlcl0sXG4gICAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IG51bGxcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbnMgd2l0aCBzYXZlZCBjb25maWdcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+IHwgdW5kZWZpbmVkXG4pOiBTIHtcbiAgY29uc3QgbWVyZ2VkOiBOZXN0ZWRQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG4gIGNvbnN0IHVubWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG5cbiAgaWYgKGludGVyYWN0aW9uVG9CZU1lcmdlZCkge1xuICAgIChPYmplY3Qua2V5cyhpbnRlcmFjdGlvblRvQmVNZXJnZWQpIGFzIEFycmF5PGtleW9mIFNhdmVkSW50ZXJhY3Rpb25Db25maWc+KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50Q29uZmlnID1cbiAgICAgICAga2V5ID09PSAndG9vbHRpcCcgfHwga2V5ID09PSAnYnJ1c2gnIHx8IGtleSA9PT0gJ2dlb2NvZGVyJ1xuICAgICAgICAgID8gc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWdcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgIGNvbnN0IHtlbmFibGVkLCAuLi5jb25maWdTYXZlZH0gPSBpbnRlcmFjdGlvblRvQmVNZXJnZWRba2V5XSB8fCB7fTtcblxuICAgICAgbGV0IGNvbmZpZ1RvTWVyZ2UgPSBjb25maWdTYXZlZDtcblxuICAgICAgaWYgKGtleSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAgIGNvbnN0IHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9ID0gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29uZmlnU2F2ZWQgYXMgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZ1sndG9vbHRpcCddXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gbWVyZ2UgbmV3IGRhdGFzZXQgdG9vbHRpcHMgd2l0aCBvcmlnaW5hbCBkYXRhc2V0IHRvb2x0aXBzXG4gICAgICAgIGNvbmZpZ1RvTWVyZ2UgPSB7XG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgICAuLi4oY3VycmVudENvbmZpZyBhcyBUb29sdGlwSW5mb1snY29uZmlnJ10pLmZpZWxkc1RvU2hvdyxcbiAgICAgICAgICAgIC4uLm1lcmdlZFRvb2x0aXBcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHVubWVyZ2VkVG9vbHRpcCkubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIHVubWVyZ2VkLnRvb2x0aXAgPSB7ZmllbGRzVG9TaG93OiB1bm1lcmdlZFRvb2x0aXAsIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCl9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1lcmdlZFtrZXldID0ge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLFxuICAgICAgICBlbmFibGVkOiBCb29sZWFuKGVuYWJsZWQpLFxuICAgICAgICAuLi4oY3VycmVudENvbmZpZ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjb25maWc6IHBpY2soXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLi4uY3VycmVudENvbmZpZyxcbiAgICAgICAgICAgICAgICAgIC4uLmNvbmZpZ1RvTWVyZ2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25maWcpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAuLi5tZXJnZWRcbiAgICB9LFxuICAgIGludGVyYWN0aW9uVG9CZU1lcmdlZDogc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uKHN0YXRlLCB1bm1lcmdlZClcbiAgfTtcbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUludGVyYWN0aW9uQ29uZmlncyhjb25maWdzOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnW10pOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnIHtcbiAgY29uc3QgY29tYmluZWQgPSB7Li4uY29uZmlnc1swXX07XG4gIC8vIGhhbmRsZSBlYWNoIHByb3BlcnR5IGtleSBvZiBhbiBgSW50ZXJhY3Rpb25Db25maWdgLCBlLmcuIHRvb2x0aXAsIGdlb2NvZGVyLCBicnVzaCwgY29vcmRpbmF0ZVxuICAvLyBieSBjb21iaW5pbmcgdmFsdWVzIGZvciBlYWNoIGFtb25nIGFsbCBwYXNzZWQgaW4gY29uZmlnc1xuXG4gIGZvciAoY29uc3Qga2V5IGluIGNvbWJpbmVkKSB7XG4gICAgY29uc3QgdG9CZUNvbWJpbmVkUHJvcHMgPSBjb25maWdzLm1hcChjID0+IGNba2V5XSk7XG5cbiAgICAvLyBhbGwgb2YgdGhlc2UgaGF2ZSBhbiBlbmFibGVkIGJvb2xlYW5cbiAgICBjb21iaW5lZFtrZXldID0ge1xuICAgICAgLy8gYXJlIGFueSBvZiB0aGUgY29uZmlncycgZW5hYmxlZCB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGVuYWJsZWQ6IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5lbmFibGVkKVxuICAgIH07XG5cbiAgICBpZiAoa2V5ID09PSAndG9vbHRpcCcpIHtcbiAgICAgIC8vIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIGNvbXBhcmVNb2RlIHZhbHVlcyB0cnVlP1xuICAgICAgY29tYmluZWRba2V5XS5jb21wYXJlTW9kZSA9IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5jb21wYXJlTW9kZSk7XG5cbiAgICAgIC8vIHJldHVybiB0aGUgY29tcGFyZSB0eXBlIG1vZGUsIGl0IHdpbGwgYmUgZWl0aGVyIGFic29sdXRlIG9yIHJlbGF0aXZlXG4gICAgICBjb21iaW5lZFtrZXldLmNvbXBhcmVUeXBlID0gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoXG4gICAgICAgIHRvQmVDb21iaW5lZFByb3BzLm1hcChwID0+IHAuY29tcGFyZVR5cGUpXG4gICAgICApO1xuXG4gICAgICAvLyBjb21iaW5lIGZpZWxkc1RvU2hvdyBhbW9uZyBhbGwgZGF0YXNldCBpZHNcbiAgICAgIGNvbWJpbmVkW2tleV0uZmllbGRzVG9TaG93ID0gdG9CZUNvbWJpbmVkUHJvcHNcbiAgICAgICAgLm1hcChwID0+IHAuZmllbGRzVG9TaG93KVxuICAgICAgICAucmVkdWNlKChhY2MsIG5leHRGaWVsZHNUb1Nob3cpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG5leHREYXRhSWRLZXkgaW4gbmV4dEZpZWxkc1RvU2hvdykge1xuICAgICAgICAgICAgY29uc3QgbmV4dFRvb2x0aXBGaWVsZHMgPSBuZXh0RmllbGRzVG9TaG93W25leHREYXRhSWRLZXldO1xuICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0pIHtcbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGRhdGFzZXQgaWQgaXMgbm90IHByZXNlbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICAgICAgICAgIC8vIHRoZW4gYWRkIGl0IHdpdGggaXRzIHRvb2x0aXAgZmllbGRzXG4gICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XSA9IG5leHRUb29sdGlwRmllbGRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHRoZSBkYXRhc2V0IGlkIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgICAgICAgICAgLy8gc28gb25seSBhZGQgdGhlIG5leHQgdG9vbHRpcCBmaWVsZHMgZm9yIHRoaXMgZGF0YXNldCdzIGFycmF5IGlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5IHByZXNlbnQsXG4gICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSB0b29sdGlwRmllbGQubmFtZSBwcm9wZXJ0eSBmb3IgdW5pcXVlbmVzc1xuICAgICAgICAgICAgICBuZXh0VG9vbHRpcEZpZWxkcy5mb3JFYWNoKG5leHRURiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0uZmluZCgoe25hbWV9KSA9PiBuZXh0VEYubmFtZSA9PT0gbmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XS5wdXNoKG5leHRURik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdicnVzaCcpIHtcbiAgICAgIC8vIGtlZXAgdGhlIGJpZ2dlc3QgYnJ1c2ggc2l6ZVxuICAgICAgY29tYmluZWRba2V5XS5zaXplID1cbiAgICAgICAgYWdncmVnYXRlKHRvQmVDb21iaW5lZFByb3BzLCBBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtLCBwID0+IHAuc2l6ZSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnZ2VvY29kZXInKSB7XG4gICAgICBjb21iaW5lZFtrZXldLmxpbWl0U2VhcmNoID0gdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmxpbWl0U2VhcmNoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29tYmluZWQ7XG59XG5cbmZ1bmN0aW9uIHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgdW5tZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz5cbikge1xuICBpZiAoIXVubWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3cpIHtcbiAgICByZXR1cm4gc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkO1xuICB9XG4gIHJldHVybiB7XG4gICAgdG9vbHRpcDoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkLnRvb2x0aXAsXG4gICAgICAuLi4odHlwZW9mIHVubWVyZ2VkPy50b29sdGlwPy5lbmFibGVkID09PSAnYm9vbGVhbidcbiAgICAgICAgPyB7ZW5hYmxlZDogdW5tZXJnZWQudG9vbHRpcC5lbmFibGVkfVxuICAgICAgICA6IHt9KSxcbiAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvdyxcbiAgICAgICAgLi4udW5tZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyhpbnRlcmFjdGlvbkNvbmZpZywgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcD8uZmllbGRzVG9TaG93W2RhdGFJZF0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAsXG4gICAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAgIFtkYXRhSWRUb1JlcGxhY2VdOiBpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcD8uZmllbGRzVG9TaG93W2RhdGFJZF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTWVyZ2Ugc3BsaXRNYXBzIGNvbmZpZyB3aXRoIGN1cnJlbnQgdmlzU3RldGUuXG4gKiBQYW5lbHMgYXJlIG1hdGNoZWQgYnkgaW5kZXg6IGluZGV4IGkgb2YgYHNwbGl0TWFwc2AsIGBzdGF0ZS5zcGxpdE1hcHNgIGFuZFxuICogYHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWRgIGlzIHRoZSBzYW1lIG1hcCBwYW5lbC5cbiAqIDEuIGlmIGN1cnJlbnQgbWFwIGlzIHNwbGl0LCBidXQgc3BsaXRNYXAgRE9FU05PVCBjb250YWluIG1hcHNcbiAqICAgIDogZG9uJ3QgbWVyZ2UgYW55dGhpbmdcbiAqIDIuIGlmIGN1cnJlbnQgbWFwIGlzIE5PVCBzcGxpdCwgYnV0IHNwbGl0TWFwcyBjb250YWluIG1hcHNcbiAqICAgIDogYWRkIHRvIHNwbGl0TWFwcywgYW5kIGFkZCBjdXJyZW50IGxheWVycyB0byBzcGxpdE1hcHMuXG4gKiAgICAgIFBhbmVscyBhcmUgY3JlYXRlZCBvbmNlIG9uZSBvZiB0aGVtIGNhbiBiZSBtZXJnZWQ6IGl0IGhhcyBubyBsYXllcnMsIG9yIG9uZSBvZiBpdHMgbGF5ZXJzIGV4aXN0c1xuICogMy4gbGF5ZXJzIHRoYXQgZG9uJ3QgZXhpc3QgeWV0XG4gKiAgICA6IHNhdmUgdG8gc3BsaXRNYXBzVG9CZU1lcmdlZCwgaW4gdGhlIHBhbmVsIGF0IHRoZSBzYW1lIGluZGV4XG4gKiBBIGxheWVyIGxpc3RlZCBpbiBzcGxpdE1hcHMgb25seSBzaG93cyBpbiB0aGUgcGFuZWxzIHRoYXQgbGlzdCBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlU3BsaXRNYXBzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBzcGxpdE1hcHM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ3NwbGl0TWFwcyddID0gW11cbik6IFMge1xuICBjb25zdCBsYXllckV4aXN0cyA9IChpZDogc3RyaW5nKSA9PiBzdGF0ZS5sYXllcnMuc29tZShsID0+IGwuaWQgPT09IGlkKTtcbiAgY29uc3QgY3JlYXRlUGFuZWxzID1cbiAgICBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID4gMCB8fFxuICAgIHNwbGl0TWFwcy5zb21lKHNtID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IE9iamVjdC5rZXlzKHNtLmxheWVycyk7XG4gICAgICByZXR1cm4gIWlkcy5sZW5ndGggfHwgaWRzLnNvbWUobGF5ZXJFeGlzdHMpO1xuICAgIH0pO1xuICBjb25zdCBjdXJyZW50TGF5ZXJzID0gZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwKFxuICAgIHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiAhc3BsaXRNYXBzLnNvbWUoc20gPT4gbC5pZCBpbiBzbS5sYXllcnMpKVxuICApO1xuXG4gIGNvbnN0IG1lcmdlZCA9IFsuLi5zdGF0ZS5zcGxpdE1hcHNdO1xuICBjb25zdCB1bm1lcmdlZDogdHlwZW9mIHNwbGl0TWFwcyA9IFtdO1xuICBzcGxpdE1hcHMuZm9yRWFjaCgoc20sIGkpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoc20ubGF5ZXJzKTtcbiAgICBpZiAoY3JlYXRlUGFuZWxzKSB7XG4gICAgICAvLyBjcmVhdGUgbWFwIHBhbmVsIGlmIGN1cnJlbnQgbWFwIGlzIG5vdCBzcGxpdCwga2VlcCBpZFxuICAgICAgY29uc3QgcGFuZWwgPSBtZXJnZWRbaV0gfHwgey4uLnNtLCBsYXllcnM6IGN1cnJlbnRMYXllcnN9O1xuICAgICAgbWVyZ2VkW2ldID0ge1xuICAgICAgICAuLi5wYW5lbCxcbiAgICAgICAgbGF5ZXJzOiB7Li4ucGFuZWwubGF5ZXJzLCAuLi5PYmplY3QuZnJvbUVudHJpZXMoZW50cmllcy5maWx0ZXIoKFtpZF0pID0+IGxheWVyRXhpc3RzKGlkKSkpfVxuICAgICAgfTtcbiAgICB9XG4gICAgdW5tZXJnZWRbaV0gPSB7Li4uc20sIGxheWVyczogT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMuZmlsdGVyKChbaWRdKSA9PiAhbGF5ZXJFeGlzdHMoaWQpKSl9O1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogbWVyZ2VkLFxuICAgIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IHVubWVyZ2VkLnNvbWUoc20gPT4gT2JqZWN0LmtleXMoc20ubGF5ZXJzKS5sZW5ndGgpXG4gICAgICA/IGNvbWJpbmVTcGxpdE1hcHNCeUluZGV4KHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQsIHVubWVyZ2VkKVxuICAgICAgOiBzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgZWZmZWN0cyB3aXRoIHNhdmVkIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFZmZlY3RzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBlZmZlY3RzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydlZmZlY3RzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgbmV3RWZmZWN0cyA9IFtcbiAgICAuLi5zdGF0ZS5lZmZlY3RzLFxuICAgIC4uLihlZmZlY3RzIHx8IFtdKVxuICAgICAgLm1hcChlZmZlY3QgPT4ge1xuICAgICAgICByZXR1cm4gZnJvbUNvbmZpZ1xuICAgICAgICAgID8gY3JlYXRlRWZmZWN0KFxuICAgICAgICAgICAgICBkZWVwbWVyZ2UuYWxsKFtcbiAgICAgICAgICAgICAgICBlZmZlY3QsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLy8gY29sbGFwc2UgYWxsIHBhbmVscyB3aGVuIGxvYWRpbmcgZWZmZWN0c1xuICAgICAgICAgICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogKGVmZmVjdCBhcyBFZmZlY3RUeXBlKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKGVmZmVjdCAmJiBlZmZlY3QuaXNWYWxpZFRvU2F2ZSgpKTtcbiAgICAgIH0pXG4gIF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlcjogbmV3RWZmZWN0cy5tYXAoZWZmZWN0ID0+IGVmZmVjdC5pZClcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbm5vdGF0aW9ucyB3aXRoIHNhdmVkIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbm5vdGF0aW9uczxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhbm5vdGF0aW9uczogYW55W10pOiBTIHtcbiAgaWYgKCFhbm5vdGF0aW9ucyB8fCAhYW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChzdGF0ZS5hbm5vdGF0aW9ucy5tYXAoYSA9PiBhLmlkKSk7XG4gIGNvbnN0IHZhbGlkQW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uc1xuICAgIC5maWx0ZXIoXG4gICAgICBhID0+XG4gICAgICAgIGEgJiZcbiAgICAgICAgYS5pZCAmJlxuICAgICAgICAhZXhpc3RpbmdJZHMuaGFzKGEuaWQpICYmXG4gICAgICAgIGlzQW5ub3RhdGlvbktpbmQoYS5raW5kKSAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KGEuYW5jaG9yUG9pbnQpICYmXG4gICAgICAgIChhLmFuY2hvclBvaW50Lmxlbmd0aCA9PT0gMiB8fCBhLmFuY2hvclBvaW50Lmxlbmd0aCA9PT0gMykgJiZcbiAgICAgICAgYS5hbmNob3JQb2ludC5ldmVyeSh2YWx1ZSA9PiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKVxuICAgIClcbiAgICAubWFwKGEgPT4gKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGF1dG9TaXplOiB0cnVlLFxuICAgICAgYXV0b1NpemVZOiB0cnVlLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgbGluZUNvbG9yOiBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgICAgIGxpbmVXaWR0aDogSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gICAgICB0ZXh0V2lkdGg6IDAsXG4gICAgICB0ZXh0SGVpZ2h0OiAwLFxuICAgICAgLi4uYVxuICAgIH0pKTtcbiAgaWYgKCF2YWxpZEFubm90YXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbLi4uc3RhdGUuYW5ub3RhdGlvbnMsIC4uLnZhbGlkQW5ub3RhdGlvbnNdXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCB3aXRoIHNhdmVkIGNvbmZpZyxcbiAqIHZhbGlkYXRlIGZpZWxkc1RvU2hvd1xuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIHRvb2x0aXBDb25maWdcbiAqIEByZXR1cm4gLSB7bWVyZ2VkVG9vbHRpcDoge30sIHVubWVyZ2VkVG9vbHRpcDoge319XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB0b29sdGlwQ29uZmlnOiBQaWNrPFRvb2x0aXBJbmZvWydjb25maWcnXSwgJ2ZpZWxkc1RvU2hvdyc+IHwgbnVsbCA9IG51bGxcbikge1xuICBjb25zdCB1bm1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcbiAgY29uc3QgbWVyZ2VkVG9vbHRpcDogVG9vbHRpcEluZm9bJ2NvbmZpZyddWydmaWVsZHNUb1Nob3cnXSA9IHt9O1xuXG4gIGlmIChcbiAgICAhdG9vbHRpcENvbmZpZyB8fFxuICAgICF0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdyB8fFxuICAgICFPYmplY3Qua2V5cyh0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykubGVuZ3RoXG4gICkge1xuICAgIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZGF0YUlkIGluIHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KSB7XG4gICAgaWYgKCFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIHx8IHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICAgIC8vIGlzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICB1bm1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGRhdGFzZXQgaXMgbG9hZGVkXG4gICAgICBjb25zdCBhbGxGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcy5tYXAoZCA9PiBkLm5hbWUpO1xuICAgICAgY29uc3QgZm91bmRGaWVsZHNUb1Nob3cgPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdLmZpbHRlcihmaWVsZCA9PlxuICAgICAgICBhbGxGaWVsZHMuaW5jbHVkZXMoZmllbGQubmFtZSlcbiAgICAgICk7XG5cbiAgICAgIG1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IGZvdW5kRmllbGRzVG9TaG93O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJCbGVuZGluZyB3aXRoIHNhdmVkXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllckJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBsYXllckJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllckJsZW5kaW5nJ11cbik6IFMge1xuICBpZiAobGF5ZXJCbGVuZGluZyAmJiBMQVlFUl9CTEVORElOR1NbbGF5ZXJCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllckJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBsYXllciBibGVuZGluZyBjb25maWdzIGludG8gYSBzaW5nbGUgc3RyaW5nXG4gKiBieSByZXR1cm5pbmcgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IG9jY3VycmVuY2VcbiAqL1xuZnVuY3Rpb24gY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzKGNvbmZpZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgbGF5ZXIgYmxlbmRpbmcgdHlwZVxuICByZXR1cm4gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncyk7XG59XG5cbi8qKlxuICogTWVyZ2Ugb3ZlcmxheUJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlT3ZlcmxheUJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBvdmVybGF5QmxlbmRpbmc6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ292ZXJsYXlCbGVuZGluZyddXG4pOiBTIHtcbiAgaWYgKG92ZXJsYXlCbGVuZGluZyAmJiBPVkVSTEFZX0JMRU5ESU5HU1tvdmVybGF5QmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgb3ZlcmxheUJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBvdmVybGF5IGJsZW5kaW5nIGNvbmZpZ3MgaW50byBhIHNpbmdsZSBzdHJpbmdcbiAqIGJ5IHJldHVybmluZyB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3Qgb2NjdXJyZW5jZVxuICoqL1xuZnVuY3Rpb24gY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3MoY29uZmlnczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gcmV0dXJuIHRoZSBtb2RlIG9mIHRoZSBvdmVybGF5IGJsZW5kaW5nIHR5cGVcbiAgcmV0dXJuIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MpO1xufVxuXG4vKipcbiAqIE1lcmdlIGFuaW1hdGlvbiBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5pbWF0aW9uQ29uZmlnPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhbmltYXRpb246IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2FuaW1hdGlvbkNvbmZpZyddXG4pOiBTIHtcbiAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24uY3VycmVudFRpbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5hbmltYXRpb24sXG4gICAgICAgIGRvbWFpbjogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVBbmltYXRpb25Db25maWdzKGNvbmZpZ3M6IFNhdmVkQW5pbWF0aW9uQ29uZmlnW10pOiBTYXZlZEFuaW1hdGlvbkNvbmZpZyB7XG4gIC8vIGdldCB0aGUgc21hbGxlc3QgdmFsdWVzIG9mIGN1cnJlbnRUaW1lIGFuZCBzcGVlZCBhbW9uZyBhbGwgY29uZmlnc1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnRUaW1lOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLmN1cnJlbnRUaW1lKSA/PyBudWxsLFxuICAgIHNwZWVkOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLnNwZWVkKSA/PyBudWxsXG4gIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29sdW1ucyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqXG4gKiBAcGFyYW0gZmllbGRzXG4gKiBAcGFyYW0gc2F2ZWRDb2xzXG4gKiBAcGFyYW0gZW1wdHlDb2xzXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybiAtIHZhbGlkYXRlZCBjb2x1bW5zIG9yIG51bGxcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIHNhdmVkQ29sczoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgfSA9IHt9LFxuICBlbXB0eUNvbHM6IExheWVyQ29sdW1ucyxcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbikge1xuICAvLyBQcmVwYXJlIGNvbHVtbnMgZm9yIHRoZSB2YWxpZGF0b3JcbiAgY29uc3QgY29sdW1uczogdHlwZW9mIGVtcHR5Q29scyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhlbXB0eUNvbHMpKSB7XG4gICAgY29sdW1uc1trZXldID0gey4uLmVtcHR5Q29sc1trZXldfTtcblxuICAgIGNvbnN0IHNhdmVkID0gc2F2ZWRDb2xzW2tleV07XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IGZpZWxkcy5maW5kSW5kZXgoKHtuYW1lfSkgPT4gbmFtZSA9PT0gc2F2ZWQpO1xuXG4gICAgICBpZiAoZmllbGRJZHggPiAtMSkge1xuICAgICAgICAvLyB1cGRhdGUgZm91bmQgY29sdW1uc1xuICAgICAgICBjb2x1bW5zW2tleV0uZmllbGRJZHggPSBmaWVsZElkeDtcbiAgICAgICAgY29sdW1uc1trZXldLnZhbHVlID0gc2F2ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZmluZCBhY3R1YWwgY29sdW1uIGZpZWxkSWR4LCBpbiBjYXNlIGl0IGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGFsbENvbEZvdW5kID0gT2JqZWN0LmtleXMoY29sdW1ucykuZXZlcnkoa2V5ID0+XG4gICAgdmFsaWRhdGVDb2x1bW4oY29sdW1uc1trZXldLCBjb2x1bW5zLCBmaWVsZHMpXG4gICk7XG5cbiAgY29uc3QgcnYgPSBhbGxDb2xGb3VuZCA/IGNvbHVtbnMgOiBudWxsO1xuICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICBjb25zdCByZXF1aXJlZENvbHVtbnMgPSBPYmplY3Qua2V5cyhlbXB0eUNvbHMpLmZpbHRlcihrID0+ICFlbXB0eUNvbHNba10ub3B0aW9uYWwpO1xuICAgIGNvbnN0IG1pc3NpbmdDb2x1bW5zID0gcmVxdWlyZWRDb2x1bW5zLmZpbHRlcihrID0+ICFjb2x1bW5zPy5ba10udmFsdWUpO1xuICAgIGlmIChtaXNzaW5nQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIG1pc3Npbmcgb3IgaW52YWxpZCBjb2x1bW5zOiAke21pc3NpbmdDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ0NvbHVtbnMgPSBPYmplY3Qua2V5cyhzYXZlZENvbHMpO1xuICAgIGNvbnN0IGludmFsaWRDb2x1bW5zID0gY29uZmlnQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdPy52YWx1ZSk7XG4gICAgaWYgKGludmFsaWRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCBjb2x1bW5zOiAke2ludmFsaWRDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJ2O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGxheWVyIGNvbHVtblxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb2x1bW4oXG4gIGNvbHVtbjogTGF5ZXJDb2x1bW4gJiB7dmFsaWRhdG9yPzogdHlwZW9mIHZhbGlkYXRlQ29sdW1ufSxcbiAgY29sdW1uczogTGF5ZXJDb2x1bW5zLFxuICBhbGxGaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXVxuKTogYm9vbGVhbiB7XG4gIGlmIChjb2x1bW4ub3B0aW9uYWwgfHwgY29sdW1uLnZhbHVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGNvbHVtbi52YWxpZGF0b3IpIHtcbiAgICByZXR1cm4gY29sdW1uLnZhbGlkYXRvcihjb2x1bW4sIGNvbHVtbnMsIGFsbEZpZWxkcyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHRleHQgbGFiZWwgY29uZmlnIHdpdGggbmV3IGRhdGFcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVGV4dExhYmVsU2NoZW1hVjFcbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGZpZWxkc1xuICogQHBhcmFtIHtPYmplY3R9IHNhdmVkVGV4dExhYmVsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7T2JqZWN0fSAtIHZhbGlkYXRlZCB0ZXh0bGFiZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwoXG4gIGZpZWxkcyxcbiAgW2xheWVyVGV4dExhYmVsXSxcbiAgc2F2ZWRUZXh0TGFiZWwsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pIHtcbiAgY29uc3Qgc2F2ZWRUZXh0TGFiZWxzID0gQXJyYXkuaXNBcnJheShzYXZlZFRleHRMYWJlbCkgPyBzYXZlZFRleHRMYWJlbCA6IFtzYXZlZFRleHRMYWJlbF07XG5cbiAgLy8gdmFsaWRhdGUgZmllbGRcbiAgcmV0dXJuIHNhdmVkVGV4dExhYmVscy5tYXAodGV4dExhYmVsID0+IHtcbiAgICBjb25zdCBmaWVsZCA9IHRleHRMYWJlbC5maWVsZFxuICAgICAgPyBmaWVsZHMuZmluZChmZCA9PlxuICAgICAgICAgIE9iamVjdC5rZXlzKHRleHRMYWJlbC5maWVsZCkuZXZlcnkoa2V5ID0+IHRleHRMYWJlbC5maWVsZFtrZXldID09PSBmZFtrZXldKVxuICAgICAgICApXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB0ZXh0IGxhYmVsIGZpZWxkOiAke0pTT04uc3RyaW5naWZ5KHRleHRMYWJlbC5maWVsZCl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxheWVyVGV4dExhYmVsKS5yZWR1Y2UoXG4gICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XToga2V5ID09PSAnZmllbGQnID8gZmllbGQgOiB0ZXh0TGFiZWxba2V5XSB8fCBsYXllclRleHRMYWJlbFtrZXldXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogU2F2ZWQgdmlzdWFsIGNoYW5uZWwgZmllbGQvc2NhbGUgbWF5IGxpdmUgaW4gYW55IG9mOlxuICogLSBgY29uZmlnW2tleV1gIGFmdGVyIHNjaGVtYSBwYXJzZSAoVmlzdWFsQ2hhbm5lbFNjaGVtYVYxIGZvbGRzIGNoYW5uZWxzIGludG8gY29uZmlnKVxuICogLSBgdmlzdWFsQ2hhbm5lbHNba2V5XWAgYXMgYSBzaWJsaW5nIG9mIGBjb25maWdgICh1bnBhcnNlZCBhZGREYXRhVG9NYXAgcGF5bG9hZClcbiAqIC0gYGNvbmZpZy52aXN1YWxDaGFubmVsc1trZXldYCAoY29tbW9uIG1pc3Rha2Ugb2YgbmVzdGluZyB2aXN1YWxDaGFubmVscyBpbnNpZGUgY29uZmlnKVxuICpcbiAqIFdpdGhvdXQgdGhpcyBsb29rdXAsIHByb2dyYW1tYXRpYyBHZW9KU09OIHN0cm9rZUNvbG9yRmllbGQgbmV2ZXIgYmluZHMgYW5kXG4gKiBzdHJva2VDb2xvckRvbWFpbiBzdGF5cyBhdCB0aGUgZGVmYXVsdCBgWzAsIDFdYCAoa2VwbGVyLmdsICMzMDYxKS5cbiAqL1xuZnVuY3Rpb24gZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUoc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsIGtleTogc3RyaW5nKTogYW55IHtcbiAgY29uc3QgY29uZmlnID0gc2F2ZWRMYXllci5jb25maWcgYXMgUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZDtcbiAgaWYgKGNvbmZpZyAmJiBjb25maWdba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNvbmZpZ1trZXldO1xuICB9XG4gIGNvbnN0IGNoYW5uZWxzID1cbiAgICAoc2F2ZWRMYXllciBhcyB7dmlzdWFsQ2hhbm5lbHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+fSkudmlzdWFsQ2hhbm5lbHMgfHxcbiAgICAoY29uZmlnICYmIGNvbmZpZy52aXN1YWxDaGFubmVscyk7XG4gIGlmIChjaGFubmVscyAmJiB0eXBlb2YgY2hhbm5lbHMgPT09ICdvYmplY3QnICYmIGNoYW5uZWxzW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjaGFubmVsc1trZXldO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgdmlzdWFsIGNoYW5uZWxzIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIG5ld0xheWVyOiBMYXllcixcbiAgc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pOiBudWxsIHwgTGF5ZXIge1xuICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGQsIHNjYWxlLCBrZXl9KSA9PiB7XG4gICAgY29uc3Qgc2F2ZWRGaWVsZCA9IGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXIsIGZpZWxkKTtcbiAgICBjb25zdCBzYXZlZFNjYWxlID0gZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUoc2F2ZWRMYXllciwgc2NhbGUpO1xuICAgIGxldCBmb3VuZEZpZWxkO1xuICAgIGlmIChzYXZlZEZpZWxkPy5uYW1lKSB7XG4gICAgICBmb3VuZEZpZWxkID0gZmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gc2F2ZWRGaWVsZC5uYW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3VuZENoYW5uZWwgPSB7XG4gICAgICAuLi4oZm91bmRGaWVsZCA/IHtbZmllbGRdOiBmb3VuZEZpZWxkfSA6IHt9KSxcbiAgICAgIC4uLihzYXZlZFNjYWxlID8ge1tzY2FsZV06IHNhdmVkU2NhbGV9IDoge30pXG4gICAgfTtcbiAgICBpZiAoT2JqZWN0LmtleXMoZm91bmRDaGFubmVsKS5sZW5ndGgpIHtcbiAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGZvdW5kQ2hhbm5lbCk7XG4gICAgfVxuXG4gICAgbmV3TGF5ZXIudmFsaWRhdGVWaXN1YWxDaGFubmVsKGtleSk7XG4gICAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBzYXZlZEZpZWxkPy5uYW1lO1xuICAgICAgaWYgKGZpZWxkTmFtZSAmJiBmaWVsZE5hbWUgIT09IG5ld0xheWVyLmNvbmZpZ1tmaWVsZF0/Lm5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB2aXN1YWwgY2hhbm5lbCBmaWVsZDogJHtmaWVsZH1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbnR5cGUgVmFsaWRhdGVMYXllck9wdGlvbiA9IHtcbiAgYWxsb3dFbXB0eUNvbHVtbj86IGJvb2xlYW47XG4gIHRocm93T25FcnJvcj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBsYXllcnM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIG9wdGlvbnM/OiBWYWxpZGF0ZUxheWVyT3B0aW9uXG4pIHtcbiAgY29uc3QgdmFsaWRhdGVkOiBMYXllcltdID0gW107XG4gIGNvbnN0IGZhaWxlZDogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXTtcblxuICBsYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbGV0IHZhbGlkYXRlTGF5ZXI6IExheWVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAobGF5ZXI/LmNvbmZpZz8uZGF0YUlkKSB7XG4gICAgICBpZiAoZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgICAgLy8gZGF0YXNldHMgYXJlIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIHZhbGlkYXRlTGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gICAgICAgICAgZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0sXG4gICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgbGF5ZXJDbGFzc2VzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVMYXllcikge1xuICAgICAgdmFsaWRhdGVkLnB1c2godmFsaWRhdGVMYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRhdGFzZXRzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICBmYWlsZWQucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge3ZhbGlkYXRlZCwgZmFpbGVkfTtcbn1cblxuLyoqXG4gKiBHZXQgcmVxdWlyZWQgY29sdW1ucyBmb3IgdmFsaWRhdGlvbiBiYXNlZCBvbiBjb2x1bW4gbW9kZVxuICovXG5mdW5jdGlvbiBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcikge1xuICAvLyBmaW5kIGNvbHVtbiBmaWVsZElkeFxuICBsZXQgY29sdW1uQ29uZmlnID0gbmV3TGF5ZXIuZ2V0TGF5ZXJDb2x1bW5zKCk7XG4gIC8vIGlmIGNvbHVtbk1vZGUgaXMgZGVmaW5lZCwgZmluZCBjb2x1bW4gbW9kZSBjb25maWdcbiAgY29uc3QgY29sTW9kZUNvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgPyAobmV3TGF5ZXIuc3VwcG9ydGVkQ29sdW1uTW9kZXMgfHwgW10pLmZpbmQoXG4gICAgICAgIGNvbE1vZGUgPT4gY29sTW9kZS5rZXkgPT09IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChjb2xNb2RlQ29uZmlnKSB7XG4gICAgLy8gb25seSB2YWxpZGF0ZSBjb2x1bW5zIGluIGNvbHVtbiBtb2RlIChpbmNsdWRpbmcgdGFiYmVkIGNvbHVtbkdyb3VwcylcbiAgICBjb25zdCBncm91cENvbHVtbnMgPSAoY29sTW9kZUNvbmZpZy5jb2x1bW5Hcm91cHMgfHwgW10pLmZsYXRNYXAoZ3JvdXAgPT4gZ3JvdXAuY29sdW1ucyB8fCBbXSk7XG4gICAgY29uc3QgcmVxdWlyZWRLZXlzID0gbmV3IFNldChjb2xNb2RlQ29uZmlnLnJlcXVpcmVkQ29sdW1ucyB8fCBbXSk7XG4gICAgY29sdW1uQ29uZmlnID0gW1xuICAgICAgLi4uKGNvbE1vZGVDb25maWcucmVxdWlyZWRDb2x1bW5zIHx8IFtdKSxcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLm9wdGlvbmFsQ29sdW1ucyB8fCBbXSksXG4gICAgICAuLi5ncm91cENvbHVtbnNcbiAgICBdLnJlZHVjZSgoYWNjdSwga2V5KSA9PiB7XG4gICAgICBjb25zdCBjb2wgPSBjb2x1bW5Db25maWdba2V5XTtcbiAgICAgIGlmICghY29sKSB7XG4gICAgICAgIHJldHVybiBhY2N1O1xuICAgICAgfVxuICAgICAgLy8gT3B0aW9uYWxpdHkgbXVzdCBmb2xsb3cgdGhlIGFjdGl2ZSBtb2RlOiBhIGZpZWxkIG9wdGlvbmFsIGluIGFub3RoZXIgbW9kZVxuICAgICAgLy8gKGUuZy4gYWx0aXR1ZGUgaW4gVVYpIGlzIHN0aWxsIHJlcXVpcmVkIHdoZW4gdGhpcyBtb2RlIGxpc3RzIGl0IGluIHJlcXVpcmVkQ29sdW1ucy5cbiAgICAgIGlmIChyZXF1aXJlZEtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgY29uc3Qge29wdGlvbmFsOiBfb3B0aW9uYWwsIC4uLnJlcXVpcmVkQ29sfSA9IGNvbDtcbiAgICAgICAgcmV0dXJuIHsuLi5hY2N1LCBba2V5XTogcmVxdWlyZWRDb2x9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBba2V5XTogey4uLmNvbCwgb3B0aW9uYWw6IHRydWV9fTtcbiAgICB9LCB7fSk7XG4gIH1cblxuICByZXR1cm4gY29sdW1uQ29uZmlnO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgbGF5ZXJDbGFzc2VzOiBWaXNTdGF0ZVsnbGF5ZXJDbGFzc2VzJ10sXG4gIG9wdGlvbnM6IFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7fVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3Qge2ZpZWxkcywgaWQ6IGRhdGFJZH0gPSBkYXRhc2V0O1xuICBjb25zdCB7dHlwZX0gPSBzYXZlZExheWVyO1xuICBjb25zdCB7dGhyb3dPbkVycm9yfSA9IG9wdGlvbnM7XG4gIC8vIGxheWVyIGRvZXNudCBoYXZlIGEgdmFsaWQgdHlwZVxuICBpZiAoIXR5cGUgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsYXllckNsYXNzZXMsIHR5cGUpIHx8ICFzYXZlZExheWVyLmNvbmZpZykge1xuICAgIGlmICh0aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdHlwZSBcIiR7dHlwZX1cIiBvciBjb25maWcgaXMgbWlzc2luZ2ApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbdHlwZV0oe1xuICAgIGlkOiBzYXZlZExheWVyLmlkLFxuICAgIGRhdGFJZCxcbiAgICBsYWJlbDogc2F2ZWRMYXllci5jb25maWcubGFiZWwsXG4gICAgY29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbG9yLFxuICAgIGlzVmlzaWJsZTogc2F2ZWRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGhpZGRlbjogc2F2ZWRMYXllci5jb25maWcuaGlkZGVuLFxuICAgIGNvbHVtbk1vZGU6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbk1vZGUsXG4gICAgaGlnaGxpZ2h0Q29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmhpZ2hsaWdodENvbG9yXG4gIH0pO1xuXG4gIGNvbnN0IGNvbHVtbkNvbmZpZyA9IF9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uKG5ld0xheWVyKTtcblxuICBpZiAoT2JqZWN0LmtleXMoY29sdW1uQ29uZmlnKSkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKFxuICAgICAgZmllbGRzLFxuICAgICAgc2F2ZWRMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgIGNvbHVtbkNvbmZpZyxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgICAgICAuLi5jb2x1bW5zXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuYWxsb3dFbXB0eUNvbHVtbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGV4dExhYmVsID1cbiAgICBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwgJiYgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbFxuICAgICAgPyB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKFxuICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICBuZXdMYXllci5jb25maWcudGV4dExhYmVsLFxuICAgICAgICAgIHNhdmVkTGF5ZXIuY29uZmlnLnRleHRMYWJlbCxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIClcbiAgICAgIDogbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbDtcblxuICAvLyBjb3B5IHZpc0NvbmZpZyBvdmVyIHRvIGVtcHR5TGF5ZXIgdG8gbWFrZSBzdXJlIGl0IGhhcyBhbGwgdGhlIHByb3BzXG4gIGNvbnN0IGNvcGllZFZpc0NvbmZpZyA9IG5ld0xheWVyLmNvcHlMYXllckNvbmZpZyhcbiAgICBuZXdMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIHNhdmVkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyB8fCB7fSxcbiAgICB7XG4gICAgICBzaGFsbG93Q29weTogWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXVxuICAgIH1cbiAgKTtcblxuICAvLyBjYWxsIGxheWVyIG1ldGhvZHMgdG8gdmFsaWRhdGUgdmlzQ29uZmlnIHdoZW4gc3dpdGNoaW5nIGRhdGFzZXRcbiAgY29uc3QgdmlzQ29uZmlnID0gbmV3TGF5ZXIudmFsaWRhdGVWaXNDb25maWdcbiAgICA/IG5ld0xheWVyLnZhbGlkYXRlVmlzQ29uZmlnKGRhdGFzZXQsIGNvcGllZFZpc0NvbmZpZylcbiAgICA6IGNvcGllZFZpc0NvbmZpZztcblxuICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgdmlzQ29uZmlnLFxuICAgIHRleHRMYWJlbFxuICB9KTtcblxuICAvLyB2aXN1YWwgY2hhbm5lbCBmaWVsZCBpcyBzYXZlZCB0byBiZSB7bmFtZSwgdHlwZX1cbiAgLy8gZmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZCBieSBtYXRjaGluZyBib3RoIG5hbWUgYW5kIHR5cGVcbiAgLy8gcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAgbmV3TGF5ZXIgPSB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoZmllbGRzLCBuZXdMYXllciwgc2F2ZWRMYXllciwgb3B0aW9ucyk7XG5cbiAgaWYgKHRocm93T25FcnJvcikge1xuICAgIGlmICghbmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlOiAke25ld0xheWVyLmlkfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWRpdG9yPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIHNhdmVkRWRpdG9yOiBTYXZlZEVkaXRvcikge1xuICBpZiAoIXNhdmVkRWRpdG9yKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgLi4uKHNhdmVkRWRpdG9yLmZlYXR1cmVzIHx8IFtdKV0sXG4gICAgICAvLyBpZiBzYXZlZEVkaXRvci52aXNpYmxlIGlzIHVuZGVmaW5lZCBrZWVwIHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgICB2aXNpYmxlOiBzYXZlZEVkaXRvci52aXNpYmxlID8/IHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21iaW5lRWRpdG9yQ29uZmlncyhjb25maWdzOiBTYXZlZEVkaXRvcltdKTogU2F2ZWRFZGl0b3Ige1xuICByZXR1cm4gY29uZmlncy5yZWR1Y2UoXG4gICAgKGFjYywgbmV4dENvbmZpZykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBmZWF0dXJlczogWy4uLmFjYy5mZWF0dXJlcywgLi4uKG5leHRDb25maWcuZmVhdHVyZXMgfHwgW10pXVxuICAgICAgfTtcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIHN0YXJ0IHdpdGg6XG4gICAgICAvLyAtIGVtcHR5IGFycmF5IGZvciBmZWF0dXJlcyBhY2N1bXVsYXRpb25cbiAgICAgIC8vIC0gYW5kIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIHZpc2libGUgdmFsdWVzIHRydWU/XG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICB2aXNpYmxlOiBjb25maWdzLnNvbWUoYyA9PiBjPy52aXNpYmxlKVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZTogVmlzU3RhdGUsIG5ld0RhdGFFbnRyaWVzOiBEYXRhc2V0cyk6IERhdGFzZXRzIHtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIC4uLm5ld0RhdGFFbnRyaWVzXG4gIH07XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIpKSB7XG4gICAgLy8gcHJlc2VydmVEYXRhc2V0T3JkZXIgIG1pZ2h0IG5vdCBpbmNsdWRlIHRoZSAgbmV3IGRhdGFzZXRzXG4gICAgY29uc3QgbmV3RGF0YXNldElkcyA9IE9iamVjdC5rZXlzKG1lcmdlZCkuZmlsdGVyKFxuICAgICAgaWQgPT4gIXN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyPy5pbmNsdWRlcyhpZClcbiAgICApO1xuICAgIHJldHVybiBbLi4uc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIsIC4uLm5ld0RhdGFzZXRJZHNdLnJlZHVjZShcbiAgICAgIChhY2N1LCBkYXRhSWQpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIC4uLihtZXJnZWRbZGF0YUlkXSA/IHtbZGF0YUlkXTogbWVyZ2VkW2RhdGFJZF19IDoge30pXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogU2ltbGlhciBwdXJwb3NlIHRvIGFnZ3JlZ2F0aW9uIHV0aWxzIGBnZXRNb2RlYCBmdW5jdGlvbixcbiAqIGJ1dCByZXR1cm5zIHRoZSBtb2RlIGluIHRoZSBzYW1lIHZhbHVlIHR5cGUgd2l0aG91dCBjb2VyY2luZyB0byBhIHN0cmluZy5cbiAqIEl0IGlnbm9yZXMgYHVuZGVmaW5lZGAgb3IgYG51bGxgIHZhbHVlcywgYnV0IHJldHVybnMgYG51bGxgIGlmIG5vIG1vZGUgY291bGQgYmUgY2FsY3VsYXRlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2U8VD4oYXJyOiBUW10pOiBUIHwgbnVsbCB7XG4gIGNvbnN0IHRhbGx5cyA9IG5ldyBNYXAoKTtcbiAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgIGlmIChub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICBpZiAoIXRhbGx5cy5oYXModmFsdWUpKSB7XG4gICAgICAgIHRhbGx5cy5zZXQodmFsdWUsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFsbHlzLnNldCh2YWx1ZSwgdGFsbHlzLmdldCh2YWx1ZSkgKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvLyByZXR1cm4gdGhlIHZhbHVlIHdpdGggdGhlIGhpZ2hlc3QgdG90YWwgb2NjdXJyZW5jZSBjb3VudFxuICBpZiAodGFsbHlzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gWy4uLnRhbGx5cy5lbnRyaWVzKCldPy5yZWR1Y2UoKGFjYywgbmV4dCkgPT4gKG5leHRbMV0gPiBhY2NbMV0gPyBuZXh0IDogYWNjKSlbMF07XG59XG5cbmV4cG9ydCBjb25zdCBWSVNfU1RBVEVfTUVSR0VSUzogVmlzU3RhdGVNZXJnZXJzPGFueT4gPSBbXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllcnMsXG4gICAgcHJvcDogJ2xheWVycycsXG4gICAgdG9NZXJnZVByb3A6ICdsYXllclRvQmVNZXJnZWQnLFxuICAgIHByZXNlcnZlT3JkZXI6ICdwcmVzZXJ2ZUxheWVyT3JkZXInXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllck9yZGVyLFxuICAgIHByb3A6ICdsYXllck9yZGVyJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlRmlsdGVycyxcbiAgICBwcm9wOiAnZmlsdGVycycsXG4gICAgdG9NZXJnZVByb3A6ICdmaWx0ZXJUb0JlTWVyZ2VkJyxcbiAgICBwcmVzZXJ2ZU9yZGVyOiAncHJlc2VydmVGaWx0ZXJPcmRlcicsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VFZmZlY3RzLFxuICAgIHByb3A6ICdlZmZlY3RzJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlQW5ub3RhdGlvbnMsXG4gICAgcHJvcDogJ2Fubm90YXRpb25zJyxcbiAgICB0b01lcmdlUHJvcDogJ2Fubm90YXRpb25zVG9CZU1lcmdlZCdcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUludGVyYWN0aW9ucyxcbiAgICBwcm9wOiAnaW50ZXJhY3Rpb25Db25maWcnLFxuICAgIHRvTWVyZ2VQcm9wOiAnaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyxcbiAgICBzYXZlVW5tZXJnZWQ6IHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbixcbiAgICBjb21iaW5lQ29uZmlnczogY29tYmluZUludGVyYWN0aW9uQ29uZmlnc1xuICB9LFxuICB7bWVyZ2U6IG1lcmdlTGF5ZXJCbGVuZGluZywgcHJvcDogJ2xheWVyQmxlbmRpbmcnLCBjb21iaW5lQ29uZmlnczogY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZU92ZXJsYXlCbGVuZGluZyxcbiAgICBwcm9wOiAnb3ZlcmxheUJsZW5kaW5nJyxcbiAgICBjb21iaW5lQ29uZmlnczogY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3NcbiAgfSxcbiAge21lcmdlOiBtZXJnZVNwbGl0TWFwcywgcHJvcDogJ3NwbGl0TWFwcycsIHRvTWVyZ2VQcm9wOiAnc3BsaXRNYXBzVG9CZU1lcmdlZCd9LFxuICB7bWVyZ2U6IG1lcmdlQW5pbWF0aW9uQ29uZmlnLCBwcm9wOiAnYW5pbWF0aW9uQ29uZmlnJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVBbmltYXRpb25Db25maWdzfSxcbiAge21lcmdlOiBtZXJnZUVkaXRvciwgcHJvcDogJ2VkaXRvcicsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lRWRpdG9yQ29uZmlnc31cbl07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQSxPQUFPQSxJQUFJLE1BQU0sd0JBQXdCO0FBQ3pDLE9BQU9DLElBQUksTUFBTSx3QkFBd0I7QUFDekMsT0FBT0MsV0FBVyxNQUFNLCtCQUErQjtBQUN2RCxPQUFPQyxTQUFTLE1BQU0sV0FBVztBQUNqQyxTQUNFQyxXQUFXLEVBQ1hDLHVCQUF1QixFQUN2QkMsOEJBQThCLEVBQzlCQyxzQkFBc0IsRUFDdEJDLDZCQUE2QixFQUM3QkMsUUFBUSxFQUNSQyxTQUFTLEVBQ1RDLGFBQWEsUUFDUixrQkFBa0I7QUFHekIsU0FBUUMsWUFBWSxRQUFPLG9CQUFvQjtBQUMvQyxTQUFRQyxrQkFBa0IsUUFBTyx5QkFBeUI7QUFDMUQsU0FDRUMsaUJBQWlCLEVBQ2pCQyxlQUFlLEVBQ2ZDLGlCQUFpQixFQUNqQkMsZ0JBQWdCLEVBQ2hCQyw2QkFBNkIsRUFDN0JDLDZCQUE2QixRQUN4QixzQkFBc0I7QUFDN0IsU0FBUUMsZUFBZSxRQUF1RCxvQkFBb0I7QUFvQmxHLFNBQStCQyxpQkFBaUIsRUFBRUMsa0JBQWtCLFFBQU8sa0JBQWtCO0FBRTdGLFNBQVFDLHVCQUF1QixRQUFPLGVBQWU7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNDLFlBQVlB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
|